All of lore.kernel.org
 help / color / mirror / Atom feed
From: Shashank Sharma <shashank.sharma@intel.com>
To: dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	emil.l.velikov@gmail.com, matthew.d.roper@intel.com,
	robert.bradford@intel.com, jim.bish@intel.com
Cc: annie.j.matheson@intel.com, avinash.reddy.palleti@intel.com,
	indranil.mukherjee@intel.com, kausalmalladi@gmail.com,
	gary.k.smith@intel.com, daniel.vetter@intel.com,
	kiran.s.kumar@intel.com
Subject: [PATCH v6 13/23] drm/i915: CHV: Pipe level Gamma correction
Date: Fri, 16 Oct 2015 19:59:01 +0530	[thread overview]
Message-ID: <1445005751-14918-14-git-send-email-shashank.sharma@intel.com> (raw)
In-Reply-To: <1445005751-14918-1-git-send-email-shashank.sharma@intel.com>

CHV/BSW platform supports two different pipe level gamma
correction modes, which are:
1. Legacy 8-bit mode
2. 10-bit CGM (Color Gamut Mapping) mode

This patch does the following:
1. Attaches Gamma property to CRTC
3. Adds the core Gamma correction function for CHV/BSW
4. Adds Gamma correction macros

Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
Signed-off-by: Kausal Malladi <kausalmalladi@gmail.com>
---
 drivers/gpu/drm/i915/i915_reg.h            | 12 ++++
 drivers/gpu/drm/i915/intel_color_manager.c | 94 ++++++++++++++++++++++++++++++
 drivers/gpu/drm/i915/intel_color_manager.h | 13 +++++
 3 files changed, 119 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 9ebf032..45ddd84 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -8148,4 +8148,16 @@ enum skl_disp_power_wells {
 #define GEN9_VEBOX_MOCS_0	0xcb00	/* Video MOCS base register*/
 #define GEN9_BLT_MOCS_0		0xcc00	/* Blitter MOCS base register*/
 
+/* Color Management */
+#define PIPEA_CGM_CONTROL			(VLV_DISPLAY_BASE + 0x67A00)
+#define PIPEB_CGM_CONTROL			(VLV_DISPLAY_BASE + 0x69A00)
+#define PIPEC_CGM_CONTROL			(VLV_DISPLAY_BASE + 0x6BA00)
+#define PIPEA_CGM_GAMMA			(VLV_DISPLAY_BASE + 0x67000)
+#define PIPEB_CGM_GAMMA			(VLV_DISPLAY_BASE + 0x69000)
+#define PIPEC_CGM_GAMMA			(VLV_DISPLAY_BASE + 0x6B000)
+#define _PIPE_CGM_CONTROL(pipe) \
+	(_PIPE3(pipe, PIPEA_CGM_CONTROL, PIPEB_CGM_CONTROL, PIPEC_CGM_CONTROL))
+#define _PIPE_GAMMA_BASE(pipe) \
+	(_PIPE3(pipe, PIPEA_CGM_GAMMA, PIPEB_CGM_GAMMA, PIPEC_CGM_GAMMA))
+
 #endif /* _I915_REG_H_ */
diff --git a/drivers/gpu/drm/i915/intel_color_manager.c b/drivers/gpu/drm/i915/intel_color_manager.c
index 334bfff..acb9647 100644
--- a/drivers/gpu/drm/i915/intel_color_manager.c
+++ b/drivers/gpu/drm/i915/intel_color_manager.c
@@ -27,6 +27,92 @@
 
 #include "intel_color_manager.h"
 
+static int chv_set_gamma(struct drm_device *dev, struct drm_property_blob *blob,
+		struct drm_crtc *crtc)
+{
+	enum pipe pipe;
+	u16 red_fract, green_fract, blue_fract;
+	u32 red, green, blue, num_samples;
+	u32 word = 0;
+	u32 count, cgm_gamma_reg, cgm_control_reg;
+	struct drm_r32g32b32 *correction_values;
+	struct drm_palette *gamma_data;
+	struct drm_i915_private *dev_priv = dev->dev_private;
+	struct drm_crtc_state *state = crtc->state;
+
+	if (WARN_ON(!blob))
+		return -EINVAL;
+
+	gamma_data = (struct drm_palette *)blob->data;
+	pipe = to_intel_crtc(crtc)->pipe;
+	num_samples = blob->length / sizeof(struct drm_r32g32b32);
+
+	switch (num_samples) {
+	case GAMMA_DISABLE_VALS:
+
+		/* Disable Gamma functionality on Pipe - CGM Block */
+		cgm_control_reg = I915_READ(_PIPE_CGM_CONTROL(pipe));
+		cgm_control_reg &= ~CGM_GAMMA_EN;
+		I915_WRITE(_PIPE_CGM_CONTROL(pipe), cgm_control_reg);
+		state->palette_after_ctm_blob = NULL;
+		DRM_DEBUG_DRIVER("Gamma disabled on Pipe %c\n",
+			pipe_name(pipe));
+		return 0;
+
+	case CHV_8BIT_GAMMA_MAX_VALS:
+	case CHV_10BIT_GAMMA_MAX_VALS:
+
+		count = 0;
+		cgm_gamma_reg = _PIPE_GAMMA_BASE(pipe);
+		correction_values = gamma_data->lut;
+
+		while (count < num_samples) {
+			blue = correction_values[count].b32;
+			green = correction_values[count].g32;
+			red = correction_values[count].r32;
+
+			if (blue > CHV_MAX_GAMMA)
+				blue = CHV_MAX_GAMMA;
+
+			if (green > CHV_MAX_GAMMA)
+				green = CHV_MAX_GAMMA;
+
+			if (red > CHV_MAX_GAMMA)
+				red = CHV_MAX_GAMMA;
+
+			/* get MSB 10 bits from fraction part (14:23) */
+			blue_fract = GET_BITS(blue, 14, 10);
+			green_fract = GET_BITS(green, 14, 10);
+			red_fract = GET_BITS(red, 14, 10);
+
+			/* Green (25:16) and Blue (9:0) to be written */
+			SET_BITS(word, green_fract, 16, 10);
+			SET_BITS(word, blue_fract, 0, 10);
+			I915_WRITE(cgm_gamma_reg, word);
+			cgm_gamma_reg += 4;
+
+			/* Red (9:0) to be written */
+			word = red_fract;
+			I915_WRITE(cgm_gamma_reg, word);
+
+			cgm_gamma_reg += 4;
+			count++;
+		}
+
+		/* Enable (CGM) Gamma on Pipe */
+		I915_WRITE(_PIPE_CGM_CONTROL(pipe),
+		I915_READ(_PIPE_CGM_CONTROL(pipe)) | CGM_GAMMA_EN);
+		DRM_DEBUG_DRIVER("CGM Gamma enabled on Pipe %c\n",
+			pipe_name(pipe));
+		return 0;
+
+	default:
+		DRM_ERROR("Invalid number of samples (%u) for Gamma LUT\n",
+				num_samples);
+		return -EINVAL;
+	}
+}
+
 void intel_attach_color_properties_to_crtc(struct drm_device *dev,
 		struct drm_crtc *crtc)
 {
@@ -61,4 +147,12 @@ void intel_attach_color_properties_to_crtc(struct drm_device *dev,
 		INTEL_INFO(dev)->num_samples_before_ctm);
 		DRM_DEBUG_DRIVER("Degamma query property initialized\n");
 	}
+
+	/* Gamma correction */
+	if (config->cm_palette_after_ctm_property) {
+		drm_object_attach_property(mode_obj,
+			config->cm_palette_after_ctm_property, 0);
+		DRM_DEBUG_DRIVER("gamma property attached to CRTC\n");
+	}
+
 }
diff --git a/drivers/gpu/drm/i915/intel_color_manager.h b/drivers/gpu/drm/i915/intel_color_manager.h
index 14a1309..de706d9 100644
--- a/drivers/gpu/drm/i915/intel_color_manager.h
+++ b/drivers/gpu/drm/i915/intel_color_manager.h
@@ -52,3 +52,16 @@
 /* CHV */
 #define CHV_10BIT_GAMMA_MAX_VALS		257
 #define CHV_DEGAMMA_MAX_VALS                   65
+
+/* No of coeff for disabling gamma is 0 */
+#define GAMMA_DISABLE_VALS			0
+
+/* Gamma on CHV */
+#define CHV_10BIT_GAMMA_MAX_VALS               257
+#define CHV_8BIT_GAMMA_MAX_VALS                256
+#define CHV_10BIT_GAMMA_MSB_SHIFT              6
+#define CHV_GAMMA_SHIFT_GREEN                  16
+#define CHV_MAX_GAMMA                          ((1 << 24) - 1)
+
+/* CHV CGM Block */
+#define CGM_GAMMA_EN                           (1 << 2)
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

  parent reply	other threads:[~2015-10-16 14:29 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-16 14:28 [PATCH v6 00/23] Color Management for DRM framework Shashank Sharma
2015-10-16 14:28 ` [PATCH v6 01/23] drm: Create Color Management DRM properties Shashank Sharma
2015-10-16 14:28 ` [PATCH v6 02/23] drm: Create Color Management query properties Shashank Sharma
2015-10-16 14:28 ` [PATCH v6 03/23] drm: Add color correction blobs in CRTC state Shashank Sharma
2015-10-16 14:28 ` [PATCH v6 04/23] drm: Add set property support for color manager Shashank Sharma
2015-10-16 14:28 ` [PATCH v6 05/23] drm: Add get " Shashank Sharma
2015-10-16 14:28 ` [PATCH v6 06/23] drm: Add drm structures for palette color property Shashank Sharma
2015-10-16 14:28 ` [PATCH v6 07/23] drm: Add structure for CTM " Shashank Sharma
2015-10-16 14:28 ` [PATCH v6 08/23] drm/i915: Add set property interface for CRTC Shashank Sharma
2015-10-16 14:28 ` [PATCH v6 09/23] drm/i915: Create color management files Shashank Sharma
2015-10-16 14:28 ` [PATCH v6 10/23] drm/i915: Register color correction capabilities Shashank Sharma
2015-10-16 14:28 ` [PATCH v6 11/23] drm/i915: CHV: Load gamma color correction values Shashank Sharma
2015-10-16 14:29 ` [PATCH v6 12/23] drm/i915: CHV: Load degamma " Shashank Sharma
2015-10-16 14:29 ` Shashank Sharma [this message]
2015-10-16 14:29 ` [PATCH v6 14/23] drm/i915: CHV: Pipe level degamma correction Shashank Sharma
2015-10-19 18:08   ` Smith, Gary K
2015-10-19 18:54     ` Daniel Vetter
2015-10-19 20:39       ` Bish, Jim
2015-10-19 21:57         ` [Intel-gfx] " Daniel Vetter
2015-10-19 22:23           ` Smith, Gary K
2015-10-19 22:27             ` Smith, Gary K
2015-10-19 23:48               ` [Intel-gfx] " Matheson, Annie J
2015-10-20  4:09                 ` Sharma, Shashank
2015-10-20  7:27               ` Daniel Vetter
2015-10-20  8:15                 ` [Intel-gfx] " Sharma, Shashank
2015-10-20 12:11                 ` Sharma, Shashank
2015-10-16 14:29 ` [PATCH v6 15/23] drm/i915: CHV: Pipe level CSC correction Shashank Sharma
2015-10-16 14:29 ` [PATCH v6 16/23] drm/i915: Commit color correction to CRTC Shashank Sharma
2015-10-16 14:29 ` [PATCH v6 17/23] drm/i915: Attach color properties " Shashank Sharma
2015-10-16 14:29 ` [PATCH v6 18/23] drm/i915: BDW: Load gamma correction values Shashank Sharma
2015-10-16 14:29 ` [PATCH v6 19/23] drm/i915: BDW: Pipe level Gamma correction Shashank Sharma
2015-10-16 14:29 ` [PATCH v6 20/23] drm/i915: BDW: Load degamma correction values Shashank Sharma
2015-10-16 14:29 ` [PATCH v6 21/23] drm/i915: BDW: Pipe level degamma correction Shashank Sharma
2015-10-16 14:29 ` [PATCH v6 22/23] drm/i915: BDW: Pipe level CSC correction Shashank Sharma
2015-10-16 14:29 ` [PATCH v6 23/23] drm/i915: disable plane gamma Shashank Sharma

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=1445005751-14918-14-git-send-email-shashank.sharma@intel.com \
    --to=shashank.sharma@intel.com \
    --cc=annie.j.matheson@intel.com \
    --cc=avinash.reddy.palleti@intel.com \
    --cc=daniel.vetter@intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=emil.l.velikov@gmail.com \
    --cc=gary.k.smith@intel.com \
    --cc=indranil.mukherjee@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jim.bish@intel.com \
    --cc=kausalmalladi@gmail.com \
    --cc=kiran.s.kumar@intel.com \
    --cc=matthew.d.roper@intel.com \
    --cc=robert.bradford@intel.com \
    /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.