From: Chris Park <chris.p...@amd.com>

[Why]
All YCbCr420 resolutions 5K and above have tiling and discoloration
issues.  The issue can be remedied by forcing ODM combine from 5K to 8K.
10K resolution requires ODM 4:1.  The mechanism of what the real problem
is, that is inherent in ODM combine programming, doesn't seem to be
pointed at singular register programming (CLK, MPC, DCSURF, etc.), and
needs more in-depth programming sequence review for these new use case
scenarios.  Until then, workaround to enable ODM combine is proposed.
While it is not our policy, HW spreadsheet also recommends turning on
ODM for these scenario to lower the voltage.

[How]
Make pixel encoding and resolution size specific workaround to enable
ODM combine on YCbCr420 high resolution modes.

Signed-off-by: Chris Park <chris.p...@amd.com>
Reviewed-by: Charlene Liu <charlene....@amd.com>
Acked-by: Rodrigo Siqueira <rodrigo.sique...@amd.com>
---
 .../drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c 
b/drivers/gpu/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c
index 2a32ed6682fc..5909af0a25fb 100644
--- a/drivers/gpu/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c
+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c
@@ -3986,9 +3986,19 @@ void dml30_ModeSupportAndSystemConfigurationFull(struct 
display_mode_lib *mode_l
                                } else if 
(v->PlaneRequiredDISPCLKWithoutODMCombine > 
v->MaxDispclkRoundedDownToDFSGranularity) {
                                        v->ODMCombineEnablePerState[i][k] = 
dm_odm_combine_mode_2to1;
                                        v->PlaneRequiredDISPCLK = 
v->PlaneRequiredDISPCLKWithODMCombine2To1;
+                                       /*420 format workaround*/
+                                       if (v->HActive[k] > 7680 && 
v->OutputFormat[k] == dm_420) {
+                                               
v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1;
+                                               v->PlaneRequiredDISPCLK = 
v->PlaneRequiredDISPCLKWithODMCombine2To1;
+                                       }
                                } else {
                                        v->ODMCombineEnablePerState[i][k] = 
dm_odm_combine_mode_disabled;
                                        v->PlaneRequiredDISPCLK = 
v->PlaneRequiredDISPCLKWithoutODMCombine;
+                                       /*420 format workaround*/
+                                       if (v->HActive[k] > 4096 && 
v->OutputFormat[k] == dm_420) {
+                                               
v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1;
+                                               v->PlaneRequiredDISPCLK = 
v->PlaneRequiredDISPCLKWithODMCombine2To1;
+                                       }
                                }
 
                                if (v->ODMCombineEnablePerState[i][k] == 
dm_odm_combine_mode_4to1) {
-- 
2.27.0

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to