All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ville Syrjala <ville.syrjala@linux.intel.com>
To: intel-gfx@lists.freedesktop.org
Subject: [Intel-gfx] [PATCH 20/20] drm/i915: Add 10bit gamma mode for gen2/3
Date: Sat, 18 Jul 2020 00:13:45 +0300	[thread overview]
Message-ID: <20200717211345.26851-21-ville.syrjala@linux.intel.com> (raw)
In-Reply-To: <20200717211345.26851-1-ville.syrjala@linux.intel.com>

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Some gen2/gen3 parts have a 10bit gamma mode, on some pipes.
Expose it.

The format is different to the later i965+ style in that we
store a 10bit value and a 6 bit floating point slope for each
entry. Ie. the hardware extrapolates the intermediate steps
from the current LUT entry, instead of interpolating between
the current and next LUT entries. This also means we don't store
the last LUT entry in any register as it is defined by the previous
LUT entry's value+slope.

The slope has limited precision though (2 bit exponent + 4 bit
mantissa), so we have to allow for more error in the state checker
for the last entry, and we have to make sure userspace doesn't
pass in something where the slope is simply to steep. In theory
we should perhaps check the slope for every interval, but we don't
do that for any other interpolated gamma mode and I suspect they
may also have some internal limit on the slope. I haven't confirmed
that theory though. Anyways, only the last entry provides a slight
challenge for the state checker since all the other entries
do have an explicit value stored in a register.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_color.c | 248 ++++++++++++++++++++-
 drivers/gpu/drm/i915/i915_pci.c            |  10 +-
 drivers/gpu/drm/i915/i915_reg.h            |  38 +++-
 3 files changed, 279 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_color.c b/drivers/gpu/drm/i915/display/intel_color.c
index ca6c6679368c..055a49ed4e3a 100644
--- a/drivers/gpu/drm/i915/display/intel_color.c
+++ b/drivers/gpu/drm/i915/display/intel_color.c
@@ -414,6 +414,79 @@ static void i9xx_lut_8_pack(struct drm_color_lut *entry, u32 val)
 	entry->blue = intel_color_lut_pack(REG_FIELD_GET(LGC_PALETTE_BLUE_MASK, val), 8);
 }
 
+/* i8xx/i9xx+ 10bit slope format "even DW" (low 8 bits) */
+static u32 _i9xx_lut_10_ldw(u16 a)
+{
+	return drm_color_lut_extract(a, 10) & 0xff;
+}
+
+static u32 i9xx_lut_10_ldw(const struct drm_color_lut *color)
+{
+	return _i9xx_lut_10_ldw(color[0].red) << 16 |
+		_i9xx_lut_10_ldw(color[0].green) << 8 |
+		_i9xx_lut_10_ldw(color[0].blue);
+}
+
+/* i8xx/i9xx+ 10bit slope format "odd DW" (high 2 bits + slope) */
+static u32 _i9xx_lut_10_udw(u16 a, u16 b)
+{
+	unsigned int mantissa, exponent;
+
+	a = drm_color_lut_extract(a, 10);
+	b = drm_color_lut_extract(b, 10);
+
+	/* b = a + 8 * m * 2 ^ -e */
+	mantissa = clamp(b - a, 0, 0x7f);
+	exponent = 3;
+	while (mantissa > 0xf) {
+		mantissa >>= 1;
+		exponent--;
+	}
+
+	return (exponent << 6) |
+		(mantissa << 2) |
+		(a >> 8);
+}
+
+static u32 i9xx_lut_10_udw(const struct drm_color_lut *color)
+{
+	return _i9xx_lut_10_udw(color[0].red, color[1].red) << 16 |
+		_i9xx_lut_10_udw(color[0].green, color[1].green) << 8 |
+		_i9xx_lut_10_udw(color[0].blue, color[1].blue);
+}
+
+static void i9xx_lut_10_pack(struct drm_color_lut *color,
+			     u32 ldw, u32 udw)
+{
+	u16 red = REG_FIELD_GET(PALETTE_10BIT_RED_LDW_MASK, ldw) |
+		REG_FIELD_GET(PALETTE_10BIT_RED_UDW_MASK, udw) << 8;
+	u16 green = REG_FIELD_GET(PALETTE_10BIT_GREEN_LDW_MASK, ldw) |
+		REG_FIELD_GET(PALETTE_10BIT_GREEN_UDW_MASK, udw) << 8;
+	u16 blue = REG_FIELD_GET(PALETTE_10BIT_BLUE_LDW_MASK, ldw) |
+		REG_FIELD_GET(PALETTE_10BIT_BLUE_UDW_MASK, udw) << 8;
+
+	color->red = intel_color_lut_pack(red, 10);
+	color->green = intel_color_lut_pack(green, 10);
+	color->blue = intel_color_lut_pack(blue, 10);
+}
+
+static void i9xx_lut_10_pack_slope(struct drm_color_lut *color,
+				   u32 ldw, u32 udw)
+{
+	int r_exp = REG_FIELD_GET(PALETTE_10BIT_RED_EXP_MASK, udw);
+	int r_mant = REG_FIELD_GET(PALETTE_10BIT_RED_MANT_MASK, udw);
+	int g_exp = REG_FIELD_GET(PALETTE_10BIT_GREEN_EXP_MASK, udw);
+	int g_mant = REG_FIELD_GET(PALETTE_10BIT_GREEN_MANT_MASK, udw);
+	int b_exp = REG_FIELD_GET(PALETTE_10BIT_BLUE_EXP_MASK, udw);
+	int b_mant = REG_FIELD_GET(PALETTE_10BIT_BLUE_MANT_MASK, udw);
+
+	i9xx_lut_10_pack(color, ldw, udw);
+
+	color->red += r_mant << (3 - r_exp);
+	color->green += g_mant << (3 - g_exp);
+	color->blue += b_mant << (3 - b_exp);
+}
+
 /* i965+ "10.6" bit interpolated format "even DW" (low 8 bits) */
 static u32 i965_lut_10p6_ldw(const struct drm_color_lut *color)
 {
@@ -554,6 +627,22 @@ static void i9xx_load_lut_8(struct intel_crtc *crtc,
 			       i9xx_lut_8(&lut[i]));
 }
 
+static void i9xx_load_lut_10(struct intel_crtc *crtc,
+			     const struct drm_property_blob *blob)
+{
+	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
+	const struct drm_color_lut *lut = blob->data;
+	int i, lut_size = drm_color_lut_size(blob);
+	enum pipe pipe = crtc->pipe;
+
+	for (i = 0; i < lut_size - 1; i++) {
+		intel_de_write(dev_priv, PALETTE(pipe, 2 * i + 0),
+			       i9xx_lut_10_ldw(&lut[i]));
+		intel_de_write(dev_priv, PALETTE(pipe, 2 * i + 1),
+			       i9xx_lut_10_udw(&lut[i]));
+	}
+}
+
 static void i9xx_load_luts(const struct intel_crtc_state *crtc_state)
 {
 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
@@ -562,7 +651,10 @@ static void i9xx_load_luts(const struct intel_crtc_state *crtc_state)
 
 	assert_pll_enabled(dev_priv, crtc->pipe);
 
-	i9xx_load_lut_8(crtc, gamma_lut);
+	if (crtc_state->gamma_mode == GAMMA_MODE_MODE_8BIT)
+		i9xx_load_lut_8(crtc, gamma_lut);
+	else
+		i9xx_load_lut_10(crtc, gamma_lut);
 }
 
 static void i965_load_lut_10p6(struct intel_crtc *crtc,
@@ -1326,11 +1418,36 @@ static u32 i9xx_gamma_mode(struct intel_crtc_state *crtc_state)
 	    crtc_state_is_legacy_gamma(crtc_state))
 		return GAMMA_MODE_MODE_8BIT;
 	else
-		return GAMMA_MODE_MODE_10BIT; /* i965+ only */
+		return GAMMA_MODE_MODE_10BIT;
+}
+
+static int i9xx_lut_10_diff(u16 a, u16 b)
+{
+	return drm_color_lut_extract(a, 10) -
+		drm_color_lut_extract(b, 10);
+}
+
+static int i9xx_check_lut_10(struct drm_i915_private *dev_priv,
+			     const struct drm_property_blob *blob)
+{
+	const struct drm_color_lut *lut = blob->data;
+	int lut_size = drm_color_lut_size(blob);
+	const struct drm_color_lut *a = &lut[lut_size - 2];
+	const struct drm_color_lut *b = &lut[lut_size - 1];
+
+	if (i9xx_lut_10_diff(b->red, a->red) > 0x7f ||
+	    i9xx_lut_10_diff(b->green, a->green) > 0x7f ||
+	    i9xx_lut_10_diff(b->blue, a->blue) > 0x7f) {
+		drm_dbg_kms(&dev_priv->drm, "Last gamma LUT entry exceeds max slope\n");
+		return -EINVAL;
+	}
+
+	return 0;
 }
 
 static int i9xx_color_check(struct intel_crtc_state *crtc_state)
 {
+	struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);
 	int ret;
 
 	ret = check_luts(crtc_state);
@@ -1343,6 +1460,13 @@ static int i9xx_color_check(struct intel_crtc_state *crtc_state)
 
 	crtc_state->gamma_mode = i9xx_gamma_mode(crtc_state);
 
+	if (INTEL_GEN(dev_priv) < 4 &&
+	    crtc_state->gamma_mode == GAMMA_MODE_MODE_10BIT) {
+		ret = i9xx_check_lut_10(dev_priv, crtc_state->hw.gamma_lut);
+		if (ret)
+			return ret;
+	}
+
 	ret = intel_color_add_affected_planes(crtc_state);
 	if (ret)
 		return ret;
@@ -1613,6 +1737,22 @@ static int icl_color_check(struct intel_crtc_state *crtc_state)
 }
 
 static int i9xx_gamma_precision(const struct intel_crtc_state *crtc_state)
+{
+	if (!crtc_state->gamma_enable)
+		return 0;
+
+	switch (crtc_state->gamma_mode) {
+	case GAMMA_MODE_MODE_8BIT:
+		return 8;
+	case GAMMA_MODE_MODE_10BIT:
+		return 10;
+	default:
+		MISSING_CASE(crtc_state->gamma_mode);
+		return 0;
+	}
+}
+
+static int i965_gamma_precision(const struct intel_crtc_state *crtc_state)
 {
 	if (!crtc_state->gamma_enable)
 		return 0;
@@ -1700,7 +1840,7 @@ static int chv_gamma_precision(const struct intel_crtc_state *crtc_state)
 	if (crtc_state->cgm_mode & CGM_PIPE_MODE_GAMMA)
 		return 10;
 	else
-		return i9xx_gamma_precision(crtc_state);
+		return i965_gamma_precision(crtc_state);
 }
 
 static int glk_degamma_precision(const struct intel_crtc_state *crtc_state)
@@ -1803,6 +1943,37 @@ static bool intel_lut_equal(const struct drm_property_blob *blob1,
 	return true;
 }
 
+static bool i9xx_lut_10_equal(const struct drm_property_blob *blob1,
+			      const struct drm_property_blob *blob2,
+			      int bit_precision)
+{
+	const struct drm_color_lut *lut1, *lut2;
+	int i, lut_size;
+
+	if (!intel_color_lut_sizes_equal(blob1, blob2))
+		return false;
+
+	if (!blob1)
+		return true;
+
+	if (!bit_precision)
+		return false;
+
+	lut_size = drm_color_lut_size(blob1);
+	lut1 = blob1->data;
+	lut2 = blob2->data;
+
+	for (i = 0; i < lut_size - 1; i++) {
+		if (!lut_entry_equal(&lut1[i], &lut2[i],
+				     0xffff >> bit_precision))
+			return false;
+	}
+
+	/* limited precision for the last entry due to floating point slope */
+	return lut_entry_equal(&lut1[i], &lut2[i],
+			       0xffff >> (bit_precision - 3));
+}
+
 static bool i9xx_degamma_equal(const struct intel_crtc_state *crtc_state1,
 			       const struct intel_crtc_state *crtc_state2,
 			       bool fastset)
@@ -1821,8 +1992,23 @@ static bool i9xx_gamma_equal(const struct intel_crtc_state *crtc_state1,
 	const struct drm_property_blob *gamma_lut1 = crtc_state1->hw.gamma_lut;
 	const struct drm_property_blob *gamma_lut2 = crtc_state2->hw.gamma_lut;
 
+	if (crtc_state1->gamma_mode == GAMMA_MODE_MODE_10BIT)
+		return i9xx_lut_10_equal(gamma_lut1, gamma_lut2,
+					 i9xx_gamma_precision(crtc_state1));
+	else
+		return intel_lut_equal(gamma_lut1, gamma_lut2,
+				       i9xx_gamma_precision(crtc_state1));
+}
+
+static bool i965_gamma_equal(const struct intel_crtc_state *crtc_state1,
+			     const struct intel_crtc_state *crtc_state2,
+			     bool fastset)
+{
+	const struct drm_property_blob *gamma_lut1 = crtc_state1->hw.gamma_lut;
+	const struct drm_property_blob *gamma_lut2 = crtc_state2->hw.gamma_lut;
+
 	return intel_lut_equal(gamma_lut1, gamma_lut2,
-			       i9xx_gamma_precision(crtc_state1));
+			       i965_gamma_precision(crtc_state1));
 }
 
 static bool chv_degamma_equal(const struct intel_crtc_state *crtc_state1,
@@ -2084,6 +2270,36 @@ static struct drm_property_blob *i9xx_read_lut_8(struct intel_crtc *crtc)
 	return blob;
 }
 
+static struct drm_property_blob *
+i9xx_read_lut_10(struct intel_crtc *crtc)
+{
+	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
+	u32 lut_size = INTEL_INFO(dev_priv)->color.gamma_lut_size;
+	enum pipe pipe = crtc->pipe;
+	struct drm_property_blob *blob;
+	struct drm_color_lut *lut;
+	u32 ldw, udw;
+	int i;
+
+	blob = drm_property_create_blob(&dev_priv->drm,
+					lut_size * sizeof(lut[0]), NULL);
+	if (IS_ERR(blob))
+		return NULL;
+
+	lut = blob->data;
+
+	for (i = 0; i < lut_size - 1; i++) {
+		ldw = intel_de_read(dev_priv, PALETTE(pipe, 2 * i + 0));
+		udw = intel_de_read(dev_priv, PALETTE(pipe, 2 * i + 1));
+
+		i9xx_lut_10_pack(&lut[i], ldw, udw);
+	}
+
+	i9xx_lut_10_pack_slope(&lut[i], ldw, udw);
+
+	return blob;
+}
+
 static void i9xx_read_luts(struct intel_crtc_state *crtc_state)
 {
 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
@@ -2091,7 +2307,10 @@ static void i9xx_read_luts(struct intel_crtc_state *crtc_state)
 	if (!crtc_state->gamma_enable)
 		return;
 
-	crtc_state->hw.gamma_lut = i9xx_read_lut_8(crtc);
+	if (crtc_state->gamma_mode == GAMMA_MODE_MODE_8BIT)
+		crtc_state->hw.gamma_lut = i9xx_read_lut_8(crtc);
+	else
+		crtc_state->hw.gamma_lut = i9xx_read_lut_10(crtc);
 }
 
 static struct drm_property_blob *i965_read_lut_10p6(struct intel_crtc *crtc)
@@ -2546,6 +2765,7 @@ void intel_color_init(struct intel_crtc *crtc)
 {
 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
 	bool has_ctm = INTEL_INFO(dev_priv)->color.degamma_lut_size != 0;
+	int gamma_lut_size;
 
 	drm_mode_crtc_set_gamma_size(&crtc->base, 256);
 
@@ -2562,7 +2782,7 @@ void intel_color_init(struct intel_crtc *crtc)
 			dev_priv->display.color_commit = i9xx_color_commit;
 			dev_priv->display.load_luts = i965_load_luts;
 			dev_priv->display.read_luts = i965_read_luts;
-			dev_priv->display.gamma_equal = i9xx_gamma_equal;
+			dev_priv->display.gamma_equal = i965_gamma_equal;
 			dev_priv->display.degamma_equal = i9xx_degamma_equal;
 		} else {
 			dev_priv->display.color_check = i9xx_color_check;
@@ -2618,8 +2838,20 @@ void intel_color_init(struct intel_crtc *crtc)
 
 	}
 
+	/*
+	 * "DPALETTE_A: NOTE: The 8-bit (non-10-bit) mode is the
+	 *  only mode supported by Alviso and Grantsdale."
+	 *
+	 * Actually looks like this affects all of gen3.
+	 * Confirmed on alv,cst,pnv. Mobile gen2 parts (alm,mgm)
+	 * are confirmed not to suffer from this restriction.
+	 */
+	if (IS_GEN(dev_priv, 3) && crtc->pipe == PIPE_A)
+		gamma_lut_size = 256;
+	else
+		gamma_lut_size = INTEL_INFO(dev_priv)->color.gamma_lut_size;
+
 	drm_crtc_enable_color_mgmt(&crtc->base,
 				   INTEL_INFO(dev_priv)->color.degamma_lut_size,
-				   has_ctm,
-				   INTEL_INFO(dev_priv)->color.gamma_lut_size);
+				   has_ctm, gamma_lut_size);
 }
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index 2338f92ce490..baa24e4691c0 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -127,9 +127,9 @@
 		[PIPE_D] = TGL_CURSOR_D_OFFSET, \
 	}
 
-#define I9XX_COLORS \
+#define I845_COLORS \
 	.color = { .gamma_lut_size = 256 }
-#define I965_COLORS \
+#define I9XX_COLORS \
 	.color = { .gamma_lut_size = 129, \
 		   .gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \
 	}
@@ -194,7 +194,7 @@
 	.dma_mask_size = 32, \
 	I845_PIPE_OFFSETS, \
 	I845_CURSOR_OFFSETS, \
-	I9XX_COLORS, \
+	I845_COLORS, \
 	GEN_DEFAULT_PAGE_SIZES, \
 	GEN_DEFAULT_REGIONS
 
@@ -323,7 +323,7 @@ static const struct intel_device_info pnv_m_info = {
 	.dma_mask_size = 36, \
 	I9XX_PIPE_OFFSETS, \
 	I9XX_CURSOR_OFFSETS, \
-	I965_COLORS, \
+	I9XX_COLORS, \
 	GEN_DEFAULT_PAGE_SIZES, \
 	GEN_DEFAULT_REGIONS
 
@@ -524,7 +524,7 @@ static const struct intel_device_info vlv_info = {
 	.display_mmio_offset = VLV_DISPLAY_BASE,
 	I9XX_PIPE_OFFSETS,
 	I9XX_CURSOR_OFFSETS,
-	I965_COLORS,
+	I9XX_COLORS,
 	GEN_DEFAULT_PAGE_SIZES,
 	GEN_DEFAULT_REGIONS,
 };
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 428ef06b8084..0c34d62f22f4 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -3708,10 +3708,40 @@ static inline bool i915_mmio_reg_valid(i915_reg_t reg)
 #define _PALETTE_A		0xa000
 #define _PALETTE_B		0xa800
 #define _CHV_PALETTE_C		0xc000
-#define PALETTE_RED_MASK        REG_GENMASK(23, 16)
-#define PALETTE_GREEN_MASK      REG_GENMASK(15, 8)
-#define PALETTE_BLUE_MASK       REG_GENMASK(7, 0)
-#define PALETTE(pipe, i)	_MMIO(DISPLAY_MMIO_BASE(dev_priv) + \
+/* 8bit palette mode */
+#define  PALETTE_RED_MASK		REG_GENMASK(23, 16)
+#define  PALETTE_RED(x)			REG_FIELD_PREP(PALETTE_RED_MASK, (x))
+#define  PALETTE_GREEN_MASK		REG_GENMASK(15, 8)
+#define  PALETTE_GREEN(x)		REG_FIELD_PREP(PALETTE_GREEN_MASK, (x))
+#define  PALETTE_BLUE_MASK		REG_GENMASK(7, 0)
+#define  PALETTE_BLUE(x)		REG_FIELD_PREP(PALETTE_BLUE_MASK, (x))
+/* i9xx 10bit interpolated ldw */
+#define  PALETTE_10BIT_RED_LDW_MASK	REG_GENMASK(23, 16)
+#define  PALETTE_10BIT_RED_LDW(x)	REG_FIELD_PREP(PALETTE_10BIT_RED_LDW_MASK, (x))
+#define  PALETTE_10BIT_GREEN_LDW_MASK	REG_GENMASK(15, 8)
+#define  PALETTE_10BIT_GREEN_LDW(x)	REG_FIELD_PREP(PALETTE_10BIT_GREEN_LDW_MASK, (x))
+#define  PALETTE_10BIT_BLUE_LDW_MASK	REG_GENMASK(7, 0)
+#define  PALETTE_10BIT_BLUE_LDW(x)	REG_FIELD_PREP(PALETTE_10BIT_BLUE_LDW_MASK, (x))
+/* i9xx 10bit interpolated udw */
+#define  PALETTE_10BIT_RED_EXP_MASK	REG_GENMASK(23, 22)
+#define  PALETTE_10BIT_RED_EXP(x)	REG_FIELD_PREP(PALETTE_10BIT_RED_EXP_MASK, (x))
+#define  PALETTE_10BIT_RED_MANT_MASK	REG_GENMASK(21, 18)
+#define  PALETTE_10BIT_RED_MANT(x)	REG_FIELD_PREP(PALETTE_10BIT_RED_MANT_MASK, (x))
+#define  PALETTE_10BIT_RED_UDW_MASK	REG_GENMASK(17, 16)
+#define  PALETTE_10BIT_RED_UDW(x)	REG_FIELD_PREP(PALETTE_10BIT_RED_UDW_MASK, (X))
+#define  PALETTE_10BIT_GREEN_EXP_MASK	REG_GENMASK(15, 14)
+#define  PALETTE_10BIT_GREEN_EXP(x)	REG_FIELD_PREP(PALETTE_10BIT_GREEN_EXP_MASK, (x))
+#define  PALETTE_10BIT_GREEN_MANT_MASK	REG_GENMASK(13, 10)
+#define  PALETTE_10BIT_GREEN_MANT(x)	REG_FIELD_PREP(PALETTE_10BIT_GREEN_MANT_MASK, (x))
+#define  PALETTE_10BIT_GREEN_UDW_MASK	REG_GENMASK(9, 8)
+#define  PALETTE_10BIT_GREEN_UDW(x)	REG_FIELD_PREP(PALETTE_10BIT_GREEN_UDW_MASK, (x))
+#define  PALETTE_10BIT_BLUE_EXP_MASK	REG_GENMASK(7, 6)
+#define  PALETTE_10BIT_BLUE_EXP(x)	REG_FIELD_PREP(PALETTE_10BIT_BLUE_EXP_MASK, (x))
+#define  PALETTE_10BIT_BLUE_MANT_MASK	REG_GENMASK(5, 2)
+#define  PALETTE_10BIT_BLUE_MANT(x)	REG_FIELD_PREP(PALETTE_10BIT_BLUE_MANT_MASK, (x))
+#define  PALETTE_10BIT_BLUE_UDW_MASK	REG_GENMASK(1, 0)
+#define  PALETTE_10BIT_BLUE_UDW(x)	REG_FIELD_PREP(PALETTE_10BIT_BLUE_UDW_MASK, (x))
+#define PALETTE(pipe, i)	_MMIO(DISPLAY_MMIO_BASE(dev_priv) +	\
 				      _PICK((pipe), _PALETTE_A,		\
 					    _PALETTE_B, _CHV_PALETTE_C) + \
 				      (i) * 4)
-- 
2.26.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  parent reply	other threads:[~2020-07-17 21:14 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-17 21:13 [Intel-gfx] [PATCH 00/20] drm/i915: Finish (de)gamma readout Ville Syrjala
2020-07-17 21:13 ` [Intel-gfx] [PATCH 01/20] drm/i915: Fix state checker hw.active/hw.enable readout Ville Syrjala
2020-09-17 19:20   ` Shankar, Uma
2020-07-17 21:13 ` [Intel-gfx] [PATCH 02/20] drm/i915: Move MST master transcoder dump earlier Ville Syrjala
2020-09-17 19:24   ` Shankar, Uma
2020-07-17 21:13 ` [Intel-gfx] [PATCH 03/20] drm/i915: Include the LUT sizes in the state dump Ville Syrjala
2020-09-17 19:27   ` Shankar, Uma
2020-07-17 21:13 ` [Intel-gfx] [PATCH 04/20] drm/i915: s/glk_read_lut_10/bdw_read_lut_10/ Ville Syrjala
2020-09-17 19:29   ` Shankar, Uma
2020-07-17 21:13 ` [Intel-gfx] [PATCH 05/20] drm/i915: Reset glk degamma index after programming/readout Ville Syrjala
2020-09-17 19:39   ` Shankar, Uma
2020-07-17 21:13 ` [Intel-gfx] [PATCH 06/20] drm/i915: Shuffle chv_cgm_gamma_pack() around a bit Ville Syrjala
2020-09-17 19:42   ` Shankar, Uma
2020-07-17 21:13 ` [Intel-gfx] [PATCH 07/20] drm/i915: Relocate CHV CGM gamma masks Ville Syrjala
2020-09-17 19:46   ` Shankar, Uma
2020-07-17 21:13 ` [Intel-gfx] [PATCH 08/20] drm/i915: Add glk+ degamma readout Ville Syrjala
2020-09-17 19:58   ` Shankar, Uma
2020-07-17 21:13 ` [Intel-gfx] [PATCH 09/20] drm/i915: Read out CHV CGM degamma Ville Syrjala
2020-09-17 20:06   ` Shankar, Uma
2020-07-17 21:13 ` [Intel-gfx] [PATCH 10/20] drm/i915: Add gamma/degamma readout for bdw+ Ville Syrjala
2020-09-17 20:15   ` Shankar, Uma
2020-07-17 21:13 ` [Intel-gfx] [PATCH 11/20] drm/i915: Do degamma+gamma readout in bdw+ split gamma mode Ville Syrjala
2020-09-17 20:40   ` Shankar, Uma
2020-07-17 21:13 ` [Intel-gfx] [PATCH 12/20] drm/i915: Polish bdw_read_lut_10() a bit Ville Syrjala
2020-09-17 20:43   ` Shankar, Uma
2020-07-17 21:13 ` [Intel-gfx] [PATCH 13/20] drm/i915: Add gamma/degamm readout for ivb/hsw Ville Syrjala
2020-09-17 20:46   ` Shankar, Uma
2020-07-17 21:13 ` [Intel-gfx] [PATCH 14/20] drm/i915: Replace some gamma_mode ifs with switches Ville Syrjala
2020-09-17 20:52   ` Shankar, Uma
2020-07-17 21:13 ` [Intel-gfx] [PATCH 15/20] drm/i915: Make ilk_load_luts() deal with degamma Ville Syrjala
2020-09-17 20:56   ` Shankar, Uma
2020-07-17 21:13 ` [Intel-gfx] [PATCH 16/20] drm/i915: Make ilk_read_luts() capable of degamma readout Ville Syrjala
2020-09-17 20:58   ` Shankar, Uma
2020-07-17 21:13 ` [Intel-gfx] [PATCH 17/20] drm/i915: Make .read_luts() mandatory Ville Syrjala
2020-09-17 21:00   ` Shankar, Uma
2020-07-17 21:13 ` [Intel-gfx] [PATCH 18/20] drm/i915: Extract ilk_crtc_has_gamma() & co Ville Syrjala
2020-09-17 21:03   ` Shankar, Uma
2020-07-17 21:13 ` [Intel-gfx] [PATCH 19/20] drm/i915: Complete the gamma/degamma state checking Ville Syrjala
2020-09-17 21:52   ` Shankar, Uma
2020-07-17 21:13 ` Ville Syrjala [this message]
2020-09-21 19:40   ` [Intel-gfx] [PATCH 20/20] drm/i915: Add 10bit gamma mode for gen2/3 Shankar, Uma
2020-07-17 21:21 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for drm/i915: Finish (de)gamma readout Patchwork
2020-07-17 21:43 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2020-07-17 22:46 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200717211345.26851-21-ville.syrjala@linux.intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.