Merge tag 'v3.3.7' into 3.3/master
[zen-stable.git] / Documentation / devicetree / bindings / powerpc / fsl / msi-pic.txt
blob5d586e1ccaf504d6a6834b38605f864fd168eb23
1 * Freescale MSI interrupt controller
3 Required properties:
4 - compatible : compatible list, contains 2 entries,
5   first is "fsl,CHIP-msi", where CHIP is the processor(mpc8610, mpc8572,
6   etc.) and the second is "fsl,mpic-msi" or "fsl,ipic-msi" depending on
7   the parent type.
9 - reg : should contain the address and the length of the shared message
10   interrupt register set.
12 - msi-available-ranges: use <start count> style section to define which
13   msi interrupt can be used in the 256 msi interrupts. This property is
14   optional, without this, all the 256 MSI interrupts can be used.
15   Each available range must begin and end on a multiple of 32 (i.e.
16   no splitting an individual MSI register or the associated PIC interrupt).
18 - interrupts : each one of the interrupts here is one entry per 32 MSIs,
19   and routed to the host interrupt controller. the interrupts should
20   be set as edge sensitive.  If msi-available-ranges is present, only
21   the interrupts that correspond to available ranges shall be present.
23 - interrupt-parent: the phandle for the interrupt controller
24   that services interrupts for this device. for 83xx cpu, the interrupts
25   are routed to IPIC, and for 85xx/86xx cpu the interrupts are routed
26   to MPIC.
28 Optional properties:
29 - msi-address-64: 64-bit PCI address of the MSIIR register. The MSIIR register
30   is used for MSI messaging.  The address of MSIIR in PCI address space is
31   the MSI message address.
33   This property may be used in virtualized environments where the hypervisor
34   has created an alternate mapping for the MSIR block.  See below for an
35   explanation.
38 Example:
39         msi@41600 {
40                 compatible = "fsl,mpc8610-msi", "fsl,mpic-msi";
41                 reg = <0x41600 0x80>;
42                 msi-available-ranges = <0 0x100>;
43                 interrupts = <
44                         0xe0 0
45                         0xe1 0
46                         0xe2 0
47                         0xe3 0
48                         0xe4 0
49                         0xe5 0
50                         0xe6 0
51                         0xe7 0>;
52                 interrupt-parent = <&mpic>;
53         };
55 The Freescale hypervisor and msi-address-64
56 -------------------------------------------
57 Normally, PCI devices have access to all of CCSR via an ATMU mapping.  The
58 Freescale MSI driver calculates the address of MSIIR (in the MSI register
59 block) and sets that address as the MSI message address.
61 In a virtualized environment, the hypervisor may need to create an IOMMU
62 mapping for MSIIR.  The Freescale ePAPR hypervisor has this requirement
63 because of hardware limitations of the Peripheral Access Management Unit
64 (PAMU), which is currently the only IOMMU that the hypervisor supports.
65 The ATMU is programmed with the guest physical address, and the PAMU
66 intercepts transactions and reroutes them to the true physical address.
68 In the PAMU, each PCI controller is given only one primary window.  The
69 PAMU restricts DMA operations so that they can only occur within a window.
70 Because PCI devices must be able to DMA to memory, the primary window must
71 be used to cover all of the guest's memory space.
73 PAMU primary windows can be divided into 256 subwindows, and each
74 subwindow can have its own address mapping ("guest physical" to "true
75 physical").  However, each subwindow has to have the same alignment, which
76 means they cannot be located at just any address.  Because of these
77 restrictions, it is usually impossible to create a 4KB subwindow that
78 covers MSIIR where it's normally located.
80 Therefore, the hypervisor has to create a subwindow inside the same
81 primary window used for memory, but mapped to the MSIR block (where MSIIR
82 lives).  The first subwindow after the end of guest memory is used for
83 this.  The address specified in the msi-address-64 property is the PCI
84 address of MSIIR.  The hypervisor configures the PAMU to map that address to
85 the true physical address of MSIIR.