iommu/amd: Put IOMMUv2 devices in a direct mapped domain
A device that might be used for HSA needs to be in a direct mapped domain so that all DMA-API mappings stay alive when the IOMMUv2 stack is used. Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
07f643a35d
commit
07ee86948c
|
@ -2253,6 +2253,8 @@ static void detach_device(struct device *dev)
|
|||
|
||||
static int amd_iommu_add_device(struct device *dev)
|
||||
{
|
||||
struct iommu_dev_data *dev_data;
|
||||
struct iommu_domain *domain;
|
||||
struct amd_iommu *iommu;
|
||||
u16 devid;
|
||||
int ret;
|
||||
|
@ -2270,7 +2272,18 @@ static int amd_iommu_add_device(struct device *dev)
|
|||
}
|
||||
init_iommu_group(dev);
|
||||
|
||||
dev->archdata.dma_ops = &amd_iommu_dma_ops;
|
||||
dev_data = get_dev_data(dev);
|
||||
if (dev_data && dev_data->iommu_v2)
|
||||
iommu_request_dm_for_dev(dev);
|
||||
|
||||
/* Domains are initialized for this device - have a look what we ended up with */
|
||||
domain = iommu_get_domain_for_dev(dev);
|
||||
if (domain->type == IOMMU_DOMAIN_IDENTITY) {
|
||||
dev_data->passthrough = true;
|
||||
dev->archdata.dma_ops = &nommu_dma_ops;
|
||||
} else {
|
||||
dev->archdata.dma_ops = &amd_iommu_dma_ops;
|
||||
}
|
||||
|
||||
out:
|
||||
iommu_completion_wait(iommu);
|
||||
|
|
Loading…
Reference in New Issue