public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com>,
	Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>,
	Sasha Levin <sashal@kernel.org>,
	laurent.pinchart@ideasonboard.com,
	kieran.bingham+renesas@ideasonboard.com, airlied@gmail.com,
	daniel@ffwll.ch, dri-devel@lists.freedesktop.org,
	linux-renesas-soc@vger.kernel.org
Subject: [PATCH AUTOSEL 6.2 25/60] drm: rcar-du: Add quirk for H3 ES1.x pclk workaround
Date: Sun, 26 Feb 2023 21:00:10 -0500	[thread overview]
Message-ID: <20230227020045.1045105-25-sashal@kernel.org> (raw)
In-Reply-To: <20230227020045.1045105-1-sashal@kernel.org>

From: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com>

[ Upstream commit 4f548bc48a2b4c4e54eecfddb6f7d24aa1b98768 ]

rcar_du_crtc.c does a soc_device_match() in
rcar_du_crtc_set_display_timing() to find out if the SoC is H3 ES1.x, and
if so, apply a workaround.

We will need another H3 ES1.x check in the following patch, so rather than
adding more soc_device_match() calls, let's add a rcar_du_device_info
entry for the ES1, and a quirk flag,
RCAR_DU_QUIRK_H3_ES1_PCLK_STABILITY, for the workaround.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/gpu/drm/rcar-du/rcar_du_crtc.c |  8 +----
 drivers/gpu/drm/rcar-du/rcar_du_drv.c  | 48 ++++++++++++++++++++++++++
 drivers/gpu/drm/rcar-du/rcar_du_drv.h  |  1 +
 3 files changed, 50 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
index 3619e1ddeb620..f2d3266509cc1 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
@@ -10,7 +10,6 @@
 #include <linux/clk.h>
 #include <linux/mutex.h>
 #include <linux/platform_device.h>
-#include <linux/sys_soc.h>
 
 #include <drm/drm_atomic.h>
 #include <drm/drm_atomic_helper.h>
@@ -204,11 +203,6 @@ static void rcar_du_escr_divider(struct clk *clk, unsigned long target,
 	}
 }
 
-static const struct soc_device_attribute rcar_du_r8a7795_es1[] = {
-	{ .soc_id = "r8a7795", .revision = "ES1.*" },
-	{ /* sentinel */ }
-};
-
 static void rcar_du_crtc_set_display_timing(struct rcar_du_crtc *rcrtc)
 {
 	const struct drm_display_mode *mode = &rcrtc->crtc.state->adjusted_mode;
@@ -238,7 +232,7 @@ static void rcar_du_crtc_set_display_timing(struct rcar_du_crtc *rcrtc)
 		 * no post-divider when a display PLL is present (as shown by
 		 * the workaround breaking HDMI output on M3-W during testing).
 		 */
-		if (soc_device_match(rcar_du_r8a7795_es1)) {
+		if (rcdu->info->quirks & RCAR_DU_QUIRK_H3_ES1_PCLK_STABILITY) {
 			target *= 2;
 			div = 1;
 		}
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
index d003e8d9e7a26..c479996f8e91e 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
@@ -16,6 +16,7 @@
 #include <linux/platform_device.h>
 #include <linux/pm.h>
 #include <linux/slab.h>
+#include <linux/sys_soc.h>
 #include <linux/wait.h>
 
 #include <drm/drm_atomic_helper.h>
@@ -386,6 +387,42 @@ static const struct rcar_du_device_info rcar_du_r8a7795_info = {
 	.dpll_mask =  BIT(2) | BIT(1),
 };
 
+static const struct rcar_du_device_info rcar_du_r8a7795_es1_info = {
+	.gen = 3,
+	.features = RCAR_DU_FEATURE_CRTC_IRQ
+		  | RCAR_DU_FEATURE_CRTC_CLOCK
+		  | RCAR_DU_FEATURE_VSP1_SOURCE
+		  | RCAR_DU_FEATURE_INTERLACED
+		  | RCAR_DU_FEATURE_TVM_SYNC,
+	.quirks = RCAR_DU_QUIRK_H3_ES1_PCLK_STABILITY,
+	.channels_mask = BIT(3) | BIT(2) | BIT(1) | BIT(0),
+	.routes = {
+		/*
+		 * R8A7795 has one RGB output, two HDMI outputs and one
+		 * LVDS output.
+		 */
+		[RCAR_DU_OUTPUT_DPAD0] = {
+			.possible_crtcs = BIT(3),
+			.port = 0,
+		},
+		[RCAR_DU_OUTPUT_HDMI0] = {
+			.possible_crtcs = BIT(1),
+			.port = 1,
+		},
+		[RCAR_DU_OUTPUT_HDMI1] = {
+			.possible_crtcs = BIT(2),
+			.port = 2,
+		},
+		[RCAR_DU_OUTPUT_LVDS0] = {
+			.possible_crtcs = BIT(0),
+			.port = 3,
+		},
+	},
+	.num_lvds = 1,
+	.num_rpf = 5,
+	.dpll_mask =  BIT(2) | BIT(1),
+};
+
 static const struct rcar_du_device_info rcar_du_r8a7796_info = {
 	.gen = 3,
 	.features = RCAR_DU_FEATURE_CRTC_IRQ
@@ -554,6 +591,11 @@ static const struct of_device_id rcar_du_of_table[] = {
 
 MODULE_DEVICE_TABLE(of, rcar_du_of_table);
 
+static const struct soc_device_attribute rcar_du_soc_table[] = {
+	{ .soc_id = "r8a7795", .revision = "ES1.*", .data = &rcar_du_r8a7795_es1_info },
+	{ /* sentinel */ }
+};
+
 const char *rcar_du_output_name(enum rcar_du_output output)
 {
 	static const char * const names[] = {
@@ -645,6 +687,7 @@ static void rcar_du_shutdown(struct platform_device *pdev)
 
 static int rcar_du_probe(struct platform_device *pdev)
 {
+	const struct soc_device_attribute *soc_attr;
 	struct rcar_du_device *rcdu;
 	unsigned int mask;
 	int ret;
@@ -659,8 +702,13 @@ static int rcar_du_probe(struct platform_device *pdev)
 		return PTR_ERR(rcdu);
 
 	rcdu->dev = &pdev->dev;
+
 	rcdu->info = of_device_get_match_data(rcdu->dev);
 
+	soc_attr = soc_device_match(rcar_du_soc_table);
+	if (soc_attr)
+		rcdu->info = soc_attr->data;
+
 	platform_set_drvdata(pdev, rcdu);
 
 	/* I/O resources */
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.h b/drivers/gpu/drm/rcar-du/rcar_du_drv.h
index 5cfa2bb7ad93d..df87ccab146f4 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_drv.h
+++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.h
@@ -34,6 +34,7 @@ struct rcar_du_device;
 #define RCAR_DU_FEATURE_NO_BLENDING	BIT(5)	/* PnMR.SPIM does not have ALP nor EOR bits */
 
 #define RCAR_DU_QUIRK_ALIGN_128B	BIT(0)	/* Align pitches to 128 bytes */
+#define RCAR_DU_QUIRK_H3_ES1_PCLK_STABILITY BIT(1)	/* H3 ES1 has pclk stability issue */
 
 enum rcar_du_output {
 	RCAR_DU_OUTPUT_DPAD0,
-- 
2.39.0


  parent reply	other threads:[~2023-02-27  2:03 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-27  1:59 [PATCH AUTOSEL 6.2 01/60] drm: panel-orientation-quirks: Add quirk for Lenovo Yoga Tab 3 X90F Sasha Levin
2023-02-27  1:59 ` [PATCH AUTOSEL 6.2 02/60] drm: panel-orientation-quirks: Add quirk for DynaBook K50 Sasha Levin
2023-02-27  1:59 ` [PATCH AUTOSEL 6.2 03/60] drm/amd/display: Reduce expected sdp bandwidth for dcn321 Sasha Levin
2023-02-27  1:59 ` [PATCH AUTOSEL 6.2 04/60] drm/amd/display: Revert Reduce delay when sink device not able to ACK 00340h write Sasha Levin
2023-02-27  1:59 ` [PATCH AUTOSEL 6.2 05/60] drm/amd/display: Fix potential null-deref in dm_resume Sasha Levin
2023-02-27  1:59 ` [PATCH AUTOSEL 6.2 06/60] drm/omap: dsi: Fix excessive stack usage Sasha Levin
2023-02-27  1:59 ` [PATCH AUTOSEL 6.2 07/60] HID: Add Mapping for System Microphone Mute Sasha Levin
2023-02-27  1:59 ` [PATCH AUTOSEL 6.2 08/60] drm/tiny: ili9486: Do not assume 8-bit only SPI controllers Sasha Levin
2023-02-27  1:59 ` [PATCH AUTOSEL 6.2 09/60] drm/amd/display: Defer DIG FIFO disable after VID stream enable Sasha Levin
2023-02-27  1:59 ` [PATCH AUTOSEL 6.2 10/60] drm/radeon: free iio for atombios when driver shutdown Sasha Levin
2023-02-27  1:59 ` [PATCH AUTOSEL 6.2 11/60] drm/amd: Avoid BUG() for case of SRIOV missing IP version Sasha Levin
2023-02-27  1:59 ` [PATCH AUTOSEL 6.2 12/60] drm/amdkfd: Page aligned memory reserve size Sasha Levin
2023-02-27  1:59 ` [PATCH AUTOSEL 6.2 13/60] scsi: lpfc: Fix use-after-free KFENCE violation during sysfs firmware write Sasha Levin
2023-02-27  1:59 ` [PATCH AUTOSEL 6.2 14/60] Revert "fbcon: don't lose the console font across generic->chip driver switch" Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 15/60] drm/amd: Avoid ASSERT for some message failures Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 16/60] drm: amd: display: Fix memory leakage Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 17/60] drm/amd/display: fix mapping to non-allocated address Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 18/60] drm/msm/dp: Remove INIT_SETUP delay Sasha Levin
2023-02-27  9:12   ` Johan Hovold
2023-03-01 14:15     ` Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 19/60] HID: uclogic: Add frame type quirk Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 20/60] HID: uclogic: Add battery quirk Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 21/60] HID: uclogic: Add support for XP-PEN Deco Pro SW Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 22/60] HID: uclogic: Add support for XP-PEN Deco Pro MW Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 23/60] HID: multitouch: Add quirks for flipped axes Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 24/60] drm/msm/dsi: Add missing check for alloc_ordered_workqueue Sasha Levin
2023-02-27  2:00 ` Sasha Levin [this message]
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 26/60] drm: rcar-du: Fix setting a reserved bit in DPLLCR Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 27/60] drm/drm_print: correct format problem Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 28/60] drm/amd/display: Set hvm_enabled flag for S/G mode Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 29/60] drm/client: Test for connectors before sending hotplug event Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 30/60] habanalabs: extend fatal messages to contain PCI info Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 31/60] habanalabs: fix bug in timestamps registration code Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 32/60] docs/scripts/gdb: add necessary make scripts_gdb step Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 33/60] drm/msm/dpu: Add DSC hardware blocks to register snapshot Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 34/60] ASoC: soc-compress: Reposition and add pcm_mutex Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 35/60] ASoC: kirkwood: Iterate over array indexes instead of using pointer math Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 36/60] regulator: max77802: Bounds check regulator id against opmode Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 37/60] regulator: s5m8767: Bounds check id indexing into arrays Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 38/60] Revert "drm/amdgpu: TA unload messages are not actually sent to psp when amdgpu is uninstalled" Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 39/60] drm/amd/display: fix FCLK pstate change underflow Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 40/60] gfs2: Improve gfs2_make_fs_rw error handling Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 41/60] hwmon: (coretemp) Simplify platform device handling Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 42/60] hwmon: (nct6775) Directly call ASUS ACPI WMI method Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 43/60] hwmon: (nct6775) B650/B660/X670 ASUS boards support Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 44/60] pinctrl: at91: use devm_kasprintf() to avoid potential leaks Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 45/60] drm/amd/display: Do not set DRR on pipe commit Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 46/60] drm/amd/display: Do not commit pipe when updating DRR Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 47/60] scsi: snic: Fix memory leak with using debugfs_lookup() Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 48/60] scsi: ufs: core: Fix device management cmd timeout flow Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 49/60] HID: logitech-hidpp: Don't restart communication if not necessary Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 50/60] drm/amd/display: Move DCN314 DOMAIN power control to DMCUB Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 51/60] drm/amd/display: Enable P-state validation checks for DCN314 Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 52/60] drm: panel-orientation-quirks: Add quirk for Lenovo IdeaPad Duet 3 10IGL5 Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 53/60] drm/amd/display: Disable HUBP/DPP PG on DCN314 for now Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 54/60] drm/amd/display: disable SubVP + DRR to prevent underflow Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 55/60] dm thin: add cond_resched() to various workqueue loops Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 56/60] dm cache: " Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 57/60] nfsd: zero out pointers after putting nfsd_files on COPY setup error Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 58/60] nfsd: clean up potential nfsd_file refcount leaks in COPY codepath Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 59/60] nfsd: don't hand out delegation on setuid files being opened for write Sasha Levin
2023-02-27  2:00 ` [PATCH AUTOSEL 6.2 60/60] cifs: prevent data race in smb2_reconnect() Sasha Levin

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=20230227020045.1045105-25-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=airlied@gmail.com \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=kieran.bingham+renesas@ideasonboard.com \
    --cc=laurent.pinchart+renesas@ideasonboard.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=tomi.valkeinen+renesas@ideasonboard.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