* Broadcom STB NAND Controller

The Broadcom STB NAND controller utilizes the MTD subsystem to provide generic
access to NAND flash chips.

Required properties:
- compatible     : should contain "brcm,brcmnand" and an appropriate version
                   compatibility string, like "brcm,brcmnand-v7.0"
- reg            : the register start and length for NAND and (if present)
                   FLASH_DMA blocks
- reg-names      : a list of the names corresponding to the previous register
		   ranges. Should contain "nand" and (if FLASH_DMA is
                   available) "flash-dma".
- interrupts     : The HIF L2 interrupts for NAND_CLTRDY and (if FLASH_DMA is
                   available) FLASH_DMA_DONE
- interrupt-parent: The phandle to the HIF L2 interrupt controller node
- #address-cells : <1> - subnodes give the chip-select number
- #size-cells    : <0>

Each controller (compatible: "brcm,brcmnand") may contain one or more subnodes
to represent enabled chip-selects which (may) contain NAND flash chips. Their
properties are as follows.

Required properties:
- compatible        : should contain "brcm,nandcs"
- reg               : a single integer representing the chip-select number
                      (e.g., 0, 1, 2, etc.)
- #address-cells    : see partition.txt
- #size-cells       : see partition.txt

Optional properties:
- nand-on-flash-bbt : boolean, to enable the on-flash BBT for this chip-select

Each nandcs device node may optionally contain sub-nodes describing the flash
partition mapping. See partition.txt for more detail.

Example:

nand@f0442800 {
	compatible = "brcm,brcmnand-v7.0", "brcm,brcmnand";
	reg = <0xF0442800 0x600>,
	      <0xF0443000 0x100>;
	reg-names = "nand", "flash-dma";
	interrupt-parent = <&hif_intr2_intc>;
	interrupts = <24>, <4>;

	#address-cells = <1>;
	#size-cells = <0>;

	nandcs@1 {
		compatible = "brcm,nandcs";
		reg = <1>; // Chip select 1
		nand-on-flash-bbt;

		// Partitions
		#address-cells = <1>;  // <2>, for 64-bit offset
		#size-cells = <1>;     // <2>, for 64-bit length
		flash0.rootfs@0 {
			reg = <0 0x10000000>;
		};
		flash0@0 {
			reg = <0 0>; // MTDPART_SIZ_FULL
		};
		flash0.kernel@10000000 {
			reg = <0x10000000 0x400000>;
		};
	};
};
