Merge tag 'char-misc-5.13-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregk...
[linux-2.6-microblaze.git] / drivers / iommu / fsl_pamu_domain.c
index 41927c3..a47f473 100644 (file)
@@ -57,14 +57,13 @@ static int __init iommu_init_mempool(void)
 static int update_liodn_stash(int liodn, struct fsl_dma_domain *dma_domain,
                              u32 val)
 {
-       int ret = 0, i;
+       int ret = 0;
        unsigned long flags;
 
        spin_lock_irqsave(&iommu_lock, flags);
        ret = pamu_update_paace_stash(liodn, val);
        if (ret) {
-               pr_debug("Failed to update SPAACE %d field for liodn %d\n ",
-                        i, liodn);
+               pr_debug("Failed to update SPAACE for liodn %d\n ", liodn);
                spin_unlock_irqrestore(&iommu_lock, flags);
                return ret;
        }
@@ -78,8 +77,6 @@ static int update_liodn_stash(int liodn, struct fsl_dma_domain *dma_domain,
 static int pamu_set_liodn(struct fsl_dma_domain *dma_domain, struct device *dev,
                          int liodn)
 {
-       struct iommu_domain *domain = &dma_domain->iommu_domain;
-       struct iommu_domain_geometry *geom = &domain->geometry;
        u32 omi_index = ~(u32)0;
        unsigned long flags;
        int ret;
@@ -95,14 +92,10 @@ static int pamu_set_liodn(struct fsl_dma_domain *dma_domain, struct device *dev,
        ret = pamu_disable_liodn(liodn);
        if (ret)
                goto out_unlock;
-       ret = pamu_config_ppaace(liodn, geom->aperture_start,
-                                geom->aperture_end + 1, omi_index, 0,
-                                dma_domain->snoop_id, dma_domain->stash_id, 0);
+       ret = pamu_config_ppaace(liodn, omi_index, dma_domain->stash_id, 0);
        if (ret)
                goto out_unlock;
-       ret = pamu_config_ppaace(liodn, geom->aperture_start,
-                                geom->aperture_end + 1, ~(u32)0,
-                                0, dma_domain->snoop_id, dma_domain->stash_id,
+       ret = pamu_config_ppaace(liodn, ~(u32)0, dma_domain->stash_id,
                                 PAACE_AP_PERMS_QUERY | PAACE_AP_PERMS_UPDATE);
 out_unlock:
        spin_unlock_irqrestore(&iommu_lock, flags);
@@ -195,9 +188,6 @@ static void fsl_pamu_domain_free(struct iommu_domain *domain)
 
        /* remove all the devices from the device list */
        detach_device(NULL, dma_domain);
-
-       dma_domain->enabled = 0;
-
        kmem_cache_free(fsl_pamu_domain_cache, dma_domain);
 }
 
@@ -213,7 +203,6 @@ static struct iommu_domain *fsl_pamu_domain_alloc(unsigned type)
                return NULL;
 
        dma_domain->stash_id = ~(u32)0;
-       dma_domain->snoop_id = ~(u32)0;
        INIT_LIST_HEAD(&dma_domain->devices);
        spin_lock_init(&dma_domain->domain_lock);
 
@@ -285,6 +274,9 @@ static int fsl_pamu_attach_device(struct iommu_domain *domain,
                ret = pamu_set_liodn(dma_domain, dev, liodn[i]);
                if (ret)
                        break;
+               ret = pamu_enable_liodn(liodn[i]);
+               if (ret)
+                       break;
        }
        spin_unlock_irqrestore(&dma_domain->domain_lock, flags);
        return ret;
@@ -341,46 +333,6 @@ int fsl_pamu_configure_l1_stash(struct iommu_domain *domain, u32 cpu)
        return ret;
 }
 
-/* Configure domain dma state i.e. enable/disable DMA */
-static int configure_domain_dma_state(struct fsl_dma_domain *dma_domain, bool enable)
-{
-       struct device_domain_info *info;
-       unsigned long flags;
-       int ret;
-
-       spin_lock_irqsave(&dma_domain->domain_lock, flags);
-       dma_domain->enabled = enable;
-       list_for_each_entry(info, &dma_domain->devices, link) {
-               ret = (enable) ? pamu_enable_liodn(info->liodn) :
-                       pamu_disable_liodn(info->liodn);
-               if (ret)
-                       pr_debug("Unable to set dma state for liodn %d",
-                                info->liodn);
-       }
-       spin_unlock_irqrestore(&dma_domain->domain_lock, flags);
-
-       return 0;
-}
-
-static int fsl_pamu_set_domain_attr(struct iommu_domain *domain,
-                                   enum iommu_attr attr_type, void *data)
-{
-       struct fsl_dma_domain *dma_domain = to_fsl_dma_domain(domain);
-       int ret = 0;
-
-       switch (attr_type) {
-       case DOMAIN_ATTR_FSL_PAMU_ENABLE:
-               ret = configure_domain_dma_state(dma_domain, *(int *)data);
-               break;
-       default:
-               pr_debug("Unsupported attribute type\n");
-               ret = -EINVAL;
-               break;
-       }
-
-       return ret;
-}
-
 static struct iommu_group *get_device_iommu_group(struct device *dev)
 {
        struct iommu_group *group;
@@ -505,7 +457,6 @@ static const struct iommu_ops fsl_pamu_ops = {
        .attach_dev     = fsl_pamu_attach_device,
        .detach_dev     = fsl_pamu_detach_device,
        .iova_to_phys   = fsl_pamu_iova_to_phys,
-       .domain_set_attr = fsl_pamu_set_domain_attr,
        .probe_device   = fsl_pamu_probe_device,
        .release_device = fsl_pamu_release_device,
        .device_group   = fsl_pamu_device_group,
@@ -523,9 +474,7 @@ int __init pamu_domain_init(void)
        if (ret)
                return ret;
 
-       iommu_device_set_ops(&pamu_iommu, &fsl_pamu_ops);
-
-       ret = iommu_device_register(&pamu_iommu);
+       ret = iommu_device_register(&pamu_iommu, &fsl_pamu_ops, NULL);
        if (ret) {
                iommu_device_sysfs_remove(&pamu_iommu);
                pr_err("Can't register iommu device\n");