xref: /kvm-unit-tests/lib/riscv/asm/pgtable.h (revision 48d5952451de62a4db23cf73024f702cf1a64fc3)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 #ifndef _ASMRISCV_PGTABLE_H_
3 #define _ASMRISCV_PGTABLE_H_
4 #include <linux/const.h>
5 
6 #if __riscv_xlen == 32
7 #define SATP_PPN		_AC(0x003FFFFF, UL)
8 #define SATP_MODE_32		_AC(0x80000000, UL)
9 #define SATP_MODE_SHIFT		31
10 #define NR_LEVELS		2
11 #define PGDIR_BITS		10
12 #define PGDIR_MASK		_AC(0x3FF, UL)
13 #define PTE_PPN			_AC(0xFFFFFC00, UL)
14 
15 #define SATP_MODE_DEFAULT	SATP_MODE_32
16 
17 #else
18 #define SATP_PPN		_AC(0x00000FFFFFFFFFFF, UL)
19 #define SATP_MODE_39		_AC(0x8000000000000000, UL)
20 #define SATP_MODE_SHIFT		60
21 #define NR_LEVELS		3
22 #define PGDIR_BITS		9
23 #define PGDIR_MASK		_AC(0x1FF, UL)
24 #define PTE_PPN			_AC(0x3FFFFFFFFFFC00, UL)
25 
26 #define SATP_MODE_DEFAULT	SATP_MODE_39
27 
28 #endif
29 
30 #define PPN_SHIFT		10
31 
32 #define _PAGE_PRESENT		(1 << 0)
33 #define _PAGE_READ		(1 << 1)
34 #define _PAGE_WRITE		(1 << 2)
35 #define _PAGE_EXEC		(1 << 3)
36 #define _PAGE_USER		(1 << 4)
37 #define _PAGE_GLOBAL		(1 << 5)
38 #define _PAGE_ACCESSED		(1 << 6)
39 #define _PAGE_DIRTY		(1 << 7)
40 #define _PAGE_SOFT		(3 << 8)
41 
42 #endif /* _ASMRISCV_PGTABLE_H_ */
43