18a5e7d19SGeert Uytterhoeven# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
28a5e7d19SGeert Uytterhoeven%YAML 1.2
38a5e7d19SGeert Uytterhoeven---
48a5e7d19SGeert Uytterhoeven$id: http://devicetree.org/schemas/net/can/renesas,rcar-canfd.yaml#
58a5e7d19SGeert Uytterhoeven$schema: http://devicetree.org/meta-schemas/core.yaml#
68a5e7d19SGeert Uytterhoeven
78a5e7d19SGeert Uytterhoeventitle: Renesas R-Car CAN FD Controller
88a5e7d19SGeert Uytterhoeven
98a5e7d19SGeert Uytterhoevenmaintainers:
108a5e7d19SGeert Uytterhoeven  - Fabrizio Castro <fabrizio.castro.jz@renesas.com>
118a5e7d19SGeert Uytterhoeven
128a5e7d19SGeert Uytterhoevenproperties:
138a5e7d19SGeert Uytterhoeven  compatible:
148a5e7d19SGeert Uytterhoeven    oneOf:
158a5e7d19SGeert Uytterhoeven      - items:
168a5e7d19SGeert Uytterhoeven          - enum:
178a5e7d19SGeert Uytterhoeven              - renesas,r8a774a1-canfd     # RZ/G2M
188a5e7d19SGeert Uytterhoeven              - renesas,r8a774b1-canfd     # RZ/G2N
198a5e7d19SGeert Uytterhoeven              - renesas,r8a774c0-canfd     # RZ/G2E
208a5e7d19SGeert Uytterhoeven              - renesas,r8a774e1-canfd     # RZ/G2H
218a5e7d19SGeert Uytterhoeven              - renesas,r8a7795-canfd      # R-Car H3
228a5e7d19SGeert Uytterhoeven              - renesas,r8a7796-canfd      # R-Car M3-W
2344b6b105SWolfram Sang              - renesas,r8a77961-canfd     # R-Car M3-W+
248a5e7d19SGeert Uytterhoeven              - renesas,r8a77965-canfd     # R-Car M3-N
258a5e7d19SGeert Uytterhoeven              - renesas,r8a77970-canfd     # R-Car V3M
268a5e7d19SGeert Uytterhoeven              - renesas,r8a77980-canfd     # R-Car V3H
278a5e7d19SGeert Uytterhoeven              - renesas,r8a77990-canfd     # R-Car E3
288a5e7d19SGeert Uytterhoeven              - renesas,r8a77995-canfd     # R-Car D3
298a5e7d19SGeert Uytterhoeven          - const: renesas,rcar-gen3-canfd # R-Car Gen3 and RZ/G2
308a5e7d19SGeert Uytterhoeven
311aa5a06cSLad Prabhakar      - items:
321aa5a06cSLad Prabhakar          - enum:
335237ff4eSLad Prabhakar              - renesas,r9a07g043-canfd    # RZ/G2UL and RZ/Five
341aa5a06cSLad Prabhakar              - renesas,r9a07g044-canfd    # RZ/G2{L,LC}
35c205cac4SLad Prabhakar              - renesas,r9a07g054-canfd    # RZ/V2L
361aa5a06cSLad Prabhakar          - const: renesas,rzg2l-canfd     # RZ/G2L family
371aa5a06cSLad Prabhakar
38d6254d52SUlrich Hecht      - const: renesas,r8a779a0-canfd      # R-Car V3U
39d6254d52SUlrich Hecht
408a5e7d19SGeert Uytterhoeven  reg:
418a5e7d19SGeert Uytterhoeven    maxItems: 1
428a5e7d19SGeert Uytterhoeven
431aa5a06cSLad Prabhakar  interrupts: true
448a5e7d19SGeert Uytterhoeven
458a5e7d19SGeert Uytterhoeven  clocks:
468a5e7d19SGeert Uytterhoeven    maxItems: 3
478a5e7d19SGeert Uytterhoeven
488a5e7d19SGeert Uytterhoeven  clock-names:
498a5e7d19SGeert Uytterhoeven    items:
508a5e7d19SGeert Uytterhoeven      - const: fck
518a5e7d19SGeert Uytterhoeven      - const: canfd
528a5e7d19SGeert Uytterhoeven      - const: can_clk
538a5e7d19SGeert Uytterhoeven
548a5e7d19SGeert Uytterhoeven  power-domains:
558a5e7d19SGeert Uytterhoeven    maxItems: 1
568a5e7d19SGeert Uytterhoeven
571aa5a06cSLad Prabhakar  resets: true
588a5e7d19SGeert Uytterhoeven
598a5e7d19SGeert Uytterhoeven  renesas,no-can-fd:
608a5e7d19SGeert Uytterhoeven    $ref: /schemas/types.yaml#/definitions/flag
618a5e7d19SGeert Uytterhoeven    description:
628a5e7d19SGeert Uytterhoeven      The controller can operate in either CAN FD only mode (default) or
638a5e7d19SGeert Uytterhoeven      Classical CAN only mode.  The mode is global to both the channels.
648a5e7d19SGeert Uytterhoeven      Specify this property to put the controller in Classical CAN only mode.
658a5e7d19SGeert Uytterhoeven
668a5e7d19SGeert Uytterhoeven  assigned-clocks:
678a5e7d19SGeert Uytterhoeven    description:
688a5e7d19SGeert Uytterhoeven      Reference to the CANFD clock.  The CANFD clock is a div6 clock and can be
698a5e7d19SGeert Uytterhoeven      used by both CAN (if present) and CAN FD controllers at the same time.
708a5e7d19SGeert Uytterhoeven      It needs to be scaled to maximum frequency if any of these controllers
718a5e7d19SGeert Uytterhoeven      use it.
728a5e7d19SGeert Uytterhoeven
738a5e7d19SGeert Uytterhoeven  assigned-clock-rates:
748a5e7d19SGeert Uytterhoeven    description: Maximum frequency of the CANFD clock.
758a5e7d19SGeert Uytterhoeven
768a5e7d19SGeert UytterhoevenpatternProperties:
77*3abcc01cSGeert Uytterhoeven  "^channel[0-7]$":
788a5e7d19SGeert Uytterhoeven    type: object
798a5e7d19SGeert Uytterhoeven    description:
80*3abcc01cSGeert Uytterhoeven      The controller supports multiple channels and each is represented as a
81*3abcc01cSGeert Uytterhoeven      child node.  Each channel can be enabled/disabled individually.
82*3abcc01cSGeert Uytterhoeven
83*3abcc01cSGeert Uytterhoeven    additionalProperties: false
848a5e7d19SGeert Uytterhoeven
858a5e7d19SGeert Uytterhoevenrequired:
868a5e7d19SGeert Uytterhoeven  - compatible
878a5e7d19SGeert Uytterhoeven  - reg
888a5e7d19SGeert Uytterhoeven  - interrupts
8948b171dbSGeert Uytterhoeven  - interrupt-names
908a5e7d19SGeert Uytterhoeven  - clocks
918a5e7d19SGeert Uytterhoeven  - clock-names
928a5e7d19SGeert Uytterhoeven  - power-domains
938a5e7d19SGeert Uytterhoeven  - resets
948a5e7d19SGeert Uytterhoeven  - assigned-clocks
958a5e7d19SGeert Uytterhoeven  - assigned-clock-rates
968a5e7d19SGeert Uytterhoeven  - channel0
978a5e7d19SGeert Uytterhoeven  - channel1
988a5e7d19SGeert Uytterhoeven
99*3abcc01cSGeert UytterhoevenallOf:
100*3abcc01cSGeert Uytterhoeven  - $ref: can-controller.yaml#
101*3abcc01cSGeert Uytterhoeven
102*3abcc01cSGeert Uytterhoeven  - if:
1031aa5a06cSLad Prabhakar      properties:
1041aa5a06cSLad Prabhakar        compatible:
1051aa5a06cSLad Prabhakar          contains:
1061aa5a06cSLad Prabhakar            enum:
1071aa5a06cSLad Prabhakar              - renesas,rzg2l-canfd
1081aa5a06cSLad Prabhakar    then:
1091aa5a06cSLad Prabhakar      properties:
1101aa5a06cSLad Prabhakar        interrupts:
1111aa5a06cSLad Prabhakar          items:
1121aa5a06cSLad Prabhakar            - description: CAN global error interrupt
1131aa5a06cSLad Prabhakar            - description: CAN receive FIFO interrupt
1141aa5a06cSLad Prabhakar            - description: CAN0 error interrupt
1151aa5a06cSLad Prabhakar            - description: CAN0 transmit interrupt
1161aa5a06cSLad Prabhakar            - description: CAN0 transmit/receive FIFO receive completion interrupt
1171aa5a06cSLad Prabhakar            - description: CAN1 error interrupt
1181aa5a06cSLad Prabhakar            - description: CAN1 transmit interrupt
1191aa5a06cSLad Prabhakar            - description: CAN1 transmit/receive FIFO receive completion interrupt
1201aa5a06cSLad Prabhakar
1211aa5a06cSLad Prabhakar        interrupt-names:
1221aa5a06cSLad Prabhakar          items:
1231aa5a06cSLad Prabhakar            - const: g_err
1241aa5a06cSLad Prabhakar            - const: g_recc
1251aa5a06cSLad Prabhakar            - const: ch0_err
1261aa5a06cSLad Prabhakar            - const: ch0_rec
1271aa5a06cSLad Prabhakar            - const: ch0_trx
1281aa5a06cSLad Prabhakar            - const: ch1_err
1291aa5a06cSLad Prabhakar            - const: ch1_rec
1301aa5a06cSLad Prabhakar            - const: ch1_trx
1311aa5a06cSLad Prabhakar
1321aa5a06cSLad Prabhakar        resets:
1331aa5a06cSLad Prabhakar          maxItems: 2
1341aa5a06cSLad Prabhakar
1351aa5a06cSLad Prabhakar        reset-names:
1361aa5a06cSLad Prabhakar          items:
1371aa5a06cSLad Prabhakar            - const: rstp_n
1381aa5a06cSLad Prabhakar            - const: rstc_n
1391aa5a06cSLad Prabhakar
1401aa5a06cSLad Prabhakar      required:
1411aa5a06cSLad Prabhakar        - reset-names
1421aa5a06cSLad Prabhakar    else:
1431aa5a06cSLad Prabhakar      properties:
1441aa5a06cSLad Prabhakar        interrupts:
1451aa5a06cSLad Prabhakar          items:
1461aa5a06cSLad Prabhakar            - description: Channel interrupt
1471aa5a06cSLad Prabhakar            - description: Global interrupt
1481aa5a06cSLad Prabhakar
1491aa5a06cSLad Prabhakar        interrupt-names:
1501aa5a06cSLad Prabhakar          items:
1511aa5a06cSLad Prabhakar            - const: ch_int
1521aa5a06cSLad Prabhakar            - const: g_int
1531aa5a06cSLad Prabhakar
1541aa5a06cSLad Prabhakar        resets:
1551aa5a06cSLad Prabhakar          maxItems: 1
1561aa5a06cSLad Prabhakar
157*3abcc01cSGeert Uytterhoeven  - if:
158*3abcc01cSGeert Uytterhoeven      not:
159*3abcc01cSGeert Uytterhoeven        properties:
160*3abcc01cSGeert Uytterhoeven          compatible:
161*3abcc01cSGeert Uytterhoeven            contains:
162*3abcc01cSGeert Uytterhoeven              const: renesas,r8a779a0-canfd
163*3abcc01cSGeert Uytterhoeven    then:
164*3abcc01cSGeert Uytterhoeven      patternProperties:
165*3abcc01cSGeert Uytterhoeven        "^channel[2-7]$": false
166*3abcc01cSGeert Uytterhoeven
1678a5e7d19SGeert UytterhoevenunevaluatedProperties: false
1688a5e7d19SGeert Uytterhoeven
1698a5e7d19SGeert Uytterhoevenexamples:
1708a5e7d19SGeert Uytterhoeven  - |
1718a5e7d19SGeert Uytterhoeven    #include <dt-bindings/clock/r8a7795-cpg-mssr.h>
1728a5e7d19SGeert Uytterhoeven    #include <dt-bindings/interrupt-controller/arm-gic.h>
1738a5e7d19SGeert Uytterhoeven    #include <dt-bindings/power/r8a7795-sysc.h>
1748a5e7d19SGeert Uytterhoeven
1758a5e7d19SGeert Uytterhoeven    canfd: can@e66c0000 {
1768a5e7d19SGeert Uytterhoeven            compatible = "renesas,r8a7795-canfd",
1778a5e7d19SGeert Uytterhoeven                         "renesas,rcar-gen3-canfd";
1788a5e7d19SGeert Uytterhoeven            reg = <0xe66c0000 0x8000>;
1798a5e7d19SGeert Uytterhoeven            interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>,
1808a5e7d19SGeert Uytterhoeven                         <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
18148b171dbSGeert Uytterhoeven            interrupt-names = "ch_int", "g_int";
1828a5e7d19SGeert Uytterhoeven            clocks = <&cpg CPG_MOD 914>,
1838a5e7d19SGeert Uytterhoeven                     <&cpg CPG_CORE R8A7795_CLK_CANFD>,
1848a5e7d19SGeert Uytterhoeven                     <&can_clk>;
1858a5e7d19SGeert Uytterhoeven            clock-names = "fck", "canfd", "can_clk";
1868a5e7d19SGeert Uytterhoeven            assigned-clocks = <&cpg CPG_CORE R8A7795_CLK_CANFD>;
1878a5e7d19SGeert Uytterhoeven            assigned-clock-rates = <40000000>;
1888a5e7d19SGeert Uytterhoeven            power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
1898a5e7d19SGeert Uytterhoeven            resets = <&cpg 914>;
1908a5e7d19SGeert Uytterhoeven
1918a5e7d19SGeert Uytterhoeven            channel0 {
1928a5e7d19SGeert Uytterhoeven            };
1938a5e7d19SGeert Uytterhoeven
1948a5e7d19SGeert Uytterhoeven            channel1 {
1958a5e7d19SGeert Uytterhoeven            };
1968a5e7d19SGeert Uytterhoeven    };
197