• Alexey Kardashevskiy's avatar
    powerpc/iommu: Add "borrowing" iommu_table_group_ops · 9d67c943
    Alexey Kardashevskiy authored
    PPC64 IOMMU API defines iommu_table_group_ops which handles DMA windows
    for PEs: control the ownership, create/set/unset a table the hardware
    for dynamic DMA windows (DDW). VFIO uses the API to implement support on
    POWER.
    
    So far only PowerNV IODA2 (POWER8 and newer machines) implemented this
    and other cases (POWER7 or nested KVM) did not and instead reused
    existing iommu_table structs. This means 1) no DDW 2) ownership transfer
    is done directly in the VFIO SPAPR TCE driver.
    
    Soon POWER is going to get its own iommu_ops and ownership control is
    going to move there. This implements spapr_tce_table_group_ops which
    borrows iommu_table tables. The upside is that VFIO needs to know less
    about POWER.
    
    The new ops returns the existing table from create_table() and only
    checks if the same window is already set. This is only going to work if
    the default DMA window starts table_group.tce32_start and as big as
    pe->table_group.tce32_size (not the case for IODA2+ PowerNV).
    
    This changes iommu_table_group_ops::take_ownership() to return an error
    if borrowing a table failed.
    
    This should not cause any visible change in behavior for PowerNV.
    pSeries was not that well tested/supported anyway.
    Signed-off-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
    Signed-off-by: default avatarTimothy Pearson <tpearson@raptorengineering.com>
    Acked-by: default avatarAlex Williamson <alex.williamson@redhat.com>
    [mpe: Fix CONFIG_IOMMU_API=n build (skiroot_defconfig), & formatting]
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/525438831.16998517.1678123820075.JavaMail.zimbra@raptorengineeringinc.com
    9d67c943
iommu.c 45.2 KB