Lines Matching refs:iova
304 * rk3288 iova (IOMMU Virtual Address) format
320 static u32 rk_iova_dte_index(dma_addr_t iova)
322 return (u32)(iova & RK_IOVA_DTE_MASK) >> RK_IOVA_DTE_SHIFT;
325 static u32 rk_iova_pte_index(dma_addr_t iova)
327 return (u32)(iova & RK_IOVA_PTE_MASK) >> RK_IOVA_PTE_SHIFT;
330 static u32 rk_iova_page_offset(dma_addr_t iova)
332 return (u32)(iova & RK_IOVA_PAGE_MASK) >> RK_IOVA_PAGE_SHIFT;
367 dma_addr_t iova;
369 for (iova = iova_start; iova < iova_end; iova += SPAGE_SIZE)
370 rk_iommu_write(iommu->bases[i], RK_MMU_ZAP_ONE_LINE, iova);
533 static void log_iova(struct rk_iommu *iommu, int index, dma_addr_t iova)
547 dte_index = rk_iova_dte_index(iova);
548 pte_index = rk_iova_pte_index(iova);
549 page_offset = rk_iova_page_offset(iova);
572 dev_err(iommu->dev, "iova = %pad: dte_index: %#03x pte_index: %#03x page_offset: %#03x\n",
573 &iova, dte_index, pte_index, page_offset);
585 dma_addr_t iova;
602 iova = rk_iommu_read(iommu->bases[i], RK_MMU_PAGE_FAULT_ADDR);
612 &iova,
615 log_iova(iommu, i, iova);
623 report_iommu_fault(iommu->domain, iommu->dev, iova,
633 dev_err(iommu->dev, "BUS_ERROR occurred at %pad\n", &iova);
650 dma_addr_t iova)
660 dte = rk_domain->dt[rk_iova_dte_index(iova)];
666 pte = page_table[rk_iova_pte_index(iova)];
670 phys = rk_ops->pt_address(pte) + rk_iova_page_offset(iova);
678 dma_addr_t iova, size_t size)
683 /* shootdown these iova from all iommus using this domain */
698 rk_iommu_zap_lines(iommu, iova, size);
707 dma_addr_t iova, size_t size)
709 rk_iommu_zap_iova(rk_domain, iova, SPAGE_SIZE);
711 rk_iommu_zap_iova(rk_domain, iova + size - SPAGE_SIZE,
716 dma_addr_t iova)
725 dte_index = rk_iova_dte_index(iova);
775 dma_addr_t pte_dma, dma_addr_t iova,
798 * Zap the first and last iova to evict from iotlb any previously
800 * We only zap the first and last iova, since only they could have
803 rk_iommu_zap_iova_first_last(rk_domain, iova, size);
811 iova += pte_count * SPAGE_SIZE;
813 pr_err("iova: %pad already mapped to %pa cannot remap to phys: %pa prot: %#x\n",
814 &iova, &page_phys, &paddr, prot);
824 dma_addr_t pte_dma, iova = (dma_addr_t)_iova;
832 * pgsize_bitmap specifies iova sizes that fit in one page table
835 * Since iommu_map() guarantees that both iova and size will be
838 page_table = rk_dte_get_page_table(rk_domain, iova);
844 dte_index = rk_domain->dt[rk_iova_dte_index(iova)];
845 pte_index = rk_iova_pte_index(iova);
849 ret = rk_iommu_map_iova(rk_domain, pte_addr, pte_dma, iova,
862 dma_addr_t pte_dma, iova = (dma_addr_t)_iova;
871 * pgsize_bitmap specifies iova sizes that fit in one page table
874 * Since iommu_unmap() guarantees that both iova and size will be
877 dte = rk_domain->dt[rk_iova_dte_index(iova)];
878 /* Just return 0 if iova is unmapped */
885 pte_addr = (u32 *)phys_to_virt(pt_phys) + rk_iova_pte_index(iova);
886 pte_dma = pt_phys + rk_iova_pte_index(iova) * sizeof(u32);
891 /* Shootdown iotlb entries for iova range that was just unmapped */
892 rk_iommu_zap_iova(rk_domain, iova, unmap_size);