powerpc/powernv: Fix wrong IOMMU table in pnv_ioda_setup_bus_dma()
authorAlexey Kardashevskiy <aik@ozlabs.ru>
Thu, 18 Jun 2015 01:41:36 +0000 (11:41 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 19 Jun 2015 07:10:29 +0000 (17:10 +1000)
commit5c89a87d13d168eacb8110810544a98ce0f4319d
tree97db57398da3773c5998aebd0605e31c0cc5cca5
parente148315852855f8f06b8bb4601c8cade34af8df3
powerpc/powernv: Fix wrong IOMMU table in pnv_ioda_setup_bus_dma()

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: Gavin Shan <gwshan@linux.vnet.ibm.com>
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/platforms/powernv/pci-ioda.c