Lines Matching refs:sun50i_domain

290 static void sun50i_table_flush(struct sun50i_iommu_domain *sun50i_domain,
293 struct sun50i_iommu *iommu = sun50i_domain->iommu;
385 struct sun50i_iommu_domain *sun50i_domain = to_sun50i_domain(domain);
386 struct sun50i_iommu *iommu = sun50i_domain->iommu;
408 struct sun50i_iommu_domain *sun50i_domain = to_sun50i_domain(domain);
409 struct sun50i_iommu *iommu = sun50i_domain->iommu;
425 struct sun50i_iommu_domain *sun50i_domain;
432 sun50i_domain = to_sun50i_domain(iommu->domain);
444 iommu_write(iommu, IOMMU_TTB_REG, sun50i_domain->dt_dma);
552 static u32 *sun50i_dte_get_page_table(struct sun50i_iommu_domain *sun50i_domain,
555 struct sun50i_iommu *iommu = sun50i_domain->iommu;
561 dte_addr = &sun50i_domain->dt[sun50i_iova_get_dte_index(iova)];
585 sun50i_table_flush(sun50i_domain, page_table, NUM_PT_ENTRIES);
586 sun50i_table_flush(sun50i_domain, dte_addr, 1);
594 struct sun50i_iommu_domain *sun50i_domain = to_sun50i_domain(domain);
595 struct sun50i_iommu *iommu = sun50i_domain->iommu;
600 page_table = sun50i_dte_get_page_table(sun50i_domain, iova, gfp);
618 sun50i_table_flush(sun50i_domain, pte_addr, 1);
627 struct sun50i_iommu_domain *sun50i_domain = to_sun50i_domain(domain);
632 dte = sun50i_domain->dt[sun50i_iova_get_dte_index(iova)];
643 sun50i_table_flush(sun50i_domain, pte_addr, 1);
651 struct sun50i_iommu_domain *sun50i_domain = to_sun50i_domain(domain);
656 dte = sun50i_domain->dt[sun50i_iova_get_dte_index(iova)];
672 struct sun50i_iommu_domain *sun50i_domain;
678 sun50i_domain = kzalloc(sizeof(*sun50i_domain), GFP_KERNEL);
679 if (!sun50i_domain)
682 sun50i_domain->dt = (u32 *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
684 if (!sun50i_domain->dt)
687 refcount_set(&sun50i_domain->refcnt, 1);
689 sun50i_domain->domain.geometry.aperture_start = 0;
690 sun50i_domain->domain.geometry.aperture_end = DMA_BIT_MASK(32);
691 sun50i_domain->domain.geometry.force_aperture = true;
693 return &sun50i_domain->domain;
696 kfree(sun50i_domain);
703 struct sun50i_iommu_domain *sun50i_domain = to_sun50i_domain(domain);
705 free_pages((unsigned long)sun50i_domain->dt, get_order(DT_SIZE));
706 sun50i_domain->dt = NULL;
708 kfree(sun50i_domain);
712 struct sun50i_iommu_domain *sun50i_domain)
714 iommu->domain = &sun50i_domain->domain;
715 sun50i_domain->iommu = iommu;
717 sun50i_domain->dt_dma = dma_map_single(iommu->dev, sun50i_domain->dt,
719 if (dma_mapping_error(iommu->dev, sun50i_domain->dt_dma)) {
728 struct sun50i_iommu_domain *sun50i_domain)
738 dte_addr = &sun50i_domain->dt[i];
744 sun50i_table_flush(sun50i_domain, dte_addr, 1);
754 dma_unmap_single(iommu->dev, virt_to_phys(sun50i_domain->dt),
763 struct sun50i_iommu_domain *sun50i_domain = to_sun50i_domain(domain);
771 if (refcount_dec_and_test(&sun50i_domain->refcnt))
772 sun50i_iommu_detach_domain(iommu, sun50i_domain);
778 struct sun50i_iommu_domain *sun50i_domain = to_sun50i_domain(domain);
787 refcount_inc(&sun50i_domain->refcnt);
795 sun50i_iommu_attach_domain(iommu, sun50i_domain);