Lines Matching refs:iova

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