* [RFC PATCH 0/9] Add System Controller support for RZ/T2H and RZ/N2H SoCs
@ 2026-05-11 18:50 Prabhakar
2026-05-11 18:50 ` [RFC PATCH 1/9] dt-bindings: clock: renesas,cpg-mssr: Support RZ/T2H system controllers Prabhakar
` (8 more replies)
0 siblings, 9 replies; 15+ messages in thread
From: Prabhakar @ 2026-05-11 18:50 UTC (permalink / raw)
To: Geert Uytterhoeven, Michael Turquette, Stephen Boyd, Brian Masney,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Wim Van Sebroeck,
Guenter Roeck, Magnus Damm, Philipp Zabel
Cc: linux-renesas-soc, linux-clk, devicetree, linux-kernel,
linux-watchdog, Prabhakar, Biju Das, Fabrizio Castro,
Lad Prabhakar
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Hi All,
This series adds support for the System Controller (SYSC) blocks found on
the Renesas RZ/T2H and RZ/N2H SoCs. These blocks handle critical low-power
management and access control functions.
Hardware Architecture & Dependency Challenges:
----------------------------------------------
The SYSC in these SoCs is a multi-functional block responsible for:
- Clock & Reset Control
- Low Power Management
- Clock Monitor (CLMA)
- Access Control
A key architectural detail is that these SYSC blocks are physically located
within the CPG/MSSR (Clock Pulse Generator / Module Standby Software Reset)
address space. While the CPG/MSSR driver is already implemented and
functional for these SoCs, the integration of SYSC adds a layer of
complexity due to a cyclic dependency:
- SYSC requires CPG: The system controller needs a clock to operate.
- CPG requires SYSC: Access control registers within the SYSC contain
bits necessary to control the PLLs managed by the CPG.
If implemented as a completely separate top-level system controller node, we
would face a cyclic dependency between the CPG and SYSC drivers during the
boot process.
Proposed Implementation
----------------------------
To resolve this, the SYSC blocks are represented as child nodes of the
CPG/MSSR controller in the device tree. The SYSC regmap is registered
directly against the CPG device node. This hierarchy correctly models the
hardware address space while allowing the drivers to share resources
without deadlock.
I am sending this as an RFC specifically to get feedback on the
implementation of the SYSC as child nodes of the CPG to resolve the
dependency cycle.
I have also included patches which updates the WDT driver to use
the SYS syscon for register access.
Cheers,
Prabhakar
Lad Prabhakar (9):
dt-bindings: clock: renesas,cpg-mssr: Support RZ/T2H system
controllers
clk: renesas: r9a09g077: Add SYSC regmap support
arm64: dts: renesas: r9a09g077: Add system controller child nodes
arm64: dts: renesas: r9a09g087: Add system controller child nodes
dt-bindings: watchdog: renesas,r9a09g057-wdt: Add SYS syscon support
watchdog: rzv2h: Refactor WDTDCR start/stop handling
watchdog: rzv2h: Add syscon support for RZ/T2H and RZ/N2H WDT control
register
arm64: dts: renesas: r9a09g077: Use SYS syscon for WDTDCR access
arm64: dts: renesas: r9a09g087: Use SYS syscon for WDTDCR access
.../bindings/clock/renesas,cpg-mssr.yaml | 39 ++++
.../watchdog/renesas,r9a09g057-wdt.yaml | 29 ++-
arch/arm64/boot/dts/renesas/r9a09g077.dtsi | 38 ++--
arch/arm64/boot/dts/renesas/r9a09g087.dtsi | 38 ++--
drivers/clk/renesas/Kconfig | 2 +
drivers/clk/renesas/r9a09g077-cpg.c | 180 ++++++++++++++++++
drivers/clk/renesas/renesas-cpg-mssr.c | 6 +
drivers/clk/renesas/renesas-cpg-mssr.h | 1 +
drivers/watchdog/Kconfig | 1 +
drivers/watchdog/rzv2h_wdt.c | 104 ++++++++--
10 files changed, 394 insertions(+), 44 deletions(-)
--
2.54.0
^ permalink raw reply [flat|nested] 15+ messages in thread
* [RFC PATCH 1/9] dt-bindings: clock: renesas,cpg-mssr: Support RZ/T2H system controllers
2026-05-11 18:50 [RFC PATCH 0/9] Add System Controller support for RZ/T2H and RZ/N2H SoCs Prabhakar
@ 2026-05-11 18:50 ` Prabhakar
2026-05-12 22:48 ` sashiko-bot
2026-05-11 18:50 ` [RFC PATCH 2/9] clk: renesas: r9a09g077: Add SYSC regmap support Prabhakar
` (7 subsequent siblings)
8 siblings, 1 reply; 15+ messages in thread
From: Prabhakar @ 2026-05-11 18:50 UTC (permalink / raw)
To: Geert Uytterhoeven, Michael Turquette, Stephen Boyd, Brian Masney,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Wim Van Sebroeck,
Guenter Roeck, Magnus Damm, Philipp Zabel
Cc: linux-renesas-soc, linux-clk, devicetree, linux-kernel,
linux-watchdog, Prabhakar, Biju Das, Fabrizio Castro,
Lad Prabhakar
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
The RZ/T2H SoC features system controller blocks for low-power management
and access control that reside within the CPG/MSSR address space. To
properly represent these hardware modules, allow them to be defined as
child nodes of the CPG/MSSR controller.
Update the CPG/MSSR binding to support child nodes by adding
system-controller child nodes using a patternProperty, requiring a reg
property and a renesas,sys-block property to identify the controller
instance.
Restrict these new properties to the RZ/T2H SoC to ensure existing
bindings for other Renesas SoCs remain unaffected.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
.../bindings/clock/renesas,cpg-mssr.yaml | 39 +++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/Documentation/devicetree/bindings/clock/renesas,cpg-mssr.yaml b/Documentation/devicetree/bindings/clock/renesas,cpg-mssr.yaml
index 655154534c0f..ec13fcaf763e 100644
--- a/Documentation/devicetree/bindings/clock/renesas,cpg-mssr.yaml
+++ b/Documentation/devicetree/bindings/clock/renesas,cpg-mssr.yaml
@@ -99,6 +99,41 @@ properties:
the datasheet.
const: 1
+ '#address-cells':
+ description:
+ Required for the RZ/T2H SoC to define the address space for child
+ system-controller nodes.
+ const: 2
+
+ '#size-cells':
+ description:
+ Required for the RZ/T2H SoC to define the size of the register
+ blocks for child system-controller nodes.
+ const: 2
+
+ ranges:
+ description:
+ Required for the RZ/T2H SoC to provide 1:1 address translation
+ from the child system-controller nodes to the CPU address space.
+
+patternProperties:
+ "^system-controller@[0-9a-f]+$":
+ type: object
+ description:
+ System controller child nodes representing sub-blocks for
+ Low Power Management (LPM) and Access Control.
+ properties:
+ reg:
+ maxItems: 1
+ renesas,sys-block:
+ $ref: /schemas/types.yaml#/definitions/uint32
+ description: Index of the system controller instance.
+ enum: [0, 1]
+ required:
+ - reg
+ - renesas,sys-block
+ additionalProperties: false
+
required:
- compatible
- reg
@@ -126,6 +161,10 @@ allOf:
properties:
reg:
maxItems: 1
+ '#address-cells': false
+ '#size-cells': false
+ patternProperties:
+ "^system-controller@[0-9a-f]+$": false
- if:
not:
properties:
--
2.54.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [RFC PATCH 2/9] clk: renesas: r9a09g077: Add SYSC regmap support
2026-05-11 18:50 [RFC PATCH 0/9] Add System Controller support for RZ/T2H and RZ/N2H SoCs Prabhakar
2026-05-11 18:50 ` [RFC PATCH 1/9] dt-bindings: clock: renesas,cpg-mssr: Support RZ/T2H system controllers Prabhakar
@ 2026-05-11 18:50 ` Prabhakar
2026-05-13 0:12 ` sashiko-bot
2026-05-11 18:50 ` [RFC PATCH 3/9] arm64: dts: renesas: r9a09g077: Add system controller child nodes Prabhakar
` (6 subsequent siblings)
8 siblings, 1 reply; 15+ messages in thread
From: Prabhakar @ 2026-05-11 18:50 UTC (permalink / raw)
To: Geert Uytterhoeven, Michael Turquette, Stephen Boyd, Brian Masney,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Wim Van Sebroeck,
Guenter Roeck, Magnus Damm, Philipp Zabel
Cc: linux-renesas-soc, linux-clk, devicetree, linux-kernel,
linux-watchdog, Prabhakar, Biju Das, Fabrizio Castro,
Lad Prabhakar
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Add System Controller (SYSC) regmap support for the RZ/T2H SoC.
The RZ/T2H SoC features two System Controller (SYSC) blocks that handle
low-power management and access control. These blocks are defined as child
nodes within the Clock Pulse Generator (CPG) address space in the device
tree. Implement support for creating regmaps for these SYSC blocks.
Register the regmap using of_syscon_register_regmap() against the CPG
device node so that consumers can access SYSC registers via the existing
syscon phandle.
Add a sysc_init() callback to the CPG/MSSR core to allow SoC-specific
initialization of the SYSC regmap.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
drivers/clk/renesas/Kconfig | 2 +
drivers/clk/renesas/r9a09g077-cpg.c | 180 +++++++++++++++++++++++++
drivers/clk/renesas/renesas-cpg-mssr.c | 6 +
drivers/clk/renesas/renesas-cpg-mssr.h | 1 +
4 files changed, 189 insertions(+)
diff --git a/drivers/clk/renesas/Kconfig b/drivers/clk/renesas/Kconfig
index 0203ecbb3882..4b2b766e2241 100644
--- a/drivers/clk/renesas/Kconfig
+++ b/drivers/clk/renesas/Kconfig
@@ -218,10 +218,12 @@ config CLK_R9A09G057
config CLK_R9A09G077
bool "RZ/T2H clock support" if COMPILE_TEST
select CLK_RENESAS_CPG_MSSR
+ select MFD_SYSCON
config CLK_R9A09G087
bool "RZ/N2H clock support" if COMPILE_TEST
select CLK_RENESAS_CPG_MSSR
+ select MFD_SYSCON
config CLK_SH73A0
bool "SH-Mobile AG5 clock support" if COMPILE_TEST
diff --git a/drivers/clk/renesas/r9a09g077-cpg.c b/drivers/clk/renesas/r9a09g077-cpg.c
index f777601a23b9..aa9306d4e288 100644
--- a/drivers/clk/renesas/r9a09g077-cpg.c
+++ b/drivers/clk/renesas/r9a09g077-cpg.c
@@ -7,11 +7,14 @@
*/
#include <linux/bitfield.h>
+#include <linux/bits.h>
#include <linux/clk-provider.h>
#include <linux/device.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/math.h>
+#include <linux/mfd/syscon.h>
+#include <linux/regmap.h>
#include <linux/types.h>
#include <dt-bindings/clock/renesas,r9a09g077-cpg-mssr.h>
@@ -67,6 +70,16 @@
#define DIVSCI3ASYNC CONF_PACK(SCKCR3, 12, 2)
#define DIVSCI4ASYNC CONF_PACK(SCKCR3, 14, 2)
+enum r9a09g077_sysc {
+ RZT2H_SYSC0,
+ RZT2H_SYSC1,
+ RZT2H_MAX_SYSC,
+};
+
+struct r9a09g077_sysc_reg {
+ void __iomem *base;
+};
+
enum rzt2h_clk_types {
CLK_TYPE_RZT2H_DIV = CLK_TYPE_CUSTOM, /* Clock with divider */
CLK_TYPE_RZT2H_MUX, /* Clock with clock source selector */
@@ -502,6 +515,172 @@ r9a09g077_cpg_clk_register(struct device *dev, const struct cpg_core_clk *core,
}
}
+static int rzt2h_regmap_read(void *context, unsigned int reg, unsigned int *val)
+{
+ struct r9a09g077_sysc_reg *sysc = context;
+
+ *val = readl(sysc->base + reg);
+
+ return 0;
+}
+
+static int rzt2h_regmap_write(void *context, unsigned int reg, unsigned int val)
+{
+ struct r9a09g077_sysc_reg *sysc = context;
+
+ writel(val, sysc->base + reg);
+
+ return 0;
+}
+
+static const struct regmap_bus rzt2h_sys_regmap_bus = {
+ .reg_write = rzt2h_regmap_write,
+ .reg_read = rzt2h_regmap_read,
+};
+
+static bool rzt2h_writeable_readable_sysc0(struct device *dev, unsigned int reg)
+{
+ switch (reg) {
+ case 0x0000 ... 0x0008:
+ case 0x1000 ... 0x1164:
+ case 0x2000 ... 0x2024:
+ case 0x2030 ... 0x2054:
+ case 0x2060:
+ case 0x3000 ... 0x300C:
+ case 0x3100 ... 0x310C:
+ case 0x4100:
+ case 0x4200:
+ return true;
+
+ default:
+ return false;
+ }
+}
+
+static bool rzt2h_writeable_readable_sysc1(struct device *dev, unsigned int reg)
+{
+ switch (reg) {
+ case 0x000C:
+ case 0x0034 ... 0x0038:
+ case 0x0048 ... 0x007C:
+ case 0x0100 ... 0x017C:
+ case 0x0200 ... 0x027C:
+ case 0x0308 ... 0x030C:
+ case 0x0320 ... 0x037C:
+ case 0x0480 ... 0x0484:
+ case 0x0580 ... 0x0584:
+ case 0x0680 ... 0x0684:
+ case 0x0780 ... 0x0784:
+ case 0x0880:
+ case 0x0980 ... 0x098C:
+ case 0x1100 ... 0x1118:
+ case 0x1200 ... 0x1204:
+ case 0x1400 ... 0x1484:
+ case 0x1500 ... 0x1584:
+ case 0x1600 ... 0x1680:
+ case 0x1700 ... 0x1780:
+ case 0x1800 ... 0x1884:
+ case 0x1900 ... 0x1984:
+ case 0x1A00 ... 0x1A84:
+ case 0x1B00 ... 0x1B8C:
+ case 0x1C00 ... 0x1C8C:
+ case 0x1D00 ... 0x1D8C:
+ case 0x3000:
+ case 0x3010:
+ case 0x3020:
+ case 0x3030:
+ case 0x4000:
+ case 0x5008 ... 0x500C:
+ case 0x5020 ... 0x503C:
+ case 0x5100 ... 0x5114:
+ case 0x6000:
+ return true;
+
+ default:
+ return false;
+ }
+}
+
+static int r9a09g077_sysc_init(struct device *dev)
+{
+ struct device_node *child, *np = dev->of_node;
+
+ for_each_child_of_node(np, child) {
+ struct regmap_config *regmap_cfg __free(kfree) = kzalloc_obj(*regmap_cfg);
+ struct r9a09g077_sysc_reg *sysc_reg;
+ struct regmap *regmap;
+ void __iomem *base;
+ char *name;
+ u32 index;
+ int ret;
+
+ sysc_reg = devm_kzalloc(dev, sizeof(*sysc_reg), GFP_KERNEL);
+ if (!sysc_reg) {
+ of_node_put(child);
+ return -ENOMEM;
+ }
+
+ if (!regmap_cfg) {
+ of_node_put(child);
+ return -ENOMEM;
+ }
+
+ if (!of_node_name_eq(child, "system-controller"))
+ continue;
+
+ if (of_property_read_u32(child, "renesas,sys-block", &index)) {
+ of_node_put(child);
+ return -EINVAL;
+ }
+
+ if (index >= RZT2H_MAX_SYSC) {
+ of_node_put(child);
+ return -EINVAL;
+ }
+
+ name = devm_kasprintf(dev, GFP_KERNEL, "sysc%u", index);
+ if (!name) {
+ of_node_put(child);
+ return -ENOMEM;
+ }
+
+ base = devm_of_iomap(dev, child, 0, NULL);
+ if (IS_ERR(base)) {
+ of_node_put(child);
+ return PTR_ERR(base);
+ }
+
+ sysc_reg->base = base;
+ regmap_cfg->name = name;
+ regmap_cfg->reg_bits = 32;
+ regmap_cfg->reg_stride = 4;
+ regmap_cfg->val_bits = 32;
+ regmap_cfg->fast_io = true;
+ regmap_cfg->max_register = 0x10000;
+ if (index == RZT2H_SYSC0) {
+ regmap_cfg->readable_reg = rzt2h_writeable_readable_sysc0;
+ regmap_cfg->writeable_reg = rzt2h_writeable_readable_sysc0;
+ } else {
+ regmap_cfg->readable_reg = rzt2h_writeable_readable_sysc1;
+ regmap_cfg->writeable_reg = rzt2h_writeable_readable_sysc1;
+ }
+
+ regmap = devm_regmap_init(dev, &rzt2h_sys_regmap_bus, sysc_reg, regmap_cfg);
+ if (IS_ERR(regmap)) {
+ of_node_put(child);
+ return PTR_ERR(regmap);
+ }
+
+ ret = of_syscon_register_regmap(child, regmap);
+ if (ret) {
+ of_node_put(child);
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
const struct cpg_mssr_info r9a09g077_cpg_mssr_info = {
/* Core Clocks */
.core_clks = r9a09g077_core_clks,
@@ -516,4 +695,5 @@ const struct cpg_mssr_info r9a09g077_cpg_mssr_info = {
.reg_layout = CLK_REG_LAYOUT_RZ_T2H,
.cpg_clk_register = r9a09g077_cpg_clk_register,
+ .sysc_init = r9a09g077_sysc_init,
};
diff --git a/drivers/clk/renesas/renesas-cpg-mssr.c b/drivers/clk/renesas/renesas-cpg-mssr.c
index 5b84cbee030b..2c125bbda5c9 100644
--- a/drivers/clk/renesas/renesas-cpg-mssr.c
+++ b/drivers/clk/renesas/renesas-cpg-mssr.c
@@ -1283,6 +1283,12 @@ static int __init cpg_mssr_common_init(struct device *dev,
}
}
+ if (info->sysc_init) {
+ error = info->sysc_init(priv->dev);
+ if (error)
+ goto out_err;
+ }
+
priv->num_core_clks = info->num_total_core_clks;
priv->num_mod_clks = info->num_hw_mod_clks;
priv->last_dt_core_clk = info->last_dt_core_clk;
diff --git a/drivers/clk/renesas/renesas-cpg-mssr.h b/drivers/clk/renesas/renesas-cpg-mssr.h
index ad11ab5f0069..2d1b5c2c4472 100644
--- a/drivers/clk/renesas/renesas-cpg-mssr.h
+++ b/drivers/clk/renesas/renesas-cpg-mssr.h
@@ -178,6 +178,7 @@ struct cpg_mssr_info {
/* Callbacks */
int (*init)(struct device *dev);
+ int (*sysc_init)(struct device *dev);
struct clk *(*cpg_clk_register)(struct device *dev,
const struct cpg_core_clk *core,
const struct cpg_mssr_info *info,
--
2.54.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [RFC PATCH 3/9] arm64: dts: renesas: r9a09g077: Add system controller child nodes
2026-05-11 18:50 [RFC PATCH 0/9] Add System Controller support for RZ/T2H and RZ/N2H SoCs Prabhakar
2026-05-11 18:50 ` [RFC PATCH 1/9] dt-bindings: clock: renesas,cpg-mssr: Support RZ/T2H system controllers Prabhakar
2026-05-11 18:50 ` [RFC PATCH 2/9] clk: renesas: r9a09g077: Add SYSC regmap support Prabhakar
@ 2026-05-11 18:50 ` Prabhakar
2026-05-11 18:50 ` [RFC PATCH 4/9] arm64: dts: renesas: r9a09g087: " Prabhakar
` (5 subsequent siblings)
8 siblings, 0 replies; 15+ messages in thread
From: Prabhakar @ 2026-05-11 18:50 UTC (permalink / raw)
To: Geert Uytterhoeven, Michael Turquette, Stephen Boyd, Brian Masney,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Wim Van Sebroeck,
Guenter Roeck, Magnus Damm, Philipp Zabel
Cc: linux-renesas-soc, linux-clk, devicetree, linux-kernel,
linux-watchdog, Prabhakar, Biju Das, Fabrizio Castro,
Lad Prabhakar
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
The RZ/T2H SoC contains system controller (SYSC) blocks for low-power
management and access control within the CPG/MSSR address space.
Represent these SYSC blocks as child nodes of the CPG/MSSR controller.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
arch/arm64/boot/dts/renesas/r9a09g077.dtsi | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/arch/arm64/boot/dts/renesas/r9a09g077.dtsi b/arch/arm64/boot/dts/renesas/r9a09g077.dtsi
index 3761551c9647..59e5de743826 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g077.dtsi
+++ b/arch/arm64/boot/dts/renesas/r9a09g077.dtsi
@@ -1015,6 +1015,20 @@ cpg: clock-controller@80280000 {
#clock-cells = <2>;
#reset-cells = <1>;
#power-domain-cells = <0>;
+
+ #address-cells = <2>;
+ #size-cells = <2>;
+ ranges;
+
+ sys0: system-controller@80290000 {
+ reg = <0 0x80290000 0 0x10000>;
+ renesas,sys-block = <0>;
+ };
+
+ sys1: system-controller@81290000 {
+ reg = <0 0x81290000 0 0x10000>;
+ renesas,sys-block = <1>;
+ };
};
icu: interrupt-controller@802a0000 {
--
2.54.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [RFC PATCH 4/9] arm64: dts: renesas: r9a09g087: Add system controller child nodes
2026-05-11 18:50 [RFC PATCH 0/9] Add System Controller support for RZ/T2H and RZ/N2H SoCs Prabhakar
` (2 preceding siblings ...)
2026-05-11 18:50 ` [RFC PATCH 3/9] arm64: dts: renesas: r9a09g077: Add system controller child nodes Prabhakar
@ 2026-05-11 18:50 ` Prabhakar
2026-05-11 18:50 ` [RFC PATCH 5/9] dt-bindings: watchdog: renesas,r9a09g057-wdt: Add SYS syscon support Prabhakar
` (4 subsequent siblings)
8 siblings, 0 replies; 15+ messages in thread
From: Prabhakar @ 2026-05-11 18:50 UTC (permalink / raw)
To: Geert Uytterhoeven, Michael Turquette, Stephen Boyd, Brian Masney,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Wim Van Sebroeck,
Guenter Roeck, Magnus Damm, Philipp Zabel
Cc: linux-renesas-soc, linux-clk, devicetree, linux-kernel,
linux-watchdog, Prabhakar, Biju Das, Fabrizio Castro,
Lad Prabhakar
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
The RZ/N2H SoC contains system controller (SYSC) blocks for low-power
management and access control within the CPG/MSSR address space.
Represent these SYSC blocks as child nodes of the CPG/MSSR controller.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
arch/arm64/boot/dts/renesas/r9a09g087.dtsi | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/arch/arm64/boot/dts/renesas/r9a09g087.dtsi b/arch/arm64/boot/dts/renesas/r9a09g087.dtsi
index f697e9698ed3..170d033dcdb3 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g087.dtsi
+++ b/arch/arm64/boot/dts/renesas/r9a09g087.dtsi
@@ -1018,6 +1018,20 @@ cpg: clock-controller@80280000 {
#clock-cells = <2>;
#reset-cells = <1>;
#power-domain-cells = <0>;
+
+ #address-cells = <2>;
+ #size-cells = <2>;
+ ranges;
+
+ sys0: system-controller@80290000 {
+ reg = <0 0x80290000 0 0x10000>;
+ renesas,sys-block = <0>;
+ };
+
+ sys1: system-controller@81290000 {
+ reg = <0 0x81290000 0 0x10000>;
+ renesas,sys-block = <1>;
+ };
};
icu: interrupt-controller@802a0000 {
--
2.54.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [RFC PATCH 5/9] dt-bindings: watchdog: renesas,r9a09g057-wdt: Add SYS syscon support
2026-05-11 18:50 [RFC PATCH 0/9] Add System Controller support for RZ/T2H and RZ/N2H SoCs Prabhakar
` (3 preceding siblings ...)
2026-05-11 18:50 ` [RFC PATCH 4/9] arm64: dts: renesas: r9a09g087: " Prabhakar
@ 2026-05-11 18:50 ` Prabhakar
2026-05-13 1:44 ` sashiko-bot
2026-05-11 18:50 ` [RFC PATCH 6/9] watchdog: rzv2h: Refactor WDTDCR start/stop handling Prabhakar
` (3 subsequent siblings)
8 siblings, 1 reply; 15+ messages in thread
From: Prabhakar @ 2026-05-11 18:50 UTC (permalink / raw)
To: Geert Uytterhoeven, Michael Turquette, Stephen Boyd, Brian Masney,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Wim Van Sebroeck,
Guenter Roeck, Magnus Damm, Philipp Zabel
Cc: linux-renesas-soc, linux-clk, devicetree, linux-kernel,
linux-watchdog, Prabhakar, Biju Das, Fabrizio Castro,
Lad Prabhakar
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
On the Renesas RZ/T2H SoC, the Watchdog Timer Control Register (WDTDCR)
resides within the System Controller (SYS) block rather than the WDT
address space itself.
Previously, this was handled by including a second register range in the
"reg" property. However, this is architecturally incorrect as the SYS
block consists of two distinct regions (0x80290000 and 0x81290000) that
contain registers for multiple peripheral blocks.
Now that the SYS driver provides a unified syscon regmap, introduce the
"renesas,sys" phandle-array property to allow the WDT driver to
access its control register via the system controller.
Mark the use of a second "reg" entry as deprecated in favor of the
new phandle-array approach for SoCs that require WDTDCR access.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
.../watchdog/renesas,r9a09g057-wdt.yaml | 29 +++++++++++++++++--
1 file changed, 27 insertions(+), 2 deletions(-)
diff --git a/Documentation/devicetree/bindings/watchdog/renesas,r9a09g057-wdt.yaml b/Documentation/devicetree/bindings/watchdog/renesas,r9a09g057-wdt.yaml
index 099200c4f136..2f32c7401def 100644
--- a/Documentation/devicetree/bindings/watchdog/renesas,r9a09g057-wdt.yaml
+++ b/Documentation/devicetree/bindings/watchdog/renesas,r9a09g057-wdt.yaml
@@ -48,6 +48,17 @@ properties:
resets:
maxItems: 1
+ renesas,sys:
+ description:
+ System controller registers control the start/stop of the WDT, and halt debug.
+ $ref: /schemas/types.yaml#/definitions/phandle-array
+ items:
+ - items:
+ - description: phandle to system controller
+ - description: watchdog IP instance index
+ minimum: 0
+ maximum: 5
+
timeout-sec: true
required:
@@ -73,15 +84,29 @@ allOf:
minItems: 2
clock-names:
minItems: 2
+ renesas,sys: false
else:
properties:
clocks:
maxItems: 1
clock-names:
maxItems: 1
- reg:
- minItems: 2
resets: false
+ allOf:
+ - if:
+ required:
+ - renesas,sys
+ then:
+ properties:
+ reg:
+ maxItems: 1
+ else:
+ properties:
+ reg:
+ description: Deprecated. Use renesas,sys to pass the offset
+ of WDTDCR register instead.
+ minItems: 2
+ deprecated: true
additionalProperties: false
--
2.54.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [RFC PATCH 6/9] watchdog: rzv2h: Refactor WDTDCR start/stop handling
2026-05-11 18:50 [RFC PATCH 0/9] Add System Controller support for RZ/T2H and RZ/N2H SoCs Prabhakar
` (4 preceding siblings ...)
2026-05-11 18:50 ` [RFC PATCH 5/9] dt-bindings: watchdog: renesas,r9a09g057-wdt: Add SYS syscon support Prabhakar
@ 2026-05-11 18:50 ` Prabhakar
2026-05-11 18:50 ` [RFC PATCH 7/9] watchdog: rzv2h: Add syscon support for RZ/T2H and RZ/N2H WDT control register Prabhakar
` (2 subsequent siblings)
8 siblings, 0 replies; 15+ messages in thread
From: Prabhakar @ 2026-05-11 18:50 UTC (permalink / raw)
To: Geert Uytterhoeven, Michael Turquette, Stephen Boyd, Brian Masney,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Wim Van Sebroeck,
Guenter Roeck, Magnus Damm, Philipp Zabel
Cc: linux-renesas-soc, linux-clk, devicetree, linux-kernel,
linux-watchdog, Prabhakar, Biju Das, Fabrizio Castro,
Lad Prabhakar
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Refactor the WDTDCR start/stop helpers by introducing a common
rzt2h_wdt_wdtdcr_count_ctrl() function that controls the WDTSTOPCTRL
bit based on a boolean parameter.
This is in preparation for switching WDTDCR access to regmap-based
handling, where consolidating the control path simplifies the
conversion.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
drivers/watchdog/rzv2h_wdt.c | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/drivers/watchdog/rzv2h_wdt.c b/drivers/watchdog/rzv2h_wdt.c
index 3b6abb66a1da..e9545b8f5fd0 100644
--- a/drivers/watchdog/rzv2h_wdt.c
+++ b/drivers/watchdog/rzv2h_wdt.c
@@ -89,18 +89,26 @@ static int rzv2h_wdt_ping(struct watchdog_device *wdev)
return 0;
}
-static void rzt2h_wdt_wdtdcr_count_stop(struct rzv2h_wdt_priv *priv)
+static void rzt2h_wdt_wdtdcr_count_ctrl(struct rzv2h_wdt_priv *priv, bool start)
{
u32 reg = readl(priv->wdtdcr + WDTDCR);
- writel(reg | WDTDCR_WDTSTOPCTRL, priv->wdtdcr + WDTDCR);
+ if (start)
+ reg &= ~WDTDCR_WDTSTOPCTRL;
+ else
+ reg |= WDTDCR_WDTSTOPCTRL;
+
+ writel(reg, priv->wdtdcr + WDTDCR);
}
-static void rzt2h_wdt_wdtdcr_count_start(struct rzv2h_wdt_priv *priv)
+static void rzt2h_wdt_wdtdcr_count_stop(struct rzv2h_wdt_priv *priv)
{
- u32 reg = readl(priv->wdtdcr + WDTDCR);
+ rzt2h_wdt_wdtdcr_count_ctrl(priv, false);
+}
- writel(reg & ~WDTDCR_WDTSTOPCTRL, priv->wdtdcr + WDTDCR);
+static void rzt2h_wdt_wdtdcr_count_start(struct rzv2h_wdt_priv *priv)
+{
+ rzt2h_wdt_wdtdcr_count_ctrl(priv, true);
}
static void rzv2h_wdt_setup(struct watchdog_device *wdev, u16 wdtcr)
--
2.54.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [RFC PATCH 7/9] watchdog: rzv2h: Add syscon support for RZ/T2H and RZ/N2H WDT control register
2026-05-11 18:50 [RFC PATCH 0/9] Add System Controller support for RZ/T2H and RZ/N2H SoCs Prabhakar
` (5 preceding siblings ...)
2026-05-11 18:50 ` [RFC PATCH 6/9] watchdog: rzv2h: Refactor WDTDCR start/stop handling Prabhakar
@ 2026-05-11 18:50 ` Prabhakar
2026-05-13 2:27 ` sashiko-bot
2026-05-11 18:50 ` [RFC PATCH 8/9] arm64: dts: renesas: r9a09g077: Use SYS syscon for WDTDCR access Prabhakar
2026-05-11 18:50 ` [RFC PATCH 9/9] arm64: dts: renesas: r9a09g087: " Prabhakar
8 siblings, 1 reply; 15+ messages in thread
From: Prabhakar @ 2026-05-11 18:50 UTC (permalink / raw)
To: Geert Uytterhoeven, Michael Turquette, Stephen Boyd, Brian Masney,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Wim Van Sebroeck,
Guenter Roeck, Magnus Damm, Philipp Zabel
Cc: linux-renesas-soc, linux-clk, devicetree, linux-kernel,
linux-watchdog, Prabhakar, Biju Das, Fabrizio Castro,
Lad Prabhakar
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
On RZ/T2H and RZ/N2H SoCs the WDTDCR register resides in the second
region of the System Controller (SYS) block at 0x81290000, which is
shared with other peripherals. A dedicated SYS driver now manages this
region and exposes it via a syscon regmap interface, making direct
mapping of the WDTDCR register by the WDT driver no longer viable.
Update the WDT driver to support both access methods to maintain
backward compatibility with old device trees that use direct mapping:
New binding (syscon):
reg = <0 0x80082800 0 0x400>;
renesas,sys = <&sys1 2>;
Old binding (direct mapping):
reg = <0 0x80082800 0 0x400>,
<0 0x81295108 0 0x04>;
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
drivers/watchdog/Kconfig | 1 +
drivers/watchdog/rzv2h_wdt.c | 96 +++++++++++++++++++++++++++++-------
2 files changed, 79 insertions(+), 18 deletions(-)
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 6a9695a16d5e..37b71e2cd1af 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -1007,6 +1007,7 @@ config RENESAS_RZV2HWDT
depends on ARCH_RENESAS || COMPILE_TEST
depends on PM || COMPILE_TEST
select WATCHDOG_CORE
+ select MFD_SYSCON
help
This driver adds watchdog support for the integrated watchdogs in the
Renesas RZ/{G3E,V2H(P)} SoCs. These watchdogs can be used to reset a
diff --git a/drivers/watchdog/rzv2h_wdt.c b/drivers/watchdog/rzv2h_wdt.c
index e9545b8f5fd0..e14ff853a4e9 100644
--- a/drivers/watchdog/rzv2h_wdt.c
+++ b/drivers/watchdog/rzv2h_wdt.c
@@ -8,10 +8,12 @@
#include <linux/delay.h>
#include <linux/io.h>
#include <linux/kernel.h>
+#include <linux/mfd/syscon.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
+#include <linux/regmap.h>
#include <linux/reset.h>
#include <linux/units.h>
#include <linux/watchdog.h>
@@ -45,6 +47,10 @@
#define WDT_DEFAULT_TIMEOUT 60U
+#define RZT2H_WDT_MAX_INSTANCES 6
+
+#define RZT2H_WDTDCR_OFFSET(n) (0x5100 + (n) * 4)
+
static bool nowayout = WATCHDOG_NOWAYOUT;
module_param(nowayout, bool, 0);
MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
@@ -65,6 +71,11 @@ struct rzv2h_of_data {
bool wdtdcr;
};
+struct rzv2h_sys_wdtdcr {
+ struct regmap *regmap;
+ unsigned int offset;
+};
+
struct rzv2h_wdt_priv {
void __iomem *base;
void __iomem *wdtdcr;
@@ -73,6 +84,7 @@ struct rzv2h_wdt_priv {
struct reset_control *rstc;
struct watchdog_device wdev;
const struct rzv2h_of_data *of_data;
+ struct rzv2h_sys_wdtdcr sysc;
};
static int rzv2h_wdt_ping(struct watchdog_device *wdev)
@@ -89,9 +101,18 @@ static int rzv2h_wdt_ping(struct watchdog_device *wdev)
return 0;
}
-static void rzt2h_wdt_wdtdcr_count_ctrl(struct rzv2h_wdt_priv *priv, bool start)
+static int rzt2h_wdt_wdtdcr_count_ctrl(struct rzv2h_wdt_priv *priv, bool start)
{
- u32 reg = readl(priv->wdtdcr + WDTDCR);
+ struct rzv2h_sys_wdtdcr *sysc = &priv->sysc;
+ u32 reg;
+
+ if (sysc->regmap) {
+ return regmap_update_bits(sysc->regmap, sysc->offset,
+ WDTDCR_WDTSTOPCTRL,
+ start ? 0 : WDTDCR_WDTSTOPCTRL);
+ }
+
+ reg = readl(priv->wdtdcr + WDTDCR);
if (start)
reg &= ~WDTDCR_WDTSTOPCTRL;
@@ -99,16 +120,18 @@ static void rzt2h_wdt_wdtdcr_count_ctrl(struct rzv2h_wdt_priv *priv, bool start)
reg |= WDTDCR_WDTSTOPCTRL;
writel(reg, priv->wdtdcr + WDTDCR);
+
+ return 0;
}
-static void rzt2h_wdt_wdtdcr_count_stop(struct rzv2h_wdt_priv *priv)
+static int rzt2h_wdt_wdtdcr_count_stop(struct rzv2h_wdt_priv *priv)
{
- rzt2h_wdt_wdtdcr_count_ctrl(priv, false);
+ return rzt2h_wdt_wdtdcr_count_ctrl(priv, false);
}
-static void rzt2h_wdt_wdtdcr_count_start(struct rzv2h_wdt_priv *priv)
+static int rzt2h_wdt_wdtdcr_count_start(struct rzv2h_wdt_priv *priv)
{
- rzt2h_wdt_wdtdcr_count_ctrl(priv, true);
+ return rzt2h_wdt_wdtdcr_count_ctrl(priv, true);
}
static void rzv2h_wdt_setup(struct watchdog_device *wdev, u16 wdtcr)
@@ -158,8 +181,14 @@ static int rzv2h_wdt_start(struct watchdog_device *wdev)
rzv2h_wdt_setup(wdev, of_data->cks_max | WDTCR_RPSS_100 |
WDTCR_RPES_0 | of_data->tops);
- if (priv->of_data->wdtdcr)
- rzt2h_wdt_wdtdcr_count_start(priv);
+ if (priv->of_data->wdtdcr) {
+ ret = rzt2h_wdt_wdtdcr_count_start(priv);
+ if (ret) {
+ reset_control_assert(priv->rstc);
+ pm_runtime_put(wdev->parent);
+ return ret;
+ }
+ }
/*
* Down counting starts after writing the sequence 00h -> FFh to the
@@ -179,8 +208,13 @@ static int rzv2h_wdt_stop(struct watchdog_device *wdev)
if (ret)
return ret;
- if (priv->of_data->wdtdcr)
- rzt2h_wdt_wdtdcr_count_stop(priv);
+ if (priv->of_data->wdtdcr) {
+ ret = rzt2h_wdt_wdtdcr_count_stop(priv);
+ if (ret) {
+ reset_control_deassert(priv->rstc);
+ return ret;
+ }
+ }
pm_runtime_put(wdev->parent);
@@ -196,9 +230,10 @@ static int rzv2h_wdt_restart(struct watchdog_device *wdev,
unsigned long action, void *data)
{
struct rzv2h_wdt_priv *priv = watchdog_get_drvdata(wdev);
+ bool active = watchdog_active(wdev);
int ret;
- if (!watchdog_active(wdev)) {
+ if (!active) {
ret = clk_enable(priv->pclk);
if (ret)
return ret;
@@ -242,8 +277,17 @@ static int rzv2h_wdt_restart(struct watchdog_device *wdev,
rzv2h_wdt_setup(wdev, priv->of_data->cks_min | WDTCR_RPSS_25 |
WDTCR_RPES_75 | WDTCR_TOPS_1024);
- if (priv->of_data->wdtdcr)
- rzt2h_wdt_wdtdcr_count_start(priv);
+ if (priv->of_data->wdtdcr) {
+ ret = rzt2h_wdt_wdtdcr_count_start(priv);
+ if (ret) {
+ if (!active) {
+ reset_control_assert(priv->rstc);
+ clk_disable(priv->oscclk);
+ clk_disable(priv->pclk);
+ }
+ return ret;
+ }
+ }
rzv2h_wdt_ping(wdev);
@@ -264,21 +308,37 @@ static const struct watchdog_ops rzv2h_wdt_ops = {
static int rzt2h_wdt_wdtdcr_init(struct platform_device *pdev,
struct rzv2h_wdt_priv *priv)
{
+ struct device_node *np = pdev->dev.of_node;
int ret;
- priv->wdtdcr = devm_platform_ioremap_resource(pdev, 1);
- if (IS_ERR(priv->wdtdcr))
- return PTR_ERR(priv->wdtdcr);
+ if (of_property_present(np, "renesas,sys")) {
+ struct rzv2h_sys_wdtdcr *sysc = &priv->sysc;
+ unsigned int wdt_index;
+
+ sysc->regmap = syscon_regmap_lookup_by_phandle_args(np, "renesas,sys",
+ 1, &wdt_index);
+ if (IS_ERR(sysc->regmap))
+ return PTR_ERR(sysc->regmap);
+
+ if (wdt_index >= RZT2H_WDT_MAX_INSTANCES)
+ return -EINVAL;
+
+ sysc->offset = RZT2H_WDTDCR_OFFSET(wdt_index);
+ } else {
+ priv->wdtdcr = devm_platform_ioremap_resource(pdev, 1);
+ if (IS_ERR(priv->wdtdcr))
+ return PTR_ERR(priv->wdtdcr);
+ }
ret = pm_runtime_resume_and_get(&pdev->dev);
if (ret)
return ret;
- rzt2h_wdt_wdtdcr_count_stop(priv);
+ ret = rzt2h_wdt_wdtdcr_count_stop(priv);
pm_runtime_put(&pdev->dev);
- return 0;
+ return ret;
}
static int rzv2h_wdt_probe(struct platform_device *pdev)
--
2.54.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [RFC PATCH 8/9] arm64: dts: renesas: r9a09g077: Use SYS syscon for WDTDCR access
2026-05-11 18:50 [RFC PATCH 0/9] Add System Controller support for RZ/T2H and RZ/N2H SoCs Prabhakar
` (6 preceding siblings ...)
2026-05-11 18:50 ` [RFC PATCH 7/9] watchdog: rzv2h: Add syscon support for RZ/T2H and RZ/N2H WDT control register Prabhakar
@ 2026-05-11 18:50 ` Prabhakar
2026-05-13 2:55 ` sashiko-bot
2026-05-11 18:50 ` [RFC PATCH 9/9] arm64: dts: renesas: r9a09g087: " Prabhakar
8 siblings, 1 reply; 15+ messages in thread
From: Prabhakar @ 2026-05-11 18:50 UTC (permalink / raw)
To: Geert Uytterhoeven, Michael Turquette, Stephen Boyd, Brian Masney,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Wim Van Sebroeck,
Guenter Roeck, Magnus Damm, Philipp Zabel
Cc: linux-renesas-soc, linux-clk, devicetree, linux-kernel,
linux-watchdog, Prabhakar, Biju Das, Fabrizio Castro,
Lad Prabhakar
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
The WDTDCR registers for wdt0-wdt5 reside in the second region of the
System Controller (SYS) block at 0x81290000, which is now managed by
the dedicated SYS driver and exposed via a unified syscon regmap
interface.
Replace the direct mapping of the individual WDTDCR registers with the
new "renesas,sys" phandle property pointing to the SYS syscon node.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
arch/arm64/boot/dts/renesas/r9a09g077.dtsi | 24 +++++++++++-----------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/arch/arm64/boot/dts/renesas/r9a09g077.dtsi b/arch/arm64/boot/dts/renesas/r9a09g077.dtsi
index 59e5de743826..b076bea9cb70 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g077.dtsi
+++ b/arch/arm64/boot/dts/renesas/r9a09g077.dtsi
@@ -327,61 +327,61 @@ channel1 {
wdt0: watchdog@80082000 {
compatible = "renesas,r9a09g077-wdt";
- reg = <0 0x80082000 0 0x400>,
- <0 0x81295100 0 0x04>;
+ reg = <0 0x80082000 0 0x400>;
clocks = <&cpg CPG_CORE R9A09G077_CLK_PCLKL>;
clock-names = "pclk";
power-domains = <&cpg>;
+ renesas,sys = <&sys1 0>;
status = "disabled";
};
wdt1: watchdog@80082400 {
compatible = "renesas,r9a09g077-wdt";
- reg = <0 0x80082400 0 0x400>,
- <0 0x81295104 0 0x04>;
+ reg = <0 0x80082400 0 0x400>;
clocks = <&cpg CPG_CORE R9A09G077_CLK_PCLKL>;
clock-names = "pclk";
power-domains = <&cpg>;
+ renesas,sys = <&sys1 1>;
status = "disabled";
};
wdt2: watchdog@80082800 {
compatible = "renesas,r9a09g077-wdt";
- reg = <0 0x80082800 0 0x400>,
- <0 0x81295108 0 0x04>;
+ reg = <0 0x80082800 0 0x400>;
clocks = <&cpg CPG_CORE R9A09G077_CLK_PCLKL>;
clock-names = "pclk";
power-domains = <&cpg>;
+ renesas,sys = <&sys1 2>;
status = "disabled";
};
wdt3: watchdog@80082c00 {
compatible = "renesas,r9a09g077-wdt";
- reg = <0 0x80082c00 0 0x400>,
- <0 0x8129510c 0 0x04>;
+ reg = <0 0x80082c00 0 0x400>;
clocks = <&cpg CPG_CORE R9A09G077_CLK_PCLKL>;
clock-names = "pclk";
power-domains = <&cpg>;
+ renesas,sys = <&sys1 3>;
status = "disabled";
};
wdt4: watchdog@80083000 {
compatible = "renesas,r9a09g077-wdt";
- reg = <0 0x80083000 0 0x400>,
- <0 0x81295110 0 0x04>;
+ reg = <0 0x80083000 0 0x400>;
clocks = <&cpg CPG_CORE R9A09G077_CLK_PCLKL>;
clock-names = "pclk";
power-domains = <&cpg>;
+ renesas,sys = <&sys1 4>;
status = "disabled";
};
wdt5: watchdog@80083400 {
compatible = "renesas,r9a09g077-wdt";
- reg = <0 0x80083400 0 0x400>,
- <0 0x81295114 0 0x04>;
+ reg = <0 0x80083400 0 0x400>;
clocks = <&cpg CPG_CORE R9A09G077_CLK_PCLKL>;
clock-names = "pclk";
power-domains = <&cpg>;
+ renesas,sys = <&sys1 5>;
status = "disabled";
};
--
2.54.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [RFC PATCH 9/9] arm64: dts: renesas: r9a09g087: Use SYS syscon for WDTDCR access
2026-05-11 18:50 [RFC PATCH 0/9] Add System Controller support for RZ/T2H and RZ/N2H SoCs Prabhakar
` (7 preceding siblings ...)
2026-05-11 18:50 ` [RFC PATCH 8/9] arm64: dts: renesas: r9a09g077: Use SYS syscon for WDTDCR access Prabhakar
@ 2026-05-11 18:50 ` Prabhakar
8 siblings, 0 replies; 15+ messages in thread
From: Prabhakar @ 2026-05-11 18:50 UTC (permalink / raw)
To: Geert Uytterhoeven, Michael Turquette, Stephen Boyd, Brian Masney,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Wim Van Sebroeck,
Guenter Roeck, Magnus Damm, Philipp Zabel
Cc: linux-renesas-soc, linux-clk, devicetree, linux-kernel,
linux-watchdog, Prabhakar, Biju Das, Fabrizio Castro,
Lad Prabhakar
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
The WDTDCR registers for wdt0-wdt5 reside in the second region of the
System Controller (SYSC) block at 0x81290000, which is now managed by
the dedicated SYSC driver and exposed via a unified syscon regmap
interface.
Replace the direct mapping of the individual WDTDCR registers with the
new "renesas,sys" phandle property pointing to the SYS syscon
node.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
arch/arm64/boot/dts/renesas/r9a09g087.dtsi | 24 +++++++++++-----------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/arch/arm64/boot/dts/renesas/r9a09g087.dtsi b/arch/arm64/boot/dts/renesas/r9a09g087.dtsi
index 170d033dcdb3..c6597c8402d6 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g087.dtsi
+++ b/arch/arm64/boot/dts/renesas/r9a09g087.dtsi
@@ -327,61 +327,61 @@ channel1 {
wdt0: watchdog@80082000 {
compatible = "renesas,r9a09g087-wdt", "renesas,r9a09g077-wdt";
- reg = <0 0x80082000 0 0x400>,
- <0 0x81295100 0 0x04>;
+ reg = <0 0x80082000 0 0x400>;
clocks = <&cpg CPG_CORE R9A09G087_CLK_PCLKL>;
clock-names = "pclk";
power-domains = <&cpg>;
+ renesas,sys = <&sys1 0>;
status = "disabled";
};
wdt1: watchdog@80082400 {
compatible = "renesas,r9a09g087-wdt", "renesas,r9a09g077-wdt";
- reg = <0 0x80082400 0 0x400>,
- <0 0x81295104 0 0x04>;
+ reg = <0 0x80082400 0 0x400>;
clocks = <&cpg CPG_CORE R9A09G087_CLK_PCLKL>;
clock-names = "pclk";
power-domains = <&cpg>;
+ renesas,sys = <&sys1 1>;
status = "disabled";
};
wdt2: watchdog@80082800 {
compatible = "renesas,r9a09g087-wdt", "renesas,r9a09g077-wdt";
- reg = <0 0x80082800 0 0x400>,
- <0 0x81295108 0 0x04>;
+ reg = <0 0x80082800 0 0x400>;
clocks = <&cpg CPG_CORE R9A09G087_CLK_PCLKL>;
clock-names = "pclk";
power-domains = <&cpg>;
+ renesas,sys = <&sys1 2>;
status = "disabled";
};
wdt3: watchdog@80082c00 {
compatible = "renesas,r9a09g087-wdt", "renesas,r9a09g077-wdt";
- reg = <0 0x80082c00 0 0x400>,
- <0 0x8129510c 0 0x04>;
+ reg = <0 0x80082c00 0 0x400>;
clocks = <&cpg CPG_CORE R9A09G087_CLK_PCLKL>;
clock-names = "pclk";
power-domains = <&cpg>;
+ renesas,sys = <&sys1 3>;
status = "disabled";
};
wdt4: watchdog@80083000 {
compatible = "renesas,r9a09g087-wdt", "renesas,r9a09g077-wdt";
- reg = <0 0x80083000 0 0x400>,
- <0 0x81295110 0 0x04>;
+ reg = <0 0x80083000 0 0x400>;
clocks = <&cpg CPG_CORE R9A09G087_CLK_PCLKL>;
clock-names = "pclk";
power-domains = <&cpg>;
+ renesas,sys = <&sys1 4>;
status = "disabled";
};
wdt5: watchdog@80083400 {
compatible = "renesas,r9a09g087-wdt", "renesas,r9a09g077-wdt";
- reg = <0 0x80083400 0 0x400>,
- <0 0x81295114 0 0x04>;
+ reg = <0 0x80083400 0 0x400>;
clocks = <&cpg CPG_CORE R9A09G087_CLK_PCLKL>;
clock-names = "pclk";
power-domains = <&cpg>;
+ renesas,sys = <&sys1 5>;
status = "disabled";
};
--
2.54.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [RFC PATCH 1/9] dt-bindings: clock: renesas,cpg-mssr: Support RZ/T2H system controllers
2026-05-11 18:50 ` [RFC PATCH 1/9] dt-bindings: clock: renesas,cpg-mssr: Support RZ/T2H system controllers Prabhakar
@ 2026-05-12 22:48 ` sashiko-bot
0 siblings, 0 replies; 15+ messages in thread
From: sashiko-bot @ 2026-05-12 22:48 UTC (permalink / raw)
To: Prabhakar
Cc: robh, linux-watchdog, conor+dt, devicetree, wsa+renesas, krzk+dt
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [Medium] The `ranges` property is not restricted in the `else` block for non-target SoCs, violating the commit's intent.
- [Medium] Properties explicitly documented as required for the RZ/T2H SoC are not enforced in the schema's `required` list.
- [Medium] The commit message scope contradicts the implementation by silently including the RZ/N2H SoC.
--
commit 05c781ffa6d79749c3fc36af69e7b0775046bc24
Author: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
dt-bindings: clock: renesas,cpg-mssr: Support RZ/T2H system controllers
This commit adds support for system controller child nodes within the
CPG/MSSR address space for the RZ/T2H SoC. It adds #address-cells,
#size-cells, and ranges properties to the CPG/MSSR binding and restricts
them to the target hardware.
> dt-bindings: clock: renesas,cpg-mssr: Support RZ/T2H system controllers
>
> The RZ/T2H SoC features system controller blocks for low-power management
> and access control that reside within the CPG/MSSR address space. To
> properly represent these hardware modules, allow them to be defined as
> child nodes of the CPG/MSSR controller.
>
> Update the CPG/MSSR binding to support child nodes by adding
> system-controller child nodes using a patternProperty, requiring a reg
> property and a renesas,sys-block property to identify the controller
> instance.
>
> Restrict these new properties to the RZ/T2H SoC to ensure existing
> bindings for other Renesas SoCs remain unaffected.
This isn't a bug, but the commit message explicitly claims to restrict
these new properties to the RZ/T2H SoC. However, the schema conditionally
allows these properties for the RZ/N2H SoC as well. Could the commit
message be updated to mention RZ/N2H if it is also intended to use these
properties?
> diff --git a/Documentation/devicetree/bindings/clock/renesas,cpg-mssr.yaml b/Documentation/devicetree/bindings/clock/renesas,cpg-mssr.yaml
> index 655154534c0f1..ec13fcaf763e7 100644
> --- a/Documentation/devicetree/bindings/clock/renesas,cpg-mssr.yaml
> +++ b/Documentation/devicetree/bindings/clock/renesas,cpg-mssr.yaml
[ ... ]
> + '#address-cells':
> + description:
> + Required for the RZ/T2H SoC to define the address space for child
> + system-controller nodes.
> + const: 2
> +
> + '#size-cells':
> + description:
> + Required for the RZ/T2H SoC to define the size of the register
> + blocks for child system-controller nodes.
> + const: 2
> +
> + ranges:
> + description:
> + Required for the RZ/T2H SoC to provide 1:1 address translation
> + from the child system-controller nodes to the CPU address space.
Since these properties are explicitly documented as "Required for the RZ/T2H
SoC", should they be enforced in the schema's required list for the target
SoC? Without this enforcement, incomplete device tree nodes missing these
properties might silently pass validation.
[ ... ]
> @@ -126,6 +161,10 @@ allOf:
> properties:
> reg:
> maxItems: 1
> + '#address-cells': false
> + '#size-cells': false
Does this else block also need to include ranges: false?
While #address-cells and #size-cells are correctly disabled for non-target
SoCs, ranges appears to be omitted. This could globally allow ranges for
all other Renesas SoCs, potentially letting invalid device tree
configurations silently pass schema validation on older hardware.
> + patternProperties:
> + "^system-controller@[0-9a-f]+$": false
> - if:
> not:
> properties:
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260511185058.1926869-1-prabhakar.mahadev-lad.rj@bp.renesas.com?part=1
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [RFC PATCH 2/9] clk: renesas: r9a09g077: Add SYSC regmap support
2026-05-11 18:50 ` [RFC PATCH 2/9] clk: renesas: r9a09g077: Add SYSC regmap support Prabhakar
@ 2026-05-13 0:12 ` sashiko-bot
0 siblings, 0 replies; 15+ messages in thread
From: sashiko-bot @ 2026-05-13 0:12 UTC (permalink / raw)
To: Prabhakar
Cc: conor+dt, devicetree, wsa+renesas, krzk+dt, linux-watchdog, robh
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Use-After-Free vulnerability due to globally registering a devres-managed regmap.
- [Medium] Memory leak of devres allocations for non-matching child nodes during initialization.
--
commit 42e8a93f573528685964e7e4e8583fa90ffb5b6b
Author: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
clk: renesas: r9a09g077: Add SYSC regmap support
This commit adds System Controller (SYSC) regmap support for the RZ/T2H SoC.
It implements support for creating regmaps for SYSC blocks defined as
child nodes within the CPG address space, and registers them using
of_syscon_register_regmap().
> diff --git a/drivers/clk/renesas/r9a09g077-cpg.c b/drivers/clk/renesas/r9a09g077-cpg.c
> --- a/drivers/clk/renesas/r9a09g077-cpg.c
> +++ b/drivers/clk/renesas/r9a09g077-cpg.c
[ ... ]
> @@ -514,6 +514,172 @@ r9a09g077_cpg_clk_register(struct device *dev, const struct cpg_core_clk *core,
[ ... ]
> +static int r9a09g077_sysc_init(struct device *dev)
> +{
> + struct device_node *child, *np = dev->of_node;
> +
> + for_each_child_of_node(np, child) {
> + struct regmap_config *regmap_cfg __free(kfree) = kzalloc_obj(*regmap_cfg);
> + struct r9a09g077_sysc_reg *sysc_reg;
> + struct regmap *regmap;
> + void __iomem *base;
> + char *name;
> + u32 index;
> + int ret;
> +
> + sysc_reg = devm_kzalloc(dev, sizeof(*sysc_reg), GFP_KERNEL);
> + if (!sysc_reg) {
> + of_node_put(child);
> + return -ENOMEM;
> + }
> +
> + if (!regmap_cfg) {
> + of_node_put(child);
> + return -ENOMEM;
> + }
> +
> + if (!of_node_name_eq(child, "system-controller"))
> + continue;
Does this leak devm-allocated memory for every child node that isn't named
system-controller?
The devm_kzalloc() call binds the memory to the parent device's lifetime,
not the loop scope. When the loop skips a non-matching node via continue,
the sysc_reg allocation remains until the device is removed.
Could the of_node_name_eq() check be moved above the memory allocations?
[ ... ]
> + regmap = devm_regmap_init(dev, &rzt2h_sys_regmap_bus, sysc_reg, regmap_cfg);
> + if (IS_ERR(regmap)) {
> + of_node_put(child);
> + return PTR_ERR(regmap);
> + }
> +
> + ret = of_syscon_register_regmap(child, regmap);
> + if (ret) {
> + of_node_put(child);
> + return ret;
> + }
> + }
Can this sequence cause a use-after-free if device initialization fails later?
The of_syscon_register_regmap() function adds the regmap to a global
syscon_list, but there is no corresponding unregister function to remove it.
If a subsequent step in the probe path fails, such as of_clk_add_provider()
failing in cpg_mssr_common_init(), the driver core will tear down all
device-managed resources. This will free the regmap and unmap its I/O memory.
Because the freed regmap remains in the global syscon_list, a subsequent
syscon_node_to_regmap() lookup by a consumer would return a dangling pointer,
leading to a use-after-free and a potential MMIO page fault.
> +
> + return 0;
> +}
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260511185058.1926869-1-prabhakar.mahadev-lad.rj@bp.renesas.com?part=2
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [RFC PATCH 5/9] dt-bindings: watchdog: renesas,r9a09g057-wdt: Add SYS syscon support
2026-05-11 18:50 ` [RFC PATCH 5/9] dt-bindings: watchdog: renesas,r9a09g057-wdt: Add SYS syscon support Prabhakar
@ 2026-05-13 1:44 ` sashiko-bot
0 siblings, 0 replies; 15+ messages in thread
From: sashiko-bot @ 2026-05-13 1:44 UTC (permalink / raw)
To: Prabhakar
Cc: krzk+dt, conor+dt, devicetree, wsa+renesas, robh, linux-watchdog
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Low] The deprecation message instructs users to pass a register offset via the `renesas,sys` property, which directly contradicts the property's definition that explicitly expects an IP instance index.
--
commit 2f7ddc85a4b879b8b32b8404088f4fafc9c07fd0
Author: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
dt-bindings: watchdog: renesas,r9a09g057-wdt: Add SYS syscon support
On the Renesas RZ/T2H SoC, the Watchdog Timer Control Register (WDTDCR) resides
within the System Controller (SYS) block rather than the WDT address space
itself. This commit introduces the renesas,sys phandle-array property to allow
the WDT driver to access its control register via the system controller and
deprecates the use of a second reg entry.
> diff --git a/Documentation/devicetree/bindings/watchdog/renesas,r9a09g057-wdt.yaml b/Documentation/devicetree/bindings/watchdog/renesas,r9a09g057-wdt.yaml
> index 099200c4f1364..2f32c7401def0 100644
> --- a/Documentation/devicetree/bindings/watchdog/renesas,r9a09g057-wdt.yaml
> +++ b/Documentation/devicetree/bindings/watchdog/renesas,r9a09g057-wdt.yaml
> @@ -48,6 +48,17 @@ properties:
> resets:
> maxItems: 1
>
> + renesas,sys:
> + description:
> + System controller registers control the start/stop of the WDT, and halt debug.
> + $ref: /schemas/types.yaml#/definitions/phandle-array
> + items:
> + - items:
> + - description: phandle to system controller
> + - description: watchdog IP instance index
> + minimum: 0
> + maximum: 5
> +
[ ... ]
> else:
> properties:
> clocks:
> maxItems: 1
> clock-names:
> maxItems: 1
> - reg:
> - minItems: 2
> resets: false
> + allOf:
> + - if:
> + required:
> + - renesas,sys
> + then:
> + properties:
> + reg:
> + maxItems: 1
> + else:
> + properties:
> + reg:
> + description: Deprecated. Use renesas,sys to pass the offset
> + of WDTDCR register instead.
Is this description accurate?
The description instructs users to use renesas,sys to pass the offset of the
WDTDCR register, but the definition of renesas,sys above explicitly expects the
watchdog IP instance index, bounded between 0 and 5.
Does this conflicting information need to be updated so users do not mistakenly
pass register offsets and cause device tree schema validation failures?
> + minItems: 2
> + deprecated: true
>
> additionalProperties: false
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260511185058.1926869-1-prabhakar.mahadev-lad.rj@bp.renesas.com?part=5
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [RFC PATCH 7/9] watchdog: rzv2h: Add syscon support for RZ/T2H and RZ/N2H WDT control register
2026-05-11 18:50 ` [RFC PATCH 7/9] watchdog: rzv2h: Add syscon support for RZ/T2H and RZ/N2H WDT control register Prabhakar
@ 2026-05-13 2:27 ` sashiko-bot
0 siblings, 0 replies; 15+ messages in thread
From: sashiko-bot @ 2026-05-13 2:27 UTC (permalink / raw)
To: Prabhakar
Cc: conor+dt, linux-watchdog, krzk+dt, devicetree, wsa+renesas, robh
Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
- [Critical] Calling syscon `regmap_update_bits()` in the watchdog restart handler causes sleep-in-atomic BUGs and deadlocks.
- [High] Propagating non-fatal syscon errors aborts the system restart sequence.
- [High] Flawed error recovery in `rzv2h_wdt_stop()` leaves hardware active but unconfigured.
- [High] Asynchronous `pm_runtime_put()` on probe error paths leads to permanent power state leaks.
--
commit 350f84b9c5fd68e22e1aff72f286a475ec335167
Author: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
watchdog: rzv2h: Add syscon support for RZ/T2H and RZ/N2H WDT control register
This commit adds syscon support for accessing the WDTDCR register on
RZ/T2H and RZ/N2H SoCs. It updates the WDT driver to support both a
dedicated syscon regmap interface and direct mapping for backward
compatibility.
> diff --git a/drivers/watchdog/rzv2h_wdt.c b/drivers/watchdog/rzv2h_wdt.c
> index e9545b8f5fd09..e14ff853a4e9f 100644
> --- a/drivers/watchdog/rzv2h_wdt.c
> +++ b/drivers/watchdog/rzv2h_wdt.c
[ ... ]
> @@ -179,8 +208,13 @@ static int rzv2h_wdt_stop(struct watchdog_device *wdev)
> if (ret)
> return ret;
>
> - if (priv->of_data->wdtdcr)
> - rzt2h_wdt_wdtdcr_count_stop(priv);
> + if (priv->of_data->wdtdcr) {
> + ret = rzt2h_wdt_wdtdcr_count_stop(priv);
> + if (ret) {
> + reset_control_deassert(priv->rstc);
> + return ret;
> + }
> + }
Does error recovery here leave the hardware active but unconfigured?
Since reset_control_assert() was called earlier in this function, the
configuration registers are cleared. If we deassert the reset and return
an error, the watchdog core assumes the stop operation failed and keeps the
WDOG_HW_RUNNING flag active, causing its background worker to continue
calling rzv2h_wdt_ping().
Could pinging the unconfigured hardware start the watchdog with arbitrary
default values and trigger an immediate, unintended system reset?
[ ... ]
> @@ -242,8 +277,17 @@ static int rzv2h_wdt_restart(struct watchdog_device *wdev,
> rzv2h_wdt_setup(wdev, priv->of_data->cks_min | WDTCR_RPSS_25 |
> WDTCR_RPES_75 | WDTCR_TOPS_1024);
>
> - if (priv->of_data->wdtdcr)
> - rzt2h_wdt_wdtdcr_count_start(priv);
> + if (priv->of_data->wdtdcr) {
> + ret = rzt2h_wdt_wdtdcr_count_start(priv);
> + if (ret) {
> + if (!active) {
> + reset_control_assert(priv->rstc);
> + clk_disable(priv->oscclk);
> + clk_disable(priv->pclk);
> + }
> + return ret;
> + }
> + }
Does using regmap_update_bits() via rzt2h_wdt_wdtdcr_count_start() in this
restart handler cause sleep-in-atomic or deadlock issues?
Restart handlers execute in atomic context with local interrupts disabled
during the machine_restart() sequence. Syscon regmaps use spinlock_t, which
sleeps on PREEMPT_RT kernels.
Additionally, since the syscon is shared with other peripherals, if another
CPU was interrupted and stopped while holding the regmap spinlock, could
this spin indefinitely and hang the system?
Is it safe to return early on syscon errors here?
rzv2h_wdt_restart() is a system reboot handler. By returning early, it skips
rzv2h_wdt_ping(), which is the operation that actually triggers the hardware
reset. Aborting the restart sequence because a shared control register
failed to update guarantees the system will hang instead of rebooting.
Should the restart handler ignore non-fatal setup errors and make a
best-effort attempt to trigger the reset?
[ ... ]
> @@ -264,21 +308,37 @@ static const struct watchdog_ops rzv2h_wdt_ops = {
> static int rzt2h_wdt_wdtdcr_init(struct platform_device *pdev,
> struct rzv2h_wdt_priv *priv)
> {
> + struct device_node *np = pdev->dev.of_node;
> int ret;
[ ... ]
> ret = pm_runtime_resume_and_get(&pdev->dev);
> if (ret)
> return ret;
>
> - rzt2h_wdt_wdtdcr_count_stop(priv);
> + ret = rzt2h_wdt_wdtdcr_count_stop(priv);
>
> pm_runtime_put(&pdev->dev);
>
> - return 0;
> + return ret;
> }
Could this asynchronous pm_runtime_put() cause a permanent power state leak
on error paths?
If rzt2h_wdt_wdtdcr_count_stop() fails, the function returns an error. This
leads to a probe failure, and the devres teardown immediately calls
pm_runtime_disable().
Since pm_runtime_disable() executes a barrier that cancels any pending
asynchronous suspend requests, the device power domain could be left
permanently powered on in the RPM_ACTIVE state.
Should this use pm_runtime_put_sync() instead when returning an error?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260511185058.1926869-1-prabhakar.mahadev-lad.rj@bp.renesas.com?part=7
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [RFC PATCH 8/9] arm64: dts: renesas: r9a09g077: Use SYS syscon for WDTDCR access
2026-05-11 18:50 ` [RFC PATCH 8/9] arm64: dts: renesas: r9a09g077: Use SYS syscon for WDTDCR access Prabhakar
@ 2026-05-13 2:55 ` sashiko-bot
0 siblings, 0 replies; 15+ messages in thread
From: sashiko-bot @ 2026-05-13 2:55 UTC (permalink / raw)
To: Prabhakar
Cc: wsa+renesas, linux-watchdog, krzk+dt, devicetree, conor+dt, robh
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] Removing the second `reg` entry breaks backward compatibility with older kernels.
--
commit 4d641e4436b59e57d0434635cc0bb0ee418c05e5
Author: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
arm64: dts: renesas: r9a09g077: Use SYS syscon for WDTDCR access
This commit updates the r9a09g077 device tree to use the SYS syscon for
WDTDCR access. It removes the second reg entry from the watchdog nodes and
adds a new renesas,sys phandle property.
> diff --git a/arch/arm64/boot/dts/renesas/r9a09g077.dtsi b/arch/arm64/boot/dts/renesas/r9a09g077.dtsi
> index 59e5de7438261..b076bea9cb709 100644
> --- a/arch/arm64/boot/dts/renesas/r9a09g077.dtsi
> +++ b/arch/arm64/boot/dts/renesas/r9a09g077.dtsi
> @@ -327,61 +327,61 @@ channel1 {
>
> wdt0: watchdog@80082000 {
> compatible = "renesas,r9a09g077-wdt";
> - reg = <0 0x80082000 0 0x400>,
> - <0 0x81295100 0 0x04>;
> + reg = <0 0x80082000 0 0x400>;
Does removing the second reg entry cause a backward compatibility regression
with older kernels?
Device tree is considered a stable ABI, and older kernels lacking the
new syscon driver support might attempt to parse the second reg entry for
the WDTDCR register region.
Because the second entry is removed, devm_platform_ioremap_resource(pdev, 1)
would return an error, causing the watchdog driver to fail to probe.
Could the second reg entry be retained, or a new compatible string
introduced, to preserve DT ABI stability?
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260511185058.1926869-1-prabhakar.mahadev-lad.rj@bp.renesas.com?part=8
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2026-05-13 2:55 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-11 18:50 [RFC PATCH 0/9] Add System Controller support for RZ/T2H and RZ/N2H SoCs Prabhakar
2026-05-11 18:50 ` [RFC PATCH 1/9] dt-bindings: clock: renesas,cpg-mssr: Support RZ/T2H system controllers Prabhakar
2026-05-12 22:48 ` sashiko-bot
2026-05-11 18:50 ` [RFC PATCH 2/9] clk: renesas: r9a09g077: Add SYSC regmap support Prabhakar
2026-05-13 0:12 ` sashiko-bot
2026-05-11 18:50 ` [RFC PATCH 3/9] arm64: dts: renesas: r9a09g077: Add system controller child nodes Prabhakar
2026-05-11 18:50 ` [RFC PATCH 4/9] arm64: dts: renesas: r9a09g087: " Prabhakar
2026-05-11 18:50 ` [RFC PATCH 5/9] dt-bindings: watchdog: renesas,r9a09g057-wdt: Add SYS syscon support Prabhakar
2026-05-13 1:44 ` sashiko-bot
2026-05-11 18:50 ` [RFC PATCH 6/9] watchdog: rzv2h: Refactor WDTDCR start/stop handling Prabhakar
2026-05-11 18:50 ` [RFC PATCH 7/9] watchdog: rzv2h: Add syscon support for RZ/T2H and RZ/N2H WDT control register Prabhakar
2026-05-13 2:27 ` sashiko-bot
2026-05-11 18:50 ` [RFC PATCH 8/9] arm64: dts: renesas: r9a09g077: Use SYS syscon for WDTDCR access Prabhakar
2026-05-13 2:55 ` sashiko-bot
2026-05-11 18:50 ` [RFC PATCH 9/9] arm64: dts: renesas: r9a09g087: " Prabhakar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox