=====================================================================
Freescale MPIC Interrupt Controller Node
Copyright (C) 2010,2011 Freescale Semiconductor Inc.
=====================================================================

The Freescale MPIC interrupt controller is found on all PowerQUICC
and QorIQ processors and is compatible with the Open PIC.  The
notable difference from Open PIC binding is the addition of 2
additional cells in the interrupt specifier defining interrupt type
information.

PROPERTIES

  - compatible
      Usage: required
      Value type: <string>
      Definition: Shall include "fsl,mpic".  Freescale MPIC
          controllers compatible with this binding have Block
          Revision Registers BRR1 and BRR2 at offset 0x0 and
          0x10 in the MPIC.

  - reg
      Usage: required
      Value type: <prop-encoded-array>
      Definition: A standard property.  Specifies the physical
          offset and length of the device's registers within the
          CCSR address space.

  - interrupt-controller
      Usage: required
      Value type: <empty>
      Definition: Specifies that this node is an interrupt
          controller

  - #interrupt-cells
      Usage: required
      Value type: <u32>
      Definition: Shall be 2 or 4.  A value of 2 means that interrupt
          specifiers do not contain the interrupt-type or type-specific
          information cells.

  - #address-cells
      Usage: required
      Value type: <u32>
      Definition: Shall be 0.

  - pic-no-reset
      Usage: optional
      Value type: <empty>
      Definition: The presence of this property specifies that the
          MPIC must not be reset by the client program, and that
          the boot program has initialized all interrupt source
          configuration registers to a sane state-- masked or
          directed at other cores.  This ensures that the client
          program will not receive interrupts for sources not belonging
          to the client.  The presence of this property also mandates
          that any initialization related to interrupt sources shall
          be limited to sources explicitly referenced in the device tree.

  - big-endian
      Usage: optional
      Value type: <empty>
          If present the MPIC will be assumed to be big-endian.  Some
          device-trees omit this property on MPIC nodes even when the MPIC is
          in fact big-endian, so certain boards override this property.

  - single-cpu-affinity
      Usage: optional
      Value type: <empty>
          If present the MPIC will be assumed to only be able to route
          non-IPI interrupts to a single CPU at a time (EG: Freescale MPIC).

  - last-interrupt-source
      Usage: optional
      Value type: <u32>
          Some MPICs do not correctly report the number of hardware sources
          in the global feature registers.  If specified, this field will
          override the value read from MPIC_GREG_FEATURE_LAST_SRC.

INTERRUPT SPECIFIER DEFINITION

  Interrupt specifiers consists of 4 cells encoded as
  follows:

   <1st-cell>   interrupt-number

                Identifies the interrupt source.  The meaning
                depends on the type of interrupt.

                Note: If the interrupt-type cell is undefined
                (i.e. #interrupt-cells = 2), this cell
                should be interpreted the same as for
                interrupt-type 0-- i.e. an external or
                normal SoC device interrupt.

   <2nd-cell>   level-sense information, encoded as follows:
                    0 = low-to-high edge triggered
                    1 = active low level-sensitive
                    2 = active high level-sensitive
                    3 = high-to-low edge triggered

   <3rd-cell>   interrupt-type

                The following types are supported:

                  0 = external or normal SoC device interrupt

                      The interrupt-number cell contains
                      the SoC device interrupt number.  The
                      type-specific cell is undefined.  The
                      interrupt-number is derived from the
                      MPIC a block of registers referred to as
                      the "Interrupt Source Configuration Registers".
                      Each source has 32-bytes of registers
                      (vector/priority and destination) in this
                      region.   So interrupt 0 is at offset 0x0,
                      interrupt 1 is at offset 0x20, and so on.

                  1 = error interrupt

                      The interrupt-number cell contains
                      the SoC device interrupt number for
                      the error interrupt.  The type-specific
                      cell identifies the specific error
                      interrupt number.

                  2 = MPIC inter-processor interrupt (IPI)

                      The interrupt-number cell identifies
                      the MPIC IPI number.  The type-specific
                      cell is undefined.

                  3 = MPIC timer interrupt

                      The interrupt-number cell identifies
                      the MPIC timer number.  The type-specific
                      cell is undefined.

   <4th-cell>   type-specific information

                The type-specific cell is encoded as follows:

                 - For interrupt-type 1 (error interrupt),
                   the type-specific cell contains the
                   bit number of the error interrupt in the
                   Error Interrupt Summary Register.

EXAMPLE 1
	/*
	 * mpic interrupt controller with 4 cells per specifier
	 */
	mpic: pic@40000 {
		compatible = "fsl,mpic";
		interrupt-controller;
		#interrupt-cells = <4>;
		#address-cells = <0>;
		reg = <0x40000 0x40000>;
	};

EXAMPLE 2
	/*
	 * The MPC8544 I2C controller node has an internal
	 * interrupt number of 27.  As per the reference manual
	 * this corresponds to interrupt source configuration
	 * registers at 0x5_0560.
	 *
	 * The interrupt source configuration registers begin
	 * at 0x5_0000.
	 *
	 * To compute the interrupt specifier interrupt number
         *
	 *       0x560 >> 5 = 43
	 *
	 * The interrupt source configuration registers begin
	 * at 0x5_0000, and so the i2c vector/priority registers
	 * are at 0x5_0560.
	 */
	i2c@3000 {
		#address-cells = <1>;
		#size-cells = <0>;
		cell-index = <0>;
		compatible = "fsl-i2c";
		reg = <0x3000 0x100>;
		interrupts = <43 2>;
		interrupt-parent = <&mpic>;
		dfsrr;
	};


EXAMPLE 3
	/*
	 *  Definition of a node defining the 4
	 *  MPIC IPI interrupts.  Note the interrupt
	 *  type of 2.
	 */
	ipi@410a0 {
		compatible = "fsl,mpic-ipi";
		reg = <0x40040 0x10>;
		interrupts = <0 0 2 0
		              1 0 2 0
		              2 0 2 0
		              3 0 2 0>;
	};

EXAMPLE 4
	/*
	 *  Definition of a node defining the MPIC
	 *  global timers.  Note the interrupt
	 *  type of 3.
	 */
	timer0: timer@41100 {
		compatible = "fsl,mpic-global-timer";
		reg = <0x41100 0x100 0x41300 4>;
		interrupts = <0 0 3 0
		              1 0 3 0
		              2 0 3 0
		              3 0 3 0>;
	};

EXAMPLE 5
	/*
	 * Definition of an error interrupt (interrupt type 1).
	 * SoC interrupt number is 16 and the specific error
         * interrupt bit in the error interrupt summary register
	 * is 23.
	 */
	memory-controller@8000 {
		compatible = "fsl,p4080-memory-controller";
		reg = <0x8000 0x1000>;
		interrupts = <16 2 1 23>;
	};
