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