Lines Matching refs:dma_domain
58 static int update_liodn_stash(int liodn, struct fsl_dma_domain *dma_domain,
78 static int pamu_set_liodn(struct fsl_dma_domain *dma_domain, struct device *dev,
96 ret = pamu_config_ppaace(liodn, omi_index, dma_domain->stash_id, 0);
99 ret = pamu_config_ppaace(liodn, ~(u32)0, dma_domain->stash_id,
124 static void detach_device(struct device *dev, struct fsl_dma_domain *dma_domain)
129 spin_lock_irqsave(&dma_domain->domain_lock, flags);
131 list_for_each_entry_safe(info, tmp, &dma_domain->devices, link) {
135 spin_unlock_irqrestore(&dma_domain->domain_lock, flags);
138 static void attach_device(struct fsl_dma_domain *dma_domain, int liodn, struct device *dev)
149 if (old_domain_info && old_domain_info->domain != dma_domain) {
159 info->domain = dma_domain;
161 list_add(&info->link, &dma_domain->devices);
188 struct fsl_dma_domain *dma_domain = to_fsl_dma_domain(domain);
191 detach_device(NULL, dma_domain);
192 kmem_cache_free(fsl_pamu_domain_cache, dma_domain);
197 struct fsl_dma_domain *dma_domain;
202 dma_domain = kmem_cache_zalloc(fsl_pamu_domain_cache, GFP_KERNEL);
203 if (!dma_domain)
206 dma_domain->stash_id = ~(u32)0;
207 INIT_LIST_HEAD(&dma_domain->devices);
208 spin_lock_init(&dma_domain->domain_lock);
211 dma_domain->iommu_domain. geometry.aperture_start = 0;
212 dma_domain->iommu_domain.geometry.aperture_end = (1ULL << 36) - 1;
213 dma_domain->iommu_domain.geometry.force_aperture = true;
215 return &dma_domain->iommu_domain;
219 static int update_domain_stash(struct fsl_dma_domain *dma_domain, u32 val)
224 list_for_each_entry(info, &dma_domain->devices, link) {
225 ret = update_liodn_stash(info->liodn, dma_domain, val);
236 struct fsl_dma_domain *dma_domain = to_fsl_dma_domain(domain);
264 spin_lock_irqsave(&dma_domain->domain_lock, flags);
274 attach_device(dma_domain, liodn[i], dev);
275 ret = pamu_set_liodn(dma_domain, dev, liodn[i]);
282 spin_unlock_irqrestore(&dma_domain->domain_lock, flags);
289 struct fsl_dma_domain *dma_domain = to_fsl_dma_domain(domain);
312 detach_device(dev, dma_domain);
320 struct fsl_dma_domain *dma_domain = to_fsl_dma_domain(domain);
324 spin_lock_irqsave(&dma_domain->domain_lock, flags);
325 dma_domain->stash_id = get_stash_id(PAMU_ATTR_CACHE_L1, cpu);
326 if (dma_domain->stash_id == ~(u32)0) {
328 spin_unlock_irqrestore(&dma_domain->domain_lock, flags);
331 ret = update_domain_stash(dma_domain, dma_domain->stash_id);
332 spin_unlock_irqrestore(&dma_domain->domain_lock, flags);