[PATCH] drm/amd/display: Try YCbCr420 color when YCbCr444 fails

Harry Wentland harry.wentland at amd.com
Fri Mar 26 14:59:34 UTC 2021



On 2021-03-24 4:23 p.m., Alex Deucher wrote:
> On Wed, Mar 17, 2021 at 11:25 AM Werner Sembach <wse at tuxedocomputers.com> wrote:
>>
>> When encoder validation of a display mode fails, retry with less bandwidth
>> heavy YCbCr420 color mode, if available. This enables some HDMI 1.4 setups
>> to support 4k60Hz output, which previously failed silently.
>>
>> On some setups, while the monitor and the gpu support display modes with
>> pixel clocks of up to 600MHz, the link encoder might not. This prevents
>> YCbCr444 and RGB encoding for 4k60Hz, but YCbCr420 encoding might still be
>> possible. However, which color mode is used is decided before the link
>> encoder capabilities are checked. This patch fixes the problem by retrying
>> to find a display mode with YCbCr420 enforced and using it, if it is
>> valid.
>>
>> Signed-off-by: Werner Sembach <wse at tuxedocomputers.com>
>> Cc: <stable at vger.kernel.org>
> 
> 
> This seems reasonable to me.  Harry, Leo, Any objections?
> 

Looks good to me.

Reviewed-by: Harry Wentland <harry.wentland at amd.com>

Harry

> Alex
> 
>> ---
>>
>>  From c9398160caf4ff20e63b8ba3a4366d6ef95c4ac3 Mon Sep 17 00:00:00 2001
>> From: Werner Sembach <wse at tuxedocomputers.com>
>> Date: Wed, 17 Mar 2021 12:52:22 +0100
>> Subject: [PATCH] Retry forcing YCbCr420 color on failed encoder validation
>>
>> ---
>>   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 9 +++++++++
>>   1 file changed, 9 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 961abf1cf040..2d16389b5f1e 100644
>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> @@ -5727,6 +5727,15 @@ create_validate_stream_for_sink(struct amdgpu_dm_connector *aconnector,
>>
>>          } while (stream == NULL && requested_bpc >= 6);
>>
>> +       if (dc_result == DC_FAIL_ENC_VALIDATE && !aconnector->force_yuv420_output) {
>> +               DRM_DEBUG_KMS("Retry forcing YCbCr420 encoding\n");
>> +
>> +               aconnector->force_yuv420_output = true;
>> +               stream = create_validate_stream_for_sink(aconnector, drm_mode,
>> +                                               dm_state, old_stream);
>> +               aconnector->force_yuv420_output = false;
>> +       }
>> +
>>          return stream;
>>   }
>>
>> --
>> 2.25.1
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel>


More information about the dri-devel mailing list