> -----Original Message-----
> From: Intel-gfx <intel-gfx-boun...@lists.freedesktop.org> On Behalf Of Jani
> Nikula
> Sent: Tuesday, March 11, 2025 11:31 PM
> To: intel-gfx@lists.freedesktop.org; intel...@lists.freedesktop.org
> Cc: Nikula, Jani <jani.nik...@intel.com>
> Subject: [PATCH 3/9] drm/i915/hotplug: convert intel_hotplug.[ch] to struct
> intel_display
>
> Going forward, struct intel_display is the main display device data
> pointer. Convert as much as possible of intel_hotplug.[ch] to struct
> intel_display.
Looks Good to me.
Reviewed-by: Uma Shankar <uma.shan...@intel.com>
> Signed-off-by: Jani Nikula <jani.nik...@intel.com>
> ---
> .../drm/i915/display/intel_display_debugfs.c | 2 +-
> .../drm/i915/display/intel_display_driver.c | 14 +-
> .../i915/display/intel_display_power_well.c | 6 +-
> .../drm/i915/display/intel_display_reset.c | 4 +-
> drivers/gpu/drm/i915/display/intel_dp.c | 2 +-
> drivers/gpu/drm/i915/display/intel_hotplug.c | 332 ++++++++++--------
> drivers/gpu/drm/i915/display/intel_hotplug.h | 26 +-
> .../gpu/drm/i915/display/intel_hotplug_irq.c | 24 +-
> drivers/gpu/drm/i915/i915_driver.c | 14 +-
> drivers/gpu/drm/i915/i915_irq.c | 3 +-
> drivers/gpu/drm/xe/display/xe_display.c | 26 +-
> 11 files changed, 240 insertions(+), 213 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> index fdedf65bee53..f42b5a69eed5 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> @@ -844,7 +844,7 @@ void intel_display_debugfs_register(struct intel_display
> *display)
> intel_dmc_debugfs_register(display);
> intel_dp_test_debugfs_register(display);
> intel_fbc_debugfs_register(display);
> - intel_hpd_debugfs_register(i915);
> + intel_hpd_debugfs_register(display);
> intel_opregion_debugfs_register(display);
> intel_psr_debugfs_register(display);
> intel_wm_debugfs_register(i915);
> diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c
> b/drivers/gpu/drm/i915/display/intel_display_driver.c
> index 31740a677dd8..ae60ccb21520 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_driver.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
> @@ -315,11 +315,9 @@ static void set_display_access(struct intel_display
> *display,
> */
> void intel_display_driver_enable_user_access(struct intel_display *display)
> {
> - struct drm_i915_private *i915 = to_i915(display->drm);
> -
> set_display_access(display, true, NULL);
>
> - intel_hpd_enable_detection_work(i915);
> + intel_hpd_enable_detection_work(display);
> }
>
> /**
> @@ -341,9 +339,7 @@ void intel_display_driver_enable_user_access(struct
> intel_display *display)
> */
> void intel_display_driver_disable_user_access(struct intel_display *display)
> {
> - struct drm_i915_private *i915 = to_i915(display->drm);
> -
> - intel_hpd_disable_detection_work(i915);
> + intel_hpd_disable_detection_work(display);
>
> set_display_access(display, false, current);
> }
> @@ -524,7 +520,7 @@ int intel_display_driver_probe(struct intel_display
> *display)
> intel_overlay_setup(display);
>
> /* Only enable hotplug handling once the fbdev is fully set up. */
> - intel_hpd_init(i915);
> + intel_hpd_init(display);
>
> skl_watermark_ipc_init(i915);
>
> @@ -558,7 +554,7 @@ void intel_display_driver_register(struct intel_display
> *display)
> * fbdev->async_cookie.
> */
> drm_kms_helper_poll_init(display->drm);
> - intel_hpd_poll_disable(i915);
> + intel_hpd_poll_disable(display);
>
> intel_fbdev_setup(i915);
>
> @@ -600,7 +596,7 @@ void intel_display_driver_remove_noirq(struct
> intel_display *display)
> * Due to the hpd irq storm handling the hotplug work can re-arm the
> * poll handlers. Hence disable polling after hpd handling is shut down.
> */
> - intel_hpd_poll_fini(i915);
> + intel_hpd_poll_fini(display);
>
> intel_unregister_dsm_handler();
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_power_well.c
> b/drivers/gpu/drm/i915/display/intel_display_power_well.c
> index 8ec87ffd87d2..daf2a0cbb157 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_power_well.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_power_well.c
> @@ -1236,8 +1236,8 @@ static void vlv_display_power_well_init(struct
> intel_display *display)
> if (display->power.domains.initializing)
> return;
>
> - intel_hpd_init(dev_priv);
> - intel_hpd_poll_disable(dev_priv);
> + intel_hpd_init(display);
> + intel_hpd_poll_disable(display);
>
> /* Re-enable the ADPA, if we have one */
> for_each_intel_encoder(display->drm, encoder) {
> @@ -1265,7 +1265,7 @@ static void vlv_display_power_well_deinit(struct
> intel_display *display)
>
> /* Prevent us from re-enabling polling on accident in late suspend */
> if (!display->drm->dev->power.is_suspended)
> - intel_hpd_poll_enable(dev_priv);
> + intel_hpd_poll_enable(display);
> }
>
> static void vlv_display_power_well_enable(struct intel_display *display,
> diff --git a/drivers/gpu/drm/i915/display/intel_display_reset.c
> b/drivers/gpu/drm/i915/display/intel_display_reset.c
> index 1f2798404f2c..1dbd3e841df3 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_reset.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_reset.c
> @@ -107,14 +107,14 @@ void intel_display_reset_finish(struct intel_display
> *display, bool test_only)
> intel_display_driver_init_hw(display);
> intel_clock_gating_init(i915);
> intel_cx0_pll_power_save_wa(display);
> - intel_hpd_init(i915);
> + intel_hpd_init(display);
>
> ret = __intel_display_driver_resume(display, state, ctx);
> if (ret)
> drm_err(display->drm,
> "Restoring old state failed with %i\n", ret);
>
> - intel_hpd_poll_disable(i915);
> + intel_hpd_poll_disable(display);
> }
>
> drm_atomic_state_put(state);
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index a236b5fc7a3d..7d074770d793 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -6117,7 +6117,7 @@ static void intel_dp_oob_hotplug_event(struct
> drm_connector *connector,
> spin_unlock_irq(&i915->irq_lock);
>
> if (need_work)
> - intel_hpd_schedule_detection(i915);
> + intel_hpd_schedule_detection(display);
> }
>
> static const struct drm_connector_funcs intel_dp_connector_funcs = {
> diff --git a/drivers/gpu/drm/i915/display/intel_hotplug.c
> b/drivers/gpu/drm/i915/display/intel_hotplug.c
> index c69b1f5fd160..9bde28ce1979 100644
> --- a/drivers/gpu/drm/i915/display/intel_hotplug.c
> +++ b/drivers/gpu/drm/i915/display/intel_hotplug.c
> @@ -118,7 +118,7 @@ intel_connector_hpd_pin(struct intel_connector
> *connector)
>
> /**
> * intel_hpd_irq_storm_detect - gather stats and detect HPD IRQ storm on a
> pin
> - * @dev_priv: private driver data pointer
> + * @display: display device
> * @pin: the pin to gather stats on
> * @long_hpd: whether the HPD IRQ was long or short
> *
> @@ -127,13 +127,13 @@ intel_connector_hpd_pin(struct intel_connector
> *connector)
> * responsible for further action.
> *
> * The number of IRQs that are allowed within @HPD_STORM_DETECT_PERIOD
> is
> - * stored in @dev_priv->display.hotplug.hpd_storm_threshold which defaults to
> + * stored in @display->hotplug.hpd_storm_threshold which defaults to
> * @HPD_STORM_DEFAULT_THRESHOLD. Long IRQs count as +10 to this
> threshold, and
> * short IRQs count as +1. If this threshold is exceeded, it's considered an
> * IRQ storm and the IRQ state is set to @HPD_MARK_DISABLED.
> *
> * By default, most systems will only count long IRQs towards
> - * &dev_priv->display.hotplug.hpd_storm_threshold. However, some older
> systems also
> + * &display->hotplug.hpd_storm_threshold. However, some older systems also
> * suffer from short IRQ storms and must also track these. Because short IRQ
> * storms are naturally caused by sideband interactions with DP MST devices,
> * short IRQ detection is only enabled for systems without DP MST support.
> @@ -145,10 +145,10 @@ intel_connector_hpd_pin(struct intel_connector
> *connector)
> *
> * Return true if an IRQ storm was detected on @pin.
> */
> -static bool intel_hpd_irq_storm_detect(struct drm_i915_private *dev_priv,
> +static bool intel_hpd_irq_storm_detect(struct intel_display *display,
> enum hpd_pin pin, bool long_hpd)
> {
> - struct intel_hotplug *hpd = &dev_priv->display.hotplug;
> + struct intel_hotplug *hpd = &display->hotplug;
> unsigned long start = hpd->stats[pin].last_jiffies;
> unsigned long end = start +
> msecs_to_jiffies(HPD_STORM_DETECT_PERIOD);
> const int increment = long_hpd ? 10 : 1;
> @@ -156,7 +156,7 @@ static bool intel_hpd_irq_storm_detect(struct
> drm_i915_private *dev_priv,
> bool storm = false;
>
> if (!threshold ||
> - (!long_hpd && !dev_priv->display.hotplug.hpd_short_storm_enabled))
> + (!long_hpd && !display->hotplug.hpd_short_storm_enabled))
> return false;
>
> if (!time_in_range(jiffies, start, end)) {
> @@ -167,11 +167,11 @@ static bool intel_hpd_irq_storm_detect(struct
> drm_i915_private *dev_priv,
> hpd->stats[pin].count += increment;
> if (hpd->stats[pin].count > threshold) {
> hpd->stats[pin].state = HPD_MARK_DISABLED;
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(display->drm,
> "HPD interrupt storm detected on PIN %d\n", pin);
> storm = true;
> } else {
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(display->drm,
> "Received HPD interrupt on PIN %d - cnt: %d\n",
> pin,
> hpd->stats[pin].count);
> @@ -180,56 +180,65 @@ static bool intel_hpd_irq_storm_detect(struct
> drm_i915_private *dev_priv,
> return storm;
> }
>
> -static bool detection_work_enabled(struct drm_i915_private *i915)
> +static bool detection_work_enabled(struct intel_display *display)
> {
> + struct drm_i915_private *i915 = to_i915(display->drm);
> +
> lockdep_assert_held(&i915->irq_lock);
>
> - return i915->display.hotplug.detection_work_enabled;
> + return display->hotplug.detection_work_enabled;
> }
>
> static bool
> -mod_delayed_detection_work(struct drm_i915_private *i915, struct
> delayed_work *work, int delay)
> +mod_delayed_detection_work(struct intel_display *display, struct delayed_work
> *work, int delay)
> {
> + struct drm_i915_private *i915 = to_i915(display->drm);
> +
> lockdep_assert_held(&i915->irq_lock);
>
> - if (!detection_work_enabled(i915))
> + if (!detection_work_enabled(display))
> return false;
>
> return mod_delayed_work(i915->unordered_wq, work, delay);
> }
>
> static bool
> -queue_delayed_detection_work(struct drm_i915_private *i915, struct
> delayed_work *work, int delay)
> +queue_delayed_detection_work(struct intel_display *display, struct
> delayed_work *work, int delay)
> {
> + struct drm_i915_private *i915 = to_i915(display->drm);
> +
> lockdep_assert_held(&i915->irq_lock);
>
> - if (!detection_work_enabled(i915))
> + if (!detection_work_enabled(display))
> return false;
>
> return queue_delayed_work(i915->unordered_wq, work, delay);
> }
>
> static bool
> -queue_detection_work(struct drm_i915_private *i915, struct work_struct
> *work)
> +queue_detection_work(struct intel_display *display, struct work_struct *work)
> {
> + struct drm_i915_private *i915 = to_i915(display->drm);
> +
> lockdep_assert_held(&i915->irq_lock);
>
> - if (!detection_work_enabled(i915))
> + if (!detection_work_enabled(display))
> return false;
>
> return queue_work(i915->unordered_wq, work);
> }
>
> static void
> -intel_hpd_irq_storm_switch_to_polling(struct drm_i915_private *dev_priv)
> +intel_hpd_irq_storm_switch_to_polling(struct intel_display *display)
> {
> + struct drm_i915_private *dev_priv = to_i915(display->drm);
> struct drm_connector_list_iter conn_iter;
> struct intel_connector *connector;
> bool hpd_disabled = false;
>
> lockdep_assert_held(&dev_priv->irq_lock);
>
> - drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
> + drm_connector_list_iter_begin(display->drm, &conn_iter);
> for_each_intel_connector_iter(connector, &conn_iter) {
> enum hpd_pin pin;
>
> @@ -238,15 +247,15 @@ intel_hpd_irq_storm_switch_to_polling(struct
> drm_i915_private *dev_priv)
>
> pin = intel_connector_hpd_pin(connector);
> if (pin == HPD_NONE ||
> - dev_priv->display.hotplug.stats[pin].state !=
> HPD_MARK_DISABLED)
> + display->hotplug.stats[pin].state != HPD_MARK_DISABLED)
> continue;
>
> - drm_info(&dev_priv->drm,
> + drm_info(display->drm,
> "HPD interrupt storm detected on connector %s: "
> "switching from hotplug detection to polling\n",
> connector->base.name);
>
> - dev_priv->display.hotplug.stats[pin].state = HPD_DISABLED;
> + display->hotplug.stats[pin].state = HPD_DISABLED;
> connector->base.polled = DRM_CONNECTOR_POLL_CONNECT |
> DRM_CONNECTOR_POLL_DISCONNECT;
> hpd_disabled = true;
> @@ -255,18 +264,18 @@ intel_hpd_irq_storm_switch_to_polling(struct
> drm_i915_private *dev_priv)
>
> /* Enable polling and queue hotplug re-enabling. */
> if (hpd_disabled) {
> - drm_kms_helper_poll_reschedule(&dev_priv->drm);
> - mod_delayed_detection_work(dev_priv,
> - &dev_priv-
> >display.hotplug.reenable_work,
> + drm_kms_helper_poll_reschedule(display->drm);
> + mod_delayed_detection_work(display,
> + &display->hotplug.reenable_work,
>
> msecs_to_jiffies(HPD_STORM_REENABLE_DELAY));
> }
> }
>
> static void intel_hpd_irq_storm_reenable_work(struct work_struct *work)
> {
> - struct drm_i915_private *dev_priv =
> - container_of(work, typeof(*dev_priv),
> - display.hotplug.reenable_work.work);
> + struct intel_display *display =
> + container_of(work, typeof(*display),
> hotplug.reenable_work.work);
> + struct drm_i915_private *dev_priv = to_i915(display->drm);
> struct drm_connector_list_iter conn_iter;
> struct intel_connector *connector;
> intel_wakeref_t wakeref;
> @@ -276,15 +285,15 @@ static void intel_hpd_irq_storm_reenable_work(struct
> work_struct *work)
>
> spin_lock_irq(&dev_priv->irq_lock);
>
> - drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
> + drm_connector_list_iter_begin(display->drm, &conn_iter);
> for_each_intel_connector_iter(connector, &conn_iter) {
> pin = intel_connector_hpd_pin(connector);
> if (pin == HPD_NONE ||
> - dev_priv->display.hotplug.stats[pin].state != HPD_DISABLED)
> + display->hotplug.stats[pin].state != HPD_DISABLED)
> continue;
>
> if (connector->base.polled != connector->polled)
> - drm_dbg(&dev_priv->drm,
> + drm_dbg(display->drm,
> "Reenabling HPD on connector %s\n",
> connector->base.name);
> connector->base.polled = connector->polled;
> @@ -292,8 +301,8 @@ static void intel_hpd_irq_storm_reenable_work(struct
> work_struct *work)
> drm_connector_list_iter_end(&conn_iter);
>
> for_each_hpd_pin(pin) {
> - if (dev_priv->display.hotplug.stats[pin].state == HPD_DISABLED)
> - dev_priv->display.hotplug.stats[pin].state =
> HPD_ENABLED;
> + if (display->hotplug.stats[pin].state == HPD_DISABLED)
> + display->hotplug.stats[pin].state = HPD_ENABLED;
> }
>
> intel_hpd_irq_setup(dev_priv);
> @@ -407,7 +416,7 @@ static void i915_digport_work_func(struct work_struct
> *work)
>
> spin_unlock_irq(&dev_priv->irq_lock);
>
> - for_each_intel_encoder(&dev_priv->drm, encoder) {
> + for_each_intel_encoder(display->drm, encoder) {
> struct intel_digital_port *dig_port;
> enum hpd_pin pin = encoder->hpd_pin;
> bool long_hpd, short_hpd;
> @@ -433,9 +442,9 @@ static void i915_digport_work_func(struct work_struct
> *work)
>
> if (old_bits) {
> spin_lock_irq(&dev_priv->irq_lock);
> - dev_priv->display.hotplug.event_bits |= old_bits;
> - queue_delayed_detection_work(dev_priv,
> - &dev_priv-
> >display.hotplug.hotplug_work, 0);
> + display->hotplug.event_bits |= old_bits;
> + queue_delayed_detection_work(display,
> + &display->hotplug.hotplug_work, 0);
> spin_unlock_irq(&dev_priv->irq_lock);
> }
> }
> @@ -481,8 +490,8 @@ static void i915_hotplug_work_func(struct work_struct
> *work)
> int changed_connectors = 0;
> u32 blocked_hpd_pin_mask;
>
> - mutex_lock(&dev_priv->drm.mode_config.mutex);
> - drm_dbg_kms(&dev_priv->drm, "running encoder hotplug functions\n");
> + mutex_lock(&display->drm->mode_config.mutex);
> + drm_dbg_kms(display->drm, "running encoder hotplug functions\n");
>
> spin_lock_irq(&dev_priv->irq_lock);
>
> @@ -493,18 +502,18 @@ static void i915_hotplug_work_func(struct work_struct
> *work)
> hotplug->retry_bits &= ~hpd_retry_bits;
>
> /* Enable polling for connectors which had HPD IRQ storms */
> - intel_hpd_irq_storm_switch_to_polling(dev_priv);
> + intel_hpd_irq_storm_switch_to_polling(display);
>
> spin_unlock_irq(&dev_priv->irq_lock);
>
> /* Skip calling encode hotplug handlers if ignore long HPD set*/
> - if (dev_priv->display.hotplug.ignore_long_hpd) {
> - drm_dbg_kms(&dev_priv->drm, "Ignore HPD flag on - skip
> encoder hotplug handlers\n");
> - mutex_unlock(&dev_priv->drm.mode_config.mutex);
> + if (display->hotplug.ignore_long_hpd) {
> + drm_dbg_kms(display->drm, "Ignore HPD flag on - skip encoder
> hotplug handlers\n");
> + mutex_unlock(&display->drm->mode_config.mutex);
> return;
> }
>
> - drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
> + drm_connector_list_iter_begin(display->drm, &conn_iter);
> for_each_intel_connector_iter(connector, &conn_iter) {
> enum hpd_pin pin;
> u32 hpd_bit;
> @@ -523,7 +532,7 @@ static void i915_hotplug_work_func(struct work_struct
> *work)
> else
> connector->hotplug_retries++;
>
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(display->drm,
> "Connector %s (pin %i) received hotplug
> event. (retry %d)\n",
> connector->base.name, pin,
> connector->hotplug_retries);
> @@ -546,12 +555,12 @@ static void i915_hotplug_work_func(struct work_struct
> *work)
> }
> }
> drm_connector_list_iter_end(&conn_iter);
> - mutex_unlock(&dev_priv->drm.mode_config.mutex);
> + mutex_unlock(&display->drm->mode_config.mutex);
>
> if (changed_connectors == 1)
>
> drm_kms_helper_connector_hotplug_event(first_changed_connector);
> else if (changed_connectors > 0)
> - drm_kms_helper_hotplug_event(&dev_priv->drm);
> + drm_kms_helper_hotplug_event(display->drm);
>
> if (first_changed_connector)
> drm_connector_put(first_changed_connector);
> @@ -560,10 +569,10 @@ static void i915_hotplug_work_func(struct work_struct
> *work)
> retry &= ~changed;
> if (retry) {
> spin_lock_irq(&dev_priv->irq_lock);
> - dev_priv->display.hotplug.retry_bits |= retry;
> + display->hotplug.retry_bits |= retry;
>
> - mod_delayed_detection_work(dev_priv,
> - &dev_priv-
> >display.hotplug.hotplug_work,
> + mod_delayed_detection_work(display,
> + &display->hotplug.hotplug_work,
>
> msecs_to_jiffies(HPD_RETRY_DELAY));
> spin_unlock_irq(&dev_priv->irq_lock);
> }
> @@ -572,7 +581,7 @@ static void i915_hotplug_work_func(struct work_struct
> *work)
>
> /**
> * intel_hpd_irq_handler - main hotplug irq handler
> - * @dev_priv: drm_i915_private
> + * @display: display device
> * @pin_mask: a mask of hpd pins that have triggered the irq
> * @long_mask: a mask of hpd pins that may be long hpd pulses
> *
> @@ -586,10 +595,10 @@ static void i915_hotplug_work_func(struct work_struct
> *work)
> * Here, we do hotplug irq storm detection and mitigation, and pass further
> * processing to appropriate bottom halves.
> */
> -void intel_hpd_irq_handler(struct drm_i915_private *dev_priv,
> +void intel_hpd_irq_handler(struct intel_display *display,
> u32 pin_mask, u32 long_mask)
> {
> - struct intel_display *display = to_intel_display(&dev_priv->drm);
> + struct drm_i915_private *dev_priv = to_i915(display->drm);
> struct intel_encoder *encoder;
> bool storm_detected = false;
> bool queue_dig = false, queue_hp = false;
> @@ -608,7 +617,7 @@ void intel_hpd_irq_handler(struct drm_i915_private
> *dev_priv,
> * as each pin may have up to two encoders (HDMI and DP) and
> * only the one of them (DP) will have ->hpd_pulse().
> */
> - for_each_intel_encoder(&dev_priv->drm, encoder) {
> + for_each_intel_encoder(display->drm, encoder) {
> bool long_hpd;
>
> pin = encoder->hpd_pin;
> @@ -620,7 +629,7 @@ void intel_hpd_irq_handler(struct drm_i915_private
> *dev_priv,
>
> long_hpd = long_mask & BIT(pin);
>
> - drm_dbg(&dev_priv->drm,
> + drm_dbg(display->drm,
> "digital hpd on [ENCODER:%d:%s] - %s\n",
> encoder->base.base.id, encoder->base.name,
> long_hpd ? "long" : "short");
> @@ -630,10 +639,10 @@ void intel_hpd_irq_handler(struct drm_i915_private
> *dev_priv,
>
> if (long_hpd) {
> long_hpd_pulse_mask |= BIT(pin);
> - dev_priv->display.hotplug.long_hpd_pin_mask |=
> BIT(pin);
> + display->hotplug.long_hpd_pin_mask |= BIT(pin);
> } else {
> short_hpd_pulse_mask |= BIT(pin);
> - dev_priv->display.hotplug.short_hpd_pin_mask |=
> BIT(pin);
> + display->hotplug.short_hpd_pin_mask |= BIT(pin);
> }
> }
>
> @@ -644,20 +653,20 @@ void intel_hpd_irq_handler(struct drm_i915_private
> *dev_priv,
> if (!(BIT(pin) & pin_mask))
> continue;
>
> - if (dev_priv->display.hotplug.stats[pin].state == HPD_DISABLED)
> {
> + if (display->hotplug.stats[pin].state == HPD_DISABLED) {
> /*
> * On GMCH platforms the interrupt mask bits only
> * prevent irq generation, not the setting of the
> * hotplug bits itself. So only WARN about unexpected
> * interrupts on saner platforms.
> */
> - drm_WARN_ONCE(&dev_priv->drm,
> !HAS_GMCH(dev_priv),
> + drm_WARN_ONCE(display->drm, !HAS_GMCH(display),
> "Received HPD interrupt on pin %d although
> disabled\n",
> pin);
> continue;
> }
>
> - if (dev_priv->display.hotplug.stats[pin].state != HPD_ENABLED)
> + if (display->hotplug.stats[pin].state != HPD_ENABLED)
> continue;
>
> /*
> @@ -668,15 +677,15 @@ void intel_hpd_irq_handler(struct drm_i915_private
> *dev_priv,
> if (((short_hpd_pulse_mask | long_hpd_pulse_mask) & BIT(pin)))
> {
> long_hpd = long_hpd_pulse_mask & BIT(pin);
> } else {
> - dev_priv->display.hotplug.event_bits |= BIT(pin);
> + display->hotplug.event_bits |= BIT(pin);
> long_hpd = true;
>
> if (!hpd_pin_is_blocked(display, pin))
> queue_hp = true;
> }
>
> - if (intel_hpd_irq_storm_detect(dev_priv, pin, long_hpd)) {
> - dev_priv->display.hotplug.event_bits &= ~BIT(pin);
> + if (intel_hpd_irq_storm_detect(display, pin, long_hpd)) {
> + display->hotplug.event_bits &= ~BIT(pin);
> storm_detected = true;
> queue_hp = true;
> }
> @@ -696,17 +705,17 @@ void intel_hpd_irq_handler(struct drm_i915_private
> *dev_priv,
> * deadlock.
> */
> if (queue_dig)
> - queue_work(dev_priv->display.hotplug.dp_wq, &dev_priv-
> >display.hotplug.dig_port_work);
> + queue_work(display->hotplug.dp_wq, &display-
> >hotplug.dig_port_work);
> if (queue_hp)
> - queue_delayed_detection_work(dev_priv,
> - &dev_priv-
> >display.hotplug.hotplug_work, 0);
> + queue_delayed_detection_work(display,
> + &display->hotplug.hotplug_work, 0);
>
> spin_unlock(&dev_priv->irq_lock);
> }
>
> /**
> * intel_hpd_init - initializes and enables hpd support
> - * @dev_priv: i915 device instance
> + * @display: display device instance
> *
> * This function enables the hotplug support. It requires that interrupts
> have
> * already been enabled with intel_irq_init_hw(). From this point on hotplug
> and
> @@ -718,16 +727,17 @@ void intel_hpd_irq_handler(struct drm_i915_private
> *dev_priv,
> *
> * Also see: intel_hpd_poll_enable() and intel_hpd_poll_disable().
> */
> -void intel_hpd_init(struct drm_i915_private *dev_priv)
> +void intel_hpd_init(struct intel_display *display)
> {
> + struct drm_i915_private *dev_priv = to_i915(display->drm);
> int i;
>
> - if (!HAS_DISPLAY(dev_priv))
> + if (!HAS_DISPLAY(display))
> return;
>
> for_each_hpd_pin(i) {
> - dev_priv->display.hotplug.stats[i].count = 0;
> - dev_priv->display.hotplug.stats[i].state = HPD_ENABLED;
> + display->hotplug.stats[i].count = 0;
> + display->hotplug.stats[i].state = HPD_ENABLED;
> }
>
> /*
> @@ -739,19 +749,19 @@ void intel_hpd_init(struct drm_i915_private *dev_priv)
> spin_unlock_irq(&dev_priv->irq_lock);
> }
>
> -static void i915_hpd_poll_detect_connectors(struct drm_i915_private *i915)
> +static void i915_hpd_poll_detect_connectors(struct intel_display *display)
> {
> struct drm_connector_list_iter conn_iter;
> struct intel_connector *connector;
> struct intel_connector *first_changed_connector = NULL;
> int changed = 0;
>
> - mutex_lock(&i915->drm.mode_config.mutex);
> + mutex_lock(&display->drm->mode_config.mutex);
>
> - if (!i915->drm.mode_config.poll_enabled)
> + if (!display->drm->mode_config.poll_enabled)
> goto out;
>
> - drm_connector_list_iter_begin(&i915->drm, &conn_iter);
> + drm_connector_list_iter_begin(display->drm, &conn_iter);
> for_each_intel_connector_iter(connector, &conn_iter) {
> if (!(connector->base.polled & DRM_CONNECTOR_POLL_HPD))
> continue;
> @@ -769,7 +779,7 @@ static void i915_hpd_poll_detect_connectors(struct
> drm_i915_private *i915)
> drm_connector_list_iter_end(&conn_iter);
>
> out:
> - mutex_unlock(&i915->drm.mode_config.mutex);
> + mutex_unlock(&display->drm->mode_config.mutex);
>
> if (!changed)
> return;
> @@ -777,25 +787,24 @@ static void i915_hpd_poll_detect_connectors(struct
> drm_i915_private *i915)
> if (changed == 1)
>
> drm_kms_helper_connector_hotplug_event(&first_changed_connector-
> >base);
> else
> - drm_kms_helper_hotplug_event(&i915->drm);
> + drm_kms_helper_hotplug_event(display->drm);
>
> drm_connector_put(&first_changed_connector->base);
> }
>
> static void i915_hpd_poll_init_work(struct work_struct *work)
> {
> - struct drm_i915_private *dev_priv =
> - container_of(work, struct drm_i915_private,
> - display.hotplug.poll_init_work);
> - struct intel_display *display = &dev_priv->display;
> + struct intel_display *display =
> + container_of(work, typeof(*display), hotplug.poll_init_work);
> + struct drm_i915_private *dev_priv = to_i915(display->drm);
> struct drm_connector_list_iter conn_iter;
> struct intel_connector *connector;
> intel_wakeref_t wakeref;
> bool enabled;
>
> - mutex_lock(&dev_priv->drm.mode_config.mutex);
> + mutex_lock(&display->drm->mode_config.mutex);
>
> - enabled = READ_ONCE(dev_priv->display.hotplug.poll_enabled);
> + enabled = READ_ONCE(display->hotplug.poll_enabled);
> /*
> * Prevent taking a power reference from this sequence of
> * i915_hpd_poll_init_work() -> drm_helper_hpd_irq_event() ->
> @@ -805,14 +814,14 @@ static void i915_hpd_poll_init_work(struct work_struct
> *work)
> if (!enabled) {
> wakeref = intel_display_power_get(display,
>
> POWER_DOMAIN_DISPLAY_CORE);
> - drm_WARN_ON(&dev_priv->drm,
> - READ_ONCE(dev_priv-
> >display.hotplug.poll_enabled));
> - cancel_work(&dev_priv->display.hotplug.poll_init_work);
> + drm_WARN_ON(display->drm,
> + READ_ONCE(display->hotplug.poll_enabled));
> + cancel_work(&display->hotplug.poll_init_work);
> }
>
> spin_lock_irq(&dev_priv->irq_lock);
>
> - drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
> + drm_connector_list_iter_begin(display->drm, &conn_iter);
> for_each_intel_connector_iter(connector, &conn_iter) {
> enum hpd_pin pin;
>
> @@ -820,7 +829,7 @@ static void i915_hpd_poll_init_work(struct work_struct
> *work)
> if (pin == HPD_NONE)
> continue;
>
> - if (dev_priv->display.hotplug.stats[pin].state == HPD_DISABLED)
> + if (display->hotplug.stats[pin].state == HPD_DISABLED)
> continue;
>
> connector->base.polled = connector->polled;
> @@ -834,16 +843,16 @@ static void i915_hpd_poll_init_work(struct work_struct
> *work)
> spin_unlock_irq(&dev_priv->irq_lock);
>
> if (enabled)
> - drm_kms_helper_poll_reschedule(&dev_priv->drm);
> + drm_kms_helper_poll_reschedule(display->drm);
>
> - mutex_unlock(&dev_priv->drm.mode_config.mutex);
> + mutex_unlock(&display->drm->mode_config.mutex);
>
> /*
> * We might have missed any hotplugs that happened while we were
> * in the middle of disabling polling
> */
> if (!enabled) {
> - i915_hpd_poll_detect_connectors(dev_priv);
> + i915_hpd_poll_detect_connectors(display);
>
> intel_display_power_put(display,
> POWER_DOMAIN_DISPLAY_CORE,
> @@ -853,7 +862,7 @@ static void i915_hpd_poll_init_work(struct work_struct
> *work)
>
> /**
> * intel_hpd_poll_enable - enable polling for connectors with hpd
> - * @dev_priv: i915 device instance
> + * @display: display device instance
> *
> * This function enables polling for all connectors which support HPD.
> * Under certain conditions HPD may not be functional. On most Intel GPUs,
> @@ -867,15 +876,14 @@ static void i915_hpd_poll_init_work(struct work_struct
> *work)
> *
> * Also see: intel_hpd_init() and intel_hpd_poll_disable().
> */
> -void intel_hpd_poll_enable(struct drm_i915_private *dev_priv)
> +void intel_hpd_poll_enable(struct intel_display *display)
> {
> - struct intel_display *display = &dev_priv->display;
> + struct drm_i915_private *dev_priv = to_i915(display->drm);
>
> - if (!HAS_DISPLAY(dev_priv) ||
> - !intel_display_device_enabled(display))
> + if (!HAS_DISPLAY(display) || !intel_display_device_enabled(display))
> return;
>
> - WRITE_ONCE(dev_priv->display.hotplug.poll_enabled, true);
> + WRITE_ONCE(display->hotplug.poll_enabled, true);
>
> /*
> * We might already be holding dev->mode_config.mutex, so do this in a
> @@ -884,14 +892,14 @@ void intel_hpd_poll_enable(struct drm_i915_private
> *dev_priv)
> * this worker anyway
> */
> spin_lock_irq(&dev_priv->irq_lock);
> - queue_detection_work(dev_priv,
> - &dev_priv->display.hotplug.poll_init_work);
> + queue_detection_work(display,
> + &display->hotplug.poll_init_work);
> spin_unlock_irq(&dev_priv->irq_lock);
> }
>
> /**
> * intel_hpd_poll_disable - disable polling for connectors with hpd
> - * @dev_priv: i915 device instance
> + * @display: display device instance
> *
> * This function disables polling for all connectors which support HPD.
> * Under certain conditions HPD may not be functional. On most Intel GPUs,
> @@ -908,26 +916,28 @@ void intel_hpd_poll_enable(struct drm_i915_private
> *dev_priv)
> *
> * Also see: intel_hpd_init() and intel_hpd_poll_enable().
> */
> -void intel_hpd_poll_disable(struct drm_i915_private *dev_priv)
> +void intel_hpd_poll_disable(struct intel_display *display)
> {
> - if (!HAS_DISPLAY(dev_priv))
> + struct drm_i915_private *dev_priv = to_i915(display->drm);
> +
> + if (!HAS_DISPLAY(display))
> return;
>
> - WRITE_ONCE(dev_priv->display.hotplug.poll_enabled, false);
> + WRITE_ONCE(display->hotplug.poll_enabled, false);
>
> spin_lock_irq(&dev_priv->irq_lock);
> - queue_detection_work(dev_priv,
> - &dev_priv->display.hotplug.poll_init_work);
> + queue_detection_work(display,
> + &display->hotplug.poll_init_work);
> spin_unlock_irq(&dev_priv->irq_lock);
> }
>
> -void intel_hpd_poll_fini(struct drm_i915_private *i915)
> +void intel_hpd_poll_fini(struct intel_display *display)
> {
> struct intel_connector *connector;
> struct drm_connector_list_iter conn_iter;
>
> /* Kill all the work that may have been queued by hpd. */
> - drm_connector_list_iter_begin(&i915->drm, &conn_iter);
> + drm_connector_list_iter_begin(display->drm, &conn_iter);
> for_each_intel_connector_iter(connector, &conn_iter) {
> intel_connector_cancel_modeset_retry_work(connector);
> intel_hdcp_cancel_works(connector);
> @@ -935,70 +945,70 @@ void intel_hpd_poll_fini(struct drm_i915_private
> *i915)
> drm_connector_list_iter_end(&conn_iter);
> }
>
> -void intel_hpd_init_early(struct drm_i915_private *i915)
> +void intel_hpd_init_early(struct intel_display *display)
> {
> - INIT_DELAYED_WORK(&i915->display.hotplug.hotplug_work,
> + INIT_DELAYED_WORK(&display->hotplug.hotplug_work,
> i915_hotplug_work_func);
> - INIT_WORK(&i915->display.hotplug.dig_port_work,
> i915_digport_work_func);
> - INIT_WORK(&i915->display.hotplug.poll_init_work,
> i915_hpd_poll_init_work);
> - INIT_DELAYED_WORK(&i915->display.hotplug.reenable_work,
> + INIT_WORK(&display->hotplug.dig_port_work, i915_digport_work_func);
> + INIT_WORK(&display->hotplug.poll_init_work, i915_hpd_poll_init_work);
> + INIT_DELAYED_WORK(&display->hotplug.reenable_work,
> intel_hpd_irq_storm_reenable_work);
>
> - i915->display.hotplug.hpd_storm_threshold =
> HPD_STORM_DEFAULT_THRESHOLD;
> + display->hotplug.hpd_storm_threshold =
> HPD_STORM_DEFAULT_THRESHOLD;
> /* If we have MST support, we want to avoid doing short HPD IRQ storm
> * detection, as short HPD storms will occur as a natural part of
> * sideband messaging with MST.
> * On older platforms however, IRQ storms can occur with both long and
> * short pulses, as seen on some G4x systems.
> */
> - i915->display.hotplug.hpd_short_storm_enabled = !HAS_DP_MST(i915);
> + display->hotplug.hpd_short_storm_enabled = !HAS_DP_MST(display);
> }
>
> -static bool cancel_all_detection_work(struct drm_i915_private *i915)
> +static bool cancel_all_detection_work(struct intel_display *display)
> {
> bool was_pending = false;
>
> - if (cancel_delayed_work_sync(&i915->display.hotplug.hotplug_work))
> + if (cancel_delayed_work_sync(&display->hotplug.hotplug_work))
> was_pending = true;
> - if (cancel_work_sync(&i915->display.hotplug.poll_init_work))
> + if (cancel_work_sync(&display->hotplug.poll_init_work))
> was_pending = true;
> - if (cancel_delayed_work_sync(&i915->display.hotplug.reenable_work))
> + if (cancel_delayed_work_sync(&display->hotplug.reenable_work))
> was_pending = true;
>
> return was_pending;
> }
>
> -void intel_hpd_cancel_work(struct drm_i915_private *dev_priv)
> +void intel_hpd_cancel_work(struct intel_display *display)
> {
> - struct intel_display *display = to_intel_display(&dev_priv->drm);
> + struct drm_i915_private *dev_priv = to_i915(display->drm);
>
> - if (!HAS_DISPLAY(dev_priv))
> + if (!HAS_DISPLAY(display))
> return;
>
> spin_lock_irq(&dev_priv->irq_lock);
>
> drm_WARN_ON(display->drm, get_blocked_hpd_pin_mask(display));
>
> - dev_priv->display.hotplug.long_hpd_pin_mask = 0;
> - dev_priv->display.hotplug.short_hpd_pin_mask = 0;
> - dev_priv->display.hotplug.event_bits = 0;
> - dev_priv->display.hotplug.retry_bits = 0;
> + display->hotplug.long_hpd_pin_mask = 0;
> + display->hotplug.short_hpd_pin_mask = 0;
> + display->hotplug.event_bits = 0;
> + display->hotplug.retry_bits = 0;
>
> spin_unlock_irq(&dev_priv->irq_lock);
>
> - cancel_work_sync(&dev_priv->display.hotplug.dig_port_work);
> + cancel_work_sync(&display->hotplug.dig_port_work);
>
> /*
> * All other work triggered by hotplug events should be canceled by
> * now.
> */
> - if (cancel_all_detection_work(dev_priv))
> - drm_dbg_kms(&dev_priv->drm, "Hotplug detection work still
> active\n");
> + if (cancel_all_detection_work(display))
> + drm_dbg_kms(display->drm, "Hotplug detection work still
> active\n");
> }
>
> -static void queue_work_for_missed_irqs(struct drm_i915_private *i915)
> +static void queue_work_for_missed_irqs(struct intel_display *display)
> {
> - struct intel_display *display = to_intel_display(&i915->drm);
> + struct drm_i915_private *i915 = to_i915(display->drm);
> struct intel_hotplug *hotplug = &display->hotplug;
> bool queue_hp_work = false;
> u32 blocked_hpd_pin_mask;
> @@ -1011,7 +1021,7 @@ static void queue_work_for_missed_irqs(struct
> drm_i915_private *i915)
> queue_hp_work = true;
>
> for_each_hpd_pin(pin) {
> - switch (i915->display.hotplug.stats[pin].state) {
> + switch (display->hotplug.stats[pin].state) {
> case HPD_MARK_DISABLED:
> queue_hp_work = true;
> break;
> @@ -1019,7 +1029,7 @@ static void queue_work_for_missed_irqs(struct
> drm_i915_private *i915)
> case HPD_ENABLED:
> break;
> default:
> - MISSING_CASE(i915->display.hotplug.stats[pin].state);
> + MISSING_CASE(display->hotplug.stats[pin].state);
> }
> }
>
> @@ -1027,7 +1037,7 @@ static void queue_work_for_missed_irqs(struct
> drm_i915_private *i915)
> queue_work(hotplug->dp_wq, &hotplug->dig_port_work);
>
> if (queue_hp_work)
> - queue_delayed_detection_work(i915, &i915-
> >display.hotplug.hotplug_work, 0);
> + queue_delayed_detection_work(display, &display-
> >hotplug.hotplug_work, 0);
> }
>
> static bool block_hpd_pin(struct intel_display *display, enum hpd_pin pin)
> @@ -1121,7 +1131,7 @@ void intel_hpd_unblock(struct intel_encoder *encoder)
> spin_lock_irq(&i915->irq_lock);
>
> if (unblock_hpd_pin(display, encoder->hpd_pin))
> - queue_work_for_missed_irqs(i915);
> + queue_work_for_missed_irqs(display);
>
> spin_unlock_irq(&i915->irq_lock);
> }
> @@ -1156,30 +1166,35 @@ void intel_hpd_clear_and_unblock(struct
> intel_encoder *encoder)
> spin_unlock_irq(&i915->irq_lock);
> }
>
> -void intel_hpd_enable_detection_work(struct drm_i915_private *i915)
> +void intel_hpd_enable_detection_work(struct intel_display *display)
> {
> + struct drm_i915_private *i915 = to_i915(display->drm);
> +
> spin_lock_irq(&i915->irq_lock);
> - i915->display.hotplug.detection_work_enabled = true;
> - queue_work_for_missed_irqs(i915);
> + display->hotplug.detection_work_enabled = true;
> + queue_work_for_missed_irqs(display);
> spin_unlock_irq(&i915->irq_lock);
> }
>
> -void intel_hpd_disable_detection_work(struct drm_i915_private *i915)
> +void intel_hpd_disable_detection_work(struct intel_display *display)
> {
> + struct drm_i915_private *i915 = to_i915(display->drm);
> +
> spin_lock_irq(&i915->irq_lock);
> - i915->display.hotplug.detection_work_enabled = false;
> + display->hotplug.detection_work_enabled = false;
> spin_unlock_irq(&i915->irq_lock);
>
> - cancel_all_detection_work(i915);
> + cancel_all_detection_work(display);
> }
>
> -bool intel_hpd_schedule_detection(struct drm_i915_private *i915)
> +bool intel_hpd_schedule_detection(struct intel_display *display)
> {
> + struct drm_i915_private *i915 = to_i915(display->drm);
> unsigned long flags;
> bool ret;
>
> spin_lock_irqsave(&i915->irq_lock, flags);
> - ret = queue_delayed_detection_work(i915, &i915-
> >display.hotplug.hotplug_work, 0);
> + ret = queue_delayed_detection_work(display, &display-
> >hotplug.hotplug_work, 0);
> spin_unlock_irqrestore(&i915->irq_lock, flags);
>
> return ret;
> @@ -1188,14 +1203,15 @@ bool intel_hpd_schedule_detection(struct
> drm_i915_private *i915)
> static int i915_hpd_storm_ctl_show(struct seq_file *m, void *data)
> {
> struct drm_i915_private *dev_priv = m->private;
> - struct intel_hotplug *hotplug = &dev_priv->display.hotplug;
> + struct intel_display *display = &dev_priv->display;
> + struct intel_hotplug *hotplug = &display->hotplug;
>
> /* Synchronize with everything first in case there's been an HPD
> * storm, but we haven't finished handling it in the kernel yet
> */
> intel_synchronize_irq(dev_priv);
> - flush_work(&dev_priv->display.hotplug.dig_port_work);
> - flush_delayed_work(&dev_priv->display.hotplug.hotplug_work);
> + flush_work(&display->hotplug.dig_port_work);
> + flush_delayed_work(&display->hotplug.hotplug_work);
>
> seq_printf(m, "Threshold: %d\n", hotplug->hpd_storm_threshold);
> seq_printf(m, "Detected: %s\n",
> @@ -1210,7 +1226,8 @@ static ssize_t i915_hpd_storm_ctl_write(struct file
> *file,
> {
> struct seq_file *m = file->private_data;
> struct drm_i915_private *dev_priv = m->private;
> - struct intel_hotplug *hotplug = &dev_priv->display.hotplug;
> + struct intel_display *display = &dev_priv->display;
> + struct intel_hotplug *hotplug = &display->hotplug;
> unsigned int new_threshold;
> int i;
> char *newline;
> @@ -1235,11 +1252,11 @@ static ssize_t i915_hpd_storm_ctl_write(struct file
> *file,
> return -EINVAL;
>
> if (new_threshold > 0)
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(display->drm,
> "Setting HPD storm detection threshold to %d\n",
> new_threshold);
> else
> - drm_dbg_kms(&dev_priv->drm, "Disabling HPD storm
> detection\n");
> + drm_dbg_kms(display->drm, "Disabling HPD storm detection\n");
>
> spin_lock_irq(&dev_priv->irq_lock);
> hotplug->hpd_storm_threshold = new_threshold;
> @@ -1249,7 +1266,7 @@ static ssize_t i915_hpd_storm_ctl_write(struct file
> *file,
> spin_unlock_irq(&dev_priv->irq_lock);
>
> /* Re-enable hpd immediately if we were in an irq storm */
> - flush_delayed_work(&dev_priv->display.hotplug.reenable_work);
> + flush_delayed_work(&display->hotplug.reenable_work);
>
> return len;
> }
> @@ -1271,9 +1288,10 @@ static const struct file_operations
> i915_hpd_storm_ctl_fops = {
> static int i915_hpd_short_storm_ctl_show(struct seq_file *m, void *data)
> {
> struct drm_i915_private *dev_priv = m->private;
> + struct intel_display *display = &dev_priv->display;
>
> seq_printf(m, "Enabled: %s\n",
> - str_yes_no(dev_priv-
> >display.hotplug.hpd_short_storm_enabled));
> + str_yes_no(display->hotplug.hpd_short_storm_enabled));
>
> return 0;
> }
> @@ -1291,7 +1309,8 @@ static ssize_t i915_hpd_short_storm_ctl_write(struct
> file *file,
> {
> struct seq_file *m = file->private_data;
> struct drm_i915_private *dev_priv = m->private;
> - struct intel_hotplug *hotplug = &dev_priv->display.hotplug;
> + struct intel_display *display = &dev_priv->display;
> + struct intel_hotplug *hotplug = &display->hotplug;
> char *newline;
> char tmp[16];
> int i;
> @@ -1312,11 +1331,11 @@ static ssize_t
> i915_hpd_short_storm_ctl_write(struct file *file,
>
> /* Reset to the "default" state for this system */
> if (strcmp(tmp, "reset") == 0)
> - new_state = !HAS_DP_MST(dev_priv);
> + new_state = !HAS_DP_MST(display);
> else if (kstrtobool(tmp, &new_state) != 0)
> return -EINVAL;
>
> - drm_dbg_kms(&dev_priv->drm, "%sabling HPD short storm detection\n",
> + drm_dbg_kms(display->drm, "%sabling HPD short storm detection\n",
> new_state ? "En" : "Dis");
>
> spin_lock_irq(&dev_priv->irq_lock);
> @@ -1327,7 +1346,7 @@ static ssize_t i915_hpd_short_storm_ctl_write(struct
> file *file,
> spin_unlock_irq(&dev_priv->irq_lock);
>
> /* Re-enable hpd immediately if we were in an irq storm */
> - flush_delayed_work(&dev_priv->display.hotplug.reenable_work);
> + flush_delayed_work(&display->hotplug.reenable_work);
>
> return len;
> }
> @@ -1341,14 +1360,15 @@ static const struct file_operations
> i915_hpd_short_storm_ctl_fops = {
> .write = i915_hpd_short_storm_ctl_write,
> };
>
> -void intel_hpd_debugfs_register(struct drm_i915_private *i915)
> +void intel_hpd_debugfs_register(struct intel_display *display)
> {
> - struct drm_minor *minor = i915->drm.primary;
> + struct drm_minor *minor = display->drm->primary;
> + struct drm_i915_private *i915 = to_i915(display->drm);
>
> debugfs_create_file("i915_hpd_storm_ctl", 0644, minor->debugfs_root,
> i915, &i915_hpd_storm_ctl_fops);
> debugfs_create_file("i915_hpd_short_storm_ctl", 0644, minor-
> >debugfs_root,
> i915, &i915_hpd_short_storm_ctl_fops);
> debugfs_create_bool("i915_ignore_long_hpd", 0644, minor-
> >debugfs_root,
> - &i915->display.hotplug.ignore_long_hpd);
> + &display->hotplug.ignore_long_hpd);
> }
> diff --git a/drivers/gpu/drm/i915/display/intel_hotplug.h
> b/drivers/gpu/drm/i915/display/intel_hotplug.h
> index f189b871904e..edc41c9d3d65 100644
> --- a/drivers/gpu/drm/i915/display/intel_hotplug.h
> +++ b/drivers/gpu/drm/i915/display/intel_hotplug.h
> @@ -8,31 +8,31 @@
>
> #include <linux/types.h>
>
> -struct drm_i915_private;
> +enum port;
> struct intel_connector;
> struct intel_digital_port;
> +struct intel_display;
> struct intel_encoder;
> -enum port;
>
> -void intel_hpd_poll_enable(struct drm_i915_private *dev_priv);
> -void intel_hpd_poll_disable(struct drm_i915_private *dev_priv);
> -void intel_hpd_poll_fini(struct drm_i915_private *i915);
> +void intel_hpd_poll_enable(struct intel_display *display);
> +void intel_hpd_poll_disable(struct intel_display *display);
> +void intel_hpd_poll_fini(struct intel_display *display);
> enum intel_hotplug_state intel_encoder_hotplug(struct intel_encoder *encoder,
> struct intel_connector
> *connector);
> -void intel_hpd_irq_handler(struct drm_i915_private *dev_priv,
> +void intel_hpd_irq_handler(struct intel_display *display,
> u32 pin_mask, u32 long_mask);
> void intel_hpd_trigger_irq(struct intel_digital_port *dig_port);
> -void intel_hpd_init(struct drm_i915_private *dev_priv);
> -void intel_hpd_init_early(struct drm_i915_private *i915);
> -void intel_hpd_cancel_work(struct drm_i915_private *dev_priv);
> +void intel_hpd_init(struct intel_display *display);
> +void intel_hpd_init_early(struct intel_display *display);
> +void intel_hpd_cancel_work(struct intel_display *display);
> enum hpd_pin intel_hpd_pin_default(enum port port);
> void intel_hpd_block(struct intel_encoder *encoder);
> void intel_hpd_unblock(struct intel_encoder *encoder);
> void intel_hpd_clear_and_unblock(struct intel_encoder *encoder);
> -void intel_hpd_debugfs_register(struct drm_i915_private *i915);
> +void intel_hpd_debugfs_register(struct intel_display *display);
>
> -void intel_hpd_enable_detection_work(struct drm_i915_private *i915);
> -void intel_hpd_disable_detection_work(struct drm_i915_private *i915);
> -bool intel_hpd_schedule_detection(struct drm_i915_private *i915);
> +void intel_hpd_enable_detection_work(struct intel_display *display);
> +void intel_hpd_disable_detection_work(struct intel_display *display);
> +bool intel_hpd_schedule_detection(struct intel_display *display);
>
> #endif /* __INTEL_HOTPLUG_H__ */
> diff --git a/drivers/gpu/drm/i915/display/intel_hotplug_irq.c
> b/drivers/gpu/drm/i915/display/intel_hotplug_irq.c
> index 2137ac7b882a..e6320838df59 100644
> --- a/drivers/gpu/drm/i915/display/intel_hotplug_irq.c
> +++ b/drivers/gpu/drm/i915/display/intel_hotplug_irq.c
> @@ -472,7 +472,7 @@ void i9xx_hpd_irq_handler(struct drm_i915_private
> *dev_priv, u32 hotplug_status)
> dev_priv->display.hotplug.hpd,
> i9xx_port_hotplug_long_detect);
>
> - intel_hpd_irq_handler(dev_priv, pin_mask, long_mask);
> + intel_hpd_irq_handler(display, pin_mask, long_mask);
> }
>
> if ((IS_G4X(dev_priv) ||
> @@ -483,6 +483,7 @@ void i9xx_hpd_irq_handler(struct drm_i915_private
> *dev_priv, u32 hotplug_status)
>
> void ibx_hpd_irq_handler(struct drm_i915_private *dev_priv, u32
> hotplug_trigger)
> {
> + struct intel_display *display = &dev_priv->display;
> u32 dig_hotplug_reg, pin_mask = 0, long_mask = 0;
>
> /*
> @@ -509,7 +510,7 @@ void ibx_hpd_irq_handler(struct drm_i915_private
> *dev_priv, u32 hotplug_trigger)
> dev_priv->display.hotplug.pch_hpd,
> pch_port_hotplug_long_detect);
>
> - intel_hpd_irq_handler(dev_priv, pin_mask, long_mask);
> + intel_hpd_irq_handler(display, pin_mask, long_mask);
> }
>
> void xelpdp_pica_irq_handler(struct drm_i915_private *i915, u32 iir)
> @@ -543,7 +544,7 @@ void xelpdp_pica_irq_handler(struct drm_i915_private
> *i915, u32 iir)
> "pica hotplug event received, stat 0x%08x, pins 0x%08x,
> long 0x%08x\n",
> hotplug_trigger, pin_mask, long_mask);
>
> - intel_hpd_irq_handler(i915, pin_mask, long_mask);
> + intel_hpd_irq_handler(display, pin_mask, long_mask);
> }
>
> if (trigger_aux)
> @@ -587,7 +588,7 @@ void icp_irq_handler(struct drm_i915_private *dev_priv,
> u32 pch_iir)
> }
>
> if (pin_mask)
> - intel_hpd_irq_handler(dev_priv, pin_mask, long_mask);
> + intel_hpd_irq_handler(display, pin_mask, long_mask);
>
> if (pch_iir & SDE_GMBUS_ICP)
> intel_gmbus_irq_handler(display);
> @@ -624,7 +625,7 @@ void spt_irq_handler(struct drm_i915_private *dev_priv,
> u32 pch_iir)
> }
>
> if (pin_mask)
> - intel_hpd_irq_handler(dev_priv, pin_mask, long_mask);
> + intel_hpd_irq_handler(display, pin_mask, long_mask);
>
> if (pch_iir & SDE_GMBUS_CPT)
> intel_gmbus_irq_handler(display);
> @@ -632,6 +633,7 @@ void spt_irq_handler(struct drm_i915_private *dev_priv,
> u32 pch_iir)
>
> void ilk_hpd_irq_handler(struct drm_i915_private *dev_priv, u32
> hotplug_trigger)
> {
> + struct intel_display *display = &dev_priv->display;
> u32 dig_hotplug_reg, pin_mask = 0, long_mask = 0;
>
> dig_hotplug_reg = intel_uncore_rmw(&dev_priv->uncore,
> DIGITAL_PORT_HOTPLUG_CNTRL, 0, 0);
> @@ -641,11 +643,12 @@ void ilk_hpd_irq_handler(struct drm_i915_private
> *dev_priv, u32 hotplug_trigger)
> dev_priv->display.hotplug.hpd,
> ilk_port_hotplug_long_detect);
>
> - intel_hpd_irq_handler(dev_priv, pin_mask, long_mask);
> + intel_hpd_irq_handler(display, pin_mask, long_mask);
> }
>
> void bxt_hpd_irq_handler(struct drm_i915_private *dev_priv, u32
> hotplug_trigger)
> {
> + struct intel_display *display = &dev_priv->display;
> u32 dig_hotplug_reg, pin_mask = 0, long_mask = 0;
>
> dig_hotplug_reg = intel_uncore_rmw(&dev_priv->uncore,
> PCH_PORT_HOTPLUG, 0, 0);
> @@ -655,11 +658,12 @@ void bxt_hpd_irq_handler(struct drm_i915_private
> *dev_priv, u32 hotplug_trigger)
> dev_priv->display.hotplug.hpd,
> bxt_port_hotplug_long_detect);
>
> - intel_hpd_irq_handler(dev_priv, pin_mask, long_mask);
> + intel_hpd_irq_handler(display, pin_mask, long_mask);
> }
>
> void gen11_hpd_irq_handler(struct drm_i915_private *dev_priv, u32 iir)
> {
> + struct intel_display *display = &dev_priv->display;
> u32 pin_mask = 0, long_mask = 0;
> u32 trigger_tc = iir & GEN11_DE_TC_HOTPLUG_MASK;
> u32 trigger_tbt = iir & GEN11_DE_TBT_HOTPLUG_MASK;
> @@ -687,7 +691,7 @@ void gen11_hpd_irq_handler(struct drm_i915_private
> *dev_priv, u32 iir)
> }
>
> if (pin_mask)
> - intel_hpd_irq_handler(dev_priv, pin_mask, long_mask);
> + intel_hpd_irq_handler(display, pin_mask, long_mask);
> else
> drm_err(&dev_priv->drm,
> "Unexpected DE HPD interrupt 0x%08x\n", iir);
> @@ -1467,9 +1471,11 @@ void intel_hpd_irq_setup(struct drm_i915_private
> *i915)
>
> void intel_hotplug_irq_init(struct drm_i915_private *i915)
> {
> + struct intel_display *display = &i915->display;
> +
> intel_hpd_init_pins(i915);
>
> - intel_hpd_init_early(i915);
> + intel_hpd_init_early(display);
>
> if (HAS_GMCH(i915)) {
> if (I915_HAS_HOTPLUG(i915))
> diff --git a/drivers/gpu/drm/i915/i915_driver.c
> b/drivers/gpu/drm/i915/i915_driver.c
> index ce3cc93ea211..510e240c000b 100644
> --- a/drivers/gpu/drm/i915/i915_driver.c
> +++ b/drivers/gpu/drm/i915/i915_driver.c
> @@ -981,7 +981,7 @@ void i915_driver_shutdown(struct drm_i915_private
> *i915)
> intel_dp_mst_suspend(display);
>
> intel_irq_suspend(i915);
> - intel_hpd_cancel_work(i915);
> + intel_hpd_cancel_work(display);
>
> if (HAS_DISPLAY(i915))
> intel_display_driver_suspend_access(display);
> @@ -1064,7 +1064,7 @@ static int i915_drm_suspend(struct drm_device *dev)
> intel_display_driver_suspend(display);
>
> intel_irq_suspend(dev_priv);
> - intel_hpd_cancel_work(dev_priv);
> + intel_hpd_cancel_work(display);
>
> if (HAS_DISPLAY(dev_priv))
> intel_display_driver_suspend_access(display);
> @@ -1227,7 +1227,7 @@ static int i915_drm_resume(struct drm_device *dev)
> if (HAS_DISPLAY(dev_priv))
> intel_display_driver_resume_access(display);
>
> - intel_hpd_init(dev_priv);
> + intel_hpd_init(display);
>
> intel_display_driver_resume(display);
>
> @@ -1235,7 +1235,7 @@ static int i915_drm_resume(struct drm_device *dev)
> intel_display_driver_enable_user_access(display);
> drm_kms_helper_poll_enable(dev);
> }
> - intel_hpd_poll_disable(dev_priv);
> + intel_hpd_poll_disable(display);
>
> intel_opregion_resume(display);
>
> @@ -1575,7 +1575,7 @@ static int intel_runtime_suspend(struct device *kdev)
> assert_forcewakes_inactive(&dev_priv->uncore);
>
> if (!IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv))
> - intel_hpd_poll_enable(dev_priv);
> + intel_hpd_poll_enable(display);
>
> drm_dbg(&dev_priv->drm, "Device suspended\n");
> return 0;
> @@ -1633,8 +1633,8 @@ static int intel_runtime_resume(struct device *kdev)
> * everyone else do it here.
> */
> if (!IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv)) {
> - intel_hpd_init(dev_priv);
> - intel_hpd_poll_disable(dev_priv);
> + intel_hpd_init(display);
> + intel_hpd_poll_disable(display);
> }
>
> skl_watermark_ipc_update(dev_priv);
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index 37ca4a35daf2..de53615571be 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -1280,6 +1280,7 @@ int intel_irq_install(struct drm_i915_private *dev_priv)
> */
> void intel_irq_uninstall(struct drm_i915_private *dev_priv)
> {
> + struct intel_display *display = &dev_priv->display;
> int irq = to_pci_dev(dev_priv->drm.dev)->irq;
>
> if (drm_WARN_ON(&dev_priv->drm, !dev_priv->irqs_enabled))
> @@ -1289,7 +1290,7 @@ void intel_irq_uninstall(struct drm_i915_private
> *dev_priv)
>
> free_irq(irq, dev_priv);
>
> - intel_hpd_cancel_work(dev_priv);
> + intel_hpd_cancel_work(display);
> dev_priv->irqs_enabled = false;
> }
>
> diff --git a/drivers/gpu/drm/xe/display/xe_display.c
> b/drivers/gpu/drm/xe/display/xe_display.c
> index 0b0aca7a25af..263459323bf7 100644
> --- a/drivers/gpu/drm/xe/display/xe_display.c
> +++ b/drivers/gpu/drm/xe/display/xe_display.c
> @@ -173,7 +173,7 @@ static void xe_display_fini(void *arg)
> struct xe_device *xe = arg;
> struct intel_display *display = &xe->display;
>
> - intel_hpd_poll_fini(xe);
> + intel_hpd_poll_fini(display);
> intel_hdcp_component_fini(display);
> intel_audio_deinit(display);
> intel_display_driver_remove(display);
> @@ -305,7 +305,7 @@ static void xe_display_enable_d3cold(struct xe_device
> *xe)
> intel_dmc_suspend(display);
>
> if (has_display(xe))
> - intel_hpd_poll_enable(xe);
> + intel_hpd_poll_enable(display);
> }
>
> static void xe_display_disable_d3cold(struct xe_device *xe)
> @@ -322,10 +322,10 @@ static void xe_display_disable_d3cold(struct xe_device
> *xe)
>
> intel_display_driver_init_hw(display);
>
> - intel_hpd_init(xe);
> + intel_hpd_init(display);
>
> if (has_display(xe))
> - intel_hpd_poll_disable(xe);
> + intel_hpd_poll_disable(display);
>
> intel_opregion_resume(display);
>
> @@ -355,7 +355,7 @@ void xe_display_pm_suspend(struct xe_device *xe)
>
> xe_display_flush_cleanup_work(xe);
>
> - intel_hpd_cancel_work(xe);
> + intel_hpd_cancel_work(display);
>
> if (has_display(xe)) {
> intel_display_driver_suspend_access(display);
> @@ -385,7 +385,7 @@ void xe_display_pm_shutdown(struct xe_device *xe)
>
> xe_display_flush_cleanup_work(xe);
> intel_dp_mst_suspend(display);
> - intel_hpd_cancel_work(xe);
> + intel_hpd_cancel_work(display);
>
> if (has_display(xe))
> intel_display_driver_suspend_access(display);
> @@ -400,6 +400,8 @@ void xe_display_pm_shutdown(struct xe_device *xe)
>
> void xe_display_pm_runtime_suspend(struct xe_device *xe)
> {
> + struct intel_display *display = &xe->display;
> +
> if (!xe->info.probe_display)
> return;
>
> @@ -408,7 +410,7 @@ void xe_display_pm_runtime_suspend(struct xe_device
> *xe)
> return;
> }
>
> - intel_hpd_poll_enable(xe);
> + intel_hpd_poll_enable(display);
> }
>
> void xe_display_pm_suspend_late(struct xe_device *xe)
> @@ -482,7 +484,7 @@ void xe_display_pm_resume(struct xe_device *xe)
> if (has_display(xe))
> intel_display_driver_resume_access(display);
>
> - intel_hpd_init(xe);
> + intel_hpd_init(display);
>
> if (has_display(xe)) {
> intel_display_driver_resume(display);
> @@ -491,7 +493,7 @@ void xe_display_pm_resume(struct xe_device *xe)
> }
>
> if (has_display(xe))
> - intel_hpd_poll_disable(xe);
> + intel_hpd_poll_disable(display);
>
> intel_opregion_resume(display);
>
> @@ -502,6 +504,8 @@ void xe_display_pm_resume(struct xe_device *xe)
>
> void xe_display_pm_runtime_resume(struct xe_device *xe)
> {
> + struct intel_display *display = &xe->display;
> +
> if (!xe->info.probe_display)
> return;
>
> @@ -510,8 +514,8 @@ void xe_display_pm_runtime_resume(struct xe_device
> *xe)
> return;
> }
>
> - intel_hpd_init(xe);
> - intel_hpd_poll_disable(xe);
> + intel_hpd_init(display);
> + intel_hpd_poll_disable(display);
> skl_watermark_ipc_update(xe);
> }
>
> --
> 2.39.5