linux/arch/powerpc
Alexey Kardashevskiy c4e9d3c1e6 powerpc/powernv/pseries: Rework device adding to IOMMU groups
The powernv platform registers IOMMU groups and adds devices to them
from the pci_controller_ops::setup_bridge() hook except one case when
virtual functions (SRIOV VFs) are added from a bus notifier.

The pseries platform registers IOMMU groups from
the pci_controller_ops::dma_bus_setup() hook and adds devices from
the pci_controller_ops::dma_dev_setup() hook. The very same bus notifier
used for powernv does not add devices for pseries though as
__of_scan_bus() adds devices first, then it does the bus/dev DMA setup.

Both platforms use iommu_add_device() which takes a device and expects
it to have a valid IOMMU table struct with an iommu_table_group pointer
which in turn points the iommu_group struct (which represents
an IOMMU group). Although the helper seems easy to use, it relies on
some pre-existing device configuration and associated data structures
which it does not really need.

This simplifies iommu_add_device() to take the table_group pointer
directly. Pseries already has a table_group pointer handy and the bus
notified is not used anyway. For powernv, this copies the existing bus
notifier, makes it work for powernv only which means an easy way of
getting to the table_group pointer. This was tested on VFs but should
also support physical PCI hotplug.

Since iommu_add_device() receives the table_group pointer directly,
pseries does not do TCE cache invalidation (the hypervisor does) nor
allow multiple groups per a VFIO container (in other words sharing
an IOMMU table between partitionable endpoints), this removes
iommu_table_group_link from pseries.

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2018-12-21 16:20:46 +11:00
..
boot powerpc/44x/bamboo: Fix PCI range 2018-12-20 22:21:20 +11:00
configs powerpc/configs: Don't enable PPC_EARLY_DEBUG in defconfigs 2018-12-20 22:21:20 +11:00
crypto powerpc updates for 4.19 2018-08-17 11:32:50 -07:00
include powerpc/powernv/pseries: Rework device adding to IOMMU groups 2018-12-21 16:20:46 +11:00
kernel powerpc/powernv/pseries: Rework device adding to IOMMU groups 2018-12-21 16:20:46 +11:00
kvm powerpc/vfio/iommu/kvm: Do not pin device memory 2018-12-21 16:20:46 +11:00
lib powerpc/fsl: Add infrastructure to fixup branch predictor flush 2018-12-20 22:53:39 +11:00
math-emu License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
mm powerpc/vfio/iommu/kvm: Do not pin device memory 2018-12-21 16:20:46 +11:00
net powerpc updates for 4.19 2018-08-17 11:32:50 -07:00
oprofile powerpc: change CONFIG_6xx to CONFIG_PPC_BOOK3S_32 2018-11-26 22:33:37 +11:00
perf Powerpc/perf: Wire up PMI throttling 2018-12-21 11:32:49 +11:00
platforms powerpc/powernv/pseries: Rework device adding to IOMMU groups 2018-12-21 16:20:46 +11:00
purgatory powerpc updates for 4.19 2018-08-17 11:32:50 -07:00
sysdev powerpc/fsl-rio: fix spelling mistake "reserverd" -> "reserved" 2018-12-21 11:32:49 +11:00
tools powerpc/tools/checkpatch: Ignore DT_SPLIT_BINDING_PATCH 2018-12-04 19:45:01 +11:00
xmon powerpc/xmon: fix dump_segments() 2018-12-19 18:56:32 +11:00
Kbuild powerpc: Add -Werror at arch/powerpc level 2018-10-19 00:56:17 +11:00
Kconfig powerpc/8xx: Allow pinning IMMR TLB when using early debug console 2018-12-21 11:32:49 +11:00
Kconfig.debug powerpc: remove redundant 'default n' from Kconfig-s 2018-10-13 22:21:25 +11:00
Makefile powerpc: generate uapi header and system call table files 2018-12-21 14:46:50 +11:00
Makefile.postlink License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00