Merge the two fuctions that configure the ppaace into a single coherent
function.  I somehow doubt we need the two pamu_config_ppaace calls,
but keep the existing behavior just to be on the safe side.

Signed-off-by: Christoph Hellwig <h...@lst.de>
Acked-by: Li Yang <leoyang...@nxp.com>
---
 drivers/iommu/fsl_pamu_domain.c | 65 +++++++++------------------------
 1 file changed, 17 insertions(+), 48 deletions(-)

diff --git a/drivers/iommu/fsl_pamu_domain.c b/drivers/iommu/fsl_pamu_domain.c
index 557a152c1d2c49..198725ef27954f 100644
--- a/drivers/iommu/fsl_pamu_domain.c
+++ b/drivers/iommu/fsl_pamu_domain.c
@@ -54,25 +54,6 @@ static int __init iommu_init_mempool(void)
        return 0;
 }
 
-/* Map the DMA window corresponding to the LIODN */
-static int map_liodn(int liodn, struct fsl_dma_domain *dma_domain)
-{
-       int ret;
-       struct iommu_domain_geometry *geom = &dma_domain->iommu_domain.geometry;
-       unsigned long flags;
-
-       spin_lock_irqsave(&iommu_lock, flags);
-       ret = pamu_config_ppaace(liodn, geom->aperture_start,
-                                geom->aperture_end + 1, ~(u32)0,
-                                0, dma_domain->snoop_id, dma_domain->stash_id,
-                                PAACE_AP_PERMS_QUERY | PAACE_AP_PERMS_UPDATE);
-       spin_unlock_irqrestore(&iommu_lock, flags);
-       if (ret)
-               pr_debug("PAACE configuration failed for liodn %d\n", liodn);
-
-       return ret;
-}
-
 static int update_liodn_stash(int liodn, struct fsl_dma_domain *dma_domain,
                              u32 val)
 {
@@ -94,11 +75,11 @@ static int update_liodn_stash(int liodn, struct 
fsl_dma_domain *dma_domain,
 }
 
 /* Set the geometry parameters for a LIODN */
-static int pamu_set_liodn(int liodn, struct device *dev,
-                         struct fsl_dma_domain *dma_domain,
-                         struct iommu_domain_geometry *geom_attr)
+static int pamu_set_liodn(struct fsl_dma_domain *dma_domain, struct device 
*dev,
+                         int liodn)
 {
-       phys_addr_t window_addr, window_size;
+       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;
@@ -110,22 +91,25 @@ static int pamu_set_liodn(int liodn, struct device *dev,
         */
        get_ome_index(&omi_index, dev);
 
-       window_addr = geom_attr->aperture_start;
-       window_size = geom_attr->aperture_end + 1;
-
        spin_lock_irqsave(&iommu_lock, flags);
        ret = pamu_disable_liodn(liodn);
-       if (!ret)
-               ret = pamu_config_ppaace(liodn, window_addr, window_size, 
omi_index,
-                                        0, dma_domain->snoop_id,
-                                        dma_domain->stash_id, 0);
+       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);
+       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,
+                                PAACE_AP_PERMS_QUERY | PAACE_AP_PERMS_UPDATE);
+out_unlock:
        spin_unlock_irqrestore(&iommu_lock, flags);
        if (ret) {
                pr_debug("PAACE configuration failed for liodn %d\n",
                         liodn);
-               return ret;
        }
-
        return ret;
 }
 
@@ -265,7 +249,6 @@ static int handle_attach_device(struct fsl_dma_domain 
*dma_domain,
                                int num)
 {
        unsigned long flags;
-       struct iommu_domain *domain = &dma_domain->iommu_domain;
        int ret = 0;
        int i;
 
@@ -280,21 +263,7 @@ static int handle_attach_device(struct fsl_dma_domain 
*dma_domain,
                }
 
                attach_device(dma_domain, liodn[i], dev);
-               /*
-                * Check if geometry has already been configured
-                * for the domain. If yes, set the geometry for
-                * the LIODN.
-                */
-               ret = pamu_set_liodn(liodn[i], dev, dma_domain,
-                                    &domain->geometry);
-               if (ret)
-                       break;
-
-               /*
-                * Create window/subwindow mapping for
-                * the LIODN.
-                */
-               ret = map_liodn(liodn[i], dma_domain);
+               ret = pamu_set_liodn(dma_domain, dev, liodn[i]);
                if (ret)
                        break;
        }
-- 
2.30.1

_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

Reply via email to