drm/amd/display: Add 6bpc RGB case for dcn32 output bpp calculations
authorGeorge Shen <george.shen@amd.com>
Thu, 12 Dec 2024 21:17:22 +0000 (16:17 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 6 Jan 2025 19:44:28 +0000 (14:44 -0500)
[Why]
Current DCN32 calculation doesn't consider RGB 6bpc for the DP case.
This results in an invalid output bpp being calculated when DSC is not
enabled in the configuration, failing the mode validation.

[How]
Add special case to handle 6bpc RGB in the output bpp calculation.

Reviewed-by: Alvin Lee <alvin.lee2@amd.com>
Signed-off-by: George Shen <george.shen@amd.com>
Signed-off-by: Roman Li <roman.li@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.c

index 86ac7d5..0748ef3 100644 (file)
@@ -1595,6 +1595,7 @@ double dml32_TruncToValidBPP(
        unsigned int   NonDSCBPP0;
        unsigned int   NonDSCBPP1;
        unsigned int   NonDSCBPP2;
+       unsigned int   NonDSCBPP3 = BPP_INVALID;
 
        if (Format == dm_420) {
                NonDSCBPP0 = 12;
@@ -1603,6 +1604,7 @@ double dml32_TruncToValidBPP(
                MinDSCBPP = 6;
                MaxDSCBPP = 1.5 * DSCInputBitPerComponent - 1.0 / 16;
        } else if (Format == dm_444) {
+               NonDSCBPP3 = 18;
                NonDSCBPP0 = 24;
                NonDSCBPP1 = 30;
                NonDSCBPP2 = 36;
@@ -1667,6 +1669,8 @@ double dml32_TruncToValidBPP(
                                return NonDSCBPP1;
                        else if (MaxLinkBPP >= NonDSCBPP0)
                                return 16.0;
+                       else if ((Output == dm_dp2p0 || Output == dm_dp) && NonDSCBPP3 != BPP_INVALID &&  MaxLinkBPP >= NonDSCBPP3)
+                               return NonDSCBPP3; // Special case to allow 6bpc RGB for DP connections.
                        else
                                return BPP_INVALID;
                }