xref: /freebsd/sys/contrib/device-tree/Bindings/mtd/brcm,brcmnand.yaml (revision 01950c46b8155250f64374fb72fc11faa44bf099)
15956d97fSEmmanuel Vadot# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
25956d97fSEmmanuel Vadot%YAML 1.2
35956d97fSEmmanuel Vadot---
45956d97fSEmmanuel Vadot$id: http://devicetree.org/schemas/mtd/brcm,brcmnand.yaml#
55956d97fSEmmanuel Vadot$schema: http://devicetree.org/meta-schemas/core.yaml#
65956d97fSEmmanuel Vadot
75956d97fSEmmanuel Vadottitle: Broadcom STB NAND Controller
85956d97fSEmmanuel Vadot
95956d97fSEmmanuel Vadotmaintainers:
105956d97fSEmmanuel Vadot  - Brian Norris <computersforpeace@gmail.com>
115956d97fSEmmanuel Vadot  - Kamal Dasu <kdasu.kdev@gmail.com>
12*01950c46SEmmanuel Vadot  - William Zhang <william.zhang@broadcom.com>
135956d97fSEmmanuel Vadot
145956d97fSEmmanuel Vadotdescription: |
155956d97fSEmmanuel Vadot  The Broadcom Set-Top Box NAND controller supports low-level access to raw NAND
165956d97fSEmmanuel Vadot  flash chips. It has a memory-mapped register interface for both control
175956d97fSEmmanuel Vadot  registers and for its data input/output buffer. On some SoCs, this controller
185956d97fSEmmanuel Vadot  is paired with a custom DMA engine (inventively named "Flash DMA") which
195956d97fSEmmanuel Vadot  supports basic PROGRAM and READ functions, among other features.
205956d97fSEmmanuel Vadot
215956d97fSEmmanuel Vadot  This controller was originally designed for STB SoCs (BCM7xxx) but is now
22*01950c46SEmmanuel Vadot  available on a variety of Broadcom SoCs, including some BCM3xxx, MIPS based
23*01950c46SEmmanuel Vadot  Broadband SoC (BCM63xx), ARM based Broadband SoC (BCMBCA) and iProc/Cygnus.
24*01950c46SEmmanuel Vadot  Its history includes several similar (but not fully register compatible)
25*01950c46SEmmanuel Vadot  versions.
265956d97fSEmmanuel Vadot
275956d97fSEmmanuel Vadot  -- Additional SoC-specific NAND controller properties --
285956d97fSEmmanuel Vadot
295956d97fSEmmanuel Vadot  The NAND controller is integrated differently on the variety of SoCs on which
305956d97fSEmmanuel Vadot  it is found. Part of this integration involves providing status and enable
315956d97fSEmmanuel Vadot  bits with which to control the 8 exposed NAND interrupts, as well as hardware
325956d97fSEmmanuel Vadot  for configuring the endianness of the data bus. On some SoCs, these features
335956d97fSEmmanuel Vadot  are handled via standard, modular components (e.g., their interrupts look like
345956d97fSEmmanuel Vadot  a normal IRQ chip), but on others, they are controlled in unique and
355956d97fSEmmanuel Vadot  interesting ways, sometimes with registers that lump multiple NAND-related
365956d97fSEmmanuel Vadot  functions together. The former case can be described simply by the standard
375956d97fSEmmanuel Vadot  interrupts properties in the main controller node. But for the latter
385956d97fSEmmanuel Vadot  exceptional cases, we define additional 'compatible' properties and associated
395956d97fSEmmanuel Vadot  register resources within the NAND controller node above.
405956d97fSEmmanuel Vadot
415956d97fSEmmanuel Vadotproperties:
425956d97fSEmmanuel Vadot  compatible:
435956d97fSEmmanuel Vadot    oneOf:
445956d97fSEmmanuel Vadot      - items:
455956d97fSEmmanuel Vadot          - enum:
465956d97fSEmmanuel Vadot              - brcm,brcmnand-v2.1
475956d97fSEmmanuel Vadot              - brcm,brcmnand-v2.2
485956d97fSEmmanuel Vadot              - brcm,brcmnand-v4.0
495956d97fSEmmanuel Vadot              - brcm,brcmnand-v5.0
505956d97fSEmmanuel Vadot              - brcm,brcmnand-v6.0
515956d97fSEmmanuel Vadot              - brcm,brcmnand-v6.1
525956d97fSEmmanuel Vadot              - brcm,brcmnand-v6.2
535956d97fSEmmanuel Vadot              - brcm,brcmnand-v7.0
545956d97fSEmmanuel Vadot              - brcm,brcmnand-v7.1
555956d97fSEmmanuel Vadot              - brcm,brcmnand-v7.2
565956d97fSEmmanuel Vadot              - brcm,brcmnand-v7.3
575956d97fSEmmanuel Vadot          - const: brcm,brcmnand
58*01950c46SEmmanuel Vadot      - description: BCMBCA SoC-specific NAND controller
595956d97fSEmmanuel Vadot        items:
605956d97fSEmmanuel Vadot          - const: brcm,nand-bcm63138
615956d97fSEmmanuel Vadot          - enum:
625956d97fSEmmanuel Vadot              - brcm,brcmnand-v7.0
635956d97fSEmmanuel Vadot              - brcm,brcmnand-v7.1
645956d97fSEmmanuel Vadot          - const: brcm,brcmnand
655956d97fSEmmanuel Vadot      - description: iProc SoC-specific NAND controller
665956d97fSEmmanuel Vadot        items:
675956d97fSEmmanuel Vadot          - const: brcm,nand-iproc
685956d97fSEmmanuel Vadot          - const: brcm,brcmnand-v6.1
695956d97fSEmmanuel Vadot          - const: brcm,brcmnand
705956d97fSEmmanuel Vadot      - description: BCM63168 SoC-specific NAND controller
715956d97fSEmmanuel Vadot        items:
725956d97fSEmmanuel Vadot          - const: brcm,nand-bcm63168
735956d97fSEmmanuel Vadot          - const: brcm,nand-bcm6368
745956d97fSEmmanuel Vadot          - const: brcm,brcmnand-v4.0
755956d97fSEmmanuel Vadot          - const: brcm,brcmnand
765956d97fSEmmanuel Vadot
775956d97fSEmmanuel Vadot  reg:
785956d97fSEmmanuel Vadot    minItems: 1
795956d97fSEmmanuel Vadot    maxItems: 6
805956d97fSEmmanuel Vadot
815956d97fSEmmanuel Vadot  reg-names:
825956d97fSEmmanuel Vadot    minItems: 1
835956d97fSEmmanuel Vadot    maxItems: 6
845956d97fSEmmanuel Vadot    items:
855956d97fSEmmanuel Vadot      enum: [ nand, flash-dma, flash-edu, nand-cache, nand-int-base, iproc-idm, iproc-ext ]
865956d97fSEmmanuel Vadot
875956d97fSEmmanuel Vadot  interrupts:
885956d97fSEmmanuel Vadot    minItems: 1
895956d97fSEmmanuel Vadot    items:
905956d97fSEmmanuel Vadot      - description: NAND CTLRDY interrupt
918bab661aSEmmanuel Vadot      - description: FLASH_DMA_DONE (if flash DMA is available) or FLASH_EDU_DONE (if EDU is available)
925956d97fSEmmanuel Vadot
935956d97fSEmmanuel Vadot  interrupt-names:
945956d97fSEmmanuel Vadot    minItems: 1
955956d97fSEmmanuel Vadot    items:
965956d97fSEmmanuel Vadot      - const: nand_ctlrdy
978bab661aSEmmanuel Vadot      - enum:
988bab661aSEmmanuel Vadot          - flash_dma_done
998bab661aSEmmanuel Vadot          - flash_edu_done
1005956d97fSEmmanuel Vadot
1015956d97fSEmmanuel Vadot  clocks:
1025956d97fSEmmanuel Vadot    maxItems: 1
1035956d97fSEmmanuel Vadot    description: reference to the clock for the NAND controller
1045956d97fSEmmanuel Vadot
1055956d97fSEmmanuel Vadot  clock-names:
1065956d97fSEmmanuel Vadot    const: nand
1075956d97fSEmmanuel Vadot
1085956d97fSEmmanuel Vadot  brcm,nand-has-wp:
1095956d97fSEmmanuel Vadot    description: >
1105956d97fSEmmanuel Vadot      Some versions of this IP include a write-protect
1115956d97fSEmmanuel Vadot      (WP) control bit. It is always available on >=
1125956d97fSEmmanuel Vadot      v7.0. Use this property to describe the rare
1135956d97fSEmmanuel Vadot      earlier versions of this core that include WP
1145956d97fSEmmanuel Vadot    type: boolean
1155956d97fSEmmanuel Vadot
116*01950c46SEmmanuel Vadot  brcm,wp-not-connected:
117*01950c46SEmmanuel Vadot    description:
118*01950c46SEmmanuel Vadot      Use this property when WP pin is not physically wired to the NAND chip.
119*01950c46SEmmanuel Vadot      Write protection feature cannot be used. By default, controller assumes
120*01950c46SEmmanuel Vadot      the pin is connected and feature is used.
121*01950c46SEmmanuel Vadot    $ref: /schemas/types.yaml#/definitions/flag
122*01950c46SEmmanuel Vadot
1235956d97fSEmmanuel VadotpatternProperties:
1245956d97fSEmmanuel Vadot  "^nand@[a-f0-9]$":
1255956d97fSEmmanuel Vadot    type: object
126f126890aSEmmanuel Vadot    $ref: raw-nand-chip.yaml
1275956d97fSEmmanuel Vadot    properties:
1285956d97fSEmmanuel Vadot      compatible:
1295956d97fSEmmanuel Vadot        const: brcm,nandcs
1305956d97fSEmmanuel Vadot
1315956d97fSEmmanuel Vadot      nand-ecc-step-size:
1325956d97fSEmmanuel Vadot        enum: [ 512, 1024 ]
1335956d97fSEmmanuel Vadot
1345956d97fSEmmanuel Vadot      brcm,nand-oob-sector-size:
1355956d97fSEmmanuel Vadot        description: |
1365956d97fSEmmanuel Vadot          integer, to denote the spare area sector size
1375956d97fSEmmanuel Vadot          expected for the ECC layout in use. This size, in
1385956d97fSEmmanuel Vadot          addition to the strength and step-size,
1395956d97fSEmmanuel Vadot          determines how the hardware BCH engine will lay
1405956d97fSEmmanuel Vadot          out the parity bytes it stores on the flash.
1415956d97fSEmmanuel Vadot          This property can be automatically determined by
1425956d97fSEmmanuel Vadot          the flash geometry (particularly the NAND page
1435956d97fSEmmanuel Vadot          and OOB size) in many cases, but when booting
1445956d97fSEmmanuel Vadot          from NAND, the boot controller has only a limited
1455956d97fSEmmanuel Vadot          number of available options for its default ECC
1465956d97fSEmmanuel Vadot          layout.
1475956d97fSEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32
1485956d97fSEmmanuel Vadot
149*01950c46SEmmanuel Vadot      brcm,nand-ecc-use-strap:
150*01950c46SEmmanuel Vadot        description:
151*01950c46SEmmanuel Vadot          This property requires the host system to get the ECC related
152*01950c46SEmmanuel Vadot          settings from the SoC NAND boot strap configuration instead of
153*01950c46SEmmanuel Vadot          the generic NAND ECC settings. This is a common hardware design
154*01950c46SEmmanuel Vadot          on BCMBCA based boards. This strap ECC option and generic NAND
155*01950c46SEmmanuel Vadot          ECC option can not be specified at the same time.
156*01950c46SEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/flag
157*01950c46SEmmanuel Vadot
158f126890aSEmmanuel Vadot    unevaluatedProperties: false
159f126890aSEmmanuel Vadot
1605956d97fSEmmanuel VadotallOf:
1615956d97fSEmmanuel Vadot  - $ref: nand-controller.yaml#
1625956d97fSEmmanuel Vadot  - if:
1635956d97fSEmmanuel Vadot      properties:
1645956d97fSEmmanuel Vadot        compatible:
1655956d97fSEmmanuel Vadot          contains:
1665956d97fSEmmanuel Vadot            const: brcm,nand-bcm63138
1675956d97fSEmmanuel Vadot    then:
1685956d97fSEmmanuel Vadot      properties:
1695956d97fSEmmanuel Vadot        reg-names:
1705956d97fSEmmanuel Vadot          items:
1715956d97fSEmmanuel Vadot            - const: nand
1725956d97fSEmmanuel Vadot            - const: nand-int-base
1735956d97fSEmmanuel Vadot  - if:
1745956d97fSEmmanuel Vadot      properties:
1755956d97fSEmmanuel Vadot        compatible:
1765956d97fSEmmanuel Vadot          contains:
1775956d97fSEmmanuel Vadot            const: brcm,nand-bcm6368
1785956d97fSEmmanuel Vadot    then:
1795956d97fSEmmanuel Vadot      properties:
1805956d97fSEmmanuel Vadot        reg-names:
1815956d97fSEmmanuel Vadot          items:
1825956d97fSEmmanuel Vadot            - const: nand
1835956d97fSEmmanuel Vadot            - const: nand-int-base
1845956d97fSEmmanuel Vadot            - const: nand-cache
1855956d97fSEmmanuel Vadot  - if:
1865956d97fSEmmanuel Vadot      properties:
1875956d97fSEmmanuel Vadot        compatible:
1885956d97fSEmmanuel Vadot          contains:
1895956d97fSEmmanuel Vadot            const: brcm,nand-iproc
1905956d97fSEmmanuel Vadot    then:
1915956d97fSEmmanuel Vadot      properties:
1925956d97fSEmmanuel Vadot        reg-names:
1935956d97fSEmmanuel Vadot          items:
1945956d97fSEmmanuel Vadot            - const: nand
1955956d97fSEmmanuel Vadot            - const: iproc-idm
1965956d97fSEmmanuel Vadot            - const: iproc-ext
1978bab661aSEmmanuel Vadot  - if:
198*01950c46SEmmanuel Vadot      required:
199*01950c46SEmmanuel Vadot        - interrupts
2008bab661aSEmmanuel Vadot      properties:
2018bab661aSEmmanuel Vadot        interrupts:
2028bab661aSEmmanuel Vadot          minItems: 2
2038bab661aSEmmanuel Vadot    then:
2048bab661aSEmmanuel Vadot      required:
2058bab661aSEmmanuel Vadot        - interrupt-names
2065956d97fSEmmanuel Vadot
207*01950c46SEmmanuel Vadot  - if:
208*01950c46SEmmanuel Vadot      patternProperties:
209*01950c46SEmmanuel Vadot        "^nand@[a-f0-9]$":
210*01950c46SEmmanuel Vadot          required:
211*01950c46SEmmanuel Vadot            - brcm,nand-ecc-use-strap
212*01950c46SEmmanuel Vadot    then:
213*01950c46SEmmanuel Vadot      patternProperties:
214*01950c46SEmmanuel Vadot        "^nand@[a-f0-9]$":
215*01950c46SEmmanuel Vadot          properties:
216*01950c46SEmmanuel Vadot            nand-ecc-strength: false
217*01950c46SEmmanuel Vadot            nand-ecc-step-size: false
218*01950c46SEmmanuel Vadot            nand-ecc-maximize: false
219*01950c46SEmmanuel Vadot            nand-ecc-algo: false
220*01950c46SEmmanuel Vadot            brcm,nand-oob-sector-size: false
221*01950c46SEmmanuel Vadot
2225956d97fSEmmanuel VadotunevaluatedProperties: false
2235956d97fSEmmanuel Vadot
2245956d97fSEmmanuel Vadotrequired:
2255956d97fSEmmanuel Vadot  - reg
2265956d97fSEmmanuel Vadot  - reg-names
2275956d97fSEmmanuel Vadot
2285956d97fSEmmanuel Vadotexamples:
2295956d97fSEmmanuel Vadot  - |
2305956d97fSEmmanuel Vadot    nand-controller@f0442800 {
2315956d97fSEmmanuel Vadot        compatible = "brcm,brcmnand-v7.0", "brcm,brcmnand";
2325956d97fSEmmanuel Vadot        reg = <0xf0442800 0x600>,
2335956d97fSEmmanuel Vadot              <0xf0443000 0x100>;
2345956d97fSEmmanuel Vadot        reg-names = "nand", "flash-dma";
2355956d97fSEmmanuel Vadot        interrupt-parent = <&hif_intr2_intc>;
2365956d97fSEmmanuel Vadot        interrupts = <24>, <4>;
2378bab661aSEmmanuel Vadot        interrupt-names = "nand_ctlrdy", "flash_dma_done";
2385956d97fSEmmanuel Vadot
2395956d97fSEmmanuel Vadot        #address-cells = <1>;
2405956d97fSEmmanuel Vadot        #size-cells = <0>;
2415956d97fSEmmanuel Vadot
2425956d97fSEmmanuel Vadot        nand@1 {
2435956d97fSEmmanuel Vadot            compatible = "brcm,nandcs";
2445956d97fSEmmanuel Vadot            reg = <1>; // Chip select 1
2455956d97fSEmmanuel Vadot            nand-on-flash-bbt;
2465956d97fSEmmanuel Vadot            nand-ecc-strength = <12>;
2475956d97fSEmmanuel Vadot            nand-ecc-step-size = <512>;
2485956d97fSEmmanuel Vadot
2495956d97fSEmmanuel Vadot            #address-cells = <1>;
2505956d97fSEmmanuel Vadot            #size-cells = <1>;
2515956d97fSEmmanuel Vadot        };
2525956d97fSEmmanuel Vadot    };
2535956d97fSEmmanuel Vadot  - |
2545956d97fSEmmanuel Vadot    nand-controller@10000200 {
2555956d97fSEmmanuel Vadot        compatible = "brcm,nand-bcm63168", "brcm,nand-bcm6368",
2565956d97fSEmmanuel Vadot                     "brcm,brcmnand-v4.0", "brcm,brcmnand";
2575956d97fSEmmanuel Vadot        reg = <0x10000200 0x180>,
2585956d97fSEmmanuel Vadot              <0x100000b0 0x10>,
2595956d97fSEmmanuel Vadot              <0x10000600 0x200>;
2605956d97fSEmmanuel Vadot        reg-names = "nand", "nand-int-base", "nand-cache";
2615956d97fSEmmanuel Vadot        interrupt-parent = <&periph_intc>;
2625956d97fSEmmanuel Vadot        interrupts = <50>;
2635956d97fSEmmanuel Vadot        clocks = <&periph_clk 20>;
2645956d97fSEmmanuel Vadot        clock-names = "nand";
2655956d97fSEmmanuel Vadot
2665956d97fSEmmanuel Vadot        #address-cells = <1>;
2675956d97fSEmmanuel Vadot        #size-cells = <0>;
2685956d97fSEmmanuel Vadot
2695956d97fSEmmanuel Vadot        nand@0 {
2705956d97fSEmmanuel Vadot            compatible = "brcm,nandcs";
2715956d97fSEmmanuel Vadot            reg = <0>;
2725956d97fSEmmanuel Vadot            nand-on-flash-bbt;
2735956d97fSEmmanuel Vadot            nand-ecc-strength = <1>;
2745956d97fSEmmanuel Vadot            nand-ecc-step-size = <512>;
2755956d97fSEmmanuel Vadot
2765956d97fSEmmanuel Vadot            #address-cells = <1>;
2775956d97fSEmmanuel Vadot            #size-cells = <1>;
2785956d97fSEmmanuel Vadot        };
2795956d97fSEmmanuel Vadot    };
280