* [PATCH net-next 1/8] dt-bindings: can: renesas,rcar-canfd: Document renesas,fd-only property
2026-01-31 10:11 [PATCH net-next 0/8] pull-request: can-next 2026-01-31 Marc Kleine-Budde
@ 2026-01-31 10:11 ` Marc Kleine-Budde
2026-01-31 21:10 ` patchwork-bot+netdevbpf
2026-01-31 10:11 ` [PATCH net-next 2/8] can: rcar_canfd: Add support for FD-Only mode Marc Kleine-Budde
` (6 subsequent siblings)
7 siblings, 1 reply; 10+ messages in thread
From: Marc Kleine-Budde @ 2026-01-31 10:11 UTC (permalink / raw)
To: netdev
Cc: davem, kuba, linux-can, kernel, Biju Das, Krzysztof Kozlowski,
Marc Kleine-Budde
From: Biju Das <biju.das.jz@bp.renesas.com>
The CANFD on RZ/{G2L,G3E} and R-Car Gen4 support 3 modes FD-Only mode,
Classical CAN mode and CAN-FD mode. In FD-Only mode, communication in
Classical CAN frame format is disabled. Document renesas,fd-only to handle
this mode. As these SoCs support 3 modes, update the description of
renesas,no-can-fd property and disallow it for R-Car Gen3.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Link: https://patch.msgid.link/20251126155911.320563-2-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
.../bindings/net/can/renesas,rcar-canfd.yaml | 38 +++++++++++++++++--
1 file changed, 35 insertions(+), 3 deletions(-)
diff --git a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
index f4ac21c68427..e129bdceef84 100644
--- a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
+++ b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
@@ -125,9 +125,17 @@ properties:
renesas,no-can-fd:
$ref: /schemas/types.yaml#/definitions/flag
description:
- The controller can operate in either CAN FD only mode (default) or
- Classical CAN only mode. The mode is global to all channels.
- Specify this property to put the controller in Classical CAN only mode.
+ The controller can operate in either CAN-FD mode (default) or FD-Only
+ mode (RZ/{G2L,G3E} and R-Car Gen4) or Classical CAN mode. Specify this
+ property to put the controller in Classical CAN mode.
+
+ renesas,fd-only:
+ $ref: /schemas/types.yaml#/definitions/flag
+ description:
+ The CANFD on RZ/{G2L,G3E} and R-Car Gen4 SoCs support 3 modes FD-Only
+ mode, Classical CAN mode and CAN-FD mode (default). In FD-Only mode,
+ communication in Classical CAN frame format is disabled. Specify this
+ property to put the controller in FD-Only mode.
assigned-clocks:
description:
@@ -267,6 +275,30 @@ allOf:
patternProperties:
"^channel[6-7]$": false
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - renesas,rcar-gen3-canfd
+ then:
+ properties:
+ renesas,fd-only: false
+
+ - if:
+ required:
+ - renesas,no-can-fd
+ then:
+ properties:
+ renesas,fd-only: false
+
+ - if:
+ required:
+ - renesas,fd-only
+ then:
+ properties:
+ renesas,no-can-fd: false
+
unevaluatedProperties: false
examples:
base-commit: 74ecff77dace0f9aead6aac852b57af5d4ad3b85
--
2.51.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* Re: [PATCH net-next 1/8] dt-bindings: can: renesas,rcar-canfd: Document renesas,fd-only property
2026-01-31 10:11 ` [PATCH net-next 1/8] dt-bindings: can: renesas,rcar-canfd: Document renesas,fd-only property Marc Kleine-Budde
@ 2026-01-31 21:10 ` patchwork-bot+netdevbpf
0 siblings, 0 replies; 10+ messages in thread
From: patchwork-bot+netdevbpf @ 2026-01-31 21:10 UTC (permalink / raw)
To: Marc Kleine-Budde
Cc: netdev, davem, kuba, linux-can, kernel, biju.das.jz,
krzysztof.kozlowski
Hello:
This series was applied to netdev/net-next.git (main)
by Marc Kleine-Budde <mkl@pengutronix.de>:
On Sat, 31 Jan 2026 11:11:42 +0100 you wrote:
> From: Biju Das <biju.das.jz@bp.renesas.com>
>
> The CANFD on RZ/{G2L,G3E} and R-Car Gen4 support 3 modes FD-Only mode,
> Classical CAN mode and CAN-FD mode. In FD-Only mode, communication in
> Classical CAN frame format is disabled. Document renesas,fd-only to handle
> this mode. As these SoCs support 3 modes, update the description of
> renesas,no-can-fd property and disallow it for R-Car Gen3.
>
> [...]
Here is the summary with links:
- [net-next,1/8] dt-bindings: can: renesas,rcar-canfd: Document renesas,fd-only property
https://git.kernel.org/netdev/net-next/c/1766de15a571
- [net-next,2/8] can: rcar_canfd: Add support for FD-Only mode
https://git.kernel.org/netdev/net-next/c/9a2b56a48c21
- [net-next,3/8] dt-bindings: can: renesas,rcar-canfd: Specify reset-names
https://git.kernel.org/netdev/net-next/c/af6b427c7ad0
- [net-next,4/8] dt-bindings: can: renesas,rcar-canfd: Document RZ/V2H(P) and RZ/V2N SoCs
https://git.kernel.org/netdev/net-next/c/c74ab6275c34
- [net-next,5/8] dt-bindings: can: renesas,rcar-canfd: Document RZ/T2H and RZ/N2H SoCs
https://git.kernel.org/netdev/net-next/c/1e3710b1fe91
- [net-next,6/8] can: rcar_canfd: Add RZ/T2H support
https://git.kernel.org/netdev/net-next/c/e8e46378825b
- [net-next,7/8] can: sja1000: sja1000_err(): make use of sja1000_get_berr_counter() to read error counters
https://git.kernel.org/netdev/net-next/c/a6c89d75fd33
- [net-next,8/8] can: sja1000: sja1000_err(): use error counter for error state
https://git.kernel.org/netdev/net-next/c/22ca24978337
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH net-next 2/8] can: rcar_canfd: Add support for FD-Only mode
2026-01-31 10:11 [PATCH net-next 0/8] pull-request: can-next 2026-01-31 Marc Kleine-Budde
2026-01-31 10:11 ` [PATCH net-next 1/8] dt-bindings: can: renesas,rcar-canfd: Document renesas,fd-only property Marc Kleine-Budde
@ 2026-01-31 10:11 ` Marc Kleine-Budde
2026-01-31 10:11 ` [PATCH net-next 3/8] dt-bindings: can: renesas,rcar-canfd: Specify reset-names Marc Kleine-Budde
` (5 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Marc Kleine-Budde @ 2026-01-31 10:11 UTC (permalink / raw)
To: netdev; +Cc: davem, kuba, linux-can, kernel, Biju Das, Marc Kleine-Budde
From: Biju Das <biju.das.jz@bp.renesas.com>
The RZ/{G2L,G3E} and R-Car Gen4 SoCs support additional CAN FD mode called
FD-only mode. In this mode, communication in Classical CAN frame format is
disabled.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20251126155911.320563-3-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/rcar/rcar_canfd.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index 7895e1fdea1c..4a653d8978ba 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -472,6 +472,7 @@ struct rcar_canfd_global {
unsigned long channels_mask; /* Enabled channels mask */
bool extclk; /* CANFD or Ext clock */
bool fdmode; /* CAN FD or Classical CAN only mode */
+ bool fd_only_mode; /* FD-Only mode for CAN-FD */
struct reset_control *rstc1;
struct reset_control *rstc2;
const struct rcar_canfd_hw_info *info;
@@ -829,12 +830,20 @@ static int rcar_canfd_reset_controller(struct rcar_canfd_global *gpriv)
RCANFD_GEN4_FDCFG_FDOE);
rcar_canfd_set_bit_reg(&gpriv->fcbase[ch].cfdcfg,
RCANFD_GEN4_FDCFG_CLOE);
+ } else if (gpriv->fd_only_mode) {
+ rcar_canfd_clear_bit_reg(&gpriv->fcbase[ch].cfdcfg,
+ RCANFD_GEN4_FDCFG_CLOE);
+ rcar_canfd_set_bit_reg(&gpriv->fcbase[ch].cfdcfg,
+ RCANFD_GEN4_FDCFG_FDOE);
} else {
rcar_canfd_clear_bit_reg(&gpriv->fcbase[ch].cfdcfg,
RCANFD_GEN4_FDCFG_FDOE);
rcar_canfd_clear_bit_reg(&gpriv->fcbase[ch].cfdcfg,
RCANFD_GEN4_FDCFG_CLOE);
}
+ } else if (gpriv->fd_only_mode) {
+ rcar_canfd_set_bit_reg(&gpriv->fcbase[ch].cfdcfg,
+ RCANFD_GEN4_FDCFG_FDOE);
}
}
@@ -2140,6 +2149,9 @@ static int rcar_canfd_probe(struct platform_device *pdev)
gpriv->fdmode = fdmode;
gpriv->info = info;
+ if (of_property_read_bool(dev->of_node, "renesas,fd-only"))
+ gpriv->fd_only_mode = true; /* FD-Only mode for CAN-FD */
+
gpriv->rstc1 = devm_reset_control_get_optional_exclusive(dev, "rstp_n");
if (IS_ERR(gpriv->rstc1))
return dev_err_probe(dev, PTR_ERR(gpriv->rstc1),
@@ -2239,7 +2251,7 @@ static int rcar_canfd_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, gpriv);
dev_info(dev, "global operational state (%s clk, %s mode)\n",
gpriv->extclk ? "ext" : "canfd",
- gpriv->fdmode ? "fd" : "classical");
+ gpriv->fdmode ? (gpriv->fd_only_mode ? "fd-only" : "fd") : "classical");
return 0;
fail_channel:
--
2.51.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH net-next 3/8] dt-bindings: can: renesas,rcar-canfd: Specify reset-names
2026-01-31 10:11 [PATCH net-next 0/8] pull-request: can-next 2026-01-31 Marc Kleine-Budde
2026-01-31 10:11 ` [PATCH net-next 1/8] dt-bindings: can: renesas,rcar-canfd: Document renesas,fd-only property Marc Kleine-Budde
2026-01-31 10:11 ` [PATCH net-next 2/8] can: rcar_canfd: Add support for FD-Only mode Marc Kleine-Budde
@ 2026-01-31 10:11 ` Marc Kleine-Budde
2026-01-31 10:11 ` [PATCH net-next 4/8] dt-bindings: can: renesas,rcar-canfd: Document RZ/V2H(P) and RZ/V2N SoCs Marc Kleine-Budde
` (4 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Marc Kleine-Budde @ 2026-01-31 10:11 UTC (permalink / raw)
To: netdev
Cc: davem, kuba, linux-can, kernel, Lad Prabhakar,
Krzysztof Kozlowski, Geert Uytterhoeven, Marc Kleine-Budde
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Specify the expected reset-names for the Renesas CAN-FD controller on
RZ/G2L and RZ/G3E SoCs.
The reset names rstp_n and rstc_n are defined in the SoC hardware manual
and are already used by the driver since commit 76e9353a80e9 ("can:
rcar_canfd: Add support for RZ/G2L family"). The reset-names property
existed previously but was dropped by commit 466c8ef7b66b ("dt-bindings:
can: renesas,rcar-canfd: Simplify the conditional schema").
Restore and constrain reset-names in the binding so DT schema checks
match the actual hardware requirements and driver expectations.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://patch.msgid.link/20260114154525.3169992-2-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
.../bindings/net/can/renesas,rcar-canfd.yaml | 33 +++++++++++--------
1 file changed, 19 insertions(+), 14 deletions(-)
diff --git a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
index e129bdceef84..9bfd4f44e4d4 100644
--- a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
+++ b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
@@ -122,6 +122,11 @@ properties:
resets: true
+ reset-names:
+ items:
+ - const: rstp_n
+ - const: rstc_n
+
renesas,no-can-fd:
$ref: /schemas/types.yaml#/definitions/flag
description:
@@ -195,13 +200,6 @@ allOf:
minItems: 2
maxItems: 2
- reset-names:
- minItems: 2
- maxItems: 2
-
- required:
- - reset-names
-
- if:
properties:
compatible:
@@ -239,13 +237,6 @@ allOf:
minItems: 2
maxItems: 2
- reset-names:
- minItems: 2
- maxItems: 2
-
- required:
- - reset-names
-
- if:
properties:
compatible:
@@ -299,6 +290,20 @@ allOf:
properties:
renesas,no-can-fd: false
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - renesas,r9a09g047-canfd
+ - renesas,rzg2l-canfd
+ then:
+ required:
+ - reset-names
+ else:
+ properties:
+ reset-names: false
+
unevaluatedProperties: false
examples:
--
2.51.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH net-next 4/8] dt-bindings: can: renesas,rcar-canfd: Document RZ/V2H(P) and RZ/V2N SoCs
2026-01-31 10:11 [PATCH net-next 0/8] pull-request: can-next 2026-01-31 Marc Kleine-Budde
` (2 preceding siblings ...)
2026-01-31 10:11 ` [PATCH net-next 3/8] dt-bindings: can: renesas,rcar-canfd: Specify reset-names Marc Kleine-Budde
@ 2026-01-31 10:11 ` Marc Kleine-Budde
2026-01-31 10:11 ` [PATCH net-next 5/8] dt-bindings: can: renesas,rcar-canfd: Document RZ/T2H and RZ/N2H SoCs Marc Kleine-Budde
` (3 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Marc Kleine-Budde @ 2026-01-31 10:11 UTC (permalink / raw)
To: netdev
Cc: davem, kuba, linux-can, kernel, Lad Prabhakar,
Krzysztof Kozlowski, Geert Uytterhoeven, Marc Kleine-Budde
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Document CANFD IP found on the Renesas RZ/V2H(P) (R9A09G057) and RZ/V2N
(R9A09G056) SoCs. The CANFD IP on these SoCs are identical to that found
on the RZ/G3E (R9A09G047) SoC.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://patch.msgid.link/20260114154525.3169992-3-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
.../devicetree/bindings/net/can/renesas,rcar-canfd.yaml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
index 9bfd4f44e4d4..fb709cfd26d7 100644
--- a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
+++ b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
@@ -44,6 +44,12 @@ properties:
- const: renesas,r9a09g047-canfd # RZ/G3E
+ - items:
+ - enum:
+ - renesas,r9a09g056-canfd # RZ/V2N
+ - renesas,r9a09g057-canfd # RZ/V2H(P)
+ - const: renesas,r9a09g047-canfd
+
reg:
maxItems: 1
--
2.51.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH net-next 5/8] dt-bindings: can: renesas,rcar-canfd: Document RZ/T2H and RZ/N2H SoCs
2026-01-31 10:11 [PATCH net-next 0/8] pull-request: can-next 2026-01-31 Marc Kleine-Budde
` (3 preceding siblings ...)
2026-01-31 10:11 ` [PATCH net-next 4/8] dt-bindings: can: renesas,rcar-canfd: Document RZ/V2H(P) and RZ/V2N SoCs Marc Kleine-Budde
@ 2026-01-31 10:11 ` Marc Kleine-Budde
2026-01-31 10:11 ` [PATCH net-next 6/8] can: rcar_canfd: Add RZ/T2H support Marc Kleine-Budde
` (2 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Marc Kleine-Budde @ 2026-01-31 10:11 UTC (permalink / raw)
To: netdev
Cc: davem, kuba, linux-can, kernel, Lad Prabhakar, Geert Uytterhoeven,
Krzysztof Kozlowski, Marc Kleine-Budde
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Document the CAN-FD controller used on the RZ/T2H and RZ/N2H SoCs. The
CAN-FD IP is largely compatible with the R-Car Gen4 block, but differs
in that AFLPN and CFTML are different, there is no reset line for the IP,
and it only supports two channels.
Sync the resets and reset-names schema handling with other CAN-FD SoCs so
DT validation stays consistent and maintainable.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Link: https://patch.msgid.link/20260114154525.3169992-4-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
.../bindings/net/can/renesas,rcar-canfd.yaml | 48 +++++++++++++++++--
1 file changed, 44 insertions(+), 4 deletions(-)
diff --git a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
index fb709cfd26d7..b9d9dd7a7967 100644
--- a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
+++ b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
@@ -12,6 +12,10 @@ maintainers:
properties:
compatible:
oneOf:
+ - enum:
+ - renesas,r9a09g047-canfd # RZ/G3E
+ - renesas,r9a09g077-canfd # RZ/T2H
+
- items:
- enum:
- renesas,r8a774a1-canfd # RZ/G2M
@@ -42,14 +46,16 @@ properties:
- renesas,r9a07g054-canfd # RZ/V2L
- const: renesas,rzg2l-canfd # RZ/G2L family
- - const: renesas,r9a09g047-canfd # RZ/G3E
-
- items:
- enum:
- renesas,r9a09g056-canfd # RZ/V2N
- renesas,r9a09g057-canfd # RZ/V2H(P)
- const: renesas,r9a09g047-canfd
+ - items:
+ - const: renesas,r9a09g087-canfd # RZ/N2H
+ - const: renesas,r9a09g077-canfd
+
reg:
maxItems: 1
@@ -179,7 +185,6 @@ required:
- clocks
- clock-names
- power-domains
- - resets
- assigned-clocks
- assigned-clock-rates
- channel0
@@ -243,11 +248,25 @@ allOf:
minItems: 2
maxItems: 2
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: renesas,r9a09g077-canfd
+ then:
+ properties:
+ interrupts:
+ maxItems: 8
+
+ interrupt-names:
+ maxItems: 8
+
- if:
properties:
compatible:
contains:
enum:
+ - renesas,r9a09g077-canfd
- renesas,rcar-gen3-canfd
- renesas,rzg2l-canfd
then:
@@ -296,6 +315,16 @@ allOf:
properties:
renesas,no-can-fd: false
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: renesas,r9a09g077-canfd
+ then:
+ properties:
+ resets: false
+ reset-names: false
+
- if:
properties:
compatible:
@@ -305,8 +334,19 @@ allOf:
- renesas,rzg2l-canfd
then:
required:
+ - resets
- reset-names
- else:
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - renesas,rcar-gen3-canfd
+ - renesas,rcar-gen4-canfd
+ then:
+ required:
+ - resets
properties:
reset-names: false
--
2.51.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH net-next 6/8] can: rcar_canfd: Add RZ/T2H support
2026-01-31 10:11 [PATCH net-next 0/8] pull-request: can-next 2026-01-31 Marc Kleine-Budde
` (4 preceding siblings ...)
2026-01-31 10:11 ` [PATCH net-next 5/8] dt-bindings: can: renesas,rcar-canfd: Document RZ/T2H and RZ/N2H SoCs Marc Kleine-Budde
@ 2026-01-31 10:11 ` Marc Kleine-Budde
2026-01-31 10:11 ` [PATCH net-next 7/8] can: sja1000: sja1000_err(): make use of sja1000_get_berr_counter() to read error counters Marc Kleine-Budde
2026-01-31 10:11 ` [PATCH net-next 8/8] can: sja1000: sja1000_err(): use error counter for error state Marc Kleine-Budde
7 siblings, 0 replies; 10+ messages in thread
From: Marc Kleine-Budde @ 2026-01-31 10:11 UTC (permalink / raw)
To: netdev
Cc: davem, kuba, linux-can, kernel, Lad Prabhakar, Geert Uytterhoeven,
Marc Kleine-Budde
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
The CAN-FD IP on the RZ/T2H SoC is similar to R-Car Gen4, but differs in
the AFLPN and CFTML bits and supports two channels with eight interrupts.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://patch.msgid.link/20260114154525.3169992-5-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/rcar/rcar_canfd.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index 4a653d8978ba..eaf8cac78038 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -670,6 +670,23 @@ static const struct rcar_canfd_hw_info r9a09g047_hw_info = {
.external_clk = 0,
};
+static const struct rcar_canfd_hw_info r9a09g077_hw_info = {
+ .nom_bittiming = &rcar_canfd_gen4_nom_bittiming_const,
+ .data_bittiming = &rcar_canfd_gen4_data_bittiming_const,
+ .tdc_const = &rcar_canfd_gen4_tdc_const,
+ .regs = &rcar_gen4_regs,
+ .sh = &rcar_gen4_shift_data,
+ .rnc_field_width = 16,
+ .max_aflpn = 15,
+ .max_cftml = 31,
+ .max_channels = 2,
+ .postdiv = 1,
+ .multi_channel_irqs = 1,
+ .ch_interface_mode = 1,
+ .shared_can_regs = 1,
+ .external_clk = 1,
+};
+
/* Helper functions */
static inline void rcar_canfd_update(u32 mask, u32 val, u32 __iomem *reg)
{
@@ -2345,6 +2362,7 @@ static DEFINE_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,r9a09g077-canfd", .data = &r9a09g077_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.51.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH net-next 7/8] can: sja1000: sja1000_err(): make use of sja1000_get_berr_counter() to read error counters
2026-01-31 10:11 [PATCH net-next 0/8] pull-request: can-next 2026-01-31 Marc Kleine-Budde
` (5 preceding siblings ...)
2026-01-31 10:11 ` [PATCH net-next 6/8] can: rcar_canfd: Add RZ/T2H support Marc Kleine-Budde
@ 2026-01-31 10:11 ` Marc Kleine-Budde
2026-01-31 10:11 ` [PATCH net-next 8/8] can: sja1000: sja1000_err(): use error counter for error state Marc Kleine-Budde
7 siblings, 0 replies; 10+ messages in thread
From: Marc Kleine-Budde @ 2026-01-31 10:11 UTC (permalink / raw)
To: netdev; +Cc: davem, kuba, linux-can, kernel, Marc Kleine-Budde,
Michael Tretter
This is a preparation patch to make use of can_state_get_by_berr_counter()
which works on a struct can_berr_counter.
Reuse the existing function sja1000_get_berr_counter() to read the error
counters into a struct can_berr_counter.
Reviewed-by: Michael Tretter <m.tretter@pengutronix.de>
Link: https://patch.msgid.link/20260123-sja1000-state-handling-v2-1-687498087dad@pengutronix.de
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/sja1000/sja1000.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/drivers/net/can/sja1000/sja1000.c b/drivers/net/can/sja1000/sja1000.c
index a8fa0d6516b9..ae3244b63b65 100644
--- a/drivers/net/can/sja1000/sja1000.c
+++ b/drivers/net/can/sja1000/sja1000.c
@@ -411,14 +411,13 @@ static int sja1000_err(struct net_device *dev, uint8_t isrc, uint8_t status)
struct sk_buff *skb;
enum can_state state = priv->can.state;
enum can_state rx_state, tx_state;
- unsigned int rxerr, txerr;
+ struct can_berr_counter bec;
uint8_t ecc, alc;
int ret = 0;
skb = alloc_can_err_skb(dev, &cf);
- txerr = priv->read_reg(priv, SJA1000_TXERR);
- rxerr = priv->read_reg(priv, SJA1000_RXERR);
+ sja1000_get_berr_counter(dev, &bec);
if (isrc & IRQ_DOI) {
/* data overrun interrupt */
@@ -455,8 +454,8 @@ static int sja1000_err(struct net_device *dev, uint8_t isrc, uint8_t status)
}
if (state != CAN_STATE_BUS_OFF && skb) {
cf->can_id |= CAN_ERR_CNT;
- cf->data[6] = txerr;
- cf->data[7] = rxerr;
+ cf->data[6] = bec.txerr;
+ cf->data[7] = bec.rxerr;
}
if (isrc & IRQ_BEI) {
/* bus error interrupt */
@@ -515,8 +514,8 @@ static int sja1000_err(struct net_device *dev, uint8_t isrc, uint8_t status)
}
if (state != priv->can.state) {
- tx_state = txerr >= rxerr ? state : 0;
- rx_state = txerr <= rxerr ? state : 0;
+ tx_state = bec.txerr >= bec.rxerr ? state : 0;
+ rx_state = bec.txerr <= bec.rxerr ? state : 0;
can_change_state(dev, cf, tx_state, rx_state);
--
2.51.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH net-next 8/8] can: sja1000: sja1000_err(): use error counter for error state
2026-01-31 10:11 [PATCH net-next 0/8] pull-request: can-next 2026-01-31 Marc Kleine-Budde
` (6 preceding siblings ...)
2026-01-31 10:11 ` [PATCH net-next 7/8] can: sja1000: sja1000_err(): make use of sja1000_get_berr_counter() to read error counters Marc Kleine-Budde
@ 2026-01-31 10:11 ` Marc Kleine-Budde
7 siblings, 0 replies; 10+ messages in thread
From: Marc Kleine-Budde @ 2026-01-31 10:11 UTC (permalink / raw)
To: netdev
Cc: davem, kuba, linux-can, kernel, Michael Tretter,
Achim Baumgartner, Marc Kleine-Budde
From: Michael Tretter <m.tretter@pengutronix.de>
The CAN controller sends the EPI interrupt whenever it reaches the error
passive status or enters the error active status from the error passive
status.
Instead of keeping track of the controller status in the driver, read the
txerr and rxerr counters and use can_state_get_by_berr_counter() to
determine the state of the CAN controller.
Suggested-by: Achim Baumgartner <abaumgartner@topcon.com>
Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
Link: https://patch.msgid.link/20260123-sja1000-state-handling-v2-2-687498087dad@pengutronix.de
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/sja1000/sja1000.c | 33 +++++++------------------------
1 file changed, 7 insertions(+), 26 deletions(-)
diff --git a/drivers/net/can/sja1000/sja1000.c b/drivers/net/can/sja1000/sja1000.c
index ae3244b63b65..67fccc15ed20 100644
--- a/drivers/net/can/sja1000/sja1000.c
+++ b/drivers/net/can/sja1000/sja1000.c
@@ -407,10 +407,9 @@ static int sja1000_err(struct net_device *dev, uint8_t isrc, uint8_t status)
{
struct sja1000_priv *priv = netdev_priv(dev);
struct net_device_stats *stats = &dev->stats;
+ enum can_state state, rx_state, tx_state;
struct can_frame *cf;
struct sk_buff *skb;
- enum can_state state = priv->can.state;
- enum can_state rx_state, tx_state;
struct can_berr_counter bec;
uint8_t ecc, alc;
int ret = 0;
@@ -418,6 +417,12 @@ static int sja1000_err(struct net_device *dev, uint8_t isrc, uint8_t status)
skb = alloc_can_err_skb(dev, &cf);
sja1000_get_berr_counter(dev, &bec);
+ can_state_get_by_berr_counter(dev, &bec, &tx_state, &rx_state);
+
+ if (status & SR_BS)
+ rx_state = CAN_STATE_BUS_OFF;
+
+ state = max(tx_state, rx_state);
if (isrc & IRQ_DOI) {
/* data overrun interrupt */
@@ -440,18 +445,6 @@ static int sja1000_err(struct net_device *dev, uint8_t isrc, uint8_t status)
if (priv->flags & SJA1000_QUIRK_RESET_ON_OVERRUN)
ret = IRQ_WAKE_THREAD;
}
-
- if (isrc & IRQ_EI) {
- /* error warning interrupt */
- netdev_dbg(dev, "error warning interrupt\n");
-
- if (status & SR_BS)
- state = CAN_STATE_BUS_OFF;
- else if (status & SR_ES)
- state = CAN_STATE_ERROR_WARNING;
- else
- state = CAN_STATE_ERROR_ACTIVE;
- }
if (state != CAN_STATE_BUS_OFF && skb) {
cf->can_id |= CAN_ERR_CNT;
cf->data[6] = bec.txerr;
@@ -493,15 +486,6 @@ static int sja1000_err(struct net_device *dev, uint8_t isrc, uint8_t status)
stats->rx_errors++;
}
}
- if (isrc & IRQ_EPI) {
- /* error passive interrupt */
- netdev_dbg(dev, "error passive interrupt\n");
-
- if (state == CAN_STATE_ERROR_PASSIVE)
- state = CAN_STATE_ERROR_WARNING;
- else
- state = CAN_STATE_ERROR_PASSIVE;
- }
if (isrc & IRQ_ALI) {
/* arbitration lost interrupt */
netdev_dbg(dev, "arbitration lost interrupt\n");
@@ -514,9 +498,6 @@ static int sja1000_err(struct net_device *dev, uint8_t isrc, uint8_t status)
}
if (state != priv->can.state) {
- tx_state = bec.txerr >= bec.rxerr ? state : 0;
- rx_state = bec.txerr <= bec.rxerr ? state : 0;
-
can_change_state(dev, cf, tx_state, rx_state);
if(state == CAN_STATE_BUS_OFF)
--
2.51.0
^ permalink raw reply related [flat|nested] 10+ messages in thread