• Timur Tabi's avatar
    powerpc/fsl_msi: add support for the fsl, msi property in PCI nodes · 895d603f
    Timur Tabi authored
    
    
    On Freescale parts with multiple MSI controllers, the controllers are
    combined into one "pool" of interrupts.  Whenever a device requests an MSI
    interrupt, the next available interrupt from the pool is selected,
    regardless of which MSI controller the interrupt is from.  This works
    because each PCI bus has an ATMU to all of CCSR, so any PCI device can
    access any MSI interrupt register.
    
    The fsl,msi property is used to specify that a given PCI bus should only
    use a specific MSI device.  This is necessary, for example, with the
    Freescale hypervisor, because the MSI devices are assigned to specific
    partitions.
    
    Ideally, we'd like to be able to assign MSI devices to PCI busses within
    the MSI or PCI layers.  However, there does not appear to be a mechanism
    to do that.  Whenever the MSI layer wants to allocate an MSI interrupt to
    a PCI device, it just calls arch_setup_msi_irqs().  It would be nice if we
    could register an MSI device with a specific PCI bus.
    
    So instead we remember the phandles of each MSI device, and we use that to
    limit our search for an available interrupt.  Whenever we are asked to
    allocate a new interrupt for a PCI device, we check the fsl,msi property
    of the PCI bus for that device.  If it exists, then as we are looping over
    all MSI devices, we skip the ones that don't have a matching phandle.
    Signed-off-by: default avatarTimur Tabi <timur@freescale.com>
    Signed-off-by: default avatarKumar Gala <galak@kernel.crashing.org>
    895d603f
fsl_msi.c 12.2 KB