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
104 if (IS_CNL_WITH_PORT_F(dev_priv)) in intel_hpd_pin_default()
135 static bool intel_hpd_irq_storm_detect(struct drm_i915_private *dev_priv, in intel_hpd_irq_storm_detect() argument
138 unsigned long start = dev_priv->hotplug.stats[pin].last_jiffies; in intel_hpd_irq_storm_detect()
140 const int threshold = dev_priv->hotplug.hpd_storm_threshold; in intel_hpd_irq_storm_detect()
144 dev_priv->hotplug.stats[pin].last_jiffies = jiffies; in intel_hpd_irq_storm_detect()
145 dev_priv->hotplug.stats[pin].count = 0; in intel_hpd_irq_storm_detect()
147 } else if (dev_priv->hotplug.stats[pin].count > threshold && in intel_hpd_irq_storm_detect()
149 dev_priv->hotplug.stats[pin].state = HPD_MARK_DISABLED; in intel_hpd_irq_storm_detect()
153 dev_priv->hotplug.stats[pin].count++; in intel_hpd_irq_storm_detect()
155 dev_priv->hotplug.stats[pin].count); in intel_hpd_irq_storm_detect()
161 static void intel_hpd_irq_storm_disable(struct drm_i915_private *dev_priv) in intel_hpd_irq_storm_disable() argument
163 struct drm_device *dev = &dev_priv->drm; in intel_hpd_irq_storm_disable()
171 lockdep_assert_held(&dev_priv->irq_lock); in intel_hpd_irq_storm_disable()
185 dev_priv->hotplug.stats[pin].state != HPD_MARK_DISABLED) in intel_hpd_irq_storm_disable()
192 dev_priv->hotplug.stats[pin].state = HPD_DISABLED; in intel_hpd_irq_storm_disable()
202 mod_delayed_work(system_wq, &dev_priv->hotplug.reenable_work, in intel_hpd_irq_storm_disable()
209 struct drm_i915_private *dev_priv = in intel_hpd_irq_storm_reenable_work() local
210 container_of(work, typeof(*dev_priv), in intel_hpd_irq_storm_reenable_work()
212 struct drm_device *dev = &dev_priv->drm; in intel_hpd_irq_storm_reenable_work()
215 intel_runtime_pm_get(dev_priv); in intel_hpd_irq_storm_reenable_work()
217 spin_lock_irq(&dev_priv->irq_lock); in intel_hpd_irq_storm_reenable_work()
222 if (dev_priv->hotplug.stats[pin].state != HPD_DISABLED) in intel_hpd_irq_storm_reenable_work()
225 dev_priv->hotplug.stats[pin].state = HPD_ENABLED; in intel_hpd_irq_storm_reenable_work()
242 if (dev_priv->display_irqs_enabled && dev_priv->display.hpd_irq_setup) in intel_hpd_irq_storm_reenable_work()
243 dev_priv->display.hpd_irq_setup(dev_priv); in intel_hpd_irq_storm_reenable_work()
244 spin_unlock_irq(&dev_priv->irq_lock); in intel_hpd_irq_storm_reenable_work()
246 intel_runtime_pm_put(dev_priv); in intel_hpd_irq_storm_reenable_work()
281 struct drm_i915_private *dev_priv = in i915_digport_work_func() local
287 spin_lock_irq(&dev_priv->irq_lock); in i915_digport_work_func()
288 long_port_mask = dev_priv->hotplug.long_port_mask; in i915_digport_work_func()
289 dev_priv->hotplug.long_port_mask = 0; in i915_digport_work_func()
290 short_port_mask = dev_priv->hotplug.short_port_mask; in i915_digport_work_func()
291 dev_priv->hotplug.short_port_mask = 0; in i915_digport_work_func()
292 spin_unlock_irq(&dev_priv->irq_lock); in i915_digport_work_func()
294 for_each_intel_encoder(&dev_priv->drm, encoder) { in i915_digport_work_func()
319 spin_lock_irq(&dev_priv->irq_lock); in i915_digport_work_func()
320 dev_priv->hotplug.event_bits |= old_bits; in i915_digport_work_func()
321 spin_unlock_irq(&dev_priv->irq_lock); in i915_digport_work_func()
322 schedule_work(&dev_priv->hotplug.hotplug_work); in i915_digport_work_func()
331 struct drm_i915_private *dev_priv = in i915_hotplug_work_func() local
333 struct drm_device *dev = &dev_priv->drm; in i915_hotplug_work_func()
344 spin_lock_irq(&dev_priv->irq_lock); in i915_hotplug_work_func()
346 hpd_event_bits = dev_priv->hotplug.event_bits; in i915_hotplug_work_func()
347 dev_priv->hotplug.event_bits = 0; in i915_hotplug_work_func()
350 intel_hpd_irq_storm_disable(dev_priv); in i915_hotplug_work_func()
352 spin_unlock_irq(&dev_priv->irq_lock); in i915_hotplug_work_func()
392 void intel_hpd_irq_handler(struct drm_i915_private *dev_priv, in intel_hpd_irq_handler() argument
402 spin_lock(&dev_priv->irq_lock); in intel_hpd_irq_handler()
403 for_each_intel_encoder(&dev_priv->drm, encoder) { in intel_hpd_irq_handler()
422 dev_priv->hotplug.long_port_mask |= (1 << port); in intel_hpd_irq_handler()
425 dev_priv->hotplug.short_port_mask |= (1 << port); in intel_hpd_irq_handler()
430 if (dev_priv->hotplug.stats[pin].state == HPD_DISABLED) { in intel_hpd_irq_handler()
437 WARN_ONCE(!HAS_GMCH_DISPLAY(dev_priv), in intel_hpd_irq_handler()
442 if (dev_priv->hotplug.stats[pin].state != HPD_ENABLED) in intel_hpd_irq_handler()
446 dev_priv->hotplug.event_bits |= BIT(pin); in intel_hpd_irq_handler()
450 if (intel_hpd_irq_storm_detect(dev_priv, pin)) { in intel_hpd_irq_handler()
451 dev_priv->hotplug.event_bits &= ~BIT(pin); in intel_hpd_irq_handler()
456 if (storm_detected && dev_priv->display_irqs_enabled) in intel_hpd_irq_handler()
457 dev_priv->display.hpd_irq_setup(dev_priv); in intel_hpd_irq_handler()
458 spin_unlock(&dev_priv->irq_lock); in intel_hpd_irq_handler()
467 queue_work(dev_priv->hotplug.dp_wq, &dev_priv->hotplug.dig_port_work); in intel_hpd_irq_handler()
469 schedule_work(&dev_priv->hotplug.hotplug_work); in intel_hpd_irq_handler()
486 void intel_hpd_init(struct drm_i915_private *dev_priv) in intel_hpd_init() argument
491 dev_priv->hotplug.stats[i].count = 0; in intel_hpd_init()
492 dev_priv->hotplug.stats[i].state = HPD_ENABLED; in intel_hpd_init()
495 WRITE_ONCE(dev_priv->hotplug.poll_enabled, false); in intel_hpd_init()
496 schedule_work(&dev_priv->hotplug.poll_init_work); in intel_hpd_init()
502 if (dev_priv->display_irqs_enabled && dev_priv->display.hpd_irq_setup) { in intel_hpd_init()
503 spin_lock_irq(&dev_priv->irq_lock); in intel_hpd_init()
504 if (dev_priv->display_irqs_enabled) in intel_hpd_init()
505 dev_priv->display.hpd_irq_setup(dev_priv); in intel_hpd_init()
506 spin_unlock_irq(&dev_priv->irq_lock); in intel_hpd_init()
512 struct drm_i915_private *dev_priv = in i915_hpd_poll_init_work() local
515 struct drm_device *dev = &dev_priv->drm; in i915_hpd_poll_init_work()
522 enabled = READ_ONCE(dev_priv->hotplug.poll_enabled); in i915_hpd_poll_init_work()
535 if (!connector->polled && I915_HAS_HOTPLUG(dev_priv) && in i915_hpd_poll_init_work()
574 void intel_hpd_poll_init(struct drm_i915_private *dev_priv) in intel_hpd_poll_init() argument
576 WRITE_ONCE(dev_priv->hotplug.poll_enabled, true); in intel_hpd_poll_init()
584 schedule_work(&dev_priv->hotplug.poll_init_work); in intel_hpd_poll_init()
587 void intel_hpd_init_work(struct drm_i915_private *dev_priv) in intel_hpd_init_work() argument
589 INIT_WORK(&dev_priv->hotplug.hotplug_work, i915_hotplug_work_func); in intel_hpd_init_work()
590 INIT_WORK(&dev_priv->hotplug.dig_port_work, i915_digport_work_func); in intel_hpd_init_work()
591 INIT_WORK(&dev_priv->hotplug.poll_init_work, i915_hpd_poll_init_work); in intel_hpd_init_work()
592 INIT_DELAYED_WORK(&dev_priv->hotplug.reenable_work, in intel_hpd_init_work()
596 void intel_hpd_cancel_work(struct drm_i915_private *dev_priv) in intel_hpd_cancel_work() argument
598 spin_lock_irq(&dev_priv->irq_lock); in intel_hpd_cancel_work()
600 dev_priv->hotplug.long_port_mask = 0; in intel_hpd_cancel_work()
601 dev_priv->hotplug.short_port_mask = 0; in intel_hpd_cancel_work()
602 dev_priv->hotplug.event_bits = 0; in intel_hpd_cancel_work()
604 spin_unlock_irq(&dev_priv->irq_lock); in intel_hpd_cancel_work()
606 cancel_work_sync(&dev_priv->hotplug.dig_port_work); in intel_hpd_cancel_work()
607 cancel_work_sync(&dev_priv->hotplug.hotplug_work); in intel_hpd_cancel_work()
608 cancel_work_sync(&dev_priv->hotplug.poll_init_work); in intel_hpd_cancel_work()
609 cancel_delayed_work_sync(&dev_priv->hotplug.reenable_work); in intel_hpd_cancel_work()
612 bool intel_hpd_disable(struct drm_i915_private *dev_priv, enum hpd_pin pin) in intel_hpd_disable() argument
619 spin_lock_irq(&dev_priv->irq_lock); in intel_hpd_disable()
620 if (dev_priv->hotplug.stats[pin].state == HPD_ENABLED) { in intel_hpd_disable()
621 dev_priv->hotplug.stats[pin].state = HPD_DISABLED; in intel_hpd_disable()
624 spin_unlock_irq(&dev_priv->irq_lock); in intel_hpd_disable()
629 void intel_hpd_enable(struct drm_i915_private *dev_priv, enum hpd_pin pin) in intel_hpd_enable() argument
634 spin_lock_irq(&dev_priv->irq_lock); in intel_hpd_enable()
635 dev_priv->hotplug.stats[pin].state = HPD_ENABLED; in intel_hpd_enable()
636 spin_unlock_irq(&dev_priv->irq_lock); in intel_hpd_enable()