Lines Matching refs:lvl
156 static inline bool iopte_leaf(arm_lpae_iopte pte, int lvl, in iopte_leaf() argument
159 if (lvl == (ARM_LPAE_MAX_LEVELS - 1) && fmt != ARM_MALI_LPAE) in iopte_leaf()
260 int lvl, arm_lpae_iopte *ptep);
264 int lvl, int num_entries, arm_lpae_iopte *ptep) in __arm_lpae_init_pte() argument
268 size_t sz = ARM_LPAE_BLOCK_SIZE(lvl, data); in __arm_lpae_init_pte()
271 if (data->iop.fmt != ARM_MALI_LPAE && lvl == ARM_LPAE_MAX_LEVELS - 1) in __arm_lpae_init_pte()
285 arm_lpae_iopte prot, int lvl, int num_entries, in arm_lpae_init_pte() argument
291 if (iopte_leaf(ptep[i], lvl, data->iop.fmt)) { in arm_lpae_init_pte()
301 size_t sz = ARM_LPAE_BLOCK_SIZE(lvl, data); in arm_lpae_init_pte()
303 tblp = ptep - ARM_LPAE_LVL_IDX(iova, lvl, data); in arm_lpae_init_pte()
305 lvl, tblp) != sz) { in arm_lpae_init_pte()
311 __arm_lpae_init_pte(data, paddr, prot, lvl, num_entries, ptep); in arm_lpae_init_pte()
348 arm_lpae_iopte prot, int lvl, arm_lpae_iopte *ptep, in __arm_lpae_map() argument
352 size_t block_size = ARM_LPAE_BLOCK_SIZE(lvl, data); in __arm_lpae_map()
358 map_idx_start = ARM_LPAE_LVL_IDX(iova, lvl, data); in __arm_lpae_map()
365 ret = arm_lpae_init_pte(data, iova, paddr, prot, lvl, num_entries, ptep); in __arm_lpae_map()
373 if (WARN_ON(lvl >= ARM_LPAE_MAX_LEVELS - 1)) in __arm_lpae_map()
390 if (pte && !iopte_leaf(pte, lvl, data->iop.fmt)) { in __arm_lpae_map()
399 return __arm_lpae_map(data, iova, paddr, size, pgcount, prot, lvl + 1, in __arm_lpae_map()
483 int ret, lvl = data->start_level; in arm_lpae_map_pages() local
500 ret = __arm_lpae_map(data, iova, paddr, pgsize, pgcount, prot, lvl, in arm_lpae_map_pages()
518 static void __arm_lpae_free_pgtable(struct arm_lpae_io_pgtable *data, int lvl, in __arm_lpae_free_pgtable() argument
524 if (lvl == data->start_level) in __arm_lpae_free_pgtable()
532 if (lvl == ARM_LPAE_MAX_LEVELS - 1) in __arm_lpae_free_pgtable()
540 if (!pte || iopte_leaf(pte, lvl, data->iop.fmt)) in __arm_lpae_free_pgtable()
543 __arm_lpae_free_pgtable(data, lvl + 1, iopte_deref(pte, data)); in __arm_lpae_free_pgtable()
560 arm_lpae_iopte blk_pte, int lvl, in arm_lpae_split_blk_unmap() argument
567 size_t split_sz = ARM_LPAE_BLOCK_SIZE(lvl, data); in arm_lpae_split_blk_unmap()
571 if (WARN_ON(lvl == ARM_LPAE_MAX_LEVELS)) in arm_lpae_split_blk_unmap()
579 unmap_idx_start = ARM_LPAE_LVL_IDX(iova, lvl, data); in arm_lpae_split_blk_unmap()
592 __arm_lpae_init_pte(data, blk_paddr, pte, lvl, 1, &tablep[i]); in arm_lpae_split_blk_unmap()
614 return __arm_lpae_unmap(data, gather, iova, size, pgcount, lvl, tablep); in arm_lpae_split_blk_unmap()
620 int lvl, arm_lpae_iopte *ptep) in __arm_lpae_unmap() argument
627 if (WARN_ON(lvl == ARM_LPAE_MAX_LEVELS)) in __arm_lpae_unmap()
630 unmap_idx_start = ARM_LPAE_LVL_IDX(iova, lvl, data); in __arm_lpae_unmap()
637 if (size == ARM_LPAE_BLOCK_SIZE(lvl, data)) { in __arm_lpae_unmap()
648 if (!iopte_leaf(pte, lvl, iop->fmt)) { in __arm_lpae_unmap()
652 __arm_lpae_free_pgtable(data, lvl + 1, iopte_deref(pte, data)); in __arm_lpae_unmap()
662 } else if (iopte_leaf(pte, lvl, iop->fmt)) { in __arm_lpae_unmap()
668 lvl + 1, ptep, pgcount); in __arm_lpae_unmap()
673 return __arm_lpae_unmap(data, gather, iova, size, pgcount, lvl + 1, ptep); in __arm_lpae_unmap()
708 int lvl = data->start_level; in arm_lpae_iova_to_phys() local
716 ptep += ARM_LPAE_LVL_IDX(iova, lvl, data); in arm_lpae_iova_to_phys()
724 if (iopte_leaf(pte, lvl, data->iop.fmt)) in arm_lpae_iova_to_phys()
729 } while (++lvl < ARM_LPAE_MAX_LEVELS); in arm_lpae_iova_to_phys()
735 iova &= (ARM_LPAE_BLOCK_SIZE(lvl, data) - 1); in arm_lpae_iova_to_phys()