• Home
  • Raw
  • Download

Lines Matching refs:pte

141 #define iopte_deref(pte,d) __va(iopte_to_paddr(pte, d))  argument
143 #define iopte_type(pte) \ argument
144 (((pte) >> ARM_LPAE_PTE_TYPE_SHIFT) & ARM_LPAE_PTE_TYPE_MASK)
146 #define iopte_prot(pte) ((pte) & ARM_LPAE_PTE_ATTR_MASK) argument
160 static inline bool iopte_leaf(arm_lpae_iopte pte, int lvl, in iopte_leaf() argument
164 return iopte_type(pte) == ARM_LPAE_PTE_TYPE_PAGE; in iopte_leaf()
166 return iopte_type(pte) == ARM_LPAE_PTE_TYPE_BLOCK; in iopte_leaf()
172 arm_lpae_iopte pte = paddr; in paddr_to_iopte() local
175 return (pte | (pte >> (48 - 12))) & ARM_LPAE_PTE_ADDR_MASK; in paddr_to_iopte()
178 static phys_addr_t iopte_to_paddr(arm_lpae_iopte pte, in iopte_to_paddr() argument
181 u64 paddr = pte & ARM_LPAE_PTE_ADDR_MASK; in iopte_to_paddr()
270 arm_lpae_iopte pte = prot; in __arm_lpae_init_pte() local
276 pte |= ARM_LPAE_PTE_TYPE_PAGE; in __arm_lpae_init_pte()
278 pte |= ARM_LPAE_PTE_TYPE_BLOCK; in __arm_lpae_init_pte()
281 ptep[i] = pte | paddr_to_iopte(paddr + i * sz, data); in __arm_lpae_init_pte()
356 arm_lpae_iopte *cptep, pte; in __arm_lpae_map() local
382 pte = READ_ONCE(*ptep); in __arm_lpae_map()
383 if (!pte) { in __arm_lpae_map()
388 pte = arm_lpae_install_table(cptep, ptep, 0, data); in __arm_lpae_map()
389 if (pte) in __arm_lpae_map()
391 } else if (!cfg->coherent_walk && !(pte & ARM_LPAE_PTE_SW_SYNC)) { in __arm_lpae_map()
395 if (pte && !iopte_leaf(pte, lvl, data->iop.fmt)) { in __arm_lpae_map()
396 cptep = iopte_deref(pte, data); in __arm_lpae_map()
397 } else if (pte) { in __arm_lpae_map()
411 arm_lpae_iopte pte; in arm_lpae_prot_to_pte() local
414 pte = 0; in arm_lpae_prot_to_pte()
416 pte |= APPLE_DART_PTE_PROT_NO_WRITE; in arm_lpae_prot_to_pte()
418 pte |= APPLE_DART_PTE_PROT_NO_READ; in arm_lpae_prot_to_pte()
419 return pte; in arm_lpae_prot_to_pte()
424 pte = ARM_LPAE_PTE_nG; in arm_lpae_prot_to_pte()
426 pte |= ARM_LPAE_PTE_AP_RDONLY; in arm_lpae_prot_to_pte()
428 pte |= ARM_LPAE_PTE_AP_UNPRIV; in arm_lpae_prot_to_pte()
430 pte = ARM_LPAE_PTE_HAP_FAULT; in arm_lpae_prot_to_pte()
432 pte |= ARM_LPAE_PTE_HAP_READ; in arm_lpae_prot_to_pte()
434 pte |= ARM_LPAE_PTE_HAP_WRITE; in arm_lpae_prot_to_pte()
444 pte |= ARM_LPAE_PTE_MEMATTR_DEV; in arm_lpae_prot_to_pte()
446 pte |= ARM_LPAE_PTE_MEMATTR_OIWB; in arm_lpae_prot_to_pte()
448 pte |= ARM_LPAE_PTE_MEMATTR_NC; in arm_lpae_prot_to_pte()
451 pte |= (ARM_LPAE_MAIR_ATTR_IDX_DEV in arm_lpae_prot_to_pte()
454 pte |= (ARM_LPAE_MAIR_ATTR_IDX_ICACHE_OCACHE_NWA in arm_lpae_prot_to_pte()
458 pte |= (ARM_LPAE_MAIR_ATTR_IDX_CACHE in arm_lpae_prot_to_pte()
461 pte |= (ARM_LPAE_MAIR_ATTR_IDX_INC_OCACHE in arm_lpae_prot_to_pte()
464 pte |= (ARM_LPAE_MAIR_ATTR_IDX_INC_OCACHE_NWA in arm_lpae_prot_to_pte()
475 pte |= ARM_LPAE_PTE_SH_IS; in arm_lpae_prot_to_pte()
477 pte |= ARM_LPAE_PTE_SH_OS; in arm_lpae_prot_to_pte()
480 pte |= ARM_LPAE_PTE_XN; in arm_lpae_prot_to_pte()
483 pte |= ARM_LPAE_PTE_NS; in arm_lpae_prot_to_pte()
486 pte |= ARM_LPAE_PTE_AF; in arm_lpae_prot_to_pte()
488 return pte; in arm_lpae_prot_to_pte()
553 arm_lpae_iopte pte = *ptep++; in __arm_lpae_free_pgtable() local
555 if (!pte || iopte_leaf(pte, lvl, data->iop.fmt)) in __arm_lpae_free_pgtable()
558 __arm_lpae_free_pgtable(data, lvl + 1, iopte_deref(pte, data)); in __arm_lpae_free_pgtable()
579 arm_lpae_iopte pte, *tablep; in arm_lpae_split_blk_unmap() local
600 pte = iopte_prot(blk_pte); in arm_lpae_split_blk_unmap()
607 __arm_lpae_init_pte(data, blk_paddr, pte, lvl, 1, &tablep[i]); in arm_lpae_split_blk_unmap()
610 pte = arm_lpae_install_table(tablep, ptep, blk_pte, data); in arm_lpae_split_blk_unmap()
611 if (pte != blk_pte) { in arm_lpae_split_blk_unmap()
618 if (iopte_type(pte) != ARM_LPAE_PTE_TYPE_TABLE) in arm_lpae_split_blk_unmap()
621 tablep = iopte_deref(pte, data); in arm_lpae_split_blk_unmap()
637 arm_lpae_iopte pte; in __arm_lpae_unmap() local
647 pte = READ_ONCE(*ptep); in __arm_lpae_unmap()
648 if (WARN_ON(!pte)) in __arm_lpae_unmap()
657 pte = READ_ONCE(*ptep); in __arm_lpae_unmap()
658 if (WARN_ON(!pte)) in __arm_lpae_unmap()
663 if (!iopte_leaf(pte, lvl, iop->fmt)) { in __arm_lpae_unmap()
667 __arm_lpae_free_pgtable(data, lvl + 1, iopte_deref(pte, data)); in __arm_lpae_unmap()
677 } else if (iopte_leaf(pte, lvl, iop->fmt)) { in __arm_lpae_unmap()
682 return arm_lpae_split_blk_unmap(data, gather, iova, size, pte, in __arm_lpae_unmap()
687 ptep = iopte_deref(pte, data); in __arm_lpae_unmap()
722 arm_lpae_iopte pte, *ptep = data->pgd; in arm_lpae_iova_to_phys() local
732 pte = READ_ONCE(*ptep); in arm_lpae_iova_to_phys()
735 if (!pte) in arm_lpae_iova_to_phys()
739 if (iopte_leaf(pte, lvl, data->iop.fmt)) in arm_lpae_iova_to_phys()
743 ptep = iopte_deref(pte, data); in arm_lpae_iova_to_phys()
751 return iopte_to_paddr(pte, data) | iova; in arm_lpae_iova_to_phys()