From: "Sharma, Shashank" <shashank.sharma@intel.com>
To: Rob Bradford <robert.bradford@intel.com>,
dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
jim.bish@intel.com, matthew.d.roper@intel.com,
daniel.vetter@intel.com
Cc: annie.j.matheson@intel.com, avinash.reddy.palleti@intel.com,
indranil.mukherjee@intel.com, kausalmalladi@gmail.com,
jesse.barnes@intel.com, gary.k.smith@intel.com,
kiran.s.kumar@intel.com
Subject: Re: [PATCH 21/22] drm/i915: BDW: Pipe level degamma correction
Date: Tue, 13 Oct 2015 16:21:14 +0530 [thread overview]
Message-ID: <561CE222.3090709@intel.com> (raw)
In-Reply-To: <1444673322.1331.78.camel@intel.com>
Thanks for the review Rob.
Regards
Shashank
On 10/12/2015 11:38 PM, Rob Bradford wrote:
> On Sat, 2015-10-10 at 00:59 +0530, Shashank Sharma wrote:
>> BDW/SKL/BXT supports Degamma color correction feature, which
>> linearizes the non-linearity due to gamma encoded color values.
>> This will be applied before Color Transformation.
>>
>> This patch does the following:
>> 1. Adds the core function to program DeGamma correction values for
>> BDW/SKL/BXT platform
>> 2. Adds DeGamma correction macros/defines
>>
>> Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
>> Signed-off-by: Kausal Malladi <kausalmalladi@gmail.com>
>> ---
>> drivers/gpu/drm/i915/intel_color_manager.c | 59
>> ++++++++++++++++++++++++++++++
>> 1 file changed, 59 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_color_manager.c
>> b/drivers/gpu/drm/i915/intel_color_manager.c
>> index 74f8fc3..e659382 100644
>> --- a/drivers/gpu/drm/i915/intel_color_manager.c
>> +++ b/drivers/gpu/drm/i915/intel_color_manager.c
>> @@ -273,6 +273,63 @@ static int bdw_set_gamma(struct drm_device *dev,
>> struct drm_property_blob *blob,
>> return 0;
>> }
>>
>> +static int bdw_set_degamma(struct drm_device *dev,
>> + struct drm_property_blob *blob, struct drm_crtc *crtc)
>> +{
>> + enum pipe pipe;
>> + int num_samples, length;
>> + u32 index, mode;
>> + u32 pal_prec_index, pal_prec_data;
>> + struct drm_palette *degamma_data;
>> + struct drm_crtc_state *state = crtc->state;
>> + struct drm_i915_private *dev_priv = dev->dev_private;
>> + struct drm_r32g32b32 *correction_values = NULL;
>> +
>> + if (WARN_ON(!blob))
>> + return -EINVAL;
>> +
>> + degamma_data = (struct drm_palette *)blob->data;
>> + pipe = to_intel_crtc(crtc)->pipe;
>> + num_samples = degamma_data->num_samples;
>> +
>> + if (num_samples == GAMMA_DISABLE_VALS) {
>> + /* Disable degamma on Pipe */
>> + mode = I915_READ(GAMMA_MODE(pipe)) &
>> ~GAMMA_MODE_MODE_MASK;
>> + I915_WRITE(GAMMA_MODE(pipe), mode |
>> GAMMA_MODE_MODE_8BIT);
>
> When you turn off gamma you call bdw_reset_gamma() should you do the
> same for degamma?
>
No, we tested this part, its not required, its only required for 12 bit
gamma.
>> +
>> + state->palette_before_ctm_blob = NULL;
>> + DRM_DEBUG_DRIVER("Disabling degamma on Pipe %c\n",
>> + pipe_name(pipe));
>> + return 0;
>> + }
>> +
>> + if (num_samples != BDW_SPLITGAMMA_MAX_VALS) {
>> + DRM_ERROR("Invalid number of samples\n");
>> + return -EINVAL;
>> + }
>> +
>> + length = num_samples * sizeof(struct drm_r32g32b32);
>
> Uh, you calculate this length and don't use it anywhere? Was your
> intention to check the blob length? And the length check should be in
> the generic DRM code anyway...
>
Yes, this was left over from the previous patch set, will remove this.
> I think it was suggested in the past that the number of samples could
> be derived from the length of the data allowing the removal of the
> struct member.
>
Right now, its better to have the no of samples coming from userspace.
As the platform is under development, its good to have this control
available so that userspace will be clear on what it wants to do, I have
added this in my to do list, when we are sure that we dont need it, we
will remove and optimize it.
>> + mode = I915_READ(GAMMA_MODE(pipe));
>
> Move this closer to where you use it?
>
Agree.
>> + pal_prec_index = _PREC_PAL_INDEX(pipe);
>> + pal_prec_data = _PREC_PAL_DATA(pipe);
>> +
>> + correction_values = (struct drm_r32g32b32 *)°amma_data
>> ->lut;
>
> Why do you need this cast?
>
Not required, agree, will remove.
>> + index = I915_READ(pal_prec_index);
>> + index |= BDW_INDEX_AUTO_INCREMENT | BDW_INDEX_SPLIT_MODE;
>> + I915_WRITE(pal_prec_index, index);
>> +
>> + bdw_write_10bit_gamma_precision(dev, correction_values,
>> + pal_prec_data, BDW_SPLITGAMMA_MAX_VALS);
>> +
>> + /* Enable DeGamma on Pipe */
>> + mode &= ~GAMMA_MODE_MODE_MASK;
>> + I915_WRITE(GAMMA_MODE(pipe), mode | GAMMA_MODE_MODE_SPLIT);
>> + DRM_DEBUG_DRIVER("DeGamma correction enabled on Pipe %c\n",
>
> Choose your capitalisation DeGamma or degamma. Pick one and use it
> consistently to make it easier to grep through the code.
>
Will stick with degamma now.
> It also looks like you should check if the gamma mode is not something
> other than split / off. Otherwise strange things could happen.
> Similarly in the gamma code you shouldn't be able to program something
> other than split if you have a degamma mode set.
>
We discussed this in the design phase itself. This decision has to go to
userspcae only, whom should know, what its doing. There are various
permutation and combinations possbile which make kernel code unnecessary
complex. Kernel will just follow what is being requested from usp.
>> + pipe_name(pipe));
>> +
>> + return 0;
>> +}
>> +
>> static s16 chv_prepare_csc_coeff(s64 csc_value)
>> {
>> s32 csc_int_value;
>> @@ -579,6 +636,8 @@ void intel_color_manager_crtc_commit(struct
>> drm_device *dev,
>> /* Degamma correction */
>> if (IS_CHERRYVIEW(dev))
>> ret = chv_set_degamma(dev, blob, crtc);
>> + else if (IS_BROADWELL(dev) || IS_GEN9(dev))
>> + ret = bdw_set_degamma(dev, blob, crtc);
>>
>> if (ret)
>> DRM_ERROR("set degamma correction
>> failed\n");
>
> Rob
>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2015-10-13 10:51 UTC|newest]
Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-09 19:28 [PATCH 00/22] Color Management for DRM Shashank Sharma
2015-10-09 19:28 ` [PATCH 01/22] drm: Create Color Management DRM properties Shashank Sharma
2015-10-09 19:48 ` kbuild test robot
2015-10-09 19:28 ` [PATCH 02/22] drm: Create Color Management query properties Shashank Sharma
2015-10-09 20:05 ` [Intel-gfx] " kbuild test robot
2015-10-09 19:28 ` [PATCH 03/22] drm: Add color correction blobs in CRTC state Shashank Sharma
2015-10-09 20:21 ` kbuild test robot
2015-10-09 22:23 ` Emil Velikov
2015-10-10 4:48 ` Sharma, Shashank
2015-10-09 19:28 ` [PATCH 04/22] drm: Add set property support for color manager Shashank Sharma
2015-10-09 20:39 ` kbuild test robot
2015-10-09 22:25 ` Emil Velikov
2015-10-10 4:50 ` Sharma, Shashank
2015-10-09 19:28 ` [PATCH 05/22] drm: Add get " Shashank Sharma
2015-10-09 19:28 ` [PATCH 06/22] drm: Add drm structures for palette color property Shashank Sharma
2015-10-09 19:28 ` [PATCH 07/22] drm: Add structure to set/get a CTM " Shashank Sharma
2015-10-09 19:28 ` [PATCH 08/22] drm/i915: Add set property interface for CRTC Shashank Sharma
2015-10-09 19:28 ` [PATCH 09/22] drm/i915: Create color management files Shashank Sharma
2015-10-09 22:47 ` Emil Velikov
2015-10-10 4:55 ` Sharma, Shashank
2015-10-13 12:59 ` Emil Velikov
2015-10-13 13:33 ` Sharma, Shashank
2015-10-09 19:29 ` [PATCH 10/22] drm/i915: Register color correction capabilities Shashank Sharma
2015-10-09 22:21 ` Emil Velikov
2015-10-10 5:01 ` Sharma, Shashank
2015-10-13 13:03 ` Emil Velikov
2015-10-13 13:36 ` Sharma, Shashank
2015-10-13 13:53 ` Emil Velikov
2015-10-13 14:01 ` Sharma, Shashank
2015-10-09 19:29 ` [PATCH 11/22] drm/i915: CHV: Load gamma color correction values Shashank Sharma
2015-10-09 19:29 ` [PATCH 12/22] drm/i915: CHV: Load degamma " Shashank Sharma
2015-10-09 19:29 ` [PATCH 13/22] drm/i915: CHV: Pipe level Gamma correction Shashank Sharma
2015-10-09 23:07 ` Emil Velikov
2015-10-10 5:09 ` Sharma, Shashank
2015-10-13 13:08 ` Emil Velikov
2015-10-13 13:40 ` Sharma, Shashank
2015-10-13 13:59 ` Emil Velikov
2015-10-13 14:04 ` Sharma, Shashank
2015-10-09 19:29 ` [PATCH 14/22] drm/i915: CHV: Pipe level degamma correction Shashank Sharma
2015-10-09 23:11 ` Emil Velikov
2015-10-10 5:13 ` Sharma, Shashank
2015-10-09 19:29 ` [PATCH 15/22] drm/i915: CHV: Pipe level CSC correction Shashank Sharma
2015-10-09 23:43 ` Emil Velikov
2015-10-10 5:26 ` Sharma, Shashank
2015-10-13 13:33 ` Emil Velikov
2015-10-13 13:49 ` Sharma, Shashank
2015-10-09 19:29 ` [PATCH 16/22] drm/i915: Commit color correction to CRTC Shashank Sharma
2015-10-09 23:24 ` Emil Velikov
2015-10-10 5:20 ` Sharma, Shashank
2015-10-13 13:17 ` Emil Velikov
2015-10-13 13:44 ` Sharma, Shashank
2015-10-09 19:29 ` [PATCH 17/22] drm/i915: Attach color properties " Shashank Sharma
2015-10-09 23:45 ` Emil Velikov
2015-10-10 5:28 ` Sharma, Shashank
2015-10-09 19:29 ` [PATCH 18/22] drm/i915: BDW: Load gamma correction values Shashank Sharma
2015-10-09 19:29 ` [PATCH 19/22] drm/i915: BDW: Pipe level Gamma correction Shashank Sharma
2015-10-09 23:39 ` Emil Velikov
2015-10-10 5:21 ` Sharma, Shashank
2015-10-13 13:23 ` Emil Velikov
2015-10-13 13:46 ` Sharma, Shashank
2015-10-12 18:09 ` Rob Bradford
2015-10-13 10:56 ` Sharma, Shashank
2015-10-09 19:29 ` [PATCH 20/22] drm/i915: BDW: Load degamma correction values Shashank Sharma
2015-10-12 18:13 ` Rob Bradford
2015-10-13 10:59 ` Sharma, Shashank
2015-10-09 19:29 ` [PATCH 21/22] drm/i915: BDW: Pipe level degamma correction Shashank Sharma
2015-10-09 23:49 ` Emil Velikov
2015-10-10 5:31 ` Sharma, Shashank
2015-10-13 13:39 ` Emil Velikov
2015-10-12 18:08 ` Rob Bradford
2015-10-13 10:51 ` Sharma, Shashank [this message]
2015-10-09 19:29 ` [PATCH 22/22] drm/i915: BDW: Pipe level CSC correction Shashank Sharma
2015-10-09 23:54 ` Emil Velikov
2015-10-10 5:34 ` Sharma, Shashank
2015-10-13 13:45 ` Emil Velikov
2015-10-13 13:52 ` Sharma, Shashank
2015-10-12 16:49 ` Rob Bradford
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=561CE222.3090709@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=gary.k.smith@intel.com \
--cc=indranil.mukherjee@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=jesse.barnes@intel.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox