123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- * Freescale MSI interrupt controller
- Required properties:
- - compatible : compatible list, may contain one or two entries
- The first is "fsl,CHIP-msi", where CHIP is the processor(mpc8610, mpc8572,
- etc.) and the second is "fsl,mpic-msi" or "fsl,ipic-msi" or
- "fsl,mpic-msi-v4.3" depending on the parent type and version. If mpic
- version is 4.3, the number of MSI registers is increased to 16, MSIIR1 is
- provided to access these 16 registers, and compatible "fsl,mpic-msi-v4.3"
- should be used. The first entry is optional; the second entry is
- required.
- - reg : It may contain one or two regions. The first region should contain
- the address and the length of the shared message interrupt register set.
- The second region should contain the address of aliased MSIIR or MSIIR1
- register for platforms that have such an alias, if using MSIIR1, the second
- region must be added because different MSI group has different MSIIR1 offset.
- - interrupts : each one of the interrupts here is one entry per 32 MSIs,
- and routed to the host interrupt controller. the interrupts should
- be set as edge sensitive. If msi-available-ranges is present, only
- the interrupts that correspond to available ranges shall be present.
- - interrupt-parent: the phandle for the interrupt controller
- that services interrupts for this device. for 83xx cpu, the interrupts
- are routed to IPIC, and for 85xx/86xx cpu the interrupts are routed
- to MPIC.
- Optional properties:
- - msi-available-ranges: use <start count> style section to define which
- msi interrupt can be used in the 256 msi interrupts. This property is
- optional, without this, all the MSI interrupts can be used.
- Each available range must begin and end on a multiple of 32 (i.e.
- no splitting an individual MSI register or the associated PIC interrupt).
- MPIC v4.3 does not support this property because the 32 interrupts of an
- individual register are not continuous when using MSIIR1.
- - msi-address-64: 64-bit PCI address of the MSIIR register. The MSIIR register
- is used for MSI messaging. The address of MSIIR in PCI address space is
- the MSI message address.
- This property may be used in virtualized environments where the hypervisor
- has created an alternate mapping for the MSIR block. See below for an
- explanation.
- Example:
- msi@41600 {
- compatible = "fsl,mpc8610-msi", "fsl,mpic-msi";
- reg = <0x41600 0x80>;
- msi-available-ranges = <0 0x100>;
- interrupts = <
- 0xe0 0
- 0xe1 0
- 0xe2 0
- 0xe3 0
- 0xe4 0
- 0xe5 0
- 0xe6 0
- 0xe7 0>;
- interrupt-parent = <&mpic>;
- };
- msi@41600 {
- compatible = "fsl,mpic-msi-v4.3";
- reg = <0x41600 0x200 0x44148 4>;
- interrupts = <
- 0xe0 0 0 0
- 0xe1 0 0 0
- 0xe2 0 0 0
- 0xe3 0 0 0
- 0xe4 0 0 0
- 0xe5 0 0 0
- 0xe6 0 0 0
- 0xe7 0 0 0
- 0x100 0 0 0
- 0x101 0 0 0
- 0x102 0 0 0
- 0x103 0 0 0
- 0x104 0 0 0
- 0x105 0 0 0
- 0x106 0 0 0
- 0x107 0 0 0>;
- };
- The Freescale hypervisor and msi-address-64
- -------------------------------------------
- Normally, PCI devices have access to all of CCSR via an ATMU mapping. The
- Freescale MSI driver calculates the address of MSIIR (in the MSI register
- block) and sets that address as the MSI message address.
- In a virtualized environment, the hypervisor may need to create an IOMMU
- mapping for MSIIR. The Freescale ePAPR hypervisor has this requirement
- because of hardware limitations of the Peripheral Access Management Unit
- (PAMU), which is currently the only IOMMU that the hypervisor supports.
- The ATMU is programmed with the guest physical address, and the PAMU
- intercepts transactions and reroutes them to the true physical address.
- In the PAMU, each PCI controller is given only one primary window. The
- PAMU restricts DMA operations so that they can only occur within a window.
- Because PCI devices must be able to DMA to memory, the primary window must
- be used to cover all of the guest's memory space.
- PAMU primary windows can be divided into 256 subwindows, and each
- subwindow can have its own address mapping ("guest physical" to "true
- physical"). However, each subwindow has to have the same alignment, which
- means they cannot be located at just any address. Because of these
- restrictions, it is usually impossible to create a 4KB subwindow that
- covers MSIIR where it's normally located.
- Therefore, the hypervisor has to create a subwindow inside the same
- primary window used for memory, but mapped to the MSIR block (where MSIIR
- lives). The first subwindow after the end of guest memory is used for
- this. The address specified in the msi-address-64 property is the PCI
- address of MSIIR. The hypervisor configures the PAMU to map that address to
- the true physical address of MSIIR.
|