• Jason Gunthorpe's avatar
    iommu/fsl: Use driver_managed_dma to allow VFIO to work · 139a57a9
    Jason Gunthorpe authored
    The FSL driver is mangling the iommu_groups to not have a group for its
    PCI bridge/controller (eg the thing passed to fsl_add_bridge()). Robin
    says this is so FSL could work with VFIO which would be blocked by having
    a probed driver on the platform_device in the same group. This is
    supported by comments from FSL:
    
     https://lore.kernel.org/all/C5ECD7A89D1DC44195F34B25E172658D459471@039-SN2MPN1-013.039d.mgd.msft.net
    
     ..  PCIe devices share the same device group as the PCI controller. This
      becomes a problem while assigning the devices to the guest, as you are
      required to unbind all the PCIe devices including the controller from the
      host. PCIe controller can't be unbound from the host, so we simply delete
      the controller iommu_group.
    
    However, today, we use driver_managed_dma to allow PCI infrastructure
    devices that are 'security safe' to co-exist in groups and still allow
    VFIO to work. Set this flag for the fsl_pci_driver.
    
    Change fsl_pamu_device_group() so that it no longer removes the controller
    from any groups. For check_pci_ctl_endpt_part() mode this creates an extra
    group that contains only the controller.
    
    Otherwise force the controller's single group to be the group of all the
    PCI devices on the controller's hose. VFIO continues to work because of
    driver_managed_dma.
    
    Remove the iommu_group_remove_device() calls from fsl_pamu and lightly
    restructure its fsl_pamu_device_group() function.
    Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    Tested-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/3-v2-ce71068deeec+4cf6-fsl_rm_groups_jgg@nvidia.comSigned-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    139a57a9
fsl_pci.c 34 KB