1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/mtd/rockchip,nand-controller.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Rockchip SoCs NAND FLASH Controller (NFC)
8
9allOf:
10  - $ref: "nand-controller.yaml#"
11
12maintainers:
13  - Heiko Stuebner <heiko@sntech.de>
14
15properties:
16  compatible:
17    oneOf:
18      - const: rockchip,px30-nfc
19      - const: rockchip,rk2928-nfc
20      - const: rockchip,rv1108-nfc
21      - items:
22          - enum:
23              - rockchip,rk3036-nfc
24              - rockchip,rk3128-nfc
25          - const: rockchip,rk2928-nfc
26      - items:
27          - const: rockchip,rk3308-nfc
28          - const: rockchip,rv1108-nfc
29
30  reg:
31    maxItems: 1
32
33  interrupts:
34    maxItems: 1
35
36  clocks:
37    minItems: 1
38    items:
39      - description: Bus Clock
40      - description: Module Clock
41
42  clock-names:
43    minItems: 1
44    items:
45      - const: ahb
46      - const: nfc
47
48  assigned-clocks:
49    maxItems: 1
50
51  assigned-clock-rates:
52    maxItems: 1
53
54  power-domains:
55    maxItems: 1
56
57patternProperties:
58  "^nand@[0-7]$":
59    type: object
60    properties:
61      reg:
62        minimum: 0
63        maximum: 7
64
65      nand-ecc-mode:
66        const: hw
67
68      nand-ecc-step-size:
69        const: 1024
70
71      nand-ecc-strength:
72        enum: [16, 24, 40, 60, 70]
73        description: |
74          The ECC configurations that can be supported are as follows.
75            NFC v600 ECC 16, 24, 40, 60
76              RK2928, RK3066, RK3188
77
78            NFC v622 ECC 16, 24, 40, 60
79              RK3036, RK3128
80
81            NFC v800 ECC 16
82              RK3308, RV1108
83
84            NFC v900 ECC 16, 40, 60, 70
85              RK3326, PX30
86
87      nand-bus-width:
88        const: 8
89
90      rockchip,boot-blks:
91        $ref: /schemas/types.yaml#/definitions/uint32
92        minimum: 2
93        default: 16
94        description:
95          The NFC driver need this information to select ECC
96          algorithms supported by the boot ROM.
97          Only used in combination with 'nand-is-boot-medium'.
98
99      rockchip,boot-ecc-strength:
100        enum: [16, 24, 40, 60, 70]
101        $ref: /schemas/types.yaml#/definitions/uint32
102        description: |
103          If specified it indicates that a different BCH/ECC setting is
104          supported by the boot ROM.
105            NFC v600 ECC 16, 24
106              RK2928, RK3066, RK3188
107
108            NFC v622 ECC 16, 24, 40, 60
109              RK3036, RK3128
110
111            NFC v800 ECC 16
112              RK3308, RV1108
113
114            NFC v900 ECC 16, 70
115              RK3326, PX30
116
117          Only used in combination with 'nand-is-boot-medium'.
118
119required:
120  - compatible
121  - reg
122  - interrupts
123  - clocks
124  - clock-names
125
126unevaluatedProperties: false
127
128examples:
129  - |
130    #include <dt-bindings/clock/rk3308-cru.h>
131    #include <dt-bindings/interrupt-controller/arm-gic.h>
132    nfc: nand-controller@ff4b0000 {
133      compatible = "rockchip,rk3308-nfc",
134                   "rockchip,rv1108-nfc";
135      reg = <0xff4b0000 0x4000>;
136      interrupts = <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>;
137      clocks = <&cru HCLK_NANDC>, <&cru SCLK_NANDC>;
138      clock-names = "ahb", "nfc";
139      assigned-clocks = <&clks SCLK_NANDC>;
140      assigned-clock-rates = <150000000>;
141
142      pinctrl-0 = <&flash_ale &flash_bus8 &flash_cle &flash_csn0
143                   &flash_rdn &flash_rdy &flash_wrn>;
144      pinctrl-names = "default";
145
146      #address-cells = <1>;
147      #size-cells = <0>;
148
149      nand@0 {
150        reg = <0>;
151        label = "rk-nand";
152        nand-bus-width = <8>;
153        nand-ecc-mode = "hw";
154        nand-ecc-step-size = <1024>;
155        nand-ecc-strength = <16>;
156        nand-is-boot-medium;
157        rockchip,boot-blks = <8>;
158        rockchip,boot-ecc-strength = <16>;
159      };
160    };
161
162...
163