Message ID | 20210317151348.11331-1-wse@tuxedocomputers.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/amd/display: Try YCbCr420 color when YCbCr444 fails | expand |
On Wed, Mar 17, 2021 at 11:25 AM Werner Sembach <wse@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@tuxedocomputers.com> > Cc: <stable@vger.kernel.org> This seems reasonable to me. Harry, Leo, Any objections? Alex > --- > > From c9398160caf4ff20e63b8ba3a4366d6ef95c4ac3 Mon Sep 17 00:00:00 2001 > From: Werner Sembach <wse@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@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel
On 2021-03-24 4:23 p.m., Alex Deucher wrote: > On Wed, Mar 17, 2021 at 11:25 AM Werner Sembach <wse@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@tuxedocomputers.com> >> Cc: <stable@vger.kernel.org> > > > This seems reasonable to me. Harry, Leo, Any objections? > Looks good to me. Reviewed-by: Harry Wentland <harry.wentland@amd.com> Harry > Alex > >> --- >> >> From c9398160caf4ff20e63b8ba3a4366d6ef95c4ac3 Mon Sep 17 00:00:00 2001 >> From: Werner Sembach <wse@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@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/dri-devel>
Applied. Thanks! Alex On Fri, Mar 26, 2021 at 10:59 AM Harry Wentland <harry.wentland@amd.com> wrote: > > > > On 2021-03-24 4:23 p.m., Alex Deucher wrote: > > On Wed, Mar 17, 2021 at 11:25 AM Werner Sembach <wse@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@tuxedocomputers.com> > >> Cc: <stable@vger.kernel.org> > > > > > > This seems reasonable to me. Harry, Leo, Any objections? > > > > Looks good to me. > > Reviewed-by: Harry Wentland <harry.wentland@amd.com> > > Harry > > > Alex > > > >> --- > >> > >> From c9398160caf4ff20e63b8ba3a4366d6ef95c4ac3 Mon Sep 17 00:00:00 2001 > >> From: Werner Sembach <wse@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@lists.freedesktop.org > >> https://lists.freedesktop.org/mailman/listinfo/dri-devel>
Am 29.03.21 um 17:28 schrieb Alex Deucher: > Applied. Thanks! > > Alex Nice to hear that ^^ One quick question: Here do I find the amd-gfx dev branch? Kind regards, Werner Sembach > > On Fri, Mar 26, 2021 at 10:59 AM Harry Wentland <harry.wentland@amd.com> wrote: >> >> >> On 2021-03-24 4:23 p.m., Alex Deucher wrote: >>> On Wed, Mar 17, 2021 at 11:25 AM Werner Sembach <wse@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@tuxedocomputers.com> >>>> Cc: <stable@vger.kernel.org> >>> >>> This seems reasonable to me. Harry, Leo, Any objections? >>> >> Looks good to me. >> >> Reviewed-by: Harry Wentland <harry.wentland@amd.com> >> >> Harry >> >>> Alex >>> >>>> --- >>>> >>>> From c9398160caf4ff20e63b8ba3a4366d6ef95c4ac3 Mon Sep 17 00:00:00 2001 >>>> From: Werner Sembach <wse@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@lists.freedesktop.org >>>> https://lists.freedesktop.org/mailman/listinfo/dri-devel>
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; }