xref: /linux/Documentation/devicetree/bindings/mtd/brcm,brcmnand.yaml (revision 79790b6818e96c58fe2bffee1b418c16e64e7b80)
127736dddSRafał Miłecki# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
227736dddSRafał Miłecki%YAML 1.2
327736dddSRafał Miłecki---
427736dddSRafał Miłecki$id: http://devicetree.org/schemas/mtd/brcm,brcmnand.yaml#
527736dddSRafał Miłecki$schema: http://devicetree.org/meta-schemas/core.yaml#
627736dddSRafał Miłecki
727736dddSRafał Miłeckititle: Broadcom STB NAND Controller
827736dddSRafał Miłecki
927736dddSRafał Miłeckimaintainers:
1027736dddSRafał Miłecki  - Brian Norris <computersforpeace@gmail.com>
1127736dddSRafał Miłecki  - Kamal Dasu <kdasu.kdev@gmail.com>
1259e8c2e0SWilliam Zhang  - William Zhang <william.zhang@broadcom.com>
1327736dddSRafał Miłecki
1427736dddSRafał Miłeckidescription: |
1527736dddSRafał Miłecki  The Broadcom Set-Top Box NAND controller supports low-level access to raw NAND
1627736dddSRafał Miłecki  flash chips. It has a memory-mapped register interface for both control
1727736dddSRafał Miłecki  registers and for its data input/output buffer. On some SoCs, this controller
1827736dddSRafał Miłecki  is paired with a custom DMA engine (inventively named "Flash DMA") which
1927736dddSRafał Miłecki  supports basic PROGRAM and READ functions, among other features.
2027736dddSRafał Miłecki
2127736dddSRafał Miłecki  This controller was originally designed for STB SoCs (BCM7xxx) but is now
2259e8c2e0SWilliam Zhang  available on a variety of Broadcom SoCs, including some BCM3xxx, MIPS based
2359e8c2e0SWilliam Zhang  Broadband SoC (BCM63xx), ARM based Broadband SoC (BCMBCA) and iProc/Cygnus.
2459e8c2e0SWilliam Zhang  Its history includes several similar (but not fully register compatible)
2559e8c2e0SWilliam Zhang  versions.
2627736dddSRafał Miłecki
2727736dddSRafał Miłecki  -- Additional SoC-specific NAND controller properties --
2827736dddSRafał Miłecki
2927736dddSRafał Miłecki  The NAND controller is integrated differently on the variety of SoCs on which
3027736dddSRafał Miłecki  it is found. Part of this integration involves providing status and enable
3127736dddSRafał Miłecki  bits with which to control the 8 exposed NAND interrupts, as well as hardware
3227736dddSRafał Miłecki  for configuring the endianness of the data bus. On some SoCs, these features
3327736dddSRafał Miłecki  are handled via standard, modular components (e.g., their interrupts look like
3427736dddSRafał Miłecki  a normal IRQ chip), but on others, they are controlled in unique and
3527736dddSRafał Miłecki  interesting ways, sometimes with registers that lump multiple NAND-related
3627736dddSRafał Miłecki  functions together. The former case can be described simply by the standard
3727736dddSRafał Miłecki  interrupts properties in the main controller node. But for the latter
3827736dddSRafał Miłecki  exceptional cases, we define additional 'compatible' properties and associated
3927736dddSRafał Miłecki  register resources within the NAND controller node above.
4027736dddSRafał Miłecki
4127736dddSRafał Miłeckiproperties:
4227736dddSRafał Miłecki  compatible:
4327736dddSRafał Miłecki    oneOf:
4427736dddSRafał Miłecki      - items:
4527736dddSRafał Miłecki          - enum:
4627736dddSRafał Miłecki              - brcm,brcmnand-v2.1
4727736dddSRafał Miłecki              - brcm,brcmnand-v2.2
4827736dddSRafał Miłecki              - brcm,brcmnand-v4.0
4927736dddSRafał Miłecki              - brcm,brcmnand-v5.0
5027736dddSRafał Miłecki              - brcm,brcmnand-v6.0
5127736dddSRafał Miłecki              - brcm,brcmnand-v6.1
5227736dddSRafał Miłecki              - brcm,brcmnand-v6.2
5327736dddSRafał Miłecki              - brcm,brcmnand-v7.0
5427736dddSRafał Miłecki              - brcm,brcmnand-v7.1
5527736dddSRafał Miłecki              - brcm,brcmnand-v7.2
5627736dddSRafał Miłecki              - brcm,brcmnand-v7.3
5727736dddSRafał Miłecki          - const: brcm,brcmnand
5859e8c2e0SWilliam Zhang      - description: BCMBCA SoC-specific NAND controller
5927736dddSRafał Miłecki        items:
6027736dddSRafał Miłecki          - const: brcm,nand-bcm63138
6127736dddSRafał Miłecki          - enum:
6227736dddSRafał Miłecki              - brcm,brcmnand-v7.0
6327736dddSRafał Miłecki              - brcm,brcmnand-v7.1
6427736dddSRafał Miłecki          - const: brcm,brcmnand
6527736dddSRafał Miłecki      - description: iProc SoC-specific NAND controller
6627736dddSRafał Miłecki        items:
6727736dddSRafał Miłecki          - const: brcm,nand-iproc
6827736dddSRafał Miłecki          - const: brcm,brcmnand-v6.1
6927736dddSRafał Miłecki          - const: brcm,brcmnand
7027736dddSRafał Miłecki      - description: BCM63168 SoC-specific NAND controller
7127736dddSRafał Miłecki        items:
7227736dddSRafał Miłecki          - const: brcm,nand-bcm63168
7327736dddSRafał Miłecki          - const: brcm,nand-bcm6368
7427736dddSRafał Miłecki          - const: brcm,brcmnand-v4.0
7527736dddSRafał Miłecki          - const: brcm,brcmnand
7627736dddSRafał Miłecki
7727736dddSRafał Miłecki  reg:
7827736dddSRafał Miłecki    minItems: 1
7927736dddSRafał Miłecki    maxItems: 6
8027736dddSRafał Miłecki
8127736dddSRafał Miłecki  reg-names:
8227736dddSRafał Miłecki    minItems: 1
8327736dddSRafał Miłecki    maxItems: 6
8427736dddSRafał Miłecki    items:
8527736dddSRafał Miłecki      enum: [ nand, flash-dma, flash-edu, nand-cache, nand-int-base, iproc-idm, iproc-ext ]
8627736dddSRafał Miłecki
8727736dddSRafał Miłecki  interrupts:
8827736dddSRafał Miłecki    minItems: 1
8927736dddSRafał Miłecki    items:
9027736dddSRafał Miłecki      - description: NAND CTLRDY interrupt
91075e181fSRafał Miłecki      - description: FLASH_DMA_DONE (if flash DMA is available) or FLASH_EDU_DONE (if EDU is available)
9227736dddSRafał Miłecki
9327736dddSRafał Miłecki  interrupt-names:
9427736dddSRafał Miłecki    minItems: 1
9527736dddSRafał Miłecki    items:
9627736dddSRafał Miłecki      - const: nand_ctlrdy
97075e181fSRafał Miłecki      - enum:
98075e181fSRafał Miłecki          - flash_dma_done
99075e181fSRafał Miłecki          - flash_edu_done
10027736dddSRafał Miłecki
10127736dddSRafał Miłecki  clocks:
10227736dddSRafał Miłecki    maxItems: 1
10327736dddSRafał Miłecki    description: reference to the clock for the NAND controller
10427736dddSRafał Miłecki
10527736dddSRafał Miłecki  clock-names:
10627736dddSRafał Miłecki    const: nand
10727736dddSRafał Miłecki
10827736dddSRafał Miłecki  brcm,nand-has-wp:
10927736dddSRafał Miłecki    description: >
11027736dddSRafał Miłecki      Some versions of this IP include a write-protect
11127736dddSRafał Miłecki      (WP) control bit. It is always available on >=
11227736dddSRafał Miłecki      v7.0. Use this property to describe the rare
11327736dddSRafał Miłecki      earlier versions of this core that include WP
11427736dddSRafał Miłecki    type: boolean
11527736dddSRafał Miłecki
116638eff86SWilliam Zhang  brcm,wp-not-connected:
117638eff86SWilliam Zhang    description:
118638eff86SWilliam Zhang      Use this property when WP pin is not physically wired to the NAND chip.
119638eff86SWilliam Zhang      Write protection feature cannot be used. By default, controller assumes
120638eff86SWilliam Zhang      the pin is connected and feature is used.
121638eff86SWilliam Zhang    $ref: /schemas/types.yaml#/definitions/flag
122638eff86SWilliam Zhang
12327736dddSRafał MiłeckipatternProperties:
12427736dddSRafał Miłecki  "^nand@[a-f0-9]$":
12527736dddSRafał Miłecki    type: object
12674b7e3bdSMiquel Raynal    $ref: raw-nand-chip.yaml
12727736dddSRafał Miłecki    properties:
12827736dddSRafał Miłecki      compatible:
12927736dddSRafał Miłecki        const: brcm,nandcs
13027736dddSRafał Miłecki
13127736dddSRafał Miłecki      nand-ecc-step-size:
13227736dddSRafał Miłecki        enum: [ 512, 1024 ]
13327736dddSRafał Miłecki
13427736dddSRafał Miłecki      brcm,nand-oob-sector-size:
13527736dddSRafał Miłecki        description: |
13627736dddSRafał Miłecki          integer, to denote the spare area sector size
13727736dddSRafał Miłecki          expected for the ECC layout in use. This size, in
13827736dddSRafał Miłecki          addition to the strength and step-size,
13927736dddSRafał Miłecki          determines how the hardware BCH engine will lay
14027736dddSRafał Miłecki          out the parity bytes it stores on the flash.
14127736dddSRafał Miłecki          This property can be automatically determined by
14227736dddSRafał Miłecki          the flash geometry (particularly the NAND page
14327736dddSRafał Miłecki          and OOB size) in many cases, but when booting
14427736dddSRafał Miłecki          from NAND, the boot controller has only a limited
14527736dddSRafał Miłecki          number of available options for its default ECC
14627736dddSRafał Miłecki          layout.
14727736dddSRafał Miłecki        $ref: /schemas/types.yaml#/definitions/uint32
14827736dddSRafał Miłecki
149*280962d4SWilliam Zhang      brcm,nand-ecc-use-strap:
150*280962d4SWilliam Zhang        description:
151*280962d4SWilliam Zhang          This property requires the host system to get the ECC related
152*280962d4SWilliam Zhang          settings from the SoC NAND boot strap configuration instead of
153*280962d4SWilliam Zhang          the generic NAND ECC settings. This is a common hardware design
154*280962d4SWilliam Zhang          on BCMBCA based boards. This strap ECC option and generic NAND
155*280962d4SWilliam Zhang          ECC option can not be specified at the same time.
156*280962d4SWilliam Zhang        $ref: /schemas/types.yaml#/definitions/flag
157*280962d4SWilliam Zhang
15874b7e3bdSMiquel Raynal    unevaluatedProperties: false
15974b7e3bdSMiquel Raynal
16027736dddSRafał MiłeckiallOf:
16127736dddSRafał Miłecki  - $ref: nand-controller.yaml#
16227736dddSRafał Miłecki  - if:
16327736dddSRafał Miłecki      properties:
16427736dddSRafał Miłecki        compatible:
16527736dddSRafał Miłecki          contains:
16627736dddSRafał Miłecki            const: brcm,nand-bcm63138
16727736dddSRafał Miłecki    then:
16827736dddSRafał Miłecki      properties:
16927736dddSRafał Miłecki        reg-names:
17027736dddSRafał Miłecki          items:
17127736dddSRafał Miłecki            - const: nand
17227736dddSRafał Miłecki            - const: nand-int-base
17327736dddSRafał Miłecki  - if:
17427736dddSRafał Miłecki      properties:
17527736dddSRafał Miłecki        compatible:
17627736dddSRafał Miłecki          contains:
17727736dddSRafał Miłecki            const: brcm,nand-bcm6368
17827736dddSRafał Miłecki    then:
17927736dddSRafał Miłecki      properties:
18027736dddSRafał Miłecki        reg-names:
18127736dddSRafał Miłecki          items:
18227736dddSRafał Miłecki            - const: nand
18327736dddSRafał Miłecki            - const: nand-int-base
18427736dddSRafał Miłecki            - const: nand-cache
18527736dddSRafał Miłecki  - if:
18627736dddSRafał Miłecki      properties:
18727736dddSRafał Miłecki        compatible:
18827736dddSRafał Miłecki          contains:
18927736dddSRafał Miłecki            const: brcm,nand-iproc
19027736dddSRafał Miłecki    then:
19127736dddSRafał Miłecki      properties:
19227736dddSRafał Miłecki        reg-names:
19327736dddSRafał Miłecki          items:
19427736dddSRafał Miłecki            - const: nand
19527736dddSRafał Miłecki            - const: iproc-idm
19627736dddSRafał Miłecki            - const: iproc-ext
197075e181fSRafał Miłecki  - if:
19859e8c2e0SWilliam Zhang      required:
19959e8c2e0SWilliam Zhang        - interrupts
200075e181fSRafał Miłecki      properties:
201075e181fSRafał Miłecki        interrupts:
202075e181fSRafał Miłecki          minItems: 2
203075e181fSRafał Miłecki    then:
204075e181fSRafał Miłecki      required:
205075e181fSRafał Miłecki        - interrupt-names
20627736dddSRafał Miłecki
207*280962d4SWilliam Zhang  - if:
208*280962d4SWilliam Zhang      patternProperties:
209*280962d4SWilliam Zhang        "^nand@[a-f0-9]$":
210*280962d4SWilliam Zhang          required:
211*280962d4SWilliam Zhang            - brcm,nand-ecc-use-strap
212*280962d4SWilliam Zhang    then:
213*280962d4SWilliam Zhang      patternProperties:
214*280962d4SWilliam Zhang        "^nand@[a-f0-9]$":
215*280962d4SWilliam Zhang          properties:
216*280962d4SWilliam Zhang            nand-ecc-strength: false
217*280962d4SWilliam Zhang            nand-ecc-step-size: false
218*280962d4SWilliam Zhang            nand-ecc-maximize: false
219*280962d4SWilliam Zhang            nand-ecc-algo: false
220*280962d4SWilliam Zhang            brcm,nand-oob-sector-size: false
221*280962d4SWilliam Zhang
22227736dddSRafał MiłeckiunevaluatedProperties: false
22327736dddSRafał Miłecki
22427736dddSRafał Miłeckirequired:
22527736dddSRafał Miłecki  - reg
22627736dddSRafał Miłecki  - reg-names
22727736dddSRafał Miłecki
22827736dddSRafał Miłeckiexamples:
22927736dddSRafał Miłecki  - |
23027736dddSRafał Miłecki    nand-controller@f0442800 {
23127736dddSRafał Miłecki        compatible = "brcm,brcmnand-v7.0", "brcm,brcmnand";
23227736dddSRafał Miłecki        reg = <0xf0442800 0x600>,
23327736dddSRafał Miłecki              <0xf0443000 0x100>;
23427736dddSRafał Miłecki        reg-names = "nand", "flash-dma";
23527736dddSRafał Miłecki        interrupt-parent = <&hif_intr2_intc>;
23627736dddSRafał Miłecki        interrupts = <24>, <4>;
237075e181fSRafał Miłecki        interrupt-names = "nand_ctlrdy", "flash_dma_done";
23827736dddSRafał Miłecki
23927736dddSRafał Miłecki        #address-cells = <1>;
24027736dddSRafał Miłecki        #size-cells = <0>;
24127736dddSRafał Miłecki
24227736dddSRafał Miłecki        nand@1 {
24327736dddSRafał Miłecki            compatible = "brcm,nandcs";
24427736dddSRafał Miłecki            reg = <1>; // Chip select 1
24527736dddSRafał Miłecki            nand-on-flash-bbt;
24627736dddSRafał Miłecki            nand-ecc-strength = <12>;
24727736dddSRafał Miłecki            nand-ecc-step-size = <512>;
24827736dddSRafał Miłecki
24927736dddSRafał Miłecki            #address-cells = <1>;
25027736dddSRafał Miłecki            #size-cells = <1>;
25127736dddSRafał Miłecki        };
25227736dddSRafał Miłecki    };
25327736dddSRafał Miłecki  - |
25427736dddSRafał Miłecki    nand-controller@10000200 {
25527736dddSRafał Miłecki        compatible = "brcm,nand-bcm63168", "brcm,nand-bcm6368",
25627736dddSRafał Miłecki                     "brcm,brcmnand-v4.0", "brcm,brcmnand";
25727736dddSRafał Miłecki        reg = <0x10000200 0x180>,
25827736dddSRafał Miłecki              <0x100000b0 0x10>,
25927736dddSRafał Miłecki              <0x10000600 0x200>;
26027736dddSRafał Miłecki        reg-names = "nand", "nand-int-base", "nand-cache";
26127736dddSRafał Miłecki        interrupt-parent = <&periph_intc>;
26227736dddSRafał Miłecki        interrupts = <50>;
26327736dddSRafał Miłecki        clocks = <&periph_clk 20>;
26427736dddSRafał Miłecki        clock-names = "nand";
26527736dddSRafał Miłecki
26627736dddSRafał Miłecki        #address-cells = <1>;
26727736dddSRafał Miłecki        #size-cells = <0>;
26827736dddSRafał Miłecki
26927736dddSRafał Miłecki        nand@0 {
27027736dddSRafał Miłecki            compatible = "brcm,nandcs";
27127736dddSRafał Miłecki            reg = <0>;
27227736dddSRafał Miłecki            nand-on-flash-bbt;
27327736dddSRafał Miłecki            nand-ecc-strength = <1>;
27427736dddSRafał Miłecki            nand-ecc-step-size = <512>;
27527736dddSRafał Miłecki
27627736dddSRafał Miłecki            #address-cells = <1>;
27727736dddSRafał Miłecki            #size-cells = <1>;
27827736dddSRafał Miłecki        };
27927736dddSRafał Miłecki    };
280