Commit 52052875 authored by Stuart Yoder's avatar Stuart Yoder Committed by Kumar Gala

powerpc/fsl: define binding for fsl mpic interrupt controllers

Define the binding for compatible = "fsl,mpic", including the definition
of 4-cell interrupt specifiers.  The 3rd and 4th cells are needed to
define additional types of interrupt source outside the "normal" external
and internal interrupts in FSL SoCs.  Define error interrupt, IPIs, and
PIC timer sources.
Signed-off-by: default avatarStuart Yoder <stuart.yoder@freescale.com>
Signed-off-by: default avatarKumar Gala <galak@kernel.crashing.org>
parent 6820fead
* OpenPIC and its interrupt numbers on Freescale's e500/e600 cores =====================================================================
Freescale MPIC Interrupt Controller Node
The OpenPIC specification does not specify which interrupt source has to Copyright (C) 2010,2011 Freescale Semiconductor Inc.
become which interrupt number. This is up to the software implementation =====================================================================
of the interrupt controller. The only requirement is that every
interrupt source has to have an unique interrupt number / vector number. The Freescale MPIC interrupt controller is found on all PowerQUICC
To accomplish this the current implementation assigns the number zero to and QorIQ processors and is compatible with the Open PIC. The
the first source, the number one to the second source and so on until notable difference from Open PIC binding is the addition of 2
all interrupt sources have their unique number. additional cells in the interrupt specifier defining interrupt type
Usually the assigned vector number equals the interrupt number mentioned information.
in the documentation for a given core / CPU. This is however not true
for the e500 cores (MPC85XX CPUs) where the documentation distinguishes PROPERTIES
between internal and external interrupt sources and starts counting at
zero for both of them. - compatible
Usage: required
So what to write for external interrupt source X or internal interrupt Value type: <string>
source Y into the device tree? Here is an example: Definition: Shall include "fsl,mpic". Freescale MPIC
controllers compatible with this binding have Block
The memory map for the interrupt controller in the MPC8544[0] shows, Revision Registers BRR1 and BRR2 at offset 0x0 and
that the first interrupt source starts at 0x5_0000 (PIC Register Address 0x10 in the MPIC.
Map-Interrupt Source Configuration Registers). This source becomes the
number zero therefore: - reg
External interrupt 0 = interrupt number 0 Usage: required
External interrupt 1 = interrupt number 1 Value type: <prop-encoded-array>
External interrupt 2 = interrupt number 2 Definition: A standard property. Specifies the physical
... offset and length of the device's registers within the
Every interrupt number allocates 0x20 bytes register space. So to get CCSR address space.
its number it is sufficient to shift the lower 16bits to right by five.
So for the external interrupt 10 we have: - interrupt-controller
0x0140 >> 5 = 10 Usage: required
Value type: <empty>
After the external sources, the internal sources follow. The in core I2C Definition: Specifies that this node is an interrupt
controller on the MPC8544 for instance has the internal source number controller
27. Oo obtain its interrupt number we take the lower 16bits of its memory
address (0x5_0560) and shift it right: - #interrupt-cells
0x0560 >> 5 = 43 Usage: required
Value type: <u32>
Therefore the I2C device node for the MPC8544 CPU has to have the Definition: Shall be 2 or 4. A value of 2 means that interrupt
interrupt number 43 specified in the device tree. specifiers do not contain the interrupt-type or type-specific
information cells.
[0] MPC8544E PowerQUICCTM III, Integrated Host Processor Family Reference Manual
MPC8544ERM Rev. 1 10/2007 - #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.
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>;
interrupts = <0 0 3 0
1 0 3 0
2 0 3 0
3 0 3 0>;
};
EXAMPLE 5
/*
* Definition of an error interrupt (interupt 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>;
};
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment