On 2025-09-24 12:16, Mario Limonciello wrote:
> [Why]
> The main reason common modes are added is for compatibility with
> clone mode when a laptop is connected to a projector or external
> monitor.  Since commit 978fa2f6d0b12 ("drm/amd/display: Use scaling
> for non-native resolutions on eDP") when non-native modes are picked
> for eDP the GPU scalar will be used.  This is because it is inconsistent
> whether eDP panels have the capability to actually drive non-native
> resolutions. With panels connected to other connectors this limitation
> generally doesn't exist as we the EDID will advertise support for a
> number of resolutions and monitors will use built in scaling hardware.
> 
> Comparing DC and non-DC code paths the non-DC code path only adds
> common modes for LVDS and eDP whereas the DC codepath does it for
> all connector types.
> 
> In the past there was an experiment done to disable common mode adding
> for eDP and LVDS from commit 6d396e7ac1ce3 ("drm/amd/display: Disable
> common modes for LVDS") and commit 7948afb46af92 ("drm/amd/display:
> Disable common modes for eDP") but this was reverted in
> commit a8b79b09185de ("drm/amd: Re-enable common modes for eDP and
> LVDS") because it caused problems with Xorg.
> 
> [How]
> Only add common modes for eDP and LVDS for DC, matching the behavior
> of non-DC.
> 
> Suggested-by: Timur Kristóf <timur.kris...@gmail.com>
> Signed-off-by: Mario Limonciello <mario.limoncie...@amd.com>

Reviewed-by: Harry Wentland <harry.wentl...@amd.com>

Harry

> ---
>  drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c 
> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index 97d9eba17963..5a05ee6746af 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -8151,6 +8151,10 @@ static void 
> amdgpu_dm_connector_add_common_modes(struct drm_encoder *encoder,
>               {"1920x1200", 1920, 1200}
>       };
>  
> +     if ((connector->connector_type != DRM_MODE_CONNECTOR_eDP) &&
> +         (connector->connector_type != DRM_MODE_CONNECTOR_LVDS))
> +             return;
> +
>       n = ARRAY_SIZE(common_modes);
>  
>       for (i = 0; i < n; i++) {

Reply via email to