xref: /openbmc/linux/Documentation/devicetree/bindings/mtd/brcm,brcmnand.yaml (revision 2612e3bbc0386368a850140a6c9b990cd496a5ec)
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>
1227736dddSRafał Miłecki
1327736dddSRafał Miłeckidescription: |
1427736dddSRafał Miłecki  The Broadcom Set-Top Box NAND controller supports low-level access to raw NAND
1527736dddSRafał Miłecki  flash chips. It has a memory-mapped register interface for both control
1627736dddSRafał Miłecki  registers and for its data input/output buffer. On some SoCs, this controller
1727736dddSRafał Miłecki  is paired with a custom DMA engine (inventively named "Flash DMA") which
1827736dddSRafał Miłecki  supports basic PROGRAM and READ functions, among other features.
1927736dddSRafał Miłecki
2027736dddSRafał Miłecki  This controller was originally designed for STB SoCs (BCM7xxx) but is now
2127736dddSRafał Miłecki  available on a variety of Broadcom SoCs, including some BCM3xxx, BCM63xx, and
2227736dddSRafał Miłecki  iProc/Cygnus. Its history includes several similar (but not fully register
2327736dddSRafał Miłecki  compatible) versions.
2427736dddSRafał Miłecki
2527736dddSRafał Miłecki  -- Additional SoC-specific NAND controller properties --
2627736dddSRafał Miłecki
2727736dddSRafał Miłecki  The NAND controller is integrated differently on the variety of SoCs on which
2827736dddSRafał Miłecki  it is found. Part of this integration involves providing status and enable
2927736dddSRafał Miłecki  bits with which to control the 8 exposed NAND interrupts, as well as hardware
3027736dddSRafał Miłecki  for configuring the endianness of the data bus. On some SoCs, these features
3127736dddSRafał Miłecki  are handled via standard, modular components (e.g., their interrupts look like
3227736dddSRafał Miłecki  a normal IRQ chip), but on others, they are controlled in unique and
3327736dddSRafał Miłecki  interesting ways, sometimes with registers that lump multiple NAND-related
3427736dddSRafał Miłecki  functions together. The former case can be described simply by the standard
3527736dddSRafał Miłecki  interrupts properties in the main controller node. But for the latter
3627736dddSRafał Miłecki  exceptional cases, we define additional 'compatible' properties and associated
3727736dddSRafał Miłecki  register resources within the NAND controller node above.
3827736dddSRafał Miłecki
3927736dddSRafał Miłeckiproperties:
4027736dddSRafał Miłecki  compatible:
4127736dddSRafał Miłecki    oneOf:
4227736dddSRafał Miłecki      - items:
4327736dddSRafał Miłecki          - enum:
4427736dddSRafał Miłecki              - brcm,brcmnand-v2.1
4527736dddSRafał Miłecki              - brcm,brcmnand-v2.2
4627736dddSRafał Miłecki              - brcm,brcmnand-v4.0
4727736dddSRafał Miłecki              - brcm,brcmnand-v5.0
4827736dddSRafał Miłecki              - brcm,brcmnand-v6.0
4927736dddSRafał Miłecki              - brcm,brcmnand-v6.1
5027736dddSRafał Miłecki              - brcm,brcmnand-v6.2
5127736dddSRafał Miłecki              - brcm,brcmnand-v7.0
5227736dddSRafał Miłecki              - brcm,brcmnand-v7.1
5327736dddSRafał Miłecki              - brcm,brcmnand-v7.2
5427736dddSRafał Miłecki              - brcm,brcmnand-v7.3
5527736dddSRafał Miłecki          - const: brcm,brcmnand
5627736dddSRafał Miłecki      - description: BCM63138 SoC-specific NAND controller
5727736dddSRafał Miłecki        items:
5827736dddSRafał Miłecki          - const: brcm,nand-bcm63138
5927736dddSRafał Miłecki          - enum:
6027736dddSRafał Miłecki              - brcm,brcmnand-v7.0
6127736dddSRafał Miłecki              - brcm,brcmnand-v7.1
6227736dddSRafał Miłecki          - const: brcm,brcmnand
6327736dddSRafał Miłecki      - description: iProc SoC-specific NAND controller
6427736dddSRafał Miłecki        items:
6527736dddSRafał Miłecki          - const: brcm,nand-iproc
6627736dddSRafał Miłecki          - const: brcm,brcmnand-v6.1
6727736dddSRafał Miłecki          - const: brcm,brcmnand
6827736dddSRafał Miłecki      - description: BCM63168 SoC-specific NAND controller
6927736dddSRafał Miłecki        items:
7027736dddSRafał Miłecki          - const: brcm,nand-bcm63168
7127736dddSRafał Miłecki          - const: brcm,nand-bcm6368
7227736dddSRafał Miłecki          - const: brcm,brcmnand-v4.0
7327736dddSRafał Miłecki          - const: brcm,brcmnand
7427736dddSRafał Miłecki
7527736dddSRafał Miłecki  reg:
7627736dddSRafał Miłecki    minItems: 1
7727736dddSRafał Miłecki    maxItems: 6
7827736dddSRafał Miłecki
7927736dddSRafał Miłecki  reg-names:
8027736dddSRafał Miłecki    minItems: 1
8127736dddSRafał Miłecki    maxItems: 6
8227736dddSRafał Miłecki    items:
8327736dddSRafał Miłecki      enum: [ nand, flash-dma, flash-edu, nand-cache, nand-int-base, iproc-idm, iproc-ext ]
8427736dddSRafał Miłecki
8527736dddSRafał Miłecki  interrupts:
8627736dddSRafał Miłecki    minItems: 1
8727736dddSRafał Miłecki    items:
8827736dddSRafał Miłecki      - description: NAND CTLRDY interrupt
89075e181fSRafał Miłecki      - description: FLASH_DMA_DONE (if flash DMA is available) or FLASH_EDU_DONE (if EDU is available)
9027736dddSRafał Miłecki
9127736dddSRafał Miłecki  interrupt-names:
9227736dddSRafał Miłecki    minItems: 1
9327736dddSRafał Miłecki    items:
9427736dddSRafał Miłecki      - const: nand_ctlrdy
95075e181fSRafał Miłecki      - enum:
96075e181fSRafał Miłecki          - flash_dma_done
97075e181fSRafał Miłecki          - flash_edu_done
9827736dddSRafał Miłecki
9927736dddSRafał Miłecki  clocks:
10027736dddSRafał Miłecki    maxItems: 1
10127736dddSRafał Miłecki    description: reference to the clock for the NAND controller
10227736dddSRafał Miłecki
10327736dddSRafał Miłecki  clock-names:
10427736dddSRafał Miłecki    const: nand
10527736dddSRafał Miłecki
10627736dddSRafał Miłecki  brcm,nand-has-wp:
10727736dddSRafał Miłecki    description: >
10827736dddSRafał Miłecki      Some versions of this IP include a write-protect
10927736dddSRafał Miłecki      (WP) control bit. It is always available on >=
11027736dddSRafał Miłecki      v7.0. Use this property to describe the rare
11127736dddSRafał Miłecki      earlier versions of this core that include WP
11227736dddSRafał Miłecki    type: boolean
11327736dddSRafał Miłecki
11427736dddSRafał MiłeckipatternProperties:
11527736dddSRafał Miłecki  "^nand@[a-f0-9]$":
11627736dddSRafał Miłecki    type: object
117*74b7e3bdSMiquel Raynal    $ref: raw-nand-chip.yaml
11827736dddSRafał Miłecki    properties:
11927736dddSRafał Miłecki      compatible:
12027736dddSRafał Miłecki        const: brcm,nandcs
12127736dddSRafał Miłecki
12227736dddSRafał Miłecki      nand-ecc-step-size:
12327736dddSRafał Miłecki        enum: [ 512, 1024 ]
12427736dddSRafał Miłecki
12527736dddSRafał Miłecki      brcm,nand-oob-sector-size:
12627736dddSRafał Miłecki        description: |
12727736dddSRafał Miłecki          integer, to denote the spare area sector size
12827736dddSRafał Miłecki          expected for the ECC layout in use. This size, in
12927736dddSRafał Miłecki          addition to the strength and step-size,
13027736dddSRafał Miłecki          determines how the hardware BCH engine will lay
13127736dddSRafał Miłecki          out the parity bytes it stores on the flash.
13227736dddSRafał Miłecki          This property can be automatically determined by
13327736dddSRafał Miłecki          the flash geometry (particularly the NAND page
13427736dddSRafał Miłecki          and OOB size) in many cases, but when booting
13527736dddSRafał Miłecki          from NAND, the boot controller has only a limited
13627736dddSRafał Miłecki          number of available options for its default ECC
13727736dddSRafał Miłecki          layout.
13827736dddSRafał Miłecki        $ref: /schemas/types.yaml#/definitions/uint32
13927736dddSRafał Miłecki
140*74b7e3bdSMiquel Raynal    unevaluatedProperties: false
141*74b7e3bdSMiquel Raynal
14227736dddSRafał MiłeckiallOf:
14327736dddSRafał Miłecki  - $ref: nand-controller.yaml#
14427736dddSRafał Miłecki  - if:
14527736dddSRafał Miłecki      properties:
14627736dddSRafał Miłecki        compatible:
14727736dddSRafał Miłecki          contains:
14827736dddSRafał Miłecki            const: brcm,nand-bcm63138
14927736dddSRafał Miłecki    then:
15027736dddSRafał Miłecki      properties:
15127736dddSRafał Miłecki        reg-names:
15227736dddSRafał Miłecki          items:
15327736dddSRafał Miłecki            - const: nand
15427736dddSRafał Miłecki            - const: nand-int-base
15527736dddSRafał Miłecki  - if:
15627736dddSRafał Miłecki      properties:
15727736dddSRafał Miłecki        compatible:
15827736dddSRafał Miłecki          contains:
15927736dddSRafał Miłecki            const: brcm,nand-bcm6368
16027736dddSRafał Miłecki    then:
16127736dddSRafał Miłecki      properties:
16227736dddSRafał Miłecki        reg-names:
16327736dddSRafał Miłecki          items:
16427736dddSRafał Miłecki            - const: nand
16527736dddSRafał Miłecki            - const: nand-int-base
16627736dddSRafał Miłecki            - const: nand-cache
16727736dddSRafał Miłecki  - if:
16827736dddSRafał Miłecki      properties:
16927736dddSRafał Miłecki        compatible:
17027736dddSRafał Miłecki          contains:
17127736dddSRafał Miłecki            const: brcm,nand-iproc
17227736dddSRafał Miłecki    then:
17327736dddSRafał Miłecki      properties:
17427736dddSRafał Miłecki        reg-names:
17527736dddSRafał Miłecki          items:
17627736dddSRafał Miłecki            - const: nand
17727736dddSRafał Miłecki            - const: iproc-idm
17827736dddSRafał Miłecki            - const: iproc-ext
179075e181fSRafał Miłecki  - if:
180075e181fSRafał Miłecki      properties:
181075e181fSRafał Miłecki        interrupts:
182075e181fSRafał Miłecki          minItems: 2
183075e181fSRafał Miłecki    then:
184075e181fSRafał Miłecki      required:
185075e181fSRafał Miłecki        - interrupt-names
18627736dddSRafał Miłecki
18727736dddSRafał MiłeckiunevaluatedProperties: false
18827736dddSRafał Miłecki
18927736dddSRafał Miłeckirequired:
19027736dddSRafał Miłecki  - reg
19127736dddSRafał Miłecki  - reg-names
19227736dddSRafał Miłecki  - interrupts
19327736dddSRafał Miłecki
19427736dddSRafał Miłeckiexamples:
19527736dddSRafał Miłecki  - |
19627736dddSRafał Miłecki    nand-controller@f0442800 {
19727736dddSRafał Miłecki        compatible = "brcm,brcmnand-v7.0", "brcm,brcmnand";
19827736dddSRafał Miłecki        reg = <0xf0442800 0x600>,
19927736dddSRafał Miłecki              <0xf0443000 0x100>;
20027736dddSRafał Miłecki        reg-names = "nand", "flash-dma";
20127736dddSRafał Miłecki        interrupt-parent = <&hif_intr2_intc>;
20227736dddSRafał Miłecki        interrupts = <24>, <4>;
203075e181fSRafał Miłecki        interrupt-names = "nand_ctlrdy", "flash_dma_done";
20427736dddSRafał Miłecki
20527736dddSRafał Miłecki        #address-cells = <1>;
20627736dddSRafał Miłecki        #size-cells = <0>;
20727736dddSRafał Miłecki
20827736dddSRafał Miłecki        nand@1 {
20927736dddSRafał Miłecki            compatible = "brcm,nandcs";
21027736dddSRafał Miłecki            reg = <1>; // Chip select 1
21127736dddSRafał Miłecki            nand-on-flash-bbt;
21227736dddSRafał Miłecki            nand-ecc-strength = <12>;
21327736dddSRafał Miłecki            nand-ecc-step-size = <512>;
21427736dddSRafał Miłecki
21527736dddSRafał Miłecki            #address-cells = <1>;
21627736dddSRafał Miłecki            #size-cells = <1>;
21727736dddSRafał Miłecki        };
21827736dddSRafał Miłecki    };
21927736dddSRafał Miłecki  - |
22027736dddSRafał Miłecki    nand-controller@10000200 {
22127736dddSRafał Miłecki        compatible = "brcm,nand-bcm63168", "brcm,nand-bcm6368",
22227736dddSRafał Miłecki                     "brcm,brcmnand-v4.0", "brcm,brcmnand";
22327736dddSRafał Miłecki        reg = <0x10000200 0x180>,
22427736dddSRafał Miłecki              <0x100000b0 0x10>,
22527736dddSRafał Miłecki              <0x10000600 0x200>;
22627736dddSRafał Miłecki        reg-names = "nand", "nand-int-base", "nand-cache";
22727736dddSRafał Miłecki        interrupt-parent = <&periph_intc>;
22827736dddSRafał Miłecki        interrupts = <50>;
22927736dddSRafał Miłecki        clocks = <&periph_clk 20>;
23027736dddSRafał Miłecki        clock-names = "nand";
23127736dddSRafał Miłecki
23227736dddSRafał Miłecki        #address-cells = <1>;
23327736dddSRafał Miłecki        #size-cells = <0>;
23427736dddSRafał Miłecki
23527736dddSRafał Miłecki        nand@0 {
23627736dddSRafał Miłecki            compatible = "brcm,nandcs";
23727736dddSRafał Miłecki            reg = <0>;
23827736dddSRafał Miłecki            nand-on-flash-bbt;
23927736dddSRafał Miłecki            nand-ecc-strength = <1>;
24027736dddSRafał Miłecki            nand-ecc-step-size = <512>;
24127736dddSRafał Miłecki
24227736dddSRafał Miłecki            #address-cells = <1>;
24327736dddSRafał Miłecki            #size-cells = <1>;
24427736dddSRafał Miłecki        };
24527736dddSRafał Miłecki    };
246