15956d97fSEmmanuel Vadot# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause 25956d97fSEmmanuel Vadot%YAML 1.2 35956d97fSEmmanuel Vadot--- 45956d97fSEmmanuel Vadot$id: http://devicetree.org/schemas/mtd/brcm,brcmnand.yaml# 55956d97fSEmmanuel Vadot$schema: http://devicetree.org/meta-schemas/core.yaml# 65956d97fSEmmanuel Vadot 75956d97fSEmmanuel Vadottitle: Broadcom STB NAND Controller 85956d97fSEmmanuel Vadot 95956d97fSEmmanuel Vadotmaintainers: 105956d97fSEmmanuel Vadot - Brian Norris <computersforpeace@gmail.com> 115956d97fSEmmanuel Vadot - Kamal Dasu <kdasu.kdev@gmail.com> 12*01950c46SEmmanuel Vadot - William Zhang <william.zhang@broadcom.com> 135956d97fSEmmanuel Vadot 145956d97fSEmmanuel Vadotdescription: | 155956d97fSEmmanuel Vadot The Broadcom Set-Top Box NAND controller supports low-level access to raw NAND 165956d97fSEmmanuel Vadot flash chips. It has a memory-mapped register interface for both control 175956d97fSEmmanuel Vadot registers and for its data input/output buffer. On some SoCs, this controller 185956d97fSEmmanuel Vadot is paired with a custom DMA engine (inventively named "Flash DMA") which 195956d97fSEmmanuel Vadot supports basic PROGRAM and READ functions, among other features. 205956d97fSEmmanuel Vadot 215956d97fSEmmanuel Vadot This controller was originally designed for STB SoCs (BCM7xxx) but is now 22*01950c46SEmmanuel Vadot available on a variety of Broadcom SoCs, including some BCM3xxx, MIPS based 23*01950c46SEmmanuel Vadot Broadband SoC (BCM63xx), ARM based Broadband SoC (BCMBCA) and iProc/Cygnus. 24*01950c46SEmmanuel Vadot Its history includes several similar (but not fully register compatible) 25*01950c46SEmmanuel Vadot versions. 265956d97fSEmmanuel Vadot 275956d97fSEmmanuel Vadot -- Additional SoC-specific NAND controller properties -- 285956d97fSEmmanuel Vadot 295956d97fSEmmanuel Vadot The NAND controller is integrated differently on the variety of SoCs on which 305956d97fSEmmanuel Vadot it is found. Part of this integration involves providing status and enable 315956d97fSEmmanuel Vadot bits with which to control the 8 exposed NAND interrupts, as well as hardware 325956d97fSEmmanuel Vadot for configuring the endianness of the data bus. On some SoCs, these features 335956d97fSEmmanuel Vadot are handled via standard, modular components (e.g., their interrupts look like 345956d97fSEmmanuel Vadot a normal IRQ chip), but on others, they are controlled in unique and 355956d97fSEmmanuel Vadot interesting ways, sometimes with registers that lump multiple NAND-related 365956d97fSEmmanuel Vadot functions together. The former case can be described simply by the standard 375956d97fSEmmanuel Vadot interrupts properties in the main controller node. But for the latter 385956d97fSEmmanuel Vadot exceptional cases, we define additional 'compatible' properties and associated 395956d97fSEmmanuel Vadot register resources within the NAND controller node above. 405956d97fSEmmanuel Vadot 415956d97fSEmmanuel Vadotproperties: 425956d97fSEmmanuel Vadot compatible: 435956d97fSEmmanuel Vadot oneOf: 445956d97fSEmmanuel Vadot - items: 455956d97fSEmmanuel Vadot - enum: 465956d97fSEmmanuel Vadot - brcm,brcmnand-v2.1 475956d97fSEmmanuel Vadot - brcm,brcmnand-v2.2 485956d97fSEmmanuel Vadot - brcm,brcmnand-v4.0 495956d97fSEmmanuel Vadot - brcm,brcmnand-v5.0 505956d97fSEmmanuel Vadot - brcm,brcmnand-v6.0 515956d97fSEmmanuel Vadot - brcm,brcmnand-v6.1 525956d97fSEmmanuel Vadot - brcm,brcmnand-v6.2 535956d97fSEmmanuel Vadot - brcm,brcmnand-v7.0 545956d97fSEmmanuel Vadot - brcm,brcmnand-v7.1 555956d97fSEmmanuel Vadot - brcm,brcmnand-v7.2 565956d97fSEmmanuel Vadot - brcm,brcmnand-v7.3 575956d97fSEmmanuel Vadot - const: brcm,brcmnand 58*01950c46SEmmanuel Vadot - description: BCMBCA SoC-specific NAND controller 595956d97fSEmmanuel Vadot items: 605956d97fSEmmanuel Vadot - const: brcm,nand-bcm63138 615956d97fSEmmanuel Vadot - enum: 625956d97fSEmmanuel Vadot - brcm,brcmnand-v7.0 635956d97fSEmmanuel Vadot - brcm,brcmnand-v7.1 645956d97fSEmmanuel Vadot - const: brcm,brcmnand 655956d97fSEmmanuel Vadot - description: iProc SoC-specific NAND controller 665956d97fSEmmanuel Vadot items: 675956d97fSEmmanuel Vadot - const: brcm,nand-iproc 685956d97fSEmmanuel Vadot - const: brcm,brcmnand-v6.1 695956d97fSEmmanuel Vadot - const: brcm,brcmnand 705956d97fSEmmanuel Vadot - description: BCM63168 SoC-specific NAND controller 715956d97fSEmmanuel Vadot items: 725956d97fSEmmanuel Vadot - const: brcm,nand-bcm63168 735956d97fSEmmanuel Vadot - const: brcm,nand-bcm6368 745956d97fSEmmanuel Vadot - const: brcm,brcmnand-v4.0 755956d97fSEmmanuel Vadot - const: brcm,brcmnand 765956d97fSEmmanuel Vadot 775956d97fSEmmanuel Vadot reg: 785956d97fSEmmanuel Vadot minItems: 1 795956d97fSEmmanuel Vadot maxItems: 6 805956d97fSEmmanuel Vadot 815956d97fSEmmanuel Vadot reg-names: 825956d97fSEmmanuel Vadot minItems: 1 835956d97fSEmmanuel Vadot maxItems: 6 845956d97fSEmmanuel Vadot items: 855956d97fSEmmanuel Vadot enum: [ nand, flash-dma, flash-edu, nand-cache, nand-int-base, iproc-idm, iproc-ext ] 865956d97fSEmmanuel Vadot 875956d97fSEmmanuel Vadot interrupts: 885956d97fSEmmanuel Vadot minItems: 1 895956d97fSEmmanuel Vadot items: 905956d97fSEmmanuel Vadot - description: NAND CTLRDY interrupt 918bab661aSEmmanuel Vadot - description: FLASH_DMA_DONE (if flash DMA is available) or FLASH_EDU_DONE (if EDU is available) 925956d97fSEmmanuel Vadot 935956d97fSEmmanuel Vadot interrupt-names: 945956d97fSEmmanuel Vadot minItems: 1 955956d97fSEmmanuel Vadot items: 965956d97fSEmmanuel Vadot - const: nand_ctlrdy 978bab661aSEmmanuel Vadot - enum: 988bab661aSEmmanuel Vadot - flash_dma_done 998bab661aSEmmanuel Vadot - flash_edu_done 1005956d97fSEmmanuel Vadot 1015956d97fSEmmanuel Vadot clocks: 1025956d97fSEmmanuel Vadot maxItems: 1 1035956d97fSEmmanuel Vadot description: reference to the clock for the NAND controller 1045956d97fSEmmanuel Vadot 1055956d97fSEmmanuel Vadot clock-names: 1065956d97fSEmmanuel Vadot const: nand 1075956d97fSEmmanuel Vadot 1085956d97fSEmmanuel Vadot brcm,nand-has-wp: 1095956d97fSEmmanuel Vadot description: > 1105956d97fSEmmanuel Vadot Some versions of this IP include a write-protect 1115956d97fSEmmanuel Vadot (WP) control bit. It is always available on >= 1125956d97fSEmmanuel Vadot v7.0. Use this property to describe the rare 1135956d97fSEmmanuel Vadot earlier versions of this core that include WP 1145956d97fSEmmanuel Vadot type: boolean 1155956d97fSEmmanuel Vadot 116*01950c46SEmmanuel Vadot brcm,wp-not-connected: 117*01950c46SEmmanuel Vadot description: 118*01950c46SEmmanuel Vadot Use this property when WP pin is not physically wired to the NAND chip. 119*01950c46SEmmanuel Vadot Write protection feature cannot be used. By default, controller assumes 120*01950c46SEmmanuel Vadot the pin is connected and feature is used. 121*01950c46SEmmanuel Vadot $ref: /schemas/types.yaml#/definitions/flag 122*01950c46SEmmanuel Vadot 1235956d97fSEmmanuel VadotpatternProperties: 1245956d97fSEmmanuel Vadot "^nand@[a-f0-9]$": 1255956d97fSEmmanuel Vadot type: object 126f126890aSEmmanuel Vadot $ref: raw-nand-chip.yaml 1275956d97fSEmmanuel Vadot properties: 1285956d97fSEmmanuel Vadot compatible: 1295956d97fSEmmanuel Vadot const: brcm,nandcs 1305956d97fSEmmanuel Vadot 1315956d97fSEmmanuel Vadot nand-ecc-step-size: 1325956d97fSEmmanuel Vadot enum: [ 512, 1024 ] 1335956d97fSEmmanuel Vadot 1345956d97fSEmmanuel Vadot brcm,nand-oob-sector-size: 1355956d97fSEmmanuel Vadot description: | 1365956d97fSEmmanuel Vadot integer, to denote the spare area sector size 1375956d97fSEmmanuel Vadot expected for the ECC layout in use. This size, in 1385956d97fSEmmanuel Vadot addition to the strength and step-size, 1395956d97fSEmmanuel Vadot determines how the hardware BCH engine will lay 1405956d97fSEmmanuel Vadot out the parity bytes it stores on the flash. 1415956d97fSEmmanuel Vadot This property can be automatically determined by 1425956d97fSEmmanuel Vadot the flash geometry (particularly the NAND page 1435956d97fSEmmanuel Vadot and OOB size) in many cases, but when booting 1445956d97fSEmmanuel Vadot from NAND, the boot controller has only a limited 1455956d97fSEmmanuel Vadot number of available options for its default ECC 1465956d97fSEmmanuel Vadot layout. 1475956d97fSEmmanuel Vadot $ref: /schemas/types.yaml#/definitions/uint32 1485956d97fSEmmanuel Vadot 149*01950c46SEmmanuel Vadot brcm,nand-ecc-use-strap: 150*01950c46SEmmanuel Vadot description: 151*01950c46SEmmanuel Vadot This property requires the host system to get the ECC related 152*01950c46SEmmanuel Vadot settings from the SoC NAND boot strap configuration instead of 153*01950c46SEmmanuel Vadot the generic NAND ECC settings. This is a common hardware design 154*01950c46SEmmanuel Vadot on BCMBCA based boards. This strap ECC option and generic NAND 155*01950c46SEmmanuel Vadot ECC option can not be specified at the same time. 156*01950c46SEmmanuel Vadot $ref: /schemas/types.yaml#/definitions/flag 157*01950c46SEmmanuel Vadot 158f126890aSEmmanuel Vadot unevaluatedProperties: false 159f126890aSEmmanuel Vadot 1605956d97fSEmmanuel VadotallOf: 1615956d97fSEmmanuel Vadot - $ref: nand-controller.yaml# 1625956d97fSEmmanuel Vadot - if: 1635956d97fSEmmanuel Vadot properties: 1645956d97fSEmmanuel Vadot compatible: 1655956d97fSEmmanuel Vadot contains: 1665956d97fSEmmanuel Vadot const: brcm,nand-bcm63138 1675956d97fSEmmanuel Vadot then: 1685956d97fSEmmanuel Vadot properties: 1695956d97fSEmmanuel Vadot reg-names: 1705956d97fSEmmanuel Vadot items: 1715956d97fSEmmanuel Vadot - const: nand 1725956d97fSEmmanuel Vadot - const: nand-int-base 1735956d97fSEmmanuel Vadot - if: 1745956d97fSEmmanuel Vadot properties: 1755956d97fSEmmanuel Vadot compatible: 1765956d97fSEmmanuel Vadot contains: 1775956d97fSEmmanuel Vadot const: brcm,nand-bcm6368 1785956d97fSEmmanuel Vadot then: 1795956d97fSEmmanuel Vadot properties: 1805956d97fSEmmanuel Vadot reg-names: 1815956d97fSEmmanuel Vadot items: 1825956d97fSEmmanuel Vadot - const: nand 1835956d97fSEmmanuel Vadot - const: nand-int-base 1845956d97fSEmmanuel Vadot - const: nand-cache 1855956d97fSEmmanuel Vadot - if: 1865956d97fSEmmanuel Vadot properties: 1875956d97fSEmmanuel Vadot compatible: 1885956d97fSEmmanuel Vadot contains: 1895956d97fSEmmanuel Vadot const: brcm,nand-iproc 1905956d97fSEmmanuel Vadot then: 1915956d97fSEmmanuel Vadot properties: 1925956d97fSEmmanuel Vadot reg-names: 1935956d97fSEmmanuel Vadot items: 1945956d97fSEmmanuel Vadot - const: nand 1955956d97fSEmmanuel Vadot - const: iproc-idm 1965956d97fSEmmanuel Vadot - const: iproc-ext 1978bab661aSEmmanuel Vadot - if: 198*01950c46SEmmanuel Vadot required: 199*01950c46SEmmanuel Vadot - interrupts 2008bab661aSEmmanuel Vadot properties: 2018bab661aSEmmanuel Vadot interrupts: 2028bab661aSEmmanuel Vadot minItems: 2 2038bab661aSEmmanuel Vadot then: 2048bab661aSEmmanuel Vadot required: 2058bab661aSEmmanuel Vadot - interrupt-names 2065956d97fSEmmanuel Vadot 207*01950c46SEmmanuel Vadot - if: 208*01950c46SEmmanuel Vadot patternProperties: 209*01950c46SEmmanuel Vadot "^nand@[a-f0-9]$": 210*01950c46SEmmanuel Vadot required: 211*01950c46SEmmanuel Vadot - brcm,nand-ecc-use-strap 212*01950c46SEmmanuel Vadot then: 213*01950c46SEmmanuel Vadot patternProperties: 214*01950c46SEmmanuel Vadot "^nand@[a-f0-9]$": 215*01950c46SEmmanuel Vadot properties: 216*01950c46SEmmanuel Vadot nand-ecc-strength: false 217*01950c46SEmmanuel Vadot nand-ecc-step-size: false 218*01950c46SEmmanuel Vadot nand-ecc-maximize: false 219*01950c46SEmmanuel Vadot nand-ecc-algo: false 220*01950c46SEmmanuel Vadot brcm,nand-oob-sector-size: false 221*01950c46SEmmanuel Vadot 2225956d97fSEmmanuel VadotunevaluatedProperties: false 2235956d97fSEmmanuel Vadot 2245956d97fSEmmanuel Vadotrequired: 2255956d97fSEmmanuel Vadot - reg 2265956d97fSEmmanuel Vadot - reg-names 2275956d97fSEmmanuel Vadot 2285956d97fSEmmanuel Vadotexamples: 2295956d97fSEmmanuel Vadot - | 2305956d97fSEmmanuel Vadot nand-controller@f0442800 { 2315956d97fSEmmanuel Vadot compatible = "brcm,brcmnand-v7.0", "brcm,brcmnand"; 2325956d97fSEmmanuel Vadot reg = <0xf0442800 0x600>, 2335956d97fSEmmanuel Vadot <0xf0443000 0x100>; 2345956d97fSEmmanuel Vadot reg-names = "nand", "flash-dma"; 2355956d97fSEmmanuel Vadot interrupt-parent = <&hif_intr2_intc>; 2365956d97fSEmmanuel Vadot interrupts = <24>, <4>; 2378bab661aSEmmanuel Vadot interrupt-names = "nand_ctlrdy", "flash_dma_done"; 2385956d97fSEmmanuel Vadot 2395956d97fSEmmanuel Vadot #address-cells = <1>; 2405956d97fSEmmanuel Vadot #size-cells = <0>; 2415956d97fSEmmanuel Vadot 2425956d97fSEmmanuel Vadot nand@1 { 2435956d97fSEmmanuel Vadot compatible = "brcm,nandcs"; 2445956d97fSEmmanuel Vadot reg = <1>; // Chip select 1 2455956d97fSEmmanuel Vadot nand-on-flash-bbt; 2465956d97fSEmmanuel Vadot nand-ecc-strength = <12>; 2475956d97fSEmmanuel Vadot nand-ecc-step-size = <512>; 2485956d97fSEmmanuel Vadot 2495956d97fSEmmanuel Vadot #address-cells = <1>; 2505956d97fSEmmanuel Vadot #size-cells = <1>; 2515956d97fSEmmanuel Vadot }; 2525956d97fSEmmanuel Vadot }; 2535956d97fSEmmanuel Vadot - | 2545956d97fSEmmanuel Vadot nand-controller@10000200 { 2555956d97fSEmmanuel Vadot compatible = "brcm,nand-bcm63168", "brcm,nand-bcm6368", 2565956d97fSEmmanuel Vadot "brcm,brcmnand-v4.0", "brcm,brcmnand"; 2575956d97fSEmmanuel Vadot reg = <0x10000200 0x180>, 2585956d97fSEmmanuel Vadot <0x100000b0 0x10>, 2595956d97fSEmmanuel Vadot <0x10000600 0x200>; 2605956d97fSEmmanuel Vadot reg-names = "nand", "nand-int-base", "nand-cache"; 2615956d97fSEmmanuel Vadot interrupt-parent = <&periph_intc>; 2625956d97fSEmmanuel Vadot interrupts = <50>; 2635956d97fSEmmanuel Vadot clocks = <&periph_clk 20>; 2645956d97fSEmmanuel Vadot clock-names = "nand"; 2655956d97fSEmmanuel Vadot 2665956d97fSEmmanuel Vadot #address-cells = <1>; 2675956d97fSEmmanuel Vadot #size-cells = <0>; 2685956d97fSEmmanuel Vadot 2695956d97fSEmmanuel Vadot nand@0 { 2705956d97fSEmmanuel Vadot compatible = "brcm,nandcs"; 2715956d97fSEmmanuel Vadot reg = <0>; 2725956d97fSEmmanuel Vadot nand-on-flash-bbt; 2735956d97fSEmmanuel Vadot nand-ecc-strength = <1>; 2745956d97fSEmmanuel Vadot nand-ecc-step-size = <512>; 2755956d97fSEmmanuel Vadot 2765956d97fSEmmanuel Vadot #address-cells = <1>; 2775956d97fSEmmanuel Vadot #size-cells = <1>; 2785956d97fSEmmanuel Vadot }; 2795956d97fSEmmanuel Vadot }; 280