14726dd60SMichal Simek /* SPDX-License-Identifier: GPL-2.0 */
26a3cece5SMichal Simek /*
31f84e1eaSMichal Simek  * Copyright (C) 2008-2009 Michal Simek <monstr@monstr.eu>
41f84e1eaSMichal Simek  * Copyright (C) 2008-2009 PetaLogix
56a3cece5SMichal Simek  * Copyright (C) 2006 Atmark Techno, Inc.
66a3cece5SMichal Simek  */
76a3cece5SMichal Simek 
86a3cece5SMichal Simek #ifndef _ASM_MICROBLAZE_PGALLOC_H
96a3cece5SMichal Simek #define _ASM_MICROBLAZE_PGALLOC_H
106a3cece5SMichal Simek 
111f84e1eaSMichal Simek #ifdef CONFIG_MMU
121f84e1eaSMichal Simek 
131f84e1eaSMichal Simek #include <linux/kernel.h>	/* For min/max macros */
141f84e1eaSMichal Simek #include <linux/highmem.h>
151f84e1eaSMichal Simek #include <asm/setup.h>
161f84e1eaSMichal Simek #include <asm/io.h>
171f84e1eaSMichal Simek #include <asm/page.h>
181f84e1eaSMichal Simek #include <asm/cache.h>
1979bf3a13SMichal Simek #include <asm/pgtable.h>
201f84e1eaSMichal Simek 
211b9a9d85SMike Rapoport #define __HAVE_ARCH_PTE_ALLOC_ONE_KERNEL
221b9a9d85SMike Rapoport #include <asm-generic/pgalloc.h>
231b9a9d85SMike Rapoport 
241f84e1eaSMichal Simek extern void __bad_pte(pmd_t *pmd);
251f84e1eaSMichal Simek 
2613224794SNicholas Piggin static inline pgd_t *get_pgd(void)
271f84e1eaSMichal Simek {
2813224794SNicholas Piggin 	return (pgd_t *)__get_free_pages(GFP_KERNEL|__GFP_ZERO, 0);
291f84e1eaSMichal Simek }
301f84e1eaSMichal Simek 
3113224794SNicholas Piggin static inline void free_pgd(pgd_t *pgd)
321f84e1eaSMichal Simek {
331f84e1eaSMichal Simek 	free_page((unsigned long)pgd);
341f84e1eaSMichal Simek }
351f84e1eaSMichal Simek 
3613224794SNicholas Piggin #define pgd_free(mm, pgd)	free_pgd(pgd)
3713224794SNicholas Piggin #define pgd_alloc(mm)		get_pgd()
381f84e1eaSMichal Simek 
391f84e1eaSMichal Simek #define pmd_pgtable(pmd)	pmd_page(pmd)
401f84e1eaSMichal Simek 
414cf58924SJoel Fernandes (Google) extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm);
421f84e1eaSMichal Simek 
439e1b32caSBenjamin Herrenschmidt #define __pte_free_tlb(tlb, pte, addr)	pte_free((tlb)->mm, (pte))
441f84e1eaSMichal Simek 
455f0cb3e0SMichal Simek #define pmd_populate(mm, pmd, pte) \
465f0cb3e0SMichal Simek 			(pmd_val(*(pmd)) = (unsigned long)page_address(pte))
471f84e1eaSMichal Simek 
481f84e1eaSMichal Simek #define pmd_populate_kernel(mm, pmd, pte) \
491f84e1eaSMichal Simek 		(pmd_val(*(pmd)) = (unsigned long) (pte))
501f84e1eaSMichal Simek 
511f84e1eaSMichal Simek #endif /* CONFIG_MMU */
521f84e1eaSMichal Simek 
536a3cece5SMichal Simek #endif /* _ASM_MICROBLAZE_PGALLOC_H */
54