xref: /linux/Documentation/devicetree/bindings/net/can/bosch,m_can.yaml (revision db4a3f0fbedb0398f77b9047e8b8bb2b49f355bb)
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  resets:
54    maxItems: 1
55
56  bosch,mram-cfg:
57    description: |
58      Message RAM configuration data.
59      Multiple M_CAN instances can share the same Message RAM
60      and each element(e.g Rx FIFO or Tx Buffer and etc) number
61      in Message RAM is also configurable, so this property is
62      telling driver how the shared or private Message RAM are
63      used by this M_CAN controller.
64
65      The format should be as follows:
66      <offset sidf_elems xidf_elems rxf0_elems rxf1_elems rxb_elems txe_elems txb_elems>
67      The 'offset' is an address offset of the Message RAM where
68      the following elements start from. This is usually set to
69      0x0 if you're using a private Message RAM. The remain cells
70      are used to specify how many elements are used for each FIFO/Buffer.
71
72      M_CAN includes the following elements according to user manual:
73      11-bit Filter	0-128 elements / 0-128 words
74      29-bit Filter	0-64 elements / 0-128 words
75      Rx FIFO 0		0-64 elements / 0-1152 words
76      Rx FIFO 1		0-64 elements / 0-1152 words
77      Rx Buffers	0-64 elements / 0-1152 words
78      Tx Event FIFO	0-32 elements / 0-64 words
79      Tx Buffers	0-32 elements / 0-576 words
80
81      Please refer to 2.4.1 Message RAM Configuration in Bosch
82      M_CAN user manual for details.
83    $ref: /schemas/types.yaml#/definitions/int32-array
84    items:
85      - description: The 'offset' is an address offset of the Message RAM where
86          the following elements start from. This is usually set to 0x0 if
87          you're using a private Message RAM.
88        default: 0
89      - description: 11-bit Filter 0-128 elements / 0-128 words
90        minimum: 0
91        maximum: 128
92      - description: 29-bit Filter 0-64 elements / 0-128 words
93        minimum: 0
94        maximum: 64
95      - description: Rx FIFO 0 0-64 elements / 0-1152 words
96        minimum: 0
97        maximum: 64
98      - description: Rx FIFO 1 0-64 elements / 0-1152 words
99        minimum: 0
100        maximum: 64
101      - description: Rx Buffers 0-64 elements / 0-1152 words
102        minimum: 0
103        maximum: 64
104      - description: Tx Event FIFO 0-32 elements / 0-64 words
105        minimum: 0
106        maximum: 32
107      - description: Tx Buffers 0-32 elements / 0-576 words
108        minimum: 0
109        maximum: 32
110    minItems: 1
111
112  power-domains:
113    description:
114      Power domain provider node and an args specifier containing
115      the can device id value.
116    maxItems: 1
117
118  can-transceiver:
119    $ref: can-transceiver.yaml#
120
121  phys:
122    maxItems: 1
123
124  access-controllers:
125    minItems: 1
126    maxItems: 2
127
128required:
129  - compatible
130  - reg
131  - reg-names
132  - clocks
133  - clock-names
134  - bosch,mram-cfg
135
136unevaluatedProperties: false
137
138examples:
139  - |
140    // Example with interrupts
141    #include <dt-bindings/clock/imx6sx-clock.h>
142    can@20e8000 {
143      compatible = "bosch,m_can";
144      reg = <0x020e8000 0x4000>, <0x02298000 0x4000>;
145      reg-names = "m_can", "message_ram";
146      interrupts = <0 114 0x04>, <0 114 0x04>;
147      interrupt-names = "int0", "int1";
148      clocks = <&clks IMX6SX_CLK_CANFD>,
149               <&clks IMX6SX_CLK_CANFD>;
150      clock-names = "hclk", "cclk";
151      bosch,mram-cfg = <0x0 0 0 32 0 0 0 1>;
152
153      can-transceiver {
154        max-bitrate = <5000000>;
155      };
156    };
157
158  - |
159    // Example with timer polling
160    #include <dt-bindings/clock/imx6sx-clock.h>
161    can@20e8000 {
162      compatible = "bosch,m_can";
163      reg = <0x020e8000 0x4000>, <0x02298000 0x4000>;
164      reg-names = "m_can", "message_ram";
165      clocks = <&clks IMX6SX_CLK_CANFD>,
166               <&clks IMX6SX_CLK_CANFD>;
167      clock-names = "hclk", "cclk";
168      bosch,mram-cfg = <0x0 0 0 32 0 0 0 1>;
169
170      can-transceiver {
171        max-bitrate = <5000000>;
172      };
173    };
174
175...
176