1824674b5SBenjamin Gaignard# SPDX-License-Identifier: GPL-2.0
2824674b5SBenjamin Gaignard%YAML 1.2
3824674b5SBenjamin Gaignard---
4824674b5SBenjamin Gaignard$id: http://devicetree.org/schemas/net/can/bosch,m_can.yaml#
5824674b5SBenjamin Gaignard$schema: http://devicetree.org/meta-schemas/core.yaml#
6824674b5SBenjamin Gaignard
784e85359SKrzysztof Kozlowskititle: Bosch MCAN controller
8824674b5SBenjamin Gaignard
9824674b5SBenjamin Gaignarddescription: Bosch MCAN controller for CAN bus
10824674b5SBenjamin Gaignard
11824674b5SBenjamin Gaignardmaintainers:
12edd056a1SMarc Kleine-Budde  - Chandrasekar Ramakrishnan <rcsekar@samsung.com>
13824674b5SBenjamin Gaignard
1458212e03SMarc Kleine-BuddeallOf:
1558212e03SMarc Kleine-Budde  - $ref: can-controller.yaml#
1658212e03SMarc Kleine-Budde
17824674b5SBenjamin Gaignardproperties:
18824674b5SBenjamin Gaignard  compatible:
19824674b5SBenjamin Gaignard    const: bosch,m_can
20824674b5SBenjamin Gaignard
21824674b5SBenjamin Gaignard  reg:
22824674b5SBenjamin Gaignard    items:
23824674b5SBenjamin Gaignard      - description: M_CAN registers map
24824674b5SBenjamin Gaignard      - description: message RAM
25824674b5SBenjamin Gaignard
26824674b5SBenjamin Gaignard  reg-names:
27824674b5SBenjamin Gaignard    items:
28824674b5SBenjamin Gaignard      - const: m_can
29824674b5SBenjamin Gaignard      - const: message_ram
30824674b5SBenjamin Gaignard
31824674b5SBenjamin Gaignard  interrupts:
32824674b5SBenjamin Gaignard    items:
33824674b5SBenjamin Gaignard      - description: interrupt line0
34824674b5SBenjamin Gaignard      - description: interrupt line1
35824674b5SBenjamin Gaignard    minItems: 1
36824674b5SBenjamin Gaignard
37824674b5SBenjamin Gaignard  interrupt-names:
38824674b5SBenjamin Gaignard    items:
39824674b5SBenjamin Gaignard      - const: int0
40824674b5SBenjamin Gaignard      - const: int1
41824674b5SBenjamin Gaignard    minItems: 1
42824674b5SBenjamin Gaignard
43824674b5SBenjamin Gaignard  clocks:
44824674b5SBenjamin Gaignard    items:
45824674b5SBenjamin Gaignard      - description: peripheral clock
46824674b5SBenjamin Gaignard      - description: bus clock
47824674b5SBenjamin Gaignard
48824674b5SBenjamin Gaignard  clock-names:
49824674b5SBenjamin Gaignard    items:
50824674b5SBenjamin Gaignard      - const: hclk
51824674b5SBenjamin Gaignard      - const: cclk
52824674b5SBenjamin Gaignard
53824674b5SBenjamin Gaignard  bosch,mram-cfg:
54824674b5SBenjamin Gaignard    description: |
55824674b5SBenjamin Gaignard      Message RAM configuration data.
56824674b5SBenjamin Gaignard      Multiple M_CAN instances can share the same Message RAM
57824674b5SBenjamin Gaignard      and each element(e.g Rx FIFO or Tx Buffer and etc) number
58824674b5SBenjamin Gaignard      in Message RAM is also configurable, so this property is
59824674b5SBenjamin Gaignard      telling driver how the shared or private Message RAM are
60824674b5SBenjamin Gaignard      used by this M_CAN controller.
61824674b5SBenjamin Gaignard
62824674b5SBenjamin Gaignard      The format should be as follows:
63824674b5SBenjamin Gaignard      <offset sidf_elems xidf_elems rxf0_elems rxf1_elems rxb_elems txe_elems txb_elems>
64824674b5SBenjamin Gaignard      The 'offset' is an address offset of the Message RAM where
65824674b5SBenjamin Gaignard      the following elements start from. This is usually set to
66824674b5SBenjamin Gaignard      0x0 if you're using a private Message RAM. The remain cells
67824674b5SBenjamin Gaignard      are used to specify how many elements are used for each FIFO/Buffer.
68824674b5SBenjamin Gaignard
69824674b5SBenjamin Gaignard      M_CAN includes the following elements according to user manual:
70824674b5SBenjamin Gaignard      11-bit Filter	0-128 elements / 0-128 words
71824674b5SBenjamin Gaignard      29-bit Filter	0-64 elements / 0-128 words
72824674b5SBenjamin Gaignard      Rx FIFO 0		0-64 elements / 0-1152 words
73824674b5SBenjamin Gaignard      Rx FIFO 1		0-64 elements / 0-1152 words
74824674b5SBenjamin Gaignard      Rx Buffers	0-64 elements / 0-1152 words
75824674b5SBenjamin Gaignard      Tx Event FIFO	0-32 elements / 0-64 words
76824674b5SBenjamin Gaignard      Tx Buffers	0-32 elements / 0-576 words
77824674b5SBenjamin Gaignard
78824674b5SBenjamin Gaignard      Please refer to 2.4.1 Message RAM Configuration in Bosch
79824674b5SBenjamin Gaignard      M_CAN user manual for details.
803d21a460SRob Herring    $ref: /schemas/types.yaml#/definitions/int32-array
81824674b5SBenjamin Gaignard    items:
823d21a460SRob Herring      - description: The 'offset' is an address offset of the Message RAM where
833d21a460SRob Herring          the following elements start from. This is usually set to 0x0 if
843d21a460SRob Herring          you're using a private Message RAM.
85824674b5SBenjamin Gaignard        default: 0
86824674b5SBenjamin Gaignard      - description: 11-bit Filter 0-128 elements / 0-128 words
87824674b5SBenjamin Gaignard        minimum: 0
88824674b5SBenjamin Gaignard        maximum: 128
89824674b5SBenjamin Gaignard      - description: 29-bit Filter 0-64 elements / 0-128 words
90824674b5SBenjamin Gaignard        minimum: 0
91824674b5SBenjamin Gaignard        maximum: 64
92824674b5SBenjamin Gaignard      - description: Rx FIFO 0 0-64 elements / 0-1152 words
93824674b5SBenjamin Gaignard        minimum: 0
94824674b5SBenjamin Gaignard        maximum: 64
95824674b5SBenjamin Gaignard      - description: Rx FIFO 1 0-64 elements / 0-1152 words
96824674b5SBenjamin Gaignard        minimum: 0
97824674b5SBenjamin Gaignard        maximum: 64
98824674b5SBenjamin Gaignard      - description: Rx Buffers 0-64 elements / 0-1152 words
99824674b5SBenjamin Gaignard        minimum: 0
100824674b5SBenjamin Gaignard        maximum: 64
101824674b5SBenjamin Gaignard      - description: Tx Event FIFO 0-32 elements / 0-64 words
102824674b5SBenjamin Gaignard        minimum: 0
103824674b5SBenjamin Gaignard        maximum: 32
104824674b5SBenjamin Gaignard      - description: Tx Buffers 0-32 elements / 0-576 words
105824674b5SBenjamin Gaignard        minimum: 0
106824674b5SBenjamin Gaignard        maximum: 32
10759dfdc13SDinh Nguyen    minItems: 1
108824674b5SBenjamin Gaignard
109d85165b2SAswath Govindraju  power-domains:
110d85165b2SAswath Govindraju    description:
111d85165b2SAswath Govindraju      Power domain provider node and an args specifier containing
112d85165b2SAswath Govindraju      the can device id value.
113d85165b2SAswath Govindraju    maxItems: 1
114d85165b2SAswath Govindraju
115824674b5SBenjamin Gaignard  can-transceiver:
116824674b5SBenjamin Gaignard    $ref: can-transceiver.yaml#
117824674b5SBenjamin Gaignard
1189c0e7ccdSFaiz Abbas  phys:
1199c0e7ccdSFaiz Abbas    maxItems: 1
1209c0e7ccdSFaiz Abbas
121824674b5SBenjamin Gaignardrequired:
122824674b5SBenjamin Gaignard  - compatible
123824674b5SBenjamin Gaignard  - reg
124824674b5SBenjamin Gaignard  - reg-names
125824674b5SBenjamin Gaignard  - clocks
126824674b5SBenjamin Gaignard  - clock-names
127824674b5SBenjamin Gaignard  - bosch,mram-cfg
128824674b5SBenjamin Gaignard
129824674b5SBenjamin GaignardunevaluatedProperties: false
130824674b5SBenjamin Gaignard
131824674b5SBenjamin Gaignardexamples:
132824674b5SBenjamin Gaignard  - |
133*bb410c03SJudith Mendez    // Example with interrupts
134824674b5SBenjamin Gaignard    #include <dt-bindings/clock/imx6sx-clock.h>
135824674b5SBenjamin Gaignard    can@20e8000 {
136824674b5SBenjamin Gaignard      compatible = "bosch,m_can";
137824674b5SBenjamin Gaignard      reg = <0x020e8000 0x4000>, <0x02298000 0x4000>;
138824674b5SBenjamin Gaignard      reg-names = "m_can", "message_ram";
139824674b5SBenjamin Gaignard      interrupts = <0 114 0x04>, <0 114 0x04>;
140824674b5SBenjamin Gaignard      interrupt-names = "int0", "int1";
141824674b5SBenjamin Gaignard      clocks = <&clks IMX6SX_CLK_CANFD>,
142824674b5SBenjamin Gaignard               <&clks IMX6SX_CLK_CANFD>;
143824674b5SBenjamin Gaignard      clock-names = "hclk", "cclk";
144824674b5SBenjamin Gaignard      bosch,mram-cfg = <0x0 0 0 32 0 0 0 1>;
145824674b5SBenjamin Gaignard
146824674b5SBenjamin Gaignard      can-transceiver {
147824674b5SBenjamin Gaignard        max-bitrate = <5000000>;
148824674b5SBenjamin Gaignard      };
149824674b5SBenjamin Gaignard    };
150824674b5SBenjamin Gaignard
151*bb410c03SJudith Mendez  - |
152*bb410c03SJudith Mendez    // Example with timer polling
153*bb410c03SJudith Mendez    #include <dt-bindings/clock/imx6sx-clock.h>
154*bb410c03SJudith Mendez    can@20e8000 {
155*bb410c03SJudith Mendez      compatible = "bosch,m_can";
156*bb410c03SJudith Mendez      reg = <0x020e8000 0x4000>, <0x02298000 0x4000>;
157*bb410c03SJudith Mendez      reg-names = "m_can", "message_ram";
158*bb410c03SJudith Mendez      clocks = <&clks IMX6SX_CLK_CANFD>,
159*bb410c03SJudith Mendez               <&clks IMX6SX_CLK_CANFD>;
160*bb410c03SJudith Mendez      clock-names = "hclk", "cclk";
161*bb410c03SJudith Mendez      bosch,mram-cfg = <0x0 0 0 32 0 0 0 1>;
162*bb410c03SJudith Mendez
163*bb410c03SJudith Mendez      can-transceiver {
164*bb410c03SJudith Mendez        max-bitrate = <5000000>;
165*bb410c03SJudith Mendez      };
166*bb410c03SJudith Mendez    };
167*bb410c03SJudith Mendez
168824674b5SBenjamin Gaignard...
169