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