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 86ac7d59fd325ea6dfb5fb2cea269ad88f2d481e..0748ef36a16a25743dfccb6abea442194a6b2c5c 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;
                }