From: Sean Paul <seanpaul@chromium.org>
To: Daniele Castagna <dcastagna@chromium.org>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 09/10] drm/rockchip: Implement drm plane->ctm property.
Date: Tue, 27 Feb 2018 11:09:49 -0500 [thread overview]
Message-ID: <20180227160949.GI223881@art_vandelay> (raw)
In-Reply-To: <20180215053300.70482-10-dcastagna@chromium.org>
On Thu, Feb 15, 2018 at 12:32:59AM -0500, Daniele Castagna wrote:
> Validate drm PLANE_CTM matrix and map it to YUV2YUV registers.
>
> Change-Id: Ib4fe49558c6266bf0c310af121d625cd7b2cedf6
Missing Signed-off-by
> ---
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 45 +++++++++++++++++++++
> 1 file changed, 45 insertions(+)
>
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> index ea43ab797f555..8c8118c3db308 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> @@ -656,6 +656,7 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *fb = state->fb;
> struct vop_win *vop_win = to_vop_win(plane);
> const struct vop_win_data *win = vop_win->data;
> + int i;
> int ret;
> struct drm_rect clip;
> int min_scale = win->phy->scl ? FRAC_16_16(1, 8) :
> @@ -697,6 +698,25 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
> return -EINVAL;
> }
>
> + if (state->ctm) {
> + struct drm_color_ctm* color_ctm = (struct drm_color_ctm*)state->ctm->data;
> + if (state->ctm->length != sizeof(struct drm_color_ctm)) {
> + DRM_ERROR("Invalid PLANE_CTM blob size.\n");
> + return -EINVAL;
> + }
> +
> + for (i = 0; i < 9; i++) {
s/9/ARRAY_SIZE(color_ctm->matrix)/
> + /*
> + * YUV2YUV R2R registers have a signed fixed point S2.10 format.
> + * The input values, that are in signed fixed point S31.32 format,
> + * can be converted only if the first 30 MSBs are all 1s or 0s.
> + */
> + uint32_t msbs = (uint32_t) (color_ctm->matrix[i] >> 34);
The behavior of a negative value shift is implementation-defined, so probably
best not to use it.
You could do:
uint64_t mask = GENMASK_ULL(63, 34);
uint64_t msbs = (uint64_t)color_ctm->matrix[i] & mask;
if (msbs == 0 || msbs == mask)
> + if (msbs != ~0u && msbs != 0)
> + return -EOVERFLOW;
Indent is off here.
> + }
> + }
> +
> return 0;
> }
>
> @@ -816,6 +836,31 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
> }
> }
>
> + if (!win_index) {
> + VOP_YUV2YUV_SET(vop, win0_r2r_en, !!state->ctm);
> + } else if (win_index == 1) {
> + VOP_YUV2YUV_SET(vop, win1_r2r_en, !!state->ctm);
> + } else if (win_index == 2) {
> + VOP_YUV2YUV_SET(vop, win2_r2r_en, !!state->ctm);
> + }
> + if (state->ctm) {
> + struct drm_color_ctm* color_ctm = (struct drm_color_ctm*)state->ctm->data;
> + /*
Indent is messed up here too
> + * Convert matrix values from fixed point S31.32 to S2.10, by discarding
> + * the lowest 22 bits.
> + */
> + for (i = 0; i < 9; i++) {
> + uint32_t value = (color_ctm->matrix[i] >> 22) & 0x1FFF;
Same comment regarding the shift here, best to cast and mask before shifting.
> + if (!win_index) {
> + VOP_YUV2YUV_SET(vop, win0_r2r_coefficients[i], value);
> + } else if (win_index == 1){
> + VOP_YUV2YUV_SET(vop, win1_r2r_coefficients[i], value);
> + } else if (win_index == 2) {
> + VOP_YUV2YUV_SET(vop, win2_r2r_coefficients[i], value);
> + }
> + }
> + }
> +
> if (win->phy->scl)
> scl_vop_cal_scl_fac(vop, win, actual_w, actual_h,
> drm_rect_width(dest), drm_rect_height(dest),
> --
> 2.16.1.291.g4437f3f132-goog
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Sean Paul, Software Engineer, Google / Chromium OS
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2018-02-27 16:09 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-15 5:32 [PATCH 00/10] drm: Add plane color matrix on rockchip Daniele Castagna
2018-02-15 5:32 ` [PATCH 01/10] drm/rockchip: YUV overlays BT.601 color conversion Daniele Castagna
2018-02-16 17:55 ` kbuild test robot
2018-02-27 15:03 ` Sean Paul
2018-12-14 16:29 ` [PATCH v2] drm/rockchip: Fix YUV buffers color rendering Ezequiel Garcia
2019-01-03 16:28 ` Ezequiel Garcia
2019-01-07 13:26 ` Heiko Stuebner
2019-01-07 20:07 ` Ezequiel Garcia
2019-01-08 17:17 ` Ezequiel Garcia
2019-01-08 21:46 ` [PATCH v3] " Ezequiel Garcia
2019-01-10 22:55 ` Heiko Stuebner
2018-02-15 5:32 ` [PATCH 02/10] drm: Add Plane Degamma properties Daniele Castagna
2018-02-16 19:38 ` kbuild test robot
2018-02-19 15:15 ` Daniel Vetter
2018-02-27 15:13 ` Sean Paul
2018-02-28 14:54 ` Shankar, Uma
2018-02-15 5:32 ` [PATCH 03/10] drm: Add Plane CTM property Daniele Castagna
2018-02-27 15:22 ` Sean Paul
2018-02-28 14:55 ` Shankar, Uma
2018-02-15 5:32 ` [PATCH 04/10] drm: Add Plane Gamma properties Daniele Castagna
2018-02-15 19:29 ` Harry Wentland
2018-02-15 19:45 ` Daniele Castagna
2018-02-16 20:10 ` Ville Syrjälä
2018-02-16 21:36 ` Harry Wentland
2018-02-18 6:43 ` Shankar, Uma
2018-02-19 15:14 ` Daniel Vetter
2018-02-27 15:26 ` Sean Paul
2018-02-27 16:52 ` Ville Syrjälä
2018-02-15 5:32 ` [PATCH 05/10] drm: Define helper function for plane color enabling Daniele Castagna
2018-02-27 15:28 ` Sean Paul
2018-02-28 14:57 ` Shankar, Uma
2018-02-15 5:32 ` [PATCH 06/10] drm: Define helper to set legacy gamma table size Daniele Castagna
2018-02-16 22:17 ` kbuild test robot
2018-02-27 15:35 ` Sean Paul
2018-02-27 16:20 ` Emil Velikov
2018-02-15 5:32 ` [PATCH 07/10] drm/rockchip: Add yuv2yuv registers to vop_lit Daniele Castagna
2018-02-27 15:36 ` Sean Paul
2018-02-15 5:32 ` [PATCH 08/10] drm/rockchip: Add R2R registers Daniele Castagna
2018-02-27 15:41 ` Sean Paul
2018-02-15 5:32 ` [PATCH 09/10] drm/rockchip: Implement drm plane->ctm property Daniele Castagna
2018-02-27 16:09 ` Sean Paul [this message]
2018-02-15 5:33 ` [PATCH 10/10] drm/rockchip: Enable 'PLANE_CTM' drm property Daniele Castagna
2018-02-27 16:10 ` Sean Paul
2018-02-19 15:16 ` [PATCH 00/10] drm: Add plane color matrix on rockchip Daniel Vetter
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=20180227160949.GI223881@art_vandelay \
--to=seanpaul@chromium.org \
--cc=dcastagna@chromium.org \
--cc=dri-devel@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox