• Home
  • Raw
  • Download

Lines Matching refs:pte

173 #define iopte_deref(pte,d)					\  argument
174 (__va((pte) & ((1ULL << ARM_LPAE_MAX_ADDR_BITS) - 1) \
177 #define iopte_type(pte,l) \ argument
178 (((pte) >> ARM_LPAE_PTE_TYPE_SHIFT) & ARM_LPAE_PTE_TYPE_MASK)
180 #define iopte_prot(pte) ((pte) & ARM_LPAE_PTE_ATTR_MASK) argument
182 #define iopte_leaf(pte,l) \ argument
184 (iopte_type(pte,l) == ARM_LPAE_PTE_TYPE_PAGE) : \
185 (iopte_type(pte,l) == ARM_LPAE_PTE_TYPE_BLOCK))
187 #define iopte_to_pfn(pte,d) \ argument
188 (((pte) & ((1ULL << ARM_LPAE_MAX_ADDR_BITS) - 1)) >> (d)->pg_shift)
262 static void __arm_lpae_set_pte(arm_lpae_iopte *ptep, arm_lpae_iopte pte, in __arm_lpae_set_pte() argument
265 *ptep = pte; in __arm_lpae_set_pte()
279 arm_lpae_iopte pte = prot; in __arm_lpae_init_pte() local
282 pte |= ARM_LPAE_PTE_NS; in __arm_lpae_init_pte()
285 pte |= ARM_LPAE_PTE_TYPE_PAGE; in __arm_lpae_init_pte()
287 pte |= ARM_LPAE_PTE_TYPE_BLOCK; in __arm_lpae_init_pte()
289 pte |= ARM_LPAE_PTE_AF | ARM_LPAE_PTE_SH_IS; in __arm_lpae_init_pte()
290 pte |= pfn_to_iopte(paddr >> data->pg_shift, data); in __arm_lpae_init_pte()
292 __arm_lpae_set_pte(ptep, pte, &data->iop.cfg); in __arm_lpae_init_pte()
300 arm_lpae_iopte pte = *ptep; in arm_lpae_init_pte() local
302 if (iopte_leaf(pte, lvl)) { in arm_lpae_init_pte()
306 } else if (iopte_type(pte, lvl) == ARM_LPAE_PTE_TYPE_TABLE) { in arm_lpae_init_pte()
359 arm_lpae_iopte *cptep, pte; in __arm_lpae_map() local
376 pte = READ_ONCE(*ptep); in __arm_lpae_map()
377 if (!pte) { in __arm_lpae_map()
382 pte = arm_lpae_install_table(cptep, ptep, 0, cfg); in __arm_lpae_map()
383 if (pte) in __arm_lpae_map()
386 !(pte & ARM_LPAE_PTE_SW_SYNC)) { in __arm_lpae_map()
390 if (pte && !iopte_leaf(pte, lvl)) { in __arm_lpae_map()
391 cptep = iopte_deref(pte, data); in __arm_lpae_map()
392 } else if (pte) { in __arm_lpae_map()
405 arm_lpae_iopte pte; in arm_lpae_prot_to_pte() local
409 pte = ARM_LPAE_PTE_nG; in arm_lpae_prot_to_pte()
412 pte |= ARM_LPAE_PTE_AP_RDONLY; in arm_lpae_prot_to_pte()
415 pte |= ARM_LPAE_PTE_AP_UNPRIV; in arm_lpae_prot_to_pte()
418 pte |= (ARM_LPAE_MAIR_ATTR_IDX_DEV in arm_lpae_prot_to_pte()
421 pte |= (ARM_LPAE_MAIR_ATTR_IDX_CACHE in arm_lpae_prot_to_pte()
424 pte = ARM_LPAE_PTE_HAP_FAULT; in arm_lpae_prot_to_pte()
426 pte |= ARM_LPAE_PTE_HAP_READ; in arm_lpae_prot_to_pte()
428 pte |= ARM_LPAE_PTE_HAP_WRITE; in arm_lpae_prot_to_pte()
430 pte |= ARM_LPAE_PTE_MEMATTR_DEV; in arm_lpae_prot_to_pte()
432 pte |= ARM_LPAE_PTE_MEMATTR_OIWB; in arm_lpae_prot_to_pte()
434 pte |= ARM_LPAE_PTE_MEMATTR_NC; in arm_lpae_prot_to_pte()
438 pte |= ARM_LPAE_PTE_XN; in arm_lpae_prot_to_pte()
440 return pte; in arm_lpae_prot_to_pte()
490 arm_lpae_iopte pte = *ptep++; in __arm_lpae_free_pgtable() local
492 if (!pte || iopte_leaf(pte, lvl)) in __arm_lpae_free_pgtable()
495 __arm_lpae_free_pgtable(data, lvl + 1, iopte_deref(pte, data)); in __arm_lpae_free_pgtable()
515 arm_lpae_iopte pte, *tablep; in arm_lpae_split_blk_unmap() local
532 pte = iopte_prot(blk_pte); in arm_lpae_split_blk_unmap()
534 for (i = 0; i < tablesz / sizeof(pte); i++, blk_paddr += split_sz) { in arm_lpae_split_blk_unmap()
539 __arm_lpae_init_pte(data, blk_paddr, pte, lvl, &tablep[i]); in arm_lpae_split_blk_unmap()
542 pte = arm_lpae_install_table(tablep, ptep, blk_pte, cfg); in arm_lpae_split_blk_unmap()
543 if (pte != blk_pte) { in arm_lpae_split_blk_unmap()
550 if (iopte_type(pte, lvl - 1) != ARM_LPAE_PTE_TYPE_TABLE) in arm_lpae_split_blk_unmap()
553 tablep = iopte_deref(pte, data); in arm_lpae_split_blk_unmap()
566 arm_lpae_iopte pte; in __arm_lpae_unmap() local
574 pte = READ_ONCE(*ptep); in __arm_lpae_unmap()
575 if (WARN_ON(!pte)) in __arm_lpae_unmap()
582 if (!iopte_leaf(pte, lvl)) { in __arm_lpae_unmap()
587 ptep = iopte_deref(pte, data); in __arm_lpae_unmap()
594 } else if (iopte_leaf(pte, lvl)) { in __arm_lpae_unmap()
599 return arm_lpae_split_blk_unmap(data, iova, size, pte, in __arm_lpae_unmap()
604 ptep = iopte_deref(pte, data); in __arm_lpae_unmap()
630 arm_lpae_iopte pte, *ptep = data->pgd; in arm_lpae_iova_to_phys() local
640 pte = READ_ONCE(*ptep); in arm_lpae_iova_to_phys()
643 if (!pte) in arm_lpae_iova_to_phys()
647 if (iopte_leaf(pte,lvl)) in arm_lpae_iova_to_phys()
651 ptep = iopte_deref(pte, data); in arm_lpae_iova_to_phys()
659 return ((phys_addr_t)iopte_to_pfn(pte,data) << data->pg_shift) | iova; in arm_lpae_iova_to_phys()