From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: Ville Syrjala <ville.syrjala@linux.intel.com>
Cc: <intel-gfx@lists.freedesktop.org>, <intel-xe@lists.freedesktop.org>
Subject: Re: [PATCH 3/6] drm/i915/power: Convert low level DC state code to intel_display
Date: Fri, 6 Sep 2024 11:10:55 -0400 [thread overview]
Message-ID: <Ztsbf26w1AMEs3eo@intel.com> (raw)
In-Reply-To: <20240906143306.15937-4-ville.syrjala@linux.intel.com>
On Fri, Sep 06, 2024 at 05:33:03PM +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> struct intel_display will replace struct drm_i915_private as
> the main thing for display code. Convert the lower level
> DC state code to use it (as much as possible at this stage).
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
> .../drm/i915/display/intel_display_power.c | 41 ++--
> .../i915/display/intel_display_power_well.c | 199 ++++++++++--------
> .../i915/display/intel_display_power_well.h | 15 +-
> 3 files changed, 139 insertions(+), 116 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_power.c b/drivers/gpu/drm/i915/display/intel_display_power.c
> index eb3e2a56af1d..86ac494ed33b 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_power.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_power.c
> @@ -1421,7 +1421,7 @@ static void skl_display_core_init(struct drm_i915_private *dev_priv,
> struct i915_power_domains *power_domains = &display->power.domains;
> struct i915_power_well *well;
>
> - gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
> + gen9_set_dc_state(display, DC_STATE_DISABLE);
>
> /* enable PCH reset handshake */
> intel_pch_reset_handshake(dev_priv, !HAS_PCH_NOP(dev_priv));
> @@ -1457,7 +1457,7 @@ static void skl_display_core_uninit(struct drm_i915_private *dev_priv)
> if (!HAS_DISPLAY(dev_priv))
> return;
>
> - gen9_disable_dc_states(dev_priv);
> + gen9_disable_dc_states(display);
> /* TODO: disable DMC program */
>
> gen9_dbuf_disable(dev_priv);
> @@ -1489,7 +1489,7 @@ static void bxt_display_core_init(struct drm_i915_private *dev_priv, bool resume
> struct i915_power_domains *power_domains = &display->power.domains;
> struct i915_power_well *well;
>
> - gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
> + gen9_set_dc_state(display, DC_STATE_DISABLE);
>
> /*
> * NDE_RSTWRN_OPT RST PCH Handshake En must always be 0b on BXT
> @@ -1527,7 +1527,7 @@ static void bxt_display_core_uninit(struct drm_i915_private *dev_priv)
> if (!HAS_DISPLAY(dev_priv))
> return;
>
> - gen9_disable_dc_states(dev_priv);
> + gen9_disable_dc_states(display);
> /* TODO: disable DMC program */
>
> gen9_dbuf_disable(dev_priv);
> @@ -1632,7 +1632,7 @@ static void icl_display_core_init(struct drm_i915_private *dev_priv,
> struct i915_power_domains *power_domains = &display->power.domains;
> struct i915_power_well *well;
>
> - gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
> + gen9_set_dc_state(display, DC_STATE_DISABLE);
>
> /* Wa_14011294188:ehl,jsl,tgl,rkl,adl-s */
> if (INTEL_PCH_TYPE(dev_priv) >= PCH_TGP &&
> @@ -1717,7 +1717,7 @@ static void icl_display_core_uninit(struct drm_i915_private *dev_priv)
> if (!HAS_DISPLAY(dev_priv))
> return;
>
> - gen9_disable_dc_states(dev_priv);
> + gen9_disable_dc_states(display);
> intel_dmc_disable_program(dev_priv);
>
> /* 1. Disable all display engine functions -> aready done */
> @@ -2232,9 +2232,11 @@ static void intel_power_domains_verify_state(struct drm_i915_private *i915)
>
> void intel_display_power_suspend_late(struct drm_i915_private *i915)
> {
> + struct intel_display *display = &i915->display;
> +
> if (DISPLAY_VER(i915) >= 11 || IS_GEMINILAKE(i915) ||
> IS_BROXTON(i915)) {
> - bxt_enable_dc9(i915);
> + bxt_enable_dc9(display);
> } else if (IS_HASWELL(i915) || IS_BROADWELL(i915)) {
> hsw_enable_pc8(i915);
> }
> @@ -2246,10 +2248,12 @@ void intel_display_power_suspend_late(struct drm_i915_private *i915)
>
> void intel_display_power_resume_early(struct drm_i915_private *i915)
> {
> + struct intel_display *display = &i915->display;
> +
> if (DISPLAY_VER(i915) >= 11 || IS_GEMINILAKE(i915) ||
> IS_BROXTON(i915)) {
> - gen9_sanitize_dc_state(i915);
> - bxt_disable_dc9(i915);
> + gen9_sanitize_dc_state(display);
> + bxt_disable_dc9(display);
> } else if (IS_HASWELL(i915) || IS_BROADWELL(i915)) {
> hsw_disable_pc8(i915);
> }
> @@ -2261,12 +2265,14 @@ void intel_display_power_resume_early(struct drm_i915_private *i915)
>
> void intel_display_power_suspend(struct drm_i915_private *i915)
> {
> + struct intel_display *display = &i915->display;
> +
> if (DISPLAY_VER(i915) >= 11) {
> icl_display_core_uninit(i915);
> - bxt_enable_dc9(i915);
> + bxt_enable_dc9(display);
> } else if (IS_GEMINILAKE(i915) || IS_BROXTON(i915)) {
> bxt_display_core_uninit(i915);
> - bxt_enable_dc9(i915);
> + bxt_enable_dc9(display);
> } else if (IS_HASWELL(i915) || IS_BROADWELL(i915)) {
> hsw_enable_pc8(i915);
> }
> @@ -2274,23 +2280,24 @@ void intel_display_power_suspend(struct drm_i915_private *i915)
>
> void intel_display_power_resume(struct drm_i915_private *i915)
> {
> - struct i915_power_domains *power_domains = &i915->display.power.domains;
> + struct intel_display *display = &i915->display;
> + struct i915_power_domains *power_domains = &display->power.domains;
>
> if (DISPLAY_VER(i915) >= 11) {
> - bxt_disable_dc9(i915);
> + bxt_disable_dc9(display);
> icl_display_core_init(i915, true);
> if (intel_dmc_has_payload(i915)) {
> if (power_domains->allowed_dc_mask & DC_STATE_EN_UPTO_DC6)
> - skl_enable_dc6(i915);
> + skl_enable_dc6(display);
> else if (power_domains->allowed_dc_mask & DC_STATE_EN_UPTO_DC5)
> - gen9_enable_dc5(i915);
> + gen9_enable_dc5(display);
> }
> } else if (IS_GEMINILAKE(i915) || IS_BROXTON(i915)) {
> - bxt_disable_dc9(i915);
> + bxt_disable_dc9(display);
> bxt_display_core_init(i915, true);
> if (intel_dmc_has_payload(i915) &&
> (power_domains->allowed_dc_mask & DC_STATE_EN_UPTO_DC5))
> - gen9_enable_dc5(i915);
> + gen9_enable_dc5(display);
> } else if (IS_HASWELL(i915) || IS_BROADWELL(i915)) {
> hsw_disable_pc8(i915);
> }
> 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 7b40a5b88214..1f0084ca6248 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_power_well.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_power_well.c
> @@ -601,20 +601,22 @@ static bool hsw_power_well_enabled(struct drm_i915_private *dev_priv,
> return (val & mask) == mask;
> }
>
> -static void assert_can_enable_dc9(struct drm_i915_private *dev_priv)
> +static void assert_can_enable_dc9(struct intel_display *display)
> {
> - drm_WARN_ONCE(&dev_priv->drm,
> - (intel_de_read(dev_priv, DC_STATE_EN) & DC_STATE_EN_DC9),
> + struct drm_i915_private *dev_priv = to_i915(display->drm);
> +
> + drm_WARN_ONCE(display->drm,
> + (intel_de_read(display, DC_STATE_EN) & DC_STATE_EN_DC9),
> "DC9 already programmed to be enabled.\n");
> - drm_WARN_ONCE(&dev_priv->drm,
> - intel_de_read(dev_priv, DC_STATE_EN) &
> + drm_WARN_ONCE(display->drm,
> + intel_de_read(display, DC_STATE_EN) &
> DC_STATE_EN_UPTO_DC5,
> "DC5 still not disabled to enable DC9.\n");
> - drm_WARN_ONCE(&dev_priv->drm,
> - intel_de_read(dev_priv, HSW_PWR_WELL_CTL2) &
> + drm_WARN_ONCE(display->drm,
> + intel_de_read(display, HSW_PWR_WELL_CTL2) &
> HSW_PWR_WELL_CTL_REQ(SKL_PW_CTL_IDX_PW_2),
> "Power well 2 on.\n");
> - drm_WARN_ONCE(&dev_priv->drm, intel_irqs_enabled(dev_priv),
> + drm_WARN_ONCE(display->drm, intel_irqs_enabled(dev_priv),
> "Interrupts not disabled yet.\n");
>
> /*
> @@ -626,12 +628,14 @@ static void assert_can_enable_dc9(struct drm_i915_private *dev_priv)
> */
> }
>
> -static void assert_can_disable_dc9(struct drm_i915_private *dev_priv)
> +static void assert_can_disable_dc9(struct intel_display *display)
> {
> - drm_WARN_ONCE(&dev_priv->drm, intel_irqs_enabled(dev_priv),
> + struct drm_i915_private *dev_priv = to_i915(display->drm);
> +
> + drm_WARN_ONCE(display->drm, intel_irqs_enabled(dev_priv),
> "Interrupts not disabled yet.\n");
> - drm_WARN_ONCE(&dev_priv->drm,
> - intel_de_read(dev_priv, DC_STATE_EN) &
> + drm_WARN_ONCE(display->drm,
> + intel_de_read(display, DC_STATE_EN) &
> DC_STATE_EN_UPTO_DC5,
> "DC5 still not disabled.\n");
>
> @@ -644,14 +648,14 @@ static void assert_can_disable_dc9(struct drm_i915_private *dev_priv)
> */
> }
>
> -static void gen9_write_dc_state(struct drm_i915_private *dev_priv,
> +static void gen9_write_dc_state(struct intel_display *display,
> u32 state)
> {
> int rewrites = 0;
> int rereads = 0;
> u32 v;
>
> - intel_de_write(dev_priv, DC_STATE_EN, state);
> + intel_de_write(display, DC_STATE_EN, state);
>
> /* It has been observed that disabling the dc6 state sometimes
> * doesn't stick and dmc keeps returning old value. Make sure
> @@ -659,10 +663,10 @@ static void gen9_write_dc_state(struct drm_i915_private *dev_priv,
> * we are confident that state is exactly what we want.
> */
> do {
> - v = intel_de_read(dev_priv, DC_STATE_EN);
> + v = intel_de_read(display, DC_STATE_EN);
>
> if (v != state) {
> - intel_de_write(dev_priv, DC_STATE_EN, state);
> + intel_de_write(display, DC_STATE_EN, state);
> rewrites++;
> rereads = 0;
> } else if (rereads++ > 5) {
> @@ -672,27 +676,28 @@ static void gen9_write_dc_state(struct drm_i915_private *dev_priv,
> } while (rewrites < 100);
>
> if (v != state)
> - drm_err(&dev_priv->drm,
> + drm_err(display->drm,
> "Writing dc state to 0x%x failed, now 0x%x\n",
> state, v);
>
> /* Most of the times we need one retry, avoid spam */
> if (rewrites > 1)
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(display->drm,
> "Rewrote dc state to 0x%x %d times\n",
> state, rewrites);
> }
>
> -static u32 gen9_dc_mask(struct drm_i915_private *dev_priv)
> +static u32 gen9_dc_mask(struct intel_display *display)
> {
> + struct drm_i915_private *dev_priv = to_i915(display->drm);
> u32 mask;
>
> mask = DC_STATE_EN_UPTO_DC5;
>
> - if (DISPLAY_VER(dev_priv) >= 12)
> + if (DISPLAY_VER(display) >= 12)
> mask |= DC_STATE_EN_DC3CO | DC_STATE_EN_UPTO_DC6
> | DC_STATE_EN_DC9;
> - else if (DISPLAY_VER(dev_priv) == 11)
> + else if (DISPLAY_VER(display) == 11)
> mask |= DC_STATE_EN_UPTO_DC6 | DC_STATE_EN_DC9;
> else if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv))
> mask |= DC_STATE_EN_DC9;
> @@ -702,17 +707,17 @@ static u32 gen9_dc_mask(struct drm_i915_private *dev_priv)
> return mask;
> }
>
> -void gen9_sanitize_dc_state(struct drm_i915_private *i915)
> +void gen9_sanitize_dc_state(struct intel_display *display)
> {
> - struct i915_power_domains *power_domains = &i915->display.power.domains;
> + struct i915_power_domains *power_domains = &display->power.domains;
> u32 val;
>
> - if (!HAS_DISPLAY(i915))
> + if (!HAS_DISPLAY(display))
> return;
>
> - val = intel_de_read(i915, DC_STATE_EN) & gen9_dc_mask(i915);
> + val = intel_de_read(display, DC_STATE_EN) & gen9_dc_mask(display);
>
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "Resetting DC state tracking from %02x to %02x\n",
> power_domains->dc_state, val);
> power_domains->dc_state = val;
> @@ -720,7 +725,7 @@ void gen9_sanitize_dc_state(struct drm_i915_private *i915)
>
> /**
> * gen9_set_dc_state - set target display C power state
> - * @dev_priv: i915 device instance
> + * @display: display instance
> * @state: target DC power state
> * - DC_STATE_DISABLE
> * - DC_STATE_EN_UPTO_DC5
> @@ -741,70 +746,71 @@ void gen9_sanitize_dc_state(struct drm_i915_private *i915)
> * back on and register state is restored. This is guaranteed by the MMIO write
> * to DC_STATE_EN blocking until the state is restored.
> */
> -void gen9_set_dc_state(struct drm_i915_private *dev_priv, u32 state)
> +void gen9_set_dc_state(struct intel_display *display, u32 state)
> {
> - struct i915_power_domains *power_domains = &dev_priv->display.power.domains;
> + struct i915_power_domains *power_domains = &display->power.domains;
> u32 val;
> u32 mask;
>
> - if (!HAS_DISPLAY(dev_priv))
> + if (!HAS_DISPLAY(display))
> return;
>
> - if (drm_WARN_ON_ONCE(&dev_priv->drm,
> + if (drm_WARN_ON_ONCE(display->drm,
> state & ~power_domains->allowed_dc_mask))
> state &= power_domains->allowed_dc_mask;
>
> - val = intel_de_read(dev_priv, DC_STATE_EN);
> - mask = gen9_dc_mask(dev_priv);
> - drm_dbg_kms(&dev_priv->drm, "Setting DC state from %02x to %02x\n",
> + val = intel_de_read(display, DC_STATE_EN);
> + mask = gen9_dc_mask(display);
> + drm_dbg_kms(display->drm, "Setting DC state from %02x to %02x\n",
> val & mask, state);
>
> /* Check if DMC is ignoring our DC state requests */
> if ((val & mask) != power_domains->dc_state)
> - drm_err(&dev_priv->drm, "DC state mismatch (0x%x -> 0x%x)\n",
> + drm_err(display->drm, "DC state mismatch (0x%x -> 0x%x)\n",
> power_domains->dc_state, val & mask);
>
> val &= ~mask;
> val |= state;
>
> - gen9_write_dc_state(dev_priv, val);
> + gen9_write_dc_state(display, val);
>
> power_domains->dc_state = val & mask;
> }
>
> -static void tgl_enable_dc3co(struct drm_i915_private *dev_priv)
> +static void tgl_enable_dc3co(struct intel_display *display)
> {
> - drm_dbg_kms(&dev_priv->drm, "Enabling DC3CO\n");
> - gen9_set_dc_state(dev_priv, DC_STATE_EN_DC3CO);
> + drm_dbg_kms(display->drm, "Enabling DC3CO\n");
> + gen9_set_dc_state(display, DC_STATE_EN_DC3CO);
> }
>
> -static void tgl_disable_dc3co(struct drm_i915_private *dev_priv)
> +static void tgl_disable_dc3co(struct intel_display *display)
> {
> - drm_dbg_kms(&dev_priv->drm, "Disabling DC3CO\n");
> - intel_de_rmw(dev_priv, DC_STATE_EN, DC_STATE_DC3CO_STATUS, 0);
> - gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
> + drm_dbg_kms(display->drm, "Disabling DC3CO\n");
> + intel_de_rmw(display, DC_STATE_EN, DC_STATE_DC3CO_STATUS, 0);
> + gen9_set_dc_state(display, DC_STATE_DISABLE);
> /*
> * Delay of 200us DC3CO Exit time B.Spec 49196
> */
> usleep_range(200, 210);
> }
>
> -static void assert_can_enable_dc5(struct drm_i915_private *dev_priv)
> +static void assert_can_enable_dc5(struct intel_display *display)
> {
> + struct drm_i915_private *dev_priv = to_i915(display->drm);
> enum i915_power_well_id high_pg;
>
> /* Power wells at this level and above must be disabled for DC5 entry */
> - if (DISPLAY_VER(dev_priv) == 12)
> + if (DISPLAY_VER(display) == 12)
> high_pg = ICL_DISP_PW_3;
> else
> high_pg = SKL_DISP_PW_2;
>
> - drm_WARN_ONCE(&dev_priv->drm,
> + drm_WARN_ONCE(display->drm,
> intel_display_power_well_is_enabled(dev_priv, high_pg),
> "Power wells above platform's DC5 limit still enabled.\n");
>
> - drm_WARN_ONCE(&dev_priv->drm,
> - (intel_de_read(dev_priv, DC_STATE_EN) &
> + drm_WARN_ONCE(display->drm,
> + (intel_de_read(display, DC_STATE_EN) &
> DC_STATE_EN_UPTO_DC5),
> "DC5 already programmed to be enabled.\n");
> assert_rpm_wakelock_held(&dev_priv->runtime_pm);
> @@ -812,60 +818,66 @@ static void assert_can_enable_dc5(struct drm_i915_private *dev_priv)
> assert_dmc_loaded(dev_priv);
> }
>
> -void gen9_enable_dc5(struct drm_i915_private *dev_priv)
> +void gen9_enable_dc5(struct intel_display *display)
> {
> - assert_can_enable_dc5(dev_priv);
> + struct drm_i915_private *dev_priv = to_i915(display->drm);
>
> - drm_dbg_kms(&dev_priv->drm, "Enabling DC5\n");
> + assert_can_enable_dc5(display);
> +
> + drm_dbg_kms(display->drm, "Enabling DC5\n");
>
> /* Wa Display #1183: skl,kbl,cfl */
> - if (DISPLAY_VER(dev_priv) == 9 && !IS_BROXTON(dev_priv))
> - intel_de_rmw(dev_priv, GEN8_CHICKEN_DCPR_1,
> + if (DISPLAY_VER(display) == 9 && !IS_BROXTON(dev_priv))
> + intel_de_rmw(display, GEN8_CHICKEN_DCPR_1,
> 0, SKL_SELECT_ALTERNATE_DC_EXIT);
>
> - intel_dmc_wl_enable(&dev_priv->display);
> + intel_dmc_wl_enable(display);
>
> - gen9_set_dc_state(dev_priv, DC_STATE_EN_UPTO_DC5);
> + gen9_set_dc_state(display, DC_STATE_EN_UPTO_DC5);
> }
>
> -static void assert_can_enable_dc6(struct drm_i915_private *dev_priv)
> +static void assert_can_enable_dc6(struct intel_display *display)
> {
> - drm_WARN_ONCE(&dev_priv->drm,
> - (intel_de_read(dev_priv, UTIL_PIN_CTL) &
> + struct drm_i915_private *dev_priv = to_i915(display->drm);
> +
> + drm_WARN_ONCE(display->drm,
> + (intel_de_read(display, UTIL_PIN_CTL) &
> (UTIL_PIN_ENABLE | UTIL_PIN_MODE_MASK)) ==
> (UTIL_PIN_ENABLE | UTIL_PIN_MODE_PWM),
> "Utility pin enabled in PWM mode\n");
> - drm_WARN_ONCE(&dev_priv->drm,
> - (intel_de_read(dev_priv, DC_STATE_EN) &
> + drm_WARN_ONCE(display->drm,
> + (intel_de_read(display, DC_STATE_EN) &
> DC_STATE_EN_UPTO_DC6),
> "DC6 already programmed to be enabled.\n");
>
> assert_dmc_loaded(dev_priv);
> }
>
> -void skl_enable_dc6(struct drm_i915_private *dev_priv)
> +void skl_enable_dc6(struct intel_display *display)
> {
> - assert_can_enable_dc6(dev_priv);
> + struct drm_i915_private *dev_priv = to_i915(display->drm);
>
> - drm_dbg_kms(&dev_priv->drm, "Enabling DC6\n");
> + assert_can_enable_dc6(display);
> +
> + drm_dbg_kms(display->drm, "Enabling DC6\n");
>
> /* Wa Display #1183: skl,kbl,cfl */
> - if (DISPLAY_VER(dev_priv) == 9 && !IS_BROXTON(dev_priv))
> - intel_de_rmw(dev_priv, GEN8_CHICKEN_DCPR_1,
> + if (DISPLAY_VER(display) == 9 && !IS_BROXTON(dev_priv))
> + intel_de_rmw(display, GEN8_CHICKEN_DCPR_1,
> 0, SKL_SELECT_ALTERNATE_DC_EXIT);
>
> - intel_dmc_wl_enable(&dev_priv->display);
> + intel_dmc_wl_enable(display);
>
> - gen9_set_dc_state(dev_priv, DC_STATE_EN_UPTO_DC6);
> + gen9_set_dc_state(display, DC_STATE_EN_UPTO_DC6);
> }
>
> -void bxt_enable_dc9(struct drm_i915_private *dev_priv)
> +void bxt_enable_dc9(struct intel_display *display)
> {
> - struct intel_display *display = &dev_priv->display;
> + struct drm_i915_private *dev_priv = to_i915(display->drm);
>
> - assert_can_enable_dc9(dev_priv);
> + assert_can_enable_dc9(display);
>
> - drm_dbg_kms(&dev_priv->drm, "Enabling DC9\n");
> + drm_dbg_kms(display->drm, "Enabling DC9\n");
> /*
> * Power sequencer reset is not needed on
> * platforms with South Display Engine on PCH,
> @@ -873,18 +885,16 @@ void bxt_enable_dc9(struct drm_i915_private *dev_priv)
> */
> if (!HAS_PCH_SPLIT(dev_priv))
> intel_pps_reset_all(display);
> - gen9_set_dc_state(dev_priv, DC_STATE_EN_DC9);
> + gen9_set_dc_state(display, DC_STATE_EN_DC9);
> }
>
> -void bxt_disable_dc9(struct drm_i915_private *dev_priv)
> +void bxt_disable_dc9(struct intel_display *display)
> {
> - struct intel_display *display = &dev_priv->display;
> + assert_can_disable_dc9(display);
>
> - assert_can_disable_dc9(dev_priv);
> + drm_dbg_kms(display->drm, "Disabling DC9\n");
>
> - drm_dbg_kms(&dev_priv->drm, "Disabling DC9\n");
> -
> - gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
> + gen9_set_dc_state(display, DC_STATE_DISABLE);
>
> intel_pps_unlock_regs_wa(display);
> }
> @@ -949,8 +959,10 @@ static void bxt_verify_dpio_phy_power_wells(struct drm_i915_private *dev_priv)
> static bool gen9_dc_off_power_well_enabled(struct drm_i915_private *dev_priv,
> struct i915_power_well *power_well)
> {
> - return ((intel_de_read(dev_priv, DC_STATE_EN) & DC_STATE_EN_DC3CO) == 0 &&
> - (intel_de_read(dev_priv, DC_STATE_EN) & DC_STATE_EN_UPTO_DC5_DC6_MASK) == 0);
> + struct intel_display *display = &dev_priv->display;
> +
> + return ((intel_de_read(display, DC_STATE_EN) & DC_STATE_EN_DC3CO) == 0 &&
> + (intel_de_read(display, DC_STATE_EN) & DC_STATE_EN_UPTO_DC5_DC6_MASK) == 0);
> }
>
> static void gen9_assert_dbuf_enabled(struct drm_i915_private *dev_priv)
> @@ -965,23 +977,23 @@ static void gen9_assert_dbuf_enabled(struct drm_i915_private *dev_priv)
> enabled_dbuf_slices);
> }
>
> -void gen9_disable_dc_states(struct drm_i915_private *dev_priv)
> +void gen9_disable_dc_states(struct intel_display *display)
> {
> - struct intel_display *display = &dev_priv->display;
> + struct drm_i915_private *dev_priv = to_i915(display->drm);
> struct i915_power_domains *power_domains = &display->power.domains;
> struct intel_cdclk_config cdclk_config = {};
>
> if (power_domains->target_dc_state == DC_STATE_EN_DC3CO) {
> - tgl_disable_dc3co(dev_priv);
> + tgl_disable_dc3co(display);
> return;
> }
>
> - gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
> + gen9_set_dc_state(display, DC_STATE_DISABLE);
>
> - if (!HAS_DISPLAY(dev_priv))
> + if (!HAS_DISPLAY(display))
> return;
>
> - intel_dmc_wl_disable(&dev_priv->display);
> + intel_dmc_wl_disable(display);
>
> intel_cdclk_get_cdclk(display, &cdclk_config);
> /* Can't read out voltage_level so can't use intel_cdclk_changed() */
> @@ -994,7 +1006,7 @@ void gen9_disable_dc_states(struct drm_i915_private *dev_priv)
> if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv))
> bxt_verify_dpio_phy_power_wells(dev_priv);
>
> - if (DISPLAY_VER(dev_priv) >= 11)
> + if (DISPLAY_VER(display) >= 11)
> /*
> * DMC retains HW context only for port A, the other combo
> * PHY's HW context for port B is lost after DC transitions,
> @@ -1006,26 +1018,29 @@ void gen9_disable_dc_states(struct drm_i915_private *dev_priv)
> static void gen9_dc_off_power_well_enable(struct drm_i915_private *dev_priv,
> struct i915_power_well *power_well)
> {
> - gen9_disable_dc_states(dev_priv);
> + struct intel_display *display = &dev_priv->display;
> +
> + gen9_disable_dc_states(display);
> }
>
> static void gen9_dc_off_power_well_disable(struct drm_i915_private *dev_priv,
> struct i915_power_well *power_well)
> {
> - struct i915_power_domains *power_domains = &dev_priv->display.power.domains;
> + struct intel_display *display = &dev_priv->display;
> + struct i915_power_domains *power_domains = &display->power.domains;
>
> if (!intel_dmc_has_payload(dev_priv))
> return;
>
> switch (power_domains->target_dc_state) {
> case DC_STATE_EN_DC3CO:
> - tgl_enable_dc3co(dev_priv);
> + tgl_enable_dc3co(display);
> break;
> case DC_STATE_EN_UPTO_DC6:
> - skl_enable_dc6(dev_priv);
> + skl_enable_dc6(display);
> break;
> case DC_STATE_EN_UPTO_DC5:
> - gen9_enable_dc5(dev_priv);
> + gen9_enable_dc5(display);
> break;
> }
> }
> diff --git a/drivers/gpu/drm/i915/display/intel_display_power_well.h b/drivers/gpu/drm/i915/display/intel_display_power_well.h
> index 9357a9a73c06..93559f7c6100 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_power_well.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_power_well.h
> @@ -12,6 +12,7 @@
>
> struct drm_i915_private;
> struct i915_power_well_ops;
> +struct intel_display;
> struct intel_encoder;
>
> #define for_each_power_well(__dev_priv, __power_well) \
> @@ -154,13 +155,13 @@ void chv_phy_powergate_lanes(struct intel_encoder *encoder,
> bool chv_phy_powergate_ch(struct drm_i915_private *dev_priv, enum dpio_phy phy,
> enum dpio_channel ch, bool override);
>
> -void gen9_enable_dc5(struct drm_i915_private *dev_priv);
> -void skl_enable_dc6(struct drm_i915_private *dev_priv);
> -void gen9_sanitize_dc_state(struct drm_i915_private *dev_priv);
> -void gen9_set_dc_state(struct drm_i915_private *dev_priv, u32 state);
> -void gen9_disable_dc_states(struct drm_i915_private *dev_priv);
> -void bxt_enable_dc9(struct drm_i915_private *dev_priv);
> -void bxt_disable_dc9(struct drm_i915_private *dev_priv);
> +void gen9_enable_dc5(struct intel_display *display);
> +void skl_enable_dc6(struct intel_display *display);
> +void gen9_sanitize_dc_state(struct intel_display *display);
> +void gen9_set_dc_state(struct intel_display *display, u32 state);
> +void gen9_disable_dc_states(struct intel_display *display);
> +void bxt_enable_dc9(struct intel_display *display);
> +void bxt_disable_dc9(struct intel_display *display);
>
> extern const struct i915_power_well_ops i9xx_always_on_power_well_ops;
> extern const struct i915_power_well_ops chv_pipe_power_well_ops;
> --
> 2.44.2
>
next prev parent reply other threads:[~2024-09-06 15:11 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-06 14:33 [PATCH 0/6] drm/i915: Some intel_display conversions Ville Syrjala
2024-09-06 14:33 ` [PATCH 1/6] drm/i915/cdclk: Add missing braces Ville Syrjala
2024-09-06 15:10 ` Rodrigo Vivi
2024-09-06 15:19 ` Jani Nikula
2024-09-06 14:33 ` [PATCH 2/6] drm/i915/cdclk: Convert CDCLK code to intel_display Ville Syrjala
2024-09-06 15:09 ` Rodrigo Vivi
2024-09-06 15:18 ` Jani Nikula
2024-09-06 16:17 ` Ville Syrjälä
2024-09-06 14:33 ` [PATCH 3/6] drm/i915/power: Convert low level DC state " Ville Syrjala
2024-09-06 15:10 ` Rodrigo Vivi [this message]
2024-09-06 14:33 ` [PATCH 4/6] drm/i915/vga: Convert VGA " Ville Syrjala
2024-09-06 15:12 ` Rodrigo Vivi
2024-09-06 14:33 ` [PATCH 5/6] drm/i915/power: Convert "i830 power well" " Ville Syrjala
2024-09-06 15:13 ` Rodrigo Vivi
2024-09-06 14:33 ` [PATCH 6/6] drm/i915/dmc: Convert DMC " Ville Syrjala
2024-09-06 15:16 ` Rodrigo Vivi
2024-09-06 14:38 ` ✓ CI.Patch_applied: success for drm/i915: Some intel_display conversions Patchwork
2024-09-06 14:39 ` ✗ CI.checkpatch: warning " Patchwork
2024-09-06 14:40 ` ✓ CI.KUnit: success " Patchwork
2024-09-06 14:57 ` ✓ CI.Build: " Patchwork
2024-09-06 15:02 ` ✓ CI.Hooks: " Patchwork
2024-09-06 15:03 ` ✗ CI.checksparse: warning " Patchwork
2024-09-06 15:43 ` ✗ Fi.CI.CHECKPATCH: " Patchwork
2024-09-06 15:43 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-09-06 15:45 ` ✓ CI.BAT: success " Patchwork
2024-09-06 16:08 ` ✗ Fi.CI.BAT: failure " Patchwork
2024-09-09 14:15 ` Ville Syrjälä
2024-09-10 8:14 ` Illipilli, TejasreeX
2024-09-09 10:12 ` ✗ CI.FULL: " Patchwork
2024-09-10 5:34 ` ✓ Fi.CI.BAT: success " Patchwork
2024-09-11 0:54 ` ✗ Fi.CI.IGT: failure " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Ztsbf26w1AMEs3eo@intel.com \
--to=rodrigo.vivi@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=ville.syrjala@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.