Lines Matching refs:dev_priv

89 enum hpd_pin intel_hpd_pin_default(struct drm_i915_private *dev_priv,  in intel_hpd_pin_default()  argument
145 static bool intel_hpd_irq_storm_detect(struct drm_i915_private *dev_priv, in intel_hpd_irq_storm_detect() argument
148 struct intel_hotplug *hpd = &dev_priv->display.hotplug; in intel_hpd_irq_storm_detect()
156 (!long_hpd && !dev_priv->display.hotplug.hpd_short_storm_enabled)) in intel_hpd_irq_storm_detect()
167 drm_dbg_kms(&dev_priv->drm, in intel_hpd_irq_storm_detect()
171 drm_dbg_kms(&dev_priv->drm, in intel_hpd_irq_storm_detect()
221 intel_hpd_irq_storm_switch_to_polling(struct drm_i915_private *dev_priv) in intel_hpd_irq_storm_switch_to_polling() argument
227 lockdep_assert_held(&dev_priv->irq_lock); in intel_hpd_irq_storm_switch_to_polling()
229 drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter); in intel_hpd_irq_storm_switch_to_polling()
238 dev_priv->display.hotplug.stats[pin].state != HPD_MARK_DISABLED) in intel_hpd_irq_storm_switch_to_polling()
241 drm_info(&dev_priv->drm, in intel_hpd_irq_storm_switch_to_polling()
246 dev_priv->display.hotplug.stats[pin].state = HPD_DISABLED; in intel_hpd_irq_storm_switch_to_polling()
255 drm_kms_helper_poll_reschedule(&dev_priv->drm); in intel_hpd_irq_storm_switch_to_polling()
256 mod_delayed_detection_work(dev_priv, in intel_hpd_irq_storm_switch_to_polling()
257 &dev_priv->display.hotplug.reenable_work, in intel_hpd_irq_storm_switch_to_polling()
264 struct drm_i915_private *dev_priv = in intel_hpd_irq_storm_reenable_work() local
265 container_of(work, typeof(*dev_priv), in intel_hpd_irq_storm_reenable_work()
272 wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm); in intel_hpd_irq_storm_reenable_work()
274 spin_lock_irq(&dev_priv->irq_lock); in intel_hpd_irq_storm_reenable_work()
276 drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter); in intel_hpd_irq_storm_reenable_work()
280 dev_priv->display.hotplug.stats[pin].state != HPD_DISABLED) in intel_hpd_irq_storm_reenable_work()
284 drm_dbg(&dev_priv->drm, in intel_hpd_irq_storm_reenable_work()
292 if (dev_priv->display.hotplug.stats[pin].state == HPD_DISABLED) in intel_hpd_irq_storm_reenable_work()
293 dev_priv->display.hotplug.stats[pin].state = HPD_ENABLED; in intel_hpd_irq_storm_reenable_work()
296 intel_hpd_irq_setup(dev_priv); in intel_hpd_irq_storm_reenable_work()
298 spin_unlock_irq(&dev_priv->irq_lock); in intel_hpd_irq_storm_reenable_work()
300 intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref); in intel_hpd_irq_storm_reenable_work()
351 struct drm_i915_private *dev_priv = in i915_digport_work_func() local
357 spin_lock_irq(&dev_priv->irq_lock); in i915_digport_work_func()
358 long_port_mask = dev_priv->display.hotplug.long_port_mask; in i915_digport_work_func()
359 dev_priv->display.hotplug.long_port_mask = 0; in i915_digport_work_func()
360 short_port_mask = dev_priv->display.hotplug.short_port_mask; in i915_digport_work_func()
361 dev_priv->display.hotplug.short_port_mask = 0; in i915_digport_work_func()
362 spin_unlock_irq(&dev_priv->irq_lock); in i915_digport_work_func()
364 for_each_intel_encoder(&dev_priv->drm, encoder) { in i915_digport_work_func()
389 spin_lock_irq(&dev_priv->irq_lock); in i915_digport_work_func()
390 dev_priv->display.hotplug.event_bits |= old_bits; in i915_digport_work_func()
391 queue_delayed_detection_work(dev_priv, in i915_digport_work_func()
392 &dev_priv->display.hotplug.hotplug_work, 0); in i915_digport_work_func()
393 spin_unlock_irq(&dev_priv->irq_lock); in i915_digport_work_func()
420 struct drm_i915_private *dev_priv = in i915_hotplug_work_func() local
431 mutex_lock(&dev_priv->drm.mode_config.mutex); in i915_hotplug_work_func()
432 drm_dbg_kms(&dev_priv->drm, "running encoder hotplug functions\n"); in i915_hotplug_work_func()
434 spin_lock_irq(&dev_priv->irq_lock); in i915_hotplug_work_func()
436 hpd_event_bits = dev_priv->display.hotplug.event_bits; in i915_hotplug_work_func()
437 dev_priv->display.hotplug.event_bits = 0; in i915_hotplug_work_func()
438 hpd_retry_bits = dev_priv->display.hotplug.retry_bits; in i915_hotplug_work_func()
439 dev_priv->display.hotplug.retry_bits = 0; in i915_hotplug_work_func()
442 intel_hpd_irq_storm_switch_to_polling(dev_priv); in i915_hotplug_work_func()
444 spin_unlock_irq(&dev_priv->irq_lock); in i915_hotplug_work_func()
447 if (dev_priv->display.hotplug.ignore_long_hpd) { in i915_hotplug_work_func()
448 drm_dbg_kms(&dev_priv->drm, "Ignore HPD flag on - skip encoder hotplug handlers\n"); in i915_hotplug_work_func()
449 mutex_unlock(&dev_priv->drm.mode_config.mutex); in i915_hotplug_work_func()
453 drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter); in i915_hotplug_work_func()
472 drm_dbg_kms(&dev_priv->drm, in i915_hotplug_work_func()
495 mutex_unlock(&dev_priv->drm.mode_config.mutex); in i915_hotplug_work_func()
500 drm_kms_helper_hotplug_event(&dev_priv->drm); in i915_hotplug_work_func()
508 spin_lock_irq(&dev_priv->irq_lock); in i915_hotplug_work_func()
509 dev_priv->display.hotplug.retry_bits |= retry; in i915_hotplug_work_func()
511 mod_delayed_detection_work(dev_priv, in i915_hotplug_work_func()
512 &dev_priv->display.hotplug.hotplug_work, in i915_hotplug_work_func()
514 spin_unlock_irq(&dev_priv->irq_lock); in i915_hotplug_work_func()
535 void intel_hpd_irq_handler(struct drm_i915_private *dev_priv, in intel_hpd_irq_handler() argument
548 spin_lock(&dev_priv->irq_lock); in intel_hpd_irq_handler()
556 for_each_intel_encoder(&dev_priv->drm, encoder) { in intel_hpd_irq_handler()
569 drm_dbg(&dev_priv->drm, in intel_hpd_irq_handler()
577 dev_priv->display.hotplug.long_port_mask |= BIT(port); in intel_hpd_irq_handler()
580 dev_priv->display.hotplug.short_port_mask |= BIT(port); in intel_hpd_irq_handler()
591 if (dev_priv->display.hotplug.stats[pin].state == HPD_DISABLED) { in intel_hpd_irq_handler()
598 drm_WARN_ONCE(&dev_priv->drm, !HAS_GMCH(dev_priv), in intel_hpd_irq_handler()
604 if (dev_priv->display.hotplug.stats[pin].state != HPD_ENABLED) in intel_hpd_irq_handler()
615 dev_priv->display.hotplug.event_bits |= BIT(pin); in intel_hpd_irq_handler()
620 if (intel_hpd_irq_storm_detect(dev_priv, pin, long_hpd)) { in intel_hpd_irq_handler()
621 dev_priv->display.hotplug.event_bits &= ~BIT(pin); in intel_hpd_irq_handler()
632 intel_hpd_irq_setup(dev_priv); in intel_hpd_irq_handler()
641 queue_work(dev_priv->display.hotplug.dp_wq, &dev_priv->display.hotplug.dig_port_work); in intel_hpd_irq_handler()
643 queue_delayed_detection_work(dev_priv, in intel_hpd_irq_handler()
644 &dev_priv->display.hotplug.hotplug_work, 0); in intel_hpd_irq_handler()
646 spin_unlock(&dev_priv->irq_lock); in intel_hpd_irq_handler()
663 void intel_hpd_init(struct drm_i915_private *dev_priv) in intel_hpd_init() argument
667 if (!HAS_DISPLAY(dev_priv)) in intel_hpd_init()
671 dev_priv->display.hotplug.stats[i].count = 0; in intel_hpd_init()
672 dev_priv->display.hotplug.stats[i].state = HPD_ENABLED; in intel_hpd_init()
679 spin_lock_irq(&dev_priv->irq_lock); in intel_hpd_init()
680 intel_hpd_irq_setup(dev_priv); in intel_hpd_init()
681 spin_unlock_irq(&dev_priv->irq_lock); in intel_hpd_init()
729 struct drm_i915_private *dev_priv = in i915_hpd_poll_init_work() local
737 mutex_lock(&dev_priv->drm.mode_config.mutex); in i915_hpd_poll_init_work()
739 enabled = READ_ONCE(dev_priv->display.hotplug.poll_enabled); in i915_hpd_poll_init_work()
747 wakeref = intel_display_power_get(dev_priv, in i915_hpd_poll_init_work()
749 drm_WARN_ON(&dev_priv->drm, in i915_hpd_poll_init_work()
750 READ_ONCE(dev_priv->display.hotplug.poll_enabled)); in i915_hpd_poll_init_work()
751 cancel_work(&dev_priv->display.hotplug.poll_init_work); in i915_hpd_poll_init_work()
754 spin_lock_irq(&dev_priv->irq_lock); in i915_hpd_poll_init_work()
756 drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter); in i915_hpd_poll_init_work()
764 if (dev_priv->display.hotplug.stats[pin].state == HPD_DISABLED) in i915_hpd_poll_init_work()
775 spin_unlock_irq(&dev_priv->irq_lock); in i915_hpd_poll_init_work()
778 drm_kms_helper_poll_reschedule(&dev_priv->drm); in i915_hpd_poll_init_work()
780 mutex_unlock(&dev_priv->drm.mode_config.mutex); in i915_hpd_poll_init_work()
787 i915_hpd_poll_detect_connectors(dev_priv); in i915_hpd_poll_init_work()
789 intel_display_power_put(dev_priv, in i915_hpd_poll_init_work()
811 void intel_hpd_poll_enable(struct drm_i915_private *dev_priv) in intel_hpd_poll_enable() argument
813 if (!HAS_DISPLAY(dev_priv) || in intel_hpd_poll_enable()
814 !intel_display_device_enabled(dev_priv)) in intel_hpd_poll_enable()
817 WRITE_ONCE(dev_priv->display.hotplug.poll_enabled, true); in intel_hpd_poll_enable()
825 spin_lock_irq(&dev_priv->irq_lock); in intel_hpd_poll_enable()
826 queue_detection_work(dev_priv, in intel_hpd_poll_enable()
827 &dev_priv->display.hotplug.poll_init_work); in intel_hpd_poll_enable()
828 spin_unlock_irq(&dev_priv->irq_lock); in intel_hpd_poll_enable()
850 void intel_hpd_poll_disable(struct drm_i915_private *dev_priv) in intel_hpd_poll_disable() argument
852 if (!HAS_DISPLAY(dev_priv)) in intel_hpd_poll_disable()
855 WRITE_ONCE(dev_priv->display.hotplug.poll_enabled, false); in intel_hpd_poll_disable()
857 spin_lock_irq(&dev_priv->irq_lock); in intel_hpd_poll_disable()
858 queue_detection_work(dev_priv, in intel_hpd_poll_disable()
859 &dev_priv->display.hotplug.poll_init_work); in intel_hpd_poll_disable()
860 spin_unlock_irq(&dev_priv->irq_lock); in intel_hpd_poll_disable()
896 void intel_hpd_cancel_work(struct drm_i915_private *dev_priv) in intel_hpd_cancel_work() argument
898 if (!HAS_DISPLAY(dev_priv)) in intel_hpd_cancel_work()
901 spin_lock_irq(&dev_priv->irq_lock); in intel_hpd_cancel_work()
903 dev_priv->display.hotplug.long_port_mask = 0; in intel_hpd_cancel_work()
904 dev_priv->display.hotplug.short_port_mask = 0; in intel_hpd_cancel_work()
905 dev_priv->display.hotplug.event_bits = 0; in intel_hpd_cancel_work()
906 dev_priv->display.hotplug.retry_bits = 0; in intel_hpd_cancel_work()
908 spin_unlock_irq(&dev_priv->irq_lock); in intel_hpd_cancel_work()
910 cancel_work_sync(&dev_priv->display.hotplug.dig_port_work); in intel_hpd_cancel_work()
916 if (cancel_all_detection_work(dev_priv)) in intel_hpd_cancel_work()
917 drm_dbg_kms(&dev_priv->drm, "Hotplug detection work still active\n"); in intel_hpd_cancel_work()
920 bool intel_hpd_disable(struct drm_i915_private *dev_priv, enum hpd_pin pin) in intel_hpd_disable() argument
927 spin_lock_irq(&dev_priv->irq_lock); in intel_hpd_disable()
928 if (dev_priv->display.hotplug.stats[pin].state == HPD_ENABLED) { in intel_hpd_disable()
929 dev_priv->display.hotplug.stats[pin].state = HPD_DISABLED; in intel_hpd_disable()
932 spin_unlock_irq(&dev_priv->irq_lock); in intel_hpd_disable()
937 void intel_hpd_enable(struct drm_i915_private *dev_priv, enum hpd_pin pin) in intel_hpd_enable() argument
942 spin_lock_irq(&dev_priv->irq_lock); in intel_hpd_enable()
943 dev_priv->display.hotplug.stats[pin].state = HPD_ENABLED; in intel_hpd_enable()
944 spin_unlock_irq(&dev_priv->irq_lock); in intel_hpd_enable()
1005 struct drm_i915_private *dev_priv = m->private; in i915_hpd_storm_ctl_show() local
1006 struct intel_hotplug *hotplug = &dev_priv->display.hotplug; in i915_hpd_storm_ctl_show()
1011 intel_synchronize_irq(dev_priv); in i915_hpd_storm_ctl_show()
1012 flush_work(&dev_priv->display.hotplug.dig_port_work); in i915_hpd_storm_ctl_show()
1013 flush_delayed_work(&dev_priv->display.hotplug.hotplug_work); in i915_hpd_storm_ctl_show()
1027 struct drm_i915_private *dev_priv = m->private; in i915_hpd_storm_ctl_write() local
1028 struct intel_hotplug *hotplug = &dev_priv->display.hotplug; in i915_hpd_storm_ctl_write()
1053 drm_dbg_kms(&dev_priv->drm, in i915_hpd_storm_ctl_write()
1057 drm_dbg_kms(&dev_priv->drm, "Disabling HPD storm detection\n"); in i915_hpd_storm_ctl_write()
1059 spin_lock_irq(&dev_priv->irq_lock); in i915_hpd_storm_ctl_write()
1064 spin_unlock_irq(&dev_priv->irq_lock); in i915_hpd_storm_ctl_write()
1067 flush_delayed_work(&dev_priv->display.hotplug.reenable_work); in i915_hpd_storm_ctl_write()
1088 struct drm_i915_private *dev_priv = m->private; in i915_hpd_short_storm_ctl_show() local
1091 str_yes_no(dev_priv->display.hotplug.hpd_short_storm_enabled)); in i915_hpd_short_storm_ctl_show()
1108 struct drm_i915_private *dev_priv = m->private; in i915_hpd_short_storm_ctl_write() local
1109 struct intel_hotplug *hotplug = &dev_priv->display.hotplug; in i915_hpd_short_storm_ctl_write()
1130 new_state = !HAS_DP_MST(dev_priv); in i915_hpd_short_storm_ctl_write()
1134 drm_dbg_kms(&dev_priv->drm, "%sabling HPD short storm detection\n", in i915_hpd_short_storm_ctl_write()
1137 spin_lock_irq(&dev_priv->irq_lock); in i915_hpd_short_storm_ctl_write()
1142 spin_unlock_irq(&dev_priv->irq_lock); in i915_hpd_short_storm_ctl_write()
1145 flush_delayed_work(&dev_priv->display.hotplug.reenable_work); in i915_hpd_short_storm_ctl_write()