Lines Matching refs:lvl
204 unsigned long iova, size_t size, int lvl,
209 arm_lpae_iopte prot, int lvl, in arm_lpae_init_pte() argument
214 if (iopte_leaf(*ptep, lvl)) { in arm_lpae_init_pte()
218 } else if (iopte_type(*ptep, lvl) == ARM_LPAE_PTE_TYPE_TABLE) { in arm_lpae_init_pte()
224 size_t sz = ARM_LPAE_BLOCK_SIZE(lvl, data); in arm_lpae_init_pte()
226 tblp = ptep - ARM_LPAE_LVL_IDX(iova, lvl, data); in arm_lpae_init_pte()
227 if (WARN_ON(__arm_lpae_unmap(data, iova, sz, lvl, tblp) != sz)) in arm_lpae_init_pte()
234 if (lvl == ARM_LPAE_MAX_LEVELS - 1) in arm_lpae_init_pte()
249 int lvl, arm_lpae_iopte *ptep) in __arm_lpae_map() argument
253 size_t block_size = ARM_LPAE_BLOCK_SIZE(lvl, data); in __arm_lpae_map()
256 ptep += ARM_LPAE_LVL_IDX(iova, lvl, data); in __arm_lpae_map()
260 return arm_lpae_init_pte(data, iova, paddr, prot, lvl, ptep); in __arm_lpae_map()
263 if (WARN_ON(lvl >= ARM_LPAE_MAX_LEVELS - 1)) in __arm_lpae_map()
286 return __arm_lpae_map(data, iova, paddr, size, prot, lvl + 1, cptep); in __arm_lpae_map()
327 int lvl = ARM_LPAE_START_LVL(data); in arm_lpae_map() local
335 return __arm_lpae_map(data, iova, paddr, size, prot, lvl, ptep); in arm_lpae_map()
338 static void __arm_lpae_free_pgtable(struct arm_lpae_io_pgtable *data, int lvl, in __arm_lpae_free_pgtable() argument
344 if (lvl == ARM_LPAE_START_LVL(data)) in __arm_lpae_free_pgtable()
352 if (lvl == ARM_LPAE_MAX_LEVELS - 1) in __arm_lpae_free_pgtable()
360 if (!pte || iopte_leaf(pte, lvl)) in __arm_lpae_free_pgtable()
363 __arm_lpae_free_pgtable(data, lvl + 1, iopte_deref(pte, data)); in __arm_lpae_free_pgtable()
379 arm_lpae_iopte prot, int lvl, in arm_lpae_split_blk_unmap() argument
400 tablep = &table - ARM_LPAE_LVL_IDX(blk_start, lvl, data); in arm_lpae_split_blk_unmap()
401 if (__arm_lpae_map(data, blk_start, blk_paddr, size, prot, lvl, in arm_lpae_split_blk_unmap()
406 __arm_lpae_free_pgtable(data, lvl + 1, tablep); in arm_lpae_split_blk_unmap()
420 unsigned long iova, size_t size, int lvl, in __arm_lpae_unmap() argument
426 size_t blk_size = ARM_LPAE_BLOCK_SIZE(lvl, data); in __arm_lpae_unmap()
428 ptep += ARM_LPAE_LVL_IDX(iova, lvl, data); in __arm_lpae_unmap()
432 if (WARN_ON(!pte || (lvl == ARM_LPAE_MAX_LEVELS))) in __arm_lpae_unmap()
440 if (!iopte_leaf(pte, lvl)) { in __arm_lpae_unmap()
445 __arm_lpae_free_pgtable(data, lvl + 1, ptep); in __arm_lpae_unmap()
451 } else if (iopte_leaf(pte, lvl)) { in __arm_lpae_unmap()
457 iopte_prot(pte), lvl, ptep, in __arm_lpae_unmap()
463 return __arm_lpae_unmap(data, iova, size, lvl + 1, ptep); in __arm_lpae_unmap()
473 int lvl = ARM_LPAE_START_LVL(data); in arm_lpae_unmap() local
475 unmapped = __arm_lpae_unmap(data, iova, size, lvl, ptep); in arm_lpae_unmap()
487 int lvl = ARM_LPAE_START_LVL(data); in arm_lpae_iova_to_phys() local
495 pte = *(ptep + ARM_LPAE_LVL_IDX(iova, lvl, data)); in arm_lpae_iova_to_phys()
502 if (iopte_leaf(pte,lvl)) in arm_lpae_iova_to_phys()
507 } while (++lvl < ARM_LPAE_MAX_LEVELS); in arm_lpae_iova_to_phys()