===================================================================== 
 | 
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>; 
 | 
    }; 
 |