• Jason Gunthorpe's avatar
    iommu: Require a default_domain for all iommu drivers · 98ac73f9
    Jason Gunthorpe authored
    At this point every iommu driver will cause a default_domain to be
    selected, so we can finally remove this gap from the core code.
    
    The following table explains what each driver supports and what the
    resulting default_domain will be:
    
                                            ops->defaut_domain
                        IDENTITY   DMA  PLATFORM    v      ARM32          dma-iommu  ARCH
    amd/iommu.c             Y       Y                       N/A             either
    apple-dart.c            Y       Y                       N/A             either
    arm-smmu.c              Y       Y                       IDENTITY        either
    qcom_iommu.c            G       Y                       IDENTITY        either
    arm-smmu-v3.c           Y       Y                       N/A             either
    exynos-iommu.c          G       Y                       IDENTITY        either
    fsl_pamu_domain.c                       Y       Y       N/A             N/A     PLATFORM
    intel/iommu.c           Y       Y                       N/A             either
    ipmmu-vmsa.c            G       Y                       IDENTITY        either
    msm_iommu.c             G                               IDENTITY        N/A
    mtk_iommu.c             G       Y                       IDENTITY        either
    mtk_iommu_v1.c          G                               IDENTITY        N/A
    omap-iommu.c            G                               IDENTITY        N/A
    rockchip-iommu.c        G       Y                       IDENTITY        either
    s390-iommu.c                            Y       Y       N/A             N/A     PLATFORM
    sprd-iommu.c                    Y                       N/A             DMA
    sun50i-iommu.c          G       Y                       IDENTITY        either
    tegra-smmu.c            G       Y                       IDENTITY        IDENTITY
    virtio-iommu.c          Y       Y                       N/A             either
    spapr                                   Y       Y       N/A             N/A     PLATFORM
     * G means ops->identity_domain is used
     * N/A means the driver will not compile in this configuration
    
    ARM32 drivers select an IDENTITY default domain through either the
    ops->identity_domain or directly requesting an IDENTIY domain through
    alloc_domain().
    
    In ARM64 mode tegra-smmu will still block the use of dma-iommu.c and
    forces an IDENTITY domain.
    
    S390 uses a PLATFORM domain to represent when the dma_ops are set to the
    s390 iommu code.
    
    fsl_pamu uses an PLATFORM domain.
    
    POWER SPAPR uses PLATFORM and blocking to enable its weird VFIO mode.
    
    The x86 drivers continue unchanged.
    
    After this patch group->default_domain is only NULL for a short period
    during bus iommu probing while all the groups are constituted. Otherwise
    it is always !NULL.
    
    This completes changing the iommu subsystem driver contract to a system
    where the current iommu_domain always represents some form of translation
    and the driver is continuously asserting a definable translation mode.
    
    It resolves the confusion that the original ops->detach_dev() caused
    around what translation, exactly, is the IOMMU performing after
    detach. There were at least three different answers to that question in
    the tree, they are all now clearly named with domain types.
    Tested-by: default avatarHeiko Stuebner <heiko@sntech.de>
    Tested-by: default avatarNiklas Schnelle <schnelle@linux.ibm.com>
    Tested-by: default avatarSteven Price <steven.price@arm.com>
    Tested-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
    Tested-by: default avatarNicolin Chen <nicolinc@nvidia.com>
    Reviewed-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
    Reviewed-by: default avatarJerry Snitselaar <jsnitsel@redhat.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    Link: https://lore.kernel.org/r/20-v8-81230027b2fa+9d-iommu_all_defdom_jgg@nvidia.comSigned-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    98ac73f9
iommu.c 92.1 KB