drm/i915/color: Downscale degamma lut values read from hardware
authorChaitanya Kumar Borah <chaitanya.kumar.borah@intel.com>
Tue, 25 Jul 2023 08:30:02 +0000 (14:00 +0530)
committerAnkit Nautiyal <ankit.k.nautiyal@intel.com>
Thu, 27 Jul 2023 12:39:12 +0000 (18:09 +0530)
For MTL and beyond, convert back the 24 bit lut values
read from HW to 16 bit values to maintain parity with
userspace values. This way we avoid pipe config mismatch
for pre-csc lut values.

v2: Add helper function to downscale values (Jani)

Signed-off-by: Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com>
Reviewed-by: Uma Shankar <uma.shankar@intel.com>
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230725083002.3779717-3-chaitanya.kumar.borah@intel.com
drivers/gpu/drm/i915/display/intel_color.c

index 211b7fce1b279ba1bb2134b1c7c5c07ed53d2638..454607b4a02a76a3530baefa7d63cc1c23b2664f 100644 (file)
@@ -3456,6 +3456,14 @@ static struct drm_property_blob *glk_read_degamma_lut(struct intel_crtc *crtc)
        for (i = 0; i < lut_size; i++) {
                u32 val = intel_de_read_fw(dev_priv, PRE_CSC_GAMC_DATA(pipe));
 
+               /*
+                * For MTL and beyond, convert back the 24 bit lut values
+                * read from HW to 16 bit values to maintain parity with
+                * userspace values
+                */
+               if (DISPLAY_VER(dev_priv) >= 14)
+                       val = change_lut_val_precision(val, 16, 24);
+
                lut[i].red = val;
                lut[i].green = val;
                lut[i].blue = val;