xref: /openbmc/linux/arch/openrisc/include/asm/page.h (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
12874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
261e85e36SJonas Bonn /*
361e85e36SJonas Bonn  * OpenRISC Linux
461e85e36SJonas Bonn  *
561e85e36SJonas Bonn  * Linux architectural port borrowing liberally from similar works of
661e85e36SJonas Bonn  * others.  All original copyrights apply as per the original source
761e85e36SJonas Bonn  * declaration.
861e85e36SJonas Bonn  *
961e85e36SJonas Bonn  * OpenRISC implementation:
1061e85e36SJonas Bonn  * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com>
1161e85e36SJonas Bonn  * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se>
1261e85e36SJonas Bonn  * et al.
1361e85e36SJonas Bonn  */
1461e85e36SJonas Bonn 
1561e85e36SJonas Bonn #ifndef __ASM_OPENRISC_PAGE_H
1661e85e36SJonas Bonn #define __ASM_OPENRISC_PAGE_H
1761e85e36SJonas Bonn 
1861e85e36SJonas Bonn 
1961e85e36SJonas Bonn /* PAGE_SHIFT determines the page size */
2061e85e36SJonas Bonn 
2161e85e36SJonas Bonn #define PAGE_SHIFT      13
2261e85e36SJonas Bonn #ifdef __ASSEMBLY__
2361e85e36SJonas Bonn #define PAGE_SIZE       (1 << PAGE_SHIFT)
2461e85e36SJonas Bonn #else
2561e85e36SJonas Bonn #define PAGE_SIZE       (1UL << PAGE_SHIFT)
2661e85e36SJonas Bonn #endif
2761e85e36SJonas Bonn #define PAGE_MASK       (~(PAGE_SIZE-1))
2861e85e36SJonas Bonn 
2961e85e36SJonas Bonn #define PAGE_OFFSET	0xc0000000
3061e85e36SJonas Bonn #define KERNELBASE	PAGE_OFFSET
3161e85e36SJonas Bonn 
3261e85e36SJonas Bonn /* This is not necessarily the right place for this, but it's needed by
3361e85e36SJonas Bonn  * drivers/of/fdt.c
3461e85e36SJonas Bonn  */
3561e85e36SJonas Bonn #include <asm/setup.h>
3661e85e36SJonas Bonn 
3761e85e36SJonas Bonn #ifndef __ASSEMBLY__
3861e85e36SJonas Bonn 
3961e85e36SJonas Bonn #define clear_page(page)	memset((page), 0, PAGE_SIZE)
4061e85e36SJonas Bonn #define copy_page(to, from)	memcpy((to), (from), PAGE_SIZE)
4161e85e36SJonas Bonn 
4261e85e36SJonas Bonn #define clear_user_page(page, vaddr, pg)        clear_page(page)
4361e85e36SJonas Bonn #define copy_user_page(to, from, vaddr, pg)     copy_page(to, from)
4461e85e36SJonas Bonn 
4561e85e36SJonas Bonn /*
4661e85e36SJonas Bonn  * These are used to make use of C type-checking..
4761e85e36SJonas Bonn  */
4861e85e36SJonas Bonn typedef struct {
4961e85e36SJonas Bonn 	unsigned long pte;
5061e85e36SJonas Bonn } pte_t;
5161e85e36SJonas Bonn typedef struct {
5261e85e36SJonas Bonn 	unsigned long pgd;
5361e85e36SJonas Bonn } pgd_t;
5461e85e36SJonas Bonn typedef struct {
5561e85e36SJonas Bonn 	unsigned long pgprot;
5661e85e36SJonas Bonn } pgprot_t;
5761e85e36SJonas Bonn typedef struct page *pgtable_t;
5861e85e36SJonas Bonn 
5961e85e36SJonas Bonn #define pte_val(x)	((x).pte)
6061e85e36SJonas Bonn #define pgd_val(x)	((x).pgd)
6161e85e36SJonas Bonn #define pgprot_val(x)	((x).pgprot)
6261e85e36SJonas Bonn 
6361e85e36SJonas Bonn #define __pte(x)	((pte_t) { (x) })
6461e85e36SJonas Bonn #define __pgd(x)	((pgd_t) { (x) })
6561e85e36SJonas Bonn #define __pgprot(x)	((pgprot_t) { (x) })
6661e85e36SJonas Bonn 
6761e85e36SJonas Bonn #endif /* !__ASSEMBLY__ */
6861e85e36SJonas Bonn 
6961e85e36SJonas Bonn 
7061e85e36SJonas Bonn #ifndef __ASSEMBLY__
7161e85e36SJonas Bonn 
7261e85e36SJonas Bonn #define __va(x) ((void *)((unsigned long)(x) + PAGE_OFFSET))
7361e85e36SJonas Bonn #define __pa(x) ((unsigned long) (x) - PAGE_OFFSET)
7461e85e36SJonas Bonn 
virt_to_pfn(const void * kaddr)75*232ba163SLinus Walleij static inline unsigned long virt_to_pfn(const void *kaddr)
76*232ba163SLinus Walleij {
77*232ba163SLinus Walleij 	return __pa(kaddr) >> PAGE_SHIFT;
78*232ba163SLinus Walleij }
79*232ba163SLinus Walleij 
pfn_to_virt(unsigned long pfn)80*232ba163SLinus Walleij static inline void * pfn_to_virt(unsigned long pfn)
81*232ba163SLinus Walleij {
82*232ba163SLinus Walleij 	return (void *)((unsigned long)__va(pfn) << PAGE_SHIFT);
83*232ba163SLinus Walleij }
8461e85e36SJonas Bonn 
8561e85e36SJonas Bonn #define virt_to_page(addr) \
8661e85e36SJonas Bonn 	(mem_map + (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT))
8761e85e36SJonas Bonn 
8861e85e36SJonas Bonn #define page_to_phys(page)      ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT)
8961e85e36SJonas Bonn 
902f099a28SJonas Bonn #define virt_addr_valid(kaddr)	(pfn_valid(virt_to_pfn(kaddr)))
9161e85e36SJonas Bonn 
9261e85e36SJonas Bonn #endif /* __ASSEMBLY__ */
9361e85e36SJonas Bonn 
9461e85e36SJonas Bonn #include <asm-generic/memory_model.h>
9561e85e36SJonas Bonn #include <asm-generic/getorder.h>
9661e85e36SJonas Bonn 
9761e85e36SJonas Bonn #endif /* __ASM_OPENRISC_PAGE_H */
98