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:
33*e8b98168SGeert Uytterhoeven              - renesas,r8a779a0-canfd     # R-Car V3U
34*e8b98168SGeert Uytterhoeven          - const: renesas,rcar-gen4-canfd # R-Car Gen4
35*e8b98168SGeert Uytterhoeven
36*e8b98168SGeert Uytterhoeven      - items:
37*e8b98168SGeert Uytterhoeven          - enum:
385237ff4eSLad Prabhakar              - renesas,r9a07g043-canfd    # RZ/G2UL and RZ/Five
391aa5a06cSLad Prabhakar              - renesas,r9a07g044-canfd    # RZ/G2{L,LC}
40c205cac4SLad Prabhakar              - renesas,r9a07g054-canfd    # RZ/V2L
411aa5a06cSLad Prabhakar          - const: renesas,rzg2l-canfd     # RZ/G2L family
421aa5a06cSLad Prabhakar
438a5e7d19SGeert Uytterhoeven  reg:
448a5e7d19SGeert Uytterhoeven    maxItems: 1
458a5e7d19SGeert Uytterhoeven
461aa5a06cSLad Prabhakar  interrupts: true
478a5e7d19SGeert Uytterhoeven
488a5e7d19SGeert Uytterhoeven  clocks:
498a5e7d19SGeert Uytterhoeven    maxItems: 3
508a5e7d19SGeert Uytterhoeven
518a5e7d19SGeert Uytterhoeven  clock-names:
528a5e7d19SGeert Uytterhoeven    items:
538a5e7d19SGeert Uytterhoeven      - const: fck
548a5e7d19SGeert Uytterhoeven      - const: canfd
558a5e7d19SGeert Uytterhoeven      - const: can_clk
568a5e7d19SGeert Uytterhoeven
578a5e7d19SGeert Uytterhoeven  power-domains:
588a5e7d19SGeert Uytterhoeven    maxItems: 1
598a5e7d19SGeert Uytterhoeven
601aa5a06cSLad Prabhakar  resets: true
618a5e7d19SGeert Uytterhoeven
628a5e7d19SGeert Uytterhoeven  renesas,no-can-fd:
638a5e7d19SGeert Uytterhoeven    $ref: /schemas/types.yaml#/definitions/flag
648a5e7d19SGeert Uytterhoeven    description:
658a5e7d19SGeert Uytterhoeven      The controller can operate in either CAN FD only mode (default) or
66*e8b98168SGeert Uytterhoeven      Classical CAN only mode.  The mode is global to all channels.
678a5e7d19SGeert Uytterhoeven      Specify this property to put the controller in Classical CAN only mode.
688a5e7d19SGeert Uytterhoeven
698a5e7d19SGeert Uytterhoeven  assigned-clocks:
708a5e7d19SGeert Uytterhoeven    description:
718a5e7d19SGeert Uytterhoeven      Reference to the CANFD clock.  The CANFD clock is a div6 clock and can be
728a5e7d19SGeert Uytterhoeven      used by both CAN (if present) and CAN FD controllers at the same time.
738a5e7d19SGeert Uytterhoeven      It needs to be scaled to maximum frequency if any of these controllers
748a5e7d19SGeert Uytterhoeven      use it.
758a5e7d19SGeert Uytterhoeven
768a5e7d19SGeert Uytterhoeven  assigned-clock-rates:
778a5e7d19SGeert Uytterhoeven    description: Maximum frequency of the CANFD clock.
788a5e7d19SGeert Uytterhoeven
798a5e7d19SGeert UytterhoevenpatternProperties:
803abcc01cSGeert Uytterhoeven  "^channel[0-7]$":
818a5e7d19SGeert Uytterhoeven    type: object
828a5e7d19SGeert Uytterhoeven    description:
833abcc01cSGeert Uytterhoeven      The controller supports multiple channels and each is represented as a
843abcc01cSGeert Uytterhoeven      child node.  Each channel can be enabled/disabled individually.
853abcc01cSGeert Uytterhoeven
863abcc01cSGeert Uytterhoeven    additionalProperties: false
878a5e7d19SGeert Uytterhoeven
888a5e7d19SGeert Uytterhoevenrequired:
898a5e7d19SGeert Uytterhoeven  - compatible
908a5e7d19SGeert Uytterhoeven  - reg
918a5e7d19SGeert Uytterhoeven  - interrupts
9248b171dbSGeert Uytterhoeven  - interrupt-names
938a5e7d19SGeert Uytterhoeven  - clocks
948a5e7d19SGeert Uytterhoeven  - clock-names
958a5e7d19SGeert Uytterhoeven  - power-domains
968a5e7d19SGeert Uytterhoeven  - resets
978a5e7d19SGeert Uytterhoeven  - assigned-clocks
988a5e7d19SGeert Uytterhoeven  - assigned-clock-rates
998a5e7d19SGeert Uytterhoeven  - channel0
1008a5e7d19SGeert Uytterhoeven  - channel1
1018a5e7d19SGeert Uytterhoeven
1023abcc01cSGeert UytterhoevenallOf:
1033abcc01cSGeert Uytterhoeven  - $ref: can-controller.yaml#
1043abcc01cSGeert Uytterhoeven
1053abcc01cSGeert Uytterhoeven  - if:
1061aa5a06cSLad Prabhakar      properties:
1071aa5a06cSLad Prabhakar        compatible:
1081aa5a06cSLad Prabhakar          contains:
1091aa5a06cSLad Prabhakar            enum:
1101aa5a06cSLad Prabhakar              - renesas,rzg2l-canfd
1111aa5a06cSLad Prabhakar    then:
1121aa5a06cSLad Prabhakar      properties:
1131aa5a06cSLad Prabhakar        interrupts:
1141aa5a06cSLad Prabhakar          items:
1151aa5a06cSLad Prabhakar            - description: CAN global error interrupt
1161aa5a06cSLad Prabhakar            - description: CAN receive FIFO interrupt
1171aa5a06cSLad Prabhakar            - description: CAN0 error interrupt
1181aa5a06cSLad Prabhakar            - description: CAN0 transmit interrupt
1191aa5a06cSLad Prabhakar            - description: CAN0 transmit/receive FIFO receive completion interrupt
1201aa5a06cSLad Prabhakar            - description: CAN1 error interrupt
1211aa5a06cSLad Prabhakar            - description: CAN1 transmit interrupt
1221aa5a06cSLad Prabhakar            - description: CAN1 transmit/receive FIFO receive completion interrupt
1231aa5a06cSLad Prabhakar
1241aa5a06cSLad Prabhakar        interrupt-names:
1251aa5a06cSLad Prabhakar          items:
1261aa5a06cSLad Prabhakar            - const: g_err
1271aa5a06cSLad Prabhakar            - const: g_recc
1281aa5a06cSLad Prabhakar            - const: ch0_err
1291aa5a06cSLad Prabhakar            - const: ch0_rec
1301aa5a06cSLad Prabhakar            - const: ch0_trx
1311aa5a06cSLad Prabhakar            - const: ch1_err
1321aa5a06cSLad Prabhakar            - const: ch1_rec
1331aa5a06cSLad Prabhakar            - const: ch1_trx
1341aa5a06cSLad Prabhakar
1351aa5a06cSLad Prabhakar        resets:
1361aa5a06cSLad Prabhakar          maxItems: 2
1371aa5a06cSLad Prabhakar
1381aa5a06cSLad Prabhakar        reset-names:
1391aa5a06cSLad Prabhakar          items:
1401aa5a06cSLad Prabhakar            - const: rstp_n
1411aa5a06cSLad Prabhakar            - const: rstc_n
1421aa5a06cSLad Prabhakar
1431aa5a06cSLad Prabhakar      required:
1441aa5a06cSLad Prabhakar        - reset-names
1451aa5a06cSLad Prabhakar    else:
1461aa5a06cSLad Prabhakar      properties:
1471aa5a06cSLad Prabhakar        interrupts:
1481aa5a06cSLad Prabhakar          items:
1491aa5a06cSLad Prabhakar            - description: Channel interrupt
1501aa5a06cSLad Prabhakar            - description: Global interrupt
1511aa5a06cSLad Prabhakar
1521aa5a06cSLad Prabhakar        interrupt-names:
1531aa5a06cSLad Prabhakar          items:
1541aa5a06cSLad Prabhakar            - const: ch_int
1551aa5a06cSLad Prabhakar            - const: g_int
1561aa5a06cSLad Prabhakar
1571aa5a06cSLad Prabhakar        resets:
1581aa5a06cSLad Prabhakar          maxItems: 1
1591aa5a06cSLad Prabhakar
1603abcc01cSGeert Uytterhoeven  - if:
1613abcc01cSGeert Uytterhoeven      not:
1623abcc01cSGeert Uytterhoeven        properties:
1633abcc01cSGeert Uytterhoeven          compatible:
1643abcc01cSGeert Uytterhoeven            contains:
165*e8b98168SGeert Uytterhoeven              const: renesas,rcar-gen4-canfd
1663abcc01cSGeert Uytterhoeven    then:
1673abcc01cSGeert Uytterhoeven      patternProperties:
1683abcc01cSGeert Uytterhoeven        "^channel[2-7]$": false
1693abcc01cSGeert Uytterhoeven
1708a5e7d19SGeert UytterhoevenunevaluatedProperties: false
1718a5e7d19SGeert Uytterhoeven
1728a5e7d19SGeert Uytterhoevenexamples:
1738a5e7d19SGeert Uytterhoeven  - |
1748a5e7d19SGeert Uytterhoeven    #include <dt-bindings/clock/r8a7795-cpg-mssr.h>
1758a5e7d19SGeert Uytterhoeven    #include <dt-bindings/interrupt-controller/arm-gic.h>
1768a5e7d19SGeert Uytterhoeven    #include <dt-bindings/power/r8a7795-sysc.h>
1778a5e7d19SGeert Uytterhoeven
1788a5e7d19SGeert Uytterhoeven    canfd: can@e66c0000 {
1798a5e7d19SGeert Uytterhoeven            compatible = "renesas,r8a7795-canfd",
1808a5e7d19SGeert Uytterhoeven                         "renesas,rcar-gen3-canfd";
1818a5e7d19SGeert Uytterhoeven            reg = <0xe66c0000 0x8000>;
1828a5e7d19SGeert Uytterhoeven            interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>,
1838a5e7d19SGeert Uytterhoeven                         <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
18448b171dbSGeert Uytterhoeven            interrupt-names = "ch_int", "g_int";
1858a5e7d19SGeert Uytterhoeven            clocks = <&cpg CPG_MOD 914>,
1868a5e7d19SGeert Uytterhoeven                     <&cpg CPG_CORE R8A7795_CLK_CANFD>,
1878a5e7d19SGeert Uytterhoeven                     <&can_clk>;
1888a5e7d19SGeert Uytterhoeven            clock-names = "fck", "canfd", "can_clk";
1898a5e7d19SGeert Uytterhoeven            assigned-clocks = <&cpg CPG_CORE R8A7795_CLK_CANFD>;
1908a5e7d19SGeert Uytterhoeven            assigned-clock-rates = <40000000>;
1918a5e7d19SGeert Uytterhoeven            power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
1928a5e7d19SGeert Uytterhoeven            resets = <&cpg 914>;
1938a5e7d19SGeert Uytterhoeven
1948a5e7d19SGeert Uytterhoeven            channel0 {
1958a5e7d19SGeert Uytterhoeven            };
1968a5e7d19SGeert Uytterhoeven
1978a5e7d19SGeert Uytterhoeven            channel1 {
1988a5e7d19SGeert Uytterhoeven            };
1998a5e7d19SGeert Uytterhoeven    };
200