* [PATCH v2 0/7] Add support for RZ/G3E CANFD
@ 2025-02-20 13:04 Biju Das
2025-02-20 13:04 ` [PATCH v2 1/7] dt-bindings: can: renesas,rcar-canfd: Simplify the conditional schema Biju Das
` (6 more replies)
0 siblings, 7 replies; 16+ messages in thread
From: Biju Das @ 2025-02-20 13:04 UTC (permalink / raw)
To: Marc Kleine-Budde, Vincent Mailhol, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven,
Michael Turquette, Stephen Boyd
Cc: Biju Das, linux-can, linux-renesas-soc, linux-clk, devicetree,
Wolfram Sang, Uwe Kleine-König, Prabhakar Mahadev Lad,
Biju Das
The CAN-FD module on RZ/G3E is very similar to the one on both R-Car V4H
and RZ/G2L, but differs in some hardware parameters:
* No external clock, but instead has ram clock.
* Support up to 6 channels.
* 20 interrupts.
This patch series depend upon [1]
[1] https://lore.kernel.org/all/20250220094516.126598-1-biju.das.jz@bp.renesas.com/
v1->v2:
* Split the series with fixes patch separately.
* Added patch for Simplify rcar_canfd_probe() using
of_get_available_child_by_name() as dependency patch hit on can-next.
* Added Rb tag from Vincent Mailhol.
* Dropped redundant comment from commit description for patch#3.
Biju Das (7):
dt-bindings: can: renesas,rcar-canfd: Simplify the conditional schema
dt-bindings: can: renesas,rcar-canfd: Document RZ/G3E support
can: rcar_canfd: Use of_get_available_child_by_name()
can: rcar_canfd: Add gen4_type variable to struct rcar_canfd_hw_info
can: rcar_canfd: Add only_internal_clks variable to struct
rcar_canfd_hw_info
can: rcar_canfd: Enhance multi_channel_irqs handling
can: rcar_canfd: Add RZ/G3E support
.../bindings/net/can/renesas,rcar-canfd.yaml | 180 +++++++++++++-----
drivers/net/can/rcar/rcar_canfd.c | 35 +++-
2 files changed, 165 insertions(+), 50 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 1/7] dt-bindings: can: renesas,rcar-canfd: Simplify the conditional schema
2025-02-20 13:04 [PATCH v2 0/7] Add support for RZ/G3E CANFD Biju Das
@ 2025-02-20 13:04 ` Biju Das
2025-02-21 17:51 ` Conor Dooley
2025-02-20 13:04 ` [PATCH v2 2/7] dt-bindings: can: renesas,rcar-canfd: Document RZ/G3E support Biju Das
` (5 subsequent siblings)
6 siblings, 1 reply; 16+ messages in thread
From: Biju Das @ 2025-02-20 13:04 UTC (permalink / raw)
To: Marc Kleine-Budde, Vincent Mailhol, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven,
Magnus Damm
Cc: Biju Das, Fabrizio Castro, Simon Horman, Duy Nguyen, linux-can,
devicetree, linux-renesas-soc, Prabhakar Mahadev Lad, Biju Das
RZ/G3E SoC has 20 interrupts, 2 resets and 6 channels that need more
branching with conditional schema. Simplify the conditional schema with
if statements rather than the complex if-else statements to prepare for
supporting RZ/G3E SoC.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
This patch depend upon [1]
[1] https://lore.kernel.org/all/20250220094516.126598-2-biju.das.jz@bp.renesas.com/
v1->v2:
* No change
---
.../bindings/net/can/renesas,rcar-canfd.yaml | 123 ++++++++++++------
1 file changed, 80 insertions(+), 43 deletions(-)
diff --git a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
index f6884f6e59e7..f87f90f431e5 100644
--- a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
+++ b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
@@ -45,7 +45,35 @@ properties:
reg:
maxItems: 1
- interrupts: true
+ interrupts:
+ oneOf:
+ - items:
+ - description: Channel interrupt
+ - description: Global interrupt
+ - items:
+ - description: CAN global error interrupt
+ - description: CAN receive FIFO interrupt
+ - description: CAN0 error interrupt
+ - description: CAN0 transmit interrupt
+ - description: CAN0 transmit/receive FIFO receive completion interrupt
+ - description: CAN1 error interrupt
+ - description: CAN1 transmit interrupt
+ - description: CAN1 transmit/receive FIFO receive completion interrupt
+
+ interrupt-names:
+ oneOf:
+ - items:
+ - const: ch_int
+ - const: g_int
+ - items:
+ - const: g_err
+ - const: g_recc
+ - const: ch0_err
+ - const: ch0_rec
+ - const: ch0_trx
+ - const: ch1_err
+ - const: ch1_rec
+ - const: ch1_trx
clocks:
maxItems: 3
@@ -117,52 +145,71 @@ allOf:
then:
properties:
interrupts:
- items:
- - description: CAN global error interrupt
- - description: CAN receive FIFO interrupt
- - description: CAN0 error interrupt
- - description: CAN0 transmit interrupt
- - description: CAN0 transmit/receive FIFO receive completion interrupt
- - description: CAN1 error interrupt
- - description: CAN1 transmit interrupt
- - description: CAN1 transmit/receive FIFO receive completion interrupt
+ minItems: 8
+ maxItems: 8
interrupt-names:
- items:
- - const: g_err
- - const: g_recc
- - const: ch0_err
- - const: ch0_rec
- - const: ch0_trx
- - const: ch1_err
- - const: ch1_rec
- - const: ch1_trx
+ minItems: 8
+ maxItems: 8
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - renesas,rcar-gen3-canfd
+ - renesas,rcar-gen4-canfd
+ then:
+ properties:
+ interrupts:
+ minItems: 2
+ maxItems: 2
+
+ interrupt-names:
+ minItems: 2
+ maxItems: 2
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: renesas,rzg2l-canfd
+ then:
+ properties:
resets:
+ minItems: 2
maxItems: 2
reset-names:
- items:
- - const: rstp_n
- - const: rstc_n
+ minItems: 2
+ maxItems: 2
required:
- reset-names
- else:
- properties:
- interrupts:
- items:
- - description: Channel interrupt
- - description: Global interrupt
-
- interrupt-names:
- items:
- - const: ch_int
- - const: g_int
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - renesas,rcar-gen3-canfd
+ - renesas,rcar-gen4-canfd
+ then:
+ properties:
resets:
maxItems: 1
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - renesas,rcar-gen3-canfd
+ - renesas,rzg2l-canfd
+ then:
+ patternProperties:
+ "^channel[2-7]$": false
+
- if:
properties:
compatible:
@@ -171,16 +218,6 @@ allOf:
then:
patternProperties:
"^channel[4-7]$": false
- else:
- if:
- not:
- properties:
- compatible:
- contains:
- const: renesas,rcar-gen4-canfd
- then:
- patternProperties:
- "^channel[2-7]$": false
unevaluatedProperties: false
--
2.43.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 2/7] dt-bindings: can: renesas,rcar-canfd: Document RZ/G3E support
2025-02-20 13:04 [PATCH v2 0/7] Add support for RZ/G3E CANFD Biju Das
2025-02-20 13:04 ` [PATCH v2 1/7] dt-bindings: can: renesas,rcar-canfd: Simplify the conditional schema Biju Das
@ 2025-02-20 13:04 ` Biju Das
2025-02-21 17:53 ` Conor Dooley
2025-02-20 13:04 ` [PATCH v2 3/7] can: rcar_canfd: Use of_get_available_child_by_name() Biju Das
` (4 subsequent siblings)
6 siblings, 1 reply; 16+ messages in thread
From: Biju Das @ 2025-02-20 13:04 UTC (permalink / raw)
To: Marc Kleine-Budde, Vincent Mailhol, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven,
Magnus Damm
Cc: Biju Das, Fabrizio Castro, Simon Horman, Duy Nguyen, linux-can,
devicetree, linux-renesas-soc, Prabhakar Mahadev Lad, Biju Das
Document support for the CAN-FD Interface on the RZ/G3E (R9A09G047) SoC,
which supports up to six channels.
The CAN-FD module on RZ/G3E is very similar to the one on both R-Car V4H
and RZ/G2L, but differs in some hardware parameters:
* No external clock, but instead has ram clock.
* Support up to 6 channels.
* 20 interrupts.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v1->v2:
* No change.
---
.../bindings/net/can/renesas,rcar-canfd.yaml | 67 +++++++++++++++++--
1 file changed, 62 insertions(+), 5 deletions(-)
diff --git a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
index f87f90f431e5..189d5303ad75 100644
--- a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
+++ b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
@@ -42,6 +42,8 @@ properties:
- renesas,r9a07g054-canfd # RZ/V2L
- const: renesas,rzg2l-canfd # RZ/G2L family
+ - const: renesas,r9a09g047-canfd # RZ/G3E
+
reg:
maxItems: 1
@@ -59,6 +61,19 @@ properties:
- description: CAN1 error interrupt
- description: CAN1 transmit interrupt
- description: CAN1 transmit/receive FIFO receive completion interrupt
+ - description: CAN2 error interrupt
+ - description: CAN2 transmit interrupt
+ - description: CAN2 transmit/receive FIFO receive completion interrupt
+ - description: CAN3 error interrupt
+ - description: CAN3 transmit interrupt
+ - description: CAN3 transmit/receive FIFO receive completion interrupt
+ - description: CAN4 error interrupt
+ - description: CAN4 transmit interrupt
+ - description: CAN4 transmit/receive FIFO receive completion interrupt
+ - description: CAN5 error interrupt
+ - description: CAN5 transmit interrupt
+ - description: CAN5 transmit/receive FIFO receive completion interrupt
+ minItems: 8
interrupt-names:
oneOf:
@@ -74,15 +89,33 @@ properties:
- const: ch1_err
- const: ch1_rec
- const: ch1_trx
+ - const: ch2_err
+ - const: ch2_rec
+ - const: ch2_trx
+ - const: ch3_err
+ - const: ch3_rec
+ - const: ch3_trx
+ - const: ch4_err
+ - const: ch4_rec
+ - const: ch4_trx
+ - const: ch5_err
+ - const: ch5_rec
+ - const: ch5_trx
+ minItems: 8
clocks:
maxItems: 3
clock-names:
- items:
- - const: fck
- - const: canfd
- - const: can_clk
+ oneOf:
+ - items:
+ - const: fck
+ - const: canfd
+ - const: can_clk
+ - items:
+ - const: fck
+ - const: ram_clk
+ - const: can_clk
power-domains:
maxItems: 1
@@ -173,7 +206,9 @@ allOf:
properties:
compatible:
contains:
- const: renesas,rzg2l-canfd
+ enum:
+ - renesas,r9a09g047-canfd
+ - renesas,rzg2l-canfd
then:
properties:
resets:
@@ -187,6 +222,19 @@ allOf:
required:
- reset-names
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: renesas,r9a09g047-canfd
+ then:
+ properties:
+ interrupts:
+ maxItems: 20
+
+ interrupt-names:
+ maxItems: 20
+
- if:
properties:
compatible:
@@ -219,6 +267,15 @@ allOf:
patternProperties:
"^channel[4-7]$": false
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: renesas,r9a09g047-canfd
+ then:
+ patternProperties:
+ "^channel[6-7]$": false
+
unevaluatedProperties: false
examples:
--
2.43.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 3/7] can: rcar_canfd: Use of_get_available_child_by_name()
2025-02-20 13:04 [PATCH v2 0/7] Add support for RZ/G3E CANFD Biju Das
2025-02-20 13:04 ` [PATCH v2 1/7] dt-bindings: can: renesas,rcar-canfd: Simplify the conditional schema Biju Das
2025-02-20 13:04 ` [PATCH v2 2/7] dt-bindings: can: renesas,rcar-canfd: Document RZ/G3E support Biju Das
@ 2025-02-20 13:04 ` Biju Das
2025-02-20 13:17 ` Geert Uytterhoeven
2025-02-20 13:04 ` [PATCH v2 4/7] can: rcar_canfd: Add gen4_type variable to struct rcar_canfd_hw_info Biju Das
` (3 subsequent siblings)
6 siblings, 1 reply; 16+ messages in thread
From: Biju Das @ 2025-02-20 13:04 UTC (permalink / raw)
To: Marc Kleine-Budde, Vincent Mailhol
Cc: Biju Das, Geert Uytterhoeven, Wolfram Sang, Uwe Kleine-König,
Rob Herring, Ulrich Hecht, linux-can, Prabhakar Mahadev Lad,
Biju Das, linux-renesas-soc
Simplify rcar_canfd_probe() using of_get_available_child_by_name().
While at it, move of_node_put(child) inside the if block to avoid
additional check if of_child is NULL.
Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v2:
* Added to this series as dependency patch hit on can-next.
* Added Rb tag from Vincent Mailhol
* Dropped redundant comment from commit description.
---
drivers/net/can/rcar/rcar_canfd.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index 270f50d836f5..8b326977ddf7 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -1864,13 +1864,13 @@ static int rcar_canfd_probe(struct platform_device *pdev)
for (i = 0; i < info->max_channels; ++i) {
name[7] = '0' + i;
- of_child = of_get_child_by_name(dev->of_node, name);
- if (of_child && of_device_is_available(of_child)) {
+ of_child = of_get_available_child_by_name(dev->of_node, name);
+ if (of_child) {
channels_mask |= BIT(i);
transceivers[i] = devm_of_phy_optional_get(dev,
of_child, NULL);
+ of_node_put(of_child);
}
- of_node_put(of_child);
if (IS_ERR(transceivers[i]))
return PTR_ERR(transceivers[i]);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 4/7] can: rcar_canfd: Add gen4_type variable to struct rcar_canfd_hw_info
2025-02-20 13:04 [PATCH v2 0/7] Add support for RZ/G3E CANFD Biju Das
` (2 preceding siblings ...)
2025-02-20 13:04 ` [PATCH v2 3/7] can: rcar_canfd: Use of_get_available_child_by_name() Biju Das
@ 2025-02-20 13:04 ` Biju Das
2025-02-24 10:11 ` Geert Uytterhoeven
2025-02-20 13:04 ` [PATCH v2 5/7] can: rcar_canfd: Add only_internal_clks " Biju Das
` (2 subsequent siblings)
6 siblings, 1 reply; 16+ messages in thread
From: Biju Das @ 2025-02-20 13:04 UTC (permalink / raw)
To: Marc Kleine-Budde, Vincent Mailhol
Cc: Biju Das, Wolfram Sang, Geert Uytterhoeven, Uwe Kleine-König,
linux-can, Prabhakar Mahadev Lad, Biju Das, linux-renesas-soc
Both R-Car Gen4 and RZ/G3E SoCs have similar register layout. Introduce
gen4_type variable to struct rcar_canfd_hw_info for the preparation of
adding RZ/G3E driver support.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v1->v2:
* No change.
---
drivers/net/can/rcar/rcar_canfd.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index 8b326977ddf7..13eb6aa6ae45 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -516,6 +516,7 @@ struct rcar_canfd_hw_info {
/* hardware features */
unsigned shared_global_irqs:1; /* Has shared global irqs */
unsigned multi_channel_irqs:1; /* Has multiple channel irqs */
+ unsigned gen4_type:1; /* Has gen4 type reg layout */
};
/* Channel priv data */
@@ -596,6 +597,7 @@ static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
.max_channels = 8,
.postdiv = 2,
.shared_global_irqs = 1,
+ .gen4_type = 1,
};
static const struct rcar_canfd_hw_info rzg2l_hw_info = {
@@ -607,7 +609,7 @@ static const struct rcar_canfd_hw_info rzg2l_hw_info = {
/* Helper functions */
static inline bool is_gen4(struct rcar_canfd_global *gpriv)
{
- return gpriv->info == &rcar_gen4_hw_info;
+ return gpriv->info->gen4_type;
}
static inline u32 reg_gen4(struct rcar_canfd_global *gpriv,
--
2.43.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 5/7] can: rcar_canfd: Add only_internal_clks variable to struct rcar_canfd_hw_info
2025-02-20 13:04 [PATCH v2 0/7] Add support for RZ/G3E CANFD Biju Das
` (3 preceding siblings ...)
2025-02-20 13:04 ` [PATCH v2 4/7] can: rcar_canfd: Add gen4_type variable to struct rcar_canfd_hw_info Biju Das
@ 2025-02-20 13:04 ` Biju Das
2025-02-20 13:04 ` [PATCH v2 6/7] can: rcar_canfd: Enhance multi_channel_irqs handling Biju Das
2025-02-20 13:04 ` [PATCH v2 7/7] can: rcar_canfd: Add RZ/G3E support Biju Das
6 siblings, 0 replies; 16+ messages in thread
From: Biju Das @ 2025-02-20 13:04 UTC (permalink / raw)
To: Marc Kleine-Budde, Vincent Mailhol
Cc: Biju Das, Wolfram Sang, Geert Uytterhoeven, Uwe Kleine-König,
linux-can, Prabhakar Mahadev Lad, Biju Das, linux-renesas-soc
All SoCs supports extenal clock, but RZ/G3E has only internal clocks. Add
only_internal_clks to struct rcar_canfd_hw_info to handle this difference.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v1->v2:
* No change.
---
drivers/net/can/rcar/rcar_canfd.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index 13eb6aa6ae45..f353a9d560e8 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -517,6 +517,7 @@ struct rcar_canfd_hw_info {
unsigned shared_global_irqs:1; /* Has shared global irqs */
unsigned multi_channel_irqs:1; /* Has multiple channel irqs */
unsigned gen4_type:1; /* Has gen4 type reg layout */
+ unsigned only_internal_clks:1; /* Has only internal clocks */
};
/* Channel priv data */
@@ -1943,7 +1944,7 @@ static int rcar_canfd_probe(struct platform_device *pdev)
fcan_freq = clk_get_rate(gpriv->can_clk) / info->postdiv;
} else {
fcan_freq = clk_get_rate(gpriv->can_clk);
- gpriv->extclk = true;
+ gpriv->extclk = !gpriv->info->only_internal_clks;
}
addr = devm_platform_ioremap_resource(pdev, 0);
--
2.43.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 6/7] can: rcar_canfd: Enhance multi_channel_irqs handling
2025-02-20 13:04 [PATCH v2 0/7] Add support for RZ/G3E CANFD Biju Das
` (4 preceding siblings ...)
2025-02-20 13:04 ` [PATCH v2 5/7] can: rcar_canfd: Add only_internal_clks " Biju Das
@ 2025-02-20 13:04 ` Biju Das
2025-02-20 13:04 ` [PATCH v2 7/7] can: rcar_canfd: Add RZ/G3E support Biju Das
6 siblings, 0 replies; 16+ messages in thread
From: Biju Das @ 2025-02-20 13:04 UTC (permalink / raw)
To: Marc Kleine-Budde, Vincent Mailhol
Cc: Biju Das, Wolfram Sang, Geert Uytterhoeven, Uwe Kleine-König,
linux-can, Prabhakar Mahadev Lad, Biju Das, linux-renesas-soc
Currently multi_channel_irqs has only 2 channels. But RZ/G3E has six
channels. Enhance multi_channel_irqs handling to support more than two
channels.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v1->v2:
* No change.
---
drivers/net/can/rcar/rcar_canfd.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index f353a9d560e8..bf2561168e98 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -1748,16 +1748,19 @@ static int rcar_canfd_channel_probe(struct rcar_canfd_global *gpriv, u32 ch,
if (info->multi_channel_irqs) {
char *irq_name;
+ char name[10];
int err_irq;
int tx_irq;
- err_irq = platform_get_irq_byname(pdev, ch == 0 ? "ch0_err" : "ch1_err");
+ scnprintf(name, 10, "ch%u_err", ch);
+ err_irq = platform_get_irq_byname(pdev, name);
if (err_irq < 0) {
err = err_irq;
goto fail;
}
- tx_irq = platform_get_irq_byname(pdev, ch == 0 ? "ch0_trx" : "ch1_trx");
+ scnprintf(name, 10, "ch%u_trx", ch);
+ tx_irq = platform_get_irq_byname(pdev, name);
if (tx_irq < 0) {
err = tx_irq;
goto fail;
--
2.43.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 7/7] can: rcar_canfd: Add RZ/G3E support
2025-02-20 13:04 [PATCH v2 0/7] Add support for RZ/G3E CANFD Biju Das
` (5 preceding siblings ...)
2025-02-20 13:04 ` [PATCH v2 6/7] can: rcar_canfd: Enhance multi_channel_irqs handling Biju Das
@ 2025-02-20 13:04 ` Biju Das
6 siblings, 0 replies; 16+ messages in thread
From: Biju Das @ 2025-02-20 13:04 UTC (permalink / raw)
To: Marc Kleine-Budde, Vincent Mailhol
Cc: Biju Das, Wolfram Sang, Geert Uytterhoeven, Uwe Kleine-König,
linux-can, Prabhakar Mahadev Lad, Biju Das, linux-renesas-soc
The CAN-FD IP found on the RZ/G3E SoC is similar to R-Car Gen4, but
it has no external clock instead it has clk_ram, it has 6 channels
and supports 20 interrupts. Add support for RZ/G3E CAN-FD driver.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v1->v2:
* No change.
---
drivers/net/can/rcar/rcar_canfd.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index bf2561168e98..667d091bbcc9 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -607,6 +607,14 @@ static const struct rcar_canfd_hw_info rzg2l_hw_info = {
.multi_channel_irqs = 1,
};
+static const struct rcar_canfd_hw_info r9a09g047_hw_info = {
+ .max_channels = 6,
+ .postdiv = 1,
+ .multi_channel_irqs = 1,
+ .gen4_type = 1,
+ .only_internal_clks = 1,
+};
+
/* Helper functions */
static inline bool is_gen4(struct rcar_canfd_global *gpriv)
{
@@ -1861,6 +1869,7 @@ static int rcar_canfd_probe(struct platform_device *pdev)
u32 rule_entry = 0;
bool fdmode = true; /* CAN FD only mode - default */
char name[9] = "channelX";
+ struct clk *clk_ram;
int i;
info = of_device_get_match_data(dev);
@@ -1950,6 +1959,11 @@ static int rcar_canfd_probe(struct platform_device *pdev)
gpriv->extclk = !gpriv->info->only_internal_clks;
}
+ clk_ram = devm_clk_get_optional_enabled(dev, "ram_clk");
+ if (IS_ERR(clk_ram))
+ return dev_err_probe(dev, PTR_ERR(clk_ram),
+ "cannot get ram clock\n");
+
addr = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(addr)) {
err = PTR_ERR(addr);
@@ -2112,6 +2126,7 @@ static SIMPLE_DEV_PM_OPS(rcar_canfd_pm_ops, rcar_canfd_suspend,
static const __maybe_unused struct of_device_id rcar_canfd_of_table[] = {
{ .compatible = "renesas,r8a779a0-canfd", .data = &rcar_gen4_hw_info },
+ { .compatible = "renesas,r9a09g047-canfd", .data = &r9a09g047_hw_info },
{ .compatible = "renesas,rcar-gen3-canfd", .data = &rcar_gen3_hw_info },
{ .compatible = "renesas,rcar-gen4-canfd", .data = &rcar_gen4_hw_info },
{ .compatible = "renesas,rzg2l-canfd", .data = &rzg2l_hw_info },
--
2.43.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v2 3/7] can: rcar_canfd: Use of_get_available_child_by_name()
2025-02-20 13:04 ` [PATCH v2 3/7] can: rcar_canfd: Use of_get_available_child_by_name() Biju Das
@ 2025-02-20 13:17 ` Geert Uytterhoeven
0 siblings, 0 replies; 16+ messages in thread
From: Geert Uytterhoeven @ 2025-02-20 13:17 UTC (permalink / raw)
To: Biju Das
Cc: Marc Kleine-Budde, Vincent Mailhol, Wolfram Sang,
Uwe Kleine-König, Rob Herring, Ulrich Hecht, linux-can,
Prabhakar Mahadev Lad, Biju Das, linux-renesas-soc
On Thu, 20 Feb 2025 at 14:04, Biju Das <biju.das.jz@bp.renesas.com> wrote:
> Simplify rcar_canfd_probe() using of_get_available_child_by_name().
>
> While at it, move of_node_put(child) inside the if block to avoid
> additional check if of_child is NULL.
>
> Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
> v2:
> * Added to this series as dependency patch hit on can-next.
> * Added Rb tag from Vincent Mailhol
> * Dropped redundant comment from commit description.
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] 16+ messages in thread
* Re: [PATCH v2 1/7] dt-bindings: can: renesas,rcar-canfd: Simplify the conditional schema
2025-02-20 13:04 ` [PATCH v2 1/7] dt-bindings: can: renesas,rcar-canfd: Simplify the conditional schema Biju Das
@ 2025-02-21 17:51 ` Conor Dooley
0 siblings, 0 replies; 16+ messages in thread
From: Conor Dooley @ 2025-02-21 17:51 UTC (permalink / raw)
To: Biju Das
Cc: Marc Kleine-Budde, Vincent Mailhol, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven,
Magnus Damm, Fabrizio Castro, Simon Horman, Duy Nguyen, linux-can,
devicetree, linux-renesas-soc, Prabhakar Mahadev Lad, Biju Das
[-- Attachment #1: Type: text/plain, Size: 422 bytes --]
On Thu, Feb 20, 2025 at 01:04:17PM +0000, Biju Das wrote:
> RZ/G3E SoC has 20 interrupts, 2 resets and 6 channels that need more
> branching with conditional schema. Simplify the conditional schema with
> if statements rather than the complex if-else statements to prepare for
> supporting RZ/G3E SoC.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Acked-by: Conor Dooley <conor.dooley@microchip.com>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 2/7] dt-bindings: can: renesas,rcar-canfd: Document RZ/G3E support
2025-02-20 13:04 ` [PATCH v2 2/7] dt-bindings: can: renesas,rcar-canfd: Document RZ/G3E support Biju Das
@ 2025-02-21 17:53 ` Conor Dooley
2025-02-21 18:03 ` Biju Das
2025-02-21 23:18 ` Rob Herring
0 siblings, 2 replies; 16+ messages in thread
From: Conor Dooley @ 2025-02-21 17:53 UTC (permalink / raw)
To: Biju Das
Cc: Marc Kleine-Budde, Vincent Mailhol, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven,
Magnus Damm, Fabrizio Castro, Simon Horman, Duy Nguyen, linux-can,
devicetree, linux-renesas-soc, Prabhakar Mahadev Lad, Biju Das
[-- Attachment #1: Type: text/plain, Size: 4495 bytes --]
On Thu, Feb 20, 2025 at 01:04:18PM +0000, Biju Das wrote:
> Document support for the CAN-FD Interface on the RZ/G3E (R9A09G047) SoC,
> which supports up to six channels.
>
> The CAN-FD module on RZ/G3E is very similar to the one on both R-Car V4H
> and RZ/G2L, but differs in some hardware parameters:
> * No external clock, but instead has ram clock.
> * Support up to 6 channels.
> * 20 interrupts.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
> v1->v2:
> * No change.
> ---
> .../bindings/net/can/renesas,rcar-canfd.yaml | 67 +++++++++++++++++--
> 1 file changed, 62 insertions(+), 5 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
> index f87f90f431e5..189d5303ad75 100644
> --- a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
> +++ b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
> @@ -42,6 +42,8 @@ properties:
> - renesas,r9a07g054-canfd # RZ/V2L
> - const: renesas,rzg2l-canfd # RZ/G2L family
>
> + - const: renesas,r9a09g047-canfd # RZ/G3E
> +
> reg:
> maxItems: 1
>
> @@ -59,6 +61,19 @@ properties:
> - description: CAN1 error interrupt
> - description: CAN1 transmit interrupt
> - description: CAN1 transmit/receive FIFO receive completion interrupt
> + - description: CAN2 error interrupt
> + - description: CAN2 transmit interrupt
> + - description: CAN2 transmit/receive FIFO receive completion interrupt
> + - description: CAN3 error interrupt
> + - description: CAN3 transmit interrupt
> + - description: CAN3 transmit/receive FIFO receive completion interrupt
> + - description: CAN4 error interrupt
> + - description: CAN4 transmit interrupt
> + - description: CAN4 transmit/receive FIFO receive completion interrupt
> + - description: CAN5 error interrupt
> + - description: CAN5 transmit interrupt
> + - description: CAN5 transmit/receive FIFO receive completion interrupt
> + minItems: 8
>
> interrupt-names:
> oneOf:
> @@ -74,15 +89,33 @@ properties:
> - const: ch1_err
> - const: ch1_rec
> - const: ch1_trx
> + - const: ch2_err
> + - const: ch2_rec
> + - const: ch2_trx
> + - const: ch3_err
> + - const: ch3_rec
> + - const: ch3_trx
> + - const: ch4_err
> + - const: ch4_rec
> + - const: ch4_trx
> + - const: ch5_err
> + - const: ch5_rec
> + - const: ch5_trx
> + minItems: 8
>
> clocks:
> maxItems: 3
>
> clock-names:
> - items:
> - - const: fck
> - - const: canfd
> - - const: can_clk
> + oneOf:
> + - items:
> + - const: fck
> + - const: canfd
> + - const: can_clk
> + - items:
> + - const: fck
> + - const: ram_clk
> + - const: can_clk
>
> power-domains:
> maxItems: 1
> @@ -173,7 +206,9 @@ allOf:
> properties:
> compatible:
> contains:
> - const: renesas,rzg2l-canfd
> + enum:
> + - renesas,r9a09g047-canfd
> + - renesas,rzg2l-canfd
> then:
> properties:
> resets:
> @@ -187,6 +222,19 @@ allOf:
> required:
> - reset-names
>
> + - if:
> + properties:
> + compatible:
> + contains:
> + const: renesas,r9a09g047-canfd
> + then:
> + properties:
> + interrupts:
> + maxItems: 20
> +
> + interrupt-names:
> + maxItems: 20
Should these be minItems instead of maxItems? The list has 20 elements
at the moment (right?) so you're not adding any restriction here.
> +
> - if:
> properties:
> compatible:
> @@ -219,6 +267,15 @@ allOf:
> patternProperties:
> "^channel[4-7]$": false
>
> + - if:
> + properties:
> + compatible:
> + contains:
> + const: renesas,r9a09g047-canfd
> + then:
> + patternProperties:
> + "^channel[6-7]$": false
> +
> unevaluatedProperties: false
>
> examples:
> --
> 2.43.0
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* RE: [PATCH v2 2/7] dt-bindings: can: renesas,rcar-canfd: Document RZ/G3E support
2025-02-21 17:53 ` Conor Dooley
@ 2025-02-21 18:03 ` Biju Das
2025-02-21 23:18 ` Rob Herring
1 sibling, 0 replies; 16+ messages in thread
From: Biju Das @ 2025-02-21 18:03 UTC (permalink / raw)
To: Conor Dooley
Cc: Marc Kleine-Budde, Vincent Mailhol, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven,
Magnus Damm, Fabrizio Castro, Simon Horman, Duy Nguyen,
linux-can@vger.kernel.org, devicetree@vger.kernel.org,
linux-renesas-soc@vger.kernel.org, Prabhakar Mahadev Lad,
biju.das.au
Hi Conor Dooley,
Thanks for the feedback.
> -----Original Message-----
> From: Conor Dooley <conor@kernel.org>
> Sent: 21 February 2025 17:54
> Subject: Re: [PATCH v2 2/7] dt-bindings: can: renesas,rcar-canfd: Document RZ/G3E support
>
> On Thu, Feb 20, 2025 at 01:04:18PM +0000, Biju Das wrote:
> > Document support for the CAN-FD Interface on the RZ/G3E (R9A09G047)
> > SoC, which supports up to six channels.
> >
> > The CAN-FD module on RZ/G3E is very similar to the one on both R-Car
> > V4H and RZ/G2L, but differs in some hardware parameters:
> > * No external clock, but instead has ram clock.
> > * Support up to 6 channels.
> > * 20 interrupts.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> > v1->v2:
> > * No change.
> > ---
> > .../bindings/net/can/renesas,rcar-canfd.yaml | 67
> > +++++++++++++++++--
> > 1 file changed, 62 insertions(+), 5 deletions(-)
> >
> > diff --git
> > a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
> > b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
> > index f87f90f431e5..189d5303ad75 100644
> > ---
> > a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
> > +++ b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yam
> > +++ l
> > @@ -42,6 +42,8 @@ properties:
> > - renesas,r9a07g054-canfd # RZ/V2L
> > - const: renesas,rzg2l-canfd # RZ/G2L family
> >
> > + - const: renesas,r9a09g047-canfd # RZ/G3E
> > +
> > reg:
> > maxItems: 1
> >
> > @@ -59,6 +61,19 @@ properties:
> > - description: CAN1 error interrupt
> > - description: CAN1 transmit interrupt
> > - description: CAN1 transmit/receive FIFO receive
> > completion interrupt
> > + - description: CAN2 error interrupt
> > + - description: CAN2 transmit interrupt
> > + - description: CAN2 transmit/receive FIFO receive completion interrupt
> > + - description: CAN3 error interrupt
> > + - description: CAN3 transmit interrupt
> > + - description: CAN3 transmit/receive FIFO receive completion interrupt
> > + - description: CAN4 error interrupt
> > + - description: CAN4 transmit interrupt
> > + - description: CAN4 transmit/receive FIFO receive completion interrupt
> > + - description: CAN5 error interrupt
> > + - description: CAN5 transmit interrupt
> > + - description: CAN5 transmit/receive FIFO receive completion interrupt
> > + minItems: 8
> >
> > interrupt-names:
> > oneOf:
> > @@ -74,15 +89,33 @@ properties:
> > - const: ch1_err
> > - const: ch1_rec
> > - const: ch1_trx
> > + - const: ch2_err
> > + - const: ch2_rec
> > + - const: ch2_trx
> > + - const: ch3_err
> > + - const: ch3_rec
> > + - const: ch3_trx
> > + - const: ch4_err
> > + - const: ch4_rec
> > + - const: ch4_trx
> > + - const: ch5_err
> > + - const: ch5_rec
> > + - const: ch5_trx
> > + minItems: 8
> >
> > clocks:
> > maxItems: 3
> >
> > clock-names:
> > - items:
> > - - const: fck
> > - - const: canfd
> > - - const: can_clk
> > + oneOf:
> > + - items:
> > + - const: fck
> > + - const: canfd
> > + - const: can_clk
> > + - items:
> > + - const: fck
> > + - const: ram_clk
> > + - const: can_clk
> >
> > power-domains:
> > maxItems: 1
> > @@ -173,7 +206,9 @@ allOf:
> > properties:
> > compatible:
> > contains:
> > - const: renesas,rzg2l-canfd
> > + enum:
> > + - renesas,r9a09g047-canfd
> > + - renesas,rzg2l-canfd
> > then:
> > properties:
> > resets:
> > @@ -187,6 +222,19 @@ allOf:
> > required:
> > - reset-names
> >
> > + - if:
> > + properties:
> > + compatible:
> > + contains:
> > + const: renesas,r9a09g047-canfd
> > + then:
> > + properties:
> > + interrupts:
> > + maxItems: 20
> > +
> > + interrupt-names:
> > + maxItems: 20
>
> Should these be minItems instead of maxItems? The list has 20 elements at the moment (right?) so
> you're not adding any restriction here.
Yes, it should be minItems.
Cheers,
Biju
>
> > +
> > - if:
> > properties:
> > compatible:
> > @@ -219,6 +267,15 @@ allOf:
> > patternProperties:
> > "^channel[4-7]$": false
> >
> > + - if:
> > + properties:
> > + compatible:
> > + contains:
> > + const: renesas,r9a09g047-canfd
> > + then:
> > + patternProperties:
> > + "^channel[6-7]$": false
> > +
> > unevaluatedProperties: false
> >
> > examples:
> > --
> > 2.43.0
> >
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 2/7] dt-bindings: can: renesas,rcar-canfd: Document RZ/G3E support
2025-02-21 17:53 ` Conor Dooley
2025-02-21 18:03 ` Biju Das
@ 2025-02-21 23:18 ` Rob Herring
2025-02-22 8:20 ` Biju Das
1 sibling, 1 reply; 16+ messages in thread
From: Rob Herring @ 2025-02-21 23:18 UTC (permalink / raw)
To: Conor Dooley
Cc: Biju Das, Marc Kleine-Budde, Vincent Mailhol, Krzysztof Kozlowski,
Conor Dooley, Geert Uytterhoeven, Magnus Damm, Fabrizio Castro,
Simon Horman, Duy Nguyen, linux-can, devicetree,
linux-renesas-soc, Prabhakar Mahadev Lad, Biju Das
On Fri, Feb 21, 2025 at 05:53:43PM +0000, Conor Dooley wrote:
> On Thu, Feb 20, 2025 at 01:04:18PM +0000, Biju Das wrote:
> > Document support for the CAN-FD Interface on the RZ/G3E (R9A09G047) SoC,
> > which supports up to six channels.
> >
> > The CAN-FD module on RZ/G3E is very similar to the one on both R-Car V4H
> > and RZ/G2L, but differs in some hardware parameters:
> > * No external clock, but instead has ram clock.
> > * Support up to 6 channels.
> > * 20 interrupts.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> > v1->v2:
> > * No change.
> > ---
> > .../bindings/net/can/renesas,rcar-canfd.yaml | 67 +++++++++++++++++--
> > 1 file changed, 62 insertions(+), 5 deletions(-)
> >
> > diff --git a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
> > index f87f90f431e5..189d5303ad75 100644
> > --- a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
> > +++ b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
> > @@ -42,6 +42,8 @@ properties:
> > - renesas,r9a07g054-canfd # RZ/V2L
> > - const: renesas,rzg2l-canfd # RZ/G2L family
> >
> > + - const: renesas,r9a09g047-canfd # RZ/G3E
> > +
> > reg:
> > maxItems: 1
> >
> > @@ -59,6 +61,19 @@ properties:
> > - description: CAN1 error interrupt
> > - description: CAN1 transmit interrupt
> > - description: CAN1 transmit/receive FIFO receive completion interrupt
> > + - description: CAN2 error interrupt
> > + - description: CAN2 transmit interrupt
> > + - description: CAN2 transmit/receive FIFO receive completion interrupt
> > + - description: CAN3 error interrupt
> > + - description: CAN3 transmit interrupt
> > + - description: CAN3 transmit/receive FIFO receive completion interrupt
> > + - description: CAN4 error interrupt
> > + - description: CAN4 transmit interrupt
> > + - description: CAN4 transmit/receive FIFO receive completion interrupt
> > + - description: CAN5 error interrupt
> > + - description: CAN5 transmit interrupt
> > + - description: CAN5 transmit/receive FIFO receive completion interrupt
> > + minItems: 8
> >
> > interrupt-names:
> > oneOf:
> > @@ -74,15 +89,33 @@ properties:
> > - const: ch1_err
> > - const: ch1_rec
> > - const: ch1_trx
> > + - const: ch2_err
> > + - const: ch2_rec
> > + - const: ch2_trx
> > + - const: ch3_err
> > + - const: ch3_rec
> > + - const: ch3_trx
> > + - const: ch4_err
> > + - const: ch4_rec
> > + - const: ch4_trx
> > + - const: ch5_err
> > + - const: ch5_rec
> > + - const: ch5_trx
> > + minItems: 8
> >
> > clocks:
> > maxItems: 3
> >
> > clock-names:
> > - items:
> > - - const: fck
> > - - const: canfd
> > - - const: can_clk
> > + oneOf:
> > + - items:
> > + - const: fck
> > + - const: canfd
> > + - const: can_clk
> > + - items:
> > + - const: fck
> > + - const: ram_clk
> > + - const: can_clk
> >
> > power-domains:
> > maxItems: 1
> > @@ -173,7 +206,9 @@ allOf:
> > properties:
> > compatible:
> > contains:
> > - const: renesas,rzg2l-canfd
> > + enum:
> > + - renesas,r9a09g047-canfd
> > + - renesas,rzg2l-canfd
> > then:
> > properties:
> > resets:
> > @@ -187,6 +222,19 @@ allOf:
> > required:
> > - reset-names
> >
> > + - if:
> > + properties:
> > + compatible:
> > + contains:
> > + const: renesas,r9a09g047-canfd
> > + then:
> > + properties:
> > + interrupts:
> > + maxItems: 20
> > +
> > + interrupt-names:
> > + maxItems: 20
>
> Should these be minItems instead of maxItems? The list has 20 elements
> at the moment (right?) so you're not adding any restriction here.
And the existing platforms need to have 'maxItems: 8'.
^ permalink raw reply [flat|nested] 16+ messages in thread
* RE: [PATCH v2 2/7] dt-bindings: can: renesas,rcar-canfd: Document RZ/G3E support
2025-02-21 23:18 ` Rob Herring
@ 2025-02-22 8:20 ` Biju Das
0 siblings, 0 replies; 16+ messages in thread
From: Biju Das @ 2025-02-22 8:20 UTC (permalink / raw)
To: Rob Herring, Conor Dooley
Cc: Marc Kleine-Budde, Vincent Mailhol, Krzysztof Kozlowski,
Conor Dooley, Geert Uytterhoeven, Magnus Damm, Fabrizio Castro,
Simon Horman, Duy Nguyen, linux-can@vger.kernel.org,
devicetree@vger.kernel.org, linux-renesas-soc@vger.kernel.org,
Prabhakar Mahadev Lad, biju.das.au
Hi Rob,
Thanks for the feedback.
> -----Original Message-----
> From: Rob Herring <robh@kernel.org>
> Sent: 21 February 2025 23:19
> Subject: Re: [PATCH v2 2/7] dt-bindings: can: renesas,rcar-canfd: Document RZ/G3E support
>
> On Fri, Feb 21, 2025 at 05:53:43PM +0000, Conor Dooley wrote:
> > On Thu, Feb 20, 2025 at 01:04:18PM +0000, Biju Das wrote:
> > > Document support for the CAN-FD Interface on the RZ/G3E (R9A09G047)
> > > SoC, which supports up to six channels.
> > >
> > > The CAN-FD module on RZ/G3E is very similar to the one on both R-Car
> > > V4H and RZ/G2L, but differs in some hardware parameters:
> > > * No external clock, but instead has ram clock.
> > > * Support up to 6 channels.
> > > * 20 interrupts.
> > >
> > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > > ---
> > > v1->v2:
> > > * No change.
> > > ---
> > > .../bindings/net/can/renesas,rcar-canfd.yaml | 67
> > > +++++++++++++++++--
> > > 1 file changed, 62 insertions(+), 5 deletions(-)
> > >
> > > diff --git
> > > a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
> > > b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
> > > index f87f90f431e5..189d5303ad75 100644
> > > ---
> > > a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
> > > +++ b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.y
> > > +++ aml
> > > @@ -42,6 +42,8 @@ properties:
> > > - renesas,r9a07g054-canfd # RZ/V2L
> > > - const: renesas,rzg2l-canfd # RZ/G2L family
> > >
> > > + - const: renesas,r9a09g047-canfd # RZ/G3E
> > > +
> > > reg:
> > > maxItems: 1
> > >
> > > @@ -59,6 +61,19 @@ properties:
> > > - description: CAN1 error interrupt
> > > - description: CAN1 transmit interrupt
> > > - description: CAN1 transmit/receive FIFO receive
> > > completion interrupt
> > > + - description: CAN2 error interrupt
> > > + - description: CAN2 transmit interrupt
> > > + - description: CAN2 transmit/receive FIFO receive completion interrupt
> > > + - description: CAN3 error interrupt
> > > + - description: CAN3 transmit interrupt
> > > + - description: CAN3 transmit/receive FIFO receive completion interrupt
> > > + - description: CAN4 error interrupt
> > > + - description: CAN4 transmit interrupt
> > > + - description: CAN4 transmit/receive FIFO receive completion interrupt
> > > + - description: CAN5 error interrupt
> > > + - description: CAN5 transmit interrupt
> > > + - description: CAN5 transmit/receive FIFO receive completion interrupt
> > > + minItems: 8
> > >
> > > interrupt-names:
> > > oneOf:
> > > @@ -74,15 +89,33 @@ properties:
> > > - const: ch1_err
> > > - const: ch1_rec
> > > - const: ch1_trx
> > > + - const: ch2_err
> > > + - const: ch2_rec
> > > + - const: ch2_trx
> > > + - const: ch3_err
> > > + - const: ch3_rec
> > > + - const: ch3_trx
> > > + - const: ch4_err
> > > + - const: ch4_rec
> > > + - const: ch4_trx
> > > + - const: ch5_err
> > > + - const: ch5_rec
> > > + - const: ch5_trx
> > > + minItems: 8
> > >
> > > clocks:
> > > maxItems: 3
> > >
> > > clock-names:
> > > - items:
> > > - - const: fck
> > > - - const: canfd
> > > - - const: can_clk
> > > + oneOf:
> > > + - items:
> > > + - const: fck
> > > + - const: canfd
> > > + - const: can_clk
> > > + - items:
> > > + - const: fck
> > > + - const: ram_clk
> > > + - const: can_clk
> > >
> > > power-domains:
> > > maxItems: 1
> > > @@ -173,7 +206,9 @@ allOf:
> > > properties:
> > > compatible:
> > > contains:
> > > - const: renesas,rzg2l-canfd
> > > + enum:
> > > + - renesas,r9a09g047-canfd
> > > + - renesas,rzg2l-canfd
> > > then:
> > > properties:
> > > resets:
> > > @@ -187,6 +222,19 @@ allOf:
> > > required:
> > > - reset-names
> > >
> > > + - if:
> > > + properties:
> > > + compatible:
> > > + contains:
> > > + const: renesas,r9a09g047-canfd
> > > + then:
> > > + properties:
> > > + interrupts:
> > > + maxItems: 20
> > > +
> > > + interrupt-names:
> > > + maxItems: 20
> >
> > Should these be minItems instead of maxItems? The list has 20 elements
> > at the moment (right?) so you're not adding any restriction here.
>
> And the existing platforms need to have 'maxItems: 8'.
OK got.
platform 1: Here one of has min/max 2 interrupts. Platform 1 has 2 interrupts
interrupts:
minItems: 2
maxItems: 2
Platform 2: Here one of Has min/max 8/20 interrupts and platform 2 has 8 interrupts
interrupts:
maxItems: 8
Platform 3: Here one of Has min/max 8/20 interrupts and platform 3 has 20 interrupts
interrupts:
minItems: 20
Cheers,
Biju
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 4/7] can: rcar_canfd: Add gen4_type variable to struct rcar_canfd_hw_info
2025-02-20 13:04 ` [PATCH v2 4/7] can: rcar_canfd: Add gen4_type variable to struct rcar_canfd_hw_info Biju Das
@ 2025-02-24 10:11 ` Geert Uytterhoeven
2025-02-24 10:36 ` Biju Das
0 siblings, 1 reply; 16+ messages in thread
From: Geert Uytterhoeven @ 2025-02-24 10:11 UTC (permalink / raw)
To: Biju Das
Cc: Marc Kleine-Budde, Vincent Mailhol, Wolfram Sang,
Geert Uytterhoeven, Uwe Kleine-König, linux-can,
Prabhakar Mahadev Lad, Biju Das, linux-renesas-soc
Hi Biju,
On Thu, 20 Feb 2025 at 14:04, Biju Das <biju.das.jz@bp.renesas.com> wrote:
> Both R-Car Gen4 and RZ/G3E SoCs have similar register layout. Introduce
> gen4_type variable to struct rcar_canfd_hw_info for the preparation of
> adding RZ/G3E driver support.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Thanks for your patch!
> --- a/drivers/net/can/rcar/rcar_canfd.c
> +++ b/drivers/net/can/rcar/rcar_canfd.c
> @@ -516,6 +516,7 @@ struct rcar_canfd_hw_info {
> /* hardware features */
> unsigned shared_global_irqs:1; /* Has shared global irqs */
> unsigned multi_channel_irqs:1; /* Has multiple channel irqs */
> + unsigned gen4_type:1; /* Has gen4 type reg layout */
Perhaps this can be replaced by a (or more) more descriptive feature
flags, like you did before when introducing rcar_canfd_hw_info?
> };
>
> /* Channel priv data */
> @@ -596,6 +597,7 @@ static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
> .max_channels = 8,
> .postdiv = 2,
> .shared_global_irqs = 1,
> + .gen4_type = 1,
> };
>
> static const struct rcar_canfd_hw_info rzg2l_hw_info = {
> @@ -607,7 +609,7 @@ static const struct rcar_canfd_hw_info rzg2l_hw_info = {
> /* Helper functions */
> static inline bool is_gen4(struct rcar_canfd_global *gpriv)
> {
> - return gpriv->info == &rcar_gen4_hw_info;
> + return gpriv->info->gen4_type;
> }
And hopefully we can get rid of is_gen4() in the process, too...
>
> static inline u32 reg_gen4(struct rcar_canfd_global *gpriv,
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] 16+ messages in thread
* RE: [PATCH v2 4/7] can: rcar_canfd: Add gen4_type variable to struct rcar_canfd_hw_info
2025-02-24 10:11 ` Geert Uytterhoeven
@ 2025-02-24 10:36 ` Biju Das
0 siblings, 0 replies; 16+ messages in thread
From: Biju Das @ 2025-02-24 10:36 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Marc Kleine-Budde, Vincent Mailhol, Wolfram Sang,
Geert Uytterhoeven, Uwe Kleine-König,
linux-can@vger.kernel.org, Prabhakar Mahadev Lad, biju.das.au,
linux-renesas-soc@vger.kernel.org
Hi Geert,
Thanks for the feedback.
> -----Original Message-----
> From: Geert Uytterhoeven <geert@linux-m68k.org>
> Sent: 24 February 2025 10:12
> Subject: Re: [PATCH v2 4/7] can: rcar_canfd: Add gen4_type variable to struct rcar_canfd_hw_info
>
> Hi Biju,
>
> On Thu, 20 Feb 2025 at 14:04, Biju Das <biju.das.jz@bp.renesas.com> wrote:
> > Both R-Car Gen4 and RZ/G3E SoCs have similar register layout.
> > Introduce gen4_type variable to struct rcar_canfd_hw_info for the
> > preparation of adding RZ/G3E driver support.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
>
> Thanks for your patch!
>
> > --- a/drivers/net/can/rcar/rcar_canfd.c
> > +++ b/drivers/net/can/rcar/rcar_canfd.c
> > @@ -516,6 +516,7 @@ struct rcar_canfd_hw_info {
> > /* hardware features */
> > unsigned shared_global_irqs:1; /* Has shared global irqs */
> > unsigned multi_channel_irqs:1; /* Has multiple channel irqs
> > */
> > + unsigned gen4_type:1; /* Has gen4 type reg layout */
>
> Perhaps this can be replaced by a (or more) more descriptive feature flags, like you did before when
> introducing rcar_canfd_hw_info?
OK, Looking at commit log and hardware manual will do this change to add more descriptive feature flags.
>
> > };
> >
> > /* Channel priv data */
> > @@ -596,6 +597,7 @@ static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
> > .max_channels = 8,
> > .postdiv = 2,
> > .shared_global_irqs = 1,
> > + .gen4_type = 1,
> > };
> >
> > static const struct rcar_canfd_hw_info rzg2l_hw_info = { @@ -607,7
> > +609,7 @@ static const struct rcar_canfd_hw_info rzg2l_hw_info = {
> > /* Helper functions */
> > static inline bool is_gen4(struct rcar_canfd_global *gpriv) {
> > - return gpriv->info == &rcar_gen4_hw_info;
> > + return gpriv->info->gen4_type;
> > }
>
> And hopefully we can get rid of is_gen4() in the process, too...
Agreed.
Cheers,
Biju
>
> >
> > static inline u32 reg_gen4(struct rcar_canfd_global *gpriv,
>
> 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] 16+ messages in thread
end of thread, other threads:[~2025-02-24 10:36 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-20 13:04 [PATCH v2 0/7] Add support for RZ/G3E CANFD Biju Das
2025-02-20 13:04 ` [PATCH v2 1/7] dt-bindings: can: renesas,rcar-canfd: Simplify the conditional schema Biju Das
2025-02-21 17:51 ` Conor Dooley
2025-02-20 13:04 ` [PATCH v2 2/7] dt-bindings: can: renesas,rcar-canfd: Document RZ/G3E support Biju Das
2025-02-21 17:53 ` Conor Dooley
2025-02-21 18:03 ` Biju Das
2025-02-21 23:18 ` Rob Herring
2025-02-22 8:20 ` Biju Das
2025-02-20 13:04 ` [PATCH v2 3/7] can: rcar_canfd: Use of_get_available_child_by_name() Biju Das
2025-02-20 13:17 ` Geert Uytterhoeven
2025-02-20 13:04 ` [PATCH v2 4/7] can: rcar_canfd: Add gen4_type variable to struct rcar_canfd_hw_info Biju Das
2025-02-24 10:11 ` Geert Uytterhoeven
2025-02-24 10:36 ` Biju Das
2025-02-20 13:04 ` [PATCH v2 5/7] can: rcar_canfd: Add only_internal_clks " Biju Das
2025-02-20 13:04 ` [PATCH v2 6/7] can: rcar_canfd: Enhance multi_channel_irqs handling Biju Das
2025-02-20 13:04 ` [PATCH v2 7/7] can: rcar_canfd: Add RZ/G3E support Biju Das
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox