devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 00/13] Add RZ/G3E RSCI support
@ 2025-11-14 10:51 Biju
  2025-11-14 10:51 ` [PATCH v3 01/13] dt-bindings: serial: renesas,rsci: Document RZ/G3E support Biju
                   ` (12 more replies)
  0 siblings, 13 replies; 39+ messages in thread
From: Biju @ 2025-11-14 10:51 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Geert Uytterhoeven, Magnus Damm
  Cc: Biju Das, Wolfram Sang, Lad Prabhakar, linux-kernel, linux-serial,
	devicetree, linux-renesas-soc, Biju Das

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. Add support for the hardware flow control.

This patch series depend upon [1]
[1] https://lore.kernel.org/all/20251114101350.106699-1-biju.das.jz@bp.renesas.com/

v2->v3:
 * Dropped 1st and 3rd items from clk-names and added minItems for the
   range for the binding patch.
 * Added minItems for clk and clk-names for RZ/T2H as the range is 2-3
 * Added maxItems for clk and clk-names for RZ/G3E as the range is 5-6
 * Retained the tag as it is trivial change.
 * Updated dev_err_probe() in sci_init_clocks() as it fits in 100-column
   limit.
 * Dropped cpu_relax() from rsci_finish_console_write() and added a
   comment.
 * Added sci_is_rsci_fifo_type() helper for reuse in probe() and remove().
v1->v2:
 * Updated commit message for patch#1,#3,#9
 * Added resets:false for non RZ/G3E SoCs in bindings.
 * Increased line limit for error messages to 100-column limit for patch#3
 * Updated multiline comment to fit into single line.
 * Updated set_termios() for getting baud_rate()

Biju Das (13):
  dt-bindings: serial: renesas,rsci: Document RZ/G3E support
  serial: rsci: Drop rsci_clear_CFC()
  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 RSCI_PORT_{SCI,SCIF} port IDs
  serial: sh-sci: Add sci_is_rsci_type()
  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: sh-sci: Add support for RZ/G3E RSCI SCIF
  serial: sh-sci: Add support for RZ/G3E RSCI SCI

 .../bindings/serial/renesas,rsci.yaml         |  85 +++-
 drivers/tty/serial/rsci.c                     | 412 +++++++++++++++---
 drivers/tty/serial/rsci.h                     |   2 +
 drivers/tty/serial/sh-sci-common.h            |   9 +
 drivers/tty/serial/sh-sci.c                   |  72 ++-
 5 files changed, 496 insertions(+), 84 deletions(-)

-- 
2.43.0


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

* [PATCH v3 01/13] dt-bindings: serial: renesas,rsci: Document RZ/G3E support
  2025-11-14 10:51 [PATCH v3 00/13] Add RZ/G3E RSCI support Biju
@ 2025-11-14 10:51 ` Biju
  2025-11-21 16:28   ` Geert Uytterhoeven
  2025-11-14 10:51 ` [PATCH v3 02/13] serial: rsci: Drop rsci_clear_CFC() Biju
                   ` (11 subsequent siblings)
  12 siblings, 1 reply; 39+ messages in thread
From: Biju @ 2025-11-14 10:51 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Geert Uytterhoeven, Magnus Damm
  Cc: Biju Das, Wolfram Sang, Lad Prabhakar, linux-kernel, linux-serial,
	devicetree, linux-renesas-soc, Biju Das, Conor Dooley

From: Biju Das <biju.das.jz@bp.renesas.com>

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.

Acked-by: Conor Dooley <conor.dooley@microchip.com>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v2->v3:
 * Dropped 1st and 3rd items from clk-names and added minItems for the
   range.
 * Added minItems for clk and clk-names for RZ/T2H as the range is 2-3
 * Added maxItems for clk and clk-names for RZ/G3E as the range is 5-6
 * Retained the tag as it is trivial change.
v1->v2:
 * Updated commit message
 * Added resets:false for non RZ/G3E SoCs.
---
 .../bindings/serial/renesas,rsci.yaml         | 85 ++++++++++++++++---
 1 file changed, 74 insertions(+), 11 deletions(-)

diff --git a/Documentation/devicetree/bindings/serial/renesas,rsci.yaml b/Documentation/devicetree/bindings/serial/renesas,rsci.yaml
index 6b1f827a335b..1a35d6fa67b1 100644
--- a/Documentation/devicetree/bindings/serial/renesas,rsci.yaml
+++ b/Documentation/devicetree/bindings/serial/renesas,rsci.yaml
@@ -10,17 +10,16 @@ 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 non FIFO mode
+          - renesas,r9a09g047-rscif # RZ/G3E FIFO mode
+          - renesas,r9a09g077-rsci # RZ/T2H
 
       - items:
+          - const: renesas,r9a09g087-rsci # RZ/N2H
           - const: renesas,r9a09g077-rsci # RZ/T2H
 
   reg:
@@ -42,14 +41,36 @@ properties:
 
   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: bus
+          - const: tclk
+          - const: tclk_div64
+          - const: tclk_div16
+          - const: tclk_div4
+          - const: sck # optional external clock input
+
+        minItems: 5
+
+  resets:
+    items:
+      - description: Input for resetting the APB clock
+      - description: Input for resetting TCLK
+
+  reset-names:
     items:
-      - const: operation
-      - const: bus
-      - const: sck # optional external clock input
+      - const: presetn
+      - const: tresetn
 
   power-domains:
     maxItems: 1
@@ -62,6 +83,48 @@ required:
   - clock-names
   - power-domains
 
+allOf:
+  - $ref: serial.yaml#
+
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: renesas,r9a09g077-rsci
+    then:
+      properties:
+        clocks:
+          minItems: 2
+          maxItems: 3
+
+        clock-names:
+          minItems: 2
+          maxItems: 3
+
+  - if:
+      properties:
+        compatible:
+          contains:
+            enum:
+              - renesas,r9a09g047-rsci
+              - renesas,r9a09g047-rscif
+    then:
+      properties:
+        clocks:
+          minItems: 5
+          maxItems: 6
+
+        clock-names:
+          minItems: 5
+          maxItems: 6
+
+      required:
+        - resets
+        - reset-names
+    else:
+      properties:
+        resets: false
+
 unevaluatedProperties: false
 
 examples:
-- 
2.43.0


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

* [PATCH v3 02/13] serial: rsci: Drop rsci_clear_CFC()
  2025-11-14 10:51 [PATCH v3 00/13] Add RZ/G3E RSCI support Biju
  2025-11-14 10:51 ` [PATCH v3 01/13] dt-bindings: serial: renesas,rsci: Document RZ/G3E support Biju
@ 2025-11-14 10:51 ` Biju
  2025-11-21 14:52   ` Geert Uytterhoeven
  2025-11-14 10:51 ` [PATCH v3 03/13] serial: sh-sci: Drop extra lines Biju
                   ` (10 subsequent siblings)
  12 siblings, 1 reply; 39+ messages in thread
From: Biju @ 2025-11-14 10:51 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Geert Uytterhoeven, Magnus Damm
  Cc: Biju Das, Wolfram Sang, Lad Prabhakar, linux-kernel, linux-serial,
	devicetree, linux-renesas-soc, Biju Das

From: Biju Das <biju.das.jz@bp.renesas.com>

Drop rsci_clear_CFC() by reusing rsci_clear_SCxSR() as the contents of
both functions are the same.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v2->v3:
 * No change.
v1->v2:
 * No change.
---
 drivers/tty/serial/rsci.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/drivers/tty/serial/rsci.c b/drivers/tty/serial/rsci.c
index b3c48dc1e07d..9681e8ef4bfb 100644
--- a/drivers/tty/serial/rsci.c
+++ b/drivers/tty/serial/rsci.c
@@ -199,11 +199,6 @@ static unsigned int rsci_get_mctrl(struct uart_port *port)
 	return 0;
 }
 
-static void rsci_clear_CFC(struct uart_port *port, unsigned int mask)
-{
-	rsci_serial_out(port, CFCLR, mask);
-}
-
 static void rsci_start_tx(struct uart_port *port)
 {
 	struct sci_port *sp = to_sci_port(port);
@@ -275,7 +270,7 @@ static void rsci_transmit_chars(struct uart_port *port)
 			break;
 		}
 
-		rsci_clear_CFC(port, CFCLR_TDREC);
+		rsci_clear_SCxSR(port, CFCLR_TDREC);
 		rsci_serial_out(port, TDR, c);
 
 		port->icount.tx++;
-- 
2.43.0


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

* [PATCH v3 03/13] serial: sh-sci: Drop extra lines
  2025-11-14 10:51 [PATCH v3 00/13] Add RZ/G3E RSCI support Biju
  2025-11-14 10:51 ` [PATCH v3 01/13] dt-bindings: serial: renesas,rsci: Document RZ/G3E support Biju
  2025-11-14 10:51 ` [PATCH v3 02/13] serial: rsci: Drop rsci_clear_CFC() Biju
@ 2025-11-14 10:51 ` Biju
  2025-11-21 14:53   ` Geert Uytterhoeven
  2025-11-14 10:51 ` [PATCH v3 04/13] serial: rsci: Drop unused macro DCR Biju
                   ` (9 subsequent siblings)
  12 siblings, 1 reply; 39+ messages in thread
From: Biju @ 2025-11-14 10:51 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Geert Uytterhoeven, Magnus Damm
  Cc: Biju Das, Wolfram Sang, Lad Prabhakar, linux-kernel, linux-serial,
	devicetree, linux-renesas-soc, Biju Das

From: Biju Das <biju.das.jz@bp.renesas.com>

Shorten the number lines in sci_init_clocks() by fitting the error
messages within an 100-character length limit.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v2->v3:
 * Updated dev_err_probe() in sci_init_clocks() as it fits in 100-column
   limit.
v1->v2:
 * Updated commit message 80-character->100-character.
 * Increased line limit for error messages to 100-column limit.
---
 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 53edbf1d8963..1065773555ba 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -3186,11 +3186,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) {
 			/*
@@ -3200,16 +3197,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] 39+ messages in thread

* [PATCH v3 04/13] serial: rsci: Drop unused macro DCR
  2025-11-14 10:51 [PATCH v3 00/13] Add RZ/G3E RSCI support Biju
                   ` (2 preceding siblings ...)
  2025-11-14 10:51 ` [PATCH v3 03/13] serial: sh-sci: Drop extra lines Biju
@ 2025-11-14 10:51 ` Biju
  2025-11-21 14:57   ` Geert Uytterhoeven
  2025-11-14 10:51 ` [PATCH v3 05/13] serial: rsci: Drop unused TDR register Biju
                   ` (8 subsequent siblings)
  12 siblings, 1 reply; 39+ messages in thread
From: Biju @ 2025-11-14 10:51 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Geert Uytterhoeven, Magnus Damm
  Cc: Biju Das, Wolfram Sang, Lad Prabhakar, linux-kernel, linux-serial,
	devicetree, linux-renesas-soc, Biju Das

From: Biju Das <biju.das.jz@bp.renesas.com>

Drop unused macro DCR and its bit definition.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v2->v3:
 * No change.
v1->v2:
 * No change.
---
 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 9681e8ef4bfb..9fa5d387d7db 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] 39+ messages in thread

* [PATCH v3 05/13] serial: rsci: Drop unused TDR register
  2025-11-14 10:51 [PATCH v3 00/13] Add RZ/G3E RSCI support Biju
                   ` (3 preceding siblings ...)
  2025-11-14 10:51 ` [PATCH v3 04/13] serial: rsci: Drop unused macro DCR Biju
@ 2025-11-14 10:51 ` Biju
  2025-11-21 15:00   ` Geert Uytterhoeven
  2025-11-14 10:51 ` [PATCH v3 06/13] serial: sh-sci: Use devm_reset_control_array_get_exclusive() Biju
                   ` (7 subsequent siblings)
  12 siblings, 1 reply; 39+ messages in thread
From: Biju @ 2025-11-14 10:51 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Geert Uytterhoeven, Magnus Damm
  Cc: Biju Das, Wolfram Sang, Lad Prabhakar, linux-kernel, linux-serial,
	devicetree, linux-renesas-soc, Biju Das

From: Biju Das <biju.das.jz@bp.renesas.com>

Drop the unused TDR register-related macros.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v2->v3:
 * No change.
v1->v2:
 * No change.
---
 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 9fa5d387d7db..9609ef73a0d4 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] 39+ messages in thread

* [PATCH v3 06/13] serial: sh-sci: Use devm_reset_control_array_get_exclusive()
  2025-11-14 10:51 [PATCH v3 00/13] Add RZ/G3E RSCI support Biju
                   ` (4 preceding siblings ...)
  2025-11-14 10:51 ` [PATCH v3 05/13] serial: rsci: Drop unused TDR register Biju
@ 2025-11-14 10:51 ` Biju
  2025-11-21 15:01   ` Geert Uytterhoeven
  2025-11-14 10:51 ` [PATCH v3 07/13] serial: sh-sci: Add RSCI_PORT_{SCI,SCIF} port IDs Biju
                   ` (6 subsequent siblings)
  12 siblings, 1 reply; 39+ messages in thread
From: Biju @ 2025-11-14 10:51 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Geert Uytterhoeven, Magnus Damm
  Cc: Biju Das, Wolfram Sang, Lad Prabhakar, linux-kernel, linux-serial,
	devicetree, linux-renesas-soc, Biju Das

From: Biju Das <biju.das.jz@bp.renesas.com>

Replace devm_*_get_exclusive()->devm_*_array_get_exclusive() to support
existing SoCs along with RZ/G3E as RZ/G3E has 2 resets.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v2->v3:
 * No change.
v1->v2:
 * No change.
---
 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 1065773555ba..78fb3b6a318b 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -3710,7 +3710,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] 39+ messages in thread

* [PATCH v3 07/13] serial: sh-sci: Add RSCI_PORT_{SCI,SCIF} port IDs
  2025-11-14 10:51 [PATCH v3 00/13] Add RZ/G3E RSCI support Biju
                   ` (5 preceding siblings ...)
  2025-11-14 10:51 ` [PATCH v3 06/13] serial: sh-sci: Use devm_reset_control_array_get_exclusive() Biju
@ 2025-11-14 10:51 ` Biju
  2025-11-21 15:14   ` Geert Uytterhoeven
  2025-11-14 10:51 ` [PATCH v3 08/13] serial: sh-sci: Add sci_is_rsci_type() Biju
                   ` (5 subsequent siblings)
  12 siblings, 1 reply; 39+ messages in thread
From: Biju @ 2025-11-14 10:51 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Geert Uytterhoeven, Magnus Damm
  Cc: Biju Das, Wolfram Sang, Lad Prabhakar, linux-kernel, linux-serial,
	devicetree, linux-renesas-soc, Biju Das

From: Biju Das <biju.das.jz@bp.renesas.com>

RZ/G3E RSCI tx/rx supports both FIFO and non-FIFO mode. It has 32-stage
FIFO. Add RSCI_PORT_SCI port ID for non-FIFO mode and RSCI_PORT_SCIF port
ID for FIFO mode. Update the rx_trigger for both these modes.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v2->v3:
 * No change.
v1->v2:
 * No change.
---
 drivers/tty/serial/sh-sci-common.h | 2 ++
 drivers/tty/serial/sh-sci.c        | 3 +++
 2 files changed, 5 insertions(+)

diff --git a/drivers/tty/serial/sh-sci-common.h b/drivers/tty/serial/sh-sci-common.h
index e3c028df14f1..77f9a67d8efc 100644
--- a/drivers/tty/serial/sh-sci-common.h
+++ b/drivers/tty/serial/sh-sci-common.h
@@ -8,6 +8,8 @@
 /* Private port IDs */
 enum SCI_PORT_TYPE {
 	SCI_PORT_RSCI = BIT(7) | 0,
+	RSCI_PORT_SCI = BIT(7) | 1,
+	RSCI_PORT_SCIF = BIT(7) | 2,
 };
 
 enum SCI_CLKS {
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 78fb3b6a318b..66ab85571230 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -3326,6 +3326,9 @@ static int sci_init_single(struct platform_device *dev,
 	case SCI_PORT_RSCI:
 		sci_port->rx_trigger = 15;
 		break;
+	case RSCI_PORT_SCIF:
+		sci_port->rx_trigger = 32;
+		break;
 	default:
 		sci_port->rx_trigger = 1;
 		break;
-- 
2.43.0


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

* [PATCH v3 08/13] serial: sh-sci: Add sci_is_rsci_type()
  2025-11-14 10:51 [PATCH v3 00/13] Add RZ/G3E RSCI support Biju
                   ` (6 preceding siblings ...)
  2025-11-14 10:51 ` [PATCH v3 07/13] serial: sh-sci: Add RSCI_PORT_{SCI,SCIF} port IDs Biju
@ 2025-11-14 10:51 ` Biju
  2025-11-21 15:17   ` Geert Uytterhoeven
  2025-11-14 10:51 ` [PATCH v3 09/13] serial: sh-sci: Add support for RZ/G3E RSCI clks Biju
                   ` (4 subsequent siblings)
  12 siblings, 1 reply; 39+ messages in thread
From: Biju @ 2025-11-14 10:51 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Geert Uytterhoeven, Magnus Damm
  Cc: Biju Das, Wolfram Sang, Lad Prabhakar, linux-kernel, linux-serial,
	devicetree, linux-renesas-soc, Biju Das

From: Biju Das <biju.das.jz@bp.renesas.com>

Add sci_is_rsci_type() for RSCI port type. This will simplify the code
when the support added for RSCI_PORT_{SCI,SCIF} private PORT type.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v2->v3:
 * No change.
v1->v2:
 * No change.
---
 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 66ab85571230..2da36e8ce555 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 || type == RSCI_PORT_SCI || type == RSCI_PORT_SCIF);
+}
+
 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.
@@ -2015,7 +2020,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);
@@ -3289,7 +3294,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] 39+ messages in thread

* [PATCH v3 09/13] serial: sh-sci: Add support for RZ/G3E RSCI clks
  2025-11-14 10:51 [PATCH v3 00/13] Add RZ/G3E RSCI support Biju
                   ` (7 preceding siblings ...)
  2025-11-14 10:51 ` [PATCH v3 08/13] serial: sh-sci: Add sci_is_rsci_type() Biju
@ 2025-11-14 10:51 ` Biju
  2025-11-21 16:39   ` Geert Uytterhoeven
  2025-11-14 10:51 ` [PATCH v3 10/13] serial: sh-sci: Make sci_scbrr_calc() public Biju
                   ` (3 subsequent siblings)
  12 siblings, 1 reply; 39+ messages in thread
From: Biju @ 2025-11-14 10:51 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Geert Uytterhoeven, Magnus Damm
  Cc: Biju Das, Wolfram Sang, Lad Prabhakar, linux-kernel, linux-serial,
	devicetree, linux-renesas-soc, Biju Das

From: Biju Das <biju.das.jz@bp.renesas.com>

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>
---
v2->v3:
 * No change.
v1->v2:
 * Updated commit description.
---
 drivers/tty/serial/sh-sci-common.h |  3 +++
 drivers/tty/serial/sh-sci.c        | 12 ++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/drivers/tty/serial/sh-sci-common.h b/drivers/tty/serial/sh-sci-common.h
index 77f9a67d8efc..6c849757119b 100644
--- a/drivers/tty/serial/sh-sci-common.h
+++ b/drivers/tty/serial/sh-sci-common.h
@@ -17,6 +17,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_DIV64,		/* Optional Functional Clock frequency-divided by 64 */
+	SCI_FCK_DIV16,		/* Optional Functional Clock frequency-divided by 16 */
+	SCI_FCK_DIV4,		/* Optional Functional Clock frequency-divided by 4 */
 	SCI_NUM_CLKS
 };
 
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 2da36e8ce555..3b03d3d3f2c7 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -3172,6 +3172,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_DIV64] = "tclk_div64",
+		[SCI_FCK_DIV16] = "tclk_div16",
+		[SCI_FCK_DIV4] = "tclk_div4",
 	};
 	struct clk *clk;
 	unsigned int i;
@@ -3181,6 +3184,9 @@ static int sci_init_clocks(struct sci_port *sci_port, struct device *dev)
 	} else if (sci_port->type == SCI_PORT_RSCI) {
 		clk_names[SCI_FCK] = "operation";
 		clk_names[SCI_BRG_INT] = "bus";
+	} else if (sci_port->type == RSCI_PORT_SCI || sci_port->type == RSCI_PORT_SCIF) {
+		clk_names[SCI_FCK] = "tclk";
+		clk_names[SCI_BRG_INT] = "bus";
 	}
 
 	for (i = 0; i < SCI_NUM_CLKS; i++) {
@@ -3194,6 +3200,12 @@ 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_SCI ||
+			     sci_port->type == RSCI_PORT_SCIF) &&
+		    (i == SCI_FCK || i == SCI_BRG_INT || i == SCI_FCK_DIV64 ||
+		     i == SCI_FCK_DIV16 || i == SCI_FCK_DIV4))
+			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] 39+ messages in thread

* [PATCH v3 10/13] serial: sh-sci: Make sci_scbrr_calc() public
  2025-11-14 10:51 [PATCH v3 00/13] Add RZ/G3E RSCI support Biju
                   ` (8 preceding siblings ...)
  2025-11-14 10:51 ` [PATCH v3 09/13] serial: sh-sci: Add support for RZ/G3E RSCI clks Biju
@ 2025-11-14 10:51 ` Biju
  2025-11-21 16:30   ` Geert Uytterhoeven
  2025-11-21 16:30   ` Geert Uytterhoeven
  2025-11-14 10:51 ` [PATCH v3 11/13] serial: sh-sci: Add finish_console_write() callback Biju
                   ` (2 subsequent siblings)
  12 siblings, 2 replies; 39+ messages in thread
From: Biju @ 2025-11-14 10:51 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Geert Uytterhoeven, Magnus Damm
  Cc: Biju Das, Wolfram Sang, Lad Prabhakar, linux-kernel, linux-serial,
	devicetree, linux-renesas-soc, Biju Das

From: Biju Das <biju.das.jz@bp.renesas.com>

Make the function sci_scbrr_calc() public for code reuse to support RZ/G3E
RSCI IP.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v2->v3:
 * No change.
v1->v2:
 * No change.
---
 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 6c849757119b..41a437440dfa 100644
--- a/drivers/tty/serial/sh-sci-common.h
+++ b/drivers/tty/serial/sh-sci-common.h
@@ -170,6 +170,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 3b03d3d3f2c7..c7f8a9b470fe 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -2573,9 +2573,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;
@@ -2639,6 +2638,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] 39+ messages in thread

* [PATCH v3 11/13] serial: sh-sci: Add finish_console_write() callback
  2025-11-14 10:51 [PATCH v3 00/13] Add RZ/G3E RSCI support Biju
                   ` (9 preceding siblings ...)
  2025-11-14 10:51 ` [PATCH v3 10/13] serial: sh-sci: Make sci_scbrr_calc() public Biju
@ 2025-11-14 10:51 ` Biju
  2025-11-14 10:51 ` [PATCH v3 12/13] serial: sh-sci: Add support for RZ/G3E RSCI SCIF Biju
  2025-11-14 10:51 ` [PATCH v3 13/13] serial: sh-sci: Add support for RZ/G3E RSCI SCI Biju
  12 siblings, 0 replies; 39+ messages in thread
From: Biju @ 2025-11-14 10:51 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Geert Uytterhoeven, Magnus Damm
  Cc: Biju Das, Wolfram Sang, Lad Prabhakar, linux-kernel, linux-serial,
	devicetree, linux-renesas-soc, Biju Das

From: Biju Das <biju.das.jz@bp.renesas.com>

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>
---
v2->v3:
 * No change.
v1->v2:
 * No change.
---
 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 41a437440dfa..4e6fee828243 100644
--- a/drivers/tty/serial/sh-sci-common.h
+++ b/drivers/tty/serial/sh-sci-common.h
@@ -94,6 +94,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 c7f8a9b470fe..e269f4f9edd0 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -3436,7 +3436,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] 39+ messages in thread

* [PATCH v3 12/13] serial: sh-sci: Add support for RZ/G3E RSCI SCIF
  2025-11-14 10:51 [PATCH v3 00/13] Add RZ/G3E RSCI support Biju
                   ` (10 preceding siblings ...)
  2025-11-14 10:51 ` [PATCH v3 11/13] serial: sh-sci: Add finish_console_write() callback Biju
@ 2025-11-14 10:51 ` Biju
  2025-11-21 14:46   ` Geert Uytterhoeven
  2025-11-14 10:51 ` [PATCH v3 13/13] serial: sh-sci: Add support for RZ/G3E RSCI SCI Biju
  12 siblings, 1 reply; 39+ messages in thread
From: Biju @ 2025-11-14 10:51 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Geert Uytterhoeven, Magnus Damm
  Cc: Biju Das, Wolfram Sang, Lad Prabhakar, linux-kernel, linux-serial,
	devicetree, linux-renesas-soc, Biju Das

From: Biju Das <biju.das.jz@bp.renesas.com>

Add support for RZ/G3E RSCI SCIF(a.k.a FIFO mode). 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 and has multiple resets. Add support
for the hardware flow control.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v2->v3:
 * Dropped cpu_relax() from rsci_finish_console_write() and added a
   comment.
 * Added sci_is_rsci_fifo_type() helper for reuse in probe() and remove().
v1->v2:
 * Updated commit description.
 * Updated multiline comment to fit into single line.
 * Updated set_termios() for getting baud_rate()
---
 drivers/tty/serial/rsci.c   | 282 ++++++++++++++++++++++++++++++++++--
 drivers/tty/serial/rsci.h   |   1 +
 drivers/tty/serial/sh-sci.c |  13 +-
 3 files changed, 285 insertions(+), 11 deletions(-)

diff --git a/drivers/tty/serial/rsci.c b/drivers/tty/serial/rsci.c
index 9609ef73a0d4..43b2e5588d4d 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 */
@@ -142,21 +179,160 @@ 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)
+{
+	unsigned int bits;
+
+	if (rx_trig >= port->fifosize)
+		rx_trig = port->fifosize - 1;
+	else if (rx_trig < 1)
+		rx_trig = 1;
+
+	bits = rx_trig << 16;
+	rsci_serial_out(port, FCR, (rsci_serial_in(port, FCR) & ~FCR_RTRG4_0) | bits);
+
+	return 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)
@@ -181,13 +357,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_start_tx(struct uart_port *port)
@@ -312,7 +509,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) {
@@ -346,6 +544,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;
@@ -367,14 +587,30 @@ 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 == SCI_PORT_RSCI)
+		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)
 {
+	struct sci_port *s = to_sci_port(port);
+
+	switch (s->type) {
+	case RSCI_PORT_SCIF:
+		return "scif";
+	}
+
 	return "rsci";
 }
 
@@ -413,6 +649,17 @@ static const struct sci_port_params rsci_port_params = {
 	.common_regs = &rsci_common_regs,
 };
 
+static const struct sci_port_params rsci_rzg3e_scif_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 uart_ops rsci_uart_ops = {
 	.tx_empty	= rsci_tx_empty,
 	.set_mctrl	= rsci_set_mctrl,
@@ -420,6 +667,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,
@@ -439,6 +688,7 @@ 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,
 	.shutdown_complete	= rsci_shutdown_complete,
 };
@@ -450,6 +700,13 @@ struct sci_of_data of_sci_rsci_data = {
 	.params = &rsci_port_params,
 };
 
+struct sci_of_data of_rsci_scif_data = {
+	.type = RSCI_PORT_SCIF,
+	.ops = &rsci_port_ops,
+	.uart_ops = &rsci_uart_ops,
+	.params = &rsci_rzg3e_scif_port_params,
+};
+
 #ifdef CONFIG_SERIAL_SH_SCI_EARLYCON
 
 static int __init rsci_early_console_setup(struct earlycon_device *device,
@@ -458,6 +715,13 @@ static int __init rsci_early_console_setup(struct earlycon_device *device,
 	return scix_early_console_setup(device, &of_sci_rsci_data);
 }
 
+static int __init rsci_rzg3e_scif_early_console_setup(struct earlycon_device *device,
+						      const char *opt)
+{
+	return scix_early_console_setup(device, &of_rsci_scif_data);
+}
+
+OF_EARLYCON_DECLARE(rsci, "renesas,r9a09g047-rscif", rsci_rzg3e_scif_early_console_setup);
 OF_EARLYCON_DECLARE(rsci, "renesas,r9a09g077-rsci", rsci_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..ba255f58c088 100644
--- a/drivers/tty/serial/rsci.h
+++ b/drivers/tty/serial/rsci.h
@@ -6,5 +6,6 @@
 #include "sh-sci-common.h"
 
 extern struct sci_of_data of_sci_rsci_data;
+extern struct sci_of_data of_rsci_scif_data;
 
 #endif /* __RSCI_H__ */
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index e269f4f9edd0..7c3d25a6138c 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -3563,6 +3563,11 @@ static struct uart_driver sci_uart_driver = {
 	.cons		= SCI_CONSOLE,
 };
 
+static bool sci_is_rsci_fifo_type(u8 type)
+{
+	return (type == SCI_PORT_RSCI || type == RSCI_PORT_SCIF);
+}
+
 static void sci_remove(struct platform_device *dev)
 {
 	struct sci_port *s = platform_get_drvdata(dev);
@@ -3574,7 +3579,7 @@ static void sci_remove(struct platform_device *dev)
 	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)
+	    sci_is_rsci_fifo_type(type))
 		device_remove_file(&dev->dev, &dev_attr_rx_fifo_timeout);
 }
 
@@ -3669,6 +3674,10 @@ static const struct of_device_id of_sci_match[] __maybe_unused = {
 		.data = &of_sci_scif_rzv2h,
 	},
 #ifdef CONFIG_SERIAL_RSCI
+	{
+		.compatible = "renesas,r9a09g047-rscif",
+		.data = &of_rsci_scif_data,
+	},
 	{
 		.compatible = "renesas,r9a09g077-rsci",
 		.data = &of_sci_rsci_data,
@@ -3936,7 +3945,7 @@ static int sci_probe(struct platform_device *dev)
 			return ret;
 	}
 	if (sp->type == PORT_SCIFA || sp->type == PORT_SCIFB ||
-	    sp->type == PORT_HSCIF || sp->type == SCI_PORT_RSCI) {
+	    sp->type == PORT_HSCIF || sci_is_rsci_fifo_type(sp->type)) {
 		ret = device_create_file(&dev->dev, &dev_attr_rx_fifo_timeout);
 		if (ret) {
 			if (sp->port.fifosize > 1) {
-- 
2.43.0


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

* [PATCH v3 13/13] serial: sh-sci: Add support for RZ/G3E RSCI SCI
  2025-11-14 10:51 [PATCH v3 00/13] Add RZ/G3E RSCI support Biju
                   ` (11 preceding siblings ...)
  2025-11-14 10:51 ` [PATCH v3 12/13] serial: sh-sci: Add support for RZ/G3E RSCI SCIF Biju
@ 2025-11-14 10:51 ` Biju
  2025-11-18  9:06   ` Jiri Slaby
  12 siblings, 1 reply; 39+ messages in thread
From: Biju @ 2025-11-14 10:51 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Geert Uytterhoeven, Magnus Damm
  Cc: Biju Das, Wolfram Sang, Lad Prabhakar, linux-kernel, linux-serial,
	devicetree, linux-renesas-soc, Biju Das

From: Biju Das <biju.das.jz@bp.renesas.com>

Add support for RZ/G3E RSCI SCI(a.k.a non FIFO mode).

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v2->v3:
 * No change.
v1->v2:
 * No change.
---
 drivers/tty/serial/rsci.c   | 138 +++++++++++++++++++++++++-----------
 drivers/tty/serial/rsci.h   |   1 +
 drivers/tty/serial/sh-sci.c |   4 ++
 3 files changed, 103 insertions(+), 40 deletions(-)

diff --git a/drivers/tty/serial/rsci.c b/drivers/tty/serial/rsci.c
index 43b2e5588d4d..39960e7c60ac 100644
--- a/drivers/tty/serial/rsci.c
+++ b/drivers/tty/serial/rsci.c
@@ -161,8 +161,11 @@ static void rsci_serial_out(struct uart_port *p, int offset, int value)
 
 static void rsci_clear_DRxC(struct uart_port *port)
 {
+	struct sci_port *s = to_sci_port(port);
+
 	rsci_serial_out(port, CFCLR, CFCLR_RDRFC);
-	rsci_serial_out(port, FFCLR, FFCLR_DRC);
+	if (s->type != RSCI_PORT_SCI)
+		rsci_serial_out(port, FFCLR, FFCLR_DRC);
 }
 
 static void rsci_clear_SCxSR(struct uart_port *port, unsigned int mask)
@@ -229,7 +232,6 @@ static void rsci_set_termios(struct uart_port *port, struct ktermios *termios,
 	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) {
@@ -294,7 +296,11 @@ static void rsci_set_termios(struct uart_port *port, struct ktermios *termios,
 
 	rsci_serial_out(port, CCR0, ccr0_val);
 
-	ccr3_val |= CCR3_FM;
+	if (s->type == RSCI_PORT_SCI)
+		ccr3_val |= CCR3_RXDESEL;
+	else
+		ccr3_val |= CCR3_FM;
+
 	rsci_serial_out(port, CCR3, ccr3_val);
 
 	ccr2_val |= (cks << 20) | (brr << 8);
@@ -303,12 +309,16 @@ static void rsci_set_termios(struct uart_port *port, struct ktermios *termios,
 	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->type != RSCI_PORT_SCI) {
+		unsigned int ctrl;
 
-	if (s->rx_trigger > 1)
-		rsci_scif_set_rtrg(port, s->rx_trigger);
+		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;
@@ -320,7 +330,8 @@ static void rsci_set_termios(struct uart_port *port, struct ktermios *termios,
 
 	rsci_init_pins(port, termios->c_cflag);
 	rsci_serial_out(port, CFCLR, CFCLR_CLRFLAG);
-	rsci_serial_out(port, FFCLR, FFCLR_DRC);
+	if (s->type != RSCI_PORT_SCI)
+		rsci_serial_out(port, FFCLR, FFCLR_DRC);
 
 	ccr0_val |= CCR0_RE;
 	rsci_serial_out(port, CCR0, ccr0_val);
@@ -337,12 +348,23 @@ static void rsci_set_termios(struct uart_port *port, struct ktermios *termios,
 
 static int rsci_txfill(struct uart_port *port)
 {
-	return rsci_serial_in(port, FTSR);
+	struct sci_port *s = to_sci_port(port);
+
+	if (s->type == RSCI_PORT_SCI)
+		return !(rsci_serial_in(port, CSR) & CSR_TDRE);
+	else
+		return rsci_serial_in(port, FTSR);
 }
 
 static int rsci_rxfill(struct uart_port *port)
 {
-	u32 val = rsci_serial_in(port, FRSR);
+	struct sci_port *s = to_sci_port(port);
+	u32 val;
+
+	if (s->type == RSCI_PORT_SCI)
+		return (rsci_serial_in(port, CSR) & CSR_RDRF) != 0;
+
+	val = rsci_serial_in(port, FRSR);
 
 	return FIELD_GET(FRSR_R5_0, val);
 }
@@ -357,7 +379,9 @@ static unsigned int rsci_tx_empty(struct uart_port *port)
 
 static void rsci_set_mctrl(struct uart_port *port, unsigned int mctrl)
 {
-	if (mctrl & TIOCM_LOOP) {
+	struct sci_port *s = to_sci_port(port);
+
+	if ((mctrl & TIOCM_LOOP) && s->type != RSCI_PORT_SCI) {
 		/* Standard loopback mode */
 		rsci_serial_out(port, CCR1, rsci_serial_in(port, CCR1) | CCR1_SPLP);
 	}
@@ -478,12 +502,13 @@ static void rsci_transmit_chars(struct uart_port *port)
 static void rsci_receive_chars(struct uart_port *port)
 {
 	struct tty_port *tport = &port->state->port;
+	struct sci_port *s = to_sci_port(port);
 	u32 rdat, status, frsr_status = 0;
 	int i, count, copied = 0;
 	unsigned char flag;
 
 	status = rsci_serial_in(port, CSR);
-	frsr_status = rsci_serial_in(port, FRSR);
+	frsr_status = (s->type == RSCI_PORT_SCI) ? 0 : rsci_serial_in(port, FRSR);
 
 	if (!(status & CSR_RDRF) && !(frsr_status & FRSR_DR))
 		return;
@@ -496,34 +521,40 @@ static void rsci_receive_chars(struct uart_port *port)
 		if (count == 0)
 			break;
 
-		for (i = 0; i < count; i++) {
-			char c;
-
-			rdat = rsci_serial_in(port, RDR);
-			/* 9-bits data is not supported yet */
-			c = rdat & RDR_RDAT_MSK;
-
-			if (uart_handle_sysrq_char(port, c)) {
-				count--;
-				i--;
-				continue;
-			}
-
-			/*
-			 * Store data and status.
-			 * Non FIFO mode is not supported
-			 */
-			if (rdat & RDR_FFER) {
-				flag = TTY_FRAME;
-				port->icount.frame++;
-			} else if (rdat & RDR_FPER) {
-				flag = TTY_PARITY;
-				port->icount.parity++;
-			} else {
-				flag = TTY_NORMAL;
+		if (s->type == RSCI_PORT_SCI) {
+			char c = rsci_serial_in(port, RDR) & RDR_RDAT_MSK;
+
+			if (uart_handle_sysrq_char(port, c))
+				count = 0;
+			else
+				tty_insert_flip_char(tport, c, TTY_NORMAL);
+		} else {
+			for (i = 0; i < count; i++) {
+				char c;
+
+				rdat = rsci_serial_in(port, RDR);
+				/* 9-bits data is not supported yet */
+				c = rdat & RDR_RDAT_MSK;
+
+				if (uart_handle_sysrq_char(port, c)) {
+					count--;
+					i--;
+					continue;
+				}
+
+				/* Store data and status */
+				if (rdat & RDR_FFER) {
+					flag = TTY_FRAME;
+					port->icount.frame++;
+				} else if (rdat & RDR_FPER) {
+					flag = TTY_PARITY;
+					port->icount.parity++;
+				} else {
+					flag = TTY_NORMAL;
+				}
+
+				tty_insert_flip_char(tport, c, flag);
 			}
-
-			tty_insert_flip_char(tport, c, flag);
 		}
 
 		rsci_serial_in(port, CSR); /* dummy read */
@@ -607,6 +638,8 @@ static const char *rsci_type(struct uart_port *port)
 	struct sci_port *s = to_sci_port(port);
 
 	switch (s->type) {
+	case RSCI_PORT_SCI:
+		return "sci";
 	case RSCI_PORT_SCIF:
 		return "scif";
 	}
@@ -649,6 +682,17 @@ static const struct sci_port_params rsci_port_params = {
 	.common_regs = &rsci_common_regs,
 };
 
+static const struct sci_port_params rsci_rzg3e_sci_port_params = {
+	.fifosize = 1,
+	.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_rzg3e_scif_port_params = {
 	.fifosize = 32,
 	.overrun_reg = CSR,
@@ -700,6 +744,13 @@ struct sci_of_data of_sci_rsci_data = {
 	.params = &rsci_port_params,
 };
 
+struct sci_of_data of_rsci_sci_data = {
+	.type = RSCI_PORT_SCI,
+	.ops = &rsci_port_ops,
+	.uart_ops = &rsci_uart_ops,
+	.params = &rsci_rzg3e_sci_port_params,
+};
+
 struct sci_of_data of_rsci_scif_data = {
 	.type = RSCI_PORT_SCIF,
 	.ops = &rsci_port_ops,
@@ -715,12 +766,19 @@ static int __init rsci_early_console_setup(struct earlycon_device *device,
 	return scix_early_console_setup(device, &of_sci_rsci_data);
 }
 
+static int __init rsci_rzg3e_sci_early_console_setup(struct earlycon_device *device,
+						     const char *opt)
+{
+	return scix_early_console_setup(device, &of_rsci_sci_data);
+}
+
 static int __init rsci_rzg3e_scif_early_console_setup(struct earlycon_device *device,
 						      const char *opt)
 {
 	return scix_early_console_setup(device, &of_rsci_scif_data);
 }
 
+OF_EARLYCON_DECLARE(rsci, "renesas,r9a09g047-rsci", rsci_rzg3e_sci_early_console_setup);
 OF_EARLYCON_DECLARE(rsci, "renesas,r9a09g047-rscif", rsci_rzg3e_scif_early_console_setup);
 OF_EARLYCON_DECLARE(rsci, "renesas,r9a09g077-rsci", rsci_early_console_setup);
 
diff --git a/drivers/tty/serial/rsci.h b/drivers/tty/serial/rsci.h
index ba255f58c088..df7a7edad7d4 100644
--- a/drivers/tty/serial/rsci.h
+++ b/drivers/tty/serial/rsci.h
@@ -6,6 +6,7 @@
 #include "sh-sci-common.h"
 
 extern struct sci_of_data of_sci_rsci_data;
+extern struct sci_of_data of_rsci_sci_data;
 extern struct sci_of_data of_rsci_scif_data;
 
 #endif /* __RSCI_H__ */
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 7c3d25a6138c..82e472957913 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -3674,6 +3674,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_sci_data,
+	},
 	{
 		.compatible = "renesas,r9a09g047-rscif",
 		.data = &of_rsci_scif_data,
-- 
2.43.0


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

* Re: [PATCH v3 13/13] serial: sh-sci: Add support for RZ/G3E RSCI SCI
  2025-11-14 10:51 ` [PATCH v3 13/13] serial: sh-sci: Add support for RZ/G3E RSCI SCI Biju
@ 2025-11-18  9:06   ` Jiri Slaby
  2025-11-19 11:49     ` Biju Das
  0 siblings, 1 reply; 39+ messages in thread
From: Jiri Slaby @ 2025-11-18  9:06 UTC (permalink / raw)
  To: Biju, Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Geert Uytterhoeven, Magnus Damm
  Cc: Biju Das, Wolfram Sang, Lad Prabhakar, linux-kernel, linux-serial,
	devicetree, linux-renesas-soc

Hi,

On 14. 11. 25, 11:51, Biju wrote:
> From: Biju Das <biju.das.jz@bp.renesas.com>
> 
> Add support for RZ/G3E RSCI SCI(a.k.a non FIFO mode).

"a.k.a. non-FIFO"

> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
...
> @@ -496,34 +521,40 @@ static void rsci_receive_chars(struct uart_port *port)
>   		if (count == 0)
>   			break;
>   
> -		for (i = 0; i < count; i++) {
> -			char c;
> -
> -			rdat = rsci_serial_in(port, RDR);
> -			/* 9-bits data is not supported yet */
> -			c = rdat & RDR_RDAT_MSK;
> -
> -			if (uart_handle_sysrq_char(port, c)) {
> -				count--;
> -				i--;
> -				continue;
> -			}
> -
> -			/*
> -			 * Store data and status.
> -			 * Non FIFO mode is not supported
> -			 */
> -			if (rdat & RDR_FFER) {
> -				flag = TTY_FRAME;
> -				port->icount.frame++;
> -			} else if (rdat & RDR_FPER) {
> -				flag = TTY_PARITY;
> -				port->icount.parity++;
> -			} else {
> -				flag = TTY_NORMAL;
> +		if (s->type == RSCI_PORT_SCI) {
> +			char c = rsci_serial_in(port, RDR) & RDR_RDAT_MSK;
> +
> +			if (uart_handle_sysrq_char(port, c))
> +				count = 0;
> +			else
> +				tty_insert_flip_char(tport, c, TTY_NORMAL);
> +		} else {
> +			for (i = 0; i < count; i++) {
> +				char c;
> +
> +				rdat = rsci_serial_in(port, RDR);
> +				/* 9-bits data is not supported yet */
> +				c = rdat & RDR_RDAT_MSK;
> +
> +				if (uart_handle_sysrq_char(port, c)) {
> +					count--;
> +					i--;
> +					continue;
> +				}
> +
> +				/* Store data and status */
> +				if (rdat & RDR_FFER) {
> +					flag = TTY_FRAME;
> +					port->icount.frame++;
> +				} else if (rdat & RDR_FPER) {
> +					flag = TTY_PARITY;
> +					port->icount.parity++;
> +				} else {
> +					flag = TTY_NORMAL;
> +				}
> +
> +				tty_insert_flip_char(tport, c, flag);
>   			}

Instead of this shuffle and introducing the 'if', can't you just set 
count to 1 and introduce a mask like:

if (SCI) {
   count = 1;
   read_mask = RDR_RDAT_MSK;
} else  {
   read_mask = ~0U;
}

for (...) {
   ...
   rdat = rsci_serial_in(port, RDR) & read_mask;
}
and that's it?

thanks,
-- 
js
suse labs

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

* RE: [PATCH v3 13/13] serial: sh-sci: Add support for RZ/G3E RSCI SCI
  2025-11-18  9:06   ` Jiri Slaby
@ 2025-11-19 11:49     ` Biju Das
  0 siblings, 0 replies; 39+ messages in thread
From: Biju Das @ 2025-11-19 11:49 UTC (permalink / raw)
  To: Jiri Slaby, biju.das.au, Greg Kroah-Hartman, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven,
	magnus.damm
  Cc: wsa+renesas, Prabhakar Mahadev Lad, linux-kernel@vger.kernel.org,
	linux-serial@vger.kernel.org, devicetree@vger.kernel.org,
	linux-renesas-soc@vger.kernel.org

Hi Jiri Slaby,

Thanks for the feedback.

> -----Original Message-----
> From: Jiri Slaby <jirislaby@kernel.org>
> Sent: 18 November 2025 09:06
-
> serial@vger.kernel.org; devicetree@vger.kernel.org; linux-renesas-soc@vger.kernel.org
> Subject: Re: [PATCH v3 13/13] serial: sh-sci: Add support for RZ/G3E RSCI SCI
> 
> Hi,
> 
> On 14. 11. 25, 11:51, Biju wrote:
> > From: Biju Das <biju.das.jz@bp.renesas.com>
> >
> > Add support for RZ/G3E RSCI SCI(a.k.a non FIFO mode).
> 
> "a.k.a. non-FIFO"

OK.

> 
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ...
> > @@ -496,34 +521,40 @@ static void rsci_receive_chars(struct uart_port *port)
> >   		if (count == 0)
> >   			break;
> >
> > -		for (i = 0; i < count; i++) {
> > -			char c;
> > -
> > -			rdat = rsci_serial_in(port, RDR);
> > -			/* 9-bits data is not supported yet */
> > -			c = rdat & RDR_RDAT_MSK;
> > -
> > -			if (uart_handle_sysrq_char(port, c)) {
> > -				count--;
> > -				i--;
> > -				continue;
> > -			}
> > -
> > -			/*
> > -			 * Store data and status.
> > -			 * Non FIFO mode is not supported
> > -			 */
> > -			if (rdat & RDR_FFER) {
> > -				flag = TTY_FRAME;
> > -				port->icount.frame++;
> > -			} else if (rdat & RDR_FPER) {
> > -				flag = TTY_PARITY;
> > -				port->icount.parity++;
> > -			} else {
> > -				flag = TTY_NORMAL;
> > +		if (s->type == RSCI_PORT_SCI) {
> > +			char c = rsci_serial_in(port, RDR) & RDR_RDAT_MSK;
> > +
> > +			if (uart_handle_sysrq_char(port, c))
> > +				count = 0;
> > +			else
> > +				tty_insert_flip_char(tport, c, TTY_NORMAL);
> > +		} else {
> > +			for (i = 0; i < count; i++) {
> > +				char c;
> > +
> > +				rdat = rsci_serial_in(port, RDR);
> > +				/* 9-bits data is not supported yet */
> > +				c = rdat & RDR_RDAT_MSK;
> > +
> > +				if (uart_handle_sysrq_char(port, c)) {
> > +					count--;
> > +					i--;
> > +					continue;
> > +				}
> > +
> > +				/* Store data and status */
> > +				if (rdat & RDR_FFER) {
> > +					flag = TTY_FRAME;
> > +					port->icount.frame++;
> > +				} else if (rdat & RDR_FPER) {
> > +					flag = TTY_PARITY;
> > +					port->icount.parity++;
> > +				} else {
> > +					flag = TTY_NORMAL;
> > +				}
> > +
> > +				tty_insert_flip_char(tport, c, flag);
> >   			}
> 
> Instead of this shuffle and introducing the 'if', can't you just set count to 1 and introduce a mask
> like:
> 
> if (SCI) {
>    count = 1;
>    read_mask = RDR_RDAT_MSK;
> } else  {
>    read_mask = ~0U;
> }
> 
> for (...) {
>    ...
>    rdat = rsci_serial_in(port, RDR) & read_mask; } and that's it?
> 

Yes, you are right the below change is sufficient.

if (s->type == RSCI_PORT_SCI)
	count = 1;

I will send next version fixing this.

Cheers,
Biju




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

* Re: [PATCH v3 12/13] serial: sh-sci: Add support for RZ/G3E RSCI SCIF
  2025-11-14 10:51 ` [PATCH v3 12/13] serial: sh-sci: Add support for RZ/G3E RSCI SCIF Biju
@ 2025-11-21 14:46   ` Geert Uytterhoeven
  2025-11-22 12:30     ` Biju Das
  0 siblings, 1 reply; 39+ messages in thread
From: Geert Uytterhoeven @ 2025-11-21 14:46 UTC (permalink / raw)
  To: Biju
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Magnus Damm, Biju Das, Wolfram Sang, Lad Prabhakar,
	linux-kernel, linux-serial, devicetree, linux-renesas-soc

Hi Biju,

On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> From: Biju Das <biju.das.jz@bp.renesas.com>
>
> Add support for RZ/G3E RSCI SCIF(a.k.a FIFO mode). 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 and has multiple resets. Add support
> for the hardware flow control.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
> v2->v3:
>  * Dropped cpu_relax() from rsci_finish_console_write() and added a
>    comment.
>  * Added sci_is_rsci_fifo_type() helper for reuse in probe() and remove().

Thanks for the update!

> --- a/drivers/tty/serial/sh-sci.c
> +++ b/drivers/tty/serial/sh-sci.c
> @@ -3563,6 +3563,11 @@ static struct uart_driver sci_uart_driver = {
>         .cons           = SCI_CONSOLE,
>  };
>
> +static bool sci_is_rsci_fifo_type(u8 type)
> +{
> +       return (type == SCI_PORT_RSCI || type == RSCI_PORT_SCIF);
> +}
> +
>  static void sci_remove(struct platform_device *dev)
>  {
>         struct sci_port *s = platform_get_drvdata(dev);
> @@ -3574,7 +3579,7 @@ static void sci_remove(struct platform_device *dev)
>         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)
> +           sci_is_rsci_fifo_type(type))

I think Jiri intended[1] having a helper that covers all cases, not
just the two RSCI variants. E.g. sci_has_fifo(u8 type).

>                 device_remove_file(&dev->dev, &dev_attr_rx_fifo_timeout);
>  }
>
> @@ -3669,6 +3674,10 @@ static const struct of_device_id of_sci_match[] __maybe_unused = {
>                 .data = &of_sci_scif_rzv2h,
>         },
>  #ifdef CONFIG_SERIAL_RSCI
> +       {
> +               .compatible = "renesas,r9a09g047-rscif",
> +               .data = &of_rsci_scif_data,
> +       },
>         {
>                 .compatible = "renesas,r9a09g077-rsci",
>                 .data = &of_sci_rsci_data,
> @@ -3936,7 +3945,7 @@ static int sci_probe(struct platform_device *dev)
>                         return ret;
>         }
>         if (sp->type == PORT_SCIFA || sp->type == PORT_SCIFB ||
> -           sp->type == PORT_HSCIF || sp->type == SCI_PORT_RSCI) {
> +           sp->type == PORT_HSCIF || sci_is_rsci_fifo_type(sp->type)) {
>                 ret = device_create_file(&dev->dev, &dev_attr_rx_fifo_timeout);
>                 if (ret) {
>                         if (sp->port.fifosize > 1) {

[1] https://lore.kernel.org/all/19a08b75-13ca-45f9-884d-f96602336dfd@kernel.org

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* Re: [PATCH v3 02/13] serial: rsci: Drop rsci_clear_CFC()
  2025-11-14 10:51 ` [PATCH v3 02/13] serial: rsci: Drop rsci_clear_CFC() Biju
@ 2025-11-21 14:52   ` Geert Uytterhoeven
  2025-11-22 12:49     ` Biju Das
  0 siblings, 1 reply; 39+ messages in thread
From: Geert Uytterhoeven @ 2025-11-21 14:52 UTC (permalink / raw)
  To: Biju
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Magnus Damm, Biju Das, Wolfram Sang, Lad Prabhakar,
	linux-kernel, linux-serial, devicetree, linux-renesas-soc

Hi Biju,

On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> From: Biju Das <biju.das.jz@bp.renesas.com>
>
> Drop rsci_clear_CFC() by reusing rsci_clear_SCxSR() as the contents of
> both functions are the same.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>

Thanks for your patch!

> --- a/drivers/tty/serial/rsci.c
> +++ b/drivers/tty/serial/rsci.c
> @@ -199,11 +199,6 @@ static unsigned int rsci_get_mctrl(struct uart_port *port)
>         return 0;
>  }
>
> -static void rsci_clear_CFC(struct uart_port *port, unsigned int mask)
> -{
> -       rsci_serial_out(port, CFCLR, mask);
> -}
> -

This function is indeed identical to rsci_clear_SCxSR(), so
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>

However, while the sci_port_ops method is indeed called .clear_SCxSR(),
I think it makes more sense to drop rsci_clear_SCxSR() instead, as this
function touches the CFC register...

>  static void rsci_start_tx(struct uart_port *port)
>  {
>         struct sci_port *sp = to_sci_port(port);
> @@ -275,7 +270,7 @@ static void rsci_transmit_chars(struct uart_port *port)
>                         break;
>                 }
>
> -               rsci_clear_CFC(port, CFCLR_TDREC);
> +               rsci_clear_SCxSR(port, CFCLR_TDREC);

... and it is called directly.

>                 rsci_serial_out(port, TDR, c);
>
>                 port->icount.tx++;

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* Re: [PATCH v3 03/13] serial: sh-sci: Drop extra lines
  2025-11-14 10:51 ` [PATCH v3 03/13] serial: sh-sci: Drop extra lines Biju
@ 2025-11-21 14:53   ` Geert Uytterhoeven
  0 siblings, 0 replies; 39+ messages in thread
From: Geert Uytterhoeven @ 2025-11-21 14:53 UTC (permalink / raw)
  To: Biju
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Magnus Damm, Biju Das, Wolfram Sang, Lad Prabhakar,
	linux-kernel, linux-serial, devicetree, linux-renesas-soc

On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> From: Biju Das <biju.das.jz@bp.renesas.com>
>
> Shorten the number lines in sci_init_clocks() by fitting the error
> messages within an 100-character length limit.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>

Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* Re: [PATCH v3 04/13] serial: rsci: Drop unused macro DCR
  2025-11-14 10:51 ` [PATCH v3 04/13] serial: rsci: Drop unused macro DCR Biju
@ 2025-11-21 14:57   ` Geert Uytterhoeven
  2025-11-22 12:50     ` Biju Das
  0 siblings, 1 reply; 39+ messages in thread
From: Geert Uytterhoeven @ 2025-11-21 14:57 UTC (permalink / raw)
  To: Biju
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Magnus Damm, Biju Das, Wolfram Sang, Lad Prabhakar,
	linux-kernel, linux-serial, devicetree, linux-renesas-soc

On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> From: Biju Das <biju.das.jz@bp.renesas.com>
>
> Drop unused macro DCR and its bit definition.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>

Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>

But I am not a big fan of dropping register documentation.
It must be reverted when adding RS-485 support.

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* Re: [PATCH v3 05/13] serial: rsci: Drop unused TDR register
  2025-11-14 10:51 ` [PATCH v3 05/13] serial: rsci: Drop unused TDR register Biju
@ 2025-11-21 15:00   ` Geert Uytterhoeven
  2025-11-22 12:52     ` Biju Das
  0 siblings, 1 reply; 39+ messages in thread
From: Geert Uytterhoeven @ 2025-11-21 15:00 UTC (permalink / raw)
  To: Biju
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Magnus Damm, Biju Das, Wolfram Sang, Lad Prabhakar,
	linux-kernel, linux-serial, devicetree, linux-renesas-soc

On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> From: Biju Das <biju.das.jz@bp.renesas.com>
>
> Drop the unused TDR register-related macros.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>

Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>

> --- 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 */

Might be useful, one day. But all other bits do not have defines yet anyway.

> -#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)

I agree this is rather useless.

> -
>  /* CCR0 (Common Control Register 0) */
>  #define CCR0_SSE               BIT(24) /* SSn# Pin Function Enable */
>  #define CCR0_TEIE              BIT(21) /* Transmit End Interrupt Enable */

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* Re: [PATCH v3 06/13] serial: sh-sci: Use devm_reset_control_array_get_exclusive()
  2025-11-14 10:51 ` [PATCH v3 06/13] serial: sh-sci: Use devm_reset_control_array_get_exclusive() Biju
@ 2025-11-21 15:01   ` Geert Uytterhoeven
  0 siblings, 0 replies; 39+ messages in thread
From: Geert Uytterhoeven @ 2025-11-21 15:01 UTC (permalink / raw)
  To: Biju
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Magnus Damm, Biju Das, Wolfram Sang, Lad Prabhakar,
	linux-kernel, linux-serial, devicetree, linux-renesas-soc

On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> From: Biju Das <biju.das.jz@bp.renesas.com>
>
> Replace devm_*_get_exclusive()->devm_*_array_get_exclusive() to support
> existing SoCs along with RZ/G3E as RZ/G3E has 2 resets.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>

Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* Re: [PATCH v3 07/13] serial: sh-sci: Add RSCI_PORT_{SCI,SCIF} port IDs
  2025-11-14 10:51 ` [PATCH v3 07/13] serial: sh-sci: Add RSCI_PORT_{SCI,SCIF} port IDs Biju
@ 2025-11-21 15:14   ` Geert Uytterhoeven
  2025-11-22 13:20     ` Biju Das
  0 siblings, 1 reply; 39+ messages in thread
From: Geert Uytterhoeven @ 2025-11-21 15:14 UTC (permalink / raw)
  To: Biju
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Magnus Damm, Biju Das, Wolfram Sang, Lad Prabhakar,
	linux-kernel, linux-serial, devicetree, linux-renesas-soc

Hi Biju,

On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> From: Biju Das <biju.das.jz@bp.renesas.com>
>
> RZ/G3E RSCI tx/rx supports both FIFO and non-FIFO mode. It has 32-stage
> FIFO. Add RSCI_PORT_SCI port ID for non-FIFO mode and RSCI_PORT_SCIF port
> ID for FIFO mode. Update the rx_trigger for both these modes.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>

Thanks for your patch!

> --- a/drivers/tty/serial/sh-sci-common.h
> +++ b/drivers/tty/serial/sh-sci-common.h
> @@ -8,6 +8,8 @@
>  /* Private port IDs */
>  enum SCI_PORT_TYPE {
>         SCI_PORT_RSCI = BIT(7) | 0,
> +       RSCI_PORT_SCI = BIT(7) | 1,
> +       RSCI_PORT_SCIF = BIT(7) | 2,

Oh no... Anyone who can reminder what is the difference between
SCI_PORT_RSCI and RSCI_PORT_SCI?

And now some RSCI IDs use the SCI_PORT_* prefix, while others use the
RSCI_PORT_* prefix.

So what about renaming the existing SCI_PORT_RSCI to e.g.
RSCI_PORT_SCIF16, and adding new types RSCI_PORT_SCI and
RSCI_PORT_SCIF32?

>  };
>
>  enum SCI_CLKS {
> diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
> index 78fb3b6a318b..66ab85571230 100644
> --- a/drivers/tty/serial/sh-sci.c
> +++ b/drivers/tty/serial/sh-sci.c
> @@ -3326,6 +3326,9 @@ static int sci_init_single(struct platform_device *dev,
>         case SCI_PORT_RSCI:
>                 sci_port->rx_trigger = 15;

Hmm, why is this 15, and not 16?

>                 break;
> +       case RSCI_PORT_SCIF:
> +               sci_port->rx_trigger = 32;
> +               break;
>         default:
>                 sci_port->rx_trigger = 1;
>                 break;

Anyone, all of the rx_trigger setting for RSCI variants is futile,
as rsci.c does not implement sci_port_ops.set_rtg() yet.

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* Re: [PATCH v3 08/13] serial: sh-sci: Add sci_is_rsci_type()
  2025-11-14 10:51 ` [PATCH v3 08/13] serial: sh-sci: Add sci_is_rsci_type() Biju
@ 2025-11-21 15:17   ` Geert Uytterhoeven
  2025-11-22 13:32     ` Biju Das
  0 siblings, 1 reply; 39+ messages in thread
From: Geert Uytterhoeven @ 2025-11-21 15:17 UTC (permalink / raw)
  To: Biju
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Magnus Damm, Biju Das, Wolfram Sang, Lad Prabhakar,
	linux-kernel, linux-serial, devicetree, linux-renesas-soc

Hi Biju,

On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> From: Biju Das <biju.das.jz@bp.renesas.com>
>
> Add sci_is_rsci_type() for RSCI port type. This will simplify the code
> when the support added for RSCI_PORT_{SCI,SCIF} private PORT type.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>

Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>

> --- 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 || type == RSCI_PORT_SCI || type == RSCI_PORT_SCIF);

Would be much more consistent if all port types would use the
RSCI_PORT_* prefix...

> +}

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* Re: [PATCH v3 01/13] dt-bindings: serial: renesas,rsci: Document RZ/G3E support
  2025-11-14 10:51 ` [PATCH v3 01/13] dt-bindings: serial: renesas,rsci: Document RZ/G3E support Biju
@ 2025-11-21 16:28   ` Geert Uytterhoeven
  2025-11-22 13:48     ` Biju Das
  0 siblings, 1 reply; 39+ messages in thread
From: Geert Uytterhoeven @ 2025-11-21 16:28 UTC (permalink / raw)
  To: Biju
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Magnus Damm, Biju Das, Wolfram Sang, Lad Prabhakar,
	linux-kernel, linux-serial, devicetree, linux-renesas-soc,
	Conor Dooley

Hi Biju,

On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> From: Biju Das <biju.das.jz@bp.renesas.com>
>
> 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.
>
> Acked-by: Conor Dooley <conor.dooley@microchip.com>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>

Thanks for your patch!

> --- a/Documentation/devicetree/bindings/serial/renesas,rsci.yaml
> +++ b/Documentation/devicetree/bindings/serial/renesas,rsci.yaml
> @@ -10,17 +10,16 @@ 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 non FIFO mode
> +          - renesas,r9a09g047-rscif # RZ/G3E FIFO mode

I can't find the non-FIFO ports in the documentation?
Do you mean "Selectable to 1-stage register or 32-stage FIFO"?
Isn't that software configuration instead of hardware description?

> +          - renesas,r9a09g077-rsci # RZ/T2H
>
>        - items:
> +          - const: renesas,r9a09g087-rsci # RZ/N2H
>            - const: renesas,r9a09g077-rsci # RZ/T2H
>
>    reg:
> @@ -42,14 +41,36 @@ properties:
>
>    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: bus

Figure 7.3-1 ("RSCI Block Diagram") calls this "pclk".

> +          - const: tclk
> +          - const: tclk_div64
> +          - const: tclk_div16
> +          - const: tclk_div4

Perhaps reverse the order of the last three, for simpler handling
in the driver: each successive clock divides by four?  (yes, I know
SCI_FCK is not immediately followed by SCI_FCK_DIV* in the driver)

> +          - const: sck # optional external clock input
> +
> +        minItems: 5

The rest LGTM.

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* Re: [PATCH v3 10/13] serial: sh-sci: Make sci_scbrr_calc() public
  2025-11-14 10:51 ` [PATCH v3 10/13] serial: sh-sci: Make sci_scbrr_calc() public Biju
@ 2025-11-21 16:30   ` Geert Uytterhoeven
  2025-11-21 16:30   ` Geert Uytterhoeven
  1 sibling, 0 replies; 39+ messages in thread
From: Geert Uytterhoeven @ 2025-11-21 16:30 UTC (permalink / raw)
  To: Biju
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Magnus Damm, Biju Das, Wolfram Sang, Lad Prabhakar,
	linux-kernel, linux-serial, devicetree, linux-renesas-soc

On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> From: Biju Das <biju.das.jz@bp.renesas.com>
>
> Make the function sci_scbrr_calc() public for code reuse to support RZ/G3E
> RSCI IP.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* Re: [PATCH v3 10/13] serial: sh-sci: Make sci_scbrr_calc() public
  2025-11-14 10:51 ` [PATCH v3 10/13] serial: sh-sci: Make sci_scbrr_calc() public Biju
  2025-11-21 16:30   ` Geert Uytterhoeven
@ 2025-11-21 16:30   ` Geert Uytterhoeven
  1 sibling, 0 replies; 39+ messages in thread
From: Geert Uytterhoeven @ 2025-11-21 16:30 UTC (permalink / raw)
  To: Biju
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Magnus Damm, Biju Das, Wolfram Sang, Lad Prabhakar,
	linux-kernel, linux-serial, devicetree, linux-renesas-soc

On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> From: Biju Das <biju.das.jz@bp.renesas.com>
>
> Make the function sci_scbrr_calc() public for code reuse to support RZ/G3E
> RSCI IP.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>

Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* Re: [PATCH v3 09/13] serial: sh-sci: Add support for RZ/G3E RSCI clks
  2025-11-14 10:51 ` [PATCH v3 09/13] serial: sh-sci: Add support for RZ/G3E RSCI clks Biju
@ 2025-11-21 16:39   ` Geert Uytterhoeven
  2025-11-22 16:50     ` Biju Das
  0 siblings, 1 reply; 39+ messages in thread
From: Geert Uytterhoeven @ 2025-11-21 16:39 UTC (permalink / raw)
  To: Biju
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Magnus Damm, Biju Das, Wolfram Sang, Lad Prabhakar,
	linux-kernel, linux-serial, devicetree, linux-renesas-soc

Hi Biju,

On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> From: Biju Das <biju.das.jz@bp.renesas.com>
>
> 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>

Thanks for your patch!

> --- a/drivers/tty/serial/sh-sci-common.h
> +++ b/drivers/tty/serial/sh-sci-common.h
> @@ -17,6 +17,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_DIV64,          /* Optional Functional Clock frequency-divided by 64 */
> +       SCI_FCK_DIV16,          /* Optional Functional Clock frequency-divided by 16 */
> +       SCI_FCK_DIV4,           /* Optional Functional Clock frequency-divided by 4 */

Perhaps reverse the order?

>         SCI_NUM_CLKS
>  };
>
> diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
> index 2da36e8ce555..3b03d3d3f2c7 100644
> --- a/drivers/tty/serial/sh-sci.c
> +++ b/drivers/tty/serial/sh-sci.c
> @@ -3172,6 +3172,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_DIV64] = "tclk_div64",
> +               [SCI_FCK_DIV16] = "tclk_div16",
> +               [SCI_FCK_DIV4] = "tclk_div4",

Likewise

>         };
>         struct clk *clk;
>         unsigned int i;
> @@ -3181,6 +3184,9 @@ static int sci_init_clocks(struct sci_port *sci_port, struct device *dev)
>         } else if (sci_port->type == SCI_PORT_RSCI) {
>                 clk_names[SCI_FCK] = "operation";
>                 clk_names[SCI_BRG_INT] = "bus";
> +       } else if (sci_port->type == RSCI_PORT_SCI || sci_port->type == RSCI_PORT_SCIF) {
> +               clk_names[SCI_FCK] = "tclk";
> +               clk_names[SCI_BRG_INT] = "bus";

pclk?

>         }
>
>         for (i = 0; i < SCI_NUM_CLKS; i++) {
> @@ -3194,6 +3200,12 @@ 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_SCI ||
> +                            sci_port->type == RSCI_PORT_SCIF) &&
> +                   (i == SCI_FCK || i == SCI_BRG_INT || i == SCI_FCK_DIV64 ||
> +                    i == SCI_FCK_DIV16 || i == SCI_FCK_DIV4))
> +                       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

This function is becoming a bit cumbersome.
Can it be simplified?
Can we avoid looking up clocks that are not relevant for the port?

Gr{oetje,eeting}s,

                        Geert


--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* RE: [PATCH v3 12/13] serial: sh-sci: Add support for RZ/G3E RSCI SCIF
  2025-11-21 14:46   ` Geert Uytterhoeven
@ 2025-11-22 12:30     ` Biju Das
  0 siblings, 0 replies; 39+ messages in thread
From: Biju Das @ 2025-11-22 12:30 UTC (permalink / raw)
  To: geert, biju.das.au
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, magnus.damm, wsa+renesas, Prabhakar Mahadev Lad,
	linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org,
	devicetree@vger.kernel.org, linux-renesas-soc@vger.kernel.org

Hi Geert,

Thanks for the feedback.

> -----Original Message-----
> From: Geert Uytterhoeven <geert@linux-m68k.org>
> Sent: 21 November 2025 14:46
> Subject: Re: [PATCH v3 12/13] serial: sh-sci: Add support for RZ/G3E RSCI SCIF
> 
> Hi Biju,
> 
> On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> > From: Biju Das <biju.das.jz@bp.renesas.com>
> >
> > Add support for RZ/G3E RSCI SCIF(a.k.a FIFO mode). 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 and has multiple resets. Add
> > support for the hardware flow control.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> > v2->v3:
> >  * Dropped cpu_relax() from rsci_finish_console_write() and added a
> >    comment.
> >  * Added sci_is_rsci_fifo_type() helper for reuse in probe() and remove().
> 
> Thanks for the update!
> 
> > --- a/drivers/tty/serial/sh-sci.c
> > +++ b/drivers/tty/serial/sh-sci.c
> > @@ -3563,6 +3563,11 @@ static struct uart_driver sci_uart_driver = {
> >         .cons           = SCI_CONSOLE,
> >  };
> >
> > +static bool sci_is_rsci_fifo_type(u8 type) {
> > +       return (type == SCI_PORT_RSCI || type == RSCI_PORT_SCIF); }
> > +
> >  static void sci_remove(struct platform_device *dev)  {
> >         struct sci_port *s = platform_get_drvdata(dev); @@ -3574,7
> > +3579,7 @@ static void sci_remove(struct platform_device *dev)
> >         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)
> > +           sci_is_rsci_fifo_type(type))
> 
> I think Jiri intended[1] having a helper that covers all cases, not
> just the two RSCI variants. E.g. sci_has_fifo(u8 type).

OK, I will update to cover all the variants.

Cheers,
Biju

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

* RE: [PATCH v3 02/13] serial: rsci: Drop rsci_clear_CFC()
  2025-11-21 14:52   ` Geert Uytterhoeven
@ 2025-11-22 12:49     ` Biju Das
  0 siblings, 0 replies; 39+ messages in thread
From: Biju Das @ 2025-11-22 12:49 UTC (permalink / raw)
  To: geert, biju.das.au
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, magnus.damm, wsa+renesas, Prabhakar Mahadev Lad,
	linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org,
	devicetree@vger.kernel.org, linux-renesas-soc@vger.kernel.org

Hi Geert,

Thanks for the feedback.

> -----Original Message-----
> From: Geert Uytterhoeven <geert@linux-m68k.org>
> Sent: 21 November 2025 14:53
> Subject: Re: [PATCH v3 02/13] serial: rsci: Drop rsci_clear_CFC()
> 
> Hi Biju,
> 
> On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> > From: Biju Das <biju.das.jz@bp.renesas.com>
> >
> > Drop rsci_clear_CFC() by reusing rsci_clear_SCxSR() as the contents of
> > both functions are the same.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> 
> Thanks for your patch!
> 
> > --- a/drivers/tty/serial/rsci.c
> > +++ b/drivers/tty/serial/rsci.c
> > @@ -199,11 +199,6 @@ static unsigned int rsci_get_mctrl(struct uart_port *port)
> >         return 0;
> >  }
> >
> > -static void rsci_clear_CFC(struct uart_port *port, unsigned int mask)
> > -{
> > -       rsci_serial_out(port, CFCLR, mask);
> > -}
> > -
> 
> This function is indeed identical to rsci_clear_SCxSR(), so
> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
> 
> However, while the sci_port_ops method is indeed called .clear_SCxSR(), I think it makes more sense to
> drop rsci_clear_SCxSR() instead, as this function touches the CFC register...

OK, will change this in next version.

Cheers,
Biju


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

* RE: [PATCH v3 04/13] serial: rsci: Drop unused macro DCR
  2025-11-21 14:57   ` Geert Uytterhoeven
@ 2025-11-22 12:50     ` Biju Das
  0 siblings, 0 replies; 39+ messages in thread
From: Biju Das @ 2025-11-22 12:50 UTC (permalink / raw)
  To: geert, biju.das.au
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, magnus.damm, wsa+renesas, Prabhakar Mahadev Lad,
	linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org,
	devicetree@vger.kernel.org, linux-renesas-soc@vger.kernel.org

Hi Geert,

Thanks for the feedback.

> -----Original Message-----
> From: Geert Uytterhoeven <geert@linux-m68k.org>
> Sent: 21 November 2025 14:58
> Subject: Re: [PATCH v3 04/13] serial: rsci: Drop unused macro DCR
> 
> On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> > From: Biju Das <biju.das.jz@bp.renesas.com>
> >
> > Drop unused macro DCR and its bit definition.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> 
> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
> 
> But I am not a big fan of dropping register documentation.
> It must be reverted when adding RS-485 support.

OK, will do when we add RS-485 support later.

Cheers,
Biju

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

* RE: [PATCH v3 05/13] serial: rsci: Drop unused TDR register
  2025-11-21 15:00   ` Geert Uytterhoeven
@ 2025-11-22 12:52     ` Biju Das
  0 siblings, 0 replies; 39+ messages in thread
From: Biju Das @ 2025-11-22 12:52 UTC (permalink / raw)
  To: geert, biju.das.au
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, magnus.damm, wsa+renesas, Prabhakar Mahadev Lad,
	linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org,
	devicetree@vger.kernel.org, linux-renesas-soc@vger.kernel.org

Hi Geert,

Thanks for the feedback.

> -----Original Message-----
> From: Geert Uytterhoeven <geert@linux-m68k.org>
> Sent: 21 November 2025 15:01
> Subject: Re: [PATCH v3 05/13] serial: rsci: Drop unused TDR register
> 
> On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> > From: Biju Das <biju.das.jz@bp.renesas.com>
> >
> > Drop the unused TDR register-related macros.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> 
> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
> 
> > --- 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 */
> 
> Might be useful, one day. But all other bits do not have defines yet anyway.
> 
> > -#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)
> 
> I agree this is rather useless.

OK.

Cheers,
Biju

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

* RE: [PATCH v3 07/13] serial: sh-sci: Add RSCI_PORT_{SCI,SCIF} port IDs
  2025-11-21 15:14   ` Geert Uytterhoeven
@ 2025-11-22 13:20     ` Biju Das
  0 siblings, 0 replies; 39+ messages in thread
From: Biju Das @ 2025-11-22 13:20 UTC (permalink / raw)
  To: geert, biju.das.au
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, magnus.damm, wsa+renesas, Prabhakar Mahadev Lad,
	linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org,
	devicetree@vger.kernel.org, linux-renesas-soc@vger.kernel.org

Hi Geert,

Thanks for the feedback.

> -----Original Message-----
> From: Geert Uytterhoeven <geert@linux-m68k.org>
> Sent: 21 November 2025 15:15
> Subject: Re: [PATCH v3 07/13] serial: sh-sci: Add RSCI_PORT_{SCI,SCIF} port IDs
> 
> Hi Biju,
> 
> On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> > From: Biju Das <biju.das.jz@bp.renesas.com>
> >
> > RZ/G3E RSCI tx/rx supports both FIFO and non-FIFO mode. It has
> > 32-stage FIFO. Add RSCI_PORT_SCI port ID for non-FIFO mode and
> > RSCI_PORT_SCIF port ID for FIFO mode. Update the rx_trigger for both these modes.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> 
> Thanks for your patch!
> 
> > --- a/drivers/tty/serial/sh-sci-common.h
> > +++ b/drivers/tty/serial/sh-sci-common.h
> > @@ -8,6 +8,8 @@
> >  /* Private port IDs */
> >  enum SCI_PORT_TYPE {
> >         SCI_PORT_RSCI = BIT(7) | 0,
> > +       RSCI_PORT_SCI = BIT(7) | 1,
> > +       RSCI_PORT_SCIF = BIT(7) | 2,
> 
> Oh no... Anyone who can reminder what is the difference between SCI_PORT_RSCI and RSCI_PORT_SCI?
> 
> And now some RSCI IDs use the SCI_PORT_* prefix, while others use the
> RSCI_PORT_* prefix.
> 
> So what about renaming the existing SCI_PORT_RSCI to e.g.
> RSCI_PORT_SCIF16, and adding new types RSCI_PORT_SCI and RSCI_PORT_SCIF32?


OK, will rename SCI_PORT_RSCI->RSCI_PORT_SCIF16 since it is only used in T2H.

If you agree, I am planning to change the enum values as below, when RSCI_PORT_SC{I,IF32}
is added

RSCI_PORT_SCI = BIT(7) | 0,
RSCI_PORT_SCIF16 = BIT(7) | 1,
RSCI_PORT_SCIF32 = BIT(7) | 2,


> 
> >  };
> >
> >  enum SCI_CLKS {
> > diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
> > index 78fb3b6a318b..66ab85571230 100644
> > --- a/drivers/tty/serial/sh-sci.c
> > +++ b/drivers/tty/serial/sh-sci.c
> > @@ -3326,6 +3326,9 @@ static int sci_init_single(struct platform_device *dev,
> >         case SCI_PORT_RSCI:
> >                 sci_port->rx_trigger = 15;
> 
> Hmm, why is this 15, and not 16?

I am also surprised; this has to be 16.
As there is no user, I will update as 16 in the same renaming patch.

> 
> >                 break;
> > +       case RSCI_PORT_SCIF:
> > +               sci_port->rx_trigger = 32;
> > +               break;
> >         default:
> >                 sci_port->rx_trigger = 1;
> >                 break;
> 
> Anyone, all of the rx_trigger setting for RSCI variants is futile, as rsci.c does not implement
> sci_port_ops.set_rtg() yet.

Agree, but now it is taken care by the later patch in this series.

Cheers,
Biju

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

* RE: [PATCH v3 08/13] serial: sh-sci: Add sci_is_rsci_type()
  2025-11-21 15:17   ` Geert Uytterhoeven
@ 2025-11-22 13:32     ` Biju Das
  0 siblings, 0 replies; 39+ messages in thread
From: Biju Das @ 2025-11-22 13:32 UTC (permalink / raw)
  To: geert, biju.das.au
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, magnus.damm, wsa+renesas, Prabhakar Mahadev Lad,
	linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org,
	devicetree@vger.kernel.org, linux-renesas-soc@vger.kernel.org

Hi Geert,

Thanks for the feedback,

> -----Original Message-----
> From: Geert Uytterhoeven <geert@linux-m68k.org>
> Sent: 21 November 2025 15:17
> Subject: Re: [PATCH v3 08/13] serial: sh-sci: Add sci_is_rsci_type()
> 
> Hi Biju,
> 
> On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> > From: Biju Das <biju.das.jz@bp.renesas.com>
> >
> > Add sci_is_rsci_type() for RSCI port type. This will simplify the code
> > when the support added for RSCI_PORT_{SCI,SCIF} private PORT type.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> 
> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
> 
> > --- 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 || type == RSCI_PORT_SCI || type
> > +== RSCI_PORT_SCIF);
> 
> Would be much more consistent if all port types would use the
> RSCI_PORT_* prefix...

Agreed, Will update.

Cheers,
Biju

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

* RE: [PATCH v3 01/13] dt-bindings: serial: renesas,rsci: Document RZ/G3E support
  2025-11-21 16:28   ` Geert Uytterhoeven
@ 2025-11-22 13:48     ` Biju Das
  2025-11-22 14:15       ` Biju Das
  0 siblings, 1 reply; 39+ messages in thread
From: Biju Das @ 2025-11-22 13:48 UTC (permalink / raw)
  To: geert, biju.das.au
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, magnus.damm, wsa+renesas, Prabhakar Mahadev Lad,
	linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org,
	devicetree@vger.kernel.org, linux-renesas-soc@vger.kernel.org,
	Conor Dooley

Hi Geert,

Thanks for the feedback.

> -----Original Message-----
> From: Geert Uytterhoeven <geert@linux-m68k.org>
> Sent: 21 November 2025 16:29
> Subject: Re: [PATCH v3 01/13] dt-bindings: serial: renesas,rsci: Document RZ/G3E support
> 
> Hi Biju,
> 
> On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> > From: Biju Das <biju.das.jz@bp.renesas.com>
> >
> > 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.
> >
> > Acked-by: Conor Dooley <conor.dooley@microchip.com>
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> 
> Thanks for your patch!
> 
> > --- a/Documentation/devicetree/bindings/serial/renesas,rsci.yaml
> > +++ b/Documentation/devicetree/bindings/serial/renesas,rsci.yaml
> > @@ -10,17 +10,16 @@ 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 non FIFO mode
> > +          - renesas,r9a09g047-rscif # RZ/G3E FIFO mode
> 
> I can't find the non-FIFO ports in the documentation?
> Do you mean "Selectable to 1-stage register or 32-stage FIFO"?
> Isn't that software configuration instead of hardware description?

Basically, it has 2 modes. FIFO mode(CCR3.FM=1b) and Non-FIFO mode (CCR3.FM=0b).
DMAC can be used only in FIFO mode and there are some hardware differences
between two as FIFO reg block is applicable only for FIFO mode.

It has to be a dt property as based on the end user use case this IP needs 
to configured either in FIFO mode or non-FIFO mode from the boot.

It has to be either a compatible or a boolean property "renesas, rsci-non-fifo"
Or something else

What do you think? Please suggest.

> 
> > +          - renesas,r9a09g077-rsci # RZ/T2H
> >
> >        - items:
> > +          - const: renesas,r9a09g087-rsci # RZ/N2H
> >            - const: renesas,r9a09g077-rsci # RZ/T2H
> >
> >    reg:
> > @@ -42,14 +41,36 @@ properties:
> >
> >    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: bus
> 
> Figure 7.3-1 ("RSCI Block Diagram") calls this "pclk".

OK.

> 
> > +          - const: tclk
> > +          - const: tclk_div64
> > +          - const: tclk_div16
> > +          - const: tclk_div4
> 
> Perhaps reverse the order of the last three, for simpler handling in the driver: each successive clock
> divides by four?  (yes, I know SCI_FCK is not immediately followed by SCI_FCK_DIV* in the driver)

OK, will reverse the order.

Cheers,
Biju

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

* RE: [PATCH v3 01/13] dt-bindings: serial: renesas,rsci: Document RZ/G3E support
  2025-11-22 13:48     ` Biju Das
@ 2025-11-22 14:15       ` Biju Das
  2025-11-24 12:58         ` Geert Uytterhoeven
  0 siblings, 1 reply; 39+ messages in thread
From: Biju Das @ 2025-11-22 14:15 UTC (permalink / raw)
  To: Biju Das, geert, biju.das.au
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, magnus.damm, wsa+renesas, Prabhakar Mahadev Lad,
	linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org,
	devicetree@vger.kernel.org, linux-renesas-soc@vger.kernel.org,
	Conor Dooley



> -----Original Message-----
> From: Biju Das <biju.das.jz@bp.renesas.com>
> Sent: 22 November 2025 13:49
> Subject: RE: [PATCH v3 01/13] dt-bindings: serial: renesas,rsci: Document RZ/G3E support
> 
> Hi Geert,
> 
> Thanks for the feedback.
> 
> > -----Original Message-----
> > From: Geert Uytterhoeven <geert@linux-m68k.org>
> > Sent: 21 November 2025 16:29
> > Subject: Re: [PATCH v3 01/13] dt-bindings: serial: renesas,rsci:
> > Document RZ/G3E support
> >
> > Hi Biju,
> >
> > On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> > > From: Biju Das <biju.das.jz@bp.renesas.com>
> > >
> > > 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.
> > >
> > > Acked-by: Conor Dooley <conor.dooley@microchip.com>
> > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> >
> > Thanks for your patch!
> >
> > > --- a/Documentation/devicetree/bindings/serial/renesas,rsci.yaml
> > > +++ b/Documentation/devicetree/bindings/serial/renesas,rsci.yaml
> > > @@ -10,17 +10,16 @@ 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 non FIFO mode
> > > +          - renesas,r9a09g047-rscif # RZ/G3E FIFO mode
> >
> > I can't find the non-FIFO ports in the documentation?
> > Do you mean "Selectable to 1-stage register or 32-stage FIFO"?
> > Isn't that software configuration instead of hardware description?
> 
> Basically, it has 2 modes. FIFO mode(CCR3.FM=1b) and Non-FIFO mode (CCR3.FM=0b).
> DMAC can be used only in FIFO mode and there are some hardware differences between two as FIFO reg
> block is applicable only for FIFO mode.
> 
> It has to be either a compatible or a boolean property "renesas, rsci-non-fifo"
> Or something else

I believe it must be a compatible to support non-FIFO mode from boot.

I maybe wrong. Please correct me, if it I am wrong.

Cheers,
Biju


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

* RE: [PATCH v3 09/13] serial: sh-sci: Add support for RZ/G3E RSCI clks
  2025-11-21 16:39   ` Geert Uytterhoeven
@ 2025-11-22 16:50     ` Biju Das
  0 siblings, 0 replies; 39+ messages in thread
From: Biju Das @ 2025-11-22 16:50 UTC (permalink / raw)
  To: geert, biju.das.au
  Cc: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, magnus.damm, wsa+renesas, Prabhakar Mahadev Lad,
	linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org,
	devicetree@vger.kernel.org, linux-renesas-soc@vger.kernel.org

Hi Geert,

Thanks for the feedback.

> -----Original Message-----
> From: Geert Uytterhoeven <geert@linux-m68k.org>
> Sent: 21 November 2025 16:39
> Subject: Re: [PATCH v3 09/13] serial: sh-sci: Add support for RZ/G3E RSCI clks
> 
> Hi Biju,
> 
> On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> > From: Biju Das <biju.das.jz@bp.renesas.com>
> >
> > 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>
> 
> Thanks for your patch!
> 
> > --- a/drivers/tty/serial/sh-sci-common.h
> > +++ b/drivers/tty/serial/sh-sci-common.h
> > @@ -17,6 +17,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_DIV64,          /* Optional Functional Clock frequency-divided by 64 */
> > +       SCI_FCK_DIV16,          /* Optional Functional Clock frequency-divided by 16 */
> > +       SCI_FCK_DIV4,           /* Optional Functional Clock frequency-divided by 4 */
> 
> Perhaps reverse the order?

OK.

> 
> >         SCI_NUM_CLKS
> >  };
> >
> > diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
> > index 2da36e8ce555..3b03d3d3f2c7 100644
> > --- a/drivers/tty/serial/sh-sci.c
> > +++ b/drivers/tty/serial/sh-sci.c
> > @@ -3172,6 +3172,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_DIV64] = "tclk_div64",
> > +               [SCI_FCK_DIV16] = "tclk_div16",
> > +               [SCI_FCK_DIV4] = "tclk_div4",
> 
> Likewise
OK.
> 
> >         };
> >         struct clk *clk;
> >         unsigned int i;
> > @@ -3181,6 +3184,9 @@ static int sci_init_clocks(struct sci_port *sci_port, struct device *dev)
> >         } else if (sci_port->type == SCI_PORT_RSCI) {
> >                 clk_names[SCI_FCK] = "operation";
> >                 clk_names[SCI_BRG_INT] = "bus";
> > +       } else if (sci_port->type == RSCI_PORT_SCI || sci_port->type == RSCI_PORT_SCIF) {
> > +               clk_names[SCI_FCK] = "tclk";
> > +               clk_names[SCI_BRG_INT] = "bus";
> 
> pclk?
OK.

> 
> >         }
> >
> >         for (i = 0; i < SCI_NUM_CLKS; i++) { @@ -3194,6 +3200,12 @@
> > 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_SCI ||
> > +                            sci_port->type == RSCI_PORT_SCIF) &&
> > +                   (i == SCI_FCK || i == SCI_BRG_INT || i == SCI_FCK_DIV64 ||
> > +                    i == SCI_FCK_DIV16 || i == SCI_FCK_DIV4))
> > +                       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
> 
> This function is becoming a bit cumbersome.
> Can it be simplified?
> Can we avoid looking up clocks that are not relevant for the port?

OK will fix this in next version.

Cheers,
Biju

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

* Re: [PATCH v3 01/13] dt-bindings: serial: renesas,rsci: Document RZ/G3E support
  2025-11-22 14:15       ` Biju Das
@ 2025-11-24 12:58         ` Geert Uytterhoeven
  2025-11-24 15:35           ` Biju Das
  0 siblings, 1 reply; 39+ messages in thread
From: Geert Uytterhoeven @ 2025-11-24 12:58 UTC (permalink / raw)
  To: Biju Das
  Cc: biju.das.au, Greg Kroah-Hartman, Jiri Slaby, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, magnus.damm, wsa+renesas,
	Prabhakar Mahadev Lad, linux-kernel@vger.kernel.org,
	linux-serial@vger.kernel.org, devicetree@vger.kernel.org,
	linux-renesas-soc@vger.kernel.org, Conor Dooley

Hi Biju,

On Sat, 22 Nov 2025 at 15:15, Biju Das <biju.das.jz@bp.renesas.com> wrote:
> > From: Biju Das <biju.das.jz@bp.renesas.com>
> > > From: Geert Uytterhoeven <geert@linux-m68k.org>
> > > On Fri, 14 Nov 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> > > > 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.
> > > >
> > > > Acked-by: Conor Dooley <conor.dooley@microchip.com>
> > > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>

> > > > --- a/Documentation/devicetree/bindings/serial/renesas,rsci.yaml
> > > > +++ b/Documentation/devicetree/bindings/serial/renesas,rsci.yaml
> > > > @@ -10,17 +10,16 @@ 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 non FIFO mode
> > > > +          - renesas,r9a09g047-rscif # RZ/G3E FIFO mode
> > >
> > > I can't find the non-FIFO ports in the documentation?
> > > Do you mean "Selectable to 1-stage register or 32-stage FIFO"?
> > > Isn't that software configuration instead of hardware description?
> >
> > Basically, it has 2 modes. FIFO mode(CCR3.FM=1b) and Non-FIFO mode (CCR3.FM=0b).
> > DMAC can be used only in FIFO mode and there are some hardware differences between two as FIFO reg
> > block is applicable only for FIFO mode.

Still, sounds like software policy / configuration to me...

> > It has to be either a compatible or a boolean property "renesas, rsci-non-fifo"
> > Or something else
>
> I believe it must be a compatible to support non-FIFO mode from boot.
>
> I maybe wrong. Please correct me, if it I am wrong.

Why can't it be configured through e.g. the rx_fifo_trigger device
attribute, or some setserial option? Any guidance from the serial
experts?

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* RE: [PATCH v3 01/13] dt-bindings: serial: renesas,rsci: Document RZ/G3E support
  2025-11-24 12:58         ` Geert Uytterhoeven
@ 2025-11-24 15:35           ` Biju Das
  0 siblings, 0 replies; 39+ messages in thread
From: Biju Das @ 2025-11-24 15:35 UTC (permalink / raw)
  To: geert
  Cc: biju.das.au, Greg Kroah-Hartman, Jiri Slaby, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, magnus.damm, wsa+renesas,
	Prabhakar Mahadev Lad, linux-kernel@vger.kernel.org,
	linux-serial@vger.kernel.org, devicetree@vger.kernel.org,
	linux-renesas-soc@vger.kernel.org, Conor Dooley

Hi Geert,

Thanks for the feedback.

> -----Original Message-----
> From: Geert Uytterhoeven <geert@linux-m68k.org>
> Sent: 24 November 2025 12:58
> Subject: Re: [PATCH v3 01/13] dt-bindings: serial: renesas,rsci: Document RZ/G3E support
> 
> Hi Biju,
> 
> On Sat, 22 Nov 2025 at 15:15, Biju Das <biju.das.jz@bp.renesas.com> wrote:
> > > From: Biju Das <biju.das.jz@bp.renesas.com>
> > > > From: Geert Uytterhoeven <geert@linux-m68k.org> On Fri, 14 Nov
> > > > 2025 at 11:52, Biju <biju.das.au@gmail.com> wrote:
> > > > > 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.
> > > > >
> > > > > Acked-by: Conor Dooley <conor.dooley@microchip.com>
> > > > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> 
> > > > > --- a/Documentation/devicetree/bindings/serial/renesas,rsci.yaml
> > > > > +++ b/Documentation/devicetree/bindings/serial/renesas,rsci.yaml
> > > > > @@ -10,17 +10,16 @@ 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 non FIFO mode
> > > > > +          - renesas,r9a09g047-rscif # RZ/G3E FIFO mode
> > > >
> > > > I can't find the non-FIFO ports in the documentation?
> > > > Do you mean "Selectable to 1-stage register or 32-stage FIFO"?
> > > > Isn't that software configuration instead of hardware description?
> > >
> > > Basically, it has 2 modes. FIFO mode(CCR3.FM=1b) and Non-FIFO mode (CCR3.FM=0b).
> > > DMAC can be used only in FIFO mode and there are some hardware
> > > differences between two as FIFO reg block is applicable only for FIFO mode.
> 
> Still, sounds like software policy / configuration to me...

Ok.

> 
> > > It has to be either a compatible or a boolean property "renesas, rsci-non-fifo"
> > > Or something else
> >
> > I believe it must be a compatible to support non-FIFO mode from boot.
> >
> > I maybe wrong. Please correct me, if it I am wrong.
> 
> Why can't it be configured through e.g. the rx_fifo_trigger device attribute, or some setserial
> option? Any guidance from the serial experts?

I was under the impression like early console, someone may use non-FIFO mode very early during the
boot.

OK, Will drop the compatible for non-FIFO mode.

Cheers,
Biju

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

end of thread, other threads:[~2025-11-24 15:35 UTC | newest]

Thread overview: 39+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-14 10:51 [PATCH v3 00/13] Add RZ/G3E RSCI support Biju
2025-11-14 10:51 ` [PATCH v3 01/13] dt-bindings: serial: renesas,rsci: Document RZ/G3E support Biju
2025-11-21 16:28   ` Geert Uytterhoeven
2025-11-22 13:48     ` Biju Das
2025-11-22 14:15       ` Biju Das
2025-11-24 12:58         ` Geert Uytterhoeven
2025-11-24 15:35           ` Biju Das
2025-11-14 10:51 ` [PATCH v3 02/13] serial: rsci: Drop rsci_clear_CFC() Biju
2025-11-21 14:52   ` Geert Uytterhoeven
2025-11-22 12:49     ` Biju Das
2025-11-14 10:51 ` [PATCH v3 03/13] serial: sh-sci: Drop extra lines Biju
2025-11-21 14:53   ` Geert Uytterhoeven
2025-11-14 10:51 ` [PATCH v3 04/13] serial: rsci: Drop unused macro DCR Biju
2025-11-21 14:57   ` Geert Uytterhoeven
2025-11-22 12:50     ` Biju Das
2025-11-14 10:51 ` [PATCH v3 05/13] serial: rsci: Drop unused TDR register Biju
2025-11-21 15:00   ` Geert Uytterhoeven
2025-11-22 12:52     ` Biju Das
2025-11-14 10:51 ` [PATCH v3 06/13] serial: sh-sci: Use devm_reset_control_array_get_exclusive() Biju
2025-11-21 15:01   ` Geert Uytterhoeven
2025-11-14 10:51 ` [PATCH v3 07/13] serial: sh-sci: Add RSCI_PORT_{SCI,SCIF} port IDs Biju
2025-11-21 15:14   ` Geert Uytterhoeven
2025-11-22 13:20     ` Biju Das
2025-11-14 10:51 ` [PATCH v3 08/13] serial: sh-sci: Add sci_is_rsci_type() Biju
2025-11-21 15:17   ` Geert Uytterhoeven
2025-11-22 13:32     ` Biju Das
2025-11-14 10:51 ` [PATCH v3 09/13] serial: sh-sci: Add support for RZ/G3E RSCI clks Biju
2025-11-21 16:39   ` Geert Uytterhoeven
2025-11-22 16:50     ` Biju Das
2025-11-14 10:51 ` [PATCH v3 10/13] serial: sh-sci: Make sci_scbrr_calc() public Biju
2025-11-21 16:30   ` Geert Uytterhoeven
2025-11-21 16:30   ` Geert Uytterhoeven
2025-11-14 10:51 ` [PATCH v3 11/13] serial: sh-sci: Add finish_console_write() callback Biju
2025-11-14 10:51 ` [PATCH v3 12/13] serial: sh-sci: Add support for RZ/G3E RSCI SCIF Biju
2025-11-21 14:46   ` Geert Uytterhoeven
2025-11-22 12:30     ` Biju Das
2025-11-14 10:51 ` [PATCH v3 13/13] serial: sh-sci: Add support for RZ/G3E RSCI SCI Biju
2025-11-18  9:06   ` Jiri Slaby
2025-11-19 11:49     ` Biju Das

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).