Devicetree
 help / color / mirror / Atom feed
* [PATCH v2 0/7] pinctrl: renesas: rzg2l: Add support for RZ/G3S I3C
@ 2026-05-28  8:04 Claudiu Beznea
  2026-05-28  8:04 ` [PATCH v2 1/7] pinctrl: renesas: rzg2l: Generalize the power source code Claudiu Beznea
                   ` (7 more replies)
  0 siblings, 8 replies; 20+ messages in thread
From: Claudiu Beznea @ 2026-05-28  8:04 UTC (permalink / raw)
  To: geert+renesas, linusw, robh, krzk+dt, conor+dt, magnus.damm,
	prabhakar.mahadev-lad.rj
  Cc: claudiu.beznea, claudiu.beznea, linux-renesas-soc, linux-gpio,
	devicetree, linux-kernel, Claudiu Beznea

From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

Hi,

Series adds pinctrl support for the I3C on Renesas RZ/G3S SoC. For a
clean I3C support, cleanup patches for the pinctrl driver were also
included.

Thank you,
Claudiu

Changes in v2:
- collected tags
- dropped patches for configuring I3C standby

Claudiu Beznea (7):
  pinctrl: renesas: rzg2l: Generalize the power source code
  pinctrl: renesas: rzg2l: Drop defines present in struct rzg2l_hwcfg
  pinctrl: renesas: rzg2l: Keep member documentation aligned
  pinctrl: renesas: rzg2l: Use tab instead of spaces
  dt-bindings: pinctrl: renesas,rzg2l-pinctrl: Document the missing I3C
    power source option
  pinctrl: renesas: rzg2l: Add RZ/G3S support for selecting the I3C
    power source
  arm64: dts: renesas: rzg3s-smarc-som: Enable I3C

 .../pinctrl/renesas,rzg2l-pinctrl.yaml        |   2 +-
 .../boot/dts/renesas/rzg3s-smarc-som.dtsi     |  18 ++
 .../boot/dts/renesas/rzg3s-smarc-switches.h   |   4 +
 drivers/pinctrl/renesas/pinctrl-rzg2l.c       | 260 +++++++++++++-----
 4 files changed, 207 insertions(+), 77 deletions(-)

-- 
2.43.0


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

* [PATCH v2 1/7] pinctrl: renesas: rzg2l: Generalize the power source code
  2026-05-28  8:04 [PATCH v2 0/7] pinctrl: renesas: rzg2l: Add support for RZ/G3S I3C Claudiu Beznea
@ 2026-05-28  8:04 ` Claudiu Beznea
  2026-05-28  8:48   ` sashiko-bot
  2026-05-28  8:04 ` [PATCH v2 2/7] pinctrl: renesas: rzg2l: Drop defines present in struct rzg2l_hwcfg Claudiu Beznea
                   ` (6 subsequent siblings)
  7 siblings, 1 reply; 20+ messages in thread
From: Claudiu Beznea @ 2026-05-28  8:04 UTC (permalink / raw)
  To: geert+renesas, linusw, robh, krzk+dt, conor+dt, magnus.damm,
	prabhakar.mahadev-lad.rj
  Cc: claudiu.beznea, claudiu.beznea, linux-renesas-soc, linux-gpio,
	devicetree, linux-kernel, Claudiu Beznea

From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

The current functions used to get/set the pin power source check the
OTHER_POC register, which is specific to the RZ/G3L SoC only. To allow the
code to be extended for other power source functionalities (e.g. I3C on
RZ/G3S), generalize the functions used to get/set the pin power source.

For this, introduce the struct rzg2l_register_masks data structure whose
purpose is to store SoC specific register bit masks. The members of this
structure are then used in rzg2l_caps_to_pwr_reg() to retrieve the bitmask
corresponding to a SoC specific power source capability.

The conversion between HW specific power source values and SW specific
power source values is now handled through rzg2l_pwr_reg_val_to_ps() and
rzg2l_ps_to_pwr_reg_val().

Finally, to keep the code generic, the register update in
rzg2l_set_power_source() was changed to a read-modify-write approach to
cover all cases.

Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---

Changes in v2:
- none

 drivers/pinctrl/renesas/pinctrl-rzg2l.c | 177 +++++++++++++++---------
 1 file changed, 112 insertions(+), 65 deletions(-)

diff --git a/drivers/pinctrl/renesas/pinctrl-rzg2l.c b/drivers/pinctrl/renesas/pinctrl-rzg2l.c
index ac42093fc579..a648d75a2bd2 100644
--- a/drivers/pinctrl/renesas/pinctrl-rzg2l.c
+++ b/drivers/pinctrl/renesas/pinctrl-rzg2l.c
@@ -186,6 +186,7 @@
 #define PVDD_2500		2	/* I/O domain voltage 2.5V */
 #define PVDD_1800		1	/* I/O domain voltage <= 1.8V */
 #define PVDD_3300		0	/* I/O domain voltage >= 3.3V */
+#define PVDD_MASK		0x3
 
 #define PWPR_B0WI		BIT(7)	/* Bit Write Disable */
 #define PWPR_PFCWE		BIT(6)	/* PFC Register Write Enable */
@@ -268,6 +269,23 @@ struct rzg2l_register_offsets {
 	u16 other_poc;
 };
 
+/**
+ * struct rzg2l_register_masks - Masks for different RZ/G2L pinctrl functionalities
+ * @other_poc_pvdd1833_oth_awo_poc: PVDD1833_OTH_AWO_POC mask
+ * @other_poc_pvdd1833_oth_iso_poc: PVDD1833_OTH_ISO_POC mask
+ * @other_poc_wdtovf_n_poc: WDTOVF_N_POC mask
+ */
+struct rzg2l_register_masks {
+	union {
+		/* RZ/G3L masks */
+		struct {
+			u8 other_poc_pvdd1833_oth_awo_poc;
+			u8 other_poc_pvdd1833_oth_iso_poc;
+			u8 other_poc_wdtovf_n_poc;
+		};
+	};
+};
+
 /**
  * enum rzg2l_iolh_index - starting indices in IOLH specific arrays
  * @RZG2L_IOLH_IDX_1V8: starting index for 1V8 power source
@@ -288,6 +306,8 @@ enum rzg2l_iolh_index {
 /**
  * struct rzg2l_hwcfg - hardware configuration data structure
  * @regs: hardware specific register offsets
+ * @masks: hardware specific masks for various functionalities available in
+ * the registers described by regs
  * @iolh_groupa_ua: IOLH group A uA specific values
  * @iolh_groupb_ua: IOLH group B uA specific values
  * @iolh_groupc_ua: IOLH group C uA specific values
@@ -301,6 +321,7 @@ enum rzg2l_iolh_index {
  */
 struct rzg2l_hwcfg {
 	const struct rzg2l_register_offsets regs;
+	const struct rzg2l_register_masks masks;
 	u16 iolh_groupa_ua[RZG2L_IOLH_IDX_MAX];
 	u16 iolh_groupb_ua[RZG2L_IOLH_IDX_MAX];
 	u16 iolh_groupc_ua[RZG2L_IOLH_IDX_MAX];
@@ -1047,27 +1068,73 @@ static void rzg2l_rmw_pin_config(struct rzg2l_pinctrl *pctrl, u32 offset,
 }
 
 static int rzg2l_caps_to_pwr_reg(const struct rzg2l_register_offsets *regs,
-				 u32 caps, u8 *mask)
+				 const struct rzg2l_register_masks *masks,
+				 u32 caps, u16 *offset, u8 *mask)
 {
-	if (caps & PIN_CFG_IO_VMC_SD0)
-		return SD_CH(regs->sd_ch, 0);
-	if (caps & PIN_CFG_IO_VMC_SD1)
-		return SD_CH(regs->sd_ch, 1);
-	if (caps & PIN_CFG_IO_VMC_ETH0)
-		return ETH_POC(regs->eth_poc, 0);
-	if (caps & PIN_CFG_IO_VMC_ETH1)
-		return ETH_POC(regs->eth_poc, 1);
-	if (caps & PIN_CFG_IO_VMC_QSPI)
-		return QSPI;
+	*mask = PVDD_MASK;
+
+	if (caps & PIN_CFG_IO_VMC_SD0) {
+		*offset = SD_CH(regs->sd_ch, 0);
+		return 0;
+	}
+	if (caps & PIN_CFG_IO_VMC_SD1) {
+		*offset = SD_CH(regs->sd_ch, 1);
+		return 0;
+	}
+	if (caps & PIN_CFG_IO_VMC_ETH0) {
+		*offset = ETH_POC(regs->eth_poc, 0);
+		return 0;
+	}
+	if (caps & PIN_CFG_IO_VMC_ETH1) {
+		*offset = ETH_POC(regs->eth_poc, 1);
+		return 0;
+	}
+	if (caps & PIN_CFG_IO_VMC_QSPI) {
+		*offset = regs->qspi;
+		return 0;
+	}
 	if (caps & PIN_CFG_OTHER_POC_MASK) {
+		*offset = regs->other_poc;
 		if (caps & PIN_CFG_PVDD1833_OTH_AWO_POC)
-			*mask = BIT(0);
+			*mask = masks->other_poc_pvdd1833_oth_awo_poc;
 		else if (caps & PIN_CFG_PVDD1833_OTH_ISO_POC)
-			*mask = BIT(1);
+			*mask = masks->other_poc_pvdd1833_oth_iso_poc;
 		else
-			*mask = BIT(2);
+			*mask = masks->other_poc_wdtovf_n_poc;
+		return 0;
+	}
 
-		return OTHER_POC;
+	return -EINVAL;
+}
+
+static int rzg2l_pwr_reg_val_to_ps(u8 val, u32 caps)
+{
+	switch (val) {
+	case PVDD_1800:
+		return 1800;
+	case PVDD_2500:
+		return 2500;
+	case PVDD_3300:
+		return 3300;
+	}
+
+	return -EINVAL;
+}
+
+static int rzg2l_ps_to_pwr_reg_val(u8 *val, u32 ps, u32 caps)
+{
+	switch (ps) {
+	case 1800:
+		*val = PVDD_1800;
+		return 0;
+	case 2500:
+		if (!(caps & (PIN_CFG_IO_VMC_ETH0 | PIN_CFG_IO_VMC_ETH1)))
+			return -EINVAL;
+		*val = PVDD_2500;
+		return 0;
+	case 3300:
+		*val = PVDD_3300;
+		return 0;
 	}
 
 	return -EINVAL;
@@ -1077,76 +1144,51 @@ static int rzg2l_get_power_source(struct rzg2l_pinctrl *pctrl, u32 pin, u32 caps
 {
 	const struct rzg2l_hwcfg *hwcfg = pctrl->data->hwcfg;
 	const struct rzg2l_register_offsets *regs = &hwcfg->regs;
-	u8 val, mask;
-	int pwr_reg;
+	const struct rzg2l_register_masks *masks = &hwcfg->masks;
+	u8 mask, val;
+	u16 offset;
+	int ret;
 
 	if (caps & PIN_CFG_SOFT_PS)
 		return pctrl->settings[pin].power_source;
 
-	pwr_reg = rzg2l_caps_to_pwr_reg(regs, caps, &mask);
-	if (pwr_reg < 0)
-		return pwr_reg;
+	ret = rzg2l_caps_to_pwr_reg(regs, masks, caps, &offset, &mask);
+	if (ret)
+		return ret;
 
-	val = readb(pctrl->base + pwr_reg);
-	if (pwr_reg == OTHER_POC)
-		val = field_get(mask, val);
+	val = readb(pctrl->base + offset);
 
-	switch (val) {
-	case PVDD_1800:
-		return 1800;
-	case PVDD_2500:
-		return 2500;
-	case PVDD_3300:
-		return 3300;
-	default:
-		/* Should not happen. */
-		return -EINVAL;
-	}
+	return rzg2l_pwr_reg_val_to_ps(field_get(mask, val), caps);
 }
 
 static int rzg2l_set_power_source(struct rzg2l_pinctrl *pctrl, u32 pin, u32 caps, u32 ps)
 {
 	const struct rzg2l_hwcfg *hwcfg = pctrl->data->hwcfg;
 	const struct rzg2l_register_offsets *regs = &hwcfg->regs;
-	u8 poc_val, val, mask;
-	int pwr_reg;
+	const struct rzg2l_register_masks *masks = &hwcfg->masks;
+	u8 mask, val;
+	u16 offset;
+	int ret;
 
 	if (caps & PIN_CFG_SOFT_PS) {
 		pctrl->settings[pin].power_source = ps;
 		return 0;
 	}
 
-	switch (ps) {
-	case 1800:
-		poc_val = PVDD_1800;
-		break;
-	case 2500:
-		if (!(caps & (PIN_CFG_IO_VMC_ETH0 | PIN_CFG_IO_VMC_ETH1)))
-			return -EINVAL;
-		poc_val = PVDD_2500;
-		break;
-	case 3300:
-		poc_val = PVDD_3300;
-		break;
-	default:
-		return -EINVAL;
-	}
+	ret = rzg2l_ps_to_pwr_reg_val(&val, ps, caps);
+	if (ret)
+		return ret;
+
+	ret = rzg2l_caps_to_pwr_reg(regs, masks, caps, &offset, &mask);
+	if (ret)
+		return ret;
 
-	pwr_reg = rzg2l_caps_to_pwr_reg(regs, caps, &mask);
-	if (pwr_reg < 0)
-		return pwr_reg;
+	scoped_guard(raw_spinlock, &pctrl->lock) {
+		u8 tmp = readb(pctrl->base + offset);
 
-	if (pwr_reg == OTHER_POC) {
-		scoped_guard(raw_spinlock, &pctrl->lock) {
-			val = readb(pctrl->base + pwr_reg);
-			if (poc_val)
-				val |= mask;
-			else
-				val &= ~mask;
-			writeb(val, pctrl->base + pwr_reg);
-		}
-	} else {
-		writeb(poc_val, pctrl->base + pwr_reg);
+		tmp &= ~mask;
+		tmp |= field_prep(mask, val);
+		writeb(tmp, pctrl->base + offset);
 	}
 
 	pctrl->settings[pin].power_source = ps;
@@ -3795,6 +3837,11 @@ static const struct rzg2l_hwcfg rzg3l_hwcfg = {
 		.oen = 0x3018,
 		.other_poc = OTHER_POC,
 	},
+	.masks = {
+		.other_poc_pvdd1833_oth_awo_poc = BIT(0),
+		.other_poc_pvdd1833_oth_iso_poc = BIT(1),
+		.other_poc_wdtovf_n_poc = BIT(2),
+	},
 	.iolh_groupa_ua = {
 		/* 1v8 power source */
 		[RZG2L_IOLH_IDX_1V8] = 2200, 4400, 9000, 10000,
-- 
2.43.0


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

* [PATCH v2 2/7] pinctrl: renesas: rzg2l: Drop defines present in struct rzg2l_hwcfg
  2026-05-28  8:04 [PATCH v2 0/7] pinctrl: renesas: rzg2l: Add support for RZ/G3S I3C Claudiu Beznea
  2026-05-28  8:04 ` [PATCH v2 1/7] pinctrl: renesas: rzg2l: Generalize the power source code Claudiu Beznea
@ 2026-05-28  8:04 ` Claudiu Beznea
  2026-05-28  8:16   ` Biju Das
  2026-05-28 11:20   ` Wolfram Sang
  2026-05-28  8:04 ` [PATCH v2 3/7] pinctrl: renesas: rzg2l: Keep member documentation aligned Claudiu Beznea
                   ` (5 subsequent siblings)
  7 siblings, 2 replies; 20+ messages in thread
From: Claudiu Beznea @ 2026-05-28  8:04 UTC (permalink / raw)
  To: geert+renesas, linusw, robh, krzk+dt, conor+dt, magnus.damm,
	prabhakar.mahadev-lad.rj
  Cc: claudiu.beznea, claudiu.beznea, linux-renesas-soc, linux-gpio,
	devicetree, linux-kernel, Claudiu Beznea

From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

Drop the QSPI and OTHER_POC register defines, which are SoC specific and
accessible through struct rzg2l_hwcfg::{qspi, other_poc}.

Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---

Changes in v2:
- none

 drivers/pinctrl/renesas/pinctrl-rzg2l.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/pinctrl/renesas/pinctrl-rzg2l.c b/drivers/pinctrl/renesas/pinctrl-rzg2l.c
index a648d75a2bd2..77443cf1f431 100644
--- a/drivers/pinctrl/renesas/pinctrl-rzg2l.c
+++ b/drivers/pinctrl/renesas/pinctrl-rzg2l.c
@@ -180,8 +180,6 @@
 #define SMT(off)		(0x3400 + (off) * 8)
 #define SD_CH(off, ch)		((off) + (ch) * 4)
 #define ETH_POC(off, ch)	((off) + (ch) * 4)
-#define QSPI			(0x3008) /* known on RZ/{G2L,G2LC,G2UL,Five} only */
-#define OTHER_POC		(0x3028) /* known on RZ/G3L only */
 
 #define PVDD_2500		2	/* I/O domain voltage 2.5V */
 #define PVDD_1800		1	/* I/O domain voltage <= 1.8V */
@@ -3816,9 +3814,9 @@ static const struct rzg2l_hwcfg rzg2l_hwcfg = {
 	.regs = {
 		.pwpr = 0x3014,
 		.sd_ch = 0x3000,
+		.qspi = 0x3008,
 		.eth_poc = 0x300c,
 		.oen = 0x3018,
-		.qspi = QSPI,
 	},
 	.iolh_groupa_ua = {
 		/* 3v3 power source */
@@ -3835,7 +3833,7 @@ static const struct rzg2l_hwcfg rzg3l_hwcfg = {
 		.sd_ch = 0x3004,
 		.eth_poc = 0x3010,
 		.oen = 0x3018,
-		.other_poc = OTHER_POC,
+		.other_poc = 0x3028,
 	},
 	.masks = {
 		.other_poc_pvdd1833_oth_awo_poc = BIT(0),
-- 
2.43.0


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

* [PATCH v2 3/7] pinctrl: renesas: rzg2l: Keep member documentation aligned
  2026-05-28  8:04 [PATCH v2 0/7] pinctrl: renesas: rzg2l: Add support for RZ/G3S I3C Claudiu Beznea
  2026-05-28  8:04 ` [PATCH v2 1/7] pinctrl: renesas: rzg2l: Generalize the power source code Claudiu Beznea
  2026-05-28  8:04 ` [PATCH v2 2/7] pinctrl: renesas: rzg2l: Drop defines present in struct rzg2l_hwcfg Claudiu Beznea
@ 2026-05-28  8:04 ` Claudiu Beznea
  2026-05-28 11:21   ` Wolfram Sang
  2026-05-28  8:04 ` [PATCH v2 4/7] pinctrl: renesas: rzg2l: Use tab instead of spaces Claudiu Beznea
                   ` (4 subsequent siblings)
  7 siblings, 1 reply; 20+ messages in thread
From: Claudiu Beznea @ 2026-05-28  8:04 UTC (permalink / raw)
  To: geert+renesas, linusw, robh, krzk+dt, conor+dt, magnus.damm,
	prabhakar.mahadev-lad.rj
  Cc: claudiu.beznea, claudiu.beznea, linux-renesas-soc, linux-gpio,
	devicetree, linux-kernel, Claudiu Beznea

From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

Keep the documentation for struct rzg2l_pinctrl_reg_cache members aligned
with the struct member order.

Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---

Changes in v2:
- collected tags

 drivers/pinctrl/renesas/pinctrl-rzg2l.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/pinctrl/renesas/pinctrl-rzg2l.c b/drivers/pinctrl/renesas/pinctrl-rzg2l.c
index 77443cf1f431..b1ffdc133987 100644
--- a/drivers/pinctrl/renesas/pinctrl-rzg2l.c
+++ b/drivers/pinctrl/renesas/pinctrl-rzg2l.c
@@ -380,16 +380,16 @@ struct rzg2l_pinctrl_pin_settings {
  * @pmc: PMC registers cache
  * @pfc: PFC registers cache
  * @iolh: IOLH registers cache
- * @pupd: PUPD registers cache
  * @ien: IEN registers cache
+ * @pupd: PUPD registers cache
  * @smt: SMT registers cache
  * @sr: SR registers cache
  * @nod: NOD registers cache
  * @clone: Clone register cache
  * @sd_ch: SD_CH registers cache
  * @eth_poc: ET_POC registers cache
- * @other_poc: OTHER_POC register cache
  * @oen: Output Enable register cache
+ * @other_poc: OTHER_POC register cache
  * @qspi: QSPI registers cache
  */
 struct rzg2l_pinctrl_reg_cache {
-- 
2.43.0


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

* [PATCH v2 4/7] pinctrl: renesas: rzg2l: Use tab instead of spaces
  2026-05-28  8:04 [PATCH v2 0/7] pinctrl: renesas: rzg2l: Add support for RZ/G3S I3C Claudiu Beznea
                   ` (2 preceding siblings ...)
  2026-05-28  8:04 ` [PATCH v2 3/7] pinctrl: renesas: rzg2l: Keep member documentation aligned Claudiu Beznea
@ 2026-05-28  8:04 ` Claudiu Beznea
  2026-05-28 11:23   ` Wolfram Sang
  2026-05-28  8:04 ` [PATCH v2 5/7] dt-bindings: pinctrl: renesas,rzg2l-pinctrl: Document the missing I3C power source option Claudiu Beznea
                   ` (3 subsequent siblings)
  7 siblings, 1 reply; 20+ messages in thread
From: Claudiu Beznea @ 2026-05-28  8:04 UTC (permalink / raw)
  To: geert+renesas, linusw, robh, krzk+dt, conor+dt, magnus.damm,
	prabhakar.mahadev-lad.rj
  Cc: claudiu.beznea, claudiu.beznea, linux-renesas-soc, linux-gpio,
	devicetree, linux-kernel, Claudiu Beznea

From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

Use tab instead of spaces to follow the same coding style.

Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---

Changes in v2:
- collected tags 

 drivers/pinctrl/renesas/pinctrl-rzg2l.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/pinctrl/renesas/pinctrl-rzg2l.c b/drivers/pinctrl/renesas/pinctrl-rzg2l.c
index b1ffdc133987..517001145bd0 100644
--- a/drivers/pinctrl/renesas/pinctrl-rzg2l.c
+++ b/drivers/pinctrl/renesas/pinctrl-rzg2l.c
@@ -407,7 +407,7 @@ struct rzg2l_pinctrl_reg_cache {
 	u8	sd_ch[2];
 	u8	eth_poc[2];
 	u8	oen;
-	u8      other_poc;
+	u8	other_poc;
 	u8	qspi;
 };
 
-- 
2.43.0


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

* [PATCH v2 5/7] dt-bindings: pinctrl: renesas,rzg2l-pinctrl: Document the missing I3C power source option
  2026-05-28  8:04 [PATCH v2 0/7] pinctrl: renesas: rzg2l: Add support for RZ/G3S I3C Claudiu Beznea
                   ` (3 preceding siblings ...)
  2026-05-28  8:04 ` [PATCH v2 4/7] pinctrl: renesas: rzg2l: Use tab instead of spaces Claudiu Beznea
@ 2026-05-28  8:04 ` Claudiu Beznea
  2026-05-28 11:23   ` Wolfram Sang
  2026-05-28  8:04 ` [PATCH v2 6/7] pinctrl: renesas: rzg2l: Add RZ/G3S support for selecting the I3C power source Claudiu Beznea
                   ` (2 subsequent siblings)
  7 siblings, 1 reply; 20+ messages in thread
From: Claudiu Beznea @ 2026-05-28  8:04 UTC (permalink / raw)
  To: geert+renesas, linusw, robh, krzk+dt, conor+dt, magnus.damm,
	prabhakar.mahadev-lad.rj
  Cc: claudiu.beznea, claudiu.beznea, linux-renesas-soc, linux-gpio,
	devicetree, linux-kernel, Claudiu Beznea, Conor Dooley

From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

The I3C pins on the Renesas RZ/G3S SoC can be powered at either 1.2V or
1.8V. Document the missing 1.2V power source option.

Acked-by: Conor Dooley <conor.dooley@microchip.com>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---

Changes in v2:
- collected tags

 .../devicetree/bindings/pinctrl/renesas,rzg2l-pinctrl.yaml      | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/pinctrl/renesas,rzg2l-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/renesas,rzg2l-pinctrl.yaml
index fb1fe1ea759f..32864c9add4a 100644
--- a/Documentation/devicetree/bindings/pinctrl/renesas,rzg2l-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/renesas,rzg2l-pinctrl.yaml
@@ -129,7 +129,7 @@ additionalProperties:
           enum: [ 33, 50, 66, 100 ]
         power-source:
           description: I/O voltage in millivolt.
-          enum: [ 1800, 2500, 3300 ]
+          enum: [ 1200, 1800, 2500, 3300 ]
         slew-rate: true
         gpio-hog: true
         gpios: true
-- 
2.43.0


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

* [PATCH v2 6/7] pinctrl: renesas: rzg2l: Add RZ/G3S support for selecting the I3C power source
  2026-05-28  8:04 [PATCH v2 0/7] pinctrl: renesas: rzg2l: Add support for RZ/G3S I3C Claudiu Beznea
                   ` (4 preceding siblings ...)
  2026-05-28  8:04 ` [PATCH v2 5/7] dt-bindings: pinctrl: renesas,rzg2l-pinctrl: Document the missing I3C power source option Claudiu Beznea
@ 2026-05-28  8:04 ` Claudiu Beznea
  2026-05-28 11:24   ` Wolfram Sang
  2026-05-28  8:04 ` [PATCH v2 7/7] arm64: dts: renesas: rzg3s-smarc-som: Enable I3C Claudiu Beznea
  2026-05-28  8:15 ` [PATCH v2 0/7] pinctrl: renesas: rzg2l: Add support for RZ/G3S I3C Claudiu Beznea
  7 siblings, 1 reply; 20+ messages in thread
From: Claudiu Beznea @ 2026-05-28  8:04 UTC (permalink / raw)
  To: geert+renesas, linusw, robh, krzk+dt, conor+dt, magnus.damm,
	prabhakar.mahadev-lad.rj
  Cc: claudiu.beznea, claudiu.beznea, linux-renesas-soc, linux-gpio,
	devicetree, linux-kernel, Claudiu Beznea

From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

The Renesas RZ/G3S I3C pins can be powered at either 1.8V or 1.2V. The
pin controller provides a register to select between these two options.
Update the Renesas RZ/G2L pin controller driver to allow selecting the
I3C power source on RZ/G3S SoC.

Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---

Changes in v2:
- none

 drivers/pinctrl/renesas/pinctrl-rzg2l.c | 73 +++++++++++++++++++++++--
 1 file changed, 68 insertions(+), 5 deletions(-)

diff --git a/drivers/pinctrl/renesas/pinctrl-rzg2l.c b/drivers/pinctrl/renesas/pinctrl-rzg2l.c
index 517001145bd0..68329b6c6649 100644
--- a/drivers/pinctrl/renesas/pinctrl-rzg2l.c
+++ b/drivers/pinctrl/renesas/pinctrl-rzg2l.c
@@ -69,6 +69,7 @@
 #define PIN_CFG_PVDD1833_OTH_AWO_POC	BIT(19) /* known on RZ/G3L only */
 #define PIN_CFG_PVDD1833_OTH_ISO_POC	BIT(20) /* known on RZ/G3L only */
 #define PIN_CFG_WDTOVF_N_POC		BIT(21) /* known on RZ/G3L only */
+#define PIN_CFG_IO_VMC_I3C		BIT(22)
 
 #define RZG2L_SINGLE_PIN		BIT_ULL(63)	/* Dedicated pin */
 #define RZG2L_VARIABLE_CFG		BIT_ULL(62)	/* Variable cfg for port pins */
@@ -186,6 +187,9 @@
 #define PVDD_3300		0	/* I/O domain voltage >= 3.3V */
 #define PVDD_MASK		0x3
 
+#define PVDD_I3C_1200		1	/* I3C I/O domain voltage 1.2V */
+#define PVDD_I3C_1800		0	/* I3C I/O domain voltage 1.8V */
+
 #define PWPR_B0WI		BIT(7)	/* Bit Write Disable */
 #define PWPR_PFCWE		BIT(6)	/* PFC Register Write Enable */
 #define PWPR_REGWE_A		BIT(6)	/* PFC and PMC Register Write Enable on RZ/V2H(P) */
@@ -257,6 +261,7 @@ static const struct pin_config_item renesas_rzv2h_conf_items[] = {
  * @oen: OEN register offset
  * @qspi: QSPI register offset
  * @other_poc: OTHER_POC register offset
+ * @i3c_set: I3C_SET register offset
  */
 struct rzg2l_register_offsets {
 	u16 pwpr;
@@ -265,6 +270,7 @@ struct rzg2l_register_offsets {
 	u16 oen;
 	u16 qspi;
 	u16 other_poc;
+	u16 i3c_set;
 };
 
 /**
@@ -272,6 +278,7 @@ struct rzg2l_register_offsets {
  * @other_poc_pvdd1833_oth_awo_poc: PVDD1833_OTH_AWO_POC mask
  * @other_poc_pvdd1833_oth_iso_poc: PVDD1833_OTH_ISO_POC mask
  * @other_poc_wdtovf_n_poc: WDTOVF_N_POC mask
+ * @i3c_set_poc: I3C_SET_POC mask
  */
 struct rzg2l_register_masks {
 	union {
@@ -281,6 +288,11 @@ struct rzg2l_register_masks {
 			u8 other_poc_pvdd1833_oth_iso_poc;
 			u8 other_poc_wdtovf_n_poc;
 		};
+
+		/* RZ/G3S masks */
+		struct {
+			u8 i3c_set_poc;
+		};
 	};
 };
 
@@ -391,6 +403,7 @@ struct rzg2l_pinctrl_pin_settings {
  * @oen: Output Enable register cache
  * @other_poc: OTHER_POC register cache
  * @qspi: QSPI registers cache
+ * @i3c_set: I3C_SET register cache
  */
 struct rzg2l_pinctrl_reg_cache {
 	u8	*p;
@@ -409,6 +422,7 @@ struct rzg2l_pinctrl_reg_cache {
 	u8	oen;
 	u8	other_poc;
 	u8	qspi;
+	u8	i3c_set;
 };
 
 struct rzg2l_pinctrl {
@@ -441,6 +455,7 @@ struct rzg2l_pinctrl {
 };
 
 static const u16 available_ps[] = { 1800, 2500, 3300 };
+static const u16 available_i3c_ps[] = { 1200, 1800 };
 
 static u64 rzg2l_pinctrl_get_variable_pin_cfg(struct rzg2l_pinctrl *pctrl,
 					      u64 pincfg,
@@ -1101,12 +1116,28 @@ static int rzg2l_caps_to_pwr_reg(const struct rzg2l_register_offsets *regs,
 			*mask = masks->other_poc_wdtovf_n_poc;
 		return 0;
 	}
+	if (caps & PIN_CFG_IO_VMC_I3C) {
+		*offset = regs->i3c_set;
+		*mask = masks->i3c_set_poc;
+		return 0;
+	}
 
 	return -EINVAL;
 }
 
 static int rzg2l_pwr_reg_val_to_ps(u8 val, u32 caps)
 {
+	if (caps & PIN_CFG_IO_VMC_I3C) {
+		switch (val) {
+		case PVDD_I3C_1200:
+			return 1200;
+		case PVDD_I3C_1800:
+			return 1800;
+		}
+
+		return -EINVAL;
+	}
+
 	switch (val) {
 	case PVDD_1800:
 		return 1800;
@@ -1121,6 +1152,19 @@ static int rzg2l_pwr_reg_val_to_ps(u8 val, u32 caps)
 
 static int rzg2l_ps_to_pwr_reg_val(u8 *val, u32 ps, u32 caps)
 {
+	if (caps & PIN_CFG_IO_VMC_I3C) {
+		switch (ps) {
+		case 1200:
+			*val = PVDD_I3C_1200;
+			return 0;
+		case 1800:
+			*val = PVDD_I3C_1800;
+			return 0;
+		}
+
+		return -EINVAL;
+	}
+
 	switch (ps) {
 	case 1800:
 		*val = PVDD_1800;
@@ -1194,12 +1238,21 @@ static int rzg2l_set_power_source(struct rzg2l_pinctrl *pctrl, u32 pin, u32 caps
 	return 0;
 }
 
-static bool rzg2l_ps_is_supported(u16 ps)
+static bool rzg2l_ps_is_supported(u16 ps, u32 caps)
 {
-	unsigned int i;
+	unsigned int i, len;
+	const u16 *array;
 
-	for (i = 0; i < ARRAY_SIZE(available_ps); i++) {
-		if (available_ps[i] == ps)
+	if (caps & PIN_CFG_IO_VMC_I3C) {
+		array = available_i3c_ps;
+		len = ARRAY_SIZE(available_i3c_ps);
+	} else {
+		array = available_ps;
+		len = ARRAY_SIZE(available_ps);
+	}
+
+	for (i = 0; i < len; i++) {
+		if (array[i] == ps)
 			return true;
 	}
 
@@ -1800,7 +1853,7 @@ static int rzg2l_pinctrl_pinconf_set(struct pinctrl_dev *pctldev,
 
 	/* Apply power source. */
 	if (settings.power_source != pctrl->settings[_pin].power_source) {
-		ret = rzg2l_ps_is_supported(settings.power_source);
+		ret = rzg2l_ps_is_supported(settings.power_source, cfg);
 		if (!ret)
 			return -EINVAL;
 
@@ -2498,6 +2551,8 @@ static const struct rzg2l_dedicated_configs rzg3s_dedicated_pins[] = {
 	{ "AUDIO_CLK1", RZG2L_SINGLE_PIN_PACK(0x2, 0, PIN_CFG_IEN) },
 	{ "AUDIO_CLK2", RZG2L_SINGLE_PIN_PACK(0x2, 1, PIN_CFG_IEN) },
 	{ "WDTOVF_PERROUT#", RZG2L_SINGLE_PIN_PACK(0x6, 0, PIN_CFG_IOLH_A | PIN_CFG_SOFT_PS) },
+	{ "I3C_SDA", RZG2L_SINGLE_PIN_PACK(0x9, 0, (PIN_CFG_IEN | PIN_CFG_IO_VMC_I3C)) },
+	{ "I3C_SCL", RZG2L_SINGLE_PIN_PACK(0x9, 1, (PIN_CFG_IEN | PIN_CFG_IO_VMC_I3C)) },
 	{ "SD0_CLK", RZG2L_SINGLE_PIN_PACK(0x10, 0, (PIN_CFG_IOLH_B | PIN_CFG_IO_VMC_SD0)) },
 	{ "SD0_CMD", RZG2L_SINGLE_PIN_PACK(0x10, 1, (PIN_CFG_IOLH_B | PIN_CFG_IEN |
 						     PIN_CFG_IO_VMC_SD0)) },
@@ -3717,6 +3772,8 @@ static int rzg2l_pinctrl_suspend_noirq(struct device *dev)
 	cache->oen = readb(pctrl->base + pctrl->data->hwcfg->regs.oen);
 	if (regs->other_poc)
 		cache->other_poc = readb(pctrl->base + regs->other_poc);
+	if (regs->i3c_set)
+		cache->i3c_set = readb(pctrl->base + regs->i3c_set);
 
 	if (pctrl->syscon) {
 		int ret;
@@ -3759,6 +3816,8 @@ static int rzg2l_pinctrl_resume_noirq(struct device *dev)
 		writeb(cache->qspi, pctrl->base + regs->qspi);
 	if (regs->other_poc)
 		writeb(cache->other_poc, pctrl->base + regs->other_poc);
+	if (regs->i3c_set)
+		writeb(cache->i3c_set, pctrl->base + regs->i3c_set);
 
 	raw_spin_lock_irqsave(&pctrl->lock, flags);
 	rzg2l_oen_write_with_pwpr(pctrl, cache->oen);
@@ -3871,8 +3930,12 @@ static const struct rzg2l_hwcfg rzg3s_hwcfg = {
 		.pwpr = 0x3000,
 		.sd_ch = 0x3004,
 		.eth_poc = 0x3010,
+		.i3c_set = 0x301c,
 		.oen = 0x3018,
 	},
+	.masks = {
+		.i3c_set_poc = BIT(2),
+	},
 	.iolh_groupa_ua = {
 		/* 1v8 power source */
 		[RZG2L_IOLH_IDX_1V8] = 2200, 4400, 9000, 10000,
-- 
2.43.0


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

* [PATCH v2 7/7] arm64: dts: renesas: rzg3s-smarc-som: Enable I3C
  2026-05-28  8:04 [PATCH v2 0/7] pinctrl: renesas: rzg2l: Add support for RZ/G3S I3C Claudiu Beznea
                   ` (5 preceding siblings ...)
  2026-05-28  8:04 ` [PATCH v2 6/7] pinctrl: renesas: rzg2l: Add RZ/G3S support for selecting the I3C power source Claudiu Beznea
@ 2026-05-28  8:04 ` Claudiu Beznea
  2026-05-28 11:25   ` Wolfram Sang
  2026-05-28  8:15 ` [PATCH v2 0/7] pinctrl: renesas: rzg2l: Add support for RZ/G3S I3C Claudiu Beznea
  7 siblings, 1 reply; 20+ messages in thread
From: Claudiu Beznea @ 2026-05-28  8:04 UTC (permalink / raw)
  To: geert+renesas, linusw, robh, krzk+dt, conor+dt, magnus.damm,
	prabhakar.mahadev-lad.rj
  Cc: claudiu.beznea, claudiu.beznea, linux-renesas-soc, linux-gpio,
	devicetree, linux-kernel, Claudiu Beznea

From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

The Renesas RZ/G3S SMARC SoM board has a connector for I3C interface.
Enable I3C.

Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---

Changes in v2:
- dropped pinctrl sleep state

 .../boot/dts/renesas/rzg3s-smarc-som.dtsi      | 18 ++++++++++++++++++
 .../boot/dts/renesas/rzg3s-smarc-switches.h    |  4 ++++
 2 files changed, 22 insertions(+)

diff --git a/arch/arm64/boot/dts/renesas/rzg3s-smarc-som.dtsi b/arch/arm64/boot/dts/renesas/rzg3s-smarc-som.dtsi
index b45acfe6288a..af7357fe4655 100644
--- a/arch/arm64/boot/dts/renesas/rzg3s-smarc-som.dtsi
+++ b/arch/arm64/boot/dts/renesas/rzg3s-smarc-som.dtsi
@@ -168,6 +168,14 @@ a0 80 30 30 9c
 	};
 };
 
+&i3c {
+	pinctrl-names = "default";
+	pinctrl-0 = <&i3c_pins>;
+	i2c-scl-hz = <400000>;
+	i3c-scl-hz = <12500000>;
+	status = "okay";
+};
+
 &pcie_port0 {
 	clocks = <&versa3 5>;
 	clock-names = "ref";
@@ -302,6 +310,16 @@ mux {
 		};
 	};
 
+	i3c_pins: i3c {
+		pins = "I3C_SDA", "I3C_SCL";
+#if SW_CONFIG4 == SW_ON
+		power-source = <1200>;
+#else
+		power-source = <1800>;
+#endif
+		input-enable;
+	};
+
 	sdhi0_pins: sd0 {
 		data {
 			pins = "SD0_DATA0", "SD0_DATA1", "SD0_DATA2", "SD0_DATA3";
diff --git a/arch/arm64/boot/dts/renesas/rzg3s-smarc-switches.h b/arch/arm64/boot/dts/renesas/rzg3s-smarc-switches.h
index bbf908a5322c..9cccc87da057 100644
--- a/arch/arm64/boot/dts/renesas/rzg3s-smarc-switches.h
+++ b/arch/arm64/boot/dts/renesas/rzg3s-smarc-switches.h
@@ -25,9 +25,13 @@
  * @SW_CONFIG3:
  *	SW_OFF - SD2 is connected to SoC
  *	SW_ON  - SCIF1, SSI0, IRQ0, IRQ1 connected to SoC
+ * @SW_CONFIG4:
+ *	SW_OFF - I3C voltage is 1.8V
+ *	SW_ON  - I3C voltage is 1.2V
  */
 #define SW_CONFIG2	SW_OFF
 #define SW_CONFIG3	SW_ON
+#define SW_CONFIG4	SW_OFF
 
 /*
  * SW_OPT_MUX[x] switches' states:
-- 
2.43.0


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

* Re: [PATCH v2 0/7] pinctrl: renesas: rzg2l: Add support for RZ/G3S I3C
  2026-05-28  8:04 [PATCH v2 0/7] pinctrl: renesas: rzg2l: Add support for RZ/G3S I3C Claudiu Beznea
                   ` (6 preceding siblings ...)
  2026-05-28  8:04 ` [PATCH v2 7/7] arm64: dts: renesas: rzg3s-smarc-som: Enable I3C Claudiu Beznea
@ 2026-05-28  8:15 ` Claudiu Beznea
  2026-05-28 11:34   ` Wolfram Sang
  7 siblings, 1 reply; 20+ messages in thread
From: Claudiu Beznea @ 2026-05-28  8:15 UTC (permalink / raw)
  To: geert+renesas, linusw, robh, krzk+dt, conor+dt, magnus.damm,
	prabhakar.mahadev-lad.rj, Wolfram Sang
  Cc: claudiu.beznea, linux-renesas-soc, linux-gpio, devicetree,
	linux-kernel, Claudiu Beznea

+ Wolfram

On 5/28/26 11:04, Claudiu Beznea wrote:
> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> 
> Hi,
> 
> Series adds pinctrl support for the I3C on Renesas RZ/G3S SoC. For a
> clean I3C support, cleanup patches for the pinctrl driver were also
> included.
> 
> Thank you,
> Claudiu
> 
> Changes in v2:
> - collected tags
> - dropped patches for configuring I3C standby
> 
> Claudiu Beznea (7):
>    pinctrl: renesas: rzg2l: Generalize the power source code
>    pinctrl: renesas: rzg2l: Drop defines present in struct rzg2l_hwcfg
>    pinctrl: renesas: rzg2l: Keep member documentation aligned
>    pinctrl: renesas: rzg2l: Use tab instead of spaces
>    dt-bindings: pinctrl: renesas,rzg2l-pinctrl: Document the missing I3C
>      power source option
>    pinctrl: renesas: rzg2l: Add RZ/G3S support for selecting the I3C
>      power source
>    arm64: dts: renesas: rzg3s-smarc-som: Enable I3C
> 
>   .../pinctrl/renesas,rzg2l-pinctrl.yaml        |   2 +-
>   .../boot/dts/renesas/rzg3s-smarc-som.dtsi     |  18 ++
>   .../boot/dts/renesas/rzg3s-smarc-switches.h   |   4 +
>   drivers/pinctrl/renesas/pinctrl-rzg2l.c       | 260 +++++++++++++-----
>   4 files changed, 207 insertions(+), 77 deletions(-)
> 

-- 
Thank you,
Claudiu


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

* RE: [PATCH v2 2/7] pinctrl: renesas: rzg2l: Drop defines present in struct rzg2l_hwcfg
  2026-05-28  8:04 ` [PATCH v2 2/7] pinctrl: renesas: rzg2l: Drop defines present in struct rzg2l_hwcfg Claudiu Beznea
@ 2026-05-28  8:16   ` Biju Das
  2026-05-28  8:46     ` Claudiu Beznea
  2026-05-28 11:20   ` Wolfram Sang
  1 sibling, 1 reply; 20+ messages in thread
From: Biju Das @ 2026-05-28  8:16 UTC (permalink / raw)
  To: Claudiu Beznea, geert+renesas@glider.be, linusw@kernel.org,
	robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org,
	magnus.damm, Prabhakar Mahadev Lad
  Cc: Claudiu.Beznea, linux-renesas-soc@vger.kernel.org,
	linux-gpio@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, Claudiu Beznea

Hi Claudiu Beznea,

Thanks for the patch.

> -----Original Message-----
> From: Claudiu Beznea <claudiu.beznea@kernel.org>
> Sent: 28 May 2026 09:05
> Subject: [PATCH v2 2/7] pinctrl: renesas: rzg2l: Drop defines present in struct rzg2l_hwcfg
> 
> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> 
> Drop the QSPI and OTHER_POC register defines, which are SoC specific and accessible through struct
> rzg2l_hwcfg::{qspi, other_poc}.
> 
> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> ---
> 
> Changes in v2:
> - none
> 
>  drivers/pinctrl/renesas/pinctrl-rzg2l.c | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/pinctrl/renesas/pinctrl-rzg2l.c b/drivers/pinctrl/renesas/pinctrl-rzg2l.c
> index a648d75a2bd2..77443cf1f431 100644
> --- a/drivers/pinctrl/renesas/pinctrl-rzg2l.c
> +++ b/drivers/pinctrl/renesas/pinctrl-rzg2l.c
> @@ -180,8 +180,6 @@
>  #define SMT(off)		(0x3400 + (off) * 8)
>  #define SD_CH(off, ch)		((off) + (ch) * 4)
>  #define ETH_POC(off, ch)	((off) + (ch) * 4)
> -#define QSPI			(0x3008) /* known on RZ/{G2L,G2LC,G2UL,Five} only */
> -#define OTHER_POC		(0x3028) /* known on RZ/G3L only */
> 
>  #define PVDD_2500		2	/* I/O domain voltage 2.5V */
>  #define PVDD_1800		1	/* I/O domain voltage <= 1.8V */
> @@ -3816,9 +3814,9 @@ static const struct rzg2l_hwcfg rzg2l_hwcfg = {
>  	.regs = {
>  		.pwpr = 0x3014,
>  		.sd_ch = 0x3000,
> +		.qspi = 0x3008,
>  		.eth_poc = 0x300c,
>  		.oen = 0x3018,
> -		.qspi = QSPI,

Any reason for moving the assignment?

struct rzg2l_register_offsets {
	u16 pwpr;
	u16 sd_ch;
	u16 eth_poc;
	u16 oen;
	u16 qspi;
	u16 other_poc;
};

Cheers,
Biju

>  	},
>  	.iolh_groupa_ua = {
>  		/* 3v3 power source */
> @@ -3835,7 +3833,7 @@ static const struct rzg2l_hwcfg rzg3l_hwcfg = {
>  		.sd_ch = 0x3004,
>  		.eth_poc = 0x3010,
>  		.oen = 0x3018,
> -		.other_poc = OTHER_POC,
> +		.other_poc = 0x3028,
>  	},
>  	.masks = {
>  		.other_poc_pvdd1833_oth_awo_poc = BIT(0),
> --
> 2.43.0
> 


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

* Re: [PATCH v2 2/7] pinctrl: renesas: rzg2l: Drop defines present in struct rzg2l_hwcfg
  2026-05-28  8:16   ` Biju Das
@ 2026-05-28  8:46     ` Claudiu Beznea
  2026-05-28  8:54       ` Biju Das
  0 siblings, 1 reply; 20+ messages in thread
From: Claudiu Beznea @ 2026-05-28  8:46 UTC (permalink / raw)
  To: Biju Das, geert+renesas@glider.be, linusw@kernel.org,
	robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org,
	magnus.damm, Prabhakar Mahadev Lad
  Cc: Claudiu.Beznea, linux-renesas-soc@vger.kernel.org,
	linux-gpio@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, Claudiu Beznea

Hi, Biju,

On 5/28/26 11:16, Biju Das wrote:
>> @@ -3816,9 +3814,9 @@ static const struct rzg2l_hwcfg rzg2l_hwcfg = {
>>   	.regs = {
>>   		.pwpr = 0x3014,
>>   		.sd_ch = 0x3000,
>> +		.qspi = 0x3008,
>>   		.eth_poc = 0x300c,
>>   		.oen = 0x3018,
>> -		.qspi = QSPI,
> Any reason for moving the assignment?

I tried to keep it sorted by the register offsets but it seems the pwpr is not 
in the right place either for this.
> 
> struct rzg2l_register_offsets {
> 	u16 pwpr;
> 	u16 sd_ch;
> 	u16 eth_poc;
> 	u16 oen;
> 	u16 qspi;
> 	u16 other_poc;
> };
> 
> Cheers,
> Biju

-- 
Thank you,
Claudiu


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

* Re: [PATCH v2 1/7] pinctrl: renesas: rzg2l: Generalize the power source code
  2026-05-28  8:04 ` [PATCH v2 1/7] pinctrl: renesas: rzg2l: Generalize the power source code Claudiu Beznea
@ 2026-05-28  8:48   ` sashiko-bot
  0 siblings, 0 replies; 20+ messages in thread
From: sashiko-bot @ 2026-05-28  8:48 UTC (permalink / raw)
  To: Claudiu Beznea; +Cc: devicetree, conor+dt, wsa+renesas, robh

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:

Pre-existing issues:
- [High] Acquiring an IRQ-safe lock without disabling interrupts causes lockdep inconsistency and potential deadlocks.
--

commit 22349bc4fa49f3c73863f4e8930404081ba4603f
Author: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

pinctrl: renesas: rzg2l: Generalize the power source code

This commit generalizes the get/set pin power source functions to allow
extension for other functionalities like I3C on RZ/G3S. It introduces a
register masks data structure and updates the register modification in
rzg2l_set_power_source() to use a generic read-modify-write approach.

> diff --git a/drivers/pinctrl/renesas/pinctrl-rzg2l.c b/drivers/pinctrl/renesas/pinctrl-rzg2l.c
> index ac42093fc579c..a648d75a2bd23 100644
> --- a/drivers/pinctrl/renesas/pinctrl-rzg2l.c
> +++ b/drivers/pinctrl/renesas/pinctrl-rzg2l.c

[ ... ]

> @@ -1077,76 +1144,51 @@ static int rzg2l_get_power_source(struct rzg2l_pinctrl *pctrl, u32 pin, u32 caps
>  static int rzg2l_set_power_source(struct rzg2l_pinctrl *pctrl, u32 pin, u32 caps, u32 ps)
>  {

[ ... ]

> -	if (pwr_reg == OTHER_POC) {
> -		scoped_guard(raw_spinlock, &pctrl->lock) {
> -			val = readb(pctrl->base + pwr_reg);
> -			if (poc_val)
> -				val |= mask;
> -			else
> -				val &= ~mask;
> -			writeb(val, pctrl->base + pwr_reg);
> -		}
> -	} else {
> -		writeb(poc_val, pctrl->base + pwr_reg);
> +	scoped_guard(raw_spinlock, &pctrl->lock) {
> +		u8 tmp = readb(pctrl->base + offset);

[Severity: High]
This isn't a bug introduced by this patch, but since this change expands the
lock usage to all power source updates, could this result in a deadlock?

The lock pctrl->lock is an IRQ-safe raw spinlock, acquired with interrupts
disabled in functions like rzg2l_gpio_irq_disable().

Using scoped_guard(raw_spinlock, &pctrl->lock) disables preemption but
leaves local hardware interrupts enabled. If a GPIO interrupt fires on the
same CPU while this lock is held, and the client interrupt handler calls
disable_irq_nosync(), the system would attempt to acquire the already-held
lock.

Would it be safer to use scoped_guard(raw_spinlock_irqsave, &pctrl->lock)
instead?

>  
> +		tmp &= ~mask;
> +		tmp |= field_prep(mask, val);
> +		writeb(tmp, pctrl->base + offset);
>  	}
>  
>  	pctrl->settings[pin].power_source = ps;

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260528080439.615958-1-claudiu.beznea@kernel.org?part=1

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

* RE: [PATCH v2 2/7] pinctrl: renesas: rzg2l: Drop defines present in struct rzg2l_hwcfg
  2026-05-28  8:46     ` Claudiu Beznea
@ 2026-05-28  8:54       ` Biju Das
  0 siblings, 0 replies; 20+ messages in thread
From: Biju Das @ 2026-05-28  8:54 UTC (permalink / raw)
  To: Claudiu Beznea, geert+renesas@glider.be, linusw@kernel.org,
	robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org,
	magnus.damm, Prabhakar Mahadev Lad
  Cc: Claudiu.Beznea, linux-renesas-soc@vger.kernel.org,
	linux-gpio@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, Claudiu Beznea



> -----Original Message-----
> From: Claudiu Beznea <claudiu.beznea@kernel.org>
> Sent: 28 May 2026 09:46
> Subject: Re: [PATCH v2 2/7] pinctrl: renesas: rzg2l: Drop defines present in struct rzg2l_hwcfg
> 
> Hi, Biju,
> 
> On 5/28/26 11:16, Biju Das wrote:
> >> @@ -3816,9 +3814,9 @@ static const struct rzg2l_hwcfg rzg2l_hwcfg = {
> >>   	.regs = {
> >>   		.pwpr = 0x3014,
> >>   		.sd_ch = 0x3000,
> >> +		.qspi = 0x3008,
> >>   		.eth_poc = 0x300c,
> >>   		.oen = 0x3018,
> >> -		.qspi = QSPI,
> > Any reason for moving the assignment?
> 
> I tried to keep it sorted by the register offsets but it seems the pwpr is not in the right place
> either for this.

Ok.

Cheers,
Biju

> >
> > struct rzg2l_register_offsets {
> > 	u16 pwpr;
> > 	u16 sd_ch;
> > 	u16 eth_poc;
> > 	u16 oen;
> > 	u16 qspi;
> > 	u16 other_poc;
> > };
> >
> > Cheers,
> > Biju
> 
> --
> Thank you,
> Claudiu


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

* Re: [PATCH v2 2/7] pinctrl: renesas: rzg2l: Drop defines present in struct rzg2l_hwcfg
  2026-05-28  8:04 ` [PATCH v2 2/7] pinctrl: renesas: rzg2l: Drop defines present in struct rzg2l_hwcfg Claudiu Beznea
  2026-05-28  8:16   ` Biju Das
@ 2026-05-28 11:20   ` Wolfram Sang
  1 sibling, 0 replies; 20+ messages in thread
From: Wolfram Sang @ 2026-05-28 11:20 UTC (permalink / raw)
  To: Claudiu Beznea
  Cc: geert+renesas, linusw, robh, krzk+dt, conor+dt, magnus.damm,
	prabhakar.mahadev-lad.rj, claudiu.beznea, linux-renesas-soc,
	linux-gpio, devicetree, linux-kernel, Claudiu Beznea

[-- Attachment #1: Type: text/plain, Size: 403 bytes --]

On Thu, May 28, 2026 at 11:04:34AM +0300, Claudiu Beznea wrote:
> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> 
> Drop the QSPI and OTHER_POC register defines, which are SoC specific and
> accessible through struct rzg2l_hwcfg::{qspi, other_poc}.
> 
> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v2 3/7] pinctrl: renesas: rzg2l: Keep member documentation aligned
  2026-05-28  8:04 ` [PATCH v2 3/7] pinctrl: renesas: rzg2l: Keep member documentation aligned Claudiu Beznea
@ 2026-05-28 11:21   ` Wolfram Sang
  0 siblings, 0 replies; 20+ messages in thread
From: Wolfram Sang @ 2026-05-28 11:21 UTC (permalink / raw)
  To: Claudiu Beznea
  Cc: geert+renesas, linusw, robh, krzk+dt, conor+dt, magnus.damm,
	prabhakar.mahadev-lad.rj, claudiu.beznea, linux-renesas-soc,
	linux-gpio, devicetree, linux-kernel, Claudiu Beznea

[-- Attachment #1: Type: text/plain, Size: 437 bytes --]

On Thu, May 28, 2026 at 11:04:35AM +0300, Claudiu Beznea wrote:
> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> 
> Keep the documentation for struct rzg2l_pinctrl_reg_cache members aligned
> with the struct member order.
> 
> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v2 4/7] pinctrl: renesas: rzg2l: Use tab instead of spaces
  2026-05-28  8:04 ` [PATCH v2 4/7] pinctrl: renesas: rzg2l: Use tab instead of spaces Claudiu Beznea
@ 2026-05-28 11:23   ` Wolfram Sang
  0 siblings, 0 replies; 20+ messages in thread
From: Wolfram Sang @ 2026-05-28 11:23 UTC (permalink / raw)
  To: Claudiu Beznea
  Cc: geert+renesas, linusw, robh, krzk+dt, conor+dt, magnus.damm,
	prabhakar.mahadev-lad.rj, claudiu.beznea, linux-renesas-soc,
	linux-gpio, devicetree, linux-kernel, Claudiu Beznea

[-- Attachment #1: Type: text/plain, Size: 464 bytes --]

On Thu, May 28, 2026 at 11:04:36AM +0300, Claudiu Beznea wrote:
> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> 
> Use tab instead of spaces to follow the same coding style.
> 
> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

Despite me being a member of "one space only" fanclub, for consistency:

Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v2 5/7] dt-bindings: pinctrl: renesas,rzg2l-pinctrl: Document the missing I3C power source option
  2026-05-28  8:04 ` [PATCH v2 5/7] dt-bindings: pinctrl: renesas,rzg2l-pinctrl: Document the missing I3C power source option Claudiu Beznea
@ 2026-05-28 11:23   ` Wolfram Sang
  0 siblings, 0 replies; 20+ messages in thread
From: Wolfram Sang @ 2026-05-28 11:23 UTC (permalink / raw)
  To: Claudiu Beznea
  Cc: geert+renesas, linusw, robh, krzk+dt, conor+dt, magnus.damm,
	prabhakar.mahadev-lad.rj, claudiu.beznea, linux-renesas-soc,
	linux-gpio, devicetree, linux-kernel, Claudiu Beznea,
	Conor Dooley

[-- Attachment #1: Type: text/plain, Size: 452 bytes --]

On Thu, May 28, 2026 at 11:04:37AM +0300, Claudiu Beznea wrote:
> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> 
> The I3C pins on the Renesas RZ/G3S SoC can be powered at either 1.2V or
> 1.8V. Document the missing 1.2V power source option.
> 
> Acked-by: Conor Dooley <conor.dooley@microchip.com>
> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v2 6/7] pinctrl: renesas: rzg2l: Add RZ/G3S support for selecting the I3C power source
  2026-05-28  8:04 ` [PATCH v2 6/7] pinctrl: renesas: rzg2l: Add RZ/G3S support for selecting the I3C power source Claudiu Beznea
@ 2026-05-28 11:24   ` Wolfram Sang
  0 siblings, 0 replies; 20+ messages in thread
From: Wolfram Sang @ 2026-05-28 11:24 UTC (permalink / raw)
  To: Claudiu Beznea
  Cc: geert+renesas, linusw, robh, krzk+dt, conor+dt, magnus.damm,
	prabhakar.mahadev-lad.rj, claudiu.beznea, linux-renesas-soc,
	linux-gpio, devicetree, linux-kernel, Claudiu Beznea

[-- Attachment #1: Type: text/plain, Size: 616 bytes --]

On Thu, May 28, 2026 at 11:04:38AM +0300, Claudiu Beznea wrote:
> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> 
> The Renesas RZ/G3S I3C pins can be powered at either 1.8V or 1.2V. The
> pin controller provides a register to select between these two options.
> Update the Renesas RZ/G2L pin controller driver to allow selecting the
> I3C power source on RZ/G3S SoC.
> 
> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

I am not a super-expert of this driver, but this implementation looks
reasonable to me.

Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v2 7/7] arm64: dts: renesas: rzg3s-smarc-som: Enable I3C
  2026-05-28  8:04 ` [PATCH v2 7/7] arm64: dts: renesas: rzg3s-smarc-som: Enable I3C Claudiu Beznea
@ 2026-05-28 11:25   ` Wolfram Sang
  0 siblings, 0 replies; 20+ messages in thread
From: Wolfram Sang @ 2026-05-28 11:25 UTC (permalink / raw)
  To: Claudiu Beznea
  Cc: geert+renesas, linusw, robh, krzk+dt, conor+dt, magnus.damm,
	prabhakar.mahadev-lad.rj, claudiu.beznea, linux-renesas-soc,
	linux-gpio, devicetree, linux-kernel, Claudiu Beznea

[-- Attachment #1: Type: text/plain, Size: 354 bytes --]

On Thu, May 28, 2026 at 11:04:39AM +0300, Claudiu Beznea wrote:
> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> 
> The Renesas RZ/G3S SMARC SoM board has a connector for I3C interface.
> Enable I3C.
> 
> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v2 0/7] pinctrl: renesas: rzg2l: Add support for RZ/G3S I3C
  2026-05-28  8:15 ` [PATCH v2 0/7] pinctrl: renesas: rzg2l: Add support for RZ/G3S I3C Claudiu Beznea
@ 2026-05-28 11:34   ` Wolfram Sang
  0 siblings, 0 replies; 20+ messages in thread
From: Wolfram Sang @ 2026-05-28 11:34 UTC (permalink / raw)
  To: Claudiu Beznea
  Cc: geert+renesas, linusw, robh, krzk+dt, conor+dt, magnus.damm,
	prabhakar.mahadev-lad.rj, claudiu.beznea, linux-renesas-soc,
	linux-gpio, devicetree, linux-kernel, Claudiu Beznea

[-- Attachment #1: Type: text/plain, Size: 242 bytes --]

On Thu, May 28, 2026 at 11:15:47AM +0300, Claudiu Beznea wrote:
> + Wolfram

Looks good to me. I don't have the expertise to review patch 1, though.
Testing this will need to wait until next week when I am back home.

Thanks for the update!


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

end of thread, other threads:[~2026-05-28 11:34 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-28  8:04 [PATCH v2 0/7] pinctrl: renesas: rzg2l: Add support for RZ/G3S I3C Claudiu Beznea
2026-05-28  8:04 ` [PATCH v2 1/7] pinctrl: renesas: rzg2l: Generalize the power source code Claudiu Beznea
2026-05-28  8:48   ` sashiko-bot
2026-05-28  8:04 ` [PATCH v2 2/7] pinctrl: renesas: rzg2l: Drop defines present in struct rzg2l_hwcfg Claudiu Beznea
2026-05-28  8:16   ` Biju Das
2026-05-28  8:46     ` Claudiu Beznea
2026-05-28  8:54       ` Biju Das
2026-05-28 11:20   ` Wolfram Sang
2026-05-28  8:04 ` [PATCH v2 3/7] pinctrl: renesas: rzg2l: Keep member documentation aligned Claudiu Beznea
2026-05-28 11:21   ` Wolfram Sang
2026-05-28  8:04 ` [PATCH v2 4/7] pinctrl: renesas: rzg2l: Use tab instead of spaces Claudiu Beznea
2026-05-28 11:23   ` Wolfram Sang
2026-05-28  8:04 ` [PATCH v2 5/7] dt-bindings: pinctrl: renesas,rzg2l-pinctrl: Document the missing I3C power source option Claudiu Beznea
2026-05-28 11:23   ` Wolfram Sang
2026-05-28  8:04 ` [PATCH v2 6/7] pinctrl: renesas: rzg2l: Add RZ/G3S support for selecting the I3C power source Claudiu Beznea
2026-05-28 11:24   ` Wolfram Sang
2026-05-28  8:04 ` [PATCH v2 7/7] arm64: dts: renesas: rzg3s-smarc-som: Enable I3C Claudiu Beznea
2026-05-28 11:25   ` Wolfram Sang
2026-05-28  8:15 ` [PATCH v2 0/7] pinctrl: renesas: rzg2l: Add support for RZ/G3S I3C Claudiu Beznea
2026-05-28 11:34   ` Wolfram Sang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox