* [PATCH v4 0/8] Add initial USB support for the Renesas RZ/G3S SoC
@ 2025-08-08 6:17 Claudiu
2025-08-08 6:17 ` [PATCH v4 1/8] soc: renesas: rz-sysc: Add syscon/regmap support Claudiu
` (7 more replies)
0 siblings, 8 replies; 15+ messages in thread
From: Claudiu @ 2025-08-08 6:17 UTC (permalink / raw)
To: vkoul, kishon, robh, krzk+dt, conor+dt, p.zabel, geert+renesas,
magnus.damm, yoshihiro.shimoda.uh, biju.das.jz
Cc: claudiu.beznea, linux-phy, devicetree, linux-kernel,
linux-renesas-soc, Claudiu Beznea
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Hi,
Series adds initial USB support for the Renesas RZ/G3S SoC.
Series is split as follows:
- patches 1/8 - add syscon regmap support to SYSC driver support; this
is necessary for the USB PHY CTRL driver to
set the PWRRDY in the SYSC address space
- patches 2-3/8 - fixes on bindings and driver for USB PHY
- patches 4-6/8 - updates the rzg2l-usbphy-ctrl driver and documentation
with support for setting PWRRDY though SYSC
- patches 7-8/12 - add device tree support
Merge strategy, if any:
- patches 1,7-8/8 can go through Renesas tree
- patches 2-3/8 can go through the PHY tree
- patches 4-6/8 can go through the reset tree
Thank you,
Claudiu Beznea
Changes in v4:
- replaced "renesas,sysc-signals" DT property with "renesas,sysc-pwrrdy"
- dropped the "renesas,sysc-signals" property from USB PHY (as proposed
in v3) and let only the USB PHY CTRL driver to handle it as on RZ/G3S
the USB PHY CTRL driver needs to be probed before any other USB driver
- dropped the signal abstraction from SYSC driver as there is no need
for reference counting it now
- adjusted the "soc: renesas: rz-sysc: Add syscon/regmap support" to
comply with the latest review comments
Changes in v3:
- as the basics of the SYSC driver was integrated, only the signal support
was preserved in this series, in a separate patch; patch 01/12 was
adjusted (by addressing the review comments received at [1]) as it is
necessary to build the signal support on top of it
- after long discussions with the internal HW team it has been confirmed
that the relation b/w individual USB specific HW blocks and signals
is like:
┌──────────────────────────────┐
│ │◄── CPG_CLKON_USB.CLK0_ON
│ USB CH0 │
┌──────────────────────────┐ │┌───────────────────────────┐ │◄── CPG_CLKON_USB.CLK2_ON
│ ┌────────┐ ││host controller registers │ │
│ │ │ ││function controller registers│
│ │ PHY0 │◄──┤└───────────────────────────┘ │
│ USB PHY │ │ └────────────▲─────────────────┘
│ └────────┘ │
│ │ CPG_BUS_PERI_COM_MSTOP.MSTOP{6, 5}_ON
│┌──────────────┐ ┌────────┐
││USBPHY control│ │ │
││ registers │ │ PHY1 │ ┌──────────────────────────────┐
│└──────────────┘ │ │◄──┤ USB CH1 │
│ └────────┘ │┌───────────────────────────┐ │◄── CPG_CLKON_USB.CLK1_ON
└─▲───────▲─────────▲──────┘ ││ host controller registers │ │
│ │ │ │└───────────────────────────┘ │
│ │ │ └────────────▲─────────────────┘
│ │ │ │
│ │ │ CPG_BUS_PERI_COM_MSTOP.MSTOP7_ON
│PWRRDY │ │
│ │ CPG_CLK_ON_USB.CLK3_ON
│ │
│ CPG_BUS_PERI_COM_MSTOP.MSTOP4_ON
│
┌────┐
│SYSC│
└────┘
where:
- CPG_CLKON_USB.CLK.CLKX_ON is the register bit controlling the clock X
of different USB blocks, X in {0, 1, 2, 3}
- CPG_BUS_PERI_COM_MSTOP.MSTOPX_ON is the register bit controlling the
MSTOP of different USB blocks, X in {4, 5, 6, 7}
- USB PHY is the USB PHY block exposing 2 ports, port0 and port1, used
by the USB CH0, USB CH1
- SYSC is the system controller block controlling the PWRRDY signal
- USB CHx are individual USB block with host and function capabilities
(USB CH0 have both host and function capabilities, USB CH1 has only
host capabilities)
Due to this, the PWRRDY signal was also passed to the reset-rzg2l-usbphy-ctrl
reset driver (as it controls the USBPHY control registers) and these
are in the USB PHY block controlled by PWRRDY signal.
The PWRRDY signal need to be de-asserted on probe before enabling the module
clocks and the module MSTOP. To avoid any violation of this configuration
sequence, the PWRRDY signal is now controlled by USB PHY driver and the
reset-rzg2l-usbphy-ctrl driver.
As the PHYs gets reset signals from the USB reset controller driver, the
reset-rzg2l-usbphy-ctrl is probed before the USB PHY driver and thus,
in theory, we can drop the signal support (reference counting of the
USB PWRRDY) and configure the USB PWRRDY just in the reset-rzg2l-usbphy-ctrl.
However, to have a proper description of the diagram described above in
device tree and ensure the configuration sequence b/w PRWRDY, CLK and MSTOP
is preserved, the PWRRDY signal is controlled in this series in all the
drivers that work with registers from the USB PHY block.
Please provide your feedback on this solution.
Thank you,
Claudiu
[1] https://lore.kernel.org/all/20250330214945.185725-2-john.madieu.xa@bp.renesas.com/
Changes in v2:
- dropped v1 patches already applied
- added fixes patches (07/14 and 09/14)
- dropped the approach of handling the USB PWRRDY though a reset controller
driver and introduced the signal concept for the SYSC driver; because
of this, most of the work done in v1 was dropped
- per patch changes are listed in individual patches, if any
Christophe JAILLET (1):
phy: renesas: rcar-gen3-usb2: Fix an error handling path in
rcar_gen3_phy_usb2_probe()
Claudiu Beznea (6):
dt-bindings: phy: renesas,usb2-phy: Mark resets as required for RZ/G3S
dt-bindings: reset: renesas,rzg2l-usbphy-ctrl: Document RZ/G3S support
reset: rzg2l-usbphy-ctrl: Add support for USB PWRRDY
reset: rzg2l-usbphy-ctrl: Add support for RZ/G3S SoC
arm64: dts: renesas: r9a08g045: Add USB support
arm64: dts: renesas: rzg3s-smarc: Enable USB support
John Madieu (1):
soc: renesas: rz-sysc: Add syscon/regmap support
.../bindings/phy/renesas,usb2-phy.yaml | 1 +
.../reset/renesas,rzg2l-usbphy-ctrl.yaml | 40 +++++-
arch/arm64/boot/dts/renesas/r9a08g045.dtsi | 118 ++++++++++++++++++
arch/arm64/boot/dts/renesas/rzg3s-smarc.dtsi | 57 +++++++++
drivers/phy/renesas/phy-rcar-gen3-usb2.c | 11 +-
drivers/reset/Kconfig | 1 +
drivers/reset/reset-rzg2l-usbphy-ctrl.c | 70 +++++++++++
drivers/soc/renesas/Kconfig | 1 +
drivers/soc/renesas/r9a08g045-sysc.c | 1 +
drivers/soc/renesas/r9a09g047-sys.c | 1 +
drivers/soc/renesas/r9a09g057-sys.c | 1 +
drivers/soc/renesas/rz-sysc.c | 29 ++++-
drivers/soc/renesas/rz-sysc.h | 2 +
13 files changed, 325 insertions(+), 8 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v4 1/8] soc: renesas: rz-sysc: Add syscon/regmap support
2025-08-08 6:17 [PATCH v4 0/8] Add initial USB support for the Renesas RZ/G3S SoC Claudiu
@ 2025-08-08 6:17 ` Claudiu
2025-08-08 9:29 ` Geert Uytterhoeven
2025-08-08 6:18 ` [PATCH v4 2/8] dt-bindings: phy: renesas,usb2-phy: Mark resets as required for RZ/G3S Claudiu
` (6 subsequent siblings)
7 siblings, 1 reply; 15+ messages in thread
From: Claudiu @ 2025-08-08 6:17 UTC (permalink / raw)
To: vkoul, kishon, robh, krzk+dt, conor+dt, p.zabel, geert+renesas,
magnus.damm, yoshihiro.shimoda.uh, biju.das.jz
Cc: claudiu.beznea, linux-phy, devicetree, linux-kernel,
linux-renesas-soc, John Madieu, Claudiu Beznea
From: John Madieu <john.madieu.xa@bp.renesas.com>
The RZ/G3E system controller has various registers that control or report
some properties specific to individual IPs. The regmap is registered as a
syscon device to allow these IP drivers to access the registers through the
regmap API.
As other RZ SoCs might have custom read/write callbacks or max-offsets,
register a custom regmap configuration.
Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
[claudiu.beznea:
- do not check the match->data validity in rz_sysc_probe() as it is
always valid
- dinamically allocate regmap_cfg]
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v4:
- adjusted the patch description by dropping "add" from
"add register a custom regmap configuration"
- updated the list of changes from Claudiu Beznea
- dynamically allocate the regmap_config as proposed at [2]
- this patch is needed for proper function of USB (as proposed in this
series) that being the reason it is introduced here, as well
[2] https://lore.kernel.org/all/CAMuHMdVyf3Xtpw=LWHrnD2CVQX4xYm=FBHvY_dx9OesHDz5zNg@mail.gmail.com/
Changes in v3:
- none, this patch is new, it was picked from John after he addressed
the review comments received at [1];
- I adjusted as specified in the SoB area, and included it here as it
is the base for the signal support presented in the next commits
[1] https://lore.kernel.org/all/20250330214945.185725-2-john.madieu.xa@bp.renesas.com/
drivers/soc/renesas/Kconfig | 1 +
drivers/soc/renesas/r9a08g045-sysc.c | 1 +
drivers/soc/renesas/r9a09g047-sys.c | 1 +
drivers/soc/renesas/r9a09g057-sys.c | 1 +
drivers/soc/renesas/rz-sysc.c | 29 +++++++++++++++++++++++++++-
drivers/soc/renesas/rz-sysc.h | 2 ++
6 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/drivers/soc/renesas/Kconfig b/drivers/soc/renesas/Kconfig
index 719b7f4f376f..c97e2a183388 100644
--- a/drivers/soc/renesas/Kconfig
+++ b/drivers/soc/renesas/Kconfig
@@ -449,6 +449,7 @@ config RST_RCAR
config SYSC_RZ
bool "System controller for RZ SoCs" if COMPILE_TEST
+ select MFD_SYSCON
config SYSC_R9A08G045
bool "Renesas System controller support for R9A08G045 (RZ/G3S)" if COMPILE_TEST
diff --git a/drivers/soc/renesas/r9a08g045-sysc.c b/drivers/soc/renesas/r9a08g045-sysc.c
index f4db1431e036..0504d4e68761 100644
--- a/drivers/soc/renesas/r9a08g045-sysc.c
+++ b/drivers/soc/renesas/r9a08g045-sysc.c
@@ -20,4 +20,5 @@ static const struct rz_sysc_soc_id_init_data rzg3s_sysc_soc_id_init_data __initc
const struct rz_sysc_init_data rzg3s_sysc_init_data __initconst = {
.soc_id_init_data = &rzg3s_sysc_soc_id_init_data,
+ .max_register = 0xe20,
};
diff --git a/drivers/soc/renesas/r9a09g047-sys.c b/drivers/soc/renesas/r9a09g047-sys.c
index cd2eb7782cfe..2e8426c03050 100644
--- a/drivers/soc/renesas/r9a09g047-sys.c
+++ b/drivers/soc/renesas/r9a09g047-sys.c
@@ -64,4 +64,5 @@ static const struct rz_sysc_soc_id_init_data rzg3e_sys_soc_id_init_data __initco
const struct rz_sysc_init_data rzg3e_sys_init_data = {
.soc_id_init_data = &rzg3e_sys_soc_id_init_data,
+ .max_register = 0x170c,
};
diff --git a/drivers/soc/renesas/r9a09g057-sys.c b/drivers/soc/renesas/r9a09g057-sys.c
index 4c21cc29edbc..e3390e7c7fe5 100644
--- a/drivers/soc/renesas/r9a09g057-sys.c
+++ b/drivers/soc/renesas/r9a09g057-sys.c
@@ -64,4 +64,5 @@ static const struct rz_sysc_soc_id_init_data rzv2h_sys_soc_id_init_data __initco
const struct rz_sysc_init_data rzv2h_sys_init_data = {
.soc_id_init_data = &rzv2h_sys_soc_id_init_data,
+ .max_register = 0x170c,
};
diff --git a/drivers/soc/renesas/rz-sysc.c b/drivers/soc/renesas/rz-sysc.c
index ffa65fb4dade..66cc8d01f096 100644
--- a/drivers/soc/renesas/rz-sysc.c
+++ b/drivers/soc/renesas/rz-sysc.c
@@ -6,8 +6,10 @@
*/
#include <linux/io.h>
+#include <linux/mfd/syscon.h>
#include <linux/of.h>
#include <linux/platform_device.h>
+#include <linux/regmap.h>
#include <linux/sys_soc.h>
#include "rz-sysc.h"
@@ -100,14 +102,20 @@ MODULE_DEVICE_TABLE(of, rz_sysc_match);
static int rz_sysc_probe(struct platform_device *pdev)
{
+ const struct rz_sysc_init_data *data;
const struct of_device_id *match;
+ struct regmap_config *regmap_cfg;
struct device *dev = &pdev->dev;
+ struct regmap *regmap;
struct rz_sysc *sysc;
+ int ret;
match = of_match_node(rz_sysc_match, dev->of_node);
if (!match)
return -ENODEV;
+ data = match->data;
+
sysc = devm_kzalloc(dev, sizeof(*sysc), GFP_KERNEL);
if (!sysc)
return -ENOMEM;
@@ -117,7 +125,26 @@ static int rz_sysc_probe(struct platform_device *pdev)
return PTR_ERR(sysc->base);
sysc->dev = dev;
- return rz_sysc_soc_init(sysc, match);
+ ret = rz_sysc_soc_init(sysc, match);
+ if (ret)
+ return ret;
+
+ regmap_cfg = devm_kzalloc(dev, sizeof(*regmap_cfg), GFP_KERNEL);
+ if (!regmap_cfg)
+ return -ENOMEM;
+
+ regmap_cfg->name = "rz_sysc_regs";
+ regmap_cfg->reg_bits = 32;
+ regmap_cfg->reg_stride = 4;
+ regmap_cfg->val_bits = 32;
+ regmap_cfg->fast_io = true;
+ regmap_cfg->max_register = data->max_register;
+
+ regmap = devm_regmap_init_mmio(dev, sysc->base, regmap_cfg);
+ if (IS_ERR(regmap))
+ return PTR_ERR(regmap);
+
+ return of_syscon_register_regmap(dev->of_node, regmap);
}
static struct platform_driver rz_sysc_driver = {
diff --git a/drivers/soc/renesas/rz-sysc.h b/drivers/soc/renesas/rz-sysc.h
index 56bc047a1bff..8eec355d5d56 100644
--- a/drivers/soc/renesas/rz-sysc.h
+++ b/drivers/soc/renesas/rz-sysc.h
@@ -34,9 +34,11 @@ struct rz_sysc_soc_id_init_data {
/**
* struct rz_sysc_init_data - RZ SYSC initialization data
* @soc_id_init_data: RZ SYSC SoC ID initialization data
+ * @max_register: Maximum SYSC register offset to be used by the regmap config
*/
struct rz_sysc_init_data {
const struct rz_sysc_soc_id_init_data *soc_id_init_data;
+ u32 max_register;
};
extern const struct rz_sysc_init_data rzg3e_sys_init_data;
--
2.43.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v4 2/8] dt-bindings: phy: renesas,usb2-phy: Mark resets as required for RZ/G3S
2025-08-08 6:17 [PATCH v4 0/8] Add initial USB support for the Renesas RZ/G3S SoC Claudiu
2025-08-08 6:17 ` [PATCH v4 1/8] soc: renesas: rz-sysc: Add syscon/regmap support Claudiu
@ 2025-08-08 6:18 ` Claudiu
2025-08-08 6:18 ` [PATCH v4 3/8] phy: renesas: rcar-gen3-usb2: Fix an error handling path in rcar_gen3_phy_usb2_probe() Claudiu
` (5 subsequent siblings)
7 siblings, 0 replies; 15+ messages in thread
From: Claudiu @ 2025-08-08 6:18 UTC (permalink / raw)
To: vkoul, kishon, robh, krzk+dt, conor+dt, p.zabel, geert+renesas,
magnus.damm, yoshihiro.shimoda.uh, biju.das.jz
Cc: claudiu.beznea, linux-phy, devicetree, linux-kernel,
linux-renesas-soc, Claudiu Beznea, Conor Dooley
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
The reset lines are mandatory for the Renesas RZ/G3S platform and must be
explicitly defined in device tree.
Fixes: f3c849855114 ("dt-bindings: phy: renesas,usb2-phy: Document RZ/G3S phy bindings")
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Conor Dooley <conor.dooley@microchip.com>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v4:
- none
Changes in v3:
- collected tags
- rebased on top of latest version of renesas,usb2-phy.yaml;
Conor, Geert: I kept your tags; please let me know if you consider it
otherwise
Changes in v2:
- none; this patch is new
Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml b/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
index f45c5f039ae8..52d777057281 100644
--- a/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
+++ b/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
@@ -112,6 +112,7 @@ allOf:
contains:
enum:
- renesas,usb2-phy-r9a09g057
+ - renesas,usb2-phy-r9a08g045
- renesas,rzg2l-usb2-phy
then:
properties:
--
2.43.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v4 3/8] phy: renesas: rcar-gen3-usb2: Fix an error handling path in rcar_gen3_phy_usb2_probe()
2025-08-08 6:17 [PATCH v4 0/8] Add initial USB support for the Renesas RZ/G3S SoC Claudiu
2025-08-08 6:17 ` [PATCH v4 1/8] soc: renesas: rz-sysc: Add syscon/regmap support Claudiu
2025-08-08 6:18 ` [PATCH v4 2/8] dt-bindings: phy: renesas,usb2-phy: Mark resets as required for RZ/G3S Claudiu
@ 2025-08-08 6:18 ` Claudiu
2025-08-08 6:18 ` [PATCH v4 4/8] dt-bindings: reset: renesas,rzg2l-usbphy-ctrl: Document RZ/G3S support Claudiu
` (4 subsequent siblings)
7 siblings, 0 replies; 15+ messages in thread
From: Claudiu @ 2025-08-08 6:18 UTC (permalink / raw)
To: vkoul, kishon, robh, krzk+dt, conor+dt, p.zabel, geert+renesas,
magnus.damm, yoshihiro.shimoda.uh, biju.das.jz
Cc: claudiu.beznea, linux-phy, devicetree, linux-kernel,
linux-renesas-soc, Christophe JAILLET, Claudiu Beznea
From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
If an error occurs after the reset_control_deassert(),
reset_control_assert() must be called, as already done in the remove
function.
Use devm_add_action_or_reset() to add the missing call and simplify the
.remove() function accordingly.
Fixes: 4eae16375357 ("phy: renesas: rcar-gen3-usb2: Add support to initialize the bus")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
[claudiu.beznea: removed "struct reset_control *rstc = data;" from
rcar_gen3_reset_assert()]
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v4:
- none
Changes in v3:
- collected tags
Changes in v2:
- none; this patch is new; re-spinned the Christophe's work at
https://lore.kernel.org/all/TYCPR01MB113329930BA5E2149C9BE2A1986672@TYCPR01MB11332.jpnprd01.prod.outlook.com/
drivers/phy/renesas/phy-rcar-gen3-usb2.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/drivers/phy/renesas/phy-rcar-gen3-usb2.c b/drivers/phy/renesas/phy-rcar-gen3-usb2.c
index 47beb94cd424..d61c171d454f 100644
--- a/drivers/phy/renesas/phy-rcar-gen3-usb2.c
+++ b/drivers/phy/renesas/phy-rcar-gen3-usb2.c
@@ -699,6 +699,11 @@ static enum usb_dr_mode rcar_gen3_get_dr_mode(struct device_node *np)
return candidate;
}
+static void rcar_gen3_reset_assert(void *data)
+{
+ reset_control_assert(data);
+}
+
static int rcar_gen3_phy_usb2_init_bus(struct rcar_gen3_chan *channel)
{
struct device *dev = channel->dev;
@@ -717,6 +722,11 @@ static int rcar_gen3_phy_usb2_init_bus(struct rcar_gen3_chan *channel)
if (ret)
goto rpm_put;
+ ret = devm_add_action_or_reset(dev, rcar_gen3_reset_assert,
+ channel->rstc);
+ if (ret)
+ goto rpm_put;
+
val = readl(channel->base + USB2_AHB_BUS_CTR);
val &= ~USB2_AHB_BUS_CTR_MBL_MASK;
val |= USB2_AHB_BUS_CTR_MBL_INCR4;
@@ -860,7 +870,6 @@ static void rcar_gen3_phy_usb2_remove(struct platform_device *pdev)
if (channel->is_otg_channel)
device_remove_file(&pdev->dev, &dev_attr_role);
- reset_control_assert(channel->rstc);
pm_runtime_disable(&pdev->dev);
};
--
2.43.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v4 4/8] dt-bindings: reset: renesas,rzg2l-usbphy-ctrl: Document RZ/G3S support
2025-08-08 6:17 [PATCH v4 0/8] Add initial USB support for the Renesas RZ/G3S SoC Claudiu
` (2 preceding siblings ...)
2025-08-08 6:18 ` [PATCH v4 3/8] phy: renesas: rcar-gen3-usb2: Fix an error handling path in rcar_gen3_phy_usb2_probe() Claudiu
@ 2025-08-08 6:18 ` Claudiu
2025-08-13 23:21 ` Rob Herring
2025-08-08 6:18 ` [PATCH v4 5/8] reset: rzg2l-usbphy-ctrl: Add support for USB PWRRDY Claudiu
` (3 subsequent siblings)
7 siblings, 1 reply; 15+ messages in thread
From: Claudiu @ 2025-08-08 6:18 UTC (permalink / raw)
To: vkoul, kishon, robh, krzk+dt, conor+dt, p.zabel, geert+renesas,
magnus.damm, yoshihiro.shimoda.uh, biju.das.jz
Cc: claudiu.beznea, linux-phy, devicetree, linux-kernel,
linux-renesas-soc, Claudiu Beznea
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
The Renesas USB PHY hardware block needs to have the PWRRDY bit in the
system controller set before applying any other settings. The PWRRDY bit
must be controlled during power-on, power-off, and system suspend/resume
sequences as follows:
- during power-on/resume, it must be set to zero before enabling clocks and
modules
- during power-off/suspend, it must be set to one after disabling clocks
and modules
Add the renesas,sysc-pwrrdy device tree property, which allows the
reset-rzg2l-usbphy-ctrl driver to parse, map, and control the system
controller PWRRDY bit at the appropriate time. Along with it add a new
compatible for the RZ/G3S SoC.
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v4:
- dropped blank line from compatible section
- s/renesas,sysc-signals/renesas,sysc-pwrrdy/g
- dropped description from renesas,sysc-pwrrdy
- updated description of renesas,sysc-pwrrdy items
- updated patch description
Changes in v3:
- none; this patch is new
.../reset/renesas,rzg2l-usbphy-ctrl.yaml | 40 ++++++++++++++++---
1 file changed, 34 insertions(+), 6 deletions(-)
diff --git a/Documentation/devicetree/bindings/reset/renesas,rzg2l-usbphy-ctrl.yaml b/Documentation/devicetree/bindings/reset/renesas,rzg2l-usbphy-ctrl.yaml
index b0b20af15313..c1d5f3228aa9 100644
--- a/Documentation/devicetree/bindings/reset/renesas,rzg2l-usbphy-ctrl.yaml
+++ b/Documentation/devicetree/bindings/reset/renesas,rzg2l-usbphy-ctrl.yaml
@@ -15,12 +15,14 @@ description:
properties:
compatible:
- items:
- - enum:
- - renesas,r9a07g043-usbphy-ctrl # RZ/G2UL and RZ/Five
- - renesas,r9a07g044-usbphy-ctrl # RZ/G2{L,LC}
- - renesas,r9a07g054-usbphy-ctrl # RZ/V2L
- - const: renesas,rzg2l-usbphy-ctrl
+ oneOf:
+ - items:
+ - enum:
+ - renesas,r9a07g043-usbphy-ctrl # RZ/G2UL and RZ/Five
+ - renesas,r9a07g044-usbphy-ctrl # RZ/G2{L,LC}
+ - renesas,r9a07g054-usbphy-ctrl # RZ/V2L
+ - const: renesas,rzg2l-usbphy-ctrl
+ - const: renesas,r9a08g045-usbphy-ctrl # RZ/G3S
reg:
maxItems: 1
@@ -48,6 +50,19 @@ properties:
$ref: /schemas/regulator/regulator.yaml#
unevaluatedProperties: false
+ renesas,sysc-pwrrdy:
+ description: The system controller PWRRDY indicates to the USB PHY if the
+ power supply is ready. PWRRDY needs to be set during power-on
+ before applying any other settings. It also needs to
+ be set before powering off the USB.
+ $ref: /schemas/types.yaml#/definitions/phandle-array
+ items:
+ - items:
+ - description: System controller phandle required by USB PHY CTRL
+ driver to set PWRRDY
+ - description: Register offset associated with PWRRDY
+ - description: Register bitmask associated with PWRRDY
+
required:
- compatible
- reg
@@ -57,6 +72,19 @@ required:
- '#reset-cells'
- regulator-vbus
+allOf:
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: renesas,r9a08g045-usbphy-ctrl
+ then:
+ required:
+ - renesas,sysc-pwrrdy
+ else:
+ properties:
+ renesas,sysc-pwrrdy: false
+
additionalProperties: false
examples:
--
2.43.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v4 5/8] reset: rzg2l-usbphy-ctrl: Add support for USB PWRRDY
2025-08-08 6:17 [PATCH v4 0/8] Add initial USB support for the Renesas RZ/G3S SoC Claudiu
` (3 preceding siblings ...)
2025-08-08 6:18 ` [PATCH v4 4/8] dt-bindings: reset: renesas,rzg2l-usbphy-ctrl: Document RZ/G3S support Claudiu
@ 2025-08-08 6:18 ` Claudiu
2025-08-08 6:18 ` [PATCH v4 6/8] reset: rzg2l-usbphy-ctrl: Add support for RZ/G3S SoC Claudiu
` (2 subsequent siblings)
7 siblings, 0 replies; 15+ messages in thread
From: Claudiu @ 2025-08-08 6:18 UTC (permalink / raw)
To: vkoul, kishon, robh, krzk+dt, conor+dt, p.zabel, geert+renesas,
magnus.damm, yoshihiro.shimoda.uh, biju.das.jz
Cc: claudiu.beznea, linux-phy, devicetree, linux-kernel,
linux-renesas-soc, Claudiu Beznea
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
On the Renesas RZ/G3S SoC, the USB PHY block has an input signal called
PWRRDY. This signal is managed by the system controller and must be
de-asserted after powering on the area where USB PHY resides and asserted
before powering it off.
On power-on the USB PWRRDY signal need to be de-asserted before enabling
clock and switching the module to normal state (through MSTOP support). The
power-on configuration sequence must be:
1/ PWRRDY=0
2/ CLK_ON=1
3/ MSTOP=0
On power-off the configuration sequence should be:
1/ MSTOP=1
2/ CLK_ON=0
3/ PWRRDY=1
The CLK_ON and MSTOP functionalities are controlled by clock drivers.
After long discussions with the internal HW team, it has been confirmed
that the HW connection b/w USB PHY block, the USB channels, the system
controller, clock, MSTOP, PWRRDY signal is as follows:
┌──────────────────────────────┐
│ │◄── CPG_CLKON_USB.CLK0_ON
│ USB CH0 │
┌──────────────────────────┐ │┌───────────────────────────┐ │◄── CPG_CLKON_USB.CLK2_ON
│ ┌────────┐ ││host controller registers │ │
│ │ │ ││function controller registers│
│ │ PHY0 │◄──┤└───────────────────────────┘ │
│ USB PHY │ │ └────────────▲─────────────────┘
│ └────────┘ │
│ │ CPG_BUS_PERI_COM_MSTOP.MSTOP{6, 5}_ON
│┌──────────────┐ ┌────────┐
││USHPHY control│ │ │
││ registers │ │ PHY1 │ ┌──────────────────────────────┐
│└──────────────┘ │ │◄──┤ USB CH1 │
│ └────────┘ │┌───────────────────────────┐ │◄── CPG_CLKON_USB.CLK1_ON
└─▲───────▲─────────▲──────┘ ││ host controller registers │ │
│ │ │ │└───────────────────────────┘ │
│ │ │ └────────────▲─────────────────┘
│ │ │ │
│ │ │ CPG_BUS_PERI_COM_MSTOP.MSTOP7_ON
│PWRRDY │ │
│ │ CPG_CLK_ON_USB.CLK3_ON
│ │
│ CPG_BUS_PERI_COM_MSTOP.MSTOP4_ON
│
┌────┐
│SYSC│
└────┘
where:
- CPG_CLKON_USB.CLK.CLKX_ON is the register bit controlling the clock X
of different USB blocks, X in {0, 1, 2, 3}
- CPG_BUS_PERI_COM_MSTOP.MSTOPX_ON is the register bit controlling the
MSTOP of different USB blocks, X in {4, 5, 6, 7}
- USB PHY is the USB PHY block exposing 2 ports, port0 and port1, used
by the USB CH0, USB CH1
- SYSC is the system controller block controlling the PWRRDY signal
- USB CHx are individual USB block with host and function capabilities
(USB CH0 have both host and function capabilities, USB CH1 has only
host capabilities)
The USBPHY control registers are controlled though the
reset-rzg2l-usbphy-ctrl driver. The USB PHY ports are controlled by
phy_rcar_gen3_usb2 (drivers/phy/renesas/phy-rcar-gen3-usb2.c file). The
USB PHY ports request resets from the reset-rzg2l-usbphy-ctrl driver.
The connection b/w the system controller and the USB PHY CTRL driver is
implemented through the renesas,sysc-pwrrdy device tree property
proposed in this patch. This property specifies the register offset and the
bitmask required to control the PWRRDY signal.
Since the USB PHY CTRL driver needs to be probed before any other
USB-specific driver on RZ/G3S, control of PWRRDY is passed exclusively
to it. This guarantees the correct configuration sequence between clocks,
MSTOP bits, and the PWRRDY bit. At the same time, changes are kept minimal
by avoiding modifications to the USB PHY driver to also handle the PWRRDY
itself.
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v4:
- updated patch description
- updated rzg2l_usbphy_ctrl_pwrrdy_init() to map directly the
"renesas,sysc-pwrrdy" as the SYSC signal abstraction was dropped
in this version, along with rz_sysc_get_signal_map()
- dropped priv member of rzg2l_usbphy_ctrl_pwrrdy_init() as it is
not needed in this version
- shift left !power_on with pwrrdy->mask as this is how the
regmap_update_bits() needs the last member to be
- selected MFD_SYSCON
Changes in v3:
- none; this patch is new
drivers/reset/Kconfig | 1 +
drivers/reset/reset-rzg2l-usbphy-ctrl.c | 66 +++++++++++++++++++++++++
2 files changed, 67 insertions(+)
diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig
index 635eef469ab7..3524b760dc1b 100644
--- a/drivers/reset/Kconfig
+++ b/drivers/reset/Kconfig
@@ -230,6 +230,7 @@ config RESET_RASPBERRYPI
config RESET_RZG2L_USBPHY_CTRL
tristate "Renesas RZ/G2L USBPHY control driver"
depends on ARCH_RZG2L || COMPILE_TEST
+ select MFD_SYSCON
help
Support for USBPHY Control found on RZ/G2L family. It mainly
controls reset and power down of the USB/PHY.
diff --git a/drivers/reset/reset-rzg2l-usbphy-ctrl.c b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
index 8a7f167e405e..fc14c41f5572 100644
--- a/drivers/reset/reset-rzg2l-usbphy-ctrl.c
+++ b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
@@ -13,6 +13,7 @@
#include <linux/regmap.h>
#include <linux/reset.h>
#include <linux/reset-controller.h>
+#include <linux/mfd/syscon.h>
#define RESET 0x000
#define VBENCTL 0x03c
@@ -41,6 +42,18 @@ struct rzg2l_usbphy_ctrl_priv {
#define rcdev_to_priv(x) container_of(x, struct rzg2l_usbphy_ctrl_priv, rcdev)
+/**
+ * struct rzg2l_usbphy_ctrl_pwrrdy - SYSC PWRRDY signal descriptor
+ * @regmap: SYSC regmap
+ * @offset: offset into the SYSC address space for accessing PWRRDY
+ * @mask: mask into the register at offset for accessing PWRRDY
+ */
+struct rzg2l_usbphy_ctrl_pwrrdy {
+ struct regmap *regmap;
+ u32 offset;
+ u32 mask;
+};
+
static int rzg2l_usbphy_ctrl_assert(struct reset_controller_dev *rcdev,
unsigned long id)
{
@@ -91,6 +104,8 @@ static int rzg2l_usbphy_ctrl_status(struct reset_controller_dev *rcdev,
return !!(readl(priv->base + RESET) & port_mask);
}
+#define RZG2L_USBPHY_CTRL_PWRRDY 1
+
static const struct of_device_id rzg2l_usbphy_ctrl_match_table[] = {
{ .compatible = "renesas,rzg2l-usbphy-ctrl" },
{ /* Sentinel */ }
@@ -110,6 +125,53 @@ static const struct regmap_config rzg2l_usb_regconf = {
.max_register = 1,
};
+static void rzg2l_usbphy_ctrl_set_pwrrdy(struct rzg2l_usbphy_ctrl_pwrrdy *pwrrdy,
+ bool power_on)
+{
+ regmap_update_bits(pwrrdy->regmap, pwrrdy->offset, pwrrdy->mask,
+ !power_on << pwrrdy->mask);
+}
+
+static void rzg2l_usbphy_ctrl_pwrrdy_off(void *data)
+{
+ rzg2l_usbphy_ctrl_set_pwrrdy(data, false);
+}
+
+static int rzg2l_usbphy_ctrl_pwrrdy_init(struct device *dev)
+{
+ struct rzg2l_usbphy_ctrl_pwrrdy *pwrrdy;
+ struct of_phandle_args args;
+ struct regmap *regmap;
+ const int *data;
+ int ret;
+
+ data = device_get_match_data(dev);
+ if (data != (int *)RZG2L_USBPHY_CTRL_PWRRDY)
+ return 0;
+
+ ret = of_parse_phandle_with_fixed_args(dev->of_node, "renesas,sysc-pwrrdy", 2,
+ 0, &args);
+ if (ret)
+ return ret;
+
+ regmap = syscon_node_to_regmap(args.np);
+ of_node_put(args.np);
+ if (IS_ERR(regmap))
+ return PTR_ERR(regmap);
+
+ pwrrdy = devm_kzalloc(dev, sizeof(*pwrrdy), GFP_KERNEL);
+ if (!pwrrdy)
+ return -ENOMEM;
+
+ pwrrdy->regmap = regmap;
+ pwrrdy->offset = args.args[0];
+ pwrrdy->mask = args.args[1];
+
+ rzg2l_usbphy_ctrl_set_pwrrdy(pwrrdy, true);
+
+ return devm_add_action_or_reset(dev, rzg2l_usbphy_ctrl_pwrrdy_off, pwrrdy);
+}
+
static int rzg2l_usbphy_ctrl_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
@@ -132,6 +194,10 @@ static int rzg2l_usbphy_ctrl_probe(struct platform_device *pdev)
if (IS_ERR(regmap))
return PTR_ERR(regmap);
+ error = rzg2l_usbphy_ctrl_pwrrdy_init(dev);
+ if (error)
+ return error;
+
priv->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);
if (IS_ERR(priv->rstc))
return dev_err_probe(dev, PTR_ERR(priv->rstc),
--
2.43.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v4 6/8] reset: rzg2l-usbphy-ctrl: Add support for RZ/G3S SoC
2025-08-08 6:17 [PATCH v4 0/8] Add initial USB support for the Renesas RZ/G3S SoC Claudiu
` (4 preceding siblings ...)
2025-08-08 6:18 ` [PATCH v4 5/8] reset: rzg2l-usbphy-ctrl: Add support for USB PWRRDY Claudiu
@ 2025-08-08 6:18 ` Claudiu
2025-08-08 6:18 ` [PATCH v4 7/8] arm64: dts: renesas: r9a08g045: Add USB support Claudiu
2025-08-08 6:18 ` [PATCH v4 8/8] arm64: dts: renesas: rzg3s-smarc: Enable " Claudiu
7 siblings, 0 replies; 15+ messages in thread
From: Claudiu @ 2025-08-08 6:18 UTC (permalink / raw)
To: vkoul, kishon, robh, krzk+dt, conor+dt, p.zabel, geert+renesas,
magnus.damm, yoshihiro.shimoda.uh, biju.das.jz
Cc: claudiu.beznea, linux-phy, devicetree, linux-kernel,
linux-renesas-soc, Claudiu Beznea
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
The Renesas RZ/G3S SoC USB PHY HW block receives as input the USB PWRRDY
signal from the system controller. Add support for the Renesas RZ/G3S SoC.
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v4:
- none
Changes in v3:
- none; this patch is new
drivers/reset/reset-rzg2l-usbphy-ctrl.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/reset/reset-rzg2l-usbphy-ctrl.c b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
index fc14c41f5572..8aa2a5833c2e 100644
--- a/drivers/reset/reset-rzg2l-usbphy-ctrl.c
+++ b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
@@ -108,6 +108,10 @@ static int rzg2l_usbphy_ctrl_status(struct reset_controller_dev *rcdev,
static const struct of_device_id rzg2l_usbphy_ctrl_match_table[] = {
{ .compatible = "renesas,rzg2l-usbphy-ctrl" },
+ {
+ .compatible = "renesas,r9a08g045-usbphy-ctrl",
+ .data = (void *)RZG2L_USBPHY_CTRL_PWRRDY
+ },
{ /* Sentinel */ }
};
MODULE_DEVICE_TABLE(of, rzg2l_usbphy_ctrl_match_table);
--
2.43.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v4 7/8] arm64: dts: renesas: r9a08g045: Add USB support
2025-08-08 6:17 [PATCH v4 0/8] Add initial USB support for the Renesas RZ/G3S SoC Claudiu
` (5 preceding siblings ...)
2025-08-08 6:18 ` [PATCH v4 6/8] reset: rzg2l-usbphy-ctrl: Add support for RZ/G3S SoC Claudiu
@ 2025-08-08 6:18 ` Claudiu
2025-08-08 6:18 ` [PATCH v4 8/8] arm64: dts: renesas: rzg3s-smarc: Enable " Claudiu
7 siblings, 0 replies; 15+ messages in thread
From: Claudiu @ 2025-08-08 6:18 UTC (permalink / raw)
To: vkoul, kishon, robh, krzk+dt, conor+dt, p.zabel, geert+renesas,
magnus.damm, yoshihiro.shimoda.uh, biju.das.jz
Cc: claudiu.beznea, linux-phy, devicetree, linux-kernel,
linux-renesas-soc, Claudiu Beznea
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Add USB nodes for the Renesas RZ/G3S SoC. This consists of PHY reset,
host and device support.
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v4:
- dropped renesas,sysc-signals from usb2_phy0, usb2_phy1 nodes
- s/renesas,sysc-signals/renesas,sysc-pwrrdy/g
Changes in v3:
- changed the nodes order to keep similar nodes toghether
Changes in v2:
- this was patch 14/16 in v1
- added renesas,sysc-signal properties to USB PHYs
- collected tags
- Geert: I kept your tag; please let me know if you consider otherwise
arch/arm64/boot/dts/renesas/r9a08g045.dtsi | 118 +++++++++++++++++++++
1 file changed, 118 insertions(+)
diff --git a/arch/arm64/boot/dts/renesas/r9a08g045.dtsi b/arch/arm64/boot/dts/renesas/r9a08g045.dtsi
index 0364f89776e6..b7ad6db0174b 100644
--- a/arch/arm64/boot/dts/renesas/r9a08g045.dtsi
+++ b/arch/arm64/boot/dts/renesas/r9a08g045.dtsi
@@ -681,6 +681,124 @@ eth1: ethernet@11c40000 {
status = "disabled";
};
+ phyrst: usbphy-ctrl@11e00000 {
+ compatible = "renesas,r9a08g045-usbphy-ctrl";
+ reg = <0 0x11e00000 0 0x10000>;
+ clocks = <&cpg CPG_MOD R9A08G045_USB_PCLK>;
+ resets = <&cpg R9A08G045_USB_PRESETN>;
+ power-domains = <&cpg>;
+ #reset-cells = <1>;
+ renesas,sysc-pwrrdy = <&sysc 0xd70 0x1>;
+ status = "disabled";
+
+ usb0_vbus_otg: regulator-vbus {
+ regulator-name = "vbus";
+ };
+ };
+
+ ohci0: usb@11e10000 {
+ compatible = "generic-ohci";
+ reg = <0 0x11e10000 0 0x100>;
+ interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cpg CPG_MOD R9A08G045_USB_PCLK>,
+ <&cpg CPG_MOD R9A08G045_USB_U2H0_HCLK>;
+ resets = <&phyrst 0>,
+ <&cpg R9A08G045_USB_U2H0_HRESETN>;
+ phys = <&usb2_phy0 1>;
+ phy-names = "usb";
+ power-domains = <&cpg>;
+ status = "disabled";
+ };
+
+ ohci1: usb@11e30000 {
+ compatible = "generic-ohci";
+ reg = <0 0x11e30000 0 0x100>;
+ interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cpg CPG_MOD R9A08G045_USB_PCLK>,
+ <&cpg CPG_MOD R9A08G045_USB_U2H1_HCLK>;
+ resets = <&phyrst 1>,
+ <&cpg R9A08G045_USB_U2H1_HRESETN>;
+ phys = <&usb2_phy1 1>;
+ phy-names = "usb";
+ power-domains = <&cpg>;
+ status = "disabled";
+ };
+
+ ehci0: usb@11e10100 {
+ compatible = "generic-ehci";
+ reg = <0 0x11e10100 0 0x100>;
+ interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cpg CPG_MOD R9A08G045_USB_PCLK>,
+ <&cpg CPG_MOD R9A08G045_USB_U2H0_HCLK>;
+ resets = <&phyrst 0>,
+ <&cpg R9A08G045_USB_U2H0_HRESETN>;
+ phys = <&usb2_phy0 2>;
+ phy-names = "usb";
+ companion = <&ohci0>;
+ power-domains = <&cpg>;
+ status = "disabled";
+ };
+
+ ehci1: usb@11e30100 {
+ compatible = "generic-ehci";
+ reg = <0 0x11e30100 0 0x100>;
+ interrupts = <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cpg CPG_MOD R9A08G045_USB_PCLK>,
+ <&cpg CPG_MOD R9A08G045_USB_U2H1_HCLK>;
+ resets = <&phyrst 1>,
+ <&cpg R9A08G045_USB_U2H1_HRESETN>;
+ phys = <&usb2_phy1 2>;
+ phy-names = "usb";
+ companion = <&ohci1>;
+ power-domains = <&cpg>;
+ status = "disabled";
+ };
+
+ usb2_phy0: usb-phy@11e10200 {
+ compatible = "renesas,usb2-phy-r9a08g045";
+ reg = <0 0x11e10200 0 0x700>;
+ interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cpg CPG_MOD R9A08G045_USB_PCLK>,
+ <&cpg CPG_MOD R9A08G045_USB_U2H0_HCLK>;
+ resets = <&phyrst 0>,
+ <&cpg R9A08G045_USB_U2H0_HRESETN>;
+ #phy-cells = <1>;
+ power-domains = <&cpg>;
+ status = "disabled";
+ };
+
+ usb2_phy1: usb-phy@11e30200 {
+ compatible = "renesas,usb2-phy-r9a08g045";
+ reg = <0 0x11e30200 0 0x700>;
+ interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cpg CPG_MOD R9A08G045_USB_PCLK>,
+ <&cpg CPG_MOD R9A08G045_USB_U2H1_HCLK>;
+ resets = <&phyrst 1>,
+ <&cpg R9A08G045_USB_U2H1_HRESETN>;
+ #phy-cells = <1>;
+ power-domains = <&cpg>;
+ status = "disabled";
+ };
+
+ hsusb: usb@11e20000 {
+ compatible = "renesas,usbhs-r9a08g045",
+ "renesas,rzg2l-usbhs";
+ reg = <0 0x11e20000 0 0x10000>;
+ interrupts = <GIC_SPI 85 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cpg CPG_MOD R9A08G045_USB_PCLK>,
+ <&cpg CPG_MOD R9A08G045_USB_U2P_EXR_CPUCLK>;
+ resets = <&phyrst 0>,
+ <&cpg R9A08G045_USB_U2P_EXL_SYSRST>;
+ renesas,buswait = <7>;
+ phys = <&usb2_phy0 3>;
+ phy-names = "usb";
+ power-domains = <&cpg>;
+ status = "disabled";
+ };
+
gic: interrupt-controller@12400000 {
compatible = "arm,gic-v3";
#interrupt-cells = <3>;
--
2.43.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v4 8/8] arm64: dts: renesas: rzg3s-smarc: Enable USB support
2025-08-08 6:17 [PATCH v4 0/8] Add initial USB support for the Renesas RZ/G3S SoC Claudiu
` (6 preceding siblings ...)
2025-08-08 6:18 ` [PATCH v4 7/8] arm64: dts: renesas: r9a08g045: Add USB support Claudiu
@ 2025-08-08 6:18 ` Claudiu
7 siblings, 0 replies; 15+ messages in thread
From: Claudiu @ 2025-08-08 6:18 UTC (permalink / raw)
To: vkoul, kishon, robh, krzk+dt, conor+dt, p.zabel, geert+renesas,
magnus.damm, yoshihiro.shimoda.uh, biju.das.jz
Cc: claudiu.beznea, linux-phy, devicetree, linux-kernel,
linux-renesas-soc, Claudiu Beznea
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Enable USB support (host, device, USB PHYs).
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v4:
- none
Changes in v3:
- collected tags
Changes in v2:
- this was patch 15/16 in v1:
- dropped sysc enablement as it is now done in SoC dtsi file
arch/arm64/boot/dts/renesas/rzg3s-smarc.dtsi | 57 ++++++++++++++++++++
1 file changed, 57 insertions(+)
diff --git a/arch/arm64/boot/dts/renesas/rzg3s-smarc.dtsi b/arch/arm64/boot/dts/renesas/rzg3s-smarc.dtsi
index 5e044a4d0234..5586dd43c4d5 100644
--- a/arch/arm64/boot/dts/renesas/rzg3s-smarc.dtsi
+++ b/arch/arm64/boot/dts/renesas/rzg3s-smarc.dtsi
@@ -92,6 +92,20 @@ &audio_clk2 {
clock-frequency = <12288000>;
};
+&ehci0 {
+ dr_mode = "otg";
+ status = "okay";
+};
+
+&ehci1 {
+ status = "okay";
+};
+
+&hsusb {
+ dr_mode = "otg";
+ status = "okay";
+};
+
&i2c0 {
status = "okay";
@@ -132,6 +146,15 @@ power-monitor@44 {
};
};
+&ohci0 {
+ dr_mode = "otg";
+ status = "okay";
+};
+
+&ohci1 {
+ status = "okay";
+};
+
&pinctrl {
audio_clock_pins: audio-clock {
pins = "AUDIO_CLK1", "AUDIO_CLK2";
@@ -207,6 +230,27 @@ ssi3_pins: ssi3 {
<RZG2L_PORT_PINMUX(18, 4, 8)>, /* TXD */
<RZG2L_PORT_PINMUX(18, 5, 8)>; /* RXD */
};
+
+ usb0_pins: usb0 {
+ peri {
+ pinmux = <RZG2L_PORT_PINMUX(5, 0, 1)>, /* VBUS */
+ <RZG2L_PORT_PINMUX(5, 2, 1)>; /* OVC */
+ };
+
+ otg {
+ pinmux = <RZG2L_PORT_PINMUX(5, 3, 1)>; /* OTG_ID */
+ bias-pull-up;
+ };
+ };
+
+ usb1_pins: usb1 {
+ pinmux = <RZG2L_PORT_PINMUX(5, 4, 5)>, /* OVC */
+ <RZG2L_PORT_PINMUX(6, 0, 1)>; /* VBUS */
+ };
+};
+
+&phyrst {
+ status = "okay";
};
&scif0 {
@@ -242,3 +286,16 @@ &ssi3 {
pinctrl-0 = <&ssi3_pins>, <&audio_clock_pins>;
status = "okay";
};
+
+&usb2_phy0 {
+ pinctrl-0 = <&usb0_pins>;
+ pinctrl-names = "default";
+ vbus-supply = <&usb0_vbus_otg>;
+ status = "okay";
+};
+
+&usb2_phy1 {
+ pinctrl-0 = <&usb1_pins>;
+ pinctrl-names = "default";
+ status = "okay";
+};
--
2.43.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v4 1/8] soc: renesas: rz-sysc: Add syscon/regmap support
2025-08-08 6:17 ` [PATCH v4 1/8] soc: renesas: rz-sysc: Add syscon/regmap support Claudiu
@ 2025-08-08 9:29 ` Geert Uytterhoeven
2025-08-08 10:32 ` Claudiu Beznea
0 siblings, 1 reply; 15+ messages in thread
From: Geert Uytterhoeven @ 2025-08-08 9:29 UTC (permalink / raw)
To: Claudiu
Cc: vkoul, kishon, robh, krzk+dt, conor+dt, p.zabel, magnus.damm,
yoshihiro.shimoda.uh, biju.das.jz, linux-phy, devicetree,
linux-kernel, linux-renesas-soc, John Madieu, Claudiu Beznea
Hi Claudiu,
On Fri, 8 Aug 2025 at 08:18, Claudiu <claudiu.beznea@tuxon.dev> wrote:
> From: John Madieu <john.madieu.xa@bp.renesas.com>
>
> The RZ/G3E system controller has various registers that control or report
> some properties specific to individual IPs. The regmap is registered as a
> syscon device to allow these IP drivers to access the registers through the
> regmap API.
>
> As other RZ SoCs might have custom read/write callbacks or max-offsets,
> register a custom regmap configuration.
>
> Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
> [claudiu.beznea:
> - do not check the match->data validity in rz_sysc_probe() as it is
> always valid
> - dinamically allocate regmap_cfg]
> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> ---
>
> Changes in v4:
> - adjusted the patch description by dropping "add" from
> "add register a custom regmap configuration"
> - updated the list of changes from Claudiu Beznea
> - dynamically allocate the regmap_config as proposed at [2]
> - this patch is needed for proper function of USB (as proposed in this
> series) that being the reason it is introduced here, as well
>
> [2] https://lore.kernel.org/all/CAMuHMdVyf3Xtpw=LWHrnD2CVQX4xYm=FBHvY_dx9OesHDz5zNg@mail.gmail.com/
Thanks for the update!
> --- a/drivers/soc/renesas/rz-sysc.c
> +++ b/drivers/soc/renesas/rz-sysc.c
=
> @@ -117,7 +125,26 @@ static int rz_sysc_probe(struct platform_device *pdev)
> return PTR_ERR(sysc->base);
>
> sysc->dev = dev;
> - return rz_sysc_soc_init(sysc, match);
> + ret = rz_sysc_soc_init(sysc, match);
> + if (ret)
> + return ret;
> +
> + regmap_cfg = devm_kzalloc(dev, sizeof(*regmap_cfg), GFP_KERNEL);
> + if (!regmap_cfg)
> + return -ENOMEM;
Is there any specific reason you decided to allocate regmap_cfg
separately, instead of embedding it into struct rz_sysc?
The rest LGTM.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v4 1/8] soc: renesas: rz-sysc: Add syscon/regmap support
2025-08-08 9:29 ` Geert Uytterhoeven
@ 2025-08-08 10:32 ` Claudiu Beznea
2025-08-08 11:36 ` Geert Uytterhoeven
0 siblings, 1 reply; 15+ messages in thread
From: Claudiu Beznea @ 2025-08-08 10:32 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: vkoul, kishon, robh, krzk+dt, conor+dt, p.zabel, magnus.damm,
yoshihiro.shimoda.uh, biju.das.jz, linux-phy, devicetree,
linux-kernel, linux-renesas-soc, John Madieu, Claudiu Beznea
Hi, Geert,
On 08.08.2025 12:29, Geert Uytterhoeven wrote:
> Hi Claudiu,
>
> On Fri, 8 Aug 2025 at 08:18, Claudiu <claudiu.beznea@tuxon.dev> wrote:
>> From: John Madieu <john.madieu.xa@bp.renesas.com>
>>
>> The RZ/G3E system controller has various registers that control or report
>> some properties specific to individual IPs. The regmap is registered as a
>> syscon device to allow these IP drivers to access the registers through the
>> regmap API.
>>
>> As other RZ SoCs might have custom read/write callbacks or max-offsets,
>> register a custom regmap configuration.
>>
>> Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
>> [claudiu.beznea:
>> - do not check the match->data validity in rz_sysc_probe() as it is
>> always valid
>> - dinamically allocate regmap_cfg]
>> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>> ---
>>
>> Changes in v4:
>> - adjusted the patch description by dropping "add" from
>> "add register a custom regmap configuration"
>> - updated the list of changes from Claudiu Beznea
>> - dynamically allocate the regmap_config as proposed at [2]
>> - this patch is needed for proper function of USB (as proposed in this
>> series) that being the reason it is introduced here, as well
>>
>> [2] https://lore.kernel.org/all/CAMuHMdVyf3Xtpw=LWHrnD2CVQX4xYm=FBHvY_dx9OesHDz5zNg@mail.gmail.com/
>
> Thanks for the update!
>
>> --- a/drivers/soc/renesas/rz-sysc.c
>> +++ b/drivers/soc/renesas/rz-sysc.c
> =
>> @@ -117,7 +125,26 @@ static int rz_sysc_probe(struct platform_device *pdev)
>> return PTR_ERR(sysc->base);
>>
>> sysc->dev = dev;
>> - return rz_sysc_soc_init(sysc, match);
>> + ret = rz_sysc_soc_init(sysc, match);
>> + if (ret)
>> + return ret;
>> +
>> + regmap_cfg = devm_kzalloc(dev, sizeof(*regmap_cfg), GFP_KERNEL);
>> + if (!regmap_cfg)
>> + return -ENOMEM;
>
> Is there any specific reason you decided to allocate regmap_cfg
> separately, instead of embedding it into struct rz_sysc?
Sorry, I missed to mention.
I chose to have it like this as the regmap_cfg is not used anywhere else
(through rz_sysc) except in probe.
Thank you for your review,
Claudiu
>
> The rest LGTM.
>
> Gr{oetje,eeting}s,
>
> Geert
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v4 1/8] soc: renesas: rz-sysc: Add syscon/regmap support
2025-08-08 10:32 ` Claudiu Beznea
@ 2025-08-08 11:36 ` Geert Uytterhoeven
2025-08-08 12:11 ` Claudiu Beznea
0 siblings, 1 reply; 15+ messages in thread
From: Geert Uytterhoeven @ 2025-08-08 11:36 UTC (permalink / raw)
To: Claudiu Beznea
Cc: vkoul, kishon, robh, krzk+dt, conor+dt, p.zabel, magnus.damm,
yoshihiro.shimoda.uh, biju.das.jz, linux-phy, devicetree,
linux-kernel, linux-renesas-soc, John Madieu, Claudiu Beznea
Hi Claudiu,
On Fri, 8 Aug 2025 at 12:32, Claudiu Beznea <claudiu.beznea@tuxon.dev> wrote:
> On 08.08.2025 12:29, Geert Uytterhoeven wrote:
> > On Fri, 8 Aug 2025 at 08:18, Claudiu <claudiu.beznea@tuxon.dev> wrote:
> >> From: John Madieu <john.madieu.xa@bp.renesas.com>
> >>
> >> The RZ/G3E system controller has various registers that control or report
> >> some properties specific to individual IPs. The regmap is registered as a
> >> syscon device to allow these IP drivers to access the registers through the
> >> regmap API.
> >>
> >> As other RZ SoCs might have custom read/write callbacks or max-offsets,
> >> register a custom regmap configuration.
> >>
> >> Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
> >> [claudiu.beznea:
> >> - do not check the match->data validity in rz_sysc_probe() as it is
> >> always valid
> >> - dinamically allocate regmap_cfg]
> >> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> >> ---
> >>
> >> Changes in v4:
> >> - adjusted the patch description by dropping "add" from
> >> "add register a custom regmap configuration"
> >> - updated the list of changes from Claudiu Beznea
> >> - dynamically allocate the regmap_config as proposed at [2]
> >> - this patch is needed for proper function of USB (as proposed in this
> >> series) that being the reason it is introduced here, as well
> >>
> >> [2] https://lore.kernel.org/all/CAMuHMdVyf3Xtpw=LWHrnD2CVQX4xYm=FBHvY_dx9OesHDz5zNg@mail.gmail.com/
> >
> >> --- a/drivers/soc/renesas/rz-sysc.c
> >> +++ b/drivers/soc/renesas/rz-sysc.c
> > =
> >> @@ -117,7 +125,26 @@ static int rz_sysc_probe(struct platform_device *pdev)
> >> return PTR_ERR(sysc->base);
> >>
> >> sysc->dev = dev;
> >> - return rz_sysc_soc_init(sysc, match);
> >> + ret = rz_sysc_soc_init(sysc, match);
> >> + if (ret)
> >> + return ret;
> >> +
> >> + regmap_cfg = devm_kzalloc(dev, sizeof(*regmap_cfg), GFP_KERNEL);
> >> + if (!regmap_cfg)
> >> + return -ENOMEM;
> >
> > Is there any specific reason you decided to allocate regmap_cfg
> > separately, instead of embedding it into struct rz_sysc?
>
> Sorry, I missed to mention.
>
> I chose to have it like this as the regmap_cfg is not used anywhere else
> (through rz_sysc) except in probe.
OK. Upon closer look, devm_regmap_init_mmio() does not save the
regmap_cfg pointer for later use, so it can be allocated using kzalloc()
instead, and freed immediately after calling devm_regmap_init_mmio().
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v4 1/8] soc: renesas: rz-sysc: Add syscon/regmap support
2025-08-08 11:36 ` Geert Uytterhoeven
@ 2025-08-08 12:11 ` Claudiu Beznea
0 siblings, 0 replies; 15+ messages in thread
From: Claudiu Beznea @ 2025-08-08 12:11 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: vkoul, kishon, robh, krzk+dt, conor+dt, p.zabel, magnus.damm,
yoshihiro.shimoda.uh, biju.das.jz, linux-phy, devicetree,
linux-kernel, linux-renesas-soc, John Madieu, Claudiu Beznea
Hi, Geert,
On 08.08.2025 14:36, Geert Uytterhoeven wrote:
> Hi Claudiu,
>
> On Fri, 8 Aug 2025 at 12:32, Claudiu Beznea <claudiu.beznea@tuxon.dev> wrote:
>> On 08.08.2025 12:29, Geert Uytterhoeven wrote:
>>> On Fri, 8 Aug 2025 at 08:18, Claudiu <claudiu.beznea@tuxon.dev> wrote:
>>>> From: John Madieu <john.madieu.xa@bp.renesas.com>
>>>>
>>>> The RZ/G3E system controller has various registers that control or report
>>>> some properties specific to individual IPs. The regmap is registered as a
>>>> syscon device to allow these IP drivers to access the registers through the
>>>> regmap API.
>>>>
>>>> As other RZ SoCs might have custom read/write callbacks or max-offsets,
>>>> register a custom regmap configuration.
>>>>
>>>> Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
>>>> [claudiu.beznea:
>>>> - do not check the match->data validity in rz_sysc_probe() as it is
>>>> always valid
>>>> - dinamically allocate regmap_cfg]
>>>> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>>>> ---
>>>>
>>>> Changes in v4:
>>>> - adjusted the patch description by dropping "add" from
>>>> "add register a custom regmap configuration"
>>>> - updated the list of changes from Claudiu Beznea
>>>> - dynamically allocate the regmap_config as proposed at [2]
>>>> - this patch is needed for proper function of USB (as proposed in this
>>>> series) that being the reason it is introduced here, as well
>>>>
>>>> [2] https://lore.kernel.org/all/CAMuHMdVyf3Xtpw=LWHrnD2CVQX4xYm=FBHvY_dx9OesHDz5zNg@mail.gmail.com/
>>>
>>>> --- a/drivers/soc/renesas/rz-sysc.c
>>>> +++ b/drivers/soc/renesas/rz-sysc.c
>>> =
>>>> @@ -117,7 +125,26 @@ static int rz_sysc_probe(struct platform_device *pdev)
>>>> return PTR_ERR(sysc->base);
>>>>
>>>> sysc->dev = dev;
>>>> - return rz_sysc_soc_init(sysc, match);
>>>> + ret = rz_sysc_soc_init(sysc, match);
>>>> + if (ret)
>>>> + return ret;
>>>> +
>>>> + regmap_cfg = devm_kzalloc(dev, sizeof(*regmap_cfg), GFP_KERNEL);
>>>> + if (!regmap_cfg)
>>>> + return -ENOMEM;
>>>
>>> Is there any specific reason you decided to allocate regmap_cfg
>>> separately, instead of embedding it into struct rz_sysc?
>>
>> Sorry, I missed to mention.
>>
>> I chose to have it like this as the regmap_cfg is not used anywhere else
>> (through rz_sysc) except in probe.
>
> OK. Upon closer look, devm_regmap_init_mmio() does not save the
> regmap_cfg pointer for later use, so it can be allocated using kzalloc()
> instead, and freed immediately after calling devm_regmap_init_mmio().
You're right, I forgot this. I'll update it this way.
Thank you,
Claudiu
>
> Gr{oetje,eeting}s,
>
> Geert
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v4 4/8] dt-bindings: reset: renesas,rzg2l-usbphy-ctrl: Document RZ/G3S support
2025-08-08 6:18 ` [PATCH v4 4/8] dt-bindings: reset: renesas,rzg2l-usbphy-ctrl: Document RZ/G3S support Claudiu
@ 2025-08-13 23:21 ` Rob Herring
2025-08-19 5:21 ` claudiu beznea
0 siblings, 1 reply; 15+ messages in thread
From: Rob Herring @ 2025-08-13 23:21 UTC (permalink / raw)
To: Claudiu
Cc: vkoul, kishon, krzk+dt, conor+dt, p.zabel, geert+renesas,
magnus.damm, yoshihiro.shimoda.uh, biju.das.jz, linux-phy,
devicetree, linux-kernel, linux-renesas-soc, Claudiu Beznea
On Fri, Aug 08, 2025 at 09:18:02AM +0300, Claudiu wrote:
> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>
> The Renesas USB PHY hardware block needs to have the PWRRDY bit in the
> system controller set before applying any other settings. The PWRRDY bit
> must be controlled during power-on, power-off, and system suspend/resume
> sequences as follows:
> - during power-on/resume, it must be set to zero before enabling clocks and
> modules
> - during power-off/suspend, it must be set to one after disabling clocks
> and modules
>
> Add the renesas,sysc-pwrrdy device tree property, which allows the
> reset-rzg2l-usbphy-ctrl driver to parse, map, and control the system
> controller PWRRDY bit at the appropriate time. Along with it add a new
> compatible for the RZ/G3S SoC.
>
> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> ---
>
> Changes in v4:
> - dropped blank line from compatible section
> - s/renesas,sysc-signals/renesas,sysc-pwrrdy/g
> - dropped description from renesas,sysc-pwrrdy
> - updated description of renesas,sysc-pwrrdy items
> - updated patch description
>
> Changes in v3:
> - none; this patch is new
>
> .../reset/renesas,rzg2l-usbphy-ctrl.yaml | 40 ++++++++++++++++---
> 1 file changed, 34 insertions(+), 6 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/reset/renesas,rzg2l-usbphy-ctrl.yaml b/Documentation/devicetree/bindings/reset/renesas,rzg2l-usbphy-ctrl.yaml
> index b0b20af15313..c1d5f3228aa9 100644
> --- a/Documentation/devicetree/bindings/reset/renesas,rzg2l-usbphy-ctrl.yaml
> +++ b/Documentation/devicetree/bindings/reset/renesas,rzg2l-usbphy-ctrl.yaml
> @@ -15,12 +15,14 @@ description:
>
> properties:
> compatible:
> - items:
> - - enum:
> - - renesas,r9a07g043-usbphy-ctrl # RZ/G2UL and RZ/Five
> - - renesas,r9a07g044-usbphy-ctrl # RZ/G2{L,LC}
> - - renesas,r9a07g054-usbphy-ctrl # RZ/V2L
> - - const: renesas,rzg2l-usbphy-ctrl
> + oneOf:
> + - items:
> + - enum:
> + - renesas,r9a07g043-usbphy-ctrl # RZ/G2UL and RZ/Five
> + - renesas,r9a07g044-usbphy-ctrl # RZ/G2{L,LC}
> + - renesas,r9a07g054-usbphy-ctrl # RZ/V2L
> + - const: renesas,rzg2l-usbphy-ctrl
> + - const: renesas,r9a08g045-usbphy-ctrl # RZ/G3S
>
> reg:
> maxItems: 1
> @@ -48,6 +50,19 @@ properties:
> $ref: /schemas/regulator/regulator.yaml#
> unevaluatedProperties: false
>
> + renesas,sysc-pwrrdy:
> + description: The system controller PWRRDY indicates to the USB PHY if the
> + power supply is ready. PWRRDY needs to be set during power-on
> + before applying any other settings. It also needs to
> + be set before powering off the USB.
Where did this odd formatting come from? If copied from somewhere else,
patches reformatting them welcome.
description:
The system controller PWRRDY indicates to the USB PHY if the power
supply is ready. PWRRDY needs to be set during power-on before applying
any other settings. It also needs to be set before powering off the USB.
> + $ref: /schemas/types.yaml#/definitions/phandle-array
> + items:
> + - items:
> + - description: System controller phandle required by USB PHY CTRL
> + driver to set PWRRDY
Indent by 2 more than 'description'
With that,
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
> + - description: Register offset associated with PWRRDY
> + - description: Register bitmask associated with PWRRDY
> +
> required:
> - compatible
> - reg
> @@ -57,6 +72,19 @@ required:
> - '#reset-cells'
> - regulator-vbus
>
> +allOf:
> + - if:
> + properties:
> + compatible:
> + contains:
> + const: renesas,r9a08g045-usbphy-ctrl
> + then:
> + required:
> + - renesas,sysc-pwrrdy
> + else:
> + properties:
> + renesas,sysc-pwrrdy: false
> +
> additionalProperties: false
>
> examples:
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v4 4/8] dt-bindings: reset: renesas,rzg2l-usbphy-ctrl: Document RZ/G3S support
2025-08-13 23:21 ` Rob Herring
@ 2025-08-19 5:21 ` claudiu beznea
0 siblings, 0 replies; 15+ messages in thread
From: claudiu beznea @ 2025-08-19 5:21 UTC (permalink / raw)
To: Rob Herring
Cc: vkoul, kishon, krzk+dt, conor+dt, p.zabel, geert+renesas,
magnus.damm, yoshihiro.shimoda.uh, biju.das.jz, linux-phy,
devicetree, linux-kernel, linux-renesas-soc, Claudiu Beznea
Hi, Rob,
On 8/14/25 02:21, Rob Herring wrote:
> On Fri, Aug 08, 2025 at 09:18:02AM +0300, Claudiu wrote:
>> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>>
>> The Renesas USB PHY hardware block needs to have the PWRRDY bit in the
>> system controller set before applying any other settings. The PWRRDY bit
>> must be controlled during power-on, power-off, and system suspend/resume
>> sequences as follows:
>> - during power-on/resume, it must be set to zero before enabling clocks and
>> modules
>> - during power-off/suspend, it must be set to one after disabling clocks
>> and modules
>>
>> Add the renesas,sysc-pwrrdy device tree property, which allows the
>> reset-rzg2l-usbphy-ctrl driver to parse, map, and control the system
>> controller PWRRDY bit at the appropriate time. Along with it add a new
>> compatible for the RZ/G3S SoC.
>>
>> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>> ---
>>
>> Changes in v4:
>> - dropped blank line from compatible section
>> - s/renesas,sysc-signals/renesas,sysc-pwrrdy/g
>> - dropped description from renesas,sysc-pwrrdy
>> - updated description of renesas,sysc-pwrrdy items
>> - updated patch description
>>
>> Changes in v3:
>> - none; this patch is new
>>
>> .../reset/renesas,rzg2l-usbphy-ctrl.yaml | 40 ++++++++++++++++---
>> 1 file changed, 34 insertions(+), 6 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/reset/renesas,rzg2l-usbphy-ctrl.yaml b/Documentation/devicetree/bindings/reset/renesas,rzg2l-usbphy-ctrl.yaml
>> index b0b20af15313..c1d5f3228aa9 100644
>> --- a/Documentation/devicetree/bindings/reset/renesas,rzg2l-usbphy-ctrl.yaml
>> +++ b/Documentation/devicetree/bindings/reset/renesas,rzg2l-usbphy-ctrl.yaml
>> @@ -15,12 +15,14 @@ description:
>>
>> properties:
>> compatible:
>> - items:
>> - - enum:
>> - - renesas,r9a07g043-usbphy-ctrl # RZ/G2UL and RZ/Five
>> - - renesas,r9a07g044-usbphy-ctrl # RZ/G2{L,LC}
>> - - renesas,r9a07g054-usbphy-ctrl # RZ/V2L
>> - - const: renesas,rzg2l-usbphy-ctrl
>> + oneOf:
>> + - items:
>> + - enum:
>> + - renesas,r9a07g043-usbphy-ctrl # RZ/G2UL and RZ/Five
>> + - renesas,r9a07g044-usbphy-ctrl # RZ/G2{L,LC}
>> + - renesas,r9a07g054-usbphy-ctrl # RZ/V2L
>> + - const: renesas,rzg2l-usbphy-ctrl
>> + - const: renesas,r9a08g045-usbphy-ctrl # RZ/G3S
>>
>> reg:
>> maxItems: 1
>> @@ -48,6 +50,19 @@ properties:
>> $ref: /schemas/regulator/regulator.yaml#
>> unevaluatedProperties: false
>>
>> + renesas,sysc-pwrrdy:
>> + description: The system controller PWRRDY indicates to the USB PHY if the
>> + power supply is ready. PWRRDY needs to be set during power-on
>> + before applying any other settings. It also needs to
>> + be set before powering off the USB.
>
> Where did this odd formatting come from?
I formatted it like this by mistake.
> If copied from somewhere else,
> patches reformatting them welcome.
>
> description:
> The system controller PWRRDY indicates to the USB PHY if the power
> supply is ready. PWRRDY needs to be set during power-on before applying
> any other settings. It also needs to be set before powering off the USB.
OK
>
>
>> + $ref: /schemas/types.yaml#/definitions/phandle-array
>> + items:
>> + - items:
>> + - description: System controller phandle required by USB PHY CTRL
>> + driver to set PWRRDY
>
> Indent by 2 more than 'description'
OK
Thank you,
Claudiu
>
> With that,
>
> Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
>
>> + - description: Register offset associated with PWRRDY
>> + - description: Register bitmask associated with PWRRDY
>> +
>> required:
>> - compatible
>> - reg
>> @@ -57,6 +72,19 @@ required:
>> - '#reset-cells'
>> - regulator-vbus
>>
>> +allOf:
>> + - if:
>> + properties:
>> + compatible:
>> + contains:
>> + const: renesas,r9a08g045-usbphy-ctrl
>> + then:
>> + required:
>> + - renesas,sysc-pwrrdy
>> + else:
>> + properties:
>> + renesas,sysc-pwrrdy: false
>> +
>> additionalProperties: false
>>
>> examples:
>> --
>> 2.43.0
>>
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2025-08-19 5:21 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-08 6:17 [PATCH v4 0/8] Add initial USB support for the Renesas RZ/G3S SoC Claudiu
2025-08-08 6:17 ` [PATCH v4 1/8] soc: renesas: rz-sysc: Add syscon/regmap support Claudiu
2025-08-08 9:29 ` Geert Uytterhoeven
2025-08-08 10:32 ` Claudiu Beznea
2025-08-08 11:36 ` Geert Uytterhoeven
2025-08-08 12:11 ` Claudiu Beznea
2025-08-08 6:18 ` [PATCH v4 2/8] dt-bindings: phy: renesas,usb2-phy: Mark resets as required for RZ/G3S Claudiu
2025-08-08 6:18 ` [PATCH v4 3/8] phy: renesas: rcar-gen3-usb2: Fix an error handling path in rcar_gen3_phy_usb2_probe() Claudiu
2025-08-08 6:18 ` [PATCH v4 4/8] dt-bindings: reset: renesas,rzg2l-usbphy-ctrl: Document RZ/G3S support Claudiu
2025-08-13 23:21 ` Rob Herring
2025-08-19 5:21 ` claudiu beznea
2025-08-08 6:18 ` [PATCH v4 5/8] reset: rzg2l-usbphy-ctrl: Add support for USB PWRRDY Claudiu
2025-08-08 6:18 ` [PATCH v4 6/8] reset: rzg2l-usbphy-ctrl: Add support for RZ/G3S SoC Claudiu
2025-08-08 6:18 ` [PATCH v4 7/8] arm64: dts: renesas: r9a08g045: Add USB support Claudiu
2025-08-08 6:18 ` [PATCH v4 8/8] arm64: dts: renesas: rzg3s-smarc: Enable " Claudiu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).