Lines Matching refs:ptep
241 static void __arm_lpae_sync_pte(arm_lpae_iopte *ptep, int num_entries, in __arm_lpae_sync_pte() argument
244 dma_sync_single_for_device(cfg->iommu_dev, __arm_lpae_dma_addr(ptep), in __arm_lpae_sync_pte()
245 sizeof(*ptep) * num_entries, DMA_TO_DEVICE); in __arm_lpae_sync_pte()
248 static void __arm_lpae_clear_pte(arm_lpae_iopte *ptep, struct io_pgtable_cfg *cfg) in __arm_lpae_clear_pte() argument
251 *ptep = 0; in __arm_lpae_clear_pte()
254 __arm_lpae_sync_pte(ptep, 1, cfg); in __arm_lpae_clear_pte()
260 int lvl, arm_lpae_iopte *ptep);
264 int lvl, int num_entries, arm_lpae_iopte *ptep) in __arm_lpae_init_pte() argument
277 ptep[i] = pte | paddr_to_iopte(paddr + i * sz, data); in __arm_lpae_init_pte()
280 __arm_lpae_sync_pte(ptep, num_entries, cfg); in __arm_lpae_init_pte()
286 arm_lpae_iopte *ptep) in arm_lpae_init_pte() argument
291 if (iopte_leaf(ptep[i], lvl, data->iop.fmt)) { in arm_lpae_init_pte()
295 } else if (iopte_type(ptep[i]) == ARM_LPAE_PTE_TYPE_TABLE) { in arm_lpae_init_pte()
303 tblp = ptep - ARM_LPAE_LVL_IDX(iova, lvl, data); in arm_lpae_init_pte()
311 __arm_lpae_init_pte(data, paddr, prot, lvl, num_entries, ptep); in arm_lpae_init_pte()
316 arm_lpae_iopte *ptep, in arm_lpae_install_table() argument
333 old = cmpxchg64_relaxed(ptep, curr, new); in arm_lpae_install_table()
339 __arm_lpae_sync_pte(ptep, 1, cfg); in arm_lpae_install_table()
341 WRITE_ONCE(*ptep, new | ARM_LPAE_PTE_SW_SYNC); in arm_lpae_install_table()
348 arm_lpae_iopte prot, int lvl, arm_lpae_iopte *ptep, in __arm_lpae_map() argument
359 ptep += map_idx_start; in __arm_lpae_map()
365 ret = arm_lpae_init_pte(data, iova, paddr, prot, lvl, num_entries, ptep); in __arm_lpae_map()
377 pte = READ_ONCE(*ptep); in __arm_lpae_map()
383 pte = arm_lpae_install_table(cptep, ptep, 0, cfg); in __arm_lpae_map()
387 __arm_lpae_sync_pte(ptep, 1, cfg); in __arm_lpae_map()
482 arm_lpae_iopte *ptep = data->pgd; in arm_lpae_map_pages() local
501 ptep, gfp, mapped); in arm_lpae_map_pages()
519 arm_lpae_iopte *ptep) in __arm_lpae_free_pgtable() argument
529 start = ptep; in __arm_lpae_free_pgtable()
533 end = ptep; in __arm_lpae_free_pgtable()
535 end = (void *)ptep + table_size; in __arm_lpae_free_pgtable()
537 while (ptep != end) { in __arm_lpae_free_pgtable()
538 arm_lpae_iopte pte = *ptep++; in __arm_lpae_free_pgtable()
561 arm_lpae_iopte *ptep, size_t pgcount) in arm_lpae_split_blk_unmap() argument
595 pte = arm_lpae_install_table(tablep, ptep, blk_pte, cfg); in arm_lpae_split_blk_unmap()
620 int lvl, arm_lpae_iopte *ptep) in __arm_lpae_unmap() argument
631 ptep += unmap_idx_start; in __arm_lpae_unmap()
632 pte = READ_ONCE(*ptep); in __arm_lpae_unmap()
642 pte = READ_ONCE(*ptep); in __arm_lpae_unmap()
646 __arm_lpae_clear_pte(ptep, &iop->cfg); in __arm_lpae_unmap()
657 ptep++; in __arm_lpae_unmap()
668 lvl + 1, ptep, pgcount); in __arm_lpae_unmap()
672 ptep = iopte_deref(pte, data); in __arm_lpae_unmap()
673 return __arm_lpae_unmap(data, gather, iova, size, pgcount, lvl + 1, ptep); in __arm_lpae_unmap()
682 arm_lpae_iopte *ptep = data->pgd; in arm_lpae_unmap_pages() local
694 data->start_level, ptep); in arm_lpae_unmap_pages()
707 arm_lpae_iopte pte, *ptep = data->pgd; in arm_lpae_iova_to_phys() local
712 if (!ptep) in arm_lpae_iova_to_phys()
716 ptep += ARM_LPAE_LVL_IDX(iova, lvl, data); in arm_lpae_iova_to_phys()
717 pte = READ_ONCE(*ptep); in arm_lpae_iova_to_phys()
728 ptep = iopte_deref(pte, data); in arm_lpae_iova_to_phys()