Marvell Discovery mv64[345]6x System Controller chips
===========================================================

The Marvell mv64[345]60 series of system controller chips contain
many of the peripherals needed to implement a complete computer
system.  In this section, we define device tree nodes to describe
the system controller chip itself and each of the peripherals
which it contains.  Compatible string values for each node are
prefixed with the string "marvell,", for Marvell Technology Group Ltd.

1) The /system-controller node

  This node is used to represent the system-controller and must be
  present when the system uses a system controller chip. The top-level
  system-controller node contains information that is global to all
  devices within the system controller chip. The node name begins
  with "system-controller" followed by the unit address, which is
  the base address of the memory-mapped register set for the system
  controller chip.

  Required properties:

    - ranges : Describes the translation of system controller addresses
      for memory mapped registers.
    - clock-frequency: Contains the main clock frequency for the system
      controller chip.
    - reg : This property defines the address and size of the
      memory-mapped registers contained within the system controller
      chip.  The address specified in the "reg" property should match
      the unit address of the system-controller node.
    - #address-cells : Address representation for system controller
      devices.  This field represents the number of cells needed to
      represent the address of the memory-mapped registers of devices
      within the system controller chip.
    - #size-cells : Size representation for the memory-mapped
      registers within the system controller chip.
    - #interrupt-cells : Defines the width of cells used to represent
      interrupts.

  Optional properties:

    - model : The specific model of the system controller chip.  Such
      as, "mv64360", "mv64460", or "mv64560".
    - compatible : A string identifying the compatibility identifiers
      of the system controller chip.

  The system-controller node contains child nodes for each system
  controller device that the platform uses.  Nodes should not be created
  for devices which exist on the system controller chip but are not used

  Example Marvell Discovery mv64360 system-controller node:

    system-controller@f1000000 { /* Marvell Discovery mv64360 */
	    #address-cells = <1>;
	    #size-cells = <1>;
	    model = "mv64360";                      /* Default */
	    compatible = "marvell,mv64360";
	    clock-frequency = <133333333>;
	    reg = <0xf1000000 0x10000>;
	    virtual-reg = <0xf1000000>;
	    ranges = <0x88000000 0x88000000 0x1000000 /* PCI 0 I/O Space */
		    0x80000000 0x80000000 0x8000000 /* PCI 0 MEM Space */
		    0xa0000000 0xa0000000 0x4000000 /* User FLASH */
		    0x00000000 0xf1000000 0x0010000 /* Bridge's regs */
		    0xf2000000 0xf2000000 0x0040000>;/* Integrated SRAM */

	    [ child node definitions... ]
    }

2) Child nodes of /system-controller

   a) Marvell Discovery MDIO bus

   The MDIO is a bus to which the PHY devices are connected.  For each
   device that exists on this bus, a child node should be created.  See
   the definition of the PHY node below for an example of how to define
   a PHY.

   Required properties:
     - #address-cells : Should be <1>
     - #size-cells : Should be <0>
     - device_type : Should be "mdio"
     - compatible : Should be "marvell,mv64360-mdio"

   Example:

     mdio {
	     #address-cells = <1>;
	     #size-cells = <0>;
	     device_type = "mdio";
	     compatible = "marvell,mv64360-mdio";

	     ethernet-phy@0 {
		     ......
	     };
     };


   b) Marvell Discovery ethernet controller

   The Discover ethernet controller is described with two levels
   of nodes.  The first level describes an ethernet silicon block
   and the second level describes up to 3 ethernet nodes within
   that block.  The reason for the multiple levels is that the
   registers for the node are interleaved within a single set
   of registers.  The "ethernet-block" level describes the
   shared register set, and the "ethernet" nodes describe ethernet
   port-specific properties.

   Ethernet block node

   Required properties:
     - #address-cells : <1>
     - #size-cells : <0>
     - compatible : "marvell,mv64360-eth-block"
     - reg : Offset and length of the register set for this block

   Example Discovery Ethernet block node:
     ethernet-block@2000 {
	     #address-cells = <1>;
	     #size-cells = <0>;
	     compatible = "marvell,mv64360-eth-block";
	     reg = <0x2000 0x2000>;
	     ethernet@0 {
		     .......
	     };
     };

   Ethernet port node

   Required properties:
     - device_type : Should be "network".
     - compatible : Should be "marvell,mv64360-eth".
     - reg : Should be <0>, <1>, or <2>, according to which registers
       within the silicon block the device uses.
     - interrupts : <a> where a is the interrupt number for the port.
     - interrupt-parent : the phandle for the interrupt controller
       that services interrupts for this device.
     - phy : the phandle for the PHY connected to this ethernet
       controller.
     - local-mac-address : 6 bytes, MAC address

   Example Discovery Ethernet port node:
     ethernet@0 {
	     device_type = "network";
	     compatible = "marvell,mv64360-eth";
	     reg = <0>;
	     interrupts = <32>;
	     interrupt-parent = <&PIC>;
	     phy = <&PHY0>;
	     local-mac-address = [ 00 00 00 00 00 00 ];
     };



   c) Marvell Discovery PHY nodes

   Required properties:
     - device_type : Should be "ethernet-phy"
     - interrupts : <a> where a is the interrupt number for this phy.
     - interrupt-parent : the phandle for the interrupt controller that
       services interrupts for this device.
     - reg : The ID number for the phy, usually a small integer

   Example Discovery PHY node:
     ethernet-phy@1 {
	     device_type = "ethernet-phy";
	     compatible = "broadcom,bcm5421";
	     interrupts = <76>;      /* GPP 12 */
	     interrupt-parent = <&PIC>;
	     reg = <1>;
     };


   d) Marvell Discovery SDMA nodes

   Represent DMA hardware associated with the MPSC (multiprotocol
   serial controllers).

   Required properties:
     - compatible : "marvell,mv64360-sdma"
     - reg : Offset and length of the register set for this device
     - interrupts : <a> where a is the interrupt number for the DMA
       device.
     - interrupt-parent : the phandle for the interrupt controller
       that services interrupts for this device.

   Example Discovery SDMA node:
     sdma@4000 {
	     compatible = "marvell,mv64360-sdma";
	     reg = <0x4000 0xc18>;
	     virtual-reg = <0xf1004000>;
	     interrupts = <36>;
	     interrupt-parent = <&PIC>;
     };


   e) Marvell Discovery BRG nodes

   Represent baud rate generator hardware associated with the MPSC
   (multiprotocol serial controllers).

   Required properties:
     - compatible : "marvell,mv64360-brg"
     - reg : Offset and length of the register set for this device
     - clock-src : A value from 0 to 15 which selects the clock
       source for the baud rate generator.  This value corresponds
       to the CLKS value in the BRGx configuration register.  See
       the mv64x60 User's Manual.
     - clock-frequence : The frequency (in Hz) of the baud rate
       generator's input clock.
     - current-speed : The current speed setting (presumably by
       firmware) of the baud rate generator.

   Example Discovery BRG node:
     brg@b200 {
	     compatible = "marvell,mv64360-brg";
	     reg = <0xb200 0x8>;
	     clock-src = <8>;
	     clock-frequency = <133333333>;
	     current-speed = <9600>;
     };


   f) Marvell Discovery CUNIT nodes

   Represent the Serial Communications Unit device hardware.

   Required properties:
     - reg : Offset and length of the register set for this device

   Example Discovery CUNIT node:
     cunit@f200 {
	     reg = <0xf200 0x200>;
     };


   g) Marvell Discovery MPSCROUTING nodes

   Represent the Discovery's MPSC routing hardware

   Required properties:
     - reg : Offset and length of the register set for this device

   Example Discovery CUNIT node:
     mpscrouting@b500 {
	     reg = <0xb400 0xc>;
     };


   h) Marvell Discovery MPSCINTR nodes

   Represent the Discovery's MPSC DMA interrupt hardware registers
   (SDMA cause and mask registers).

   Required properties:
     - reg : Offset and length of the register set for this device

   Example Discovery MPSCINTR node:
     mpsintr@b800 {
	     reg = <0xb800 0x100>;
     };


   i) Marvell Discovery MPSC nodes

   Represent the Discovery's MPSC (Multiprotocol Serial Controller)
   serial port.

   Required properties:
     - device_type : "serial"
     - compatible : "marvell,mv64360-mpsc"
     - reg : Offset and length of the register set for this device
     - sdma : the phandle for the SDMA node used by this port
     - brg : the phandle for the BRG node used by this port
     - cunit : the phandle for the CUNIT node used by this port
     - mpscrouting : the phandle for the MPSCROUTING node used by this port
     - mpscintr : the phandle for the MPSCINTR node used by this port
     - cell-index : the hardware index of this cell in the MPSC core
     - max_idle : value needed for MPSC CHR3 (Maximum Frame Length)
       register
     - interrupts : <a> where a is the interrupt number for the MPSC.
     - interrupt-parent : the phandle for the interrupt controller
       that services interrupts for this device.

   Example Discovery MPSCINTR node:
     mpsc@8000 {
	     device_type = "serial";
	     compatible = "marvell,mv64360-mpsc";
	     reg = <0x8000 0x38>;
	     virtual-reg = <0xf1008000>;
	     sdma = <&SDMA0>;
	     brg = <&BRG0>;
	     cunit = <&CUNIT>;
	     mpscrouting = <&MPSCROUTING>;
	     mpscintr = <&MPSCINTR>;
	     cell-index = <0>;
	     max_idle = <40>;
	     interrupts = <40>;
	     interrupt-parent = <&PIC>;
     };


   j) Marvell Discovery Watch Dog Timer nodes

   Represent the Discovery's watchdog timer hardware

   Required properties:
     - compatible : "marvell,mv64360-wdt"
     - reg : Offset and length of the register set for this device

   Example Discovery Watch Dog Timer node:
     wdt@b410 {
	     compatible = "marvell,mv64360-wdt";
	     reg = <0xb410 0x8>;
     };


   k) Marvell Discovery I2C nodes

   Represent the Discovery's I2C hardware

   Required properties:
     - device_type : "i2c"
     - compatible : "marvell,mv64360-i2c"
     - reg : Offset and length of the register set for this device
     - interrupts : <a> where a is the interrupt number for the I2C.
     - interrupt-parent : the phandle for the interrupt controller
       that services interrupts for this device.

   Example Discovery I2C node:
	     compatible = "marvell,mv64360-i2c";
	     reg = <0xc000 0x20>;
	     virtual-reg = <0xf100c000>;
	     interrupts = <37>;
	     interrupt-parent = <&PIC>;
     };


   l) Marvell Discovery PIC (Programmable Interrupt Controller) nodes

   Represent the Discovery's PIC hardware

   Required properties:
     - #interrupt-cells : <1>
     - #address-cells : <0>
     - compatible : "marvell,mv64360-pic"
     - reg : Offset and length of the register set for this device
     - interrupt-controller

   Example Discovery PIC node:
     pic {
	     #interrupt-cells = <1>;
	     #address-cells = <0>;
	     compatible = "marvell,mv64360-pic";
	     reg = <0x0 0x88>;
	     interrupt-controller;
     };


   m) Marvell Discovery MPP (Multipurpose Pins) multiplexing nodes

   Represent the Discovery's MPP hardware

   Required properties:
     - compatible : "marvell,mv64360-mpp"
     - reg : Offset and length of the register set for this device

   Example Discovery MPP node:
     mpp@f000 {
	     compatible = "marvell,mv64360-mpp";
	     reg = <0xf000 0x10>;
     };


   n) Marvell Discovery GPP (General Purpose Pins) nodes

   Represent the Discovery's GPP hardware

   Required properties:
     - compatible : "marvell,mv64360-gpp"
     - reg : Offset and length of the register set for this device

   Example Discovery GPP node:
     gpp@f000 {
	     compatible = "marvell,mv64360-gpp";
	     reg = <0xf100 0x20>;
     };


   o) Marvell Discovery PCI host bridge node

   Represents the Discovery's PCI host bridge device.  The properties
   for this node conform to Rev 2.1 of the PCI Bus Binding to IEEE
   1275-1994.  A typical value for the compatible property is
   "marvell,mv64360-pci".

   Example Discovery PCI host bridge node
     pci@80000000 {
	     #address-cells = <3>;
	     #size-cells = <2>;
	     #interrupt-cells = <1>;
	     device_type = "pci";
	     compatible = "marvell,mv64360-pci";
	     reg = <0xcf8 0x8>;
	     ranges = <0x01000000 0x0        0x0
			     0x88000000 0x0 0x01000000
		       0x02000000 0x0 0x80000000
			     0x80000000 0x0 0x08000000>;
	     bus-range = <0 255>;
	     clock-frequency = <66000000>;
	     interrupt-parent = <&PIC>;
	     interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
	     interrupt-map = <
		     /* IDSEL 0x0a */
		     0x5000 0 0 1 &PIC 80
		     0x5000 0 0 2 &PIC 81
		     0x5000 0 0 3 &PIC 91
		     0x5000 0 0 4 &PIC 93

		     /* IDSEL 0x0b */
		     0x5800 0 0 1 &PIC 91
		     0x5800 0 0 2 &PIC 93
		     0x5800 0 0 3 &PIC 80
		     0x5800 0 0 4 &PIC 81

		     /* IDSEL 0x0c */
		     0x6000 0 0 1 &PIC 91
		     0x6000 0 0 2 &PIC 93
		     0x6000 0 0 3 &PIC 80
		     0x6000 0 0 4 &PIC 81

		     /* IDSEL 0x0d */
		     0x6800 0 0 1 &PIC 93
		     0x6800 0 0 2 &PIC 80
		     0x6800 0 0 3 &PIC 81
		     0x6800 0 0 4 &PIC 91
	     >;
     };


   p) Marvell Discovery CPU Error nodes

   Represent the Discovery's CPU error handler device.

   Required properties:
     - compatible : "marvell,mv64360-cpu-error"
     - reg : Offset and length of the register set for this device
     - interrupts : the interrupt number for this device
     - interrupt-parent : the phandle for the interrupt controller
       that services interrupts for this device.

   Example Discovery CPU Error node:
     cpu-error@0070 {
	     compatible = "marvell,mv64360-cpu-error";
	     reg = <0x70 0x10 0x128 0x28>;
	     interrupts = <3>;
	     interrupt-parent = <&PIC>;
     };


   q) Marvell Discovery SRAM Controller nodes

   Represent the Discovery's SRAM controller device.

   Required properties:
     - compatible : "marvell,mv64360-sram-ctrl"
     - reg : Offset and length of the register set for this device
     - interrupts : the interrupt number for this device
     - interrupt-parent : the phandle for the interrupt controller
       that services interrupts for this device.

   Example Discovery SRAM Controller node:
     sram-ctrl@0380 {
	     compatible = "marvell,mv64360-sram-ctrl";
	     reg = <0x380 0x80>;
	     interrupts = <13>;
	     interrupt-parent = <&PIC>;
     };


   r) Marvell Discovery PCI Error Handler nodes

   Represent the Discovery's PCI error handler device.

   Required properties:
     - compatible : "marvell,mv64360-pci-error"
     - reg : Offset and length of the register set for this device
     - interrupts : the interrupt number for this device
     - interrupt-parent : the phandle for the interrupt controller
       that services interrupts for this device.

   Example Discovery PCI Error Handler node:
     pci-error@1d40 {
	     compatible = "marvell,mv64360-pci-error";
	     reg = <0x1d40 0x40 0xc28 0x4>;
	     interrupts = <12>;
	     interrupt-parent = <&PIC>;
     };


   s) Marvell Discovery Memory Controller nodes

   Represent the Discovery's memory controller device.

   Required properties:
     - compatible : "marvell,mv64360-mem-ctrl"
     - reg : Offset and length of the register set for this device
     - interrupts : the interrupt number for this device
     - interrupt-parent : the phandle for the interrupt controller
       that services interrupts for this device.

   Example Discovery Memory Controller node:
     mem-ctrl@1400 {
	     compatible = "marvell,mv64360-mem-ctrl";
	     reg = <0x1400 0x60>;
	     interrupts = <17>;
	     interrupt-parent = <&PIC>;
     };


