xref: /linux/Documentation/devicetree/bindings/net/can/bosch,m_can.yaml (revision 621cde16e49b3ecf7d59a8106a20aaebfb4a59a9)
1# SPDX-License-Identifier: GPL-2.0
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/net/can/bosch,m_can.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Bosch MCAN controller
8
9description: Bosch MCAN controller for CAN bus
10
11maintainers:
12  - Chandrasekar Ramakrishnan <rcsekar@samsung.com>
13
14allOf:
15  - $ref: can-controller.yaml#
16
17properties:
18  compatible:
19    const: bosch,m_can
20
21  reg:
22    items:
23      - description: M_CAN registers map
24      - description: message RAM
25
26  reg-names:
27    items:
28      - const: m_can
29      - const: message_ram
30
31  interrupts:
32    items:
33      - description: interrupt line0
34      - description: interrupt line1
35    minItems: 1
36
37  interrupt-names:
38    items:
39      - const: int0
40      - const: int1
41    minItems: 1
42
43  clocks:
44    items:
45      - description: peripheral clock
46      - description: bus clock
47
48  clock-names:
49    items:
50      - const: hclk
51      - const: cclk
52
53  bosch,mram-cfg:
54    description: |
55      Message RAM configuration data.
56      Multiple M_CAN instances can share the same Message RAM
57      and each element(e.g Rx FIFO or Tx Buffer and etc) number
58      in Message RAM is also configurable, so this property is
59      telling driver how the shared or private Message RAM are
60      used by this M_CAN controller.
61
62      The format should be as follows:
63      <offset sidf_elems xidf_elems rxf0_elems rxf1_elems rxb_elems txe_elems txb_elems>
64      The 'offset' is an address offset of the Message RAM where
65      the following elements start from. This is usually set to
66      0x0 if you're using a private Message RAM. The remain cells
67      are used to specify how many elements are used for each FIFO/Buffer.
68
69      M_CAN includes the following elements according to user manual:
70      11-bit Filter	0-128 elements / 0-128 words
71      29-bit Filter	0-64 elements / 0-128 words
72      Rx FIFO 0		0-64 elements / 0-1152 words
73      Rx FIFO 1		0-64 elements / 0-1152 words
74      Rx Buffers	0-64 elements / 0-1152 words
75      Tx Event FIFO	0-32 elements / 0-64 words
76      Tx Buffers	0-32 elements / 0-576 words
77
78      Please refer to 2.4.1 Message RAM Configuration in Bosch
79      M_CAN user manual for details.
80    $ref: /schemas/types.yaml#/definitions/int32-array
81    items:
82      - description: The 'offset' is an address offset of the Message RAM where
83          the following elements start from. This is usually set to 0x0 if
84          you're using a private Message RAM.
85        default: 0
86      - description: 11-bit Filter 0-128 elements / 0-128 words
87        minimum: 0
88        maximum: 128
89      - description: 29-bit Filter 0-64 elements / 0-128 words
90        minimum: 0
91        maximum: 64
92      - description: Rx FIFO 0 0-64 elements / 0-1152 words
93        minimum: 0
94        maximum: 64
95      - description: Rx FIFO 1 0-64 elements / 0-1152 words
96        minimum: 0
97        maximum: 64
98      - description: Rx Buffers 0-64 elements / 0-1152 words
99        minimum: 0
100        maximum: 64
101      - description: Tx Event FIFO 0-32 elements / 0-64 words
102        minimum: 0
103        maximum: 32
104      - description: Tx Buffers 0-32 elements / 0-576 words
105        minimum: 0
106        maximum: 32
107    minItems: 1
108
109  power-domains:
110    description:
111      Power domain provider node and an args specifier containing
112      the can device id value.
113    maxItems: 1
114
115  can-transceiver:
116    $ref: can-transceiver.yaml#
117
118  phys:
119    maxItems: 1
120
121  access-controllers:
122    minItems: 1
123    maxItems: 2
124
125required:
126  - compatible
127  - reg
128  - reg-names
129  - clocks
130  - clock-names
131  - bosch,mram-cfg
132
133unevaluatedProperties: false
134
135examples:
136  - |
137    // Example with interrupts
138    #include <dt-bindings/clock/imx6sx-clock.h>
139    can@20e8000 {
140      compatible = "bosch,m_can";
141      reg = <0x020e8000 0x4000>, <0x02298000 0x4000>;
142      reg-names = "m_can", "message_ram";
143      interrupts = <0 114 0x04>, <0 114 0x04>;
144      interrupt-names = "int0", "int1";
145      clocks = <&clks IMX6SX_CLK_CANFD>,
146               <&clks IMX6SX_CLK_CANFD>;
147      clock-names = "hclk", "cclk";
148      bosch,mram-cfg = <0x0 0 0 32 0 0 0 1>;
149
150      can-transceiver {
151        max-bitrate = <5000000>;
152      };
153    };
154
155  - |
156    // Example with timer polling
157    #include <dt-bindings/clock/imx6sx-clock.h>
158    can@20e8000 {
159      compatible = "bosch,m_can";
160      reg = <0x020e8000 0x4000>, <0x02298000 0x4000>;
161      reg-names = "m_can", "message_ram";
162      clocks = <&clks IMX6SX_CLK_CANFD>,
163               <&clks IMX6SX_CLK_CANFD>;
164      clock-names = "hclk", "cclk";
165      bosch,mram-cfg = <0x0 0 0 32 0 0 0 1>;
166
167      can-transceiver {
168        max-bitrate = <5000000>;
169      };
170    };
171
172...
173