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