public inbox for devicetree@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/6] Add support for RZ/N1 SJA1000 CAN controller
@ 2022-07-03 10:46 Biju Das
  2022-07-03 10:47 ` [PATCH v2 1/6] dt-bindings: can: sja1000: Convert to json-schema Biju Das
  2022-07-03 10:47 ` [PATCH v2 2/6] dt-bindings: can: nxp,sja1000: Document RZ/N1{D,S} support Biju Das
  0 siblings, 2 replies; 5+ messages in thread
From: Biju Das @ 2022-07-03 10:46 UTC (permalink / raw)
  To: Wolfgang Grandegger, Marc Kleine-Budde, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring,
	Krzysztof Kozlowski
  Cc: Biju Das, linux-can, netdev, devicetree, Uwe Kleine-König,
	Geert Uytterhoeven, Chris Paterson, Biju Das, linux-renesas-soc

This patch series aims to add support for RZ/N1 SJA1000 CAN controller.

The SJA1000 CAN controller on RZ/N1 SoC has some differences compared
to others like it has no clock divider register (CDR) support and it has
no HW loopback (HW doesn't see tx messages on rx), so introduced a new
compatible 'renesas,rzn1-sja1000' to handle these differences.

v1->v2:
 * Moved $ref: can-controller.yaml# to top along with if conditional to
   avoid multiple mapping issues with the if conditional in the subsequent
   patch.
 * Added an example for RZ/N1D SJA1000 usage.
 * Updated commit description for patch#2,#3 and #6
 * Removed the quirk macro SJA1000_NO_HW_LOOPBACK_QUIRK
 * Added prefix SJA1000_QUIRK_* for quirk macro.
 * Replaced of_device_get_match_data->device_get_match_data.
 * Added error handling on clk error path
 * Started using "devm_clk_get_optional_enabled" for clk get,prepare and enable.

Ref:
 [1] https://lore.kernel.org/linux-renesas-soc/20220701162320.102165-1-biju.das.jz@bp.renesas.com/T/#t

Biju Das (6):
  dt-bindings: can: sja1000: Convert to json-schema
  dt-bindings: can: nxp,sja1000: Document RZ/N1{D,S} support
  can: sja1000: Add Quirk for RZ/N1 SJA1000 CAN controller
  can: sja1000: Use device_get_match_data to get device data
  can: sja1000: Change the return type as void for SoC specific init
  can: sja1000: Add support for RZ/N1 SJA1000 CAN Controller

 .../bindings/net/can/nxp,sja1000.yaml         | 136 ++++++++++++++++++
 .../devicetree/bindings/net/can/sja1000.txt   |  58 --------
 drivers/net/can/sja1000/sja1000.c             |  13 +-
 drivers/net/can/sja1000/sja1000.h             |   3 +-
 drivers/net/can/sja1000/sja1000_platform.c    |  56 +++++---
 5 files changed, 184 insertions(+), 82 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/net/can/nxp,sja1000.yaml
 delete mode 100644 Documentation/devicetree/bindings/net/can/sja1000.txt

-- 
2.25.1


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

* [PATCH v2 1/6] dt-bindings: can: sja1000: Convert to json-schema
  2022-07-03 10:46 [PATCH v2 0/6] Add support for RZ/N1 SJA1000 CAN controller Biju Das
@ 2022-07-03 10:47 ` Biju Das
  2022-07-03 18:00   ` Rob Herring
  2022-07-03 10:47 ` [PATCH v2 2/6] dt-bindings: can: nxp,sja1000: Document RZ/N1{D,S} support Biju Das
  1 sibling, 1 reply; 5+ messages in thread
From: Biju Das @ 2022-07-03 10:47 UTC (permalink / raw)
  To: Wolfgang Grandegger, Marc Kleine-Budde, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring,
	Krzysztof Kozlowski
  Cc: Biju Das, linux-can, netdev, devicetree, Uwe Kleine-König,
	Geert Uytterhoeven, Chris Paterson, Biju Das, linux-renesas-soc

Convert the NXP SJA1000 CAN Controller Device Tree binding
documentation to json-schema.

Update the example to match reality.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v1->v2:
 * Moved $ref: can-controller.yaml# to top along with if conditional to
   avoid multiple mapping issues with the if conditional in the subsequent
   patch.
---
 .../bindings/net/can/nxp,sja1000.yaml         | 102 ++++++++++++++++++
 .../devicetree/bindings/net/can/sja1000.txt   |  58 ----------
 2 files changed, 102 insertions(+), 58 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/net/can/nxp,sja1000.yaml
 delete mode 100644 Documentation/devicetree/bindings/net/can/sja1000.txt

diff --git a/Documentation/devicetree/bindings/net/can/nxp,sja1000.yaml b/Documentation/devicetree/bindings/net/can/nxp,sja1000.yaml
new file mode 100644
index 000000000000..3232ce7e2642
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/can/nxp,sja1000.yaml
@@ -0,0 +1,102 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/net/can/nxp,sja1000.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Memory mapped SJA1000 CAN controller from NXP (formerly Philips)
+
+maintainers:
+  - Wolfgang Grandegger <wg@grandegger.com>
+
+allOf:
+  - $ref: can-controller.yaml#
+  - if:
+      not:
+        properties:
+          compatible:
+            contains:
+              const: technologic,sja1000
+    then:
+      required:
+        - reg-io-width
+
+properties:
+  compatible:
+    oneOf:
+      - description: NXP SJA1000 CAN Controller
+        const: nxp,sja1000
+      - description: Technologic Systems SJA1000 CAN Controller
+        const: technologic,sja1000
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  reg-io-width:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description: I/O register width (in bytes) implemented by this device
+    default: 1
+    enum: [ 1, 2, 4 ]
+
+  nxp,external-clock-frequency:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    default: 16000000
+    description: |
+      Frequency of the external oscillator clock in Hz.
+      The internal clock frequency used by the SJA1000 is half of that value.
+
+  nxp,tx-output-mode:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    enum: [ 0, 1, 2, 3 ]
+    default: 1
+    description: |
+      operation mode of the TX output control logic.  Valid values are:
+        <0x0> : bi-phase output mode
+        <0x1> : normal output mode (default)
+        <0x2> : test output mode
+        <0x3> : clock output mode
+
+  nxp,tx-output-config:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    enum: [ 0x01, 0x02, 0x04, 0x06, 0x08, 0x10, 0x20, 0x30 ]
+    default: 0x02
+    description: |
+      TX output pin configuration.  Valid values are:
+        <0x01> : TX0 invert
+        <0x02> : TX0 pull-down (default)
+        <0x04> : TX0 pull-up
+        <0x06> : TX0 push-pull
+        <0x08> : TX1 invert
+        <0x10> : TX1 pull-down
+        <0x20> : TX1 pull-up
+        <0x30> : TX1 push-pull
+
+  nxp,clock-out-frequency:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description: |
+      clock frequency in Hz on the CLKOUT pin.
+      If not specified or if the specified value is 0, the CLKOUT pin
+      will be disabled.
+
+  nxp,no-comparator-bypass:
+    type: boolean
+    description: Allows to disable the CAN input comparator.
+
+required:
+  - compatible
+  - reg
+  - interrupts
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    can@1a000 {
+            compatible = "technologic,sja1000";
+            reg = <0x1a000 0x100>;
+            interrupts = <1>;
+            nxp,external-clock-frequency = <24000000>;
+    };
diff --git a/Documentation/devicetree/bindings/net/can/sja1000.txt b/Documentation/devicetree/bindings/net/can/sja1000.txt
deleted file mode 100644
index ac3160eca96a..000000000000
--- a/Documentation/devicetree/bindings/net/can/sja1000.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-Memory mapped SJA1000 CAN controller from NXP (formerly Philips)
-
-Required properties:
-
-- compatible : should be one of "nxp,sja1000", "technologic,sja1000".
-
-- reg : should specify the chip select, address offset and size required
-	to map the registers of the SJA1000. The size is usually 0x80.
-
-- interrupts: property with a value describing the interrupt source
-	(number and sensitivity) required for the SJA1000.
-
-Optional properties:
-
-- reg-io-width : Specify the size (in bytes) of the IO accesses that
-	should be performed on the device.  Valid value is 1, 2 or 4.
-	This property is ignored for technologic version.
-	Default to 1 (8 bits).
-
-- nxp,external-clock-frequency : Frequency of the external oscillator
-	clock in Hz. Note that the internal clock frequency used by the
-	SJA1000 is half of that value. If not specified, a default value
-	of 16000000 (16 MHz) is used.
-
-- nxp,tx-output-mode : operation mode of the TX output control logic:
-	<0x0> : bi-phase output mode
-	<0x1> : normal output mode (default)
-	<0x2> : test output mode
-	<0x3> : clock output mode
-
-- nxp,tx-output-config : TX output pin configuration:
-	<0x01> : TX0 invert
-	<0x02> : TX0 pull-down (default)
-	<0x04> : TX0 pull-up
-	<0x06> : TX0 push-pull
-	<0x08> : TX1 invert
-	<0x10> : TX1 pull-down
-	<0x20> : TX1 pull-up
-	<0x30> : TX1 push-pull
-
-- nxp,clock-out-frequency : clock frequency in Hz on the CLKOUT pin.
-	If not specified or if the specified value is 0, the CLKOUT pin
-	will be disabled.
-
-- nxp,no-comparator-bypass : Allows to disable the CAN input comparator.
-
-For further information, please have a look to the SJA1000 data sheet.
-
-Examples:
-
-can@3,100 {
-	compatible = "nxp,sja1000";
-	reg = <3 0x100 0x80>;
-	interrupts = <2 0>;
-	interrupt-parent = <&mpic>;
-	nxp,external-clock-frequency = <16000000>;
-};
-
-- 
2.25.1


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

* [PATCH v2 2/6] dt-bindings: can: nxp,sja1000: Document RZ/N1{D,S} support
  2022-07-03 10:46 [PATCH v2 0/6] Add support for RZ/N1 SJA1000 CAN controller Biju Das
  2022-07-03 10:47 ` [PATCH v2 1/6] dt-bindings: can: sja1000: Convert to json-schema Biju Das
@ 2022-07-03 10:47 ` Biju Das
  1 sibling, 0 replies; 5+ messages in thread
From: Biju Das @ 2022-07-03 10:47 UTC (permalink / raw)
  To: Wolfgang Grandegger, Marc Kleine-Budde, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring,
	Krzysztof Kozlowski
  Cc: Biju Das, linux-can, netdev, devicetree, Uwe Kleine-König,
	Geert Uytterhoeven, Chris Paterson, Biju Das, linux-renesas-soc

Add CAN binding documentation for Renesas RZ/N1 SoC.

The SJA1000 CAN controller on RZ/N1 SoC has some differences compared
to others like it has no clock divider register (CDR) support and it has
no HW loopback (HW doesn't see tx messages on rx), so introduced a new
compatible 'renesas,rzn1-sja1000' to handle these differences.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v1->v2:
 * Updated commit description.
 * Added an example for RZ/N1D SJA1000 usage
---
 .../bindings/net/can/nxp,sja1000.yaml         | 34 +++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/Documentation/devicetree/bindings/net/can/nxp,sja1000.yaml b/Documentation/devicetree/bindings/net/can/nxp,sja1000.yaml
index 3232ce7e2642..dca2c932df31 100644
--- a/Documentation/devicetree/bindings/net/can/nxp,sja1000.yaml
+++ b/Documentation/devicetree/bindings/net/can/nxp,sja1000.yaml
@@ -20,6 +20,15 @@ allOf:
     then:
       required:
         - reg-io-width
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: renesas,rzn1-sja1000
+    then:
+      required:
+        - clocks
+        - clock-names
 
 properties:
   compatible:
@@ -28,6 +37,12 @@ properties:
         const: nxp,sja1000
       - description: Technologic Systems SJA1000 CAN Controller
         const: technologic,sja1000
+      - description: Renesas RZ/N1 SJA1000 CAN Controller
+        items:
+          - enum:
+              - renesas,r9a06g032-sja1000 # RZ/N1D
+              - renesas,r9a06g033-sja1000 # RZ/N1S
+          - const: renesas,rzn1-sja1000 # RZ/N1
 
   reg:
     maxItems: 1
@@ -35,6 +50,12 @@ properties:
   interrupts:
     maxItems: 1
 
+  clocks:
+    maxItems: 1
+
+  clock-names:
+    const: can_clk
+
   reg-io-width:
     $ref: /schemas/types.yaml#/definitions/uint32
     description: I/O register width (in bytes) implemented by this device
@@ -100,3 +121,16 @@ examples:
             interrupts = <1>;
             nxp,external-clock-frequency = <24000000>;
     };
+
+  - |
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    #include <dt-bindings/clock/r9a06g032-sysctrl.h>
+
+    can@52104000 {
+            compatible = "renesas,r9a06g032-sja1000","renesas,rzn1-sja1000";
+            reg = <0x52104000 0x800>;
+            reg-io-width = <4>;
+            interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
+            clocks = <&sysctrl R9A06G032_HCLK_CAN0>;
+            clock-names = "can_clk";
+    };
-- 
2.25.1


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

* Re: [PATCH v2 1/6] dt-bindings: can: sja1000: Convert to json-schema
  2022-07-03 10:47 ` [PATCH v2 1/6] dt-bindings: can: sja1000: Convert to json-schema Biju Das
@ 2022-07-03 18:00   ` Rob Herring
  2022-07-03 18:54     ` Biju Das
  0 siblings, 1 reply; 5+ messages in thread
From: Rob Herring @ 2022-07-03 18:00 UTC (permalink / raw)
  To: Biju Das
  Cc: Krzysztof Kozlowski, Jakub Kicinski, devicetree,
	linux-renesas-soc, Biju Das, linux-can, Chris Paterson,
	Wolfgang Grandegger, Paolo Abeni, Uwe Kleine-König,
	Rob Herring, David S. Miller, netdev, Geert Uytterhoeven,
	Marc Kleine-Budde, Eric Dumazet

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1361 bytes --]

On Sun, 03 Jul 2022 11:47:00 +0100, Biju Das wrote:
> Convert the NXP SJA1000 CAN Controller Device Tree binding
> documentation to json-schema.
> 
> Update the example to match reality.
> 
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
> v1->v2:
>  * Moved $ref: can-controller.yaml# to top along with if conditional to
>    avoid multiple mapping issues with the if conditional in the subsequent
>    patch.
> ---
>  .../bindings/net/can/nxp,sja1000.yaml         | 102 ++++++++++++++++++
>  .../devicetree/bindings/net/can/sja1000.txt   |  58 ----------
>  2 files changed, 102 insertions(+), 58 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/net/can/nxp,sja1000.yaml
>  delete mode 100644 Documentation/devicetree/bindings/net/can/sja1000.txt
> 

Running 'make dtbs_check' with the schema in this patch gives the
following warnings. Consider if they are expected or the schema is
incorrect. These may not be new warnings.

Note that it is not yet a requirement to have 0 warnings for dtbs_check.
This will change in the future.

Full log is available here: https://patchwork.ozlabs.org/patch/


can@4,0: nxp,tx-output-config:0:0: 22 is not one of [1, 2, 4, 6, 8, 16, 32, 48]
	arch/arm/boot/dts/imx27-phytec-phycore-rdk.dtb

can@4,0: 'reg-io-width' is a required property
	arch/arm/boot/dts/imx27-phytec-phycore-rdk.dtb


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

* RE: [PATCH v2 1/6] dt-bindings: can: sja1000: Convert to json-schema
  2022-07-03 18:00   ` Rob Herring
@ 2022-07-03 18:54     ` Biju Das
  0 siblings, 0 replies; 5+ messages in thread
From: Biju Das @ 2022-07-03 18:54 UTC (permalink / raw)
  To: Rob Herring
  Cc: Krzysztof Kozlowski, Jakub Kicinski, devicetree@vger.kernel.org,
	linux-renesas-soc@vger.kernel.org, Biju Das,
	linux-can@vger.kernel.org, Chris Paterson, Wolfgang Grandegger,
	Paolo Abeni, Uwe Kleine-König, Rob Herring, David S. Miller,
	netdev@vger.kernel.org, Geert Uytterhoeven, Marc Kleine-Budde,
	Eric Dumazet

Hi Rob,

Thanks for the feedback.

> Subject: Re: [PATCH v2 1/6] dt-bindings: can: sja1000: Convert to json-
> schema
> 
> On Sun, 03 Jul 2022 11:47:00 +0100, Biju Das wrote:
> > Convert the NXP SJA1000 CAN Controller Device Tree binding
> > documentation to json-schema.
> >
> > Update the example to match reality.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> > v1->v2:
> >  * Moved $ref: can-controller.yaml# to top along with if conditional
> > to    avoid multiple mapping issues with the if conditional in the
> subsequent
> >    patch.
> > ---
> >  .../bindings/net/can/nxp,sja1000.yaml         | 102
> ++++++++++++++++++
> >  .../devicetree/bindings/net/can/sja1000.txt   |  58 ----------
> >  2 files changed, 102 insertions(+), 58 deletions(-)  create mode
> > 100644 Documentation/devicetree/bindings/net/can/nxp,sja1000.yaml
> >  delete mode 100644
> > Documentation/devicetree/bindings/net/can/sja1000.txt
> >
> 
> Running 'make dtbs_check' with the schema in this patch gives the
> following warnings. Consider if they are expected or the schema is
> incorrect. These may not be new warnings.
> 
> Note that it is not yet a requirement to have 0 warnings for dtbs_check.
> This will change in the future.
>

OK.
 
> 
> can@4,0: nxp,tx-output-config:0:0: 22 is not one of [1, 2, 4, 6, 8, 16,
> 32, 48]
> 	arch/arm/boot/dts/imx27-phytec-phycore-rdk.dtb

Looks like this property is not enum, as combination possible with tx-output-config values for TX0 and TX1. 

22 = 6 + 16 -> TX0 push-pull + TX1 pull-down

I will remove enums definition from the next version.
which will fix this error. 

Also please let me know, is there any better way to handle
combination of enum values like above.

> 
> can@4,0: 'reg-io-width' is a required property
> 	arch/arm/boot/dts/imx27-phytec-phycore-rdk.dtb

I have added this as per original documentation[1], it is ignored only for
Technologic. But after checking [2] none of them except Technologic is using reg-io
I will send V3 with fixing this.

[1] snippet from original bindings.
Optional properties:
reg-io-width : Specify the size (in bytes) of the IO accesses that
	should be performed on the device.  Valid value is 1, 2 or 4.
	This property is ignored for technologic version.
	Default to 1 (8 bits).

[2]
biju@biju-VirtualBox:~/linux-next$ fgrep -r "sja1000" arch
arch/powerpc/boot/dts/digsy_mtc.dts:			compatible = "nxp,sja1000";
arch/powerpc/boot/dts/digsy_mtc.dts:			compatible = "nxp,sja1000";
arch/powerpc/boot/dts/socrates.dts:			compatible = "philips,sja1000";
Binary file arch/arm/boot/dts/imx51-ts4800.dtb matches
arch/arm/boot/dts/imx51-ts4800.dts:			compatible = "technologic,sja1000";
arch/arm/boot/dts/imx27-phytec-phycore-rdk.dts:		compatible = "nxp,sja1000";

Cheers,
Biju

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

end of thread, other threads:[~2022-07-03 18:54 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-03 10:46 [PATCH v2 0/6] Add support for RZ/N1 SJA1000 CAN controller Biju Das
2022-07-03 10:47 ` [PATCH v2 1/6] dt-bindings: can: sja1000: Convert to json-schema Biju Das
2022-07-03 18:00   ` Rob Herring
2022-07-03 18:54     ` Biju Das
2022-07-03 10:47 ` [PATCH v2 2/6] dt-bindings: can: nxp,sja1000: Document RZ/N1{D,S} 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