Lines Matching refs:iova
165 static u32 sun50i_iova_get_dte_index(dma_addr_t iova)
167 return FIELD_GET(SUN50I_IOVA_DTE_MASK, iova);
170 static u32 sun50i_iova_get_pte_index(dma_addr_t iova)
172 return FIELD_GET(SUN50I_IOVA_PTE_MASK, iova);
175 static u32 sun50i_iova_get_page_offset(dma_addr_t iova)
177 return FIELD_GET(SUN50I_IOVA_PAGE_MASK, iova);
301 unsigned long iova)
306 iommu_write(iommu, IOMMU_TLB_IVLD_ADDR_REG, iova);
318 unsigned long iova)
323 iommu_write(iommu, IOMMU_PC_IVLD_ADDR_REG, iova);
334 unsigned long iova, size_t size)
340 sun50i_iommu_zap_iova(iommu, iova);
341 sun50i_iommu_zap_iova(iommu, iova + SPAGE_SIZE);
343 sun50i_iommu_zap_iova(iommu, iova + size);
344 sun50i_iommu_zap_iova(iommu, iova + size + SPAGE_SIZE);
346 sun50i_iommu_zap_ptw_cache(iommu, iova);
347 sun50i_iommu_zap_ptw_cache(iommu, iova + SZ_1M);
349 sun50i_iommu_zap_ptw_cache(iommu, iova + size);
350 sun50i_iommu_zap_ptw_cache(iommu, iova + size + SZ_1M);
406 unsigned long iova, size_t size)
413 sun50i_iommu_zap_range(iommu, iova, size);
553 dma_addr_t iova, gfp_t gfp)
561 dte_addr = &sun50i_domain->dt[sun50i_iova_get_dte_index(iova)];
591 static int sun50i_iommu_map(struct iommu_domain *domain, unsigned long iova,
600 page_table = sun50i_dte_get_page_table(sun50i_domain, iova, gfp);
606 pte_index = sun50i_iova_get_pte_index(iova);
611 "iova %pad already mapped to %pa cannot remap to %pa prot: %#x\n",
612 &iova, &page_phys, &paddr, prot);
624 static size_t sun50i_iommu_unmap(struct iommu_domain *domain, unsigned long iova,
632 dte = sun50i_domain->dt[sun50i_iova_get_dte_index(iova)];
637 pte_addr = (u32 *)phys_to_virt(pt_phys) + sun50i_iova_get_pte_index(iova);
649 dma_addr_t iova)
656 dte = sun50i_domain->dt[sun50i_iova_get_dte_index(iova)];
662 pte = page_table[sun50i_iova_get_pte_index(iova)];
667 sun50i_iova_get_page_offset(iova);
848 unsigned master, phys_addr_t iova,
852 &iova, master, (prot == IOMMU_FAULT_WRITE) ? "wr" : "rd");
855 report_iommu_fault(iommu->domain, iommu->dev, iova, prot);
859 sun50i_iommu_zap_range(iommu, iova, SPAGE_SIZE);
866 phys_addr_t iova;
872 iova = iommu_read(iommu, addr_reg);
881 sun50i_iommu_report_fault(iommu, master, iova, IOMMU_FAULT_READ);
883 return iova;
889 phys_addr_t iova;
898 iova = iommu_read(iommu, IOMMU_INT_ERR_ADDR_REG(master));
936 sun50i_iommu_report_fault(iommu, master, iova, dir);
938 return iova;