Brcmstb PCIe Host Controller Device Tree Bindings

Introduction:

The brcmstb host controller closely follows the example set in

	[1] http://devicetree.org/Device_Tree_Usage#PCI_Host_Bridge

The rest of this document explains some added customizations and
offers an example Brcmstb PCIe host controller DT node.

Required Properties:
  reg -- the register start address and length for the PCIe block.
      Additional start,length pairs may be specified for clock addresses.
  interrupts -- this must be specified but it is used indirectly.  Interrupt
      zero must be specified; the Brcmstb driver code uses this interrupt
      to determine the offset used for all interrupts, specifically, those
      listed in interrupt-map.
  compatible -- must be one of: "brcm,bcm7425-pcie", "brcm,bcm7435-pcie" or
      "brcm,pci-plat-dev".
  #address-cells -- the number of address cells for PCI-space.
  #size-cells -- the number of size cells for PCI-space.
  ranges -- See [1]; a specification of the outbound windows for the host
      controller.  Each outbound window is described by a 7-tuple:
          (3 entries) -- PCIe space start address (0th entry is ignored).
          (2 entries) -- CPU/System start address
          (2 entries) -- Size of region.
      Due to hardware limitations, there may be a maximum of four windows
      specified.
  #interrupt-cells -- number of cells used to describe the interrupt.
  interrupt-map -- See [1]; each interrupt requires 7 entries, and
      currently all but the fifth entry (order 0) -- the interrupt
      number -- is ignored.  There must be four interrupts specified
      for the PCI's INTA, INTB, INTC, and INTD.

Optional Properties:
  interrupt-names -- names of the interrupts listed in the interrupt map.
  clocks -- list of clock phandles.  If specified, this should list one
      clock.
  clock-names -- the "local" names of the clocks specified in 'clocks'.  Note
      that if the 'clocks' property is given, 'clock-names' is mandatory,
      and the name of the clock is expected to be "sw_pcie".
  brcm,ssc -- (boolean) indicates usage of spread-spectrum clocking.
  brcm,gen --  (integer) indicates desired generation of link:
      1 => 2.5 Gbps, 2 => 5.0 Gbps, 3 => 8.0 Gbps.
  supply-names -- the names of voltage regulators that the root
      complex should turn off/on/on on suspend/resume/boot.  This
      is a string list.  
  supplies -- A collection of phandles to a regulator nodes, see
	Documentation/devicetree/bindings/regulator/ for specific
	bindings. The number and order of phandles must match
	exactly the number of strings in the "supply-names" property.

Example Node:

	pcie@f0460000 {
		reg = <0x0 0xf0460000 0x0 0x9310>;
		interrupts = <0x0 0x0 0x4>;
		compatible = "brcm,pci-plat-dev";
		#address-cells = <3>;
		#size-cells = <2>;
		ranges = <0x02000000 0x00000000 0x00000000 0x00000000 0xc0000000 0x00000000 0x08000000
			  0x02000000 0x00000000 0x08000000 0x00000000 0xc8000000 0x00000000 0x08000000>;
		#interrupt-cells = <1>;
		interrupt-map-mask = <0xf800 0 0 7>;
		interrupt-map = <0 0 0 1 &intc 47 3
				 0 0 0 2 &intc 48 3
				 0 0 0 3 &intc 49 3
				 0 0 0 4 &intc 50 3>;
		interrupt-names = "pcie_0_inta",
				  "pcie_0_intb",
				  "pcie_0_intc",
				  "pcie_0_intd";
		clocks = <&sw_pcie0>;
		clock-names = "sw_pcie";
		brcm,ssc;
		brcm,gen = <1>;
		supply-names = "vreg-wifi-pwr";
		supplies = <&vreg-wifi-pwr>;

	};
