Migrate device tree bindings for Gaisler GRCAN, GRHCAN
and GRCANFD CAN controllers from a text format to YAML format.
- Add properties such as `compatible`, `reg`, `interrupts`
and `clocks` for the CAN controllers.
- Removal of the old `grcan.txt` file as its contents have
been fully migrated to the YAML file.
- YAML file includes examples of device tree bindings for
the CAN controllers
Signed-off-by: Arun Muthusamy <arun.muthusamy@gaisler.com>
---
.../bindings/net/can/gaisler,grcan.yaml | 85 +++++++++++++++++++
.../devicetree/bindings/net/can/grcan.txt | 28 ------
2 files changed, 85 insertions(+), 28 deletions(-)
create mode 100644 Documentation/devicetree/bindings/net/can/gaisler,grcan.yaml
delete mode 100644 Documentation/devicetree/bindings/net/can/grcan.txt
diff --git a/Documentation/devicetree/bindings/net/can/gaisler,grcan.yaml b/Documentation/devicetree/bindings/net/can/gaisler,grcan.yaml
new file mode 100644
index 000000000000..521bdd89f130
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/can/gaisler,grcan.yaml
@@ -0,0 +1,85 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/net/can/gaisler,grcan.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title:
+ Aeroflex Gaisler GRCAN, GRHCAN and GRCANFD CAN controllers.
+
+description: |
+ GRCAN, GRCANFD, GRHCAN controllers are available in the GRLIB VHDL IP core
+ library.
+
+ For further information look in the documentation for the GRLIB IP library:
+ https://download.gaisler.com/products/GRLIB/doc/grip.pdf
+
+maintainers:
+ - Arun Muthusamy <arun.muthusamy@gaisler.com>
+ - Andreas Larsson <andreas@gaisler.com>
+
+allOf:
+ - $ref: can-controller.yaml#
+
+properties:
+ compatible:
+ enum:
+ - gaisler,grcan
+ - gaisler,grcanfd
+ name:
+ description: |
+ Fallback on node name matching for systems that don't provide compatible.
+ enum:
+ - GAISLER_GRCAN
+ - 01_03d
+ - GAISLER_GRHCAN
+ - "01_034"
+
+ reg:
+ maxItems: 1
+
+ interrupts:
+ maxItems: 1
+
+ clocks:
+ maxItems: 1
+
+ freq:
+ $ref: /schemas/types.yaml#/definitions/uint32
+ description: |
+ Frequency of the external oscillator clock in Hz (the frequency of the
+ amba bus in the ordinary case).
+ This property should be used by systems that utilize the common clock
+ framework is not supported.
+
+unevaluatedProperties: false
+
+required:
+ - reg
+ - interrupts
+
+examples:
+ - |
+ #include <dt-bindings/interrupt-controller/irq.h>
+ can@ff400000 {
+ compatible = "gaisler,grcanfd";
+ clocks = <&sysclock>;
+ reg = <0xff400000 0x400>;
+ interrupt-parent = <&plic0>;
+ interrupts = <6>;
+ };
+ - |
+ #include <dt-bindings/interrupt-controller/irq.h>
+ can@ff400000 {
+ compatible = "gaisler,grcan";
+ clocks = <&sysclock>;
+ reg = <0xff400000 0x400>;
+ interrupt-parent = <&plic0>;
+ interrupts = <6>;
+ };
+ - |
+ GAISLER_GRCAN@ff840000 {
+ reg = <0xff840000 0x400>;
+ freq = <50000000>;
+ interrupts = <16>;
+ };
diff --git a/Documentation/devicetree/bindings/net/can/grcan.txt b/Documentation/devicetree/bindings/net/can/grcan.txt
deleted file mode 100644
index 34ef3498f887..000000000000
--- a/Documentation/devicetree/bindings/net/can/grcan.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-Aeroflex Gaisler GRCAN and GRHCAN CAN controllers.
-
-The GRCAN and CRHCAN CAN controllers are available in the GRLIB VHDL IP core
-library.
-
-Note: These properties are built from the AMBA plug&play in a Leon SPARC system
-(the ordinary environment for GRCAN and GRHCAN). There are no dts files for
-sparc.
-
-Required properties:
-
-- name : Should be "GAISLER_GRCAN", "01_03d", "GAISLER_GRHCAN" or "01_034"
-
-- reg : Address and length of the register set for the device
-
-- freq : Frequency of the external oscillator clock in Hz (the frequency of
- the amba bus in the ordinary case)
-
-- interrupts : Interrupt number for this device
-
-Optional properties:
-
-- systemid : If not present or if the value of the least significant 16 bits
- of this 32-bit property is smaller than GRCAN_TXBUG_SAFE_GRLIB_VERSION
- a bug workaround is activated.
-
-For further information look in the documentation for the GLIB IP core library:
-http://www.gaisler.com/products/grlib/grip.pdf
--
2.51.0
On 18/11/2025 10:21, Arun Muthusamy wrote:
> Migrate device tree bindings for Gaisler GRCAN, GRHCAN
> and GRCANFD CAN controllers from a text format to YAML format.
> - Add properties such as `compatible`, `reg`, `interrupts`
Odd indentation. Please write readable commit msgs.
Also:
1. Why? You need to explain why you are changing binding during conversion.
2. Reg was already there, so I don't understand why you need to add it.
> and `clocks` for the CAN controllers.
> - Removal of the old `grcan.txt` file as its contents have
> been fully migrated to the YAML file.
Drop, that's not relevant.
> - YAML file includes examples of device tree bindings for
> the CAN controllers
Drop, not relevant. Please look at git history how commits are written.
>
> Signed-off-by: Arun Muthusamy <arun.muthusamy@gaisler.com>
> ---
> .../bindings/net/can/gaisler,grcan.yaml | 85 +++++++++++++++++++
> .../devicetree/bindings/net/can/grcan.txt | 28 ------
> 2 files changed, 85 insertions(+), 28 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/net/can/gaisler,grcan.yaml
> delete mode 100644 Documentation/devicetree/bindings/net/can/grcan.txt
>
> diff --git a/Documentation/devicetree/bindings/net/can/gaisler,grcan.yaml b/Documentation/devicetree/bindings/net/can/gaisler,grcan.yaml
> new file mode 100644
> index 000000000000..521bdd89f130
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/net/can/gaisler,grcan.yaml
> @@ -0,0 +1,85 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/net/can/gaisler,grcan.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title:
> + Aeroflex Gaisler GRCAN, GRHCAN and GRCANFD CAN controllers.
> +
> +description: |
> + GRCAN, GRCANFD, GRHCAN controllers are available in the GRLIB VHDL IP core
> + library.
> +
> + For further information look in the documentation for the GRLIB IP library:
> + https://download.gaisler.com/products/GRLIB/doc/grip.pdf
> +
> +maintainers:
> + - Arun Muthusamy <arun.muthusamy@gaisler.com>
> + - Andreas Larsson <andreas@gaisler.com>
> +
> +allOf:
> + - $ref: can-controller.yaml#
> +
> +properties:
> + compatible:
> + enum:
> + - gaisler,grcan
> + - gaisler,grcanfd
Blank line
> + name:
> + description: |
Do not need '|' unless you need to preserve formatting.
> + Fallback on node name matching for systems that don't provide compatible.
> + enum:
> + - GAISLER_GRCAN
> + - 01_03d
> + - GAISLER_GRHCAN
> + - "01_034"
This does not really work. Are you really defining here "name" property?
> +
> + reg:
> + maxItems: 1
> +
> + interrupts:
> + maxItems: 1
> +
> + clocks:
> + maxItems: 1
> +
> + freq:
> + $ref: /schemas/types.yaml#/definitions/uint32
> + description: |
> + Frequency of the external oscillator clock in Hz (the frequency of the
> + amba bus in the ordinary case).
> + This property should be used by systems that utilize the common clock
> + framework is not supported.
Missing systemid. Your commit msg must explain any changes done to the
binding during conversion.
> +
> +unevaluatedProperties: false
This goes after required block.
> +
> +required:
compatible as well
> + - reg
> + - interrupts
Where is freq? It was required in the old binding. Again, you need to
explain the changes.
> +
> +examples:
> + - |
> + #include <dt-bindings/interrupt-controller/irq.h>
> + can@ff400000 {
> + compatible = "gaisler,grcanfd";
> + clocks = <&sysclock>;
> + reg = <0xff400000 0x400>;
> + interrupt-parent = <&plic0>;
> + interrupts = <6>;
> + };
One example is enough
> + - |
> + #include <dt-bindings/interrupt-controller/irq.h>
> + can@ff400000 {
> + compatible = "gaisler,grcan";
> + clocks = <&sysclock>;
> + reg = <0xff400000 0x400>;
> + interrupt-parent = <&plic0>;
> + interrupts = <6>;
> + };
> + - |
> + GAISLER_GRCAN@ff840000 {
Especially no such examples. Please read DTS coding style.
> + reg = <0xff840000 0x400>;
> + freq = <50000000>;
> + interrupts = <16>;
> + };
> diff --git a/Documentation/devicetree/bindings/net/can/grcan.txt b/Documentation/devicetree/bindings/net/can/grcan.txt
> deleted file mode 100644
> index 34ef3498f887..000000000000
> --- a/Documentation/devicetree/bindings/net/can/grcan.txt
> +++ /dev/null
> @@ -1,28 +0,0 @@
Best regards,
Krzysztof
Hi Krzysztof,
Thank you for your thorough review. I’d like to clarify a few points
regarding the DT binding and get your guidance.
On 11/18/25 12:01, Krzysztof Kozlowski wrote:
> On 18/11/2025 10:21, Arun Muthusamy wrote:
>> + Fallback on node name matching for systems that don't provide compatible.
>> + enum:
>> + - GAISLER_GRCAN
>> + - 01_03d
>> + - GAISLER_GRHCAN
>> + - "01_034"
> This does not really work. Are you really defining here "name" property?
The driver supports two of the platforms which are LEON and NOEL
platforms. PROM-based *LEON* systems identify uses the "node name"
property, while DTS based *NOEL* systems use proper "|compatible"|strings. On LEON (SPARC32), AMBA Plug & Play information creates the DT
properties, and drivers historically match devices based on node names.
To reflect this, I updated the $nodename pattern to support LEON-style
node names: properties:
$nodename:
pattern: "^(GAISLER_GRCAN|01_03d|GAISLER_GRHCAN|01_034)$" I’d
appreciate any suggestions on the preferred way to describe this node
name for PROM-based LEON.
>> +
>> + reg:
>> + maxItems: 1
>> +
>> + interrupts:
>> + maxItems: 1
>> +
>> + clocks:
>> + maxItems: 1
>> +
>> + freq:
>> + $ref: /schemas/types.yaml#/definitions/uint32
>> + description: |
>> + Frequency of the external oscillator clock in Hz (the frequency of the
>> + amba bus in the ordinary case).
>> + This property should be used by systems that utilize the common clock
>> + framework is not supported.
> Missing systemid. Your commit msg must explain any changes done to the
> binding during conversion.
The driver now reads systemid directly from /ambapp0, so the property no
longer needs to be defined in the DTS. The previous documentation was
outdated and should have been updated after commit:
1e93ed26acf0 ("can: grcan: grcan_probe(): fix broken system id check for
errata workaround needs").
>> + - reg
>> + - interrupts
> Where is freq? It was required in the old binding. Again, you need to
> explain the changes.
LEON: relies on the freq property
NOEL: uses a standard clocks binding
Because of this dual approach, the freq property is no longer required
in the DTS binding itself as theAMBA Plug & Play creates the DT properties.
Thanks,
--
BR,
Arun Muthusamy
Software Engineer
Frontgrade Gaisler
T : +46 (0) 700 558 528
arun.muthusamy@gaisler.com
Frontgrade Gaisler AB, Kungsgatan 12, SE-411 19 GÖTEBORG, Sweden.
+46 (0) 31 775 8650,www.gaisler.com <http://www.gaisler.com/>
On 11/12/2025 11:11, Arun Muthusamy wrote:
> Hi Krzysztof,
>
> Thank you for your thorough review. I’d like to clarify a few points
> regarding the DT binding and get your guidance.
>
> On 11/18/25 12:01, Krzysztof Kozlowski wrote:
>> On 18/11/2025 10:21, Arun Muthusamy wrote:
>>> + Fallback on node name matching for systems that don't provide compatible.
>>> + enum:
>>> + - GAISLER_GRCAN
>>> + - 01_03d
>>> + - GAISLER_GRHCAN
>>> + - "01_034"
>> This does not really work. Are you really defining here "name" property?
>
> The driver supports two of the platforms which are LEON and NOEL
I don't care much about driver. Please describe here hardware.
> platforms. PROM-based *LEON* systems identify uses the "node name"
> property, while DTS based *NOEL* systems use proper "|compatible"|strings. On LEON (SPARC32), AMBA Plug & Play information creates the DT
> properties, and drivers historically match devices based on node names.
> To reflect this, I updated the $nodename pattern to support LEON-style
> node names: properties:
> $nodename:
> pattern: "^(GAISLER_GRCAN|01_03d|GAISLER_GRHCAN|01_034)$" I’d
> appreciate any suggestions on the preferred way to describe this node
> name for PROM-based LEON.
>
>>> +
>>> + reg:
>>> + maxItems: 1
>>> +
>>> + interrupts:
>>> + maxItems: 1
>>> +
>>> + clocks:
>>> + maxItems: 1
>>> +
>>> + freq:
>>> + $ref: /schemas/types.yaml#/definitions/uint32
>>> + description: |
>>> + Frequency of the external oscillator clock in Hz (the frequency of the
>>> + amba bus in the ordinary case).
>>> + This property should be used by systems that utilize the common clock
>>> + framework is not supported.
>> Missing systemid. Your commit msg must explain any changes done to the
>> binding during conversion.
>
> The driver now reads systemid directly from /ambapp0, so the property no
> longer needs to be defined in the DTS. The previous documentation was
> outdated and should have been updated after commit:
> 1e93ed26acf0 ("can: grcan: grcan_probe(): fix broken system id check for
> errata workaround needs").
Read again what I wrote.
>
>>> + - reg
>>> + - interrupts
>> Where is freq? It was required in the old binding. Again, you need to
>> explain the changes.
>
> LEON: relies on the freq property
> NOEL: uses a standard clocks binding
> Because of this dual approach, the freq property is no longer required
> in the DTS binding itself as theAMBA Plug & Play creates the DT properties.
Please read my comment carefully: you need to explain the changes. But
not to me, to everyone in the commit msg.
Best regards,
Krzysztof
Hi Krzysztof,
Thank you for your thorough review and insightful questions. I’d like to
clarify a few points regarding the DT binding and get your guidance.
Node name vs. compatible matching:
SPARC systems do not use DTS files; the device tree is generated by the
PROM. On LEON (SPARC32), AMBA Plug & Play information creates the DT
properties, and drivers historically match devices based on node names.
For DTS-based systems such as NOEL, this patch series adds
compatible-string matching. To reflect this, I updated the $nodename
pattern to support LEON-style node names:
properties:
$nodename:
pattern: "^(GAISLER_GRCAN|01_03d|GAISLER_GRHCAN|01_034)$"
I’d appreciate any suggestions on the preferred way to describe this
dual matching approach: node name for PROM-based LEON, compatible string
for DTS-based NOEL.
Freq and Clocks:
The driver needs to support both LEON and NOEL platforms:
LEON: relies on the freq property
NOEL: uses a standard clocks binding
Because of this dual approach, the freq property is no longer required
in the DTS binding itself.
It is only relevant for LEON/PROM-based systems and is handled
internally by the driver
Systemid:
The driver now reads systemid directly from /ambapp0, so the property no
longer needs to be defined in the DTS. The previous documentation was
outdated and should have been updated after commit:
1e93ed26acf0 ("can: grcan: grcan_probe(): fix broken system id check for
errata workaround needs")
Thanks,
--
BR,
Arun Muthusamy
Software Engineer
Frontgrade Gaisler
T : +46 (0) 700 558 528
arun.muthusamy@gaisler.com
Frontgrade Gaisler AB, Kungsgatan 12, SE-411 19 GÖTEBORG, Sweden.
+46 (0) 31 775 8650, www.gaisler.com
On 18.11.2025 12:01, Krzysztof Kozlowski wrote:
> On 18/11/2025 10:21, Arun Muthusamy wrote:
>> Migrate device tree bindings for Gaisler GRCAN, GRHCAN
>> and GRCANFD CAN controllers from a text format to YAML format.
>> - Add properties such as `compatible`, `reg`, `interrupts`
>
> Odd indentation. Please write readable commit msgs.
>
> Also:
> 1. Why? You need to explain why you are changing binding during
> conversion.
> 2. Reg was already there, so I don't understand why you need to add it.
>
>
>> and `clocks` for the CAN controllers.
>> - Removal of the old `grcan.txt` file as its contents have
>> been fully migrated to the YAML file.
>
> Drop, that's not relevant.
>
>> - YAML file includes examples of device tree bindings for
>> the CAN controllers
>
> Drop, not relevant. Please look at git history how commits are written.
>
>>
>> Signed-off-by: Arun Muthusamy <arun.muthusamy@gaisler.com>
>> ---
>> .../bindings/net/can/gaisler,grcan.yaml | 85
>> +++++++++++++++++++
>> .../devicetree/bindings/net/can/grcan.txt | 28 ------
>> 2 files changed, 85 insertions(+), 28 deletions(-)
>> create mode 100644
>> Documentation/devicetree/bindings/net/can/gaisler,grcan.yaml
>> delete mode 100644
>> Documentation/devicetree/bindings/net/can/grcan.txt
>>
>> diff --git
>> a/Documentation/devicetree/bindings/net/can/gaisler,grcan.yaml
>> b/Documentation/devicetree/bindings/net/can/gaisler,grcan.yaml
>> new file mode 100644
>> index 000000000000..521bdd89f130
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/net/can/gaisler,grcan.yaml
>> @@ -0,0 +1,85 @@
>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>> +%YAML 1.2
>> +---
>> +$id: http://devicetree.org/schemas/net/can/gaisler,grcan.yaml#
>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>> +
>> +title:
>> + Aeroflex Gaisler GRCAN, GRHCAN and GRCANFD CAN controllers.
>> +
>> +description: |
>> + GRCAN, GRCANFD, GRHCAN controllers are available in the GRLIB VHDL
>> IP core
>> + library.
>> +
>> + For further information look in the documentation for the GRLIB IP
>> library:
>> + https://download.gaisler.com/products/GRLIB/doc/grip.pdf
>> +
>> +maintainers:
>> + - Arun Muthusamy <arun.muthusamy@gaisler.com>
>> + - Andreas Larsson <andreas@gaisler.com>
>> +
>> +allOf:
>> + - $ref: can-controller.yaml#
>> +
>> +properties:
>> + compatible:
>> + enum:
>> + - gaisler,grcan
>> + - gaisler,grcanfd
>
> Blank line
>
>> + name:
>> + description: |
>
> Do not need '|' unless you need to preserve formatting.
>
>> + Fallback on node name matching for systems that don't provide
>> compatible.
>> + enum:
>> + - GAISLER_GRCAN
>> + - 01_03d
>> + - GAISLER_GRHCAN
>> + - "01_034"
>
> This does not really work. Are you really defining here "name"
> property?
>
>> +
>> + reg:
>> + maxItems: 1
>> +
>> + interrupts:
>> + maxItems: 1
>> +
>> + clocks:
>> + maxItems: 1
>> +
>> + freq:
>> + $ref: /schemas/types.yaml#/definitions/uint32
>> + description: |
>> + Frequency of the external oscillator clock in Hz (the frequency
>> of the
>> + amba bus in the ordinary case).
>> + This property should be used by systems that utilize the common
>> clock
>> + framework is not supported.
>
> Missing systemid. Your commit msg must explain any changes done to the
> binding during conversion.
>
>> +
>> +unevaluatedProperties: false
>
> This goes after required block.
>
>> +
>> +required:
>
> compatible as well
>
>> + - reg
>> + - interrupts
>
> Where is freq? It was required in the old binding. Again, you need to
> explain the changes.
>
>> +
>> +examples:
>> + - |
>> + #include <dt-bindings/interrupt-controller/irq.h>
>> + can@ff400000 {
>> + compatible = "gaisler,grcanfd";
>> + clocks = <&sysclock>;
>> + reg = <0xff400000 0x400>;
>> + interrupt-parent = <&plic0>;
>> + interrupts = <6>;
>> + };
>
> One example is enough
>
>> + - |
>> + #include <dt-bindings/interrupt-controller/irq.h>
>> + can@ff400000 {
>> + compatible = "gaisler,grcan";
>> + clocks = <&sysclock>;
>> + reg = <0xff400000 0x400>;
>> + interrupt-parent = <&plic0>;
>> + interrupts = <6>;
>> + };
>> + - |
>> + GAISLER_GRCAN@ff840000 {
>
> Especially no such examples. Please read DTS coding style.
>
>> + reg = <0xff840000 0x400>;
>> + freq = <50000000>;
>> + interrupts = <16>;
>> + };
>> diff --git a/Documentation/devicetree/bindings/net/can/grcan.txt
>> b/Documentation/devicetree/bindings/net/can/grcan.txt
>> deleted file mode 100644
>> index 34ef3498f887..000000000000
>> --- a/Documentation/devicetree/bindings/net/can/grcan.txt
>> +++ /dev/null
>> @@ -1,28 +0,0 @@
> Best regards,
> Krzysztof
On 24/11/2025 10:37, Arun Muthusamy wrote: > Hi Krzysztof, > > Thank you for your thorough review and insightful questions. I’d like to > clarify a few points regarding the DT binding and get your guidance. > > Node name vs. compatible matching: I don't understand what you are referring to. You cut everything and pasted something, which I have no clue what is that. I read many patches per day, so you are not helping here to understand the context. Please do not top-post. Best regards, Krzysztof
© 2016 - 2026 Red Hat, Inc.