Lines Matching defs:sun50i_domain

289 static void sun50i_table_flush(struct sun50i_iommu_domain *sun50i_domain,
292 struct sun50i_iommu *iommu = sun50i_domain->iommu;
328 struct sun50i_iommu_domain *sun50i_domain = to_sun50i_domain(domain);
329 struct sun50i_iommu *iommu = sun50i_domain->iommu;
356 struct sun50i_iommu_domain *sun50i_domain;
363 sun50i_domain = to_sun50i_domain(iommu->domain);
375 iommu_write(iommu, IOMMU_TTB_REG, sun50i_domain->dt_dma);
483 static u32 *sun50i_dte_get_page_table(struct sun50i_iommu_domain *sun50i_domain,
486 struct sun50i_iommu *iommu = sun50i_domain->iommu;
492 dte_addr = &sun50i_domain->dt[sun50i_iova_get_dte_index(iova)];
516 sun50i_table_flush(sun50i_domain, page_table, NUM_PT_ENTRIES);
517 sun50i_table_flush(sun50i_domain, dte_addr, 1);
525 struct sun50i_iommu_domain *sun50i_domain = to_sun50i_domain(domain);
526 struct sun50i_iommu *iommu = sun50i_domain->iommu;
531 page_table = sun50i_dte_get_page_table(sun50i_domain, iova, gfp);
549 sun50i_table_flush(sun50i_domain, pte_addr, 1);
558 struct sun50i_iommu_domain *sun50i_domain = to_sun50i_domain(domain);
563 dte = sun50i_domain->dt[sun50i_iova_get_dte_index(iova)];
574 sun50i_table_flush(sun50i_domain, pte_addr, 1);
582 struct sun50i_iommu_domain *sun50i_domain = to_sun50i_domain(domain);
587 dte = sun50i_domain->dt[sun50i_iova_get_dte_index(iova)];
603 struct sun50i_iommu_domain *sun50i_domain;
609 sun50i_domain = kzalloc(sizeof(*sun50i_domain), GFP_KERNEL);
610 if (!sun50i_domain)
614 iommu_get_dma_cookie(&sun50i_domain->domain))
617 sun50i_domain->dt = (u32 *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
619 if (!sun50i_domain->dt)
622 refcount_set(&sun50i_domain->refcnt, 1);
624 sun50i_domain->domain.geometry.aperture_start = 0;
625 sun50i_domain->domain.geometry.aperture_end = DMA_BIT_MASK(32);
626 sun50i_domain->domain.geometry.force_aperture = true;
628 return &sun50i_domain->domain;
632 iommu_put_dma_cookie(&sun50i_domain->domain);
635 kfree(sun50i_domain);
642 struct sun50i_iommu_domain *sun50i_domain = to_sun50i_domain(domain);
644 free_pages((unsigned long)sun50i_domain->dt, get_order(DT_SIZE));
645 sun50i_domain->dt = NULL;
649 kfree(sun50i_domain);
653 struct sun50i_iommu_domain *sun50i_domain)
655 iommu->domain = &sun50i_domain->domain;
656 sun50i_domain->iommu = iommu;
658 sun50i_domain->dt_dma = dma_map_single(iommu->dev, sun50i_domain->dt,
660 if (dma_mapping_error(iommu->dev, sun50i_domain->dt_dma)) {
669 struct sun50i_iommu_domain *sun50i_domain)
679 dte_addr = &sun50i_domain->dt[i];
685 sun50i_table_flush(sun50i_domain, dte_addr, 1);
695 dma_unmap_single(iommu->dev, virt_to_phys(sun50i_domain->dt),
704 struct sun50i_iommu_domain *sun50i_domain = to_sun50i_domain(domain);
712 if (refcount_dec_and_test(&sun50i_domain->refcnt))
713 sun50i_iommu_detach_domain(iommu, sun50i_domain);
719 struct sun50i_iommu_domain *sun50i_domain = to_sun50i_domain(domain);
728 refcount_inc(&sun50i_domain->refcnt);
736 sun50i_iommu_attach_domain(iommu, sun50i_domain);