Lines Matching refs:mmu

113 			       struct panfrost_mmu *mmu,
119 ret = mmu_hw_do_operation_locked(pfdev, mmu->as, iova, size, op);
124 static void panfrost_mmu_enable(struct panfrost_device *pfdev, struct panfrost_mmu *mmu)
126 int as_nr = mmu->as;
127 struct io_pgtable_cfg *cfg = &mmu->pgtbl_cfg;
158 u32 panfrost_mmu_as_get(struct panfrost_device *pfdev, struct panfrost_mmu *mmu)
164 as = mmu->as;
166 int en = atomic_inc_return(&mmu->as_count);
175 list_move(&mmu->list, &pfdev->as_lru_list);
185 panfrost_mmu_enable(pfdev, mmu);
210 mmu->as = as;
212 atomic_set(&mmu->as_count, 1);
213 list_add(&mmu->list, &pfdev->as_lru_list);
215 dev_dbg(pfdev->dev, "Assigned AS%d to mmu %p, alloc_mask=%lx", as, mmu, pfdev->as_alloc_mask);
217 panfrost_mmu_enable(pfdev, mmu);
224 void panfrost_mmu_as_put(struct panfrost_device *pfdev, struct panfrost_mmu *mmu)
226 atomic_dec(&mmu->as_count);
227 WARN_ON(atomic_read(&mmu->as_count) < 0);
232 struct panfrost_mmu *mmu, *mmu_tmp;
239 list_for_each_entry_safe(mmu, mmu_tmp, &pfdev->as_lru_list, list) {
240 mmu->as = -1;
241 atomic_set(&mmu->as_count, 0);
242 list_del_init(&mmu->list);
273 struct panfrost_mmu *mmu,
276 if (mmu->as < 0)
283 mmu_hw_do_operation(pfdev, mmu, iova, size, AS_COMMAND_FLUSH_PT);
288 static int mmu_map_sg(struct panfrost_device *pfdev, struct panfrost_mmu *mmu,
293 struct io_pgtable_ops *ops = mmu->pgtbl_ops;
300 dev_dbg(pfdev->dev, "map: as=%d, iova=%llx, paddr=%lx, len=%zx", mmu->as, iova, paddr, len);
316 panfrost_mmu_flush_range(pfdev, mmu, start_iova, iova - start_iova);
340 mmu_map_sg(pfdev, mapping->mmu, mapping->mmnode.start << PAGE_SHIFT,
352 struct io_pgtable_ops *ops = mapping->mmu->pgtbl_ops;
361 mapping->mmu->as, iova, len);
377 panfrost_mmu_flush_range(pfdev, mapping->mmu,
387 //struct panfrost_mmu *mmu = cookie;
408 struct panfrost_mmu *mmu;
411 list_for_each_entry(mmu, &pfdev->as_lru_list, list) {
412 if (as == mmu->as)
419 spin_lock(&mmu->mm_lock);
421 drm_mm_for_each_node(node, &mmu->mm) {
431 spin_unlock(&mmu->mm_lock);
462 WARN_ON(bomapping->mmu->as != as);
521 mmu_map_sg(pfdev, bomapping->mmu, addr,
548 struct panfrost_mmu *mmu = container_of(kref, struct panfrost_mmu,
550 struct panfrost_device *pfdev = mmu->pfdev;
553 if (mmu->as >= 0) {
556 panfrost_mmu_disable(pfdev, mmu->as);
559 clear_bit(mmu->as, &pfdev->as_alloc_mask);
560 clear_bit(mmu->as, &pfdev->as_in_use_mask);
561 list_del(&mmu->list);
565 free_io_pgtable_ops(mmu->pgtbl_ops);
566 drm_mm_takedown(&mmu->mm);
567 kfree(mmu);
570 void panfrost_mmu_ctx_put(struct panfrost_mmu *mmu)
572 kref_put(&mmu->refcount, panfrost_mmu_release_ctx);
575 struct panfrost_mmu *panfrost_mmu_ctx_get(struct panfrost_mmu *mmu)
577 kref_get(&mmu->refcount);
579 return mmu;
610 struct panfrost_mmu *mmu;
612 mmu = kzalloc(sizeof(*mmu), GFP_KERNEL);
613 if (!mmu)
616 mmu->pfdev = pfdev;
617 spin_lock_init(&mmu->mm_lock);
620 drm_mm_init(&mmu->mm, SZ_32M >> PAGE_SHIFT, (SZ_4G - SZ_32M) >> PAGE_SHIFT);
621 mmu->mm.color_adjust = panfrost_drm_mm_color_adjust;
623 INIT_LIST_HEAD(&mmu->list);
624 mmu->as = -1;
626 mmu->pgtbl_cfg = (struct io_pgtable_cfg) {
635 mmu->pgtbl_ops = alloc_io_pgtable_ops(ARM_MALI_LPAE, &mmu->pgtbl_cfg,
636 mmu);
637 if (!mmu->pgtbl_ops) {
638 kfree(mmu);
642 kref_init(&mmu->refcount);
644 return mmu;
757 irq = platform_get_irq_byname(to_platform_device(pfdev->dev), "mmu");
764 IRQF_SHARED, KBUILD_MODNAME "-mmu",
768 dev_err(pfdev->dev, "failed to request mmu irq");