Lines Matching refs:lvl
264 unsigned long iova, size_t size, int lvl,
269 arm_lpae_iopte prot, int lvl, in arm_lpae_init_pte() argument
275 if (iopte_leaf(*ptep, lvl)) { in arm_lpae_init_pte()
279 } else if (iopte_type(*ptep, lvl) == ARM_LPAE_PTE_TYPE_TABLE) { in arm_lpae_init_pte()
285 size_t sz = ARM_LPAE_BLOCK_SIZE(lvl, data); in arm_lpae_init_pte()
287 tblp = ptep - ARM_LPAE_LVL_IDX(iova, lvl, data); in arm_lpae_init_pte()
288 if (WARN_ON(__arm_lpae_unmap(data, iova, sz, lvl, tblp) != sz)) in arm_lpae_init_pte()
295 if (lvl == ARM_LPAE_MAX_LEVELS - 1) in arm_lpae_init_pte()
309 int lvl, arm_lpae_iopte *ptep) in __arm_lpae_map() argument
312 size_t block_size = ARM_LPAE_BLOCK_SIZE(lvl, data); in __arm_lpae_map()
316 ptep += ARM_LPAE_LVL_IDX(iova, lvl, data); in __arm_lpae_map()
320 return arm_lpae_init_pte(data, iova, paddr, prot, lvl, ptep); in __arm_lpae_map()
323 if (WARN_ON(lvl >= ARM_LPAE_MAX_LEVELS - 1)) in __arm_lpae_map()
343 return __arm_lpae_map(data, iova, paddr, size, prot, lvl + 1, cptep); in __arm_lpae_map()
384 int ret, lvl = ARM_LPAE_START_LVL(data); in arm_lpae_map() local
392 ret = __arm_lpae_map(data, iova, paddr, size, prot, lvl, ptep); in arm_lpae_map()
402 static void __arm_lpae_free_pgtable(struct arm_lpae_io_pgtable *data, int lvl, in __arm_lpae_free_pgtable() argument
408 if (lvl == ARM_LPAE_START_LVL(data)) in __arm_lpae_free_pgtable()
416 if (lvl == ARM_LPAE_MAX_LEVELS - 1) in __arm_lpae_free_pgtable()
424 if (!pte || iopte_leaf(pte, lvl)) in __arm_lpae_free_pgtable()
427 __arm_lpae_free_pgtable(data, lvl + 1, iopte_deref(pte, data)); in __arm_lpae_free_pgtable()
443 arm_lpae_iopte prot, int lvl, in arm_lpae_split_blk_unmap() argument
463 tablep = &table - ARM_LPAE_LVL_IDX(blk_start, lvl, data); in arm_lpae_split_blk_unmap()
464 if (__arm_lpae_map(data, blk_start, blk_paddr, size, prot, lvl, in arm_lpae_split_blk_unmap()
469 __arm_lpae_free_pgtable(data, lvl + 1, tablep); in arm_lpae_split_blk_unmap()
482 unsigned long iova, size_t size, int lvl, in __arm_lpae_unmap() argument
488 size_t blk_size = ARM_LPAE_BLOCK_SIZE(lvl, data); in __arm_lpae_unmap()
490 ptep += ARM_LPAE_LVL_IDX(iova, lvl, data); in __arm_lpae_unmap()
494 if (WARN_ON(!pte || (lvl == ARM_LPAE_MAX_LEVELS))) in __arm_lpae_unmap()
501 if (!iopte_leaf(pte, lvl)) { in __arm_lpae_unmap()
506 __arm_lpae_free_pgtable(data, lvl + 1, ptep); in __arm_lpae_unmap()
512 } else if (iopte_leaf(pte, lvl)) { in __arm_lpae_unmap()
518 iopte_prot(pte), lvl, ptep, in __arm_lpae_unmap()
524 return __arm_lpae_unmap(data, iova, size, lvl + 1, ptep); in __arm_lpae_unmap()
534 int lvl = ARM_LPAE_START_LVL(data); in arm_lpae_unmap() local
536 unmapped = __arm_lpae_unmap(data, iova, size, lvl, ptep); in arm_lpae_unmap()
548 int lvl = ARM_LPAE_START_LVL(data); in arm_lpae_iova_to_phys() local
556 pte = *(ptep + ARM_LPAE_LVL_IDX(iova, lvl, data)); in arm_lpae_iova_to_phys()
563 if (iopte_leaf(pte,lvl)) in arm_lpae_iova_to_phys()
568 } while (++lvl < ARM_LPAE_MAX_LEVELS); in arm_lpae_iova_to_phys()