]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
drm/amd/display: Fix 10/12 bpc setup in DCE output bit depth reduction.
authorMario Kleiner <mario.kleiner.de@gmail.com>
Thu, 21 Jan 2021 06:17:02 +0000 (07:17 +0100)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 25 Jan 2021 22:49:41 +0000 (17:49 -0500)
In set_clamp(), the comments and definitions for the COLOR_DEPTH_101010
and COLOR_DEPTH_121212 cases directly contradict the code comment which
explains how this should work, whereas the COLOR_DEPTH_888 case
is consistent with the code comments. Comment says the bitmask should
be chosen to align to the top-most 10 or 12 MSB's on a 14 bit bus, but
the implementation contradicts that: 10 bit case sets a mask for 12 bpc
clamping, whereas 12 bit case sets a mask for 14 bpc clamping.

Note that during my limited testing on DCE-8.3 (HDMI deep color)
and DCE-11.2 (DP deep color), this didn't have any obvious ill
effects, neither did fixing it change anything obvious for the
better, so this fix may be inconsequential on DCE, and just
reduce the confusion of innocent bystanders when reading the code
and trying to investigate problems with 10 bpc+ output.

Fixes: 4562236b3bc0 ("drm/amd/dc: Add dc display driver (v2)")
Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com>
Cc: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dce/dce_transform.c

index abbaa6b0b2db90b8cd957ccebd1e5c6f4b840499..151dc7bf6d235676f196c2ca5837455499ffdfb6 100644 (file)
@@ -599,12 +599,12 @@ static void set_clamp(
                clamp_max = 0x3FC0;
                break;
        case COLOR_DEPTH_101010:
-               /* 10bit MSB aligned on 14 bit bus '11 1111 1111 1100' */
-               clamp_max = 0x3FFC;
+               /* 10bit MSB aligned on 14 bit bus '11 1111 1111 0000' */
+               clamp_max = 0x3FF0;
                break;
        case COLOR_DEPTH_121212:
-               /* 12bit MSB aligned on 14 bit bus '11 1111 1111 1111' */
-               clamp_max = 0x3FFF;
+               /* 12bit MSB aligned on 14 bit bus '11 1111 1111 1100' */
+               clamp_max = 0x3FFC;
                break;
        default:
                clamp_max = 0x3FC0;