linux/arch/powerpc/platforms/powernv
Alexey Kardashevskiy 46d3e1e162 vfio: powerpc/spapr: powerpc/powernv/ioda2: Use DMA windows API in ownership control
Before the IOMMU user (VFIO) would take control over the IOMMU table
belonging to a specific IOMMU group. This approach did not allow sharing
tables between IOMMU groups attached to the same container.

This introduces a new IOMMU ownership flavour when the user can not
just control the existing IOMMU table but remove/create tables on demand.
If an IOMMU implements take/release_ownership() callbacks, this lets
the user have full control over the IOMMU group. When the ownership
is taken, the platform code removes all the windows so the caller must
create them.
Before returning the ownership back to the platform code, VFIO
unprograms and removes all the tables it created.

This changes IODA2's onwership handler to remove the existing table
rather than manipulating with the existing one. From now on,
iommu_take_ownership() and iommu_release_ownership() are only called
from the vfio_iommu_spapr_tce driver.

Old-style ownership is still supported allowing VFIO to run on older
P5IOC2 and IODA IO controllers.

No change in userspace-visible behaviour is expected. Since it recreates
TCE tables on each ownership change, related kernel traces will appear
more often.

This adds a pnv_pci_ioda2_setup_default_config() which is called
when PE is being configured at boot time and when the ownership is
passed from VFIO to the platform code.

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
[aw: for the vfio related changes]
Acked-by: Alex Williamson <alex.williamson@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2015-06-11 15:16:54 +10:00
..
eeh-powernv.c powernv/eeh: Update the EEH code to use the opal irq domain 2015-05-22 15:14:38 +10:00
idle.c powerpc/powernv: Introduce sysfs control for fastsleep workaround behavior 2015-05-22 15:12:30 +10:00
Kconfig powerpc/powernv: Add opal-prd channel 2015-06-05 08:32:21 +10:00
Makefile powerpc/powernv: Add opal-prd channel 2015-06-05 08:32:21 +10:00
opal-async.c powerpc/powernv: Reorder OPAL subsystem initialisation 2015-05-22 15:14:37 +10:00
opal-dump.c powernv/opal-dump: Convert to irq domain 2015-05-22 15:14:38 +10:00
opal-elog.c powernv/elog: Convert elog to opal irq domain 2015-05-22 15:14:38 +10:00
opal-flash.c powerpc/powernv: Add interfaces for flash device access 2015-04-11 20:49:21 +10:00
opal-hmi.c powerpc/powernv: Reorder OPAL subsystem initialisation 2015-05-22 15:14:37 +10:00
opal-irqchip.c opal: Remove events notifier 2015-05-22 15:14:38 +10:00
opal-lpc.c powerpc/powernv: Properly fix LPC debugfs endianness 2014-10-31 17:09:04 +11:00
opal-memory-errors.c powerpc/powernv: Reorder OPAL subsystem initialisation 2015-05-22 15:14:37 +10:00
opal-msglog.c powerpc/powernv: Fix reading of OPAL msglog 2014-06-11 17:03:36 +10:00
opal-nvram.c powerpc/powernv: Add pstore support on powernv 2015-03-23 14:06:10 +11:00
opal-power.c powerpc/powernv: reboot when requested by firmware 2015-04-15 16:35:23 -07:00
opal-prd.c powerpc/powernv: Add opal-prd channel 2015-06-05 08:32:21 +10:00
opal-rtc.c rtc/tpo: Driver to support rtc and wakeup on PowerNV platform 2014-11-17 18:04:01 +11:00
opal-sensor.c powerpc/powernv: Reorder OPAL subsystem initialisation 2015-05-22 15:14:37 +10:00
opal-sysparam.c powerpc/powernv: convert OPAL codes returned by sysparam calls 2015-06-04 22:27:56 +10:00
opal-tracepoints.c powerpc: Replace __get_cpu_var uses 2014-11-03 12:12:32 +11:00
opal-wrappers.S powerpc/powernv: Add opal-prd channel 2015-06-05 08:32:21 +10:00
opal-xscom.c powerpc/powernv: Switch powernv drivers to use machine_xxx_initcall() 2014-07-28 14:11:26 +10:00
opal.c powerpc/powernv: Add opal-prd channel 2015-06-05 08:32:21 +10:00
pci-ioda.c vfio: powerpc/spapr: powerpc/powernv/ioda2: Use DMA windows API in ownership control 2015-06-11 15:16:54 +10:00
pci-p5ioc2.c vfio: powerpc/spapr: powerpc/powernv/ioda: Define and implement DMA windows API 2015-06-11 15:16:52 +10:00
pci.c powerpc/powernv: Implement multilevel TCE tables 2015-06-11 15:16:51 +10:00
pci.h powerpc/iommu/powernv: Release replaced TCE 2015-06-11 15:16:49 +10:00
powernv.h powerpc/powernv: Move dma_set_mask() from pnv_phb to pci_controller_ops 2015-06-02 13:18:49 +10:00
rng.c KVM: PPC: Book3S HV: Add fast real-mode H_RANDOM implementation. 2015-04-21 15:21:29 +02:00
setup.c powerpc/powernv: Move dma_set_mask() from pnv_phb to pci_controller_ops 2015-06-02 13:18:49 +10:00
smp.c powerpc updates for 4.1 2015-04-16 13:53:32 -05:00
subcore-asm.S powerpc/powernv: Add support for POWER8 split core on powernv 2014-05-28 13:35:37 +10:00
subcore.c powernv/powerpc: Add winkle support for offline cpus 2014-12-15 10:46:41 +11:00
subcore.h powernv/powerpc: Add winkle support for offline cpus 2014-12-15 10:46:41 +11:00