18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef _ASM_POWERPC_BOOK3S_64_PGTABLE_64K_H 38c2ecf20Sopenharmony_ci#define _ASM_POWERPC_BOOK3S_64_PGTABLE_64K_H 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#ifndef __ASSEMBLY__ 68c2ecf20Sopenharmony_ci#ifdef CONFIG_HUGETLB_PAGE 78c2ecf20Sopenharmony_ci/* 88c2ecf20Sopenharmony_ci * We have PGD_INDEX_SIZ = 12 and PTE_INDEX_SIZE = 8, so that we can have 98c2ecf20Sopenharmony_ci * 16GB hugepage pte in PGD and 16MB hugepage pte at PMD; 108c2ecf20Sopenharmony_ci * 118c2ecf20Sopenharmony_ci * Defined in such a way that we can optimize away code block at build time 128c2ecf20Sopenharmony_ci * if CONFIG_HUGETLB_PAGE=n. 138c2ecf20Sopenharmony_ci * 148c2ecf20Sopenharmony_ci * returns true for pmd migration entries, THP, devmap, hugetlb 158c2ecf20Sopenharmony_ci * But compile time dependent on CONFIG_HUGETLB_PAGE 168c2ecf20Sopenharmony_ci */ 178c2ecf20Sopenharmony_cistatic inline int pmd_huge(pmd_t pmd) 188c2ecf20Sopenharmony_ci{ 198c2ecf20Sopenharmony_ci /* 208c2ecf20Sopenharmony_ci * leaf pte for huge page 218c2ecf20Sopenharmony_ci */ 228c2ecf20Sopenharmony_ci return !!(pmd_raw(pmd) & cpu_to_be64(_PAGE_PTE)); 238c2ecf20Sopenharmony_ci} 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_cistatic inline int pud_huge(pud_t pud) 268c2ecf20Sopenharmony_ci{ 278c2ecf20Sopenharmony_ci /* 288c2ecf20Sopenharmony_ci * leaf pte for huge page 298c2ecf20Sopenharmony_ci */ 308c2ecf20Sopenharmony_ci return !!(pud_raw(pud) & cpu_to_be64(_PAGE_PTE)); 318c2ecf20Sopenharmony_ci} 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_cistatic inline int pgd_huge(pgd_t pgd) 348c2ecf20Sopenharmony_ci{ 358c2ecf20Sopenharmony_ci /* 368c2ecf20Sopenharmony_ci * leaf pte for huge page 378c2ecf20Sopenharmony_ci */ 388c2ecf20Sopenharmony_ci return !!(pgd_raw(pgd) & cpu_to_be64(_PAGE_PTE)); 398c2ecf20Sopenharmony_ci} 408c2ecf20Sopenharmony_ci#define pgd_huge pgd_huge 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci/* 438c2ecf20Sopenharmony_ci * With 64k page size, we have hugepage ptes in the pgd and pmd entries. We don't 448c2ecf20Sopenharmony_ci * need to setup hugepage directory for them. Our pte and page directory format 458c2ecf20Sopenharmony_ci * enable us to have this enabled. 468c2ecf20Sopenharmony_ci */ 478c2ecf20Sopenharmony_cistatic inline int hugepd_ok(hugepd_t hpd) 488c2ecf20Sopenharmony_ci{ 498c2ecf20Sopenharmony_ci return 0; 508c2ecf20Sopenharmony_ci} 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_ci#define is_hugepd(pdep) 0 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_ci/* 558c2ecf20Sopenharmony_ci * This should never get called 568c2ecf20Sopenharmony_ci */ 578c2ecf20Sopenharmony_cistatic inline int get_hugepd_cache_index(int index) 588c2ecf20Sopenharmony_ci{ 598c2ecf20Sopenharmony_ci BUG(); 608c2ecf20Sopenharmony_ci} 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci#endif /* CONFIG_HUGETLB_PAGE */ 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_cistatic inline int remap_4k_pfn(struct vm_area_struct *vma, unsigned long addr, 658c2ecf20Sopenharmony_ci unsigned long pfn, pgprot_t prot) 668c2ecf20Sopenharmony_ci{ 678c2ecf20Sopenharmony_ci if (radix_enabled()) 688c2ecf20Sopenharmony_ci BUG(); 698c2ecf20Sopenharmony_ci return hash__remap_4k_pfn(vma, addr, pfn, prot); 708c2ecf20Sopenharmony_ci} 718c2ecf20Sopenharmony_ci#endif /* __ASSEMBLY__ */ 728c2ecf20Sopenharmony_ci#endif /*_ASM_POWERPC_BOOK3S_64_PGTABLE_64K_H */ 73