Am Mo., 18. Mai 2026 um 16:13 Uhr schrieb Alex Deucher <[email protected]>: > > On Sat, May 16, 2026 at 2:52 PM Gilles Risch <[email protected]> wrote: > > > > After suspend/resume the internal eDP display on iMac11,1 (and > > potentially other DCE3.1 systems) stays dark because > > atombios_set_edp_panel_power() skips panel power control for > > anything older than DCE4. > > > > Fix this by: > > - Extending atombios_set_edp_panel_power() to also handle DCE3.1 > > by changing the !ASIC_IS_DCE4() guard to !ASIC_IS_DCE31(). > > HPD polling works correctly on DCE3.1 (verified: HPD is asserted > > at iteration 0 on iMac11,1). > > - Issuing ATOM_ENCODER_CMD_DP_VIDEO_ON/OFF for DCE3.1 in addition > > to DCE4+. > > > > Tested on iMac11,1 (Mobility Radeon HD 4850, RV770/DCE3.1). > > > > Signed-off-by: Gilles Risch <[email protected]> > > --- > > drivers/gpu/drm/radeon/atombios_encoders.c | 6 +++--- > > 1 file changed, 3 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c > > b/drivers/gpu/drm/radeon/atombios_encoders.c > > index 4e984973c043..b62fd713efcf 100644 > > --- a/drivers/gpu/drm/radeon/atombios_encoders.c > > +++ b/drivers/gpu/drm/radeon/atombios_encoders.c > > @@ -1383,7 +1383,7 @@ atombios_set_edp_panel_power(struct drm_connector > > *connector, int action) > > if (connector->connector_type != DRM_MODE_CONNECTOR_eDP) > > goto done; > > > > - if (!ASIC_IS_DCE4(rdev)) > > + if (!ASIC_IS_DCE31(rdev)) > > goto done; > > > > if ((action != ATOM_TRANSMITTER_ACTION_POWER_ON) && > > @@ -1707,7 +1707,7 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder > > *encoder, int mode) > > if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) > > && connector) { > > /* DP_SET_POWER_D0 is set in radeon_dp_link_train */ > > radeon_dp_link_train(encoder, connector); > > - if (ASIC_IS_DCE4(rdev)) > > + if (ASIC_IS_DCE4(rdev) || ASIC_IS_DCE31(rdev)) > > atombios_dig_encoder_setup(encoder, > > ATOM_ENCODER_CMD_DP_VIDEO_ON, 0); > > } > > if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) { > > @@ -1724,7 +1724,7 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder > > *encoder, int mode) > > case DRM_MODE_DPMS_SUSPEND: > > case DRM_MODE_DPMS_OFF: > > > > - if (ASIC_IS_DCE4(rdev)) { > > + if (ASIC_IS_DCE4(rdev) || ASIC_IS_DCE31(rdev)) { > > if > > (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) > > atombios_dig_encoder_setup(encoder, > > ATOM_ENCODER_CMD_DP_VIDEO_OFF, 0); > > } > > These changes don't make sense and will break other DCE3.c boards. I > had the attached patch from you in one of my old branches, does it fix > the issue? > > Alex
While the initial attached patch resolved the dark screen issue after a fresh boot, this follow-up patch addresses the same problem occurring after resuming from suspend. Should I used dmi_match() to avoid breaking other DCE3.c boards? Regards, Gilles
