Linux 6.9-rc1
[linux-2.6-microblaze.git] / Documentation / devicetree / bindings / net / can / bosch,m_can.yaml
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
7 title: Bosch MCAN controller
8
9 description: Bosch MCAN controller for CAN bus
10
11 maintainers:
12   - Chandrasekar Ramakrishnan <rcsekar@samsung.com>
13
14 allOf:
15   - $ref: can-controller.yaml#
16
17 properties:
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 required:
122   - compatible
123   - reg
124   - reg-names
125   - clocks
126   - clock-names
127   - bosch,mram-cfg
128
129 unevaluatedProperties: false
130
131 examples:
132   - |
133     // Example with interrupts
134     #include <dt-bindings/clock/imx6sx-clock.h>
135     can@20e8000 {
136       compatible = "bosch,m_can";
137       reg = <0x020e8000 0x4000>, <0x02298000 0x4000>;
138       reg-names = "m_can", "message_ram";
139       interrupts = <0 114 0x04>, <0 114 0x04>;
140       interrupt-names = "int0", "int1";
141       clocks = <&clks IMX6SX_CLK_CANFD>,
142                <&clks IMX6SX_CLK_CANFD>;
143       clock-names = "hclk", "cclk";
144       bosch,mram-cfg = <0x0 0 0 32 0 0 0 1>;
145
146       can-transceiver {
147         max-bitrate = <5000000>;
148       };
149     };
150
151   - |
152     // Example with timer polling
153     #include <dt-bindings/clock/imx6sx-clock.h>
154     can@20e8000 {
155       compatible = "bosch,m_can";
156       reg = <0x020e8000 0x4000>, <0x02298000 0x4000>;
157       reg-names = "m_can", "message_ram";
158       clocks = <&clks IMX6SX_CLK_CANFD>,
159                <&clks IMX6SX_CLK_CANFD>;
160       clock-names = "hclk", "cclk";
161       bosch,mram-cfg = <0x0 0 0 32 0 0 0 1>;
162
163       can-transceiver {
164         max-bitrate = <5000000>;
165       };
166     };
167
168 ...