iommu/fsl_pamu: remove support for setting DOMAIN_ATTR_GEOMETRY
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 <hch@lst.de> Acked-by: Will Deacon <will@kernel.org> Acked-by: Li Yang <leoyang.li@nxp.com> Link: https://lore.kernel.org/r/20210401155256.298656-4-hch@lst.de Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
392825e0c7
commit
f7641bb71d
@ -62,7 +62,7 @@ static phys_addr_t get_phys_addr(struct fsl_dma_domain *dma_domain, dma_addr_t i
|
||||
|
||||
geom = &dma_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 = &dma_domain->win_arr[wnd];
|
||||
@ -234,7 +234,7 @@ static int pamu_set_liodn(int liodn, struct device *dev,
|
||||
get_ome_index(&omi_index, dev);
|
||||
|
||||
window_addr = geom_attr->aperture_start;
|
||||
window_size = dma_domain->geom_size;
|
||||
window_size = geom_attr->aperture_end + 1;
|
||||
|
||||
spin_lock_irqsave(&iommu_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(&domain->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(&dma_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(&dma_domain->domain_lock, flags);
|
||||
if (dma_domain->enabled) {
|
||||
pr_debug("Can't set geometry attributes as domain is active\n");
|
||||
spin_unlock_irqrestore(&dma_domain->domain_lock, flags);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
/* Copy the domain geometry information */
|
||||
memcpy(&domain->geometry, geom_attr,
|
||||
sizeof(struct iommu_domain_geometry));
|
||||
dma_domain->geom_size = geom_size;
|
||||
|
||||
spin_unlock_irqrestore(&dma_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(&dma_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 = configure_domain_geometry(domain, data);
|
||||
break;
|
||||
case DOMAIN_ATTR_FSL_PAMU_STASH:
|
||||
ret = configure_domain_stash(dma_domain, data);
|
||||
break;
|
||||
|
@ -17,12 +17,6 @@ struct dma_window {
|
||||
};
|
||||
|
||||
struct fsl_dma_domain {
|
||||
/*
|
||||
* Indicates the geometry size for the domain.
|
||||
* This would be set when the geometry is
|
||||
* configured for the domain.
|
||||
*/
|
||||
dma_addr_t geom_size;
|
||||
/*
|
||||
* Number of windows assocaited with this domain.
|
||||
* During domain initialization, it is set to the
|
||||
|
@ -47,7 +47,6 @@ static void portal_set_cpu(struct qm_portal_config *pcfg, int cpu)
|
||||
#ifdef CONFIG_FSL_PAMU
|
||||
struct device *dev = pcfg->dev;
|
||||
int window_count = 1;
|
||||
struct iommu_domain_geometry geom_attr;
|
||||
struct pamu_stash_attribute stash_attr;
|
||||
int ret;
|
||||
|
||||
@ -56,17 +55,6 @@ static void portal_set_cpu(struct qm_portal_config *pcfg, int cpu)
|
||||
dev_err(dev, "%s(): iommu_domain_alloc() failed", __func__);
|
||||
goto no_iommu;
|
||||
}
|
||||
geom_attr.aperture_start = 0;
|
||||
geom_attr.aperture_end =
|
||||
((dma_addr_t)1 << min(8 * sizeof(dma_addr_t), (size_t)36)) - 1;
|
||||
geom_attr.force_aperture = true;
|
||||
ret = iommu_domain_set_attr(pcfg->iommu_domain, DOMAIN_ATTR_GEOMETRY,
|
||||
&geom_attr);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "%s(): iommu_domain_set_attr() = %d", __func__,
|
||||
ret);
|
||||
goto out_domain_free;
|
||||
}
|
||||
ret = iommu_domain_set_attr(pcfg->iommu_domain, DOMAIN_ATTR_WINDOWS,
|
||||
&window_count);
|
||||
if (ret < 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user