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