Lines Matching refs:dev_priv
152 static bool intel_hpd_irq_storm_detect(struct drm_i915_private *dev_priv, in intel_hpd_irq_storm_detect() argument
155 unsigned long start = dev_priv->hotplug.stats[pin].last_jiffies; in intel_hpd_irq_storm_detect()
157 const int threshold = dev_priv->hotplug.hpd_storm_threshold; in intel_hpd_irq_storm_detect()
161 dev_priv->hotplug.stats[pin].last_jiffies = jiffies; in intel_hpd_irq_storm_detect()
162 dev_priv->hotplug.stats[pin].count = 0; in intel_hpd_irq_storm_detect()
164 } else if (dev_priv->hotplug.stats[pin].count > threshold && in intel_hpd_irq_storm_detect()
166 dev_priv->hotplug.stats[pin].state = HPD_MARK_DISABLED; in intel_hpd_irq_storm_detect()
170 dev_priv->hotplug.stats[pin].count++; in intel_hpd_irq_storm_detect()
172 dev_priv->hotplug.stats[pin].count); in intel_hpd_irq_storm_detect()
178 static void intel_hpd_irq_storm_disable(struct drm_i915_private *dev_priv) in intel_hpd_irq_storm_disable() argument
180 struct drm_device *dev = &dev_priv->drm; in intel_hpd_irq_storm_disable()
188 lockdep_assert_held(&dev_priv->irq_lock); in intel_hpd_irq_storm_disable()
202 dev_priv->hotplug.stats[pin].state != HPD_MARK_DISABLED) in intel_hpd_irq_storm_disable()
209 dev_priv->hotplug.stats[pin].state = HPD_DISABLED; in intel_hpd_irq_storm_disable()
219 mod_delayed_work(system_wq, &dev_priv->hotplug.reenable_work, in intel_hpd_irq_storm_disable()
226 struct drm_i915_private *dev_priv = in intel_hpd_irq_storm_reenable_work() local
227 container_of(work, typeof(*dev_priv), in intel_hpd_irq_storm_reenable_work()
229 struct drm_device *dev = &dev_priv->drm; in intel_hpd_irq_storm_reenable_work()
232 intel_runtime_pm_get(dev_priv); in intel_hpd_irq_storm_reenable_work()
234 spin_lock_irq(&dev_priv->irq_lock); in intel_hpd_irq_storm_reenable_work()
239 if (dev_priv->hotplug.stats[i].state != HPD_DISABLED) in intel_hpd_irq_storm_reenable_work()
242 dev_priv->hotplug.stats[i].state = HPD_ENABLED; in intel_hpd_irq_storm_reenable_work()
259 if (dev_priv->display_irqs_enabled && dev_priv->display.hpd_irq_setup) in intel_hpd_irq_storm_reenable_work()
260 dev_priv->display.hpd_irq_setup(dev_priv); in intel_hpd_irq_storm_reenable_work()
261 spin_unlock_irq(&dev_priv->irq_lock); in intel_hpd_irq_storm_reenable_work()
263 intel_runtime_pm_put(dev_priv); in intel_hpd_irq_storm_reenable_work()
290 struct drm_i915_private *dev_priv = in i915_digport_work_func() local
297 spin_lock_irq(&dev_priv->irq_lock); in i915_digport_work_func()
298 long_port_mask = dev_priv->hotplug.long_port_mask; in i915_digport_work_func()
299 dev_priv->hotplug.long_port_mask = 0; in i915_digport_work_func()
300 short_port_mask = dev_priv->hotplug.short_port_mask; in i915_digport_work_func()
301 dev_priv->hotplug.short_port_mask = 0; in i915_digport_work_func()
302 spin_unlock_irq(&dev_priv->irq_lock); in i915_digport_work_func()
307 intel_dig_port = dev_priv->hotplug.irq_port[i]; in i915_digport_work_func()
329 spin_lock_irq(&dev_priv->irq_lock); in i915_digport_work_func()
330 dev_priv->hotplug.event_bits |= old_bits; in i915_digport_work_func()
331 spin_unlock_irq(&dev_priv->irq_lock); in i915_digport_work_func()
332 schedule_work(&dev_priv->hotplug.hotplug_work); in i915_digport_work_func()
341 struct drm_i915_private *dev_priv = in i915_hotplug_work_func() local
343 struct drm_device *dev = &dev_priv->drm; in i915_hotplug_work_func()
354 spin_lock_irq(&dev_priv->irq_lock); in i915_hotplug_work_func()
356 hpd_event_bits = dev_priv->hotplug.event_bits; in i915_hotplug_work_func()
357 dev_priv->hotplug.event_bits = 0; in i915_hotplug_work_func()
360 intel_hpd_irq_storm_disable(dev_priv); in i915_hotplug_work_func()
362 spin_unlock_irq(&dev_priv->irq_lock); in i915_hotplug_work_func()
403 void intel_hpd_irq_handler(struct drm_i915_private *dev_priv, in intel_hpd_irq_handler() argument
415 lockmgr(&dev_priv->irq_lock, LK_EXCLUSIVE); in intel_hpd_irq_handler()
422 dev_priv->hotplug.irq_port[port]; in intel_hpd_irq_handler()
435 dev_priv->hotplug.long_port_mask |= (1 << port); in intel_hpd_irq_handler()
438 dev_priv->hotplug.short_port_mask |= (1 << port); in intel_hpd_irq_handler()
443 if (dev_priv->hotplug.stats[i].state == HPD_DISABLED) { in intel_hpd_irq_handler()
450 WARN_ONCE(!HAS_GMCH_DISPLAY(dev_priv), in intel_hpd_irq_handler()
455 if (dev_priv->hotplug.stats[i].state != HPD_ENABLED) in intel_hpd_irq_handler()
459 dev_priv->hotplug.event_bits |= BIT(i); in intel_hpd_irq_handler()
463 if (intel_hpd_irq_storm_detect(dev_priv, i)) { in intel_hpd_irq_handler()
464 dev_priv->hotplug.event_bits &= ~BIT(i); in intel_hpd_irq_handler()
469 if (storm_detected && dev_priv->display_irqs_enabled) in intel_hpd_irq_handler()
470 dev_priv->display.hpd_irq_setup(dev_priv); in intel_hpd_irq_handler()
471 lockmgr(&dev_priv->irq_lock, LK_RELEASE); in intel_hpd_irq_handler()
480 queue_work(dev_priv->hotplug.dp_wq, &dev_priv->hotplug.dig_port_work); in intel_hpd_irq_handler()
482 schedule_work(&dev_priv->hotplug.hotplug_work); in intel_hpd_irq_handler()
499 void intel_hpd_init(struct drm_i915_private *dev_priv) in intel_hpd_init() argument
504 dev_priv->hotplug.stats[i].count = 0; in intel_hpd_init()
505 dev_priv->hotplug.stats[i].state = HPD_ENABLED; in intel_hpd_init()
508 WRITE_ONCE(dev_priv->hotplug.poll_enabled, false); in intel_hpd_init()
509 schedule_work(&dev_priv->hotplug.poll_init_work); in intel_hpd_init()
515 if (dev_priv->display_irqs_enabled && dev_priv->display.hpd_irq_setup) { in intel_hpd_init()
516 spin_lock_irq(&dev_priv->irq_lock); in intel_hpd_init()
517 if (dev_priv->display_irqs_enabled) in intel_hpd_init()
518 dev_priv->display.hpd_irq_setup(dev_priv); in intel_hpd_init()
519 spin_unlock_irq(&dev_priv->irq_lock); in intel_hpd_init()
525 struct drm_i915_private *dev_priv = in i915_hpd_poll_init_work() local
528 struct drm_device *dev = &dev_priv->drm; in i915_hpd_poll_init_work()
535 enabled = READ_ONCE(dev_priv->hotplug.poll_enabled); in i915_hpd_poll_init_work()
548 if (!connector->polled && I915_HAS_HOTPLUG(dev_priv) && in i915_hpd_poll_init_work()
587 void intel_hpd_poll_init(struct drm_i915_private *dev_priv) in intel_hpd_poll_init() argument
589 WRITE_ONCE(dev_priv->hotplug.poll_enabled, true); in intel_hpd_poll_init()
597 schedule_work(&dev_priv->hotplug.poll_init_work); in intel_hpd_poll_init()
600 void intel_hpd_init_work(struct drm_i915_private *dev_priv) in intel_hpd_init_work() argument
602 INIT_WORK(&dev_priv->hotplug.hotplug_work, i915_hotplug_work_func); in intel_hpd_init_work()
603 INIT_WORK(&dev_priv->hotplug.dig_port_work, i915_digport_work_func); in intel_hpd_init_work()
604 INIT_WORK(&dev_priv->hotplug.poll_init_work, i915_hpd_poll_init_work); in intel_hpd_init_work()
605 INIT_DELAYED_WORK(&dev_priv->hotplug.reenable_work, in intel_hpd_init_work()
609 void intel_hpd_cancel_work(struct drm_i915_private *dev_priv) in intel_hpd_cancel_work() argument
611 spin_lock_irq(&dev_priv->irq_lock); in intel_hpd_cancel_work()
613 dev_priv->hotplug.long_port_mask = 0; in intel_hpd_cancel_work()
614 dev_priv->hotplug.short_port_mask = 0; in intel_hpd_cancel_work()
615 dev_priv->hotplug.event_bits = 0; in intel_hpd_cancel_work()
617 spin_unlock_irq(&dev_priv->irq_lock); in intel_hpd_cancel_work()
619 cancel_work_sync(&dev_priv->hotplug.dig_port_work); in intel_hpd_cancel_work()
620 cancel_work_sync(&dev_priv->hotplug.hotplug_work); in intel_hpd_cancel_work()
621 cancel_work_sync(&dev_priv->hotplug.poll_init_work); in intel_hpd_cancel_work()
622 cancel_delayed_work_sync(&dev_priv->hotplug.reenable_work); in intel_hpd_cancel_work()
625 bool intel_hpd_disable(struct drm_i915_private *dev_priv, enum hpd_pin pin) in intel_hpd_disable() argument
632 spin_lock_irq(&dev_priv->irq_lock); in intel_hpd_disable()
633 if (dev_priv->hotplug.stats[pin].state == HPD_ENABLED) { in intel_hpd_disable()
634 dev_priv->hotplug.stats[pin].state = HPD_DISABLED; in intel_hpd_disable()
637 spin_unlock_irq(&dev_priv->irq_lock); in intel_hpd_disable()
642 void intel_hpd_enable(struct drm_i915_private *dev_priv, enum hpd_pin pin) in intel_hpd_enable() argument
647 spin_lock_irq(&dev_priv->irq_lock); in intel_hpd_enable()
648 dev_priv->hotplug.stats[pin].state = HPD_ENABLED; in intel_hpd_enable()
649 spin_unlock_irq(&dev_priv->irq_lock); in intel_hpd_enable()