• Alexey Kardashevskiy's avatar
    powerpc/powernv: Fix wrong IOMMU table in pnv_ioda_setup_bus_dma() · 5c89a87d
    Alexey Kardashevskiy authored
    When pnv_pci_ioda_fixup() is called during PHB fixup time, each PE in
    the sorted list of PEs (phb::pe_dma_list) is iterated to setup the PE's
    DMA32 space by pnv_ioda_setup_bus_dma() if the PE's DMA32 weight is bigger
    than zero. The function also assigns all the subordinate PCI devices of
    the PE's primary bus with the PE's DMA32 IOMMU table. It causes the PCI
    devicess in the child PEs, which don't have DMA weight, receives wrong
    IOMMU table and then IOMMU group.
    
    The patch fixes above issue by more check on the PE's coverage and don't
    assign IOMMU table to those PCI devices, which belong to the child PEs.
    The problem was found on Firestone platform initially.
    Suggested-by: default avatarGavin Shan <gwshan@linux.vnet.ibm.com>
    Signed-off-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    5c89a87d
pci-ioda.c 85.6 KB