2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2025-01-04 03:33:58 +08:00
linux-next/arch/powerpc/platforms
Alexey Kardashevskiy db08e1d530 powerpc/powernv/ioda2: Update iommu table base on ownership change
On POWERNV platform, in order to do DMA via IOMMU (i.e. 32bit DMA in
our case), a device needs an iommu_table pointer set via
set_iommu_table_base().

The codeflow is:
- pnv_pci_ioda2_setup_dma_pe()
	- pnv_pci_ioda2_setup_default_config()
	- pnv_ioda_setup_bus_dma() [1]

pnv_pci_ioda2_setup_dma_pe() creates IOMMU groups,
pnv_pci_ioda2_setup_default_config() does default DMA setup,
pnv_ioda_setup_bus_dma() takes a bus PE (on IODA2, all physical function
PEs as bus PEs except NPU), walks through all underlying buses and
devices, adds all devices to an IOMMU group and sets iommu_table.

On IODA2, when VFIO is used, it takes ownership over a PE which means it
removes all tables and creates new ones (with a possibility of sharing
them among PEs). So when the ownership is returned from VFIO to
the kernel, the iommu_table pointer written to a device at [1] is
stale and needs an update.

This adds an "add_to_group" parameter to pnv_ioda_setup_bus_dma()
(in fact re-adds as it used to be there a while ago for different
reasons) to tell the helper if a device needs to be added to
an IOMMU group with an iommu_table update or just the latter.

This calls pnv_ioda_setup_bus_dma(..., false) from
pnv_ioda2_release_ownership() so when the ownership is restored,
32bit DMA can work again for a device. This does the same thing
on obtaining ownership as the iommu_table point is stale at this point
anyway and it is safer to have NULL there.

We did not hit this earlier as all tested devices in recent years were
only using 64bit DMA; the rare exception for this is MPT3 SAS adapter
which uses both 32bit and 64bit DMA access and it has not been tested
with VFIO much.

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Acked-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2017-03-09 20:21:18 +11:00
..
8xx powerpc/8xx: Implement support of hugepages 2016-12-09 22:49:07 -06:00
40x powerpc updates for 4.10 2016-12-16 09:26:42 -08:00
44x powerpc updates for 4.10 2016-12-16 09:26:42 -08:00
52xx powerpc: Remove all usages of NO_IRQ 2016-09-20 20:57:12 +10:00
82xx powerpc/e8248e: Select PHYLIB only if NETDEVICES is enabled 2016-09-24 23:59:47 -05:00
83xx sched/headers: Prepare to move signal wakeup & sigpending methods from <linux/sched.h> into <linux/sched/signal.h> 2017-03-02 08:42:32 +01:00
85xx sched/headers: Prepare for new header dependencies before moving code to <linux/sched/hotplug.h> 2017-03-02 08:42:35 +01:00
86xx powerpc: Convert fsl_rstcr_restart to a reset handler 2016-09-25 02:38:50 -05:00
512x powerpc: Remove all usages of NO_IRQ 2016-09-20 20:57:12 +10:00
amigaone powerpc: Move 32-bit probe() machine to later in the boot process 2016-07-21 19:06:42 +10:00
cell sched/headers: Prepare to move signal wakeup & sigpending methods from <linux/sched.h> into <linux/sched/signal.h> 2017-03-02 08:42:32 +01:00
chrp Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
embedded6xx powerpc: Add support for relative exception tables 2016-11-14 11:11:51 +11:00
maple powerpc: Move isa bridge definitions to separate include 2017-01-31 13:54:17 +11:00
pasemi treewide: Move dma_ops from struct dev_archdata into struct device 2017-01-24 12:23:35 -05:00
powermac sched/headers: Prepare for new header dependencies before moving code to <linux/sched/hotplug.h> 2017-03-02 08:42:35 +01:00
powernv powerpc/powernv/ioda2: Update iommu table base on ownership change 2017-03-09 20:21:18 +11:00
ps3 treewide: Move dma_ops from struct dev_archdata into struct device 2017-01-24 12:23:35 -05:00
pseries sched/headers: Prepare for new header dependencies before moving code to <linux/sched/hotplug.h> 2017-03-02 08:42:35 +01:00
fsl_uli1575.c of/irq: Refactor interrupt-map parsing 2013-10-24 11:43:04 +01:00
Kconfig powerpc/pseries: Move ibmebus.c into platforms pseries 2016-11-18 23:02:18 +11:00
Kconfig.cputype powerpc/8xx: Perf events on PPC 8xx 2017-01-26 17:49:34 -06:00
Makefile powerpc: Remove platforms/wsp and associated pieces 2014-06-11 16:35:38 +10:00