drm/i915: page flip support for Ironlake

This patch adds support for page flipping on Ironlake, which uses
different interrupt bits for triggering flip submit IRQs.

Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
[anholt: hand-resolved for rebasing off of render power saving patch]
Signed-off-by: Eric Anholt <eric@anholt.net>

authored by Jesse Barnes and committed by Eric Anholt 013d5aa2 f034b12d

+15 -4
+15 -4
drivers/gpu/drm/i915/i915_irq.c
··· 309 if (de_iir & DE_GSE) 310 ironlake_opregion_gse_intr(dev); 311 312 - if (de_iir & DE_PIPEA_VBLANK) 313 - drm_handle_vblank(dev, 0); 314 315 - if (de_iir & DE_PIPEB_VBLANK) 316 drm_handle_vblank(dev, 1); 317 318 /* check event from PCH */ 319 if ((de_iir & DE_PCH_EVENT) && ··· 1032 { 1033 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; 1034 /* enable kind of interrupts always enabled */ 1035 - u32 display_mask = DE_MASTER_IRQ_CONTROL | DE_GSE | DE_PCH_EVENT; 1036 u32 render_mask = GT_USER_INTERRUPT; 1037 u32 hotplug_mask = SDE_CRT_HOTPLUG | SDE_PORTB_HOTPLUG | 1038 SDE_PORTC_HOTPLUG | SDE_PORTD_HOTPLUG;
··· 309 if (de_iir & DE_GSE) 310 ironlake_opregion_gse_intr(dev); 311 312 + if (de_iir & DE_PLANEA_FLIP_DONE) 313 + intel_prepare_page_flip(dev, 0); 314 315 + if (de_iir & DE_PLANEB_FLIP_DONE) 316 + intel_prepare_page_flip(dev, 1); 317 + 318 + if (de_iir & DE_PIPEA_VBLANK) { 319 + drm_handle_vblank(dev, 0); 320 + intel_finish_page_flip(dev, 0); 321 + } 322 + 323 + if (de_iir & DE_PIPEB_VBLANK) { 324 drm_handle_vblank(dev, 1); 325 + intel_finish_page_flip(dev, 1); 326 + } 327 328 /* check event from PCH */ 329 if ((de_iir & DE_PCH_EVENT) && ··· 1022 { 1023 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; 1024 /* enable kind of interrupts always enabled */ 1025 + u32 display_mask = DE_MASTER_IRQ_CONTROL | DE_GSE | DE_PCH_EVENT | 1026 + DE_PLANEA_FLIP_DONE | DE_PLANEB_FLIP_DONE; 1027 u32 render_mask = GT_USER_INTERRUPT; 1028 u32 hotplug_mask = SDE_CRT_HOTPLUG | SDE_PORTB_HOTPLUG | 1029 SDE_PORTC_HOTPLUG | SDE_PORTD_HOTPLUG;