Lines Matching refs:lvl

150 static inline bool iopte_leaf(arm_lpae_iopte pte, int lvl,
153 if (lvl == (ARM_LPAE_MAX_LEVELS - 1) && fmt != ARM_MALI_LPAE)
154 return iopte_type(pte, lvl) == ARM_LPAE_PTE_TYPE_PAGE;
156 return iopte_type(pte, lvl) == ARM_LPAE_PTE_TYPE_BLOCK;
253 unsigned long iova, size_t size, int lvl,
258 int lvl, arm_lpae_iopte *ptep)
262 if (data->iop.fmt != ARM_MALI_LPAE && lvl == ARM_LPAE_MAX_LEVELS - 1)
274 arm_lpae_iopte prot, int lvl,
279 if (iopte_leaf(pte, lvl, data->iop.fmt)) {
283 } else if (iopte_type(pte, lvl) == ARM_LPAE_PTE_TYPE_TABLE) {
289 size_t sz = ARM_LPAE_BLOCK_SIZE(lvl, data);
291 tblp = ptep - ARM_LPAE_LVL_IDX(iova, lvl, data);
292 if (__arm_lpae_unmap(data, NULL, iova, sz, lvl, tblp) != sz) {
298 __arm_lpae_init_pte(data, paddr, prot, lvl, ptep);
336 int lvl, arm_lpae_iopte *ptep, gfp_t gfp)
339 size_t block_size = ARM_LPAE_BLOCK_SIZE(lvl, data);
344 ptep += ARM_LPAE_LVL_IDX(iova, lvl, data);
348 return arm_lpae_init_pte(data, iova, paddr, prot, lvl, ptep);
351 if (WARN_ON(lvl >= ARM_LPAE_MAX_LEVELS - 1))
368 if (pte && !iopte_leaf(pte, lvl, data->iop.fmt)) {
377 return __arm_lpae_map(data, iova, paddr, size, prot, lvl + 1, cptep, gfp);
450 int ret, lvl = data->start_level;
467 ret = __arm_lpae_map(data, iova, paddr, size, prot, lvl, ptep, gfp);
477 static void __arm_lpae_free_pgtable(struct arm_lpae_io_pgtable *data, int lvl,
483 if (lvl == data->start_level)
491 if (lvl == ARM_LPAE_MAX_LEVELS - 1)
499 if (!pte || iopte_leaf(pte, lvl, data->iop.fmt))
502 __arm_lpae_free_pgtable(data, lvl + 1, iopte_deref(pte, data));
519 arm_lpae_iopte blk_pte, int lvl,
526 size_t split_sz = ARM_LPAE_BLOCK_SIZE(lvl, data);
529 if (WARN_ON(lvl == ARM_LPAE_MAX_LEVELS))
537 unmap_idx = ARM_LPAE_LVL_IDX(iova, lvl, data);
547 __arm_lpae_init_pte(data, blk_paddr, pte, lvl, &tablep[i]);
558 if (iopte_type(pte, lvl - 1) != ARM_LPAE_PTE_TYPE_TABLE)
567 return __arm_lpae_unmap(data, gather, iova, size, lvl, tablep);
572 unsigned long iova, size_t size, int lvl,
579 if (WARN_ON(lvl == ARM_LPAE_MAX_LEVELS))
582 ptep += ARM_LPAE_LVL_IDX(iova, lvl, data);
588 if (size == ARM_LPAE_BLOCK_SIZE(lvl, data)) {
591 if (!iopte_leaf(pte, lvl, iop->fmt)) {
596 __arm_lpae_free_pgtable(data, lvl + 1, ptep);
609 } else if (iopte_leaf(pte, lvl, iop->fmt)) {
615 lvl + 1, ptep);
620 return __arm_lpae_unmap(data, gather, iova, size, lvl + 1, ptep);
647 int lvl = data->start_level;
655 ptep += ARM_LPAE_LVL_IDX(iova, lvl, data);
663 if (iopte_leaf(pte, lvl, data->iop.fmt))
668 } while (++lvl < ARM_LPAE_MAX_LEVELS);
674 iova &= (ARM_LPAE_BLOCK_SIZE(lvl, data) - 1);