OSDN Git Service

drm/i915: Program EXT2 GC MAX registers
authorUma Shankar <uma.shankar@intel.com>
Fri, 29 Mar 2019 14:29:16 +0000 (19:59 +0530)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 29 Mar 2019 18:28:35 +0000 (20:28 +0200)
EXT2 GC MAX registers are introduced from Gen10+ to
program values from 3.0 to 7.0. Enabled the same, but
currently limiting it to 1.0 as userspace ABI is limited
at that currently.

v2: Updated the 1.0 programming and aligned as per GLK, also added
GLK along with GEN10+ check, as per Ville's feedback.

Signed-off-by: Uma Shankar <uma.shankar@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/1553869756-4546-3-git-send-email-uma.shankar@intel.com
drivers/gpu/drm/i915/i915_reg.h
drivers/gpu/drm/i915/intel_color.c

index c866379..341f03e 100644 (file)
@@ -10144,6 +10144,7 @@ enum skl_power_gate {
 #define PREC_PAL_DATA(pipe)            _MMIO_PIPE(pipe, _PAL_PREC_DATA_A, _PAL_PREC_DATA_B)
 #define PREC_PAL_GC_MAX(pipe, i)       _MMIO(_PIPE(pipe, _PAL_PREC_GC_MAX_A, _PAL_PREC_GC_MAX_B) + (i) * 4)
 #define PREC_PAL_EXT_GC_MAX(pipe, i)   _MMIO(_PIPE(pipe, _PAL_PREC_EXT_GC_MAX_A, _PAL_PREC_EXT_GC_MAX_B) + (i) * 4)
+#define PREC_PAL_EXT2_GC_MAX(pipe, i)  _MMIO(_PIPE(pipe, _PAL_PREC_EXT2_GC_MAX_A, _PAL_PREC_EXT2_GC_MAX_B) + (i) * 4)
 
 #define _PRE_CSC_GAMC_INDEX_A  0x4A484
 #define _PRE_CSC_GAMC_INDEX_B  0x4AC84
index c776159..f2907cf 100644 (file)
@@ -526,6 +526,17 @@ static void bdw_load_gamma_lut(const struct intel_crtc_state *crtc_state, u32 of
                I915_WRITE(PREC_PAL_EXT_GC_MAX(pipe, 0), (1 << 16));
                I915_WRITE(PREC_PAL_EXT_GC_MAX(pipe, 1), (1 << 16));
                I915_WRITE(PREC_PAL_EXT_GC_MAX(pipe, 2), (1 << 16));
+
+               /*
+                * Program the gc max 2 register to clamp values > 1.0.
+                * ToDo: Extend the ABI to be able to program values
+                * from 3.0 to 7.0
+                */
+               if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) {
+                       I915_WRITE(PREC_PAL_EXT2_GC_MAX(pipe, 0), (1 << 16));
+                       I915_WRITE(PREC_PAL_EXT2_GC_MAX(pipe, 1), (1 << 16));
+                       I915_WRITE(PREC_PAL_EXT2_GC_MAX(pipe, 2), (1 << 16));
+               }
        } else {
                for (i = 0; i < lut_size; i++) {
                        u32 v = (i * ((1 << 10) - 1)) / (lut_size - 1);
@@ -537,6 +548,17 @@ static void bdw_load_gamma_lut(const struct intel_crtc_state *crtc_state, u32 of
                I915_WRITE(PREC_PAL_EXT_GC_MAX(pipe, 0), (1 << 16));
                I915_WRITE(PREC_PAL_EXT_GC_MAX(pipe, 1), (1 << 16));
                I915_WRITE(PREC_PAL_EXT_GC_MAX(pipe, 2), (1 << 16));
+
+               /*
+                * Program the gc max 2 register to clamp values > 1.0.
+                * ToDo: Extend the ABI to be able to program values
+                * from 3.0 to 7.0
+                */
+               if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) {
+                       I915_WRITE(PREC_PAL_EXT2_GC_MAX(pipe, 0), (1 << 16));
+                       I915_WRITE(PREC_PAL_EXT2_GC_MAX(pipe, 1), (1 << 16));
+                       I915_WRITE(PREC_PAL_EXT2_GC_MAX(pipe, 2), (1 << 16));
+               }
        }
 
        /*