iommu/fsl_pamu: replace DOMAIN_ATTR_FSL_PAMU_STASH with a direct call
Add a fsl_pamu_configure_l1_stash API that qman_portal can call directly instead of indirecting through the iommu attr API. 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-8-hch@lst.de Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
376dfd2a2f
commit
4eeb96f6ef
@ -7,6 +7,8 @@
|
||||
#ifndef __FSL_PAMU_STASH_H
|
||||
#define __FSL_PAMU_STASH_H
|
||||
|
||||
struct iommu_domain;
|
||||
|
||||
/* cache stash targets */
|
||||
enum pamu_stash_target {
|
||||
PAMU_ATTR_CACHE_L1 = 1,
|
||||
@ -14,14 +16,6 @@ enum pamu_stash_target {
|
||||
PAMU_ATTR_CACHE_L3,
|
||||
};
|
||||
|
||||
/*
|
||||
* This attribute allows configuring stashig specific parameters
|
||||
* in the PAMU hardware.
|
||||
*/
|
||||
|
||||
struct pamu_stash_attribute {
|
||||
u32 cpu; /* cpu number */
|
||||
u32 cache; /* cache to stash to: L1,L2,L3 */
|
||||
};
|
||||
int fsl_pamu_configure_l1_stash(struct iommu_domain *domain, u32 cpu);
|
||||
|
||||
#endif /* __FSL_PAMU_STASH_H */
|
||||
|
@ -372,27 +372,20 @@ static void fsl_pamu_detach_device(struct iommu_domain *domain,
|
||||
}
|
||||
|
||||
/* Set the domain stash attribute */
|
||||
static int configure_domain_stash(struct fsl_dma_domain *dma_domain, void *data)
|
||||
int fsl_pamu_configure_l1_stash(struct iommu_domain *domain, u32 cpu)
|
||||
{
|
||||
struct pamu_stash_attribute *stash_attr = data;
|
||||
struct fsl_dma_domain *dma_domain = to_fsl_dma_domain(domain);
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
spin_lock_irqsave(&dma_domain->domain_lock, flags);
|
||||
|
||||
memcpy(&dma_domain->dma_stash, stash_attr,
|
||||
sizeof(struct pamu_stash_attribute));
|
||||
|
||||
dma_domain->stash_id = get_stash_id(stash_attr->cache,
|
||||
stash_attr->cpu);
|
||||
dma_domain->stash_id = get_stash_id(PAMU_ATTR_CACHE_L1, cpu);
|
||||
if (dma_domain->stash_id == ~(u32)0) {
|
||||
pr_debug("Invalid stash attributes\n");
|
||||
spin_unlock_irqrestore(&dma_domain->domain_lock, flags);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = update_domain_stash(dma_domain, dma_domain->stash_id);
|
||||
|
||||
spin_unlock_irqrestore(&dma_domain->domain_lock, flags);
|
||||
|
||||
return ret;
|
||||
@ -426,9 +419,6 @@ static int fsl_pamu_set_domain_attr(struct iommu_domain *domain,
|
||||
int ret = 0;
|
||||
|
||||
switch (attr_type) {
|
||||
case DOMAIN_ATTR_FSL_PAMU_STASH:
|
||||
ret = configure_domain_stash(dma_domain, data);
|
||||
break;
|
||||
case DOMAIN_ATTR_FSL_PAMU_ENABLE:
|
||||
ret = configure_domain_dma_state(dma_domain, *(int *)data);
|
||||
break;
|
||||
|
@ -22,9 +22,7 @@ struct fsl_dma_domain {
|
||||
*
|
||||
*/
|
||||
int enabled;
|
||||
/* stash_id obtained from the stash attribute details */
|
||||
u32 stash_id;
|
||||
struct pamu_stash_attribute dma_stash;
|
||||
u32 snoop_id;
|
||||
struct iommu_domain iommu_domain;
|
||||
spinlock_t domain_lock;
|
||||
|
@ -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 pamu_stash_attribute stash_attr;
|
||||
int ret;
|
||||
|
||||
pcfg->iommu_domain = iommu_domain_alloc(&platform_bus_type);
|
||||
@ -55,13 +54,9 @@ static void portal_set_cpu(struct qm_portal_config *pcfg, int cpu)
|
||||
dev_err(dev, "%s(): iommu_domain_alloc() failed", __func__);
|
||||
goto no_iommu;
|
||||
}
|
||||
stash_attr.cpu = cpu;
|
||||
stash_attr.cache = PAMU_ATTR_CACHE_L1;
|
||||
ret = iommu_domain_set_attr(pcfg->iommu_domain,
|
||||
DOMAIN_ATTR_FSL_PAMU_STASH,
|
||||
&stash_attr);
|
||||
ret = fsl_pamu_configure_l1_stash(pcfg->iommu_domain, cpu);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "%s(): iommu_domain_set_attr() = %d",
|
||||
dev_err(dev, "%s(): fsl_pamu_configure_l1_stash() = %d",
|
||||
__func__, ret);
|
||||
goto out_domain_free;
|
||||
}
|
||||
@ -143,15 +138,8 @@ static void qman_portal_update_sdest(const struct qm_portal_config *pcfg,
|
||||
unsigned int cpu)
|
||||
{
|
||||
#ifdef CONFIG_FSL_PAMU /* TODO */
|
||||
struct pamu_stash_attribute stash_attr;
|
||||
int ret;
|
||||
|
||||
if (pcfg->iommu_domain) {
|
||||
stash_attr.cpu = cpu;
|
||||
stash_attr.cache = PAMU_ATTR_CACHE_L1;
|
||||
ret = iommu_domain_set_attr(pcfg->iommu_domain,
|
||||
DOMAIN_ATTR_FSL_PAMU_STASH, &stash_attr);
|
||||
if (ret < 0) {
|
||||
if (fsl_pamu_configure_l1_stash(pcfg->iommu_domain, cpu) < 0) {
|
||||
dev_err(pcfg->dev,
|
||||
"Failed to update pamu stash setting\n");
|
||||
return;
|
||||
|
@ -109,7 +109,6 @@ enum iommu_cap {
|
||||
enum iommu_attr {
|
||||
DOMAIN_ATTR_GEOMETRY,
|
||||
DOMAIN_ATTR_PAGING,
|
||||
DOMAIN_ATTR_FSL_PAMU_STASH,
|
||||
DOMAIN_ATTR_FSL_PAMU_ENABLE,
|
||||
DOMAIN_ATTR_NESTING, /* two stages of translation */
|
||||
DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE,
|
||||
|
Loading…
x
Reference in New Issue
Block a user