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:
33e8b98168SGeert Uytterhoeven              - renesas,r8a779a0-canfd     # R-Car V3U
343e17dc91SGeert Uytterhoeven              - renesas,r8a779g0-canfd     # R-Car V4H
35e8b98168SGeert Uytterhoeven          - const: renesas,rcar-gen4-canfd # R-Car Gen4
36e8b98168SGeert Uytterhoeven
37e8b98168SGeert Uytterhoeven      - items:
38e8b98168SGeert Uytterhoeven          - enum:
395237ff4eSLad Prabhakar              - renesas,r9a07g043-canfd    # RZ/G2UL and RZ/Five
401aa5a06cSLad Prabhakar              - renesas,r9a07g044-canfd    # RZ/G2{L,LC}
41c205cac4SLad Prabhakar              - renesas,r9a07g054-canfd    # RZ/V2L
421aa5a06cSLad Prabhakar          - const: renesas,rzg2l-canfd     # RZ/G2L family
431aa5a06cSLad Prabhakar
448a5e7d19SGeert Uytterhoeven  reg:
458a5e7d19SGeert Uytterhoeven    maxItems: 1
468a5e7d19SGeert Uytterhoeven
471aa5a06cSLad Prabhakar  interrupts: true
488a5e7d19SGeert Uytterhoeven
498a5e7d19SGeert Uytterhoeven  clocks:
508a5e7d19SGeert Uytterhoeven    maxItems: 3
518a5e7d19SGeert Uytterhoeven
528a5e7d19SGeert Uytterhoeven  clock-names:
538a5e7d19SGeert Uytterhoeven    items:
548a5e7d19SGeert Uytterhoeven      - const: fck
558a5e7d19SGeert Uytterhoeven      - const: canfd
568a5e7d19SGeert Uytterhoeven      - const: can_clk
578a5e7d19SGeert Uytterhoeven
588a5e7d19SGeert Uytterhoeven  power-domains:
598a5e7d19SGeert Uytterhoeven    maxItems: 1
608a5e7d19SGeert Uytterhoeven
611aa5a06cSLad Prabhakar  resets: true
628a5e7d19SGeert Uytterhoeven
638a5e7d19SGeert Uytterhoeven  renesas,no-can-fd:
648a5e7d19SGeert Uytterhoeven    $ref: /schemas/types.yaml#/definitions/flag
658a5e7d19SGeert Uytterhoeven    description:
668a5e7d19SGeert Uytterhoeven      The controller can operate in either CAN FD only mode (default) or
67e8b98168SGeert Uytterhoeven      Classical CAN only mode.  The mode is global to all channels.
688a5e7d19SGeert Uytterhoeven      Specify this property to put the controller in Classical CAN only mode.
698a5e7d19SGeert Uytterhoeven
708a5e7d19SGeert Uytterhoeven  assigned-clocks:
718a5e7d19SGeert Uytterhoeven    description:
728a5e7d19SGeert Uytterhoeven      Reference to the CANFD clock.  The CANFD clock is a div6 clock and can be
738a5e7d19SGeert Uytterhoeven      used by both CAN (if present) and CAN FD controllers at the same time.
748a5e7d19SGeert Uytterhoeven      It needs to be scaled to maximum frequency if any of these controllers
758a5e7d19SGeert Uytterhoeven      use it.
768a5e7d19SGeert Uytterhoeven
778a5e7d19SGeert Uytterhoeven  assigned-clock-rates:
788a5e7d19SGeert Uytterhoeven    description: Maximum frequency of the CANFD clock.
798a5e7d19SGeert Uytterhoeven
808a5e7d19SGeert UytterhoevenpatternProperties:
813abcc01cSGeert Uytterhoeven  "^channel[0-7]$":
828a5e7d19SGeert Uytterhoeven    type: object
838a5e7d19SGeert Uytterhoeven    description:
843abcc01cSGeert Uytterhoeven      The controller supports multiple channels and each is represented as a
853abcc01cSGeert Uytterhoeven      child node.  Each channel can be enabled/disabled individually.
863abcc01cSGeert Uytterhoeven
87*a707d44dSGeert Uytterhoeven    properties:
88*a707d44dSGeert Uytterhoeven      phys:
89*a707d44dSGeert Uytterhoeven        maxItems: 1
90*a707d44dSGeert Uytterhoeven
913abcc01cSGeert Uytterhoeven    additionalProperties: false
928a5e7d19SGeert Uytterhoeven
938a5e7d19SGeert Uytterhoevenrequired:
948a5e7d19SGeert Uytterhoeven  - compatible
958a5e7d19SGeert Uytterhoeven  - reg
968a5e7d19SGeert Uytterhoeven  - interrupts
9748b171dbSGeert Uytterhoeven  - interrupt-names
988a5e7d19SGeert Uytterhoeven  - clocks
998a5e7d19SGeert Uytterhoeven  - clock-names
1008a5e7d19SGeert Uytterhoeven  - power-domains
1018a5e7d19SGeert Uytterhoeven  - resets
1028a5e7d19SGeert Uytterhoeven  - assigned-clocks
1038a5e7d19SGeert Uytterhoeven  - assigned-clock-rates
1048a5e7d19SGeert Uytterhoeven  - channel0
1058a5e7d19SGeert Uytterhoeven  - channel1
1068a5e7d19SGeert Uytterhoeven
1073abcc01cSGeert UytterhoevenallOf:
1083abcc01cSGeert Uytterhoeven  - $ref: can-controller.yaml#
1093abcc01cSGeert Uytterhoeven
1103abcc01cSGeert Uytterhoeven  - if:
1111aa5a06cSLad Prabhakar      properties:
1121aa5a06cSLad Prabhakar        compatible:
1131aa5a06cSLad Prabhakar          contains:
1141aa5a06cSLad Prabhakar            enum:
1151aa5a06cSLad Prabhakar              - renesas,rzg2l-canfd
1161aa5a06cSLad Prabhakar    then:
1171aa5a06cSLad Prabhakar      properties:
1181aa5a06cSLad Prabhakar        interrupts:
1191aa5a06cSLad Prabhakar          items:
1201aa5a06cSLad Prabhakar            - description: CAN global error interrupt
1211aa5a06cSLad Prabhakar            - description: CAN receive FIFO interrupt
1221aa5a06cSLad Prabhakar            - description: CAN0 error interrupt
1231aa5a06cSLad Prabhakar            - description: CAN0 transmit interrupt
1241aa5a06cSLad Prabhakar            - description: CAN0 transmit/receive FIFO receive completion interrupt
1251aa5a06cSLad Prabhakar            - description: CAN1 error interrupt
1261aa5a06cSLad Prabhakar            - description: CAN1 transmit interrupt
1271aa5a06cSLad Prabhakar            - description: CAN1 transmit/receive FIFO receive completion interrupt
1281aa5a06cSLad Prabhakar
1291aa5a06cSLad Prabhakar        interrupt-names:
1301aa5a06cSLad Prabhakar          items:
1311aa5a06cSLad Prabhakar            - const: g_err
1321aa5a06cSLad Prabhakar            - const: g_recc
1331aa5a06cSLad Prabhakar            - const: ch0_err
1341aa5a06cSLad Prabhakar            - const: ch0_rec
1351aa5a06cSLad Prabhakar            - const: ch0_trx
1361aa5a06cSLad Prabhakar            - const: ch1_err
1371aa5a06cSLad Prabhakar            - const: ch1_rec
1381aa5a06cSLad Prabhakar            - const: ch1_trx
1391aa5a06cSLad Prabhakar
1401aa5a06cSLad Prabhakar        resets:
1411aa5a06cSLad Prabhakar          maxItems: 2
1421aa5a06cSLad Prabhakar
1431aa5a06cSLad Prabhakar        reset-names:
1441aa5a06cSLad Prabhakar          items:
1451aa5a06cSLad Prabhakar            - const: rstp_n
1461aa5a06cSLad Prabhakar            - const: rstc_n
1471aa5a06cSLad Prabhakar
1481aa5a06cSLad Prabhakar      required:
1491aa5a06cSLad Prabhakar        - reset-names
1501aa5a06cSLad Prabhakar    else:
1511aa5a06cSLad Prabhakar      properties:
1521aa5a06cSLad Prabhakar        interrupts:
1531aa5a06cSLad Prabhakar          items:
1541aa5a06cSLad Prabhakar            - description: Channel interrupt
1551aa5a06cSLad Prabhakar            - description: Global interrupt
1561aa5a06cSLad Prabhakar
1571aa5a06cSLad Prabhakar        interrupt-names:
1581aa5a06cSLad Prabhakar          items:
1591aa5a06cSLad Prabhakar            - const: ch_int
1601aa5a06cSLad Prabhakar            - const: g_int
1611aa5a06cSLad Prabhakar
1621aa5a06cSLad Prabhakar        resets:
1631aa5a06cSLad Prabhakar          maxItems: 1
1641aa5a06cSLad Prabhakar
1653abcc01cSGeert Uytterhoeven  - if:
1663abcc01cSGeert Uytterhoeven      not:
1673abcc01cSGeert Uytterhoeven        properties:
1683abcc01cSGeert Uytterhoeven          compatible:
1693abcc01cSGeert Uytterhoeven            contains:
170e8b98168SGeert Uytterhoeven              const: renesas,rcar-gen4-canfd
1713abcc01cSGeert Uytterhoeven    then:
1723abcc01cSGeert Uytterhoeven      patternProperties:
1733abcc01cSGeert Uytterhoeven        "^channel[2-7]$": false
1743abcc01cSGeert Uytterhoeven
1758a5e7d19SGeert UytterhoevenunevaluatedProperties: false
1768a5e7d19SGeert Uytterhoeven
1778a5e7d19SGeert Uytterhoevenexamples:
1788a5e7d19SGeert Uytterhoeven  - |
1798a5e7d19SGeert Uytterhoeven    #include <dt-bindings/clock/r8a7795-cpg-mssr.h>
1808a5e7d19SGeert Uytterhoeven    #include <dt-bindings/interrupt-controller/arm-gic.h>
1818a5e7d19SGeert Uytterhoeven    #include <dt-bindings/power/r8a7795-sysc.h>
1828a5e7d19SGeert Uytterhoeven
1838a5e7d19SGeert Uytterhoeven    canfd: can@e66c0000 {
1848a5e7d19SGeert Uytterhoeven            compatible = "renesas,r8a7795-canfd",
1858a5e7d19SGeert Uytterhoeven                         "renesas,rcar-gen3-canfd";
1868a5e7d19SGeert Uytterhoeven            reg = <0xe66c0000 0x8000>;
1878a5e7d19SGeert Uytterhoeven            interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>,
1888a5e7d19SGeert Uytterhoeven                         <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
18948b171dbSGeert Uytterhoeven            interrupt-names = "ch_int", "g_int";
1908a5e7d19SGeert Uytterhoeven            clocks = <&cpg CPG_MOD 914>,
1918a5e7d19SGeert Uytterhoeven                     <&cpg CPG_CORE R8A7795_CLK_CANFD>,
1928a5e7d19SGeert Uytterhoeven                     <&can_clk>;
1938a5e7d19SGeert Uytterhoeven            clock-names = "fck", "canfd", "can_clk";
1948a5e7d19SGeert Uytterhoeven            assigned-clocks = <&cpg CPG_CORE R8A7795_CLK_CANFD>;
1958a5e7d19SGeert Uytterhoeven            assigned-clock-rates = <40000000>;
1968a5e7d19SGeert Uytterhoeven            power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
1978a5e7d19SGeert Uytterhoeven            resets = <&cpg 914>;
1988a5e7d19SGeert Uytterhoeven
1998a5e7d19SGeert Uytterhoeven            channel0 {
2008a5e7d19SGeert Uytterhoeven            };
2018a5e7d19SGeert Uytterhoeven
2028a5e7d19SGeert Uytterhoeven            channel1 {
2038a5e7d19SGeert Uytterhoeven            };
2048a5e7d19SGeert Uytterhoeven    };
205