Forgot to mention the closes tag will update in next revision along with any comments if any
> Subject: [PATCH] drm/i915/backlight: Sanitize BIOS-enabled PCH PWM in full- > AUX VESA path > > In full-AUX VESA mode (aux_enable && aux_set) the driver never touches the > native PCH PWM. If BIOS left PWM CTL register enabled, the PCH PWM keeps > system alive during s2idle and blocks S0ix. > Always run pwm_funcs->setup() so pwm_enabled reflects real HW state, and > on first enable in full-AUX mode call pwm_funcs->disable() once to clear the > stale bit. Runtime behaviour is otherwise unchanged. > Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/16043 Regards, Suraj Kandpal > Fixes: 40d2f5820951 ("drm/i915/backlight: Remove try_vesa_interface") > Signed-off-by: Suraj Kandpal <[email protected]> > --- > .../drm/i915/display/intel_dp_aux_backlight.c | 32 +++++++++++++------ > 1 file changed, 23 insertions(+), 9 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c > b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c > index a8d56ebf06a2..c828c568fb8b 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c > +++ b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c > @@ -496,6 +496,17 @@ intel_dp_aux_vesa_enable_backlight(const struct > intel_crtc_state *crtc_state, > struct intel_panel *panel = &connector->panel; > struct intel_dp *intel_dp = enc_to_intel_dp(connector->encoder); > > + /* > + * In full AUX VESA mode the native PWM is never driven by us. If > BIOS > + * left it enabled, the PCH PWM keeps the system alive and blocks > + * S0ix. Sanitize it once via pwm_funcs->disable. > + */ > + if (panel->backlight.edp.vesa.info.aux_enable && > + panel->backlight.edp.vesa.info.aux_set && > + panel->backlight.pwm_enabled) > + panel->backlight.pwm_funcs->disable(conn_state, > + > intel_backlight_invert_pwm_level(connector, 0)); > + > if (!(panel->backlight.edp.vesa.info.aux_enable || > panel->backlight.edp.vesa.info.luminance_set)) { > u32 pwm_level; > @@ -558,15 +569,18 @@ static int > intel_dp_aux_vesa_setup_backlight(struct intel_connector *connector, > panel- > >backlight.edp.vesa.info.luminance_set), > backlight_unit_str(panel)); > > - if (!panel->backlight.edp.vesa.info.aux_set || > - !panel->backlight.edp.vesa.info.aux_enable) { > - ret = panel->backlight.pwm_funcs->setup(connector, pipe); > - if (ret < 0) { > - drm_err(display->drm, > - "[CONNECTOR:%d:%s] Failed to setup PWM > backlight controls for eDP backlight: %d\n", > - connector->base.base.id, connector- > >base.name, ret); > - return ret; > - } > + /* > + * Always probe the native PWM HW state so panel- > >backlight.pwm_enabled > + * reflects what BIOS left behind. Required for the full-AUX VESA path > + * to detect and sanitize a BIOS-enabled PCH PWM that would > otherwise > + * block S0ix. > + */ > + ret = panel->backlight.pwm_funcs->setup(connector, pipe); > + if (ret < 0) { > + drm_err(display->drm, > + "[CONNECTOR:%d:%s] Failed to setup PWM backlight > controls for eDP backlight: %d\n", > + connector->base.base.id, connector->base.name, > ret); > + return ret; > } > > if (panel->backlight.edp.vesa.info.luminance_set) { > -- > 2.34.1
