* [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support
@ 2026-03-11 10:04 Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 01/27] dt-bindings: serial: rsci: Drop "uart-has-rtscts: false" Biju
` (28 more replies)
0 siblings, 29 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
Add RZ/G3E RSCI support for FIFO and non-FIFO mode. RSCI IP found on
RZ/G3E SoC is similar to one on RZ/T2H, but has 32-stage fifo. RZ/G3E has
6 clocks (5 module clocks + 1 external clock) compared to 3 clocks
(2 module clocks + 1 external clock) on RZ/T2H, and it has multiple
resets. It has 6 irqs compared to 4 on RZ/T2H. Add support for the
hardware flow control.
v1->v2:
* Dropped patch#28 "bitfield: Add FIELD_MODIFY() helper" as it is
already present in 6.12.cip
* The set_rtrg() uses field_prep() and later it was replaced by patch#29
that uses PREP_MODIFY. So squashed the commit, as field_prep() is not
present in 6.12.cip
* Fixed the typo arround->around in patch#21 commit description
Biju Das (23):
dt-bindings: serial: rsci: Drop "uart-has-rtscts: false"
dt-bindings: serial: renesas,rsci: Document RZ/G3E support
clk: renesas: r9a09g047: Add RSCI clocks/resets
serial: sh-sci: Fix deadlock during RSCI FIFO overrun error
serial: sh-sci: Update rx_trigger size for RZ/T2H RSCI
serial: rsci: Add set_rtrg() callback
serial: sh-sci: Drop checking port type for device file{create,
remove}
serial: rsci: Drop rsci_clear_SCxSR()
serial: sh-sci: Drop extra lines
serial: rsci: Drop unused macro DCR
serial: rsci: Drop unused TDR register
serial: sh-sci: Use devm_reset_control_array_get_exclusive()
serial: sh-sci: Add sci_is_rsci_type()
serial: sh-sci: Rename port SCI_PORT_RSCI->RSCI_PORT_SCIF16
serial: sh-sci: Add RSCI_PORT_SCIF32 port ID
serial: sh-sci: Add support for RZ/G3E RSCI clks
serial: sh-sci: Make sci_scbrr_calc() public
serial: sh-sci: Add finish_console_write() callback
serial: rsci: Rename early_console data, port_params and callback()
names
serial: sh-sci: Add support for RZ/G3E RSCI
arm64: dts: renesas: r9a09g047: Add RSCI nodes
arm64: dts: renesas: renesas-smarc2: Move aliases to board DTS
arm64: dts: renesas: r9a09g047e57-smarc: Enable rsci{2,4,9} nodes
Cosmin Tanislav (1):
tty: serial: sh-sci: fix RSCI FIFO overrun handling
Geert Uytterhoeven (1):
serial: sh-sci: Convert to DEFINE_SIMPLE_DEV_PM_OPS()
Lad Prabhakar (2):
serial: sh-sci: Sort include files alphabetically
serial: sh-sci: Merge sh-sci.h into sh-sci.c
.../bindings/serial/renesas,rsci.yaml | 101 +++++-
arch/arm64/boot/dts/renesas/r9a09g047.dtsi | 220 +++++++++++++
.../boot/dts/renesas/r9a09g047e57-smarc.dts | 64 ++++
.../boot/dts/renesas/renesas-smarc2.dtsi | 13 +-
.../boot/dts/renesas/rzg3e-smarc-som.dtsi | 4 +
drivers/clk/renesas/r9a09g047-cpg.c | 126 +++++++
drivers/tty/serial/rsci.c | 309 ++++++++++++++++--
drivers/tty/serial/rsci.h | 3 +-
drivers/tty/serial/sh-sci-common.h | 10 +-
drivers/tty/serial/sh-sci.c | 292 ++++++++++++++---
drivers/tty/serial/sh-sci.h | 178 ----------
11 files changed, 1040 insertions(+), 280 deletions(-)
delete mode 100644 drivers/tty/serial/sh-sci.h
--
2.43.0
^ permalink raw reply [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 01/27] dt-bindings: serial: rsci: Drop "uart-has-rtscts: false"
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 02/27] dt-bindings: serial: renesas,rsci: Document RZ/G3E support Biju
` (27 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit a6cdfd69ad38997108b862f9aafc547891506701 ]
Drop "uart-has-rtscts: false" from binding as the IP supports hardware
flow control on all SoCs.
Cc: stable@kernel.org
Fixes: 25422e8f46c1 ("dt-bindings: serial: Add compatible for Renesas RZ/T2H SoC in sci")
Acked-by: Conor Dooley <conor.dooley@microchip.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20251114101350.106699-2-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
Documentation/devicetree/bindings/serial/renesas,rsci.yaml | 2 --
1 file changed, 2 deletions(-)
diff --git a/Documentation/devicetree/bindings/serial/renesas,rsci.yaml b/Documentation/devicetree/bindings/serial/renesas,rsci.yaml
index f50d8e02f476..6b1f827a335b 100644
--- a/Documentation/devicetree/bindings/serial/renesas,rsci.yaml
+++ b/Documentation/devicetree/bindings/serial/renesas,rsci.yaml
@@ -54,8 +54,6 @@ properties:
power-domains:
maxItems: 1
- uart-has-rtscts: false
-
required:
- compatible
- reg
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 02/27] dt-bindings: serial: renesas,rsci: Document RZ/G3E support
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 01/27] dt-bindings: serial: rsci: Drop "uart-has-rtscts: false" Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 03/27] clk: renesas: r9a09g047: Add RSCI clocks/resets Biju
` (26 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit 0774c43c006bf6e411514920cc57a42abe9374c1 ]
Add documentation for the serial communication interface (RSCI) found on
the Renesas RZ/G3E (R9A09G047) SoC. The RSCI IP on this SoC is identical
to that on the RZ/T2H (R9A09G077) SoC, but it has a 32-stage FIFO compared
to 16 on RZ/T2H. It supports both FIFO and non-FIFO mode operation. RZ/G3E
has 6 clocks(5 module clocks + 1 external clock) compared to 3 clocks
(2 module clocks + 1 external clock) on RZ/T2H, and it has multiple resets.
It has 6 interrupts compared to 4 on RZ/T2H.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/20251129164325.209213-2-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
.../bindings/serial/renesas,rsci.yaml | 99 ++++++++++++++++---
1 file changed, 88 insertions(+), 11 deletions(-)
diff --git a/Documentation/devicetree/bindings/serial/renesas,rsci.yaml b/Documentation/devicetree/bindings/serial/renesas,rsci.yaml
index 6b1f827a335b..1f8cee8171de 100644
--- a/Documentation/devicetree/bindings/serial/renesas,rsci.yaml
+++ b/Documentation/devicetree/bindings/serial/renesas,rsci.yaml
@@ -10,46 +10,72 @@ maintainers:
- Geert Uytterhoeven <geert+renesas@glider.be>
- Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
-allOf:
- - $ref: serial.yaml#
-
properties:
compatible:
oneOf:
- - items:
- - const: renesas,r9a09g087-rsci # RZ/N2H
- - const: renesas,r9a09g077-rsci # RZ/T2H
+ - enum:
+ - renesas,r9a09g047-rsci # RZ/G3E
+ - renesas,r9a09g077-rsci # RZ/T2H
- items:
+ - const: renesas,r9a09g087-rsci # RZ/N2H
- const: renesas,r9a09g077-rsci # RZ/T2H
reg:
maxItems: 1
interrupts:
+ minItems: 4
items:
- description: Error interrupt
- description: Receive buffer full interrupt
- description: Transmit buffer empty interrupt
- description: Transmit end interrupt
+ - description: Active edge detection interrupt
+ - description: Break field detection interrupt
interrupt-names:
+ minItems: 4
items:
- const: eri
- const: rxi
- const: txi
- const: tei
+ - const: aed
+ - const: bfd
clocks:
minItems: 2
- maxItems: 3
+ maxItems: 6
clock-names:
- minItems: 2
+ oneOf:
+ - items:
+ - const: operation
+ - const: bus
+ - const: sck # optional external clock input
+
+ minItems: 2
+
+ - items:
+ - const: pclk
+ - const: tclk
+ - const: tclk_div4
+ - const: tclk_div16
+ - const: tclk_div64
+ - const: sck # optional external clock input
+
+ minItems: 5
+
+ resets:
items:
- - const: operation
- - const: bus
- - const: sck # optional external clock input
+ - description: Input for resetting the APB clock
+ - description: Input for resetting TCLK
+
+ reset-names:
+ items:
+ - const: presetn
+ - const: tresetn
power-domains:
maxItems: 1
@@ -62,6 +88,57 @@ required:
- clock-names
- power-domains
+allOf:
+ - $ref: serial.yaml#
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: renesas,r9a09g077-rsci
+ then:
+ properties:
+ interrupts:
+ maxItems: 4
+
+ interrupt-names:
+ maxItems: 4
+
+ clocks:
+ minItems: 2
+ maxItems: 3
+
+ clock-names:
+ minItems: 2
+ maxItems: 3
+
+ resets: false
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: renesas,r9a09g047-rsci
+ then:
+ properties:
+ interrupts:
+ minItems: 6
+
+ interrupt-names:
+ minItems: 6
+
+ clocks:
+ minItems: 5
+ maxItems: 6
+
+ clock-names:
+ minItems: 5
+ maxItems: 6
+
+ required:
+ - resets
+ - reset-names
+
unevaluatedProperties: false
examples:
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 03/27] clk: renesas: r9a09g047: Add RSCI clocks/resets
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 01/27] dt-bindings: serial: rsci: Drop "uart-has-rtscts: false" Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 02/27] dt-bindings: serial: renesas,rsci: Document RZ/G3E support Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 04/27] serial: sh-sci: Convert to DEFINE_SIMPLE_DEV_PM_OPS() Biju
` (25 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit c6b63d54c6f8d81e72c8b9b8e8d1cb5ada03c5dd ]
Add RSCI clock and reset entries.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://patch.msgid.link/20251027154615.115759-2-biju.das.jz@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/clk/renesas/r9a09g047-cpg.c | 126 ++++++++++++++++++++++++++++
1 file changed, 126 insertions(+)
diff --git a/drivers/clk/renesas/r9a09g047-cpg.c b/drivers/clk/renesas/r9a09g047-cpg.c
index 4e8881e0006b..c791b3d47f16 100644
--- a/drivers/clk/renesas/r9a09g047-cpg.c
+++ b/drivers/clk/renesas/r9a09g047-cpg.c
@@ -44,6 +44,9 @@ enum clk_ids {
CLK_PLLCLN_DIV8,
CLK_PLLCLN_DIV16,
CLK_PLLCLN_DIV20,
+ CLK_PLLCLN_DIV64,
+ CLK_PLLCLN_DIV256,
+ CLK_PLLCLN_DIV1024,
CLK_PLLDTY_ACPU,
CLK_PLLDTY_ACPU_DIV2,
CLK_PLLDTY_ACPU_DIV4,
@@ -142,6 +145,9 @@ static const struct cpg_core_clk r9a09g047_core_clks[] __initconst = {
DEF_FIXED(".pllcln_div8", CLK_PLLCLN_DIV8, CLK_PLLCLN, 1, 8),
DEF_FIXED(".pllcln_div16", CLK_PLLCLN_DIV16, CLK_PLLCLN, 1, 16),
DEF_FIXED(".pllcln_div20", CLK_PLLCLN_DIV20, CLK_PLLCLN, 1, 20),
+ DEF_FIXED(".pllcln_div64", CLK_PLLCLN_DIV64, CLK_PLLCLN, 1, 64),
+ DEF_FIXED(".pllcln_div256", CLK_PLLCLN_DIV256, CLK_PLLCLN, 1, 256),
+ DEF_FIXED(".pllcln_div1024", CLK_PLLCLN_DIV1024, CLK_PLLCLN, 1, 1024),
DEF_DDIV(".plldty_acpu", CLK_PLLDTY_ACPU, CLK_PLLDTY, CDDIV0_DIVCTL2, dtable_2_64),
DEF_FIXED(".plldty_acpu_div2", CLK_PLLDTY_ACPU_DIV2, CLK_PLLDTY_ACPU, 1, 2),
@@ -210,6 +216,106 @@ static const struct rzv2h_mod_clk r9a09g047_mod_clks[] __initconst = {
BUS_MSTOP(5, BIT(13))),
DEF_MOD("wdt_3_clk_loco", CLK_QEXTAL, 5, 2, 2, 18,
BUS_MSTOP(5, BIT(13))),
+ DEF_MOD("rsci0_pclk", CLK_PLLCLN_DIV16, 5, 13, 2, 29,
+ BUS_MSTOP(11, BIT(3))),
+ DEF_MOD("rsci0_tclk", CLK_PLLCLN_DIV16, 5, 14, 2, 30,
+ BUS_MSTOP(11, BIT(3))),
+ DEF_MOD("rsci0_ps_ps3_n", CLK_PLLCLN_DIV1024, 5, 15, 2, 31,
+ BUS_MSTOP(11, BIT(3))),
+ DEF_MOD("rsci0_ps_ps2_n", CLK_PLLCLN_DIV256, 6, 0, 3, 0,
+ BUS_MSTOP(11, BIT(3))),
+ DEF_MOD("rsci0_ps_ps1_n", CLK_PLLCLN_DIV64, 6, 1, 3, 1,
+ BUS_MSTOP(11, BIT(3))),
+ DEF_MOD("rsci1_pclk", CLK_PLLCLN_DIV16, 6, 2, 3, 2,
+ BUS_MSTOP(11, BIT(4))),
+ DEF_MOD("rsci1_tclk", CLK_PLLCLN_DIV16, 6, 3, 3, 3,
+ BUS_MSTOP(11, BIT(4))),
+ DEF_MOD("rsci1_ps_ps3_n", CLK_PLLCLN_DIV1024, 6, 4, 3, 4,
+ BUS_MSTOP(11, BIT(4))),
+ DEF_MOD("rsci1_ps_ps2_n", CLK_PLLCLN_DIV256, 6, 5, 3, 5,
+ BUS_MSTOP(11, BIT(4))),
+ DEF_MOD("rsci1_ps_ps1_n", CLK_PLLCLN_DIV64, 6, 6, 3, 6,
+ BUS_MSTOP(11, BIT(4))),
+ DEF_MOD("rsci2_pclk", CLK_PLLCLN_DIV16, 6, 7, 3, 7,
+ BUS_MSTOP(11, BIT(5))),
+ DEF_MOD("rsci2_tclk", CLK_PLLCLN_DIV16, 6, 8, 3, 8,
+ BUS_MSTOP(11, BIT(5))),
+ DEF_MOD("rsci2_ps_ps3_n", CLK_PLLCLN_DIV1024, 6, 9, 3, 9,
+ BUS_MSTOP(11, BIT(5))),
+ DEF_MOD("rsci2_ps_ps2_n", CLK_PLLCLN_DIV256, 6, 10, 3, 10,
+ BUS_MSTOP(11, BIT(5))),
+ DEF_MOD("rsci2_ps_ps1_n", CLK_PLLCLN_DIV64, 6, 11, 3, 11,
+ BUS_MSTOP(11, BIT(5))),
+ DEF_MOD("rsci3_pclk", CLK_PLLCLN_DIV16, 6, 12, 3, 12,
+ BUS_MSTOP(11, BIT(6))),
+ DEF_MOD("rsci3_tclk", CLK_PLLCLN_DIV16, 6, 13, 3, 13,
+ BUS_MSTOP(11, BIT(6))),
+ DEF_MOD("rsci3_ps_ps3_n", CLK_PLLCLN_DIV1024, 6, 14, 3, 14,
+ BUS_MSTOP(11, BIT(6))),
+ DEF_MOD("rsci3_ps_ps2_n", CLK_PLLCLN_DIV256, 6, 15, 3, 15,
+ BUS_MSTOP(11, BIT(6))),
+ DEF_MOD("rsci3_ps_ps1_n", CLK_PLLCLN_DIV64, 7, 0, 3, 16,
+ BUS_MSTOP(11, BIT(6))),
+ DEF_MOD("rsci4_pclk", CLK_PLLCLN_DIV16, 7, 1, 3, 17,
+ BUS_MSTOP(11, BIT(7))),
+ DEF_MOD("rsci4_tclk", CLK_PLLCLN_DIV16, 7, 2, 3, 18,
+ BUS_MSTOP(11, BIT(7))),
+ DEF_MOD("rsci4_ps_ps3_n", CLK_PLLCLN_DIV1024, 7, 3, 3, 19,
+ BUS_MSTOP(11, BIT(7))),
+ DEF_MOD("rsci4_ps_ps2_n", CLK_PLLCLN_DIV256, 7, 4, 3, 20,
+ BUS_MSTOP(11, BIT(7))),
+ DEF_MOD("rsci4_ps_ps1_n", CLK_PLLCLN_DIV64, 7, 5, 3, 21,
+ BUS_MSTOP(11, BIT(7))),
+ DEF_MOD("rsci5_pclk", CLK_PLLCLN_DIV16, 7, 6, 3, 22,
+ BUS_MSTOP(11, BIT(8))),
+ DEF_MOD("rsci5_tclk", CLK_PLLCLN_DIV16, 7, 7, 3, 23,
+ BUS_MSTOP(11, BIT(8))),
+ DEF_MOD("rsci5_ps_ps3_n", CLK_PLLCLN_DIV1024, 7, 8, 3, 24,
+ BUS_MSTOP(11, BIT(8))),
+ DEF_MOD("rsci5_ps_ps2_n", CLK_PLLCLN_DIV256, 7, 9, 3, 25,
+ BUS_MSTOP(11, BIT(8))),
+ DEF_MOD("rsci5_ps_ps1_n", CLK_PLLCLN_DIV64, 7, 10, 3, 26,
+ BUS_MSTOP(11, BIT(8))),
+ DEF_MOD("rsci6_pclk", CLK_PLLCLN_DIV16, 7, 11, 3, 27,
+ BUS_MSTOP(11, BIT(9))),
+ DEF_MOD("rsci6_tclk", CLK_PLLCLN_DIV16, 7, 12, 3, 28,
+ BUS_MSTOP(11, BIT(9))),
+ DEF_MOD("rsci6_ps_ps3_n", CLK_PLLCLN_DIV1024, 7, 13, 3, 29,
+ BUS_MSTOP(11, BIT(9))),
+ DEF_MOD("rsci6_ps_ps2_n", CLK_PLLCLN_DIV256, 7, 14, 3, 30,
+ BUS_MSTOP(11, BIT(9))),
+ DEF_MOD("rsci6_ps_ps1_n", CLK_PLLCLN_DIV64, 7, 15, 3, 31,
+ BUS_MSTOP(11, BIT(9))),
+ DEF_MOD("rsci7_pclk", CLK_PLLCLN_DIV16, 8, 0, 4, 0,
+ BUS_MSTOP(11, BIT(10))),
+ DEF_MOD("rsci7_tclk", CLK_PLLCLN_DIV16, 8, 1, 4, 1,
+ BUS_MSTOP(11, BIT(10))),
+ DEF_MOD("rsci7_ps_ps3_n", CLK_PLLCLN_DIV1024, 8, 2, 4, 2,
+ BUS_MSTOP(11, BIT(10))),
+ DEF_MOD("rsci7_ps_ps2_n", CLK_PLLCLN_DIV256, 8, 3, 4, 3,
+ BUS_MSTOP(11, BIT(10))),
+ DEF_MOD("rsci7_ps_ps1_n", CLK_PLLCLN_DIV64, 8, 4, 4, 4,
+ BUS_MSTOP(11, BIT(10))),
+ DEF_MOD("rsci8_pclk", CLK_PLLCLN_DIV16, 8, 5, 4, 5,
+ BUS_MSTOP(11, BIT(11))),
+ DEF_MOD("rsci8_tclk", CLK_PLLCLN_DIV16, 8, 6, 4, 6,
+ BUS_MSTOP(11, BIT(11))),
+ DEF_MOD("rsci8_ps_ps3_n", CLK_PLLCLN_DIV1024, 8, 7, 4, 7,
+ BUS_MSTOP(11, BIT(11))),
+ DEF_MOD("rsci8_ps_ps2_n", CLK_PLLCLN_DIV256, 8, 8, 4, 8,
+ BUS_MSTOP(11, BIT(11))),
+ DEF_MOD("rsci8_ps_ps1_n", CLK_PLLCLN_DIV64, 8, 9, 4, 9,
+ BUS_MSTOP(11, BIT(11))),
+ DEF_MOD("rsci9_pclk", CLK_PLLCLN_DIV16, 8, 10, 4, 10,
+ BUS_MSTOP(11, BIT(12))),
+ DEF_MOD("rsci9_tclk", CLK_PLLCLN_DIV16, 8, 11, 4, 11,
+ BUS_MSTOP(11, BIT(12))),
+ DEF_MOD("rsci9_ps_ps3_n", CLK_PLLCLN_DIV1024, 8, 12, 4, 12,
+ BUS_MSTOP(11, BIT(12))),
+ DEF_MOD("rsci9_ps_ps2_n", CLK_PLLCLN_DIV256, 8, 13, 4, 13,
+ BUS_MSTOP(11, BIT(12))),
+ DEF_MOD("rsci9_ps_ps1_n", CLK_PLLCLN_DIV64, 8, 14, 4, 14,
+ BUS_MSTOP(11, BIT(12))),
DEF_MOD("scif_0_clk_pck", CLK_PLLCM33_DIV16, 8, 15, 4, 15,
BUS_MSTOP(3, BIT(14))),
DEF_MOD("i3c_0_pclkrw", CLK_PLLCLN_DIV16, 9, 0, 4, 16,
@@ -325,6 +431,26 @@ static const struct rzv2h_reset r9a09g047_resets[] __initconst = {
DEF_RST(7, 6, 3, 7), /* WDT_1_RESET */
DEF_RST(7, 7, 3, 8), /* WDT_2_RESET */
DEF_RST(7, 8, 3, 9), /* WDT_3_RESET */
+ DEF_RST(8, 1, 3, 18), /* RSCI0_PRESETN */
+ DEF_RST(8, 2, 3, 19), /* RSCI0_TRESETN */
+ DEF_RST(8, 3, 3, 20), /* RSCI1_PRESETN */
+ DEF_RST(8, 4, 3, 21), /* RSCI1_TRESETN */
+ DEF_RST(8, 5, 3, 22), /* RSCI2_PRESETN */
+ DEF_RST(8, 6, 3, 23), /* RSCI2_TRESETN */
+ DEF_RST(8, 7, 3, 24), /* RSCI3_PRESETN */
+ DEF_RST(8, 8, 3, 25), /* RSCI3_TRESETN */
+ DEF_RST(8, 9, 3, 26), /* RSCI4_PRESETN */
+ DEF_RST(8, 10, 3, 27), /* RSCI4_TRESETN */
+ DEF_RST(8, 11, 3, 28), /* RSCI5_PRESETN */
+ DEF_RST(8, 12, 3, 29), /* RSCI5_TRESETN */
+ DEF_RST(8, 13, 3, 30), /* RSCI6_PRESETN */
+ DEF_RST(8, 14, 3, 31), /* RSCI6_TRESETN */
+ DEF_RST(8, 15, 4, 0), /* RSCI7_PRESETN */
+ DEF_RST(9, 0, 4, 1), /* RSCI7_TRESETN */
+ DEF_RST(9, 1, 4, 2), /* RSCI8_PRESETN */
+ DEF_RST(9, 2, 4, 3), /* RSCI8_TRESETN */
+ DEF_RST(9, 3, 4, 4), /* RSCI9_PRESETN */
+ DEF_RST(9, 4, 4, 5), /* RSCI9_TRESETN */
DEF_RST(9, 5, 4, 6), /* SCIF_0_RST_SYSTEM_N */
DEF_RST(9, 6, 4, 7), /* I3C_0_PRESETN */
DEF_RST(9, 7, 4, 8), /* I3C_0_TRESETN */
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 04/27] serial: sh-sci: Convert to DEFINE_SIMPLE_DEV_PM_OPS()
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (2 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 03/27] clk: renesas: r9a09g047: Add RSCI clocks/resets Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 05/27] tty: serial: sh-sci: fix RSCI FIFO overrun handling Biju
` (24 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Geert Uytterhoeven <geert+renesas@glider.be>
[ Upstream commit 65acd0d86f2fa104fc0a0c9d86aa1ee6b1a4763e ]
Convert the Renesas SuperH SCI(F) serial port driver from
SIMPLE_DEV_PM_OPS() to DEFINE_SIMPLE_DEV_PM_OPS() and pm_sleep_ptr().
This lets us drop the __maybe_unused annotations from its suspend and
resume callbacks, and reduces kernel size in case CONFIG_PM or
CONFIG_PM_SLEEP is disabled.
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/r/a5628fe028362ae3f8729021a7864dd39f7869bf.1752086885.git.geert+renesas@glider.be
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/sh-sci.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 03d248b2d8da..4e094d8ee882 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -3752,7 +3752,7 @@ static int sci_probe(struct platform_device *dev)
return 0;
}
-static __maybe_unused int sci_suspend(struct device *dev)
+static int sci_suspend(struct device *dev)
{
struct sci_port *sport = dev_get_drvdata(dev);
@@ -3770,7 +3770,7 @@ static __maybe_unused int sci_suspend(struct device *dev)
return 0;
}
-static __maybe_unused int sci_resume(struct device *dev)
+static int sci_resume(struct device *dev)
{
struct sci_port *sport = dev_get_drvdata(dev);
@@ -3791,14 +3791,14 @@ static __maybe_unused int sci_resume(struct device *dev)
return 0;
}
-static SIMPLE_DEV_PM_OPS(sci_dev_pm_ops, sci_suspend, sci_resume);
+static DEFINE_SIMPLE_DEV_PM_OPS(sci_dev_pm_ops, sci_suspend, sci_resume);
static struct platform_driver sci_driver = {
.probe = sci_probe,
.remove_new = sci_remove,
.driver = {
.name = "sh-sci",
- .pm = &sci_dev_pm_ops,
+ .pm = pm_sleep_ptr(&sci_dev_pm_ops),
.of_match_table = of_match_ptr(of_sci_match),
},
};
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 05/27] tty: serial: sh-sci: fix RSCI FIFO overrun handling
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (3 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 04/27] serial: sh-sci: Convert to DEFINE_SIMPLE_DEV_PM_OPS() Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 06/27] serial: sh-sci: Sort include files alphabetically Biju
` (23 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Cosmin Tanislav <cosmin-gabriel.tanislav.xa@renesas.com>
[ Upstream commit ef8fef45c74b5a0059488fda2df65fa133f7d7d0 ]
The receive error handling code is shared between RSCI and all other
SCIF port types, but the RSCI overrun_reg is specified as a memory
offset, while for other SCIF types it is an enum value used to index
into the sci_port_params->regs array, as mentioned above the
sci_serial_in() function.
For RSCI, the overrun_reg is CSR (0x48), causing the sci_getreg() call
inside the sci_handle_fifo_overrun() function to index outside the
bounds of the regs array, which currently has a size of 20, as specified
by SCI_NR_REGS.
Because of this, we end up accessing memory outside of RSCI's
rsci_port_params structure, which, when interpreted as a plat_sci_reg,
happens to have a non-zero size, causing the following WARN when
sci_serial_in() is called, as the accidental size does not match the
supported register sizes.
The existence of the overrun_reg needs to be checked because
SCIx_SH3_SCIF_REGTYPE has overrun_reg set to SCLSR, but SCLSR is not
present in the regs array.
Avoid calling sci_getreg() for port types which don't use standard
register handling.
Use the ops->read_reg() and ops->write_reg() functions to properly read
and write registers for RSCI, and change the type of the status variable
to accommodate the 32-bit CSR register.
sci_getreg() and sci_serial_in() are also called with overrun_reg in the
sci_mpxed_interrupt() interrupt handler, but that code path is not used
for RSCI, as it does not have a muxed interrupt.
------------[ cut here ]------------
Invalid register access
WARNING: CPU: 0 PID: 0 at drivers/tty/serial/sh-sci.c:522 sci_serial_in+0x38/0xac
Modules linked in: renesas_usbhs at24 rzt2h_adc industrialio_adc sha256 cfg80211 bluetooth ecdh_generic ecc rfkill fuse drm backlight ipv6
CPU: 0 UID: 0 PID: 0 Comm: swapper/0 Not tainted 6.17.0-rc1+ #30 PREEMPT
Hardware name: Renesas RZ/T2H EVK Board based on r9a09g077m44 (DT)
pstate: 604000c5 (nZCv daIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
pc : sci_serial_in+0x38/0xac
lr : sci_serial_in+0x38/0xac
sp : ffff800080003e80
x29: ffff800080003e80 x28: ffff800082195b80 x27: 000000000000000d
x26: ffff8000821956d0 x25: 0000000000000000 x24: ffff800082195b80
x23: ffff000180e0d800 x22: 0000000000000010 x21: 0000000000000000
x20: 0000000000000010 x19: ffff000180e72000 x18: 000000000000000a
x17: ffff8002bcee7000 x16: ffff800080000000 x15: 0720072007200720
x14: 0720072007200720 x13: 0720072007200720 x12: 0720072007200720
x11: 0000000000000058 x10: 0000000000000018 x9 : ffff8000821a6a48
x8 : 0000000000057fa8 x7 : 0000000000000406 x6 : ffff8000821fea48
x5 : ffff00033ef88408 x4 : ffff8002bcee7000 x3 : ffff800082195b80
x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff800082195b80
Call trace:
sci_serial_in+0x38/0xac (P)
sci_handle_fifo_overrun.isra.0+0x70/0x134
sci_er_interrupt+0x50/0x39c
__handle_irq_event_percpu+0x48/0x140
handle_irq_event+0x44/0xb0
handle_fasteoi_irq+0xf4/0x1a0
handle_irq_desc+0x34/0x58
generic_handle_domain_irq+0x1c/0x28
gic_handle_irq+0x4c/0x140
call_on_irq_stack+0x30/0x48
do_interrupt_handler+0x80/0x84
el1_interrupt+0x34/0x68
el1h_64_irq_handler+0x18/0x24
el1h_64_irq+0x6c/0x70
default_idle_call+0x28/0x58 (P)
do_idle+0x1f8/0x250
cpu_startup_entry+0x34/0x3c
rest_init+0xd8/0xe0
console_on_rootfs+0x0/0x6c
__primary_switched+0x88/0x90
---[ end trace 0000000000000000 ]---
Cc: stable <stable@kernel.org>
Fixes: 0666e3fe95ab ("serial: sh-sci: Add support for RZ/T2H SCI")
Signed-off-by: Cosmin Tanislav <cosmin-gabriel.tanislav.xa@renesas.com>
Link: https://patch.msgid.link/20250923154707.1089900-1-cosmin-gabriel.tanislav.xa@renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/sh-sci.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 4e094d8ee882..caa98b1257d4 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -1014,16 +1014,18 @@ static int sci_handle_fifo_overrun(struct uart_port *port)
struct sci_port *s = to_sci_port(port);
const struct plat_sci_reg *reg;
int copied = 0;
- u16 status;
+ u32 status;
- reg = sci_getreg(port, s->params->overrun_reg);
- if (!reg->size)
- return 0;
+ if (s->type != SCI_PORT_RSCI) {
+ reg = sci_getreg(port, s->params->overrun_reg);
+ if (!reg->size)
+ return 0;
+ }
- status = sci_serial_in(port, s->params->overrun_reg);
+ status = s->ops->read_reg(port, s->params->overrun_reg);
if (status & s->params->overrun_mask) {
status &= ~s->params->overrun_mask;
- sci_serial_out(port, s->params->overrun_reg, status);
+ s->ops->write_reg(port, s->params->overrun_reg, status);
port->icount.overrun++;
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 06/27] serial: sh-sci: Sort include files alphabetically
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (4 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 05/27] tty: serial: sh-sci: fix RSCI FIFO overrun handling Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 07/27] serial: sh-sci: Merge sh-sci.h into sh-sci.c Biju
` (22 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
[ Upstream commit 8e2c0a9f12edb7f05b3b60f02e03dc319ba7ccbf ]
Sort the include lines alphabetically, no impact on code behavior.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/20251023104313.210989-2-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/sh-sci.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index caa98b1257d4..ceb16b964f63 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -19,11 +19,11 @@
#include <linux/clk.h>
#include <linux/console.h>
-#include <linux/ctype.h>
#include <linux/cpufreq.h>
+#include <linux/ctype.h>
#include <linux/delay.h>
-#include <linux/dmaengine.h>
#include <linux/dma-mapping.h>
+#include <linux/dmaengine.h>
#include <linux/err.h>
#include <linux/errno.h>
#include <linux/init.h>
@@ -32,8 +32,8 @@
#include <linux/ktime.h>
#include <linux/major.h>
#include <linux/minmax.h>
-#include <linux/module.h>
#include <linux/mm.h>
+#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
@@ -50,14 +50,14 @@
#include <linux/tty_flip.h>
#ifdef CONFIG_SUPERH
-#include <asm/sh_bios.h>
#include <asm/platform_early.h>
+#include <asm/sh_bios.h>
#endif
#include "rsci.h"
#include "serial_mctrl_gpio.h"
-#include "sh-sci.h"
#include "sh-sci-common.h"
+#include "sh-sci.h"
#define SCIx_IRQ_IS_MUXED(port) \
((port)->irqs[SCIx_ERI_IRQ] == \
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 07/27] serial: sh-sci: Merge sh-sci.h into sh-sci.c
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (5 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 06/27] serial: sh-sci: Sort include files alphabetically Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 08/27] serial: sh-sci: Fix deadlock during RSCI FIFO overrun error Biju
` (21 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
[ Upstream commit 719f3df3e113e03d2c8cf324827da1fd17a9bd8f ]
Inline the contents of sh-sci.h into sh-sci.c and remove the
header file. The header only contained register definitions
and macros used exclusively by the sh-sci driver, making the
separate header unnecessary.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/20251023104313.210989-3-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/sh-sci.c | 176 ++++++++++++++++++++++++++++++++++-
drivers/tty/serial/sh-sci.h | 178 ------------------------------------
2 files changed, 175 insertions(+), 179 deletions(-)
delete mode 100644 drivers/tty/serial/sh-sci.h
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index ceb16b964f63..1cb9d474c0f1 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -17,6 +17,7 @@
*/
#undef DEBUG
+#include <linux/bitops.h>
#include <linux/clk.h>
#include <linux/console.h>
#include <linux/cpufreq.h>
@@ -28,6 +29,7 @@
#include <linux/errno.h>
#include <linux/init.h>
#include <linux/interrupt.h>
+#include <linux/io.h>
#include <linux/ioport.h>
#include <linux/ktime.h>
#include <linux/major.h>
@@ -40,6 +42,7 @@
#include <linux/reset.h>
#include <linux/scatterlist.h>
#include <linux/serial.h>
+#include <linux/serial_core.h>
#include <linux/serial_sci.h>
#include <linux/sh_dma.h>
#include <linux/slab.h>
@@ -57,7 +60,178 @@
#include "rsci.h"
#include "serial_mctrl_gpio.h"
#include "sh-sci-common.h"
-#include "sh-sci.h"
+
+#define SCI_MAJOR 204
+#define SCI_MINOR_START 8
+
+/*
+ * SCI register subset common for all port types.
+ * Not all registers will exist on all parts.
+ */
+enum {
+ SCSMR, /* Serial Mode Register */
+ SCBRR, /* Bit Rate Register */
+ SCSCR, /* Serial Control Register */
+ SCxSR, /* Serial Status Register */
+ SCFCR, /* FIFO Control Register */
+ SCFDR, /* FIFO Data Count Register */
+ SCxTDR, /* Transmit (FIFO) Data Register */
+ SCxRDR, /* Receive (FIFO) Data Register */
+ SCLSR, /* Line Status Register */
+ SCTFDR, /* Transmit FIFO Data Count Register */
+ SCRFDR, /* Receive FIFO Data Count Register */
+ SCSPTR, /* Serial Port Register */
+ HSSRR, /* Sampling Rate Register */
+ SCPCR, /* Serial Port Control Register */
+ SCPDR, /* Serial Port Data Register */
+ SCDL, /* BRG Frequency Division Register */
+ SCCKS, /* BRG Clock Select Register */
+ HSRTRGR, /* Rx FIFO Data Count Trigger Register */
+ HSTTRGR, /* Tx FIFO Data Count Trigger Register */
+ SEMR, /* Serial extended mode register */
+};
+
+/* SCSMR (Serial Mode Register) */
+#define SCSMR_C_A BIT(7) /* Communication Mode */
+#define SCSMR_CSYNC BIT(7) /* - Clocked synchronous mode */
+#define SCSMR_ASYNC 0 /* - Asynchronous mode */
+#define SCSMR_CHR BIT(6) /* 7-bit Character Length */
+#define SCSMR_PE BIT(5) /* Parity Enable */
+#define SCSMR_ODD BIT(4) /* Odd Parity */
+#define SCSMR_STOP BIT(3) /* Stop Bit Length */
+#define SCSMR_CKS 0x0003 /* Clock Select */
+
+/* Serial Mode Register, SCIFA/SCIFB only bits */
+#define SCSMR_CKEDG BIT(12) /* Transmit/Receive Clock Edge Select */
+#define SCSMR_SRC_MASK 0x0700 /* Sampling Control */
+#define SCSMR_SRC_16 0x0000 /* Sampling rate 1/16 */
+#define SCSMR_SRC_5 0x0100 /* Sampling rate 1/5 */
+#define SCSMR_SRC_7 0x0200 /* Sampling rate 1/7 */
+#define SCSMR_SRC_11 0x0300 /* Sampling rate 1/11 */
+#define SCSMR_SRC_13 0x0400 /* Sampling rate 1/13 */
+#define SCSMR_SRC_17 0x0500 /* Sampling rate 1/17 */
+#define SCSMR_SRC_19 0x0600 /* Sampling rate 1/19 */
+#define SCSMR_SRC_27 0x0700 /* Sampling rate 1/27 */
+
+/* Serial Control Register, SCI only bits */
+#define SCSCR_TEIE BIT(2) /* Transmit End Interrupt Enable */
+
+/* Serial Control Register, SCIFA/SCIFB only bits */
+#define SCSCR_TDRQE BIT(15) /* Tx Data Transfer Request Enable */
+#define SCSCR_RDRQE BIT(14) /* Rx Data Transfer Request Enable */
+
+/* Serial Control Register, HSCIF-only bits */
+#define HSSCR_TOT_SHIFT 14
+
+/* SCxSR (Serial Status Register) on SCI */
+#define SCI_TDRE BIT(7) /* Transmit Data Register Empty */
+#define SCI_RDRF BIT(6) /* Receive Data Register Full */
+#define SCI_ORER BIT(5) /* Overrun Error */
+#define SCI_FER BIT(4) /* Framing Error */
+#define SCI_PER BIT(3) /* Parity Error */
+#define SCI_TEND BIT(2) /* Transmit End */
+#define SCI_RESERVED 0x03 /* All reserved bits */
+
+#define SCI_DEFAULT_ERROR_MASK (SCI_PER | SCI_FER)
+
+#define SCI_RDxF_CLEAR (u32)(~(SCI_RESERVED | SCI_RDRF))
+#define SCI_ERROR_CLEAR (u32)(~(SCI_RESERVED | SCI_PER | SCI_FER | SCI_ORER))
+#define SCI_TDxE_CLEAR (u32)(~(SCI_RESERVED | SCI_TEND | SCI_TDRE))
+#define SCI_BREAK_CLEAR (u32)(~(SCI_RESERVED | SCI_PER | SCI_FER | SCI_ORER))
+
+/* SCxSR (Serial Status Register) on SCIF, SCIFA, SCIFB, HSCIF */
+#define SCIF_ER BIT(7) /* Receive Error */
+#define SCIF_TEND BIT(6) /* Transmission End */
+#define SCIF_TDFE BIT(5) /* Transmit FIFO Data Empty */
+#define SCIF_BRK BIT(4) /* Break Detect */
+#define SCIF_FER BIT(3) /* Framing Error */
+#define SCIF_PER BIT(2) /* Parity Error */
+#define SCIF_RDF BIT(1) /* Receive FIFO Data Full */
+#define SCIF_DR BIT(0) /* Receive Data Ready */
+/* SCIF only (optional) */
+#define SCIF_PERC 0xf000 /* Number of Parity Errors */
+#define SCIF_FERC 0x0f00 /* Number of Framing Errors */
+/*SCIFA/SCIFB and SCIF on SH7705/SH7720/SH7721 only */
+#define SCIFA_ORER BIT(9) /* Overrun Error */
+
+#define SCIF_DEFAULT_ERROR_MASK (SCIF_PER | SCIF_FER | SCIF_BRK | SCIF_ER)
+
+#define SCIF_RDxF_CLEAR (u32)(~(SCIF_DR | SCIF_RDF))
+#define SCIF_ERROR_CLEAR (u32)(~(SCIF_PER | SCIF_FER | SCIF_ER))
+#define SCIF_TDxE_CLEAR (u32)(~(SCIF_TDFE))
+#define SCIF_BREAK_CLEAR (u32)(~(SCIF_PER | SCIF_FER | SCIF_BRK))
+
+/* SCFCR (FIFO Control Register) */
+#define SCFCR_RTRG1 BIT(7) /* Receive FIFO Data Count Trigger */
+#define SCFCR_RTRG0 BIT(6)
+#define SCFCR_TTRG1 BIT(5) /* Transmit FIFO Data Count Trigger */
+#define SCFCR_TTRG0 BIT(4)
+#define SCFCR_MCE BIT(3) /* Modem Control Enable */
+#define SCFCR_TFRST BIT(2) /* Transmit FIFO Data Register Reset */
+#define SCFCR_RFRST BIT(1) /* Receive FIFO Data Register Reset */
+#define SCFCR_LOOP BIT(0) /* Loopback Test */
+
+/* SCLSR (Line Status Register) on (H)SCIF */
+#define SCLSR_TO BIT(2) /* Timeout */
+#define SCLSR_ORER BIT(0) /* Overrun Error */
+
+/* SCSPTR (Serial Port Register), optional */
+#define SCSPTR_RTSIO BIT(7) /* Serial Port RTS# Pin Input/Output */
+#define SCSPTR_RTSDT BIT(6) /* Serial Port RTS# Pin Data */
+#define SCSPTR_CTSIO BIT(5) /* Serial Port CTS# Pin Input/Output */
+#define SCSPTR_CTSDT BIT(4) /* Serial Port CTS# Pin Data */
+#define SCSPTR_SCKIO BIT(3) /* Serial Port Clock Pin Input/Output */
+#define SCSPTR_SCKDT BIT(2) /* Serial Port Clock Pin Data */
+#define SCSPTR_SPB2IO BIT(1) /* Serial Port Break Input/Output */
+#define SCSPTR_SPB2DT BIT(0) /* Serial Port Break Data */
+
+/* HSSRR HSCIF */
+#define HSCIF_SRE BIT(15) /* Sampling Rate Register Enable */
+#define HSCIF_SRDE BIT(14) /* Sampling Point Register Enable */
+
+#define HSCIF_SRHP_SHIFT 8
+#define HSCIF_SRHP_MASK 0x0f00
+
+/* SCPCR (Serial Port Control Register), SCIFA/SCIFB only */
+#define SCPCR_RTSC BIT(4) /* Serial Port RTS# Pin / Output Pin */
+#define SCPCR_CTSC BIT(3) /* Serial Port CTS# Pin / Input Pin */
+#define SCPCR_SCKC BIT(2) /* Serial Port SCK Pin / Output Pin */
+#define SCPCR_RXDC BIT(1) /* Serial Port RXD Pin / Input Pin */
+#define SCPCR_TXDC BIT(0) /* Serial Port TXD Pin / Output Pin */
+
+/* SCPDR (Serial Port Data Register), SCIFA/SCIFB only */
+#define SCPDR_RTSD BIT(4) /* Serial Port RTS# Output Pin Data */
+#define SCPDR_CTSD BIT(3) /* Serial Port CTS# Input Pin Data */
+#define SCPDR_SCKD BIT(2) /* Serial Port SCK Output Pin Data */
+#define SCPDR_RXDD BIT(1) /* Serial Port RXD Input Pin Data */
+#define SCPDR_TXDD BIT(0) /* Serial Port TXD Output Pin Data */
+
+/*
+ * BRG Clock Select Register (Some SCIF and HSCIF)
+ * The Baud Rate Generator for external clock can provide a clock source for
+ * the sampling clock. It outputs either its frequency divided clock, or the
+ * (undivided) (H)SCK external clock.
+ */
+#define SCCKS_CKS BIT(15) /* Select (H)SCK (1) or divided SC_CLK (0) */
+#define SCCKS_XIN BIT(14) /* SC_CLK uses bus clock (1) or SCIF_CLK (0) */
+
+#define SCxSR_TEND(port) (((port)->type == PORT_SCI) ? SCI_TEND : SCIF_TEND)
+#define SCxSR_RDxF(port) (((port)->type == PORT_SCI) ? SCI_RDRF : SCIF_DR | SCIF_RDF)
+#define SCxSR_TDxE(port) (((port)->type == PORT_SCI) ? SCI_TDRE : SCIF_TDFE)
+#define SCxSR_FER(port) (((port)->type == PORT_SCI) ? SCI_FER : SCIF_FER)
+#define SCxSR_PER(port) (((port)->type == PORT_SCI) ? SCI_PER : SCIF_PER)
+#define SCxSR_BRK(port) (((port)->type == PORT_SCI) ? 0x00 : SCIF_BRK)
+
+#define SCxSR_ERRORS(port) (to_sci_port(port)->params->error_mask)
+
+#define SCxSR_RDxF_CLEAR(port) \
+ (((port)->type == PORT_SCI) ? SCI_RDxF_CLEAR : SCIF_RDxF_CLEAR)
+#define SCxSR_ERROR_CLEAR(port) \
+ (to_sci_port(port)->params->error_clear)
+#define SCxSR_TDxE_CLEAR(port) \
+ (((port)->type == PORT_SCI) ? SCI_TDxE_CLEAR : SCIF_TDxE_CLEAR)
+#define SCxSR_BREAK_CLEAR(port) \
+ (((port)->type == PORT_SCI) ? SCI_BREAK_CLEAR : SCIF_BREAK_CLEAR)
#define SCIx_IRQ_IS_MUXED(port) \
((port)->irqs[SCIx_ERI_IRQ] == \
diff --git a/drivers/tty/serial/sh-sci.h b/drivers/tty/serial/sh-sci.h
deleted file mode 100644
index 951681aba586..000000000000
--- a/drivers/tty/serial/sh-sci.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-#include <linux/bitops.h>
-#include <linux/serial_core.h>
-#include <linux/io.h>
-
-#define SCI_MAJOR 204
-#define SCI_MINOR_START 8
-
-
-/*
- * SCI register subset common for all port types.
- * Not all registers will exist on all parts.
- */
-enum {
- SCSMR, /* Serial Mode Register */
- SCBRR, /* Bit Rate Register */
- SCSCR, /* Serial Control Register */
- SCxSR, /* Serial Status Register */
- SCFCR, /* FIFO Control Register */
- SCFDR, /* FIFO Data Count Register */
- SCxTDR, /* Transmit (FIFO) Data Register */
- SCxRDR, /* Receive (FIFO) Data Register */
- SCLSR, /* Line Status Register */
- SCTFDR, /* Transmit FIFO Data Count Register */
- SCRFDR, /* Receive FIFO Data Count Register */
- SCSPTR, /* Serial Port Register */
- HSSRR, /* Sampling Rate Register */
- SCPCR, /* Serial Port Control Register */
- SCPDR, /* Serial Port Data Register */
- SCDL, /* BRG Frequency Division Register */
- SCCKS, /* BRG Clock Select Register */
- HSRTRGR, /* Rx FIFO Data Count Trigger Register */
- HSTTRGR, /* Tx FIFO Data Count Trigger Register */
- SEMR, /* Serial extended mode register */
-};
-
-
-/* SCSMR (Serial Mode Register) */
-#define SCSMR_C_A BIT(7) /* Communication Mode */
-#define SCSMR_CSYNC BIT(7) /* - Clocked synchronous mode */
-#define SCSMR_ASYNC 0 /* - Asynchronous mode */
-#define SCSMR_CHR BIT(6) /* 7-bit Character Length */
-#define SCSMR_PE BIT(5) /* Parity Enable */
-#define SCSMR_ODD BIT(4) /* Odd Parity */
-#define SCSMR_STOP BIT(3) /* Stop Bit Length */
-#define SCSMR_CKS 0x0003 /* Clock Select */
-
-/* Serial Mode Register, SCIFA/SCIFB only bits */
-#define SCSMR_CKEDG BIT(12) /* Transmit/Receive Clock Edge Select */
-#define SCSMR_SRC_MASK 0x0700 /* Sampling Control */
-#define SCSMR_SRC_16 0x0000 /* Sampling rate 1/16 */
-#define SCSMR_SRC_5 0x0100 /* Sampling rate 1/5 */
-#define SCSMR_SRC_7 0x0200 /* Sampling rate 1/7 */
-#define SCSMR_SRC_11 0x0300 /* Sampling rate 1/11 */
-#define SCSMR_SRC_13 0x0400 /* Sampling rate 1/13 */
-#define SCSMR_SRC_17 0x0500 /* Sampling rate 1/17 */
-#define SCSMR_SRC_19 0x0600 /* Sampling rate 1/19 */
-#define SCSMR_SRC_27 0x0700 /* Sampling rate 1/27 */
-
-/* Serial Control Register, SCI only bits */
-#define SCSCR_TEIE BIT(2) /* Transmit End Interrupt Enable */
-
-/* Serial Control Register, SCIFA/SCIFB only bits */
-#define SCSCR_TDRQE BIT(15) /* Tx Data Transfer Request Enable */
-#define SCSCR_RDRQE BIT(14) /* Rx Data Transfer Request Enable */
-
-/* Serial Control Register, HSCIF-only bits */
-#define HSSCR_TOT_SHIFT 14
-
-/* SCxSR (Serial Status Register) on SCI */
-#define SCI_TDRE BIT(7) /* Transmit Data Register Empty */
-#define SCI_RDRF BIT(6) /* Receive Data Register Full */
-#define SCI_ORER BIT(5) /* Overrun Error */
-#define SCI_FER BIT(4) /* Framing Error */
-#define SCI_PER BIT(3) /* Parity Error */
-#define SCI_TEND BIT(2) /* Transmit End */
-#define SCI_RESERVED 0x03 /* All reserved bits */
-
-#define SCI_DEFAULT_ERROR_MASK (SCI_PER | SCI_FER)
-
-#define SCI_RDxF_CLEAR (u32)(~(SCI_RESERVED | SCI_RDRF))
-#define SCI_ERROR_CLEAR (u32)(~(SCI_RESERVED | SCI_PER | SCI_FER | SCI_ORER))
-#define SCI_TDxE_CLEAR (u32)(~(SCI_RESERVED | SCI_TEND | SCI_TDRE))
-#define SCI_BREAK_CLEAR (u32)(~(SCI_RESERVED | SCI_PER | SCI_FER | SCI_ORER))
-
-/* SCxSR (Serial Status Register) on SCIF, SCIFA, SCIFB, HSCIF */
-#define SCIF_ER BIT(7) /* Receive Error */
-#define SCIF_TEND BIT(6) /* Transmission End */
-#define SCIF_TDFE BIT(5) /* Transmit FIFO Data Empty */
-#define SCIF_BRK BIT(4) /* Break Detect */
-#define SCIF_FER BIT(3) /* Framing Error */
-#define SCIF_PER BIT(2) /* Parity Error */
-#define SCIF_RDF BIT(1) /* Receive FIFO Data Full */
-#define SCIF_DR BIT(0) /* Receive Data Ready */
-/* SCIF only (optional) */
-#define SCIF_PERC 0xf000 /* Number of Parity Errors */
-#define SCIF_FERC 0x0f00 /* Number of Framing Errors */
-/*SCIFA/SCIFB and SCIF on SH7705/SH7720/SH7721 only */
-#define SCIFA_ORER BIT(9) /* Overrun Error */
-
-#define SCIF_DEFAULT_ERROR_MASK (SCIF_PER | SCIF_FER | SCIF_BRK | SCIF_ER)
-
-#define SCIF_RDxF_CLEAR (u32)(~(SCIF_DR | SCIF_RDF))
-#define SCIF_ERROR_CLEAR (u32)(~(SCIF_PER | SCIF_FER | SCIF_ER))
-#define SCIF_TDxE_CLEAR (u32)(~(SCIF_TDFE))
-#define SCIF_BREAK_CLEAR (u32)(~(SCIF_PER | SCIF_FER | SCIF_BRK))
-
-/* SCFCR (FIFO Control Register) */
-#define SCFCR_RTRG1 BIT(7) /* Receive FIFO Data Count Trigger */
-#define SCFCR_RTRG0 BIT(6)
-#define SCFCR_TTRG1 BIT(5) /* Transmit FIFO Data Count Trigger */
-#define SCFCR_TTRG0 BIT(4)
-#define SCFCR_MCE BIT(3) /* Modem Control Enable */
-#define SCFCR_TFRST BIT(2) /* Transmit FIFO Data Register Reset */
-#define SCFCR_RFRST BIT(1) /* Receive FIFO Data Register Reset */
-#define SCFCR_LOOP BIT(0) /* Loopback Test */
-
-/* SCLSR (Line Status Register) on (H)SCIF */
-#define SCLSR_TO BIT(2) /* Timeout */
-#define SCLSR_ORER BIT(0) /* Overrun Error */
-
-/* SCSPTR (Serial Port Register), optional */
-#define SCSPTR_RTSIO BIT(7) /* Serial Port RTS# Pin Input/Output */
-#define SCSPTR_RTSDT BIT(6) /* Serial Port RTS# Pin Data */
-#define SCSPTR_CTSIO BIT(5) /* Serial Port CTS# Pin Input/Output */
-#define SCSPTR_CTSDT BIT(4) /* Serial Port CTS# Pin Data */
-#define SCSPTR_SCKIO BIT(3) /* Serial Port Clock Pin Input/Output */
-#define SCSPTR_SCKDT BIT(2) /* Serial Port Clock Pin Data */
-#define SCSPTR_SPB2IO BIT(1) /* Serial Port Break Input/Output */
-#define SCSPTR_SPB2DT BIT(0) /* Serial Port Break Data */
-
-/* HSSRR HSCIF */
-#define HSCIF_SRE BIT(15) /* Sampling Rate Register Enable */
-#define HSCIF_SRDE BIT(14) /* Sampling Point Register Enable */
-
-#define HSCIF_SRHP_SHIFT 8
-#define HSCIF_SRHP_MASK 0x0f00
-
-/* SCPCR (Serial Port Control Register), SCIFA/SCIFB only */
-#define SCPCR_RTSC BIT(4) /* Serial Port RTS# Pin / Output Pin */
-#define SCPCR_CTSC BIT(3) /* Serial Port CTS# Pin / Input Pin */
-#define SCPCR_SCKC BIT(2) /* Serial Port SCK Pin / Output Pin */
-#define SCPCR_RXDC BIT(1) /* Serial Port RXD Pin / Input Pin */
-#define SCPCR_TXDC BIT(0) /* Serial Port TXD Pin / Output Pin */
-
-/* SCPDR (Serial Port Data Register), SCIFA/SCIFB only */
-#define SCPDR_RTSD BIT(4) /* Serial Port RTS# Output Pin Data */
-#define SCPDR_CTSD BIT(3) /* Serial Port CTS# Input Pin Data */
-#define SCPDR_SCKD BIT(2) /* Serial Port SCK Output Pin Data */
-#define SCPDR_RXDD BIT(1) /* Serial Port RXD Input Pin Data */
-#define SCPDR_TXDD BIT(0) /* Serial Port TXD Output Pin Data */
-
-/*
- * BRG Clock Select Register (Some SCIF and HSCIF)
- * The Baud Rate Generator for external clock can provide a clock source for
- * the sampling clock. It outputs either its frequency divided clock, or the
- * (undivided) (H)SCK external clock.
- */
-#define SCCKS_CKS BIT(15) /* Select (H)SCK (1) or divided SC_CLK (0) */
-#define SCCKS_XIN BIT(14) /* SC_CLK uses bus clock (1) or SCIF_CLK (0) */
-
-#define SCxSR_TEND(port) (((port)->type == PORT_SCI) ? SCI_TEND : SCIF_TEND)
-#define SCxSR_RDxF(port) (((port)->type == PORT_SCI) ? SCI_RDRF : SCIF_DR | SCIF_RDF)
-#define SCxSR_TDxE(port) (((port)->type == PORT_SCI) ? SCI_TDRE : SCIF_TDFE)
-#define SCxSR_FER(port) (((port)->type == PORT_SCI) ? SCI_FER : SCIF_FER)
-#define SCxSR_PER(port) (((port)->type == PORT_SCI) ? SCI_PER : SCIF_PER)
-#define SCxSR_BRK(port) (((port)->type == PORT_SCI) ? 0x00 : SCIF_BRK)
-
-#define SCxSR_ERRORS(port) (to_sci_port(port)->params->error_mask)
-
-#define SCxSR_RDxF_CLEAR(port) \
- (((port)->type == PORT_SCI) ? SCI_RDxF_CLEAR : SCIF_RDxF_CLEAR)
-#define SCxSR_ERROR_CLEAR(port) \
- (to_sci_port(port)->params->error_clear)
-#define SCxSR_TDxE_CLEAR(port) \
- (((port)->type == PORT_SCI) ? SCI_TDxE_CLEAR : SCIF_TDxE_CLEAR)
-#define SCxSR_BREAK_CLEAR(port) \
- (((port)->type == PORT_SCI) ? SCI_BREAK_CLEAR : SCIF_BREAK_CLEAR)
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 08/27] serial: sh-sci: Fix deadlock during RSCI FIFO overrun error
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (6 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 07/27] serial: sh-sci: Merge sh-sci.h into sh-sci.c Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 09/27] serial: sh-sci: Update rx_trigger size for RZ/T2H RSCI Biju
` (20 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit 75a9f4c54770f062f4b3813a83667452b326dda3 ]
On RSCI IP, a deadlock occurs during a FIFO overrun error, as it uses a
different register to clear the FIFO overrun error status.
Cc: stable@kernel.org
Fixes: 0666e3fe95ab ("serial: sh-sci: Add support for RZ/T2H SCI")
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://patch.msgid.link/20251114101350.106699-3-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/sh-sci.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 1cb9d474c0f1..80b2b9b3542e 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -1198,8 +1198,16 @@ static int sci_handle_fifo_overrun(struct uart_port *port)
status = s->ops->read_reg(port, s->params->overrun_reg);
if (status & s->params->overrun_mask) {
- status &= ~s->params->overrun_mask;
- s->ops->write_reg(port, s->params->overrun_reg, status);
+ if (s->type == SCI_PORT_RSCI) {
+ /*
+ * All of the CFCLR_*C clearing bits match the corresponding
+ * CSR_*status bits. So, reuse the overrun mask for clearing.
+ */
+ s->ops->clear_SCxSR(port, s->params->overrun_mask);
+ } else {
+ status &= ~s->params->overrun_mask;
+ s->ops->write_reg(port, s->params->overrun_reg, status);
+ }
port->icount.overrun++;
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 09/27] serial: sh-sci: Update rx_trigger size for RZ/T2H RSCI
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (7 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 08/27] serial: sh-sci: Fix deadlock during RSCI FIFO overrun error Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 10/27] serial: rsci: Add set_rtrg() callback Biju
` (19 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit 3a3ab10245b6779e32114bc70052ec7a8a380152 ]
The RZ/T2H RSCI has 16-stage FIFO. Like other SoCs, set the default
rx_trigger as the fifosize.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/20251129164325.209213-3-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/sh-sci.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 80b2b9b3542e..4da0251c0b10 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -3331,7 +3331,7 @@ static int sci_init_single(struct platform_device *dev,
sci_port->rx_trigger = 8;
break;
case SCI_PORT_RSCI:
- sci_port->rx_trigger = 15;
+ sci_port->rx_trigger = 16;
break;
default:
sci_port->rx_trigger = 1;
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 10/27] serial: rsci: Add set_rtrg() callback
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (8 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 09/27] serial: sh-sci: Update rx_trigger size for RZ/T2H RSCI Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 11/27] serial: sh-sci: Drop checking port type for device file{create, remove} Biju
` (18 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit b346e5d7dbf6696176417923c49838a1beb1d785 ]
The rtrg variable is populated in sci_init_single() for RZ/T2H. Add
set_rtrg() callback for setting the rtrg value.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/20251129164325.209213-4-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[ Biju: Suashed commit c14afba60a61bc80403a571a67db956aa9800dbb as
field_prep() not present in 6.12.cip ]
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/rsci.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/drivers/tty/serial/rsci.c b/drivers/tty/serial/rsci.c
index aacd20bcd1c1..63b37c7e461c 100644
--- a/drivers/tty/serial/rsci.c
+++ b/drivers/tty/serial/rsci.c
@@ -151,6 +151,21 @@ static void rsci_start_rx(struct uart_port *port)
rsci_serial_out(port, CCR0, ctrl);
}
+static int rsci_scif_set_rtrg(struct uart_port *port, int rx_trig)
+{
+ u32 fcr = rsci_serial_in(port, FCR);
+
+ if (rx_trig >= port->fifosize)
+ rx_trig = port->fifosize - 1;
+ else if (rx_trig < 1)
+ rx_trig = 0;
+
+ FIELD_MODIFY(FCR_RTRG4_0, &fcr, rx_trig);
+ rsci_serial_out(port, FCR, fcr);
+
+ return rx_trig;
+}
+
static void rsci_set_termios(struct uart_port *port, struct ktermios *termios,
const struct ktermios *old)
{
@@ -454,6 +469,7 @@ static const struct sci_port_ops rsci_port_ops = {
.poll_put_char = rsci_poll_put_char,
.prepare_console_write = rsci_prepare_console_write,
.suspend_regs_size = rsci_suspend_regs_size,
+ .set_rtrg = rsci_scif_set_rtrg,
.shutdown_complete = rsci_shutdown_complete,
};
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 11/27] serial: sh-sci: Drop checking port type for device file{create, remove}
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (9 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 10/27] serial: rsci: Add set_rtrg() callback Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 12/27] serial: rsci: Drop rsci_clear_SCxSR() Biju
` (17 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit 42f7303c5f668403f06d9b938d3de2bda3736530 ]
Ports that support FIFO has fifosize > 1. Replace checking the port type
with fifosize for device file{create, remove}.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/20251129164325.209213-5-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/sh-sci.c | 15 ++++-----------
1 file changed, 4 insertions(+), 11 deletions(-)
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 4da0251c0b10..7f23b63eca13 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -3550,16 +3550,14 @@ static struct uart_driver sci_uart_driver = {
static void sci_remove(struct platform_device *dev)
{
struct sci_port *s = platform_get_drvdata(dev);
- unsigned int type = s->type; /* uart_remove_... clears it */
sci_ports_in_use &= ~BIT(s->port.line);
uart_remove_one_port(&sci_uart_driver, &s->port);
- if (s->port.fifosize > 1)
+ if (s->port.fifosize > 1) {
device_remove_file(&dev->dev, &dev_attr_rx_fifo_trigger);
- if (type == PORT_SCIFA || type == PORT_SCIFB || type == PORT_HSCIF ||
- type == SCI_PORT_RSCI)
device_remove_file(&dev->dev, &dev_attr_rx_fifo_timeout);
+ }
}
static const struct sci_of_data of_sci_scif_sh2 = {
@@ -3915,15 +3913,10 @@ static int sci_probe(struct platform_device *dev)
ret = device_create_file(&dev->dev, &dev_attr_rx_fifo_trigger);
if (ret)
return ret;
- }
- if (sp->type == PORT_SCIFA || sp->type == PORT_SCIFB ||
- sp->type == PORT_HSCIF || sp->type == SCI_PORT_RSCI) {
+
ret = device_create_file(&dev->dev, &dev_attr_rx_fifo_timeout);
if (ret) {
- if (sp->port.fifosize > 1) {
- device_remove_file(&dev->dev,
- &dev_attr_rx_fifo_trigger);
- }
+ device_remove_file(&dev->dev, &dev_attr_rx_fifo_trigger);
return ret;
}
}
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 12/27] serial: rsci: Drop rsci_clear_SCxSR()
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (10 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 11/27] serial: sh-sci: Drop checking port type for device file{create, remove} Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 13/27] serial: sh-sci: Drop extra lines Biju
` (16 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit 450bd399c8797d2783c73aa6c83f382ac8d5f630 ]
Drop rsci_clear_SCxSR by reusing rsci_clear_CFC() as the contents of
both functions are the same.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/20251129164325.209213-6-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/rsci.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/tty/serial/rsci.c b/drivers/tty/serial/rsci.c
index 63b37c7e461c..ca593665b551 100644
--- a/drivers/tty/serial/rsci.c
+++ b/drivers/tty/serial/rsci.c
@@ -137,10 +137,6 @@ static void rsci_clear_DRxC(struct uart_port *port)
rsci_serial_out(port, FFCLR, FFCLR_DRC);
}
-static void rsci_clear_SCxSR(struct uart_port *port, unsigned int mask)
-{
- rsci_serial_out(port, CFCLR, mask);
-}
static void rsci_start_rx(struct uart_port *port)
{
@@ -390,7 +386,7 @@ static void rsci_poll_put_char(struct uart_port *port, unsigned char c)
}
rsci_serial_out(port, TDR, c);
done:
- rsci_clear_SCxSR(port, CFCLR_TDREC);
+ rsci_clear_CFC(port, CFCLR_TDREC);
}
static void rsci_prepare_console_write(struct uart_port *port, u32 ctrl)
@@ -463,7 +459,7 @@ static const struct uart_ops rsci_uart_ops = {
static const struct sci_port_ops rsci_port_ops = {
.read_reg = rsci_serial_in,
.write_reg = rsci_serial_out,
- .clear_SCxSR = rsci_clear_SCxSR,
+ .clear_SCxSR = rsci_clear_CFC,
.transmit_chars = rsci_transmit_chars,
.receive_chars = rsci_receive_chars,
.poll_put_char = rsci_poll_put_char,
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 13/27] serial: sh-sci: Drop extra lines
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (11 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 12/27] serial: rsci: Drop rsci_clear_SCxSR() Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 14/27] serial: rsci: Drop unused macro DCR Biju
` (15 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit c17db4d06cabc7746d48d99c6245d19bd55077d4 ]
Shorten the number lines in sci_init_clocks() by fitting the error
messages within an 100-character length limit.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/20251129164325.209213-7-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/sh-sci.c | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 7f23b63eca13..97f6dc8692f5 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -3187,11 +3187,8 @@ static int sci_init_clocks(struct sci_port *sci_port, struct device *dev)
return PTR_ERR(clk);
if (!clk && sci_port->type == SCI_PORT_RSCI &&
- (i == SCI_FCK || i == SCI_BRG_INT)) {
- return dev_err_probe(dev, -ENODEV,
- "failed to get %s\n",
- name);
- }
+ (i == SCI_FCK || i == SCI_BRG_INT))
+ return dev_err_probe(dev, -ENODEV, "failed to get %s\n", name);
if (!clk && i == SCI_FCK) {
/*
@@ -3201,16 +3198,13 @@ static int sci_init_clocks(struct sci_port *sci_port, struct device *dev)
*/
clk = devm_clk_get(dev, "peripheral_clk");
if (IS_ERR(clk))
- return dev_err_probe(dev, PTR_ERR(clk),
- "failed to get %s\n",
- name);
+ return dev_err_probe(dev, PTR_ERR(clk), "failed to get %s\n", name);
}
if (!clk)
dev_dbg(dev, "failed to get %s\n", name);
else
- dev_dbg(dev, "clk %s is %pC rate %lu\n", name,
- clk, clk_get_rate(clk));
+ dev_dbg(dev, "clk %s is %pC rate %lu\n", name, clk, clk_get_rate(clk));
sci_port->clks[i] = clk;
}
return 0;
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 14/27] serial: rsci: Drop unused macro DCR
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (12 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 13/27] serial: sh-sci: Drop extra lines Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 15/27] serial: rsci: Drop unused TDR register Biju
` (14 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit 36816a033dd41fda415ae0696931d6bfe87671a2 ]
Drop unused macro DCR and its bit definition.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/20251129164325.209213-8-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/rsci.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/drivers/tty/serial/rsci.c b/drivers/tty/serial/rsci.c
index ca593665b551..0ca9d38fe8d2 100644
--- a/drivers/tty/serial/rsci.c
+++ b/drivers/tty/serial/rsci.c
@@ -24,7 +24,6 @@ MODULE_IMPORT_NS(SH_SCI);
#define CCR3 0x14
#define CCR4 0x18
#define FCR 0x24
-#define DCR 0x30
#define CSR 0x48
#define FRSR 0x50
#define FTSR 0x54
@@ -119,8 +118,6 @@ MODULE_IMPORT_NS(SH_SCI);
/* FFCLR (FIFO Flag CLear Register) */
#define FFCLR_DRC BIT(0) /* DR Clear */
-#define DCR_DEPOL BIT(0)
-
static u32 rsci_serial_in(struct uart_port *p, int offset)
{
return readl(p->membase + offset);
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 15/27] serial: rsci: Drop unused TDR register
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (13 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 14/27] serial: rsci: Drop unused macro DCR Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 16/27] serial: sh-sci: Use devm_reset_control_array_get_exclusive() Biju
` (13 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit 507a7ba917cd7ae043ba05db02089b152ae0aaa8 ]
Drop the unused TDR register-related macros.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/20251129164325.209213-9-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/rsci.c | 6 ------
1 file changed, 6 deletions(-)
diff --git a/drivers/tty/serial/rsci.c b/drivers/tty/serial/rsci.c
index 0ca9d38fe8d2..fb419f34f35d 100644
--- a/drivers/tty/serial/rsci.c
+++ b/drivers/tty/serial/rsci.c
@@ -35,12 +35,6 @@ MODULE_IMPORT_NS(SH_SCI);
#define RDR_FPER BIT(11) /* FIFO Parity Error */
#define RDR_RDAT_MSK GENMASK(8, 0)
-/* TDR (Transmit Data Register) */
-#define TDR_MPBT BIT(9) /* Multiprocessor Transfer */
-#define TDR_TDAT_9BIT_LSHIFT 0
-#define TDR_TDAT_9BIT_VAL 0x1FF
-#define TDR_TDAT_9BIT_MSK (TDR_TDAT_9BIT_VAL << TDR_TDAT_9BIT_LSHIFT)
-
/* CCR0 (Common Control Register 0) */
#define CCR0_SSE BIT(24) /* SSn# Pin Function Enable */
#define CCR0_TEIE BIT(21) /* Transmit End Interrupt Enable */
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 16/27] serial: sh-sci: Use devm_reset_control_array_get_exclusive()
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (14 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 15/27] serial: rsci: Drop unused TDR register Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 17/27] serial: sh-sci: Add sci_is_rsci_type() Biju
` (12 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit 850ec928922fb819c28eb175bf85b01e28afdea7 ]
Replace devm_*_get_exclusive()->devm_*_array_get_exclusive() to support
existing SoCs along with RZ/G3E as RZ/G3E has 2 resets.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/20251129164325.209213-10-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/sh-sci.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 97f6dc8692f5..cc6765463003 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -3706,7 +3706,7 @@ static struct plat_sci_port *sci_parse_dt(struct platform_device *pdev,
data = of_device_get_match_data(&pdev->dev);
- rstc = devm_reset_control_get_optional_exclusive(&pdev->dev, NULL);
+ rstc = devm_reset_control_array_get_optional_exclusive(&pdev->dev);
if (IS_ERR(rstc))
return ERR_PTR(dev_err_probe(&pdev->dev, PTR_ERR(rstc),
"failed to get reset ctrl\n"));
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 17/27] serial: sh-sci: Add sci_is_rsci_type()
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (15 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 16/27] serial: sh-sci: Use devm_reset_control_array_get_exclusive() Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 18/27] serial: sh-sci: Rename port SCI_PORT_RSCI->RSCI_PORT_SCIF16 Biju
` (11 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit 7d8b226bf95cd2b49f15da4f4d40e05932c0d4cc ]
Add sci_is_rsci_type() for RSCI port type. This will simplify the code
when the support added for RSCI_PORT_SCIF32 private PORT type.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/20251129164325.209213-11-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/sh-sci.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index cc6765463003..0be3d5c45388 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -1182,6 +1182,11 @@ static int sci_handle_errors(struct uart_port *port)
return copied;
}
+static bool sci_is_rsci_type(u8 type)
+{
+ return (type == SCI_PORT_RSCI);
+}
+
static int sci_handle_fifo_overrun(struct uart_port *port)
{
struct tty_port *tport = &port->state->port;
@@ -1190,7 +1195,7 @@ static int sci_handle_fifo_overrun(struct uart_port *port)
int copied = 0;
u32 status;
- if (s->type != SCI_PORT_RSCI) {
+ if (!sci_is_rsci_type(s->type)) {
reg = sci_getreg(port, s->params->overrun_reg);
if (!reg->size)
return 0;
@@ -1198,7 +1203,7 @@ static int sci_handle_fifo_overrun(struct uart_port *port)
status = s->ops->read_reg(port, s->params->overrun_reg);
if (status & s->params->overrun_mask) {
- if (s->type == SCI_PORT_RSCI) {
+ if (sci_is_rsci_type(s->type)) {
/*
* All of the CFCLR_*C clearing bits match the corresponding
* CSR_*status bits. So, reuse the overrun mask for clearing.
@@ -2016,7 +2021,7 @@ static irqreturn_t sci_tx_end_interrupt(int irq, void *ptr)
unsigned long flags;
u32 ctrl;
- if (s->type != PORT_SCI && s->type != SCI_PORT_RSCI)
+ if (s->type != PORT_SCI && !sci_is_rsci_type(s->type))
return sci_tx_interrupt(irq, ptr);
uart_port_lock_irqsave(port, &flags);
@@ -3290,7 +3295,7 @@ static int sci_init_single(struct platform_device *dev,
* The fourth interrupt on SCI and RSCI port is transmit end interrupt, so
* shuffle the interrupts.
*/
- if (p->type == PORT_SCI || p->type == SCI_PORT_RSCI)
+ if (p->type == PORT_SCI || sci_is_rsci_type(p->type))
swap(sci_port->irqs[SCIx_BRI_IRQ], sci_port->irqs[SCIx_TEI_IRQ]);
/* The SCI generates several interrupts. They can be muxed together or
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 18/27] serial: sh-sci: Rename port SCI_PORT_RSCI->RSCI_PORT_SCIF16
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (16 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 17/27] serial: sh-sci: Add sci_is_rsci_type() Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 19/27] serial: sh-sci: Add RSCI_PORT_SCIF32 port ID Biju
` (10 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit d53f4aa9edaafda28e426d8e5eda7dc50f7ca94e ]
Rename port SCI_PORT_RSCI->RSCI_PORT_SCIF16 to differentiate it from
RZ/G3E port that has 32-stage FIFO.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/20251129164325.209213-12-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/rsci.c | 2 +-
drivers/tty/serial/sh-sci-common.h | 2 +-
drivers/tty/serial/sh-sci.c | 8 ++++----
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/tty/serial/rsci.c b/drivers/tty/serial/rsci.c
index fb419f34f35d..8a4f2618e53c 100644
--- a/drivers/tty/serial/rsci.c
+++ b/drivers/tty/serial/rsci.c
@@ -461,7 +461,7 @@ static const struct sci_port_ops rsci_port_ops = {
};
struct sci_of_data of_sci_rsci_data = {
- .type = SCI_PORT_RSCI,
+ .type = RSCI_PORT_SCIF16,
.ops = &rsci_port_ops,
.uart_ops = &rsci_uart_ops,
.params = &rsci_port_params,
diff --git a/drivers/tty/serial/sh-sci-common.h b/drivers/tty/serial/sh-sci-common.h
index e3c028df14f1..1b9480c7f4cb 100644
--- a/drivers/tty/serial/sh-sci-common.h
+++ b/drivers/tty/serial/sh-sci-common.h
@@ -7,7 +7,7 @@
/* Private port IDs */
enum SCI_PORT_TYPE {
- SCI_PORT_RSCI = BIT(7) | 0,
+ RSCI_PORT_SCIF16 = BIT(7) | 0,
};
enum SCI_CLKS {
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 0be3d5c45388..69cd9aa60922 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -1184,7 +1184,7 @@ static int sci_handle_errors(struct uart_port *port)
static bool sci_is_rsci_type(u8 type)
{
- return (type == SCI_PORT_RSCI);
+ return (type == RSCI_PORT_SCIF16);
}
static int sci_handle_fifo_overrun(struct uart_port *port)
@@ -3179,7 +3179,7 @@ static int sci_init_clocks(struct sci_port *sci_port, struct device *dev)
if (sci_port->type == PORT_HSCIF) {
clk_names[SCI_SCK] = "hsck";
- } else if (sci_port->type == SCI_PORT_RSCI) {
+ } else if (sci_port->type == RSCI_PORT_SCIF16) {
clk_names[SCI_FCK] = "operation";
clk_names[SCI_BRG_INT] = "bus";
}
@@ -3191,7 +3191,7 @@ static int sci_init_clocks(struct sci_port *sci_port, struct device *dev)
if (IS_ERR(clk))
return PTR_ERR(clk);
- if (!clk && sci_port->type == SCI_PORT_RSCI &&
+ if (!clk && sci_port->type == RSCI_PORT_SCIF16 &&
(i == SCI_FCK || i == SCI_BRG_INT))
return dev_err_probe(dev, -ENODEV, "failed to get %s\n", name);
@@ -3329,7 +3329,7 @@ static int sci_init_single(struct platform_device *dev,
else
sci_port->rx_trigger = 8;
break;
- case SCI_PORT_RSCI:
+ case RSCI_PORT_SCIF16:
sci_port->rx_trigger = 16;
break;
default:
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 19/27] serial: sh-sci: Add RSCI_PORT_SCIF32 port ID
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (17 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 18/27] serial: sh-sci: Rename port SCI_PORT_RSCI->RSCI_PORT_SCIF16 Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 20/27] serial: sh-sci: Add support for RZ/G3E RSCI clks Biju
` (9 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit 4cb2bd1bf41a0d6dbe1fc4bf8d8f83f40b914572 ]
The RZ/G3E RSCI IP has 32-stage FIFO compared to 16-stage FIFO on RZ/T2H.
Add RSCI_PORT_SCIF32 port ID to differentiate it from RZ/T2H RSCI and
update sci_is_rsci_type() and sci_is_fifo_type()
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/20251129164325.209213-13-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/sh-sci-common.h | 1 +
drivers/tty/serial/sh-sci.c | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/tty/serial/sh-sci-common.h b/drivers/tty/serial/sh-sci-common.h
index 1b9480c7f4cb..abcd5bcc7c36 100644
--- a/drivers/tty/serial/sh-sci-common.h
+++ b/drivers/tty/serial/sh-sci-common.h
@@ -8,6 +8,7 @@
/* Private port IDs */
enum SCI_PORT_TYPE {
RSCI_PORT_SCIF16 = BIT(7) | 0,
+ RSCI_PORT_SCIF32 = BIT(7) | 1,
};
enum SCI_CLKS {
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 69cd9aa60922..0a38fd760c4f 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -1184,7 +1184,7 @@ static int sci_handle_errors(struct uart_port *port)
static bool sci_is_rsci_type(u8 type)
{
- return (type == RSCI_PORT_SCIF16);
+ return (type == RSCI_PORT_SCIF16 || type == RSCI_PORT_SCIF32);
}
static int sci_handle_fifo_overrun(struct uart_port *port)
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 20/27] serial: sh-sci: Add support for RZ/G3E RSCI clks
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (18 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 19/27] serial: sh-sci: Add RSCI_PORT_SCIF32 port ID Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 21/27] serial: sh-sci: Make sci_scbrr_calc() public Biju
` (8 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit 83c405ec3a340a334c46bb59b07e5799f6d205a4 ]
RZ/G3E RSCI has 6 clocks (5 module clocks + 1 external clock). Add
support for the module clocks.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/20251129164325.209213-14-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/sh-sci-common.h | 3 +++
drivers/tty/serial/sh-sci.c | 10 ++++++++++
2 files changed, 13 insertions(+)
diff --git a/drivers/tty/serial/sh-sci-common.h b/drivers/tty/serial/sh-sci-common.h
index abcd5bcc7c36..5d30771278b4 100644
--- a/drivers/tty/serial/sh-sci-common.h
+++ b/drivers/tty/serial/sh-sci-common.h
@@ -16,6 +16,9 @@ enum SCI_CLKS {
SCI_SCK, /* Optional External Clock */
SCI_BRG_INT, /* Optional BRG Internal Clock Source */
SCI_SCIF_CLK, /* Optional BRG External Clock Source */
+ SCI_FCK_DIV4, /* Optional Functional Clock frequency-divided by 4 */
+ SCI_FCK_DIV16, /* Optional Functional Clock frequency-divided by 16 */
+ SCI_FCK_DIV64, /* Optional Functional Clock frequency-divided by 64 */
SCI_NUM_CLKS
};
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 0a38fd760c4f..6e9cd8044b89 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -3173,6 +3173,9 @@ static int sci_init_clocks(struct sci_port *sci_port, struct device *dev)
[SCI_SCK] = "sck",
[SCI_BRG_INT] = "brg_int",
[SCI_SCIF_CLK] = "scif_clk",
+ [SCI_FCK_DIV4] = "tclk_div4",
+ [SCI_FCK_DIV16] = "tclk_div16",
+ [SCI_FCK_DIV64] = "tclk_div64",
};
struct clk *clk;
unsigned int i;
@@ -3182,6 +3185,9 @@ static int sci_init_clocks(struct sci_port *sci_port, struct device *dev)
} else if (sci_port->type == RSCI_PORT_SCIF16) {
clk_names[SCI_FCK] = "operation";
clk_names[SCI_BRG_INT] = "bus";
+ } else if (sci_port->type == RSCI_PORT_SCIF32) {
+ clk_names[SCI_FCK] = "tclk";
+ clk_names[SCI_BRG_INT] = "pclk";
}
for (i = 0; i < SCI_NUM_CLKS; i++) {
@@ -3195,6 +3201,10 @@ static int sci_init_clocks(struct sci_port *sci_port, struct device *dev)
(i == SCI_FCK || i == SCI_BRG_INT))
return dev_err_probe(dev, -ENODEV, "failed to get %s\n", name);
+ if (!clk && sci_port->type == RSCI_PORT_SCIF32 &&
+ (i != SCI_SCK && i != SCI_SCIF_CLK))
+ return dev_err_probe(dev, -ENODEV, "failed to get %s\n", name);
+
if (!clk && i == SCI_FCK) {
/*
* Not all SH platforms declare a clock lookup entry
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 21/27] serial: sh-sci: Make sci_scbrr_calc() public
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (19 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 20/27] serial: sh-sci: Add support for RZ/G3E RSCI clks Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 22/27] serial: sh-sci: Add finish_console_write() callback Biju
` (7 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit 5632bda5e848c4592eefa4451092beb4ce29ab76 ]
Make the function sci_scbrr_calc() public for code reuse to support RZ/G3E
RSCI IP.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/20251129164325.209213-15-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[ Biju: Dropped double quotes around EXPORT_SYMBOL_NS_GPL ]
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/sh-sci-common.h | 3 +++
drivers/tty/serial/sh-sci.c | 6 +++---
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/tty/serial/sh-sci-common.h b/drivers/tty/serial/sh-sci-common.h
index 5d30771278b4..976e394ab968 100644
--- a/drivers/tty/serial/sh-sci-common.h
+++ b/drivers/tty/serial/sh-sci-common.h
@@ -169,6 +169,9 @@ void sci_port_enable(struct sci_port *sci_port);
int sci_startup(struct uart_port *port);
void sci_shutdown(struct uart_port *port);
+int sci_scbrr_calc(struct sci_port *s, unsigned int bps, unsigned int *brr,
+ unsigned int *srr, unsigned int *cks);
+
#define min_sr(_port) ffs((_port)->sampling_rate_mask)
#define max_sr(_port) fls((_port)->sampling_rate_mask)
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 6e9cd8044b89..781fc371a62c 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -2574,9 +2574,8 @@ static int sci_brg_calc(struct sci_port *s, unsigned int bps,
}
/* calculate sample rate, BRR, and clock select */
-static int sci_scbrr_calc(struct sci_port *s, unsigned int bps,
- unsigned int *brr, unsigned int *srr,
- unsigned int *cks)
+int sci_scbrr_calc(struct sci_port *s, unsigned int bps, unsigned int *brr,
+ unsigned int *srr, unsigned int *cks)
{
unsigned long freq = s->clk_rates[SCI_FCK];
unsigned int sr, br, prediv, scrate, c;
@@ -2640,6 +2639,7 @@ static int sci_scbrr_calc(struct sci_port *s, unsigned int bps,
min_err, *brr, *srr + 1, *cks);
return min_err;
}
+EXPORT_SYMBOL_NS_GPL(sci_scbrr_calc, SH_SCI);
static void sci_reset(struct uart_port *port)
{
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 22/27] serial: sh-sci: Add finish_console_write() callback
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (20 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 21/27] serial: sh-sci: Make sci_scbrr_calc() public Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 23/27] serial: rsci: Rename early_console data, port_params and callback() names Biju
` (6 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit bbcd508c84d4884c620f4f4bb7d382539466b9a3 ]
Add finish_console_write() callback as RZ/G3E RSCI IP needs special
handling compared to other SoCs.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/20251129164325.209213-16-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/sh-sci-common.h | 1 +
drivers/tty/serial/sh-sci.c | 5 ++++-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/tty/serial/sh-sci-common.h b/drivers/tty/serial/sh-sci-common.h
index 976e394ab968..f363a659c46a 100644
--- a/drivers/tty/serial/sh-sci-common.h
+++ b/drivers/tty/serial/sh-sci-common.h
@@ -93,6 +93,7 @@ struct sci_port_ops {
void (*shutdown_complete)(struct uart_port *port);
void (*prepare_console_write)(struct uart_port *port, u32 ctrl);
+ void (*finish_console_write)(struct uart_port *port, u32 ctrl);
void (*console_save)(struct uart_port *port);
void (*console_restore)(struct uart_port *port);
size_t (*suspend_regs_size)(void);
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 781fc371a62c..588027a8068f 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -3432,7 +3432,10 @@ static void serial_console_write(struct console *co, const char *s,
cpu_relax();
/* restore the SCSCR */
- sci_port->ops->write_reg(port, regs->control, ctrl);
+ if (sci_port->ops->finish_console_write)
+ sci_port->ops->finish_console_write(port, ctrl);
+ else
+ sci_port->ops->write_reg(port, regs->control, ctrl);
if (locked)
uart_port_unlock_irqrestore(port, flags);
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 23/27] serial: rsci: Rename early_console data, port_params and callback() names
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (21 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 22/27] serial: sh-sci: Add finish_console_write() callback Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 24/27] serial: sh-sci: Add support for RZ/G3E RSCI Biju
` (5 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit 068b862f5025920e3e10228e9904c2560e08b855 ]
Rename rsci_early_console_setup()->rsci_rzt2h_early_console_setup(),
the early_console data of_sci_rsci_data->of_rsci_rzt2h_data and the
port_params rsci_port_params->rsci_rzt2h_port_params to support RZ/G3E
RSCI that uses different data and callback().
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/20251129164325.209213-17-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/rsci.c | 14 +++++++-------
drivers/tty/serial/rsci.h | 2 +-
drivers/tty/serial/sh-sci.c | 2 +-
3 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/tty/serial/rsci.c b/drivers/tty/serial/rsci.c
index 8a4f2618e53c..62a64fa73b74 100644
--- a/drivers/tty/serial/rsci.c
+++ b/drivers/tty/serial/rsci.c
@@ -418,7 +418,7 @@ static const struct sci_port_params_bits rsci_port_param_bits = {
.poll_sent_bits = CSR_TDRE | CSR_TEND,
};
-static const struct sci_port_params rsci_port_params = {
+static const struct sci_port_params rsci_rzt2h_port_params = {
.fifosize = 16,
.overrun_reg = CSR,
.overrun_mask = CSR_ORER,
@@ -460,22 +460,22 @@ static const struct sci_port_ops rsci_port_ops = {
.shutdown_complete = rsci_shutdown_complete,
};
-struct sci_of_data of_sci_rsci_data = {
+struct sci_of_data of_rsci_rzt2h_data = {
.type = RSCI_PORT_SCIF16,
.ops = &rsci_port_ops,
.uart_ops = &rsci_uart_ops,
- .params = &rsci_port_params,
+ .params = &rsci_rzt2h_port_params,
};
#ifdef CONFIG_SERIAL_SH_SCI_EARLYCON
-static int __init rsci_early_console_setup(struct earlycon_device *device,
- const char *opt)
+static int __init rsci_rzt2h_early_console_setup(struct earlycon_device *device,
+ const char *opt)
{
- return scix_early_console_setup(device, &of_sci_rsci_data);
+ return scix_early_console_setup(device, &of_rsci_rzt2h_data);
}
-OF_EARLYCON_DECLARE(rsci, "renesas,r9a09g077-rsci", rsci_early_console_setup);
+OF_EARLYCON_DECLARE(rsci, "renesas,r9a09g077-rsci", rsci_rzt2h_early_console_setup);
#endif /* CONFIG_SERIAL_SH_SCI_EARLYCON */
diff --git a/drivers/tty/serial/rsci.h b/drivers/tty/serial/rsci.h
index 2af3f28b465a..9547148e8bd1 100644
--- a/drivers/tty/serial/rsci.h
+++ b/drivers/tty/serial/rsci.h
@@ -5,6 +5,6 @@
#include "sh-sci-common.h"
-extern struct sci_of_data of_sci_rsci_data;
+extern struct sci_of_data of_rsci_rzt2h_data;
#endif /* __RSCI_H__ */
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 588027a8068f..29e14e224d02 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -3665,7 +3665,7 @@ static const struct of_device_id of_sci_match[] __maybe_unused = {
#ifdef CONFIG_SERIAL_RSCI
{
.compatible = "renesas,r9a09g077-rsci",
- .data = &of_sci_rsci_data,
+ .data = &of_rsci_rzt2h_data,
},
#endif /* CONFIG_SERIAL_RSCI */
/* Family-specific types */
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 24/27] serial: sh-sci: Add support for RZ/G3E RSCI
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (22 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 23/27] serial: rsci: Rename early_console data, port_params and callback() names Biju
@ 2026-03-11 10:04 ` Biju
2026-03-13 10:39 ` Pavel Machek
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 25/27] arm64: dts: renesas: r9a09g047: Add RSCI nodes Biju
` (4 subsequent siblings)
28 siblings, 1 reply; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit 42eeed6d9f31e6063bf98d71212a6de3aac8cdd3 ]
Add support for RZ/G3E RSCI. RSCI IP found on the RZ/G3E SoC is similar
to RZ/T2H, but it has a 32-stage FIFO. It has 6 clocks(5 module clocks
+ 1 external clock) instead of 3 clocks(2 module clocks + 1 external
clock) on T2H, has 6 irqs compared to 4 on RZ/T2H and has multiple resets.
Add support for the hardware flow control.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/20251129164325.209213-18-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/tty/serial/rsci.c | 260 ++++++++++++++++++++++++++++++++++--
drivers/tty/serial/rsci.h | 1 +
drivers/tty/serial/sh-sci.c | 5 +
3 files changed, 257 insertions(+), 9 deletions(-)
diff --git a/drivers/tty/serial/rsci.c b/drivers/tty/serial/rsci.c
index 62a64fa73b74..4dea8ddf6665 100644
--- a/drivers/tty/serial/rsci.c
+++ b/drivers/tty/serial/rsci.c
@@ -11,6 +11,8 @@
#include <linux/serial_core.h>
#include <linux/serial_sci.h>
#include <linux/tty_flip.h>
+
+#include "serial_mctrl_gpio.h"
#include "rsci.h"
MODULE_IMPORT_NS(SH_SCI);
@@ -59,6 +61,41 @@ MODULE_IMPORT_NS(SH_SCI);
#define CCR1_CTSPEN BIT(1) /* CTS External Pin Enable */
#define CCR1_CTSE BIT(0) /* CTS Enable */
+/* CCR2 (Common Control Register 2) */
+#define CCR2_INIT 0xFF000004
+#define CCR2_CKS_TCLK (0) /* TCLK clock */
+#define CCR2_CKS_TCLK_DIV4 BIT(20) /* TCLK/4 clock */
+#define CCR2_CKS_TCLK_DIV16 BIT(21) /* TCLK16 clock */
+#define CCR2_CKS_TCLK_DIV64 (BIT(21) | BIT(20)) /* TCLK/64 clock */
+#define CCR2_BRME BIT(16) /* Bitrate Modulation Enable */
+#define CCR2_ABCSE BIT(6) /* Asynchronous Mode Extended Base Clock Select */
+#define CCR2_ABCS BIT(5) /* Asynchronous Mode Base Clock Select */
+#define CCR2_BGDM BIT(4) /* Baud Rate Generator Double-Speed Mode Select */
+
+/* CCR3 (Common Control Register 3) */
+#define CCR3_INIT 0x1203
+#define CCR3_BLK BIT(29) /* Block Transfer Mode */
+#define CCR3_GM BIT(28) /* GSM Mode */
+#define CCR3_CKE1 BIT(25) /* Clock Enable 1 */
+#define CCR3_CKE0 BIT(24) /* Clock Enable 0 */
+#define CCR3_DEN BIT(21) /* Driver Enabled */
+#define CCR3_FM BIT(20) /* FIFO Mode Select */
+#define CCR3_MP BIT(19) /* Multi-Processor Mode */
+#define CCR3_MOD_ASYNC 0 /* Asynchronous mode (Multi-processor mode) */
+#define CCR3_MOD_IRDA BIT(16) /* Smart card interface mode */
+#define CCR3_MOD_CLK_SYNC BIT(17) /* Clock synchronous mode */
+#define CCR3_MOD_SPI (BIT(17) | BIT(16)) /* Simple SPI mode */
+#define CCR3_MOD_I2C BIT(18) /* Simple I2C mode */
+#define CCR3_RXDESEL BIT(15) /* Asynchronous Start Bit Edge Detection Select */
+#define CCR3_STP BIT(14) /* Stop bit Length */
+#define CCR3_SINV BIT(13) /* Transmitted/Received Data Invert */
+#define CCR3_LSBF BIT(12) /* LSB First select */
+#define CCR3_CHR1 BIT(9) /* Character Length */
+#define CCR3_CHR0 BIT(8) /* Character Length */
+#define CCR3_BPEN BIT(7) /* Synchronizer Bypass Enable */
+#define CCR3_CPOL BIT(1) /* Clock Polarity Select */
+#define CCR3_CPHA BIT(0) /* Clock Phase Select */
+
/* FCR (FIFO Control Register) */
#define FCR_RFRST BIT(23) /* Receive FIFO Data Register Reset */
#define FCR_TFRST BIT(15) /* Transmit FIFO Data Register Reset */
@@ -138,6 +175,29 @@ static void rsci_start_rx(struct uart_port *port)
rsci_serial_out(port, CCR0, ctrl);
}
+static void rsci_enable_ms(struct uart_port *port)
+{
+ mctrl_gpio_enable_ms(to_sci_port(port)->gpios);
+}
+
+static void rsci_init_pins(struct uart_port *port, unsigned int cflag)
+{
+ struct sci_port *s = to_sci_port(port);
+
+ /* Use port-specific handler if provided */
+ if (s->cfg->ops && s->cfg->ops->init_pins) {
+ s->cfg->ops->init_pins(port, cflag);
+ return;
+ }
+
+ if (!s->has_rtscts)
+ return;
+
+ if (s->autorts)
+ rsci_serial_out(port, CCR1, rsci_serial_in(port, CCR1) |
+ CCR1_CTSE | CCR1_CTSPEN);
+}
+
static int rsci_scif_set_rtrg(struct uart_port *port, int rx_trig)
{
u32 fcr = rsci_serial_in(port, FCR);
@@ -156,18 +216,119 @@ static int rsci_scif_set_rtrg(struct uart_port *port, int rx_trig)
static void rsci_set_termios(struct uart_port *port, struct ktermios *termios,
const struct ktermios *old)
{
+ unsigned int ccr2_val = CCR2_INIT, ccr3_val = CCR3_INIT;
+ unsigned int ccr0_val = 0, ccr1_val = 0, ccr4_val = 0;
+ unsigned int brr1 = 255, cks1 = 0, srr1 = 15;
struct sci_port *s = to_sci_port(port);
+ unsigned int brr = 255, cks = 0;
+ int min_err = INT_MAX, err;
+ unsigned long max_freq = 0;
+ unsigned int baud, i;
unsigned long flags;
+ unsigned int ctrl;
+ int best_clk = -1;
+
+ if ((termios->c_cflag & CSIZE) == CS7) {
+ ccr3_val |= CCR3_CHR0;
+ } else {
+ termios->c_cflag &= ~CSIZE;
+ termios->c_cflag |= CS8;
+ }
+
+ if (termios->c_cflag & PARENB)
+ ccr1_val |= CCR1_PE;
+
+ if (termios->c_cflag & PARODD)
+ ccr1_val |= (CCR1_PE | CCR1_PM);
+
+ if (termios->c_cflag & CSTOPB)
+ ccr3_val |= CCR3_STP;
+
+ /* Enable noise filter function */
+ ccr1_val |= CCR1_NFEN;
+
+ /*
+ * earlyprintk comes here early on with port->uartclk set to zero.
+ * the clock framework is not up and running at this point so here
+ * we assume that 115200 is the maximum baud rate. please note that
+ * the baud rate is not programmed during earlyprintk - it is assumed
+ * that the previous boot loader has enabled required clocks and
+ * setup the baud rate generator hardware for us already.
+ */
+ if (!port->uartclk) {
+ max_freq = 115200;
+ } else {
+ for (i = 0; i < SCI_NUM_CLKS; i++)
+ max_freq = max(max_freq, s->clk_rates[i]);
+
+ max_freq /= min_sr(s);
+ }
+
+ baud = uart_get_baud_rate(port, termios, old, 0, max_freq);
+ if (!baud)
+ goto done;
+
+ /* Divided Functional Clock using standard Bit Rate Register */
+ err = sci_scbrr_calc(s, baud, &brr1, &srr1, &cks1);
+ if (abs(err) < abs(min_err)) {
+ best_clk = SCI_FCK;
+ ccr0_val = 0;
+ min_err = err;
+ brr = brr1;
+ cks = cks1;
+ }
+
+done:
+ if (best_clk >= 0)
+ dev_dbg(port->dev, "Using clk %pC for %u%+d bps\n",
+ s->clks[best_clk], baud, min_err);
sci_port_enable(s);
uart_port_lock_irqsave(port, &flags);
- /* For now, only RX enabling is supported */
- if (termios->c_cflag & CREAD)
+ uart_update_timeout(port, termios->c_cflag, baud);
+
+ rsci_serial_out(port, CCR0, ccr0_val);
+
+ ccr3_val |= CCR3_FM;
+ rsci_serial_out(port, CCR3, ccr3_val);
+
+ ccr2_val |= (cks << 20) | (brr << 8);
+ rsci_serial_out(port, CCR2, ccr2_val);
+
+ rsci_serial_out(port, CCR1, ccr1_val);
+ rsci_serial_out(port, CCR4, ccr4_val);
+
+ ctrl = rsci_serial_in(port, FCR);
+ ctrl |= (FCR_RFRST | FCR_TFRST);
+ rsci_serial_out(port, FCR, ctrl);
+
+ if (s->rx_trigger > 1)
+ rsci_scif_set_rtrg(port, s->rx_trigger);
+
+ port->status &= ~UPSTAT_AUTOCTS;
+ s->autorts = false;
+
+ if ((port->flags & UPF_HARD_FLOW) && (termios->c_cflag & CRTSCTS)) {
+ port->status |= UPSTAT_AUTOCTS;
+ s->autorts = true;
+ }
+
+ rsci_init_pins(port, termios->c_cflag);
+ rsci_serial_out(port, CFCLR, CFCLR_CLRFLAG);
+ rsci_serial_out(port, FFCLR, FFCLR_DRC);
+
+ ccr0_val |= CCR0_RE;
+ rsci_serial_out(port, CCR0, ccr0_val);
+
+ if ((termios->c_cflag & CREAD) != 0)
rsci_start_rx(port);
uart_port_unlock_irqrestore(port, flags);
sci_port_disable(s);
+
+ if (UART_ENABLE_MS(port, termios->c_cflag))
+ rsci_enable_ms(port);
}
static int rsci_txfill(struct uart_port *port)
@@ -192,13 +353,34 @@ static unsigned int rsci_tx_empty(struct uart_port *port)
static void rsci_set_mctrl(struct uart_port *port, unsigned int mctrl)
{
- /* Not supported yet */
+ if (mctrl & TIOCM_LOOP) {
+ /* Standard loopback mode */
+ rsci_serial_out(port, CCR1, rsci_serial_in(port, CCR1) | CCR1_SPLP);
+ }
}
static unsigned int rsci_get_mctrl(struct uart_port *port)
{
- /* Not supported yet */
- return 0;
+ struct sci_port *s = to_sci_port(port);
+ struct mctrl_gpios *gpios = s->gpios;
+ unsigned int mctrl = 0;
+
+ mctrl_gpio_get(gpios, &mctrl);
+
+ /*
+ * CTS/RTS is handled in hardware when supported, while nothing
+ * else is wired up.
+ */
+ if (!mctrl_gpio_to_gpiod(gpios, UART_GPIO_CTS))
+ mctrl |= TIOCM_CTS;
+
+ if (!mctrl_gpio_to_gpiod(gpios, UART_GPIO_DSR))
+ mctrl |= TIOCM_DSR;
+
+ if (!mctrl_gpio_to_gpiod(gpios, UART_GPIO_DCD))
+ mctrl |= TIOCM_CAR;
+
+ return mctrl;
}
static void rsci_clear_CFC(struct uart_port *port, unsigned int mask)
@@ -328,7 +510,8 @@ static void rsci_receive_chars(struct uart_port *port)
continue;
}
- /* Store data and status.
+ /*
+ * Store data and status.
* Non FIFO mode is not supported
*/
if (rdat & RDR_FFER) {
@@ -362,6 +545,28 @@ static void rsci_receive_chars(struct uart_port *port)
}
}
+static void rsci_break_ctl(struct uart_port *port, int break_state)
+{
+ unsigned short ccr0_val, ccr1_val;
+ unsigned long flags;
+
+ uart_port_lock_irqsave(port, &flags);
+ ccr1_val = rsci_serial_in(port, CCR1);
+ ccr0_val = rsci_serial_in(port, CCR0);
+
+ if (break_state == -1) {
+ ccr1_val = (ccr1_val | CCR1_SPB2IO) & ~CCR1_SPB2DT;
+ ccr0_val &= ~CCR0_TE;
+ } else {
+ ccr1_val = (ccr1_val | CCR1_SPB2DT) & ~CCR1_SPB2IO;
+ ccr0_val |= CCR0_TE;
+ }
+
+ rsci_serial_out(port, CCR1, ccr1_val);
+ rsci_serial_out(port, CCR0, ccr0_val);
+ uart_port_unlock_irqrestore(port, flags);
+}
+
static void rsci_poll_put_char(struct uart_port *port, unsigned char c)
{
u32 status;
@@ -383,12 +588,21 @@ static void rsci_poll_put_char(struct uart_port *port, unsigned char c)
static void rsci_prepare_console_write(struct uart_port *port, u32 ctrl)
{
struct sci_port *s = to_sci_port(port);
- u32 ctrl_temp =
- s->params->param_bits->rxtx_enable | CCR0_TIE |
- s->hscif_tot;
+ u32 ctrl_temp = s->params->param_bits->rxtx_enable;
+
+ if (s->type == RSCI_PORT_SCIF16)
+ ctrl_temp |= CCR0_TIE | s->hscif_tot;
+
rsci_serial_out(port, CCR0, ctrl_temp);
}
+static void rsci_finish_console_write(struct uart_port *port, u32 ctrl)
+{
+ /* First set TE = 0 and then restore the CCR0 value */
+ rsci_serial_out(port, CCR0, ctrl & ~CCR0_TE);
+ rsci_serial_out(port, CCR0, ctrl);
+}
+
static const char *rsci_type(struct uart_port *port)
{
return "rsci";
@@ -418,6 +632,17 @@ static const struct sci_port_params_bits rsci_port_param_bits = {
.poll_sent_bits = CSR_TDRE | CSR_TEND,
};
+static const struct sci_port_params rsci_rzg3e_port_params = {
+ .fifosize = 32,
+ .overrun_reg = CSR,
+ .overrun_mask = CSR_ORER,
+ .sampling_rate_mask = SCI_SR(32),
+ .error_mask = RSCI_DEFAULT_ERROR_MASK,
+ .error_clear = RSCI_ERROR_CLEAR,
+ .param_bits = &rsci_port_param_bits,
+ .common_regs = &rsci_common_regs,
+};
+
static const struct sci_port_params rsci_rzt2h_port_params = {
.fifosize = 16,
.overrun_reg = CSR,
@@ -436,6 +661,8 @@ static const struct uart_ops rsci_uart_ops = {
.start_tx = rsci_start_tx,
.stop_tx = rsci_stop_tx,
.stop_rx = rsci_stop_rx,
+ .enable_ms = rsci_enable_ms,
+ .break_ctl = rsci_break_ctl,
.startup = sci_startup,
.shutdown = sci_shutdown,
.set_termios = rsci_set_termios,
@@ -455,11 +682,19 @@ static const struct sci_port_ops rsci_port_ops = {
.receive_chars = rsci_receive_chars,
.poll_put_char = rsci_poll_put_char,
.prepare_console_write = rsci_prepare_console_write,
+ .finish_console_write = rsci_finish_console_write,
.suspend_regs_size = rsci_suspend_regs_size,
.set_rtrg = rsci_scif_set_rtrg,
.shutdown_complete = rsci_shutdown_complete,
};
+struct sci_of_data of_rsci_rzg3e_data = {
+ .type = RSCI_PORT_SCIF32,
+ .ops = &rsci_port_ops,
+ .uart_ops = &rsci_uart_ops,
+ .params = &rsci_rzg3e_port_params,
+};
+
struct sci_of_data of_rsci_rzt2h_data = {
.type = RSCI_PORT_SCIF16,
.ops = &rsci_port_ops,
@@ -469,12 +704,19 @@ struct sci_of_data of_rsci_rzt2h_data = {
#ifdef CONFIG_SERIAL_SH_SCI_EARLYCON
+static int __init rsci_rzg3e_early_console_setup(struct earlycon_device *device,
+ const char *opt)
+{
+ return scix_early_console_setup(device, &of_rsci_rzg3e_data);
+}
+
static int __init rsci_rzt2h_early_console_setup(struct earlycon_device *device,
const char *opt)
{
return scix_early_console_setup(device, &of_rsci_rzt2h_data);
}
+OF_EARLYCON_DECLARE(rsci, "renesas,r9a09g047-rsci", rsci_rzg3e_early_console_setup);
OF_EARLYCON_DECLARE(rsci, "renesas,r9a09g077-rsci", rsci_rzt2h_early_console_setup);
#endif /* CONFIG_SERIAL_SH_SCI_EARLYCON */
diff --git a/drivers/tty/serial/rsci.h b/drivers/tty/serial/rsci.h
index 9547148e8bd1..2aa2ba3973ee 100644
--- a/drivers/tty/serial/rsci.h
+++ b/drivers/tty/serial/rsci.h
@@ -5,6 +5,7 @@
#include "sh-sci-common.h"
+extern struct sci_of_data of_rsci_rzg3e_data;
extern struct sci_of_data of_rsci_rzt2h_data;
#endif /* __RSCI_H__ */
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 29e14e224d02..69460aac7c7e 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -3330,6 +3330,7 @@ static int sci_init_single(struct platform_device *dev,
sci_port->rx_trigger = 64;
break;
case PORT_SCIFA:
+ case RSCI_PORT_SCIF32:
sci_port->rx_trigger = 32;
break;
case PORT_SCIF:
@@ -3663,6 +3664,10 @@ static const struct of_device_id of_sci_match[] __maybe_unused = {
.data = &of_sci_scif_rzv2h,
},
#ifdef CONFIG_SERIAL_RSCI
+ {
+ .compatible = "renesas,r9a09g047-rsci",
+ .data = &of_rsci_rzg3e_data,
+ },
{
.compatible = "renesas,r9a09g077-rsci",
.data = &of_rsci_rzt2h_data,
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 25/27] arm64: dts: renesas: r9a09g047: Add RSCI nodes
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (23 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 24/27] serial: sh-sci: Add support for RZ/G3E RSCI Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 26/27] arm64: dts: renesas: renesas-smarc2: Move aliases to board DTS Biju
` (3 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit ef601dbb5b80a0240dc479ca0aa5fbd746f23ca7 ]
Add RSCI nodes to RZ/G3E ("R9A09G047") SoC DTSI.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://patch.msgid.link/20251129185203.380002-2-biju.das.jz@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
arch/arm64/boot/dts/renesas/r9a09g047.dtsi | 220 +++++++++++++++++++++
1 file changed, 220 insertions(+)
diff --git a/arch/arm64/boot/dts/renesas/r9a09g047.dtsi b/arch/arm64/boot/dts/renesas/r9a09g047.dtsi
index bd15725f2c22..addcc9ed8661 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g047.dtsi
+++ b/arch/arm64/boot/dts/renesas/r9a09g047.dtsi
@@ -591,6 +591,226 @@ channel5 {
};
};
+ rsci0: serial@12800c00 {
+ compatible = "renesas,r9a09g047-rsci";
+ reg = <0 0x12800c00 0 0x400>;
+ interrupts = <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 115 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 116 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 118 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "eri", "rxi", "txi", "tei",
+ "aed", "bfd";
+ clocks = <&cpg CPG_MOD 0x5d>, <&cpg CPG_MOD 0x5e>,
+ <&cpg CPG_MOD 0x61>, <&cpg CPG_MOD 0x60>,
+ <&cpg CPG_MOD 0x5f>;
+ clock-names = "pclk", "tclk", "tclk_div4",
+ "tclk_div16", "tclk_div64";
+ power-domains = <&cpg>;
+ resets = <&cpg 0x81>, <&cpg 0x82>;
+ reset-names = "presetn", "tresetn";
+ status = "disabled";
+ };
+
+ rsci1: serial@12801000 {
+ compatible = "renesas,r9a09g047-rsci";
+ reg = <0 0x12801000 0 0x400>;
+ interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 121 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 122 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 124 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "eri", "rxi", "txi", "tei",
+ "aed", "bfd";
+ clocks = <&cpg CPG_MOD 0x62>, <&cpg CPG_MOD 0x63>,
+ <&cpg CPG_MOD 0x66>, <&cpg CPG_MOD 0x65>,
+ <&cpg CPG_MOD 0x64>;
+ clock-names = "pclk", "tclk", "tclk_div4",
+ "tclk_div16", "tclk_div64";
+ power-domains = <&cpg>;
+ resets = <&cpg 0x83>, <&cpg 0x84>;
+ reset-names = "presetn", "tresetn";
+ status = "disabled";
+ };
+
+ rsci2: serial@12801400 {
+ compatible = "renesas,r9a09g047-rsci";
+ reg = <0 0x12801400 0 0x400>;
+ interrupts = <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 127 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 128 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 129 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 130 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "eri", "rxi", "txi", "tei",
+ "aed", "bfd";
+ clocks = <&cpg CPG_MOD 0x67>, <&cpg CPG_MOD 0x68>,
+ <&cpg CPG_MOD 0x6b>, <&cpg CPG_MOD 0x6a>,
+ <&cpg CPG_MOD 0x69>;
+ clock-names = "pclk", "tclk", "tclk_div4",
+ "tclk_div16", "tclk_div64";
+ power-domains = <&cpg>;
+ resets = <&cpg 0x85>, <&cpg 0x86>;
+ reset-names = "presetn", "tresetn";
+ status = "disabled";
+ };
+
+ rsci3: serial@12801800 {
+ compatible = "renesas,r9a09g047-rsci";
+ reg = <0 0x12801800 0 0x400>;
+ interrupts = <GIC_SPI 132 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 133 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 134 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 135 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 136 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 137 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "eri", "rxi", "txi", "tei",
+ "aed", "bfd";
+ clocks = <&cpg CPG_MOD 0x6c>, <&cpg CPG_MOD 0x6d>,
+ <&cpg CPG_MOD 0x70>, <&cpg CPG_MOD 0x6f>,
+ <&cpg CPG_MOD 0x6e>;
+ clock-names = "pclk", "tclk", "tclk_div4",
+ "tclk_div16", "tclk_div64";
+ power-domains = <&cpg>;
+ resets = <&cpg 0x87>, <&cpg 0x88>;
+ reset-names = "presetn", "tresetn";
+ status = "disabled";
+ };
+
+ rsci4: serial@12801c00 {
+ compatible = "renesas,r9a09g047-rsci";
+ reg = <0 0x12801c00 0 0x400>;
+ interrupts = <GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 139 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 140 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 142 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "eri", "rxi", "txi", "tei",
+ "aed", "bfd";
+ clocks = <&cpg CPG_MOD 0x71>, <&cpg CPG_MOD 0x72>,
+ <&cpg CPG_MOD 0x75>, <&cpg CPG_MOD 0x74>,
+ <&cpg CPG_MOD 0x73>;
+ clock-names = "pclk", "tclk", "tclk_div4",
+ "tclk_div16", "tclk_div64";
+ power-domains = <&cpg>;
+ resets = <&cpg 0x89>, <&cpg 0x8a>;
+ reset-names = "presetn", "tresetn";
+ status = "disabled";
+ };
+
+ rsci5: serial@12802000 {
+ compatible = "renesas,r9a09g047-rsci";
+ reg = <0 0x12802000 0 0x400>;
+ interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 145 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 146 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 148 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 149 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "eri", "rxi", "txi", "tei",
+ "aed", "bfd";
+ clocks = <&cpg CPG_MOD 0x76>, <&cpg CPG_MOD 0x77>,
+ <&cpg CPG_MOD 0x7a>, <&cpg CPG_MOD 0x79>,
+ <&cpg CPG_MOD 0x78>;
+ clock-names = "pclk", "tclk", "tclk_div4",
+ "tclk_div16", "tclk_div64";
+ power-domains = <&cpg>;
+ resets = <&cpg 0x8b>, <&cpg 0x8c>;
+ reset-names = "presetn", "tresetn";
+ status = "disabled";
+ };
+
+ rsci6: serial@12802400 {
+ compatible = "renesas,r9a09g047-rsci";
+ reg = <0 0x12802400 0 0x400>;
+ interrupts = <GIC_SPI 150 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 151 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 152 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 154 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 155 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "eri", "rxi", "txi", "tei",
+ "aed", "bfd";
+ clocks = <&cpg CPG_MOD 0x7b>, <&cpg CPG_MOD 0x7c>,
+ <&cpg CPG_MOD 0x7f>, <&cpg CPG_MOD 0x7e>,
+ <&cpg CPG_MOD 0x7d>;
+ clock-names = "pclk", "tclk", "tclk_div4",
+ "tclk_div16", "tclk_div64";
+ power-domains = <&cpg>;
+ resets = <&cpg 0x8d>, <&cpg 0x8e>;
+ reset-names = "presetn", "tresetn";
+ status = "disabled";
+ };
+
+ rsci7: serial@12802800 {
+ compatible = "renesas,r9a09g047-rsci";
+ reg = <0 0x12802800 0 0x400>;
+ interrupts = <GIC_SPI 156 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 157 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 158 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 160 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "eri", "rxi", "txi", "tei",
+ "aed", "bfd";
+ clocks = <&cpg CPG_MOD 0x80>, <&cpg CPG_MOD 0x81>,
+ <&cpg CPG_MOD 0x84>, <&cpg CPG_MOD 0x83>,
+ <&cpg CPG_MOD 0x82>;
+ clock-names = "pclk", "tclk", "tclk_div4",
+ "tclk_div16", "tclk_div64";
+ power-domains = <&cpg>;
+ resets = <&cpg 0x8f>, <&cpg 0x90>;
+ reset-names = "presetn", "tresetn";
+ status = "disabled";
+ };
+
+ rsci8: serial@12802c00 {
+ compatible = "renesas,r9a09g047-rsci";
+ reg = <0 0x12802c00 0 0x400>;
+ interrupts = <GIC_SPI 162 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 163 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 164 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 165 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 166 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "eri", "rxi", "txi", "tei",
+ "aed", "bfd";
+ clocks = <&cpg CPG_MOD 0x85>, <&cpg CPG_MOD 0x86>,
+ <&cpg CPG_MOD 0x89>, <&cpg CPG_MOD 0x88>,
+ <&cpg CPG_MOD 0x87>;
+ clock-names = "pclk", "tclk", "tclk_div4",
+ "tclk_div16", "tclk_div64";
+ power-domains = <&cpg>;
+ resets = <&cpg 0x91>, <&cpg 0x92>;
+ reset-names = "presetn", "tresetn";
+ status = "disabled";
+ };
+
+ rsci9: serial@12803000 {
+ compatible = "renesas,r9a09g047-rsci";
+ reg = <0 0x12803000 0 0x400>;
+ interrupts = <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 169 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 170 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 171 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 172 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "eri", "rxi", "txi", "tei",
+ "aed", "bfd";
+ clocks = <&cpg CPG_MOD 0x8a>, <&cpg CPG_MOD 0x8b>,
+ <&cpg CPG_MOD 0x8e>, <&cpg CPG_MOD 0x8d>,
+ <&cpg CPG_MOD 0x8c>;
+ clock-names = "pclk", "tclk", "tclk_div4",
+ "tclk_div16", "tclk_div64";
+ power-domains = <&cpg>;
+ resets = <&cpg 0x93>, <&cpg 0x94>;
+ reset-names = "presetn", "tresetn";
+ status = "disabled";
+ };
+
wdt1: watchdog@14400000 {
compatible = "renesas,r9a09g047-wdt", "renesas,r9a09g057-wdt";
reg = <0 0x14400000 0 0x400>;
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 26/27] arm64: dts: renesas: renesas-smarc2: Move aliases to board DTS
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (24 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 25/27] arm64: dts: renesas: r9a09g047: Add RSCI nodes Biju
@ 2026-03-11 10:04 ` Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 27/27] arm64: dts: renesas: r9a09g047e57-smarc: Enable rsci{2,4,9} nodes Biju
` (2 subsequent siblings)
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit ccf2044987b41dc589de6a86b35d3a4f8ea14762 ]
SMARC2 board dtsi is common for multiple SoCs. So Move aliases
to board DTS as SoC may have different IPs for a given alias.
eg: RZ/G3S does not have RSCI interface.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20251129185203.380002-3-biju.das.jz@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts | 6 ++++++
arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi | 6 ------
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts b/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
index ed6fcdc337a0..a612c9784f1e 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
+++ b/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
@@ -35,6 +35,12 @@ / {
compatible = "renesas,smarc2-evk", "renesas,rzg3e-smarcm",
"renesas,r9a09g047e57", "renesas,r9a09g047";
+ aliases {
+ i2c0 = &i2c0;
+ serial3 = &scif0;
+ mmc1 = &sdhi1;
+ };
+
vqmmc_sd1_pvdd: regulator-vqmmc-sd1-pvdd {
compatible = "regulator-gpio";
regulator-name = "SD1_PVDD";
diff --git a/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi b/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
index 58561da3007a..a296c2c1c7ab 100644
--- a/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
+++ b/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
@@ -37,12 +37,6 @@ chosen {
stdout-path = "serial3:115200n8";
};
- aliases {
- i2c0 = &i2c0;
- serial3 = &scif0;
- mmc1 = &sdhi1;
- };
-
can_transceiver0: can-phy0 {
compatible = "ti,tcan1042";
#phy-cells = <0>;
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 6.12.y-cip v2 27/27] arm64: dts: renesas: r9a09g047e57-smarc: Enable rsci{2,4,9} nodes
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (25 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 26/27] arm64: dts: renesas: renesas-smarc2: Move aliases to board DTS Biju
@ 2026-03-11 10:04 ` Biju
2026-03-13 10:40 ` [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Pavel Machek
2026-03-18 9:53 ` Pavel Machek
28 siblings, 0 replies; 32+ messages in thread
From: Biju @ 2026-03-11 10:04 UTC (permalink / raw)
To: cip-dev, Nobuhiro Iwamatsu, Pavel Machek; +Cc: Biju Das, Lad Prabhakar
From: Biju Das <biju.das.jz@bp.renesas.com>
[ Upstream commit 835666e7403c3ddc6f3122888d975464f8272efe ]
Enable device rsci{2,4,9} nodes for the RZ/G3E SMARC EVK.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://patch.msgid.link/20251129185203.380002-4-biju.das.jz@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
.../boot/dts/renesas/r9a09g047e57-smarc.dts | 58 +++++++++++++++++++
.../boot/dts/renesas/renesas-smarc2.dtsi | 7 +++
.../boot/dts/renesas/rzg3e-smarc-som.dtsi | 4 ++
3 files changed, 69 insertions(+)
diff --git a/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts b/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
index a612c9784f1e..342b885006e9 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
+++ b/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
@@ -12,6 +12,8 @@
#define SW_GPIO9_CAN1_STB 0
#define SW_LCD_EN 0
#define SW_PDM_EN 0
+#define SW_SER0_PMOD 1
+#define SW_SER2_EN 1
#define SW_SD0_DEV_SEL 0
#define SW_SDIO_M2E 0
@@ -37,6 +39,9 @@ / {
aliases {
i2c0 = &i2c0;
+ serial0 = &rsci4;
+ serial1 = &rsci9;
+ serial2 = &rsci2;
serial3 = &scif0;
mmc1 = &sdhi1;
};
@@ -140,6 +145,28 @@ nmi_pins: nmi {
input-schmitt-enable;
};
+ rsci2_pins: rsci2 {
+ pinmux = <RZG3E_PORT_PINMUX(1, 0, 1)>, /* RXD2 */
+ <RZG3E_PORT_PINMUX(1, 1, 1)>, /* TXD2 */
+ <RZG3E_PORT_PINMUX(1, 2, 6)>, /* CTS2N */
+ <RZG3E_PORT_PINMUX(1, 3, 1)>; /* RTS2N */
+ bias-pull-up;
+ };
+
+ rsci4_pins: rsci4 {
+ pinmux = <RZG3E_PORT_PINMUX(7, 6, 5)>, /* RXD4 */
+ <RZG3E_PORT_PINMUX(7, 7, 5)>, /* TXD4 */
+ <RZG3E_PORT_PINMUX(8, 0, 6)>, /* CTS4N */
+ <RZG3E_PORT_PINMUX(8, 1, 5)>; /* RTS4N */
+ bias-pull-up;
+ };
+
+ rsci9_pins: rsci9 {
+ pinmux = <RZG3E_PORT_PINMUX(8, 2, 5)>, /* RXD9 */
+ <RZG3E_PORT_PINMUX(8, 3, 5)>; /* TXD9 */
+ bias-pull-up;
+ };
+
scif_pins: scif {
pins = "SCIF_TXD", "SCIF_RXD";
renesas,output-impedance = <1>;
@@ -171,6 +198,37 @@ sd1-data {
};
};
+#if SW_SER0_PMOD && SW_SER2_EN
+&rsci2 {
+ pinctrl-0 = <&rsci2_pins>;
+ pinctrl-names = "default";
+
+ uart-has-rtscts;
+
+ status = "okay";
+};
+#endif
+
+#if (!SW_LCD_EN) && (SW_SER0_PMOD)
+&rsci4 {
+ pinctrl-0 = <&rsci4_pins>;
+ pinctrl-names = "default";
+
+ uart-has-rtscts;
+
+ status = "okay";
+};
+#endif
+
+#if (!SW_LCD_EN)
+&rsci9 {
+ pinctrl-0 = <&rsci9_pins>;
+ pinctrl-names = "default";
+
+ status = "okay";
+};
+#endif
+
&scif0 {
pinctrl-0 = <&scif_pins>;
pinctrl-names = "default";
diff --git a/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi b/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
index a296c2c1c7ab..69c0101ff7f5 100644
--- a/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
+++ b/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
@@ -13,6 +13,13 @@
* 0 - SMARC SDIO signal is connected to uSD1
* 1 - SMARC SDIO signal is connected to M.2 Key E connector
*
+ * Please set the switch position SW_OPT_MUX.4 on the carrier board and the
+ * corresponding macro SW_SER0_PMOD on the board DTS:
+ *
+ * SW_SER0_PMOD:
+ * 0 - SER0 signals connect to M.2 Key-E, SER2 signals are unconnected
+ * 1 - SER0 signals connect to PMOD, SER2 signals connect to M.2 Key-E
+ *
* Please set the switch position SW_GPIO_CAN_PMOD on the carrier board and the
* corresponding macro SW_GPIO8_CAN0_STB/SW_GPIO8_CAN0_STB on the board DTS:
*
diff --git a/arch/arm64/boot/dts/renesas/rzg3e-smarc-som.dtsi b/arch/arm64/boot/dts/renesas/rzg3e-smarc-som.dtsi
index f05b9fec05f0..3b571c096752 100644
--- a/arch/arm64/boot/dts/renesas/rzg3e-smarc-som.dtsi
+++ b/arch/arm64/boot/dts/renesas/rzg3e-smarc-som.dtsi
@@ -13,6 +13,10 @@
* 0 - SD0 is connected to eMMC (default)
* 1 - SD0 is connected to uSD0 card
*
+ * Switch position SYS.4, Macro SW_SER2_EN:
+ * 0 - Select Module DSI connector(GPIO)
+ * 1 - Select SER2
+ *
* Switch position SYS.5, Macro SW_LCD_EN:
* 0 - Select Misc. Signals routing
* 1 - Select LCD
--
2.43.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* Re: [PATCH 6.12.y-cip v2 24/27] serial: sh-sci: Add support for RZ/G3E RSCI
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 24/27] serial: sh-sci: Add support for RZ/G3E RSCI Biju
@ 2026-03-13 10:39 ` Pavel Machek
2026-03-13 13:22 ` Biju Das
0 siblings, 1 reply; 32+ messages in thread
From: Pavel Machek @ 2026-03-13 10:39 UTC (permalink / raw)
To: Biju; +Cc: cip-dev, Nobuhiro Iwamatsu, Pavel Machek, Biju Das, Lad Prabhakar
[-- Attachment #1: Type: text/plain, Size: 864 bytes --]
Hi!
> Add support for RZ/G3E RSCI. RSCI IP found on the RZ/G3E SoC is similar
> to RZ/T2H, but it has a 32-stage FIFO. It has 6 clocks(5 module clocks
> + 1 external clock) instead of 3 clocks(2 module clocks + 1 external
> clock) on T2H, has 6 irqs compared to 4 on RZ/T2H and has multiple resets.
> Add support for the hardware flow control.
> + baud = uart_get_baud_rate(port, termios, old, 0, max_freq);
> + if (!baud)
> + goto done;
> +
> + /* Divided Functional Clock using standard Bit Rate Register */
> + err = sci_scbrr_calc(s, baud, &brr1, &srr1, &cks1);
> + if (abs(err) < abs(min_err)) {
> + best_clk = SCI_FCK;
> + ccr0_val = 0;
> + min_err = err;
> + brr = brr1;
> + cks = cks1;
> + }
> +
> +done:
> + if (best_clk >= 0)
I'm not sure if "done" is best label here, and probably avoiding the
goto would be best.
Best regards,
Pavel
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (26 preceding siblings ...)
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 27/27] arm64: dts: renesas: r9a09g047e57-smarc: Enable rsci{2,4,9} nodes Biju
@ 2026-03-13 10:40 ` Pavel Machek
2026-03-18 9:53 ` Pavel Machek
28 siblings, 0 replies; 32+ messages in thread
From: Pavel Machek @ 2026-03-13 10:40 UTC (permalink / raw)
To: Biju; +Cc: cip-dev, Nobuhiro Iwamatsu, Pavel Machek, Biju Das, Lad Prabhakar
[-- Attachment #1: Type: text/plain, Size: 711 bytes --]
Hi!
> Add RZ/G3E RSCI support for FIFO and non-FIFO mode. RSCI IP found on
> RZ/G3E SoC is similar to one on RZ/T2H, but has 32-stage fifo. RZ/G3E has
> 6 clocks (5 module clocks + 1 external clock) compared to 3 clocks
> (2 module clocks + 1 external clock) on RZ/T2H, and it has multiple
> resets. It has 6 irqs compared to 4 on RZ/T2H. Add support for the
> hardware flow control.
I had some minor comments here, but those should be fixed in mainline,
first, so they should not block the merge.
Reviewed-by: Pavel Machek <pavel@nabladev.com>
I can apply the series if it passes testing and there are no other
comments.
Best regards,
Pavel
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
* RE: [PATCH 6.12.y-cip v2 24/27] serial: sh-sci: Add support for RZ/G3E RSCI
2026-03-13 10:39 ` Pavel Machek
@ 2026-03-13 13:22 ` Biju Das
0 siblings, 0 replies; 32+ messages in thread
From: Biju Das @ 2026-03-13 13:22 UTC (permalink / raw)
To: Pavel Machek, biju.das.au
Cc: cip-dev@lists.cip-project.org, Nobuhiro Iwamatsu,
Prabhakar Mahadev Lad
Hi Pavel,
Thanks for the feedback.
> -----Original Message-----
> From: Pavel Machek <pavel@nabladev.com>
> Sent: 13 March 2026 10:40
> Subject: Re: [PATCH 6.12.y-cip v2 24/27] serial: sh-sci: Add support for RZ/G3E RSCI
>
> Hi!
>
> > Add support for RZ/G3E RSCI. RSCI IP found on the RZ/G3E SoC is
> > similar to RZ/T2H, but it has a 32-stage FIFO. It has 6 clocks(5
> > module clocks
> > + 1 external clock) instead of 3 clocks(2 module clocks + 1 external
> > clock) on T2H, has 6 irqs compared to 4 on RZ/T2H and has multiple resets.
> > Add support for the hardware flow control.
>
>
> > + baud = uart_get_baud_rate(port, termios, old, 0, max_freq);
> > + if (!baud)
> > + goto done;
> > +
> > + /* Divided Functional Clock using standard Bit Rate Register */
> > + err = sci_scbrr_calc(s, baud, &brr1, &srr1, &cks1);
> > + if (abs(err) < abs(min_err)) {
> > + best_clk = SCI_FCK;
> > + ccr0_val = 0;
> > + min_err = err;
> > + brr = brr1;
> > + cks = cks1;
> > + }
> > +
> > +done:
> > + if (best_clk >= 0)
>
> I'm not sure if "done" is best label here, and probably avoiding the goto would be best.
I agree. I will send a patch to avoid goto in mainline.
Cheers,
Biju
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
` (27 preceding siblings ...)
2026-03-13 10:40 ` [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Pavel Machek
@ 2026-03-18 9:53 ` Pavel Machek
28 siblings, 0 replies; 32+ messages in thread
From: Pavel Machek @ 2026-03-18 9:53 UTC (permalink / raw)
To: Biju; +Cc: cip-dev, Nobuhiro Iwamatsu, Pavel Machek, Biju Das, Lad Prabhakar
[-- Attachment #1: Type: text/plain, Size: 435 bytes --]
Hi!
> Add RZ/G3E RSCI support for FIFO and non-FIFO mode. RSCI IP found on
> RZ/G3E SoC is similar to one on RZ/T2H, but has 32-stage fifo. RZ/G3E has
> 6 clocks (5 module clocks + 1 external clock) compared to 3 clocks
> (2 module clocks + 1 external clock) on RZ/T2H, and it has multiple
> resets. It has 6 irqs compared to 4 on RZ/T2H. Add support for the
> hardware flow control.
Thank you, applied.
Best regards,
Pavel
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
end of thread, other threads:[~2026-03-18 9:53 UTC | newest]
Thread overview: 32+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-11 10:04 [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 01/27] dt-bindings: serial: rsci: Drop "uart-has-rtscts: false" Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 02/27] dt-bindings: serial: renesas,rsci: Document RZ/G3E support Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 03/27] clk: renesas: r9a09g047: Add RSCI clocks/resets Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 04/27] serial: sh-sci: Convert to DEFINE_SIMPLE_DEV_PM_OPS() Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 05/27] tty: serial: sh-sci: fix RSCI FIFO overrun handling Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 06/27] serial: sh-sci: Sort include files alphabetically Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 07/27] serial: sh-sci: Merge sh-sci.h into sh-sci.c Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 08/27] serial: sh-sci: Fix deadlock during RSCI FIFO overrun error Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 09/27] serial: sh-sci: Update rx_trigger size for RZ/T2H RSCI Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 10/27] serial: rsci: Add set_rtrg() callback Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 11/27] serial: sh-sci: Drop checking port type for device file{create, remove} Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 12/27] serial: rsci: Drop rsci_clear_SCxSR() Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 13/27] serial: sh-sci: Drop extra lines Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 14/27] serial: rsci: Drop unused macro DCR Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 15/27] serial: rsci: Drop unused TDR register Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 16/27] serial: sh-sci: Use devm_reset_control_array_get_exclusive() Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 17/27] serial: sh-sci: Add sci_is_rsci_type() Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 18/27] serial: sh-sci: Rename port SCI_PORT_RSCI->RSCI_PORT_SCIF16 Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 19/27] serial: sh-sci: Add RSCI_PORT_SCIF32 port ID Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 20/27] serial: sh-sci: Add support for RZ/G3E RSCI clks Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 21/27] serial: sh-sci: Make sci_scbrr_calc() public Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 22/27] serial: sh-sci: Add finish_console_write() callback Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 23/27] serial: rsci: Rename early_console data, port_params and callback() names Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 24/27] serial: sh-sci: Add support for RZ/G3E RSCI Biju
2026-03-13 10:39 ` Pavel Machek
2026-03-13 13:22 ` Biju Das
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 25/27] arm64: dts: renesas: r9a09g047: Add RSCI nodes Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 26/27] arm64: dts: renesas: renesas-smarc2: Move aliases to board DTS Biju
2026-03-11 10:04 ` [PATCH 6.12.y-cip v2 27/27] arm64: dts: renesas: r9a09g047e57-smarc: Enable rsci{2,4,9} nodes Biju
2026-03-13 10:40 ` [PATCH 6.12.y-cip v2 00/27] Add RZ/G3E RSCI support Pavel Machek
2026-03-18 9:53 ` Pavel Machek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox