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)
|
static int amd_iommu_add_device(struct device *dev)
|
||||||
{
|
{
|
||||||
|
struct iommu_dev_data *dev_data;
|
||||||
|
struct iommu_domain *domain;
|
||||||
struct amd_iommu *iommu;
|
struct amd_iommu *iommu;
|
||||||
u16 devid;
|
u16 devid;
|
||||||
int ret;
|
int ret;
|
||||||
@ -2270,7 +2272,18 @@ static int amd_iommu_add_device(struct device *dev)
|
|||||||
}
|
}
|
||||||
init_iommu_group(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:
|
out:
|
||||||
iommu_completion_wait(iommu);
|
iommu_completion_wait(iommu);
|
||||||
|
Loading…
Reference in New Issue
Block a user