Lines Matching +full:display +full:- +full:pipe
1 // SPDX-License-Identifier: MIT
33 intel_display_irq_regs_init(struct intel_display *display, struct i915_irq_regs regs, in intel_display_irq_regs_init() argument
36 intel_dmc_wl_get(display, regs.imr); in intel_display_irq_regs_init()
37 intel_dmc_wl_get(display, regs.ier); in intel_display_irq_regs_init()
38 intel_dmc_wl_get(display, regs.iir); in intel_display_irq_regs_init()
40 gen2_irq_init(to_intel_uncore(display->drm), regs, imr_val, ier_val); in intel_display_irq_regs_init()
42 intel_dmc_wl_put(display, regs.iir); in intel_display_irq_regs_init()
43 intel_dmc_wl_put(display, regs.ier); in intel_display_irq_regs_init()
44 intel_dmc_wl_put(display, regs.imr); in intel_display_irq_regs_init()
48 intel_display_irq_regs_reset(struct intel_display *display, struct i915_irq_regs regs) in intel_display_irq_regs_reset() argument
50 intel_dmc_wl_get(display, regs.imr); in intel_display_irq_regs_reset()
51 intel_dmc_wl_get(display, regs.ier); in intel_display_irq_regs_reset()
52 intel_dmc_wl_get(display, regs.iir); in intel_display_irq_regs_reset()
54 gen2_irq_reset(to_intel_uncore(display->drm), regs); in intel_display_irq_regs_reset()
56 intel_dmc_wl_put(display, regs.iir); in intel_display_irq_regs_reset()
57 intel_dmc_wl_put(display, regs.ier); in intel_display_irq_regs_reset()
58 intel_dmc_wl_put(display, regs.imr); in intel_display_irq_regs_reset()
62 intel_display_irq_regs_assert_irr_is_zero(struct intel_display *display, i915_reg_t reg) in intel_display_irq_regs_assert_irr_is_zero() argument
64 intel_dmc_wl_get(display, reg); in intel_display_irq_regs_assert_irr_is_zero()
66 gen2_assert_iir_is_zero(to_intel_uncore(display->drm), reg); in intel_display_irq_regs_assert_irr_is_zero()
68 intel_dmc_wl_put(display, reg); in intel_display_irq_regs_assert_irr_is_zero()
79 struct intel_display *display = to_intel_display(crtc); in handle_plane_fault() local
84 if (!plane || !plane->capture_error) in handle_plane_fault()
87 plane->capture_error(crtc, plane, &error); in handle_plane_fault()
89 drm_err_ratelimited(display->drm, in handle_plane_fault()
91 crtc->base.base.id, crtc->base.name, in handle_plane_fault()
92 plane->base.base.id, plane->base.name, in handle_plane_fault()
98 static void intel_pipe_fault_irq_handler(struct intel_display *display, in intel_pipe_fault_irq_handler() argument
100 enum pipe pipe, u32 fault_errors) in intel_pipe_fault_irq_handler() argument
102 struct intel_crtc *crtc = intel_crtc_for_pipe(display, pipe); in intel_pipe_fault_irq_handler()
105 for (handler = handlers; handler && handler->fault; handler++) { in intel_pipe_fault_irq_handler()
106 if ((fault_errors & handler->fault) == 0) in intel_pipe_fault_irq_handler()
109 if (handler->handle(crtc, handler->plane_id)) in intel_pipe_fault_irq_handler()
110 fault_errors &= ~handler->fault; in intel_pipe_fault_irq_handler()
114 crtc->base.base.id, crtc->base.name, fault_errors); in intel_pipe_fault_irq_handler()
118 intel_handle_vblank(struct drm_i915_private *dev_priv, enum pipe pipe) in intel_handle_vblank() argument
120 struct intel_display *display = &dev_priv->display; in intel_handle_vblank() local
121 struct intel_crtc *crtc = intel_crtc_for_pipe(display, pipe); in intel_handle_vblank()
123 drm_crtc_handle_vblank(&crtc->base); in intel_handle_vblank()
127 * ilk_update_display_irq - update DEIMR
135 struct intel_display *display = &dev_priv->display; in ilk_update_display_irq() local
138 lockdep_assert_held(&dev_priv->irq_lock); in ilk_update_display_irq()
139 drm_WARN_ON(&dev_priv->drm, enabled_irq_mask & ~interrupt_mask); in ilk_update_display_irq()
141 new_val = dev_priv->irq_mask; in ilk_update_display_irq()
145 if (new_val != dev_priv->irq_mask && in ilk_update_display_irq()
146 !drm_WARN_ON(&dev_priv->drm, !intel_irqs_enabled(dev_priv))) { in ilk_update_display_irq()
147 dev_priv->irq_mask = new_val; in ilk_update_display_irq()
148 intel_de_write(display, DEIMR, dev_priv->irq_mask); in ilk_update_display_irq()
149 intel_de_posting_read(display, DEIMR); in ilk_update_display_irq()
164 * bdw_update_port_irq - update DE port interrupt
172 struct intel_display *display = &dev_priv->display; in bdw_update_port_irq() local
176 lockdep_assert_held(&dev_priv->irq_lock); in bdw_update_port_irq()
178 drm_WARN_ON(&dev_priv->drm, enabled_irq_mask & ~interrupt_mask); in bdw_update_port_irq()
180 if (drm_WARN_ON(&dev_priv->drm, !intel_irqs_enabled(dev_priv))) in bdw_update_port_irq()
183 old_val = intel_de_read(display, GEN8_DE_PORT_IMR); in bdw_update_port_irq()
190 intel_de_write(display, GEN8_DE_PORT_IMR, new_val); in bdw_update_port_irq()
191 intel_de_posting_read(display, GEN8_DE_PORT_IMR); in bdw_update_port_irq()
196 * bdw_update_pipe_irq - update DE pipe interrupt
198 * @pipe: pipe whose interrupt to update
203 enum pipe pipe, u32 interrupt_mask, in bdw_update_pipe_irq() argument
206 struct intel_display *display = &dev_priv->display; in bdw_update_pipe_irq() local
209 lockdep_assert_held(&dev_priv->irq_lock); in bdw_update_pipe_irq()
211 drm_WARN_ON(&dev_priv->drm, enabled_irq_mask & ~interrupt_mask); in bdw_update_pipe_irq()
213 if (drm_WARN_ON(&dev_priv->drm, !intel_irqs_enabled(dev_priv))) in bdw_update_pipe_irq()
216 new_val = dev_priv->display.irq.de_irq_mask[pipe]; in bdw_update_pipe_irq()
220 if (new_val != dev_priv->display.irq.de_irq_mask[pipe]) { in bdw_update_pipe_irq()
221 dev_priv->display.irq.de_irq_mask[pipe] = new_val; in bdw_update_pipe_irq()
222 intel_de_write(display, GEN8_DE_PIPE_IMR(pipe), display->irq.de_irq_mask[pipe]); in bdw_update_pipe_irq()
223 intel_de_posting_read(display, GEN8_DE_PIPE_IMR(pipe)); in bdw_update_pipe_irq()
228 enum pipe pipe, u32 bits) in bdw_enable_pipe_irq() argument
230 bdw_update_pipe_irq(i915, pipe, bits, bits); in bdw_enable_pipe_irq()
234 enum pipe pipe, u32 bits) in bdw_disable_pipe_irq() argument
236 bdw_update_pipe_irq(i915, pipe, bits, 0); in bdw_disable_pipe_irq()
240 * ibx_display_interrupt_update - update SDEIMR
249 struct intel_display *display = &dev_priv->display; in ibx_display_interrupt_update() local
250 u32 sdeimr = intel_de_read(display, SDEIMR); in ibx_display_interrupt_update()
255 drm_WARN_ON(&dev_priv->drm, enabled_irq_mask & ~interrupt_mask); in ibx_display_interrupt_update()
257 lockdep_assert_held(&dev_priv->irq_lock); in ibx_display_interrupt_update()
259 if (drm_WARN_ON(&dev_priv->drm, !intel_irqs_enabled(dev_priv))) in ibx_display_interrupt_update()
262 intel_de_write(display, SDEIMR, sdeimr); in ibx_display_interrupt_update()
263 intel_de_posting_read(display, SDEIMR); in ibx_display_interrupt_update()
276 u32 i915_pipestat_enable_mask(struct intel_display *display, in i915_pipestat_enable_mask() argument
277 enum pipe pipe) in i915_pipestat_enable_mask() argument
279 struct drm_i915_private *dev_priv = to_i915(display->drm); in i915_pipestat_enable_mask()
280 u32 status_mask = display->irq.pipestat_irq_mask[pipe]; in i915_pipestat_enable_mask()
283 lockdep_assert_held(&dev_priv->irq_lock); in i915_pipestat_enable_mask()
285 if (DISPLAY_VER(display) < 5) in i915_pipestat_enable_mask()
289 * On pipe A we don't support the PSR interrupt yet, in i915_pipestat_enable_mask()
290 * on pipe B and C the same bit MBZ. in i915_pipestat_enable_mask()
292 if (drm_WARN_ON_ONCE(display->drm, in i915_pipestat_enable_mask()
296 * On pipe B and C we don't support the PSR interrupt yet, on pipe in i915_pipestat_enable_mask()
299 if (drm_WARN_ON_ONCE(display->drm, in i915_pipestat_enable_mask()
312 drm_WARN_ONCE(display->drm, in i915_pipestat_enable_mask()
315 "pipe %c: enable_mask=0x%x, status_mask=0x%x\n", in i915_pipestat_enable_mask()
316 pipe_name(pipe), enable_mask, status_mask); in i915_pipestat_enable_mask()
322 enum pipe pipe, u32 status_mask) in i915_enable_pipestat() argument
324 struct intel_display *display = &dev_priv->display; in i915_enable_pipestat() local
325 i915_reg_t reg = PIPESTAT(dev_priv, pipe); in i915_enable_pipestat()
328 drm_WARN_ONCE(&dev_priv->drm, status_mask & ~PIPESTAT_INT_STATUS_MASK, in i915_enable_pipestat()
329 "pipe %c: status_mask=0x%x\n", in i915_enable_pipestat()
330 pipe_name(pipe), status_mask); in i915_enable_pipestat()
332 lockdep_assert_held(&dev_priv->irq_lock); in i915_enable_pipestat()
333 drm_WARN_ON(&dev_priv->drm, !intel_irqs_enabled(dev_priv)); in i915_enable_pipestat()
335 if ((dev_priv->display.irq.pipestat_irq_mask[pipe] & status_mask) == status_mask) in i915_enable_pipestat()
338 dev_priv->display.irq.pipestat_irq_mask[pipe] |= status_mask; in i915_enable_pipestat()
339 enable_mask = i915_pipestat_enable_mask(display, pipe); in i915_enable_pipestat()
341 intel_de_write(display, reg, enable_mask | status_mask); in i915_enable_pipestat()
342 intel_de_posting_read(display, reg); in i915_enable_pipestat()
346 enum pipe pipe, u32 status_mask) in i915_disable_pipestat() argument
348 struct intel_display *display = &dev_priv->display; in i915_disable_pipestat() local
349 i915_reg_t reg = PIPESTAT(dev_priv, pipe); in i915_disable_pipestat()
352 drm_WARN_ONCE(&dev_priv->drm, status_mask & ~PIPESTAT_INT_STATUS_MASK, in i915_disable_pipestat()
353 "pipe %c: status_mask=0x%x\n", in i915_disable_pipestat()
354 pipe_name(pipe), status_mask); in i915_disable_pipestat()
356 lockdep_assert_held(&dev_priv->irq_lock); in i915_disable_pipestat()
357 drm_WARN_ON(&dev_priv->drm, !intel_irqs_enabled(dev_priv)); in i915_disable_pipestat()
359 if ((dev_priv->display.irq.pipestat_irq_mask[pipe] & status_mask) == 0) in i915_disable_pipestat()
362 dev_priv->display.irq.pipestat_irq_mask[pipe] &= ~status_mask; in i915_disable_pipestat()
363 enable_mask = i915_pipestat_enable_mask(display, pipe); in i915_disable_pipestat()
365 intel_de_write(display, reg, enable_mask | status_mask); in i915_disable_pipestat()
366 intel_de_posting_read(display, reg); in i915_disable_pipestat()
369 static bool i915_has_legacy_blc_interrupt(struct intel_display *display) in i915_has_legacy_blc_interrupt() argument
371 struct drm_i915_private *i915 = to_i915(display->drm); in i915_has_legacy_blc_interrupt()
379 return IS_DISPLAY_VER(display, 3, 4) && IS_MOBILE(i915); in i915_has_legacy_blc_interrupt()
383 * i915_enable_asle_pipestat - enable ASLE pipestat for OpRegion
388 struct intel_display *display = &dev_priv->display; in i915_enable_asle_pipestat() local
390 if (!intel_opregion_asle_present(display)) in i915_enable_asle_pipestat()
393 if (!i915_has_legacy_blc_interrupt(display)) in i915_enable_asle_pipestat()
396 spin_lock_irq(&dev_priv->irq_lock); in i915_enable_asle_pipestat()
403 spin_unlock_irq(&dev_priv->irq_lock); in i915_enable_asle_pipestat()
408 enum pipe pipe, in display_pipe_crc_irq_handler() argument
413 struct intel_display *display = &dev_priv->display; in display_pipe_crc_irq_handler() local
414 struct intel_crtc *crtc = intel_crtc_for_pipe(display, pipe); in display_pipe_crc_irq_handler()
415 struct intel_pipe_crc *pipe_crc = &crtc->pipe_crc; in display_pipe_crc_irq_handler()
420 spin_lock(&pipe_crc->lock); in display_pipe_crc_irq_handler()
429 if (pipe_crc->skipped <= 0 || in display_pipe_crc_irq_handler()
430 (DISPLAY_VER(dev_priv) >= 8 && pipe_crc->skipped == 1)) { in display_pipe_crc_irq_handler()
431 pipe_crc->skipped++; in display_pipe_crc_irq_handler()
432 spin_unlock(&pipe_crc->lock); in display_pipe_crc_irq_handler()
435 spin_unlock(&pipe_crc->lock); in display_pipe_crc_irq_handler()
437 drm_crtc_add_crc_entry(&crtc->base, true, in display_pipe_crc_irq_handler()
438 drm_crtc_accurate_vblank_count(&crtc->base), in display_pipe_crc_irq_handler()
444 enum pipe pipe, in display_pipe_crc_irq_handler() argument
451 enum pipe pipe) in flip_done_handler() argument
453 struct intel_display *display = &i915->display; in flip_done_handler() local
454 struct intel_crtc *crtc = intel_crtc_for_pipe(display, pipe); in flip_done_handler()
456 spin_lock(&i915->drm.event_lock); in flip_done_handler()
458 if (crtc->flip_done_event) { in flip_done_handler()
460 drm_crtc_send_vblank_event(&crtc->base, crtc->flip_done_event); in flip_done_handler()
461 crtc->flip_done_event = NULL; in flip_done_handler()
464 spin_unlock(&i915->drm.event_lock); in flip_done_handler()
468 enum pipe pipe) in hsw_pipe_crc_irq_handler() argument
470 struct intel_display *display = &dev_priv->display; in hsw_pipe_crc_irq_handler() local
472 display_pipe_crc_irq_handler(dev_priv, pipe, in hsw_pipe_crc_irq_handler()
473 intel_de_read(display, PIPE_CRC_RES_HSW(pipe)), in hsw_pipe_crc_irq_handler()
478 enum pipe pipe) in ivb_pipe_crc_irq_handler() argument
480 struct intel_display *display = &dev_priv->display; in ivb_pipe_crc_irq_handler() local
482 display_pipe_crc_irq_handler(dev_priv, pipe, in ivb_pipe_crc_irq_handler()
483 intel_de_read(display, PIPE_CRC_RES_1_IVB(pipe)), in ivb_pipe_crc_irq_handler()
484 intel_de_read(display, PIPE_CRC_RES_2_IVB(pipe)), in ivb_pipe_crc_irq_handler()
485 intel_de_read(display, PIPE_CRC_RES_3_IVB(pipe)), in ivb_pipe_crc_irq_handler()
486 intel_de_read(display, PIPE_CRC_RES_4_IVB(pipe)), in ivb_pipe_crc_irq_handler()
487 intel_de_read(display, PIPE_CRC_RES_5_IVB(pipe))); in ivb_pipe_crc_irq_handler()
491 enum pipe pipe) in i9xx_pipe_crc_irq_handler() argument
493 struct intel_display *display = &dev_priv->display; in i9xx_pipe_crc_irq_handler() local
497 res1 = intel_de_read(display, PIPE_CRC_RES_RES1_I915(dev_priv, pipe)); in i9xx_pipe_crc_irq_handler()
502 res2 = intel_de_read(display, PIPE_CRC_RES_RES2_G4X(dev_priv, pipe)); in i9xx_pipe_crc_irq_handler()
506 display_pipe_crc_irq_handler(dev_priv, pipe, in i9xx_pipe_crc_irq_handler()
507 intel_de_read(display, PIPE_CRC_RES_RED(dev_priv, pipe)), in i9xx_pipe_crc_irq_handler()
508 intel_de_read(display, PIPE_CRC_RES_GREEN(dev_priv, pipe)), in i9xx_pipe_crc_irq_handler()
509 intel_de_read(display, PIPE_CRC_RES_BLUE(dev_priv, pipe)), in i9xx_pipe_crc_irq_handler()
515 struct intel_display *display = &dev_priv->display; in i9xx_pipestat_irq_reset() local
516 enum pipe pipe; in i9xx_pipestat_irq_reset() local
518 for_each_pipe(dev_priv, pipe) { in i9xx_pipestat_irq_reset()
519 intel_de_write(display, in i9xx_pipestat_irq_reset()
520 PIPESTAT(dev_priv, pipe), in i9xx_pipestat_irq_reset()
523 dev_priv->display.irq.pipestat_irq_mask[pipe] = 0; in i9xx_pipestat_irq_reset()
530 struct intel_display *display = &dev_priv->display; in i9xx_pipestat_irq_ack() local
531 enum pipe pipe; in i9xx_pipestat_irq_ack() local
533 spin_lock(&dev_priv->irq_lock); in i9xx_pipestat_irq_ack()
536 !dev_priv->display.irq.vlv_display_irqs_enabled) { in i9xx_pipestat_irq_ack()
537 spin_unlock(&dev_priv->irq_lock); in i9xx_pipestat_irq_ack()
541 for_each_pipe(dev_priv, pipe) { in i9xx_pipestat_irq_ack()
556 switch (pipe) { in i9xx_pipestat_irq_ack()
569 status_mask |= dev_priv->display.irq.pipestat_irq_mask[pipe]; in i9xx_pipestat_irq_ack()
574 reg = PIPESTAT(dev_priv, pipe); in i9xx_pipestat_irq_ack()
575 pipe_stats[pipe] = intel_de_read(display, reg) & status_mask; in i9xx_pipestat_irq_ack()
576 enable_mask = i915_pipestat_enable_mask(display, pipe); in i9xx_pipestat_irq_ack()
579 * Clear the PIPE*STAT regs before the IIR in i9xx_pipestat_irq_ack()
582 * edge in the ISR pipe event bit if we don't clear in i9xx_pipestat_irq_ack()
587 if (pipe_stats[pipe]) { in i9xx_pipestat_irq_ack()
588 intel_de_write(display, reg, pipe_stats[pipe]); in i9xx_pipestat_irq_ack()
589 intel_de_write(display, reg, enable_mask); in i9xx_pipestat_irq_ack()
592 spin_unlock(&dev_priv->irq_lock); in i9xx_pipestat_irq_ack()
598 struct intel_display *display = &dev_priv->display; in i915_pipestat_irq_handler() local
600 enum pipe pipe; in i915_pipestat_irq_handler() local
602 for_each_pipe(dev_priv, pipe) { in i915_pipestat_irq_handler()
603 if (pipe_stats[pipe] & PIPE_VBLANK_INTERRUPT_STATUS) in i915_pipestat_irq_handler()
604 intel_handle_vblank(dev_priv, pipe); in i915_pipestat_irq_handler()
606 if (pipe_stats[pipe] & PIPE_LEGACY_BLC_EVENT_STATUS) in i915_pipestat_irq_handler()
609 if (pipe_stats[pipe] & PIPE_CRC_DONE_INTERRUPT_STATUS) in i915_pipestat_irq_handler()
610 i9xx_pipe_crc_irq_handler(dev_priv, pipe); in i915_pipestat_irq_handler()
612 if (pipe_stats[pipe] & PIPE_FIFO_UNDERRUN_STATUS) in i915_pipestat_irq_handler()
613 intel_cpu_fifo_underrun_irq_handler(display, pipe); in i915_pipestat_irq_handler()
617 intel_opregion_asle_intr(display); in i915_pipestat_irq_handler()
623 struct intel_display *display = &dev_priv->display; in i965_pipestat_irq_handler() local
625 enum pipe pipe; in i965_pipestat_irq_handler() local
627 for_each_pipe(dev_priv, pipe) { in i965_pipestat_irq_handler()
628 if (pipe_stats[pipe] & PIPE_START_VBLANK_INTERRUPT_STATUS) in i965_pipestat_irq_handler()
629 intel_handle_vblank(dev_priv, pipe); in i965_pipestat_irq_handler()
631 if (pipe_stats[pipe] & PIPE_LEGACY_BLC_EVENT_STATUS) in i965_pipestat_irq_handler()
634 if (pipe_stats[pipe] & PIPE_CRC_DONE_INTERRUPT_STATUS) in i965_pipestat_irq_handler()
635 i9xx_pipe_crc_irq_handler(dev_priv, pipe); in i965_pipestat_irq_handler()
637 if (pipe_stats[pipe] & PIPE_FIFO_UNDERRUN_STATUS) in i965_pipestat_irq_handler()
638 intel_cpu_fifo_underrun_irq_handler(display, pipe); in i965_pipestat_irq_handler()
642 intel_opregion_asle_intr(display); in i965_pipestat_irq_handler()
645 intel_gmbus_irq_handler(display); in i965_pipestat_irq_handler()
651 struct intel_display *display = &dev_priv->display; in valleyview_pipestat_irq_handler() local
652 enum pipe pipe; in valleyview_pipestat_irq_handler() local
654 for_each_pipe(dev_priv, pipe) { in valleyview_pipestat_irq_handler()
655 if (pipe_stats[pipe] & PIPE_START_VBLANK_INTERRUPT_STATUS) in valleyview_pipestat_irq_handler()
656 intel_handle_vblank(dev_priv, pipe); in valleyview_pipestat_irq_handler()
658 if (pipe_stats[pipe] & PLANE_FLIP_DONE_INT_STATUS_VLV) in valleyview_pipestat_irq_handler()
659 flip_done_handler(dev_priv, pipe); in valleyview_pipestat_irq_handler()
661 if (pipe_stats[pipe] & PIPE_CRC_DONE_INTERRUPT_STATUS) in valleyview_pipestat_irq_handler()
662 i9xx_pipe_crc_irq_handler(dev_priv, pipe); in valleyview_pipestat_irq_handler()
664 if (pipe_stats[pipe] & PIPE_FIFO_UNDERRUN_STATUS) in valleyview_pipestat_irq_handler()
665 intel_cpu_fifo_underrun_irq_handler(display, pipe); in valleyview_pipestat_irq_handler()
669 intel_gmbus_irq_handler(display); in valleyview_pipestat_irq_handler()
674 struct intel_display *display = &dev_priv->display; in ibx_irq_handler() local
675 enum pipe pipe; in ibx_irq_handler() local
683 drm_dbg(&dev_priv->drm, "PCH audio power change on port %d\n", in ibx_irq_handler()
688 intel_dp_aux_irq_handler(display); in ibx_irq_handler()
691 intel_gmbus_irq_handler(display); in ibx_irq_handler()
694 drm_dbg(&dev_priv->drm, "PCH HDCP audio interrupt\n"); in ibx_irq_handler()
697 drm_dbg(&dev_priv->drm, "PCH transcoder audio interrupt\n"); in ibx_irq_handler()
700 drm_err(&dev_priv->drm, "PCH poison interrupt\n"); in ibx_irq_handler()
703 for_each_pipe(dev_priv, pipe) in ibx_irq_handler()
704 drm_dbg(&dev_priv->drm, " pipe %c FDI IIR: 0x%08x\n", in ibx_irq_handler()
705 pipe_name(pipe), in ibx_irq_handler()
706 intel_de_read(display, FDI_RX_IIR(pipe))); in ibx_irq_handler()
710 drm_dbg(&dev_priv->drm, "PCH transcoder CRC done interrupt\n"); in ibx_irq_handler()
713 drm_dbg(&dev_priv->drm, in ibx_irq_handler()
717 intel_pch_fifo_underrun_irq_handler(display, PIPE_A); in ibx_irq_handler()
720 intel_pch_fifo_underrun_irq_handler(display, PIPE_B); in ibx_irq_handler()
723 static u32 ivb_err_int_pipe_fault_mask(enum pipe pipe) in ivb_err_int_pipe_fault_mask() argument
725 switch (pipe) { in ivb_err_int_pipe_fault_mask()
758 struct intel_display *display = &dev_priv->display; in ivb_err_int_handler() local
759 u32 err_int = intel_de_read(display, GEN7_ERR_INT); in ivb_err_int_handler()
760 enum pipe pipe; in ivb_err_int_handler() local
763 drm_err(&dev_priv->drm, "Poison interrupt\n"); in ivb_err_int_handler()
766 drm_err_ratelimited(display->drm, "Invalid GTT PTE\n"); in ivb_err_int_handler()
769 drm_err_ratelimited(display->drm, "Invalid PTE data\n"); in ivb_err_int_handler()
771 for_each_pipe(dev_priv, pipe) { in ivb_err_int_handler()
774 if (err_int & ERR_INT_FIFO_UNDERRUN(pipe)) in ivb_err_int_handler()
775 intel_cpu_fifo_underrun_irq_handler(display, pipe); in ivb_err_int_handler()
777 if (err_int & ERR_INT_PIPE_CRC_DONE(pipe)) { in ivb_err_int_handler()
779 ivb_pipe_crc_irq_handler(dev_priv, pipe); in ivb_err_int_handler()
781 hsw_pipe_crc_irq_handler(dev_priv, pipe); in ivb_err_int_handler()
784 fault_errors = err_int & ivb_err_int_pipe_fault_mask(pipe); in ivb_err_int_handler()
786 intel_pipe_fault_irq_handler(display, ivb_pipe_fault_handlers, in ivb_err_int_handler()
787 pipe, fault_errors); in ivb_err_int_handler()
790 intel_de_write(display, GEN7_ERR_INT, err_int); in ivb_err_int_handler()
795 struct intel_display *display = &dev_priv->display; in cpt_serr_int_handler() local
796 u32 serr_int = intel_de_read(display, SERR_INT); in cpt_serr_int_handler()
797 enum pipe pipe; in cpt_serr_int_handler() local
800 drm_err(&dev_priv->drm, "PCH poison interrupt\n"); in cpt_serr_int_handler()
802 for_each_pipe(dev_priv, pipe) in cpt_serr_int_handler()
803 if (serr_int & SERR_INT_TRANS_FIFO_UNDERRUN(pipe)) in cpt_serr_int_handler()
804 intel_pch_fifo_underrun_irq_handler(display, pipe); in cpt_serr_int_handler()
806 intel_de_write(display, SERR_INT, serr_int); in cpt_serr_int_handler()
811 struct intel_display *display = &dev_priv->display; in cpt_irq_handler() local
812 enum pipe pipe; in cpt_irq_handler() local
820 drm_dbg(&dev_priv->drm, "PCH audio power change on port %c\n", in cpt_irq_handler()
825 intel_dp_aux_irq_handler(display); in cpt_irq_handler()
828 intel_gmbus_irq_handler(display); in cpt_irq_handler()
831 drm_dbg(&dev_priv->drm, "Audio CP request interrupt\n"); in cpt_irq_handler()
834 drm_dbg(&dev_priv->drm, "Audio CP change interrupt\n"); in cpt_irq_handler()
837 for_each_pipe(dev_priv, pipe) in cpt_irq_handler()
838 drm_dbg(&dev_priv->drm, " pipe %c FDI IIR: 0x%08x\n", in cpt_irq_handler()
839 pipe_name(pipe), in cpt_irq_handler()
840 intel_de_read(display, FDI_RX_IIR(pipe))); in cpt_irq_handler()
847 static u32 ilk_gtt_fault_pipe_fault_mask(enum pipe pipe) in ilk_gtt_fault_pipe_fault_mask() argument
849 switch (pipe) { in ilk_gtt_fault_pipe_fault_mask()
873 static void ilk_gtt_fault_irq_handler(struct intel_display *display) in ilk_gtt_fault_irq_handler() argument
875 enum pipe pipe; in ilk_gtt_fault_irq_handler() local
878 gtt_fault = intel_de_read(display, ILK_GTT_FAULT); in ilk_gtt_fault_irq_handler()
879 intel_de_write(display, ILK_GTT_FAULT, gtt_fault); in ilk_gtt_fault_irq_handler()
882 drm_err_ratelimited(display->drm, "Invalid GTT PTE\n"); in ilk_gtt_fault_irq_handler()
885 drm_err_ratelimited(display->drm, "Invalid PTE data\n"); in ilk_gtt_fault_irq_handler()
887 for_each_pipe(display, pipe) { in ilk_gtt_fault_irq_handler()
890 fault_errors = gtt_fault & ilk_gtt_fault_pipe_fault_mask(pipe); in ilk_gtt_fault_irq_handler()
892 intel_pipe_fault_irq_handler(display, ilk_pipe_fault_handlers, in ilk_gtt_fault_irq_handler()
893 pipe, fault_errors); in ilk_gtt_fault_irq_handler()
899 struct intel_display *display = &dev_priv->display; in ilk_display_irq_handler() local
900 enum pipe pipe; in ilk_display_irq_handler() local
907 intel_dp_aux_irq_handler(display); in ilk_display_irq_handler()
910 intel_opregion_asle_intr(display); in ilk_display_irq_handler()
913 drm_err(&dev_priv->drm, "Poison interrupt\n"); in ilk_display_irq_handler()
916 ilk_gtt_fault_irq_handler(display); in ilk_display_irq_handler()
918 for_each_pipe(dev_priv, pipe) { in ilk_display_irq_handler()
919 if (de_iir & DE_PIPE_VBLANK(pipe)) in ilk_display_irq_handler()
920 intel_handle_vblank(dev_priv, pipe); in ilk_display_irq_handler()
922 if (de_iir & DE_PLANE_FLIP_DONE(pipe)) in ilk_display_irq_handler()
923 flip_done_handler(dev_priv, pipe); in ilk_display_irq_handler()
925 if (de_iir & DE_PIPE_FIFO_UNDERRUN(pipe)) in ilk_display_irq_handler()
926 intel_cpu_fifo_underrun_irq_handler(display, pipe); in ilk_display_irq_handler()
928 if (de_iir & DE_PIPE_CRC_DONE(pipe)) in ilk_display_irq_handler()
929 i9xx_pipe_crc_irq_handler(dev_priv, pipe); in ilk_display_irq_handler()
934 u32 pch_iir = intel_de_read(display, SDEIIR); in ilk_display_irq_handler()
942 intel_de_write(display, SDEIIR, pch_iir); in ilk_display_irq_handler()
946 gen5_rps_irq_handler(&to_gt(dev_priv)->rps); in ilk_display_irq_handler()
951 struct intel_display *display = &dev_priv->display; in ivb_display_irq_handler() local
952 enum pipe pipe; in ivb_display_irq_handler() local
964 for_each_intel_encoder_with_psr(&dev_priv->drm, encoder) { in ivb_display_irq_handler()
968 psr_iir = intel_de_rmw(display, EDP_PSR_IIR, 0, 0); in ivb_display_irq_handler()
975 intel_dp_aux_irq_handler(display); in ivb_display_irq_handler()
978 intel_opregion_asle_intr(display); in ivb_display_irq_handler()
980 for_each_pipe(dev_priv, pipe) { in ivb_display_irq_handler()
981 if (de_iir & DE_PIPE_VBLANK_IVB(pipe)) in ivb_display_irq_handler()
982 intel_handle_vblank(dev_priv, pipe); in ivb_display_irq_handler()
984 if (de_iir & DE_PLANE_FLIP_DONE_IVB(pipe)) in ivb_display_irq_handler()
985 flip_done_handler(dev_priv, pipe); in ivb_display_irq_handler()
990 u32 pch_iir = intel_de_read(display, SDEIIR); in ivb_display_irq_handler()
995 intel_de_write(display, SDEIIR, pch_iir); in ivb_display_irq_handler()
1045 struct intel_display *display = &dev_priv->display; in gen8_de_pipe_fault_mask() local
1047 if (DISPLAY_VER(display) >= 14) in gen8_de_pipe_fault_mask()
1057 else if (DISPLAY_VER(display) >= 13 || HAS_D12_PLANE_MINIMIZATION(display)) in gen8_de_pipe_fault_mask()
1065 else if (DISPLAY_VER(display) == 12) in gen8_de_pipe_fault_mask()
1075 else if (DISPLAY_VER(display) == 11) in gen8_de_pipe_fault_mask()
1084 else if (DISPLAY_VER(display) >= 9) in gen8_de_pipe_fault_mask()
1098 struct intel_display *display = to_intel_display(crtc); in handle_plane_ats_fault() local
1100 drm_err_ratelimited(display->drm, in handle_plane_ats_fault()
1102 crtc->base.base.id, crtc->base.name); in handle_plane_ats_fault()
1109 struct intel_display *display = to_intel_display(crtc); in handle_pipedmc_ats_fault() local
1111 drm_err_ratelimited(display->drm, in handle_pipedmc_ats_fault()
1113 crtc->base.base.id, crtc->base.name); in handle_pipedmc_ats_fault()
1120 struct intel_display *display = to_intel_display(crtc); in handle_pipedmc_fault() local
1122 drm_err_ratelimited(display->drm, in handle_pipedmc_fault()
1124 crtc->base.base.id, crtc->base.name); in handle_pipedmc_fault()
1184 gen8_pipe_fault_handlers(struct intel_display *display) in gen8_pipe_fault_handlers() argument
1186 if (DISPLAY_VER(display) >= 14) in gen8_pipe_fault_handlers()
1188 else if (DISPLAY_VER(display) >= 12) in gen8_pipe_fault_handlers()
1190 else if (DISPLAY_VER(display) >= 11) in gen8_pipe_fault_handlers()
1192 else if (DISPLAY_VER(display) >= 9) in gen8_pipe_fault_handlers()
1200 wake_up_all(&dev_priv->display.pmdemand.waitqueue); in intel_pmdemand_irq_handler()
1206 struct intel_display *display = &dev_priv->display; in gen8_de_misc_irq_handler() local
1209 if (HAS_DBUF_OVERLAP_DETECTION(display)) { in gen8_de_misc_irq_handler()
1211 drm_warn(display->drm, "DBuf overlap detected\n"); in gen8_de_misc_irq_handler()
1220 drm_dbg(&dev_priv->drm, in gen8_de_misc_irq_handler()
1228 u32 val = intel_de_read(display, RM_TIMEOUT_REG_CAPTURE); in gen8_de_misc_irq_handler()
1229 drm_warn(&dev_priv->drm, "Register Access Timeout = 0x%x\n", val); in gen8_de_misc_irq_handler()
1233 intel_opregion_asle_intr(display); in gen8_de_misc_irq_handler()
1242 for_each_intel_encoder_with_psr(&dev_priv->drm, encoder) { in gen8_de_misc_irq_handler()
1247 intel_dp->psr.transcoder); in gen8_de_misc_irq_handler()
1251 psr_iir = intel_de_rmw(display, iir_reg, 0, 0); in gen8_de_misc_irq_handler()
1265 drm_err(&dev_priv->drm, "Unexpected DE Misc interrupt: 0x%08x\n", iir); in gen8_de_misc_irq_handler()
1271 struct intel_display *display = &dev_priv->display; in gen11_dsi_te_interrupt_handler() local
1272 enum pipe pipe = INVALID_PIPE; in gen11_dsi_te_interrupt_handler() local
1281 val = intel_de_read(display, TRANS_DDI_FUNC_CTL2(dev_priv, TRANSCODER_DSI_0)); in gen11_dsi_te_interrupt_handler()
1293 val = intel_de_read(display, DSI_TRANS_FUNC_CONF(dsi_trans)); in gen11_dsi_te_interrupt_handler()
1297 drm_err(&dev_priv->drm, "DSI trancoder not configured in command mode\n"); in gen11_dsi_te_interrupt_handler()
1301 /* Get PIPE for handling VBLANK event */ in gen11_dsi_te_interrupt_handler()
1302 val = intel_de_read(display, TRANS_DDI_FUNC_CTL(dev_priv, dsi_trans)); in gen11_dsi_te_interrupt_handler()
1305 pipe = PIPE_A; in gen11_dsi_te_interrupt_handler()
1308 pipe = PIPE_B; in gen11_dsi_te_interrupt_handler()
1311 pipe = PIPE_C; in gen11_dsi_te_interrupt_handler()
1314 drm_err(&dev_priv->drm, "Invalid PIPE\n"); in gen11_dsi_te_interrupt_handler()
1318 intel_handle_vblank(dev_priv, pipe); in gen11_dsi_te_interrupt_handler()
1322 intel_de_rmw(display, DSI_INTR_IDENT_REG(port), 0, 0); in gen11_dsi_te_interrupt_handler()
1335 struct intel_display *display = &i915->display; in gen8_read_and_ack_pch_irqs() local
1339 *pch_iir = intel_de_read(display, SDEIIR); in gen8_read_and_ack_pch_irqs()
1344 * PICA IER must be disabled/re-enabled around clearing PICA IIR and in gen8_read_and_ack_pch_irqs()
1349 drm_WARN_ON(&i915->drm, INTEL_PCH_TYPE(i915) < PCH_MTL); in gen8_read_and_ack_pch_irqs()
1351 pica_ier = intel_de_rmw(display, PICAINTERRUPT_IER, ~0, 0); in gen8_read_and_ack_pch_irqs()
1352 *pica_iir = intel_de_read(display, PICAINTERRUPT_IIR); in gen8_read_and_ack_pch_irqs()
1353 intel_de_write(display, PICAINTERRUPT_IIR, *pica_iir); in gen8_read_and_ack_pch_irqs()
1356 intel_de_write(display, SDEIIR, *pch_iir); in gen8_read_and_ack_pch_irqs()
1359 intel_de_write(display, PICAINTERRUPT_IER, pica_ier); in gen8_read_and_ack_pch_irqs()
1364 struct intel_display *display = &dev_priv->display; in gen8_de_irq_handler() local
1366 enum pipe pipe; in gen8_de_irq_handler() local
1368 drm_WARN_ON_ONCE(&dev_priv->drm, !HAS_DISPLAY(dev_priv)); in gen8_de_irq_handler()
1371 iir = intel_de_read(display, GEN8_DE_MISC_IIR); in gen8_de_irq_handler()
1373 intel_de_write(display, GEN8_DE_MISC_IIR, iir); in gen8_de_irq_handler()
1376 drm_err_ratelimited(&dev_priv->drm, in gen8_de_irq_handler()
1382 iir = intel_de_read(display, GEN11_DE_HPD_IIR); in gen8_de_irq_handler()
1384 intel_de_write(display, GEN11_DE_HPD_IIR, iir); in gen8_de_irq_handler()
1387 drm_err_ratelimited(&dev_priv->drm, in gen8_de_irq_handler()
1393 iir = intel_de_read(display, GEN8_DE_PORT_IIR); in gen8_de_irq_handler()
1397 intel_de_write(display, GEN8_DE_PORT_IIR, iir); in gen8_de_irq_handler()
1400 intel_dp_aux_irq_handler(display); in gen8_de_irq_handler()
1422 intel_gmbus_irq_handler(display); in gen8_de_irq_handler()
1436 drm_err_ratelimited(&dev_priv->drm, in gen8_de_irq_handler()
1439 drm_err_ratelimited(&dev_priv->drm, in gen8_de_irq_handler()
1444 for_each_pipe(dev_priv, pipe) { in gen8_de_irq_handler()
1447 if (!(master_ctl & GEN8_DE_PIPE_IRQ(pipe))) in gen8_de_irq_handler()
1450 iir = intel_de_read(display, GEN8_DE_PIPE_IIR(pipe)); in gen8_de_irq_handler()
1452 drm_err_ratelimited(&dev_priv->drm, in gen8_de_irq_handler()
1453 "The master control interrupt lied (DE PIPE)!\n"); in gen8_de_irq_handler()
1457 intel_de_write(display, GEN8_DE_PIPE_IIR(pipe), iir); in gen8_de_irq_handler()
1460 intel_handle_vblank(dev_priv, pipe); in gen8_de_irq_handler()
1463 flip_done_handler(dev_priv, pipe); in gen8_de_irq_handler()
1467 intel_dsb_irq_handler(&dev_priv->display, pipe, INTEL_DSB_0); in gen8_de_irq_handler()
1470 intel_dsb_irq_handler(&dev_priv->display, pipe, INTEL_DSB_1); in gen8_de_irq_handler()
1473 intel_dsb_irq_handler(&dev_priv->display, pipe, INTEL_DSB_2); in gen8_de_irq_handler()
1477 hsw_pipe_crc_irq_handler(dev_priv, pipe); in gen8_de_irq_handler()
1480 intel_cpu_fifo_underrun_irq_handler(display, pipe); in gen8_de_irq_handler()
1484 intel_pipe_fault_irq_handler(display, in gen8_de_irq_handler()
1485 gen8_pipe_fault_handlers(display), in gen8_de_irq_handler()
1486 pipe, fault_errors); in gen8_de_irq_handler()
1496 * on older pch-split platforms. But this needs testing. in gen8_de_irq_handler()
1514 drm_dbg(&dev_priv->drm, in gen8_de_irq_handler()
1522 struct intel_display *display = &i915->display; in gen11_gu_misc_irq_ack() local
1528 iir = intel_de_read(display, GEN11_GU_MISC_IIR); in gen11_gu_misc_irq_ack()
1530 intel_de_write(display, GEN11_GU_MISC_IIR, iir); in gen11_gu_misc_irq_ack()
1537 struct intel_display *display = &i915->display; in gen11_gu_misc_irq_handler() local
1540 intel_opregion_asle_intr(display); in gen11_gu_misc_irq_handler()
1545 struct intel_display *display = &i915->display; in gen11_display_irq_handler() local
1548 disable_rpm_wakeref_asserts(&i915->runtime_pm); in gen11_display_irq_handler()
1551 * for the display related bits. in gen11_display_irq_handler()
1553 disp_ctl = intel_de_read(display, GEN11_DISPLAY_INT_CTL); in gen11_display_irq_handler()
1555 intel_de_write(display, GEN11_DISPLAY_INT_CTL, 0); in gen11_display_irq_handler()
1557 intel_de_write(display, GEN11_DISPLAY_INT_CTL, GEN11_DISPLAY_IRQ_ENABLE); in gen11_display_irq_handler()
1559 enable_rpm_wakeref_asserts(&i915->runtime_pm); in gen11_display_irq_handler()
1564 struct intel_display *display = &i915->display; in i915gm_irq_cstate_wa_enable() local
1565 lockdep_assert_held(&i915->drm.vblank_time_lock); in i915gm_irq_cstate_wa_enable()
1569 * Disabling render clock gating during C-states avoids in i915gm_irq_cstate_wa_enable()
1573 if (i915->display.irq.vblank_enabled++ == 0) in i915gm_irq_cstate_wa_enable()
1574 intel_de_write(display, SCPD0, in i915gm_irq_cstate_wa_enable()
1580 struct intel_display *display = &i915->display; in i915gm_irq_cstate_wa_disable() local
1581 lockdep_assert_held(&i915->drm.vblank_time_lock); in i915gm_irq_cstate_wa_disable()
1583 if (--i915->display.irq.vblank_enabled == 0) in i915gm_irq_cstate_wa_disable()
1584 intel_de_write(display, SCPD0, in i915gm_irq_cstate_wa_disable()
1590 spin_lock_irq(&i915->drm.vblank_time_lock); in i915gm_irq_cstate_wa()
1597 spin_unlock_irq(&i915->drm.vblank_time_lock); in i915gm_irq_cstate_wa()
1602 struct drm_i915_private *dev_priv = to_i915(crtc->dev); in i8xx_enable_vblank()
1603 enum pipe pipe = to_intel_crtc(crtc)->pipe; in i8xx_enable_vblank() local
1606 spin_lock_irqsave(&dev_priv->irq_lock, irqflags); in i8xx_enable_vblank()
1607 i915_enable_pipestat(dev_priv, pipe, PIPE_VBLANK_INTERRUPT_STATUS); in i8xx_enable_vblank()
1608 spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags); in i8xx_enable_vblank()
1615 struct drm_i915_private *dev_priv = to_i915(crtc->dev); in i8xx_disable_vblank()
1616 enum pipe pipe = to_intel_crtc(crtc)->pipe; in i8xx_disable_vblank() local
1619 spin_lock_irqsave(&dev_priv->irq_lock, irqflags); in i8xx_disable_vblank()
1620 i915_disable_pipestat(dev_priv, pipe, PIPE_VBLANK_INTERRUPT_STATUS); in i8xx_disable_vblank()
1621 spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags); in i8xx_disable_vblank()
1626 struct drm_i915_private *i915 = to_i915(crtc->dev); in i915gm_enable_vblank()
1635 struct drm_i915_private *i915 = to_i915(crtc->dev); in i915gm_disable_vblank()
1644 struct drm_i915_private *dev_priv = to_i915(crtc->dev); in i965_enable_vblank()
1645 enum pipe pipe = to_intel_crtc(crtc)->pipe; in i965_enable_vblank() local
1648 spin_lock_irqsave(&dev_priv->irq_lock, irqflags); in i965_enable_vblank()
1649 i915_enable_pipestat(dev_priv, pipe, in i965_enable_vblank()
1651 spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags); in i965_enable_vblank()
1658 struct drm_i915_private *dev_priv = to_i915(crtc->dev); in i965_disable_vblank()
1659 enum pipe pipe = to_intel_crtc(crtc)->pipe; in i965_disable_vblank() local
1662 spin_lock_irqsave(&dev_priv->irq_lock, irqflags); in i965_disable_vblank()
1663 i915_disable_pipestat(dev_priv, pipe, in i965_disable_vblank()
1665 spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags); in i965_disable_vblank()
1670 struct drm_i915_private *dev_priv = to_i915(crtc->dev); in ilk_enable_vblank()
1671 enum pipe pipe = to_intel_crtc(crtc)->pipe; in ilk_enable_vblank() local
1674 DE_PIPE_VBLANK_IVB(pipe) : DE_PIPE_VBLANK(pipe); in ilk_enable_vblank()
1676 spin_lock_irqsave(&dev_priv->irq_lock, irqflags); in ilk_enable_vblank()
1678 spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags); in ilk_enable_vblank()
1691 struct drm_i915_private *dev_priv = to_i915(crtc->dev); in ilk_disable_vblank()
1692 enum pipe pipe = to_intel_crtc(crtc)->pipe; in ilk_disable_vblank() local
1695 DE_PIPE_VBLANK_IVB(pipe) : DE_PIPE_VBLANK(pipe); in ilk_disable_vblank()
1697 spin_lock_irqsave(&dev_priv->irq_lock, irqflags); in ilk_disable_vblank()
1699 spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags); in ilk_disable_vblank()
1705 struct intel_display *display = to_intel_display(intel_crtc); in gen11_dsi_configure_te() local
1708 if (!(intel_crtc->mode_flags & in gen11_dsi_configure_te()
1713 if (intel_crtc->mode_flags & I915_MODE_FLAG_DSI_USE_TE1) in gen11_dsi_configure_te()
1718 intel_de_rmw(display, DSI_INTR_MASK_REG(port), DSI_TE_EVENT, enable ? 0 : DSI_TE_EVENT); in gen11_dsi_configure_te()
1720 intel_de_rmw(display, DSI_INTR_IDENT_REG(port), 0, 0); in gen11_dsi_configure_te()
1727 struct intel_display *display = in intel_display_vblank_dc_work() local
1728 container_of(work, typeof(*display), irq.vblank_dc_work); in intel_display_vblank_dc_work()
1729 int vblank_wa_num_pipes = READ_ONCE(display->irq.vblank_wa_num_pipes); in intel_display_vblank_dc_work()
1737 intel_display_power_set_target_dc_state(display, vblank_wa_num_pipes ? DC_STATE_DISABLE : in intel_display_vblank_dc_work()
1744 struct intel_display *display = to_intel_display(crtc); in bdw_enable_vblank() local
1745 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); in bdw_enable_vblank()
1746 enum pipe pipe = crtc->pipe; in bdw_enable_vblank() local
1752 if (crtc->block_dc_for_vblank && display->irq.vblank_wa_num_pipes++ == 0) in bdw_enable_vblank()
1753 schedule_work(&display->irq.vblank_dc_work); in bdw_enable_vblank()
1755 spin_lock_irqsave(&dev_priv->irq_lock, irqflags); in bdw_enable_vblank()
1756 bdw_enable_pipe_irq(dev_priv, pipe, GEN8_PIPE_VBLANK); in bdw_enable_vblank()
1757 spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags); in bdw_enable_vblank()
1763 drm_crtc_vblank_restore(&crtc->base); in bdw_enable_vblank()
1771 struct intel_display *display = to_intel_display(crtc); in bdw_disable_vblank() local
1772 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); in bdw_disable_vblank()
1773 enum pipe pipe = crtc->pipe; in bdw_disable_vblank() local
1779 spin_lock_irqsave(&dev_priv->irq_lock, irqflags); in bdw_disable_vblank()
1780 bdw_disable_pipe_irq(dev_priv, pipe, GEN8_PIPE_VBLANK); in bdw_disable_vblank()
1781 spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags); in bdw_disable_vblank()
1783 if (crtc->block_dc_for_vblank && --display->irq.vblank_wa_num_pipes == 0) in bdw_disable_vblank()
1784 schedule_work(&display->irq.vblank_dc_work); in bdw_disable_vblank()
1787 static u32 vlv_dpinvgtt_pipe_fault_mask(enum pipe pipe) in vlv_dpinvgtt_pipe_fault_mask() argument
1789 switch (pipe) { in vlv_dpinvgtt_pipe_fault_mask()
1826 static void vlv_page_table_error_irq_ack(struct intel_display *display, u32 *dpinvgtt) in vlv_page_table_error_irq_ack() argument
1830 tmp = intel_de_read(display, DPINVGTT); in vlv_page_table_error_irq_ack()
1839 * reset if the display power well goes down, so no need to in vlv_page_table_error_irq_ack()
1845 /* customary ack+disable then re-enable to guarantee an edge */ in vlv_page_table_error_irq_ack()
1846 intel_de_write(display, DPINVGTT, status); in vlv_page_table_error_irq_ack()
1847 intel_de_write(display, DPINVGTT, enable << 16); in vlv_page_table_error_irq_ack()
1850 static void vlv_page_table_error_irq_handler(struct intel_display *display, u32 dpinvgtt) in vlv_page_table_error_irq_handler() argument
1852 enum pipe pipe; in vlv_page_table_error_irq_handler() local
1854 for_each_pipe(display, pipe) { in vlv_page_table_error_irq_handler()
1857 fault_errors = dpinvgtt & vlv_dpinvgtt_pipe_fault_mask(pipe); in vlv_page_table_error_irq_handler()
1859 intel_pipe_fault_irq_handler(display, vlv_pipe_fault_handlers, in vlv_page_table_error_irq_handler()
1860 pipe, fault_errors); in vlv_page_table_error_irq_handler()
1864 void vlv_display_error_irq_ack(struct intel_display *display, in vlv_display_error_irq_ack() argument
1869 *eir = intel_de_read(display, VLV_EIR); in vlv_display_error_irq_ack()
1872 vlv_page_table_error_irq_ack(display, dpinvgtt); in vlv_display_error_irq_ack()
1874 intel_de_write(display, VLV_EIR, *eir); in vlv_display_error_irq_ack()
1881 emr = intel_de_read(display, VLV_EMR); in vlv_display_error_irq_ack()
1882 intel_de_write(display, VLV_EMR, 0xffffffff); in vlv_display_error_irq_ack()
1883 intel_de_write(display, VLV_EMR, emr); in vlv_display_error_irq_ack()
1886 void vlv_display_error_irq_handler(struct intel_display *display, in vlv_display_error_irq_handler() argument
1889 drm_dbg(display->drm, "Master Error, EIR 0x%08x\n", eir); in vlv_display_error_irq_handler()
1892 vlv_page_table_error_irq_handler(display, dpinvgtt); in vlv_display_error_irq_handler()
1897 struct intel_display *display = &dev_priv->display; in _vlv_display_irq_reset() local
1900 intel_de_write(display, DPINVGTT, DPINVGTT_STATUS_MASK_CHV); in _vlv_display_irq_reset()
1902 intel_de_write(display, DPINVGTT, DPINVGTT_STATUS_MASK_VLV); in _vlv_display_irq_reset()
1904 gen2_error_reset(to_intel_uncore(display->drm), in _vlv_display_irq_reset()
1908 intel_de_rmw(display, PORT_HOTPLUG_STAT(dev_priv), 0, 0); in _vlv_display_irq_reset()
1912 intel_display_irq_regs_reset(display, VLV_IRQ_REGS); in _vlv_display_irq_reset()
1913 dev_priv->irq_mask = ~0u; in _vlv_display_irq_reset()
1918 if (dev_priv->display.irq.vlv_display_irqs_enabled) in vlv_display_irq_reset()
1924 struct intel_display *display = &i915->display; in i9xx_display_irq_reset() local
1928 intel_de_rmw(display, PORT_HOTPLUG_STAT(i915), 0, 0); in i9xx_display_irq_reset()
1942 struct intel_display *display = &dev_priv->display; in vlv_display_irq_postinstall() local
1945 enum pipe pipe; in vlv_display_irq_postinstall() local
1947 if (!dev_priv->display.irq.vlv_display_irqs_enabled) in vlv_display_irq_postinstall()
1951 intel_de_write(display, DPINVGTT, in vlv_display_irq_postinstall()
1955 intel_de_write(display, DPINVGTT, in vlv_display_irq_postinstall()
1959 gen2_error_init(to_intel_uncore(display->drm), in vlv_display_irq_postinstall()
1965 for_each_pipe(dev_priv, pipe) in vlv_display_irq_postinstall()
1966 i915_enable_pipestat(dev_priv, pipe, pipestat_mask); in vlv_display_irq_postinstall()
1979 drm_WARN_ON(&dev_priv->drm, dev_priv->irq_mask != ~0u); in vlv_display_irq_postinstall()
1981 dev_priv->irq_mask = ~enable_mask; in vlv_display_irq_postinstall()
1983 intel_display_irq_regs_init(display, VLV_IRQ_REGS, dev_priv->irq_mask, enable_mask); in vlv_display_irq_postinstall()
1988 struct intel_display *display = &dev_priv->display; in gen8_display_irq_reset() local
1989 enum pipe pipe; in gen8_display_irq_reset() local
1994 intel_de_write(display, EDP_PSR_IMR, 0xffffffff); in gen8_display_irq_reset()
1995 intel_de_write(display, EDP_PSR_IIR, 0xffffffff); in gen8_display_irq_reset()
1997 for_each_pipe(dev_priv, pipe) in gen8_display_irq_reset()
1998 if (intel_display_power_is_enabled(display, in gen8_display_irq_reset()
1999 POWER_DOMAIN_PIPE(pipe))) in gen8_display_irq_reset()
2000 intel_display_irq_regs_reset(display, GEN8_DE_PIPE_IRQ_REGS(pipe)); in gen8_display_irq_reset()
2002 intel_display_irq_regs_reset(display, GEN8_DE_PORT_IRQ_REGS); in gen8_display_irq_reset()
2003 intel_display_irq_regs_reset(display, GEN8_DE_MISC_IRQ_REGS); in gen8_display_irq_reset()
2008 struct intel_display *display = &dev_priv->display; in gen11_display_irq_reset() local
2009 enum pipe pipe; in gen11_display_irq_reset() local
2016 intel_de_write(display, GEN11_DISPLAY_INT_CTL, 0); in gen11_display_irq_reset()
2025 if (!intel_display_power_is_enabled(display, domain)) in gen11_display_irq_reset()
2028 intel_de_write(display, in gen11_display_irq_reset()
2031 intel_de_write(display, in gen11_display_irq_reset()
2036 intel_de_write(display, EDP_PSR_IMR, 0xffffffff); in gen11_display_irq_reset()
2037 intel_de_write(display, EDP_PSR_IIR, 0xffffffff); in gen11_display_irq_reset()
2040 for_each_pipe(dev_priv, pipe) in gen11_display_irq_reset()
2041 if (intel_display_power_is_enabled(display, in gen11_display_irq_reset()
2042 POWER_DOMAIN_PIPE(pipe))) in gen11_display_irq_reset()
2043 intel_display_irq_regs_reset(display, GEN8_DE_PIPE_IRQ_REGS(pipe)); in gen11_display_irq_reset()
2045 intel_display_irq_regs_reset(display, GEN8_DE_PORT_IRQ_REGS); in gen11_display_irq_reset()
2046 intel_display_irq_regs_reset(display, GEN8_DE_MISC_IRQ_REGS); in gen11_display_irq_reset()
2049 intel_display_irq_regs_reset(display, PICAINTERRUPT_IRQ_REGS); in gen11_display_irq_reset()
2051 intel_display_irq_regs_reset(display, GEN11_DE_HPD_IRQ_REGS); in gen11_display_irq_reset()
2054 intel_display_irq_regs_reset(display, SDE_IRQ_REGS); in gen11_display_irq_reset()
2060 struct intel_display *display = &dev_priv->display; in gen8_irq_power_well_post_enable() local
2063 enum pipe pipe; in gen8_irq_power_well_post_enable() local
2065 spin_lock_irq(&dev_priv->irq_lock); in gen8_irq_power_well_post_enable()
2068 spin_unlock_irq(&dev_priv->irq_lock); in gen8_irq_power_well_post_enable()
2072 for_each_pipe_masked(dev_priv, pipe, pipe_mask) in gen8_irq_power_well_post_enable()
2073 intel_display_irq_regs_init(display, GEN8_DE_PIPE_IRQ_REGS(pipe), in gen8_irq_power_well_post_enable()
2074 dev_priv->display.irq.de_irq_mask[pipe], in gen8_irq_power_well_post_enable()
2075 ~dev_priv->display.irq.de_irq_mask[pipe] | extra_ier); in gen8_irq_power_well_post_enable()
2077 spin_unlock_irq(&dev_priv->irq_lock); in gen8_irq_power_well_post_enable()
2083 struct intel_display *display = &dev_priv->display; in gen8_irq_power_well_pre_disable() local
2084 enum pipe pipe; in gen8_irq_power_well_pre_disable() local
2086 spin_lock_irq(&dev_priv->irq_lock); in gen8_irq_power_well_pre_disable()
2089 spin_unlock_irq(&dev_priv->irq_lock); in gen8_irq_power_well_pre_disable()
2093 for_each_pipe_masked(dev_priv, pipe, pipe_mask) in gen8_irq_power_well_pre_disable()
2094 intel_display_irq_regs_reset(display, GEN8_DE_PIPE_IRQ_REGS(pipe)); in gen8_irq_power_well_pre_disable()
2096 spin_unlock_irq(&dev_priv->irq_lock); in gen8_irq_power_well_pre_disable()
2098 /* make sure we're done processing display irqs */ in gen8_irq_power_well_pre_disable()
2104 * interrupts. Hence we can't update it after the interrupt handler is enabled -
2115 struct intel_display *display = &dev_priv->display; in ibx_irq_postinstall() local
2128 intel_display_irq_regs_init(display, SDE_IRQ_REGS, ~mask, 0xffffffff); in ibx_irq_postinstall()
2133 lockdep_assert_held(&dev_priv->irq_lock); in valleyview_enable_display_irqs()
2135 if (dev_priv->display.irq.vlv_display_irqs_enabled) in valleyview_enable_display_irqs()
2138 dev_priv->display.irq.vlv_display_irqs_enabled = true; in valleyview_enable_display_irqs()
2148 lockdep_assert_held(&dev_priv->irq_lock); in valleyview_disable_display_irqs()
2150 if (!dev_priv->display.irq.vlv_display_irqs_enabled) in valleyview_disable_display_irqs()
2153 dev_priv->display.irq.vlv_display_irqs_enabled = false; in valleyview_disable_display_irqs()
2161 struct intel_display *display = &i915->display; in ilk_de_irq_postinstall() local
2186 intel_display_irq_regs_assert_irr_is_zero(display, EDP_PSR_IIR); in ilk_de_irq_postinstall()
2193 i915->irq_mask = ~display_mask; in ilk_de_irq_postinstall()
2197 intel_display_irq_regs_init(display, DE_IRQ_REGS, i915->irq_mask, in ilk_de_irq_postinstall()
2206 struct intel_display *display = &dev_priv->display; in gen8_de_irq_postinstall() local
2216 enum pipe pipe; in gen8_de_irq_postinstall() local
2240 if (intel_bios_is_dsi_present(display, &port)) in gen8_de_irq_postinstall()
2244 if (HAS_DBUF_OVERLAP_DETECTION(display)) in gen8_de_irq_postinstall()
2269 if (!intel_display_power_is_enabled(display, domain)) in gen8_de_irq_postinstall()
2272 intel_display_irq_regs_assert_irr_is_zero(display, in gen8_de_irq_postinstall()
2276 intel_display_irq_regs_assert_irr_is_zero(display, EDP_PSR_IIR); in gen8_de_irq_postinstall()
2279 for_each_pipe(dev_priv, pipe) { in gen8_de_irq_postinstall()
2280 dev_priv->display.irq.de_irq_mask[pipe] = ~de_pipe_masked; in gen8_de_irq_postinstall()
2282 if (intel_display_power_is_enabled(display, in gen8_de_irq_postinstall()
2283 POWER_DOMAIN_PIPE(pipe))) in gen8_de_irq_postinstall()
2284 intel_display_irq_regs_init(display, GEN8_DE_PIPE_IRQ_REGS(pipe), in gen8_de_irq_postinstall()
2285 dev_priv->display.irq.de_irq_mask[pipe], in gen8_de_irq_postinstall()
2289 intel_display_irq_regs_init(display, GEN8_DE_PORT_IRQ_REGS, ~de_port_masked, in gen8_de_irq_postinstall()
2291 intel_display_irq_regs_init(display, GEN8_DE_MISC_IRQ_REGS, ~de_misc_masked, in gen8_de_irq_postinstall()
2299 intel_display_irq_regs_init(display, GEN11_DE_HPD_IRQ_REGS, ~de_hpd_masked, in gen8_de_irq_postinstall()
2306 struct intel_display *display = &i915->display; in mtp_irq_postinstall() local
2312 intel_display_irq_regs_init(display, PICAINTERRUPT_IRQ_REGS, ~de_hpd_mask, in mtp_irq_postinstall()
2315 intel_display_irq_regs_init(display, SDE_IRQ_REGS, ~sde_mask, 0xffffffff); in mtp_irq_postinstall()
2320 struct intel_display *display = &dev_priv->display; in icp_irq_postinstall() local
2323 intel_display_irq_regs_init(display, SDE_IRQ_REGS, ~mask, 0xffffffff); in icp_irq_postinstall()
2328 struct intel_display *display = &dev_priv->display; in gen11_de_irq_postinstall() local
2335 intel_de_write(display, GEN11_DISPLAY_INT_CTL, GEN11_DISPLAY_IRQ_ENABLE); in gen11_de_irq_postinstall()
2340 struct intel_display *display = &i915->display; in dg1_de_irq_postinstall() local
2346 intel_de_write(display, GEN11_DISPLAY_INT_CTL, GEN11_DISPLAY_IRQ_ENABLE); in dg1_de_irq_postinstall()
2351 i915->drm.vblank_disable_immediate = true; in intel_display_irq_init()
2355 INIT_WORK(&i915->display.irq.vblank_dc_work, in intel_display_irq_init()