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