162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause 262306a36Sopenharmony_ci%YAML 1.2 362306a36Sopenharmony_ci--- 462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/mtd/brcm,brcmnand.yaml# 562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 662306a36Sopenharmony_ci 762306a36Sopenharmony_cititle: Broadcom STB NAND Controller 862306a36Sopenharmony_ci 962306a36Sopenharmony_cimaintainers: 1062306a36Sopenharmony_ci - Brian Norris <computersforpeace@gmail.com> 1162306a36Sopenharmony_ci - Kamal Dasu <kdasu.kdev@gmail.com> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cidescription: | 1462306a36Sopenharmony_ci The Broadcom Set-Top Box NAND controller supports low-level access to raw NAND 1562306a36Sopenharmony_ci flash chips. It has a memory-mapped register interface for both control 1662306a36Sopenharmony_ci registers and for its data input/output buffer. On some SoCs, this controller 1762306a36Sopenharmony_ci is paired with a custom DMA engine (inventively named "Flash DMA") which 1862306a36Sopenharmony_ci supports basic PROGRAM and READ functions, among other features. 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci This controller was originally designed for STB SoCs (BCM7xxx) but is now 2162306a36Sopenharmony_ci available on a variety of Broadcom SoCs, including some BCM3xxx, BCM63xx, and 2262306a36Sopenharmony_ci iProc/Cygnus. Its history includes several similar (but not fully register 2362306a36Sopenharmony_ci compatible) versions. 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci -- Additional SoC-specific NAND controller properties -- 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci The NAND controller is integrated differently on the variety of SoCs on which 2862306a36Sopenharmony_ci it is found. Part of this integration involves providing status and enable 2962306a36Sopenharmony_ci bits with which to control the 8 exposed NAND interrupts, as well as hardware 3062306a36Sopenharmony_ci for configuring the endianness of the data bus. On some SoCs, these features 3162306a36Sopenharmony_ci are handled via standard, modular components (e.g., their interrupts look like 3262306a36Sopenharmony_ci a normal IRQ chip), but on others, they are controlled in unique and 3362306a36Sopenharmony_ci interesting ways, sometimes with registers that lump multiple NAND-related 3462306a36Sopenharmony_ci functions together. The former case can be described simply by the standard 3562306a36Sopenharmony_ci interrupts properties in the main controller node. But for the latter 3662306a36Sopenharmony_ci exceptional cases, we define additional 'compatible' properties and associated 3762306a36Sopenharmony_ci register resources within the NAND controller node above. 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ciproperties: 4062306a36Sopenharmony_ci compatible: 4162306a36Sopenharmony_ci oneOf: 4262306a36Sopenharmony_ci - items: 4362306a36Sopenharmony_ci - enum: 4462306a36Sopenharmony_ci - brcm,brcmnand-v2.1 4562306a36Sopenharmony_ci - brcm,brcmnand-v2.2 4662306a36Sopenharmony_ci - brcm,brcmnand-v4.0 4762306a36Sopenharmony_ci - brcm,brcmnand-v5.0 4862306a36Sopenharmony_ci - brcm,brcmnand-v6.0 4962306a36Sopenharmony_ci - brcm,brcmnand-v6.1 5062306a36Sopenharmony_ci - brcm,brcmnand-v6.2 5162306a36Sopenharmony_ci - brcm,brcmnand-v7.0 5262306a36Sopenharmony_ci - brcm,brcmnand-v7.1 5362306a36Sopenharmony_ci - brcm,brcmnand-v7.2 5462306a36Sopenharmony_ci - brcm,brcmnand-v7.3 5562306a36Sopenharmony_ci - const: brcm,brcmnand 5662306a36Sopenharmony_ci - description: BCM63138 SoC-specific NAND controller 5762306a36Sopenharmony_ci items: 5862306a36Sopenharmony_ci - const: brcm,nand-bcm63138 5962306a36Sopenharmony_ci - enum: 6062306a36Sopenharmony_ci - brcm,brcmnand-v7.0 6162306a36Sopenharmony_ci - brcm,brcmnand-v7.1 6262306a36Sopenharmony_ci - const: brcm,brcmnand 6362306a36Sopenharmony_ci - description: iProc SoC-specific NAND controller 6462306a36Sopenharmony_ci items: 6562306a36Sopenharmony_ci - const: brcm,nand-iproc 6662306a36Sopenharmony_ci - const: brcm,brcmnand-v6.1 6762306a36Sopenharmony_ci - const: brcm,brcmnand 6862306a36Sopenharmony_ci - description: BCM63168 SoC-specific NAND controller 6962306a36Sopenharmony_ci items: 7062306a36Sopenharmony_ci - const: brcm,nand-bcm63168 7162306a36Sopenharmony_ci - const: brcm,nand-bcm6368 7262306a36Sopenharmony_ci - const: brcm,brcmnand-v4.0 7362306a36Sopenharmony_ci - const: brcm,brcmnand 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci reg: 7662306a36Sopenharmony_ci minItems: 1 7762306a36Sopenharmony_ci maxItems: 6 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci reg-names: 8062306a36Sopenharmony_ci minItems: 1 8162306a36Sopenharmony_ci maxItems: 6 8262306a36Sopenharmony_ci items: 8362306a36Sopenharmony_ci enum: [ nand, flash-dma, flash-edu, nand-cache, nand-int-base, iproc-idm, iproc-ext ] 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci interrupts: 8662306a36Sopenharmony_ci minItems: 1 8762306a36Sopenharmony_ci items: 8862306a36Sopenharmony_ci - description: NAND CTLRDY interrupt 8962306a36Sopenharmony_ci - description: FLASH_DMA_DONE (if flash DMA is available) or FLASH_EDU_DONE (if EDU is available) 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci interrupt-names: 9262306a36Sopenharmony_ci minItems: 1 9362306a36Sopenharmony_ci items: 9462306a36Sopenharmony_ci - const: nand_ctlrdy 9562306a36Sopenharmony_ci - enum: 9662306a36Sopenharmony_ci - flash_dma_done 9762306a36Sopenharmony_ci - flash_edu_done 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci clocks: 10062306a36Sopenharmony_ci maxItems: 1 10162306a36Sopenharmony_ci description: reference to the clock for the NAND controller 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci clock-names: 10462306a36Sopenharmony_ci const: nand 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ci brcm,nand-has-wp: 10762306a36Sopenharmony_ci description: > 10862306a36Sopenharmony_ci Some versions of this IP include a write-protect 10962306a36Sopenharmony_ci (WP) control bit. It is always available on >= 11062306a36Sopenharmony_ci v7.0. Use this property to describe the rare 11162306a36Sopenharmony_ci earlier versions of this core that include WP 11262306a36Sopenharmony_ci type: boolean 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_cipatternProperties: 11562306a36Sopenharmony_ci "^nand@[a-f0-9]$": 11662306a36Sopenharmony_ci type: object 11762306a36Sopenharmony_ci $ref: raw-nand-chip.yaml 11862306a36Sopenharmony_ci properties: 11962306a36Sopenharmony_ci compatible: 12062306a36Sopenharmony_ci const: brcm,nandcs 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci nand-ecc-step-size: 12362306a36Sopenharmony_ci enum: [ 512, 1024 ] 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci brcm,nand-oob-sector-size: 12662306a36Sopenharmony_ci description: | 12762306a36Sopenharmony_ci integer, to denote the spare area sector size 12862306a36Sopenharmony_ci expected for the ECC layout in use. This size, in 12962306a36Sopenharmony_ci addition to the strength and step-size, 13062306a36Sopenharmony_ci determines how the hardware BCH engine will lay 13162306a36Sopenharmony_ci out the parity bytes it stores on the flash. 13262306a36Sopenharmony_ci This property can be automatically determined by 13362306a36Sopenharmony_ci the flash geometry (particularly the NAND page 13462306a36Sopenharmony_ci and OOB size) in many cases, but when booting 13562306a36Sopenharmony_ci from NAND, the boot controller has only a limited 13662306a36Sopenharmony_ci number of available options for its default ECC 13762306a36Sopenharmony_ci layout. 13862306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ci unevaluatedProperties: false 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_ciallOf: 14362306a36Sopenharmony_ci - $ref: nand-controller.yaml# 14462306a36Sopenharmony_ci - if: 14562306a36Sopenharmony_ci properties: 14662306a36Sopenharmony_ci compatible: 14762306a36Sopenharmony_ci contains: 14862306a36Sopenharmony_ci const: brcm,nand-bcm63138 14962306a36Sopenharmony_ci then: 15062306a36Sopenharmony_ci properties: 15162306a36Sopenharmony_ci reg-names: 15262306a36Sopenharmony_ci items: 15362306a36Sopenharmony_ci - const: nand 15462306a36Sopenharmony_ci - const: nand-int-base 15562306a36Sopenharmony_ci - if: 15662306a36Sopenharmony_ci properties: 15762306a36Sopenharmony_ci compatible: 15862306a36Sopenharmony_ci contains: 15962306a36Sopenharmony_ci const: brcm,nand-bcm6368 16062306a36Sopenharmony_ci then: 16162306a36Sopenharmony_ci properties: 16262306a36Sopenharmony_ci reg-names: 16362306a36Sopenharmony_ci items: 16462306a36Sopenharmony_ci - const: nand 16562306a36Sopenharmony_ci - const: nand-int-base 16662306a36Sopenharmony_ci - const: nand-cache 16762306a36Sopenharmony_ci - if: 16862306a36Sopenharmony_ci properties: 16962306a36Sopenharmony_ci compatible: 17062306a36Sopenharmony_ci contains: 17162306a36Sopenharmony_ci const: brcm,nand-iproc 17262306a36Sopenharmony_ci then: 17362306a36Sopenharmony_ci properties: 17462306a36Sopenharmony_ci reg-names: 17562306a36Sopenharmony_ci items: 17662306a36Sopenharmony_ci - const: nand 17762306a36Sopenharmony_ci - const: iproc-idm 17862306a36Sopenharmony_ci - const: iproc-ext 17962306a36Sopenharmony_ci - if: 18062306a36Sopenharmony_ci properties: 18162306a36Sopenharmony_ci interrupts: 18262306a36Sopenharmony_ci minItems: 2 18362306a36Sopenharmony_ci then: 18462306a36Sopenharmony_ci required: 18562306a36Sopenharmony_ci - interrupt-names 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ciunevaluatedProperties: false 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_cirequired: 19062306a36Sopenharmony_ci - reg 19162306a36Sopenharmony_ci - reg-names 19262306a36Sopenharmony_ci - interrupts 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ciexamples: 19562306a36Sopenharmony_ci - | 19662306a36Sopenharmony_ci nand-controller@f0442800 { 19762306a36Sopenharmony_ci compatible = "brcm,brcmnand-v7.0", "brcm,brcmnand"; 19862306a36Sopenharmony_ci reg = <0xf0442800 0x600>, 19962306a36Sopenharmony_ci <0xf0443000 0x100>; 20062306a36Sopenharmony_ci reg-names = "nand", "flash-dma"; 20162306a36Sopenharmony_ci interrupt-parent = <&hif_intr2_intc>; 20262306a36Sopenharmony_ci interrupts = <24>, <4>; 20362306a36Sopenharmony_ci interrupt-names = "nand_ctlrdy", "flash_dma_done"; 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_ci #address-cells = <1>; 20662306a36Sopenharmony_ci #size-cells = <0>; 20762306a36Sopenharmony_ci 20862306a36Sopenharmony_ci nand@1 { 20962306a36Sopenharmony_ci compatible = "brcm,nandcs"; 21062306a36Sopenharmony_ci reg = <1>; // Chip select 1 21162306a36Sopenharmony_ci nand-on-flash-bbt; 21262306a36Sopenharmony_ci nand-ecc-strength = <12>; 21362306a36Sopenharmony_ci nand-ecc-step-size = <512>; 21462306a36Sopenharmony_ci 21562306a36Sopenharmony_ci #address-cells = <1>; 21662306a36Sopenharmony_ci #size-cells = <1>; 21762306a36Sopenharmony_ci }; 21862306a36Sopenharmony_ci }; 21962306a36Sopenharmony_ci - | 22062306a36Sopenharmony_ci nand-controller@10000200 { 22162306a36Sopenharmony_ci compatible = "brcm,nand-bcm63168", "brcm,nand-bcm6368", 22262306a36Sopenharmony_ci "brcm,brcmnand-v4.0", "brcm,brcmnand"; 22362306a36Sopenharmony_ci reg = <0x10000200 0x180>, 22462306a36Sopenharmony_ci <0x100000b0 0x10>, 22562306a36Sopenharmony_ci <0x10000600 0x200>; 22662306a36Sopenharmony_ci reg-names = "nand", "nand-int-base", "nand-cache"; 22762306a36Sopenharmony_ci interrupt-parent = <&periph_intc>; 22862306a36Sopenharmony_ci interrupts = <50>; 22962306a36Sopenharmony_ci clocks = <&periph_clk 20>; 23062306a36Sopenharmony_ci clock-names = "nand"; 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_ci #address-cells = <1>; 23362306a36Sopenharmony_ci #size-cells = <0>; 23462306a36Sopenharmony_ci 23562306a36Sopenharmony_ci nand@0 { 23662306a36Sopenharmony_ci compatible = "brcm,nandcs"; 23762306a36Sopenharmony_ci reg = <0>; 23862306a36Sopenharmony_ci nand-on-flash-bbt; 23962306a36Sopenharmony_ci nand-ecc-strength = <1>; 24062306a36Sopenharmony_ci nand-ecc-step-size = <512>; 24162306a36Sopenharmony_ci 24262306a36Sopenharmony_ci #address-cells = <1>; 24362306a36Sopenharmony_ci #size-cells = <1>; 24462306a36Sopenharmony_ci }; 24562306a36Sopenharmony_ci }; 246