Re: [PATCH 03/18] iommu/fsl_pamu: remove support for setting DOMAIN_ATTR_GEOMETRY

2021-03-30 Thread Will Deacon
On Tue, Mar 16, 2021 at 04:38:09PM +0100, Christoph Hellwig wrote:
> The default geometry is the same as the one set by qman_port given
> that FSL_PAMU depends on having 64-bit physical and thus DMA addresses.
> 
> Remove the support to update the geometry and remove the now pointless
> geom_size field.
> 
> Signed-off-by: Christoph Hellwig 
> Acked-by: Li Yang 
> ---
>  drivers/iommu/fsl_pamu_domain.c | 55 +++--
>  drivers/iommu/fsl_pamu_domain.h |  6 
>  drivers/soc/fsl/qbman/qman_portal.c | 12 ---
>  3 files changed, 5 insertions(+), 68 deletions(-)

Took me a minute to track down the other magic '36' which ends up in
aperture_end, but I found it eventually so:

Acked-by: Will Deacon 

(It does make me wonder what all this glue was intended to be used for)

Will
___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu


[PATCH 03/18] iommu/fsl_pamu: remove support for setting DOMAIN_ATTR_GEOMETRY

2021-03-16 Thread Christoph Hellwig
The default geometry is the same as the one set by qman_port given
that FSL_PAMU depends on having 64-bit physical and thus DMA addresses.

Remove the support to update the geometry and remove the now pointless
geom_size field.

Signed-off-by: Christoph Hellwig 
Acked-by: Li Yang 
---
 drivers/iommu/fsl_pamu_domain.c | 55 +++--
 drivers/iommu/fsl_pamu_domain.h |  6 
 drivers/soc/fsl/qbman/qman_portal.c | 12 ---
 3 files changed, 5 insertions(+), 68 deletions(-)

diff --git a/drivers/iommu/fsl_pamu_domain.c b/drivers/iommu/fsl_pamu_domain.c
index e587ec43f7e750..7bd08ddad07779 100644
--- a/drivers/iommu/fsl_pamu_domain.c
+++ b/drivers/iommu/fsl_pamu_domain.c
@@ -62,7 +62,7 @@ static phys_addr_t get_phys_addr(struct fsl_dma_domain 
*dma_domain, dma_addr_t i
 
geom = _domain->iommu_domain.geometry;
 
-   if (!win_cnt || !dma_domain->geom_size) {
+   if (!win_cnt) {
pr_debug("Number of windows/geometry not configured for the 
domain\n");
return 0;
}
@@ -72,7 +72,7 @@ static phys_addr_t get_phys_addr(struct fsl_dma_domain 
*dma_domain, dma_addr_t i
dma_addr_t subwin_iova;
u32 wnd;
 
-   subwin_size = dma_domain->geom_size >> ilog2(win_cnt);
+   subwin_size = (geom->aperture_end + 1) >> ilog2(win_cnt);
subwin_iova = iova & ~(subwin_size - 1);
wnd = (subwin_iova - geom->aperture_start) >> 
ilog2(subwin_size);
win_ptr = _domain->win_arr[wnd];
@@ -234,7 +234,7 @@ static int pamu_set_liodn(int liodn, struct device *dev,
get_ome_index(_index, dev);
 
window_addr = geom_attr->aperture_start;
-   window_size = dma_domain->geom_size;
+   window_size = geom_attr->aperture_end + 1;
 
spin_lock_irqsave(_lock, flags);
ret = pamu_disable_liodn(liodn);
@@ -303,7 +303,6 @@ static struct fsl_dma_domain *iommu_alloc_dma_domain(void)
domain->stash_id = ~(u32)0;
domain->snoop_id = ~(u32)0;
domain->win_cnt = pamu_get_max_subwin_cnt();
-   domain->geom_size = 0;
 
INIT_LIST_HEAD(>devices);
 
@@ -502,7 +501,8 @@ static int fsl_pamu_window_enable(struct iommu_domain 
*domain, u32 wnd_nr,
return -EINVAL;
}
 
-   win_size = dma_domain->geom_size >> ilog2(dma_domain->win_cnt);
+   win_size = (domain->geometry.aperture_end + 1) >>
+   ilog2(dma_domain->win_cnt);
if (size > win_size) {
pr_debug("Invalid window size\n");
spin_unlock_irqrestore(_domain->domain_lock, flags);
@@ -665,41 +665,6 @@ static void fsl_pamu_detach_device(struct iommu_domain 
*domain,
pr_debug("missing fsl,liodn property at %pOF\n", dev->of_node);
 }
 
-static  int configure_domain_geometry(struct iommu_domain *domain, void *data)
-{
-   struct iommu_domain_geometry *geom_attr = data;
-   struct fsl_dma_domain *dma_domain = to_fsl_dma_domain(domain);
-   dma_addr_t geom_size;
-   unsigned long flags;
-
-   geom_size = geom_attr->aperture_end - geom_attr->aperture_start + 1;
-   /*
-* Sanity check the geometry size. Also, we do not support
-* DMA outside of the geometry.
-*/
-   if (check_size(geom_size, geom_attr->aperture_start) ||
-   !geom_attr->force_aperture) {
-   pr_debug("Invalid PAMU geometry attributes\n");
-   return -EINVAL;
-   }
-
-   spin_lock_irqsave(_domain->domain_lock, flags);
-   if (dma_domain->enabled) {
-   pr_debug("Can't set geometry attributes as domain is active\n");
-   spin_unlock_irqrestore(_domain->domain_lock, flags);
-   return  -EBUSY;
-   }
-
-   /* Copy the domain geometry information */
-   memcpy(>geometry, geom_attr,
-  sizeof(struct iommu_domain_geometry));
-   dma_domain->geom_size = geom_size;
-
-   spin_unlock_irqrestore(_domain->domain_lock, flags);
-
-   return 0;
-}
-
 /* Set the domain stash attribute */
 static int configure_domain_stash(struct fsl_dma_domain *dma_domain, void 
*data)
 {
@@ -769,13 +734,6 @@ static int fsl_pamu_set_windows(struct iommu_domain 
*domain, u32 w_count)
return  -EBUSY;
}
 
-   /* Ensure that the geometry has been set for the domain */
-   if (!dma_domain->geom_size) {
-   pr_debug("Please configure geometry before setting the number 
of windows\n");
-   spin_unlock_irqrestore(_domain->domain_lock, flags);
-   return -EINVAL;
-   }
-
/*
 * Ensure we have valid window count i.e. it should be less than
 * maximum permissible limit and should be a power of two.
@@ -811,9 +769,6 @@ static int fsl_pamu_set_domain_attr(struct iommu_domain 
*domain,
int ret = 0;
 
switch (attr_type) {
-   case DOMAIN_ATTR_GEOMETRY:
-   ret =