mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Thierry Escande <thierry.escande@collabora.com>
To: Archit Taneja <architt@codeaurora.org>,
	Inki Dae <inki.dae@samsung.com>,
	Thierry Reding <thierry.reding@gmail.com>,
	Sandy Huang <hjc@rock-chips.com>,
	Sean Paul <seanpaul@chromium.org>,
	David Airlie <airlied@linux.ie>, Tomasz Figa <tfiga@chromium.org>,
	Enric Balletbo i Serra <enric.balletbo@collabora.com>
Cc: "Haixia Shi" <hshi@chromium.org>,
	"Ørjan Eide" <orjan.eide@arm.com>,
	"Zain Wang" <wzz@rock-chips.com>,
	"Yakir Yang" <ykk@rock-chips.com>,
	"Lin Huang" <hl@rock-chips.com>,
	"Douglas Anderson" <dianders@chromium.org>,
	"Mark Yao" <mark.yao@rock-chips.com>,
	linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org,
	dri-devel@lists.freedesktop.org
Subject: [PATCH v3 34/43] drm/rockchip: pre dither down when output bpc is 8bit
Date: Tue, 30 Jan 2018 21:29:04 +0100	[thread overview]
Message-ID: <20180130202913.28724-35-thierry.escande@collabora.com> (raw)
In-Reply-To: <20180130202913.28724-1-thierry.escande@collabora.com>

From: Mark Yao <mark.yao@rock-chips.com>

Some encoder have a crc verification check, crc check fail if
input and output data is not equal.

That means encoder input and output need use same color depth,
vop can output 10bit data to encoder, but some panel only support
8bit depth, that would make crc check die.

So pre dither down vop data to 8bit if panel's bpc is 8.

Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
[seanpaul resolved conflict in rockchip_drm_vop.c]
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Signed-off-by: Thierry Escande <thierry.escande@collabora.com>
---
 drivers/gpu/drm/rockchip/analogix_dp-rockchip.c | 2 ++
 drivers/gpu/drm/rockchip/rockchip_drm_drv.h     | 1 +
 drivers/gpu/drm/rockchip/rockchip_drm_vop.c     | 6 ++++++
 drivers/gpu/drm/rockchip/rockchip_drm_vop.h     | 1 +
 drivers/gpu/drm/rockchip/rockchip_vop_reg.c     | 1 +
 5 files changed, 11 insertions(+)

diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
index 8c884f9ce713..b3f46ed24cdc 100644
--- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
+++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
@@ -218,6 +218,7 @@ rockchip_dp_drm_encoder_atomic_check(struct drm_encoder *encoder,
 				      struct drm_connector_state *conn_state)
 {
 	struct rockchip_crtc_state *s = to_rockchip_crtc_state(crtc_state);
+	struct drm_display_info *di = &conn_state->connector->display_info;
 
 	/*
 	 * The hardware IC designed that VOP must output the RGB10 video
@@ -229,6 +230,7 @@ rockchip_dp_drm_encoder_atomic_check(struct drm_encoder *encoder,
 
 	s->output_mode = ROCKCHIP_OUT_MODE_AAAA;
 	s->output_type = DRM_MODE_CONNECTOR_eDP;
+	s->output_bpc = di->bpc;
 
 	return 0;
 }
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h
index 9c064a40458b..3a6ebfc26036 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h
@@ -36,6 +36,7 @@ struct rockchip_crtc_state {
 	struct drm_crtc_state base;
 	int output_type;
 	int output_mode;
+	int output_bpc;
 };
 #define to_rockchip_crtc_state(s) \
 		container_of(s, struct rockchip_crtc_state, base)
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
index bf4b1a2f3fa4..4abb9d72d814 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
@@ -937,6 +937,12 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
 	if (s->output_mode == ROCKCHIP_OUT_MODE_AAAA &&
 	    !(vop_data->feature & VOP_FEATURE_OUTPUT_RGB10))
 		s->output_mode = ROCKCHIP_OUT_MODE_P888;
+
+	if (s->output_mode == ROCKCHIP_OUT_MODE_AAAA && s->output_bpc == 8)
+		VOP_REG_SET(vop, common, pre_dither_down, 1);
+	else
+		VOP_REG_SET(vop, common, pre_dither_down, 0);
+
 	VOP_REG_SET(vop, common, out_mode, s->output_mode);
 
 	VOP_REG_SET(vop, modeset, htotal_pw, (htotal << 16) | hsync_len);
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
index 56bbd2e2a8ef..084acdd0019a 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
@@ -67,6 +67,7 @@ struct vop_common {
 	struct vop_reg cfg_done;
 	struct vop_reg dsp_blank;
 	struct vop_reg data_blank;
+	struct vop_reg pre_dither_down;
 	struct vop_reg dither_down;
 	struct vop_reg dither_up;
 	struct vop_reg gate_en;
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
index 2e4eea3459fe..08023d3ecb76 100644
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
@@ -264,6 +264,7 @@ static const struct vop_common rk3288_common = {
 	.standby = VOP_REG_SYNC(RK3288_SYS_CTRL, 0x1, 22),
 	.gate_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 23),
 	.mmu_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 20),
+	.pre_dither_down = VOP_REG(RK3288_DSP_CTRL1, 0x1, 1),
 	.dither_down = VOP_REG(RK3288_DSP_CTRL1, 0xf, 1),
 	.dither_up = VOP_REG(RK3288_DSP_CTRL1, 0x1, 6),
 	.data_blank = VOP_REG(RK3288_DSP_CTRL0, 0x1, 19),
-- 
2.14.1

  parent reply	other threads:[~2018-01-30 20:33 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20180131083447epcas3p3633663f2f88e637ffe54ab8307ce5d14@epcas3p3.samsung.com>
2018-01-30 20:28 ` [PATCH v3 00/43] DRM Rockchip rk3399 (Kevin) Thierry Escande
2018-01-30 20:28   ` [PATCH v3 01/43] drm/rockchip: Get rid of unnecessary struct fields Thierry Escande
2018-02-18 10:50     ` Heiko Stuebner
2018-01-30 20:28   ` [PATCH v3 02/43] drm/rockchip: support prime import sg table Thierry Escande
2018-02-18 10:51     ` Heiko Stuebner
2018-01-30 20:28   ` [PATCH v3 03/43] drm/rockchip: Respect page offset for PRIME mmap calls Thierry Escande
2018-02-18 10:53     ` Heiko Stuebner
2018-01-30 20:28   ` [PATCH v3 04/43] drm/bridge: analogix_dp: set psr activate/deactivate when enable/disable bridge Thierry Escande
2018-01-30 20:28   ` [PATCH v3 05/43] drm/bridge: analogix_dp: Don't power bridge in analogix_dp_bind Thierry Escande
2018-02-28 14:37     ` Heiko Stübner
2018-02-28 14:54       ` Marc Zyngier
2018-02-28 14:56         ` Heiko Stübner
2018-02-28 15:20     ` Heiko Stübner
2018-03-01  8:19       ` Marek Szyprowski
2018-03-01 13:37     ` Marek Szyprowski
2018-01-30 20:28   ` [PATCH v3 06/43] drm/rockchip: Don't use atomic constructs for psr Thierry Escande
2018-01-30 20:28   ` [PATCH v3 07/43] drm/bridge: analogix_dp: detect Sink PSR state after configuring the PSR Thierry Escande
2018-01-30 20:28   ` [PATCH v3 08/43] drm/rockchip: Remove analogix psr worker Thierry Escande
2018-01-30 20:28   ` [PATCH v3 09/43] drm/bridge: analogix_dp: Don't change psr while bridge is disabled Thierry Escande
2018-01-30 20:28   ` [PATCH v3 10/43] drm/rockchip: add mutex vop lock Thierry Escande
2018-01-30 20:28   ` [PATCH v3 11/43] drm/bridge: analogix_dp: add fast link train for eDP Thierry Escande
2018-01-30 20:28   ` [PATCH v3 12/43] drm/rockchip: Only wait for panel ACK on PSR entry Thierry Escande
2018-01-30 20:28   ` [PATCH v3 13/43] drm/bridge: analogix_dp: Move enable video into config_video() Thierry Escande
2018-01-30 20:28   ` [PATCH v3 14/43] drm/bridge: analogix_dp: Check AUX_EN status when doing AUX transfer Thierry Escande
2018-01-30 20:28   ` [PATCH v3 15/43] drm/bridge: analogix_dp: Don't use fast link training when panel just powered up Thierry Escande
2018-01-30 20:28   ` [PATCH v3 16/43] drm/bridge: analogix_dp: Retry bridge enable when it failed Thierry Escande
2018-01-30 20:28   ` [PATCH v3 17/43] drm/bridge: analogix_dp: Wait for HPD signal before configuring link Thierry Escande
2018-01-30 20:28   ` [PATCH v3 18/43] drm/bridge: analogix_dp: Set PD_INC_BG first when powering up edp phy Thierry Escande
2018-01-30 20:28   ` [PATCH v3 19/43] drm/bridge: analogix_dp: Ensure edp is disabled when shutting down the panel Thierry Escande
2018-01-30 20:28   ` [PATCH v3 20/43] drm/bridge: analogix_dp: Extend hpd check time to 100ms Thierry Escande
2018-01-30 20:28   ` [PATCH v3 21/43] drm/bridge: analogix_dp: Fix incorrect usage of enhanced mode Thierry Escande
2018-01-30 20:28   ` [PATCH v3 22/43] drm/bridge: analogix_dp: Check dpcd write/read status Thierry Escande
2018-01-30 20:28   ` [PATCH v3 23/43] drm/bridge: analogix_dp: Fix AUX_PD bit for Rockchip Thierry Escande
2018-01-30 20:28   ` [PATCH v3 24/43] drm/bridge: analogix_dp: Reset aux channel if an error occurred Thierry Escande
2018-01-30 20:28   ` [PATCH v3 25/43] drm/rockchip: Restore psr->state when enable/disable psr failed Thierry Escande
2018-01-30 20:28   ` [PATCH v3 26/43] drm/bridge: analogix_dp: Don't use ANALOGIX_DP_PLL_CTL to control pll Thierry Escande
2018-01-30 20:28   ` [PATCH v3 27/43] drm/bridge: analogix_dp: Fix timeout of video streamclk config Thierry Escande
2018-01-30 20:28   ` [PATCH v3 28/43] drm/bridge: analogix_dp: Fix incorrect operations with register ANALOGIX_DP_FUNC_EN_1 Thierry Escande
2018-01-30 20:28   ` [PATCH v3 29/43] drm/bridge: analogix_dp: Move fast link training detect to set_bridge Thierry Escande
2018-01-30 20:29   ` [PATCH v3 30/43] drm/bridge: analogix_dp: Reorder plat_data->power_off to happen sooner Thierry Escande
2018-01-30 20:29   ` [PATCH v3 31/43] drm/bridge: analogix_dp: Properly log AUX CH errors Thierry Escande
2018-01-30 20:29   ` [PATCH v3 32/43] drm/bridge: analogix_dp: Properly disable aux chan retries on rockchip Thierry Escande
2018-01-30 20:29   ` [PATCH v3 33/43] drm/panel: simple: Change mode for Sharp lq123p1jx31 Thierry Escande
2018-01-31 12:54     ` Lucas Stach
2018-01-31 15:16       ` Sean Paul
2018-01-31 16:52         ` Doug Anderson
2018-02-16 12:34           ` Enric Balletbo Serra
2018-02-16 20:54             ` Doug Anderson
2018-02-19  9:42               ` Enric Balletbo Serra
2018-01-30 20:29   ` Thierry Escande [this message]
2018-01-30 20:29   ` [PATCH v3 35/43] drm/bridge: analogix_dp: Split the platform-specific poweron in two parts Thierry Escande
2018-01-30 20:29   ` [PATCH v3 36/43] drm/rockchip: analogix_dp: Do not call Analogix code before bind Thierry Escande
2018-01-30 20:29   ` [PATCH v3 37/43] drm/rockchip: Disable PSR on input events Thierry Escande
2018-01-30 20:29   ` [PATCH v3 38/43] drm/rockchip: Cancel PSR enable work before changing the state Thierry Escande
2018-01-30 20:29   ` [PATCH v3 39/43] drm/rockchip: psr: Avoid redundant calls to .set() callback Thierry Escande
2018-01-30 20:29   ` [PATCH v3 40/43] drm/rockchip: psr: Sanitize semantics of allow/disallow API Thierry Escande
2018-01-30 20:29   ` [PATCH v3 41/43] drm/rockchip: Disable PSR from reboot notifier Thierry Escande
2018-01-30 20:29   ` [PATCH v3 42/43] drm/rockchip: Disallow PSR for the whole atomic commit Thierry Escande
2018-01-30 20:29   ` [PATCH v3 43/43] drm/rockchip: psr: Remove flush by CRTC Thierry Escande
2018-03-01  8:50   ` [PATCH v3 00/43] DRM Rockchip rk3399 (Kevin) Marek Szyprowski
2018-03-01 11:06     ` Marek Szyprowski
2018-03-01 12:56       ` Marek Szyprowski

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=20180130202913.28724-35-thierry.escande@collabora.com \
    --to=thierry.escande@collabora.com \
    --cc=airlied@linux.ie \
    --cc=architt@codeaurora.org \
    --cc=dianders@chromium.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=enric.balletbo@collabora.com \
    --cc=hjc@rock-chips.com \
    --cc=hl@rock-chips.com \
    --cc=hshi@chromium.org \
    --cc=inki.dae@samsung.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=mark.yao@rock-chips.com \
    --cc=orjan.eide@arm.com \
    --cc=seanpaul@chromium.org \
    --cc=tfiga@chromium.org \
    --cc=thierry.reding@gmail.com \
    --cc=wzz@rock-chips.com \
    --cc=ykk@rock-chips.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

all inboxes | Powered by JetHome®