aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/devicetree/bindings/powerpc/fsl/msi-pic.txt
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/devicetree/bindings/powerpc/fsl/msi-pic.txt')
-rw-r--r--Documentation/devicetree/bindings/powerpc/fsl/msi-pic.txt42
1 files changed, 42 insertions, 0 deletions
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/msi-pic.txt b/Documentation/devicetree/bindings/powerpc/fsl/msi-pic.txt
index 70558c3f3682..5d586e1ccaf5 100644
--- a/Documentation/devicetree/bindings/powerpc/fsl/msi-pic.txt
+++ b/Documentation/devicetree/bindings/powerpc/fsl/msi-pic.txt
@@ -25,6 +25,16 @@ Required properties:
25 are routed to IPIC, and for 85xx/86xx cpu the interrupts are routed 25 are routed to IPIC, and for 85xx/86xx cpu the interrupts are routed
26 to MPIC. 26 to MPIC.
27 27
28Optional 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.
32
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.
36
37
28Example: 38Example:
29 msi@41600 { 39 msi@41600 {
30 compatible = "fsl,mpc8610-msi", "fsl,mpic-msi"; 40 compatible = "fsl,mpc8610-msi", "fsl,mpic-msi";
@@ -41,3 +51,35 @@ Example:
41 0xe7 0>; 51 0xe7 0>;
42 interrupt-parent = <&mpic>; 52 interrupt-parent = <&mpic>;
43 }; 53 };
54
55The Freescale hypervisor and msi-address-64
56-------------------------------------------
57Normally, PCI devices have access to all of CCSR via an ATMU mapping. The
58Freescale MSI driver calculates the address of MSIIR (in the MSI register
59block) and sets that address as the MSI message address.
60
61In a virtualized environment, the hypervisor may need to create an IOMMU
62mapping for MSIIR. The Freescale ePAPR hypervisor has this requirement
63because of hardware limitations of the Peripheral Access Management Unit
64(PAMU), which is currently the only IOMMU that the hypervisor supports.
65The ATMU is programmed with the guest physical address, and the PAMU
66intercepts transactions and reroutes them to the true physical address.
67
68In the PAMU, each PCI controller is given only one primary window. The
69PAMU restricts DMA operations so that they can only occur within a window.
70Because PCI devices must be able to DMA to memory, the primary window must
71be used to cover all of the guest's memory space.
72
73PAMU primary windows can be divided into 256 subwindows, and each
74subwindow can have its own address mapping ("guest physical" to "true
75physical"). However, each subwindow has to have the same alignment, which
76means they cannot be located at just any address. Because of these
77restrictions, it is usually impossible to create a 4KB subwindow that
78covers MSIIR where it's normally located.
79
80Therefore, the hypervisor has to create a subwindow inside the same
81primary window used for memory, but mapped to the MSIR block (where MSIIR
82lives). The first subwindow after the end of guest memory is used for
83this. The address specified in the msi-address-64 property is the PCI
84address of MSIIR. The hypervisor configures the PAMU to map that address to
85the true physical address of MSIIR.