All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] clk: renesas: cpg-mssr: Read back reset registers to assure values latched
@ 2025-09-18  3:06 Marek Vasut
  2025-09-18  6:08 ` Wolfram Sang
  2025-09-18 11:11 ` Lad, Prabhakar
  0 siblings, 2 replies; 16+ messages in thread
From: Marek Vasut @ 2025-09-18  3:06 UTC (permalink / raw)
  To: linux-clk
  Cc: Marek Vasut, Geert Uytterhoeven, Michael Turquette, Stephen Boyd,
	linux-renesas-soc

On R-Car V4H, the PCIEC controller DBI read would generate an SError
in case the controller reset is released by writing SRSTCLR register
first, and immediately afterward reading some PCIEC controller DBI
register. The issue triggers in rcar_gen4_pcie_additional_common_init()
on dw_pcie_readl_dbi(dw, PCIE_PORT_LANE_SKEW), which on V4H is the first
read after reset_control_deassert(dw->core_rsts[DW_PCIE_PWR_RST].rstc).

The reset controller which contains the SRSTCLR register and the PCIEC
controller which contains the DBI register share the same root access
bus, but the bus then splits into separate segments before reaching
each IP. Even if the SRSTCLR write access was posted on the bus before
the DBI read access, it seems the DBI read access may reach the PCIEC
controller before the SRSTCLR write completed, and trigger the SError.

Mitigate the issue by adding a dummy SRSTCLR read, which assures the
SRSTCLR write completes fully and is latched into the reset controller,
before the PCIEC DBI read access can occur.

Fixes: 0ab55cf18341 ("clk: renesas: cpg-mssr: Add support for R-Car V4H")
Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
---
Cc: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: Michael Turquette <mturquette@baylibre.com>
Cc: Stephen Boyd <sboyd@kernel.org>
Cc: linux-clk@vger.kernel.org
Cc: linux-renesas-soc@vger.kernel.org
---
 drivers/clk/renesas/renesas-cpg-mssr.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/clk/renesas/renesas-cpg-mssr.c b/drivers/clk/renesas/renesas-cpg-mssr.c
index 65dfaceea71f..7b52e8235984 100644
--- a/drivers/clk/renesas/renesas-cpg-mssr.c
+++ b/drivers/clk/renesas/renesas-cpg-mssr.c
@@ -688,6 +688,7 @@ static int cpg_mssr_reset(struct reset_controller_dev *rcdev,
 
 	/* Reset module */
 	writel(bitmask, priv->pub.base0 + priv->reset_regs[reg]);
+	readl(priv->pub.base0 + priv->reset_regs[reg]);
 
 	/*
 	 * On R-Car Gen4, delay after SRCR has been written is 1ms.
@@ -701,6 +702,7 @@ static int cpg_mssr_reset(struct reset_controller_dev *rcdev,
 
 	/* Release module from reset state */
 	writel(bitmask, priv->pub.base0 + priv->reset_clear_regs[reg]);
+	readl(priv->pub.base0 + priv->reset_clear_regs[reg]);
 
 	return 0;
 }
@@ -715,6 +717,7 @@ static int cpg_mssr_assert(struct reset_controller_dev *rcdev, unsigned long id)
 	dev_dbg(priv->dev, "assert %u%02u\n", reg, bit);
 
 	writel(bitmask, priv->pub.base0 + priv->reset_regs[reg]);
+	readl(priv->pub.base0 + priv->reset_regs[reg]);
 	return 0;
 }
 
@@ -729,6 +732,7 @@ static int cpg_mssr_deassert(struct reset_controller_dev *rcdev,
 	dev_dbg(priv->dev, "deassert %u%02u\n", reg, bit);
 
 	writel(bitmask, priv->pub.base0 + priv->reset_clear_regs[reg]);
+	readl(priv->pub.base0 + priv->reset_clear_regs[reg]);
 	return 0;
 }
 
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2025-09-22 14:23 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-18  3:06 [PATCH] clk: renesas: cpg-mssr: Read back reset registers to assure values latched Marek Vasut
2025-09-18  6:08 ` Wolfram Sang
2025-09-18 13:38   ` Marek Vasut
2025-09-18 11:11 ` Lad, Prabhakar
2025-09-18 13:42   ` Marek Vasut
2025-09-18 15:05     ` Lad, Prabhakar
2025-09-18 23:16       ` Marek Vasut
2025-09-19  8:23         ` Lad, Prabhakar
2025-09-22 11:22         ` Geert Uytterhoeven
2025-09-22 13:57           ` Wolfram Sang
2025-09-22 14:08             ` Geert Uytterhoeven
2025-09-22 14:23               ` Wolfram Sang
2025-09-19  7:21       ` Geert Uytterhoeven
2025-09-19  8:22         ` Lad, Prabhakar
2025-09-19 12:19         ` Marek Vasut
2025-09-22  6:45           ` Geert Uytterhoeven

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.