{
int err;
int s1_bypass = 0, is_fast = 0;
+ struct iommu_group *group;
iommu_domain_get_attr(mapping->domain, DOMAIN_ATTR_FAST, &is_fast);
if (is_fast)
return fast_smmu_attach_device(dev, mapping);
- err = iommu_attach_device(mapping->domain, dev);
+ group = iommu_group_get(dev);
+ if (!group) {
+ dev_err(dev, "Couldn't get group\n");
+ return -ENODEV;
+ }
+
+ err = iommu_attach_group(mapping->domain, group);
if (err)
return err;
{
struct dma_iommu_mapping *mapping;
int is_fast;
+ struct iommu_group *group;
mapping = to_dma_iommu_mapping(dev);
if (!mapping) {
return;
}
- iommu_detach_device(mapping->domain, dev);
+ group = iommu_group_get(dev);
+ if (!group) {
+ dev_err(dev, "Couldn't get group\n");
+ return;
+ }
+
+ iommu_detach_group(mapping->domain, group);
kref_put(&mapping->kref, release_iommu_mapping);
dev->archdata.mapping = NULL;
set_dma_ops(dev, NULL);