mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 0/2] Add FD-Only mode support for R-Car CANFD
@ 2025-11-18 14:18 Biju
  2025-11-18 14:18 ` [PATCH 1/2] dt-bindings: can: renesas,rcar-canfd: Document renesas,fd-only property Biju
  2025-11-18 14:18 ` [PATCH 2/2] can: rcar_canfd: Add support for FD-Only mode Biju
  0 siblings, 2 replies; 5+ messages in thread
From: Biju @ 2025-11-18 14:18 UTC (permalink / raw)
  To: Marc Kleine-Budde, Vincent Mailhol, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven,
	Magnus Damm
  Cc: Biju Das, Fabrizio Castro, linux-can, devicetree,
	linux-renesas-soc, linux-kernel, Prabhakar Mahadev Lad, Biju Das

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. Update binding/driver to support this mode.

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

Biju Das (2):
  dt-bindings: can: renesas,rcar-canfd: Document renesas,fd-only
    property
  can: rcar_canfd: Add support for FD-Only mode

 .../bindings/net/can/renesas,rcar-canfd.yaml  | 14 ++++++++---
 drivers/net/can/rcar/rcar_canfd.c             | 24 ++++++++++++++++++-
 2 files changed, 34 insertions(+), 4 deletions(-)

-- 
2.43.0


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

* [PATCH 1/2] dt-bindings: can: renesas,rcar-canfd: Document renesas,fd-only property
  2025-11-18 14:18 [PATCH 0/2] Add FD-Only mode support for R-Car CANFD Biju
@ 2025-11-18 14:18 ` Biju
  2025-11-20  8:09   ` Krzysztof Kozlowski
  2025-11-18 14:18 ` [PATCH 2/2] can: rcar_canfd: Add support for FD-Only mode Biju
  1 sibling, 1 reply; 5+ messages in thread
From: Biju @ 2025-11-18 14:18 UTC (permalink / raw)
  To: Marc Kleine-Budde, Vincent Mailhol, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven,
	Magnus Damm
  Cc: Biju Das, Fabrizio Castro, linux-can, devicetree,
	linux-renesas-soc, linux-kernel, Prabhakar Mahadev Lad, Biju Das

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.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
 .../bindings/net/can/renesas,rcar-canfd.yaml       | 14 +++++++++++---
 1 file changed, 11 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..bf9a7d5288d3 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:
-- 
2.43.0


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

* [PATCH 2/2] can: rcar_canfd: Add support for FD-Only mode
  2025-11-18 14:18 [PATCH 0/2] Add FD-Only mode support for R-Car CANFD Biju
  2025-11-18 14:18 ` [PATCH 1/2] dt-bindings: can: renesas,rcar-canfd: Document renesas,fd-only property Biju
@ 2025-11-18 14:18 ` Biju
  1 sibling, 0 replies; 5+ messages in thread
From: Biju @ 2025-11-18 14:18 UTC (permalink / raw)
  To: Marc Kleine-Budde, Vincent Mailhol, Geert Uytterhoeven, Magnus Damm
  Cc: Biju Das, linux-can, linux-renesas-soc, linux-kernel,
	Prabhakar Mahadev Lad, Biju Das

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>
---
 drivers/net/can/rcar/rcar_canfd.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index 05dbdf46dd6f..6dc6bb1efceb 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -444,6 +444,7 @@ struct rcar_canfd_hw_info {
 	unsigned ch_interface_mode:1;	/* Has channel interface mode */
 	unsigned shared_can_regs:1;	/* Has shared classical can registers */
 	unsigned external_clk:1;	/* Has external clock */
+	unsigned has_fd_only_mode:1;	/* Has FD-Only mode */
 };
 
 /* Channel priv data */
@@ -471,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;
@@ -615,6 +617,7 @@ static const struct rcar_canfd_hw_info rcar_gen3_hw_info = {
 	.ch_interface_mode = 0,
 	.shared_can_regs = 0,
 	.external_clk = 1,
+	.has_fd_only_mode = 0,
 };
 
 static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
@@ -632,6 +635,7 @@ static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
 	.ch_interface_mode = 1,
 	.shared_can_regs = 1,
 	.external_clk = 1,
+	.has_fd_only_mode = 1,
 };
 
 static const struct rcar_canfd_hw_info rzg2l_hw_info = {
@@ -649,6 +653,7 @@ static const struct rcar_canfd_hw_info rzg2l_hw_info = {
 	.ch_interface_mode = 0,
 	.shared_can_regs = 0,
 	.external_clk = 1,
+	.has_fd_only_mode = 1,
 };
 
 static const struct rcar_canfd_hw_info r9a09g047_hw_info = {
@@ -666,6 +671,7 @@ static const struct rcar_canfd_hw_info r9a09g047_hw_info = {
 	.ch_interface_mode = 1,
 	.shared_can_regs = 1,
 	.external_clk = 0,
+	.has_fd_only_mode = 1,
 };
 
 /* Helper functions */
@@ -828,12 +834,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);
 		}
 	}
 
@@ -2041,6 +2055,14 @@ 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")) {
+		if (!info->has_fd_only_mode)
+			return dev_err_probe(dev, EOPNOTSUPP,
+					     "fd-only mode not supported\n");
+
+		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),
@@ -2190,7 +2212,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.43.0


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

* Re: [PATCH 1/2] dt-bindings: can: renesas,rcar-canfd: Document renesas,fd-only property
  2025-11-18 14:18 ` [PATCH 1/2] dt-bindings: can: renesas,rcar-canfd: Document renesas,fd-only property Biju
@ 2025-11-20  8:09   ` Krzysztof Kozlowski
  2025-11-23 10:49     ` Biju Das
  0 siblings, 1 reply; 5+ messages in thread
From: Krzysztof Kozlowski @ 2025-11-20  8:09 UTC (permalink / raw)
  To: Biju
  Cc: Marc Kleine-Budde, Vincent Mailhol, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven,
	Magnus Damm, Biju Das, Fabrizio Castro, linux-can, devicetree,
	linux-renesas-soc, linux-kernel, Prabhakar Mahadev Lad

On Tue, Nov 18, 2025 at 02:18:34PM +0000, Biju 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.
> 
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
>  .../bindings/net/can/renesas,rcar-canfd.yaml       | 14 +++++++++++---
>  1 file changed, 11 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..bf9a7d5288d3 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.

It should really be just an enum since the beginning - representing the
mode of operation. Now you need to complex oneOf to disallow usage of
both.

You also claim not all devices support this, so you need to disallow it
per variant.

Best regards,
Krzysztof


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

* RE: [PATCH 1/2] dt-bindings: can: renesas,rcar-canfd: Document renesas,fd-only property
  2025-11-20  8:09   ` Krzysztof Kozlowski
@ 2025-11-23 10:49     ` Biju Das
  0 siblings, 0 replies; 5+ messages in thread
From: Biju Das @ 2025-11-23 10:49 UTC (permalink / raw)
  To: Krzysztof Kozlowski, biju.das.au
  Cc: Marc Kleine-Budde, Vincent Mailhol, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven,
	magnus.damm, Fabrizio Castro, linux-can, devicetree,
	linux-renesas-soc, linux-kernel, Prabhakar Mahadev Lad

Hi Krzysztof Kozlowski,

Thanks for the feedback.

> -----Original Message-----
> From: Krzysztof Kozlowski <krzk@kernel.org>
> Sent: 20 November 2025 08:09
> Subject: Re: [PATCH 1/2] dt-bindings: can: renesas,rcar-canfd: Document renesas,fd-only property
> 
> On Tue, Nov 18, 2025 at 02:18:34PM +0000, Biju 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.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> >  .../bindings/net/can/renesas,rcar-canfd.yaml       | 14 +++++++++++---
> >  1 file changed, 11 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..bf9a7d5288d3 100644
> > ---
> > a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
> > +++ b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yam
> > +++ l
> > @@ -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.
> 
> It should really be just an enum since the beginning - representing the mode of operation. Now you
> need to complex oneOf to disallow usage of both.
> 
> You also claim not all devices support this, so you need to disallow it per variant.

OK, I will disallow renesas,fd-only for R-Car Gen3.

Cheers,
Biju

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

end of thread, other threads:[~2025-11-23 10:49 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-11-18 14:18 [PATCH 0/2] Add FD-Only mode support for R-Car CANFD Biju
2025-11-18 14:18 ` [PATCH 1/2] dt-bindings: can: renesas,rcar-canfd: Document renesas,fd-only property Biju
2025-11-20  8:09   ` Krzysztof Kozlowski
2025-11-23 10:49     ` Biju Das
2025-11-18 14:18 ` [PATCH 2/2] can: rcar_canfd: Add support for FD-Only mode Biju

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

all inboxes | Powered by JetHome®