hc
2024-05-10 9999e48639b3cecb08ffb37358bcba3b48161b29
kernel/arch/riscv/include/asm/page.h
....@@ -1,17 +1,9 @@
1
+/* SPDX-License-Identifier: GPL-2.0-only */
12 /*
23 * Copyright (C) 2009 Chen Liqin <liqin.chen@sunplusct.com>
34 * Copyright (C) 2012 Regents of the University of California
45 * Copyright (C) 2017 SiFive
56 * Copyright (C) 2017 XiaojingZhu <zhuxiaoj@ict.ac.cn>
6
- *
7
- * This program is free software; you can redistribute it and/or
8
- * modify it under the terms of the GNU General Public License
9
- * as published by the Free Software Foundation, version 2.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- * GNU General Public License for more details.
157 */
168
179 #ifndef _ASM_RISCV_PAGE_H
....@@ -23,6 +15,16 @@
2315 #define PAGE_SHIFT (12)
2416 #define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT)
2517 #define PAGE_MASK (~(PAGE_SIZE - 1))
18
+
19
+#ifdef CONFIG_64BIT
20
+#define HUGE_MAX_HSTATE 2
21
+#else
22
+#define HUGE_MAX_HSTATE 1
23
+#endif
24
+#define HPAGE_SHIFT PMD_SHIFT
25
+#define HPAGE_SIZE (_AC(1, UL) << HPAGE_SHIFT)
26
+#define HPAGE_MASK (~(HPAGE_SIZE - 1))
27
+#define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT)
2628
2729 /*
2830 * PAGE_OFFSET -- the first address of the first page of memory.
....@@ -80,20 +82,38 @@
8082 #define __pgd(x) ((pgd_t) { (x) })
8183 #define __pgprot(x) ((pgprot_t) { (x) })
8284
83
-#ifdef CONFIG_64BITS
85
+#ifdef CONFIG_64BIT
8486 #define PTE_FMT "%016lx"
8587 #else
8688 #define PTE_FMT "%08lx"
8789 #endif
8890
91
+#ifdef CONFIG_MMU
8992 extern unsigned long va_pa_offset;
9093 extern unsigned long pfn_base;
94
+#define ARCH_PFN_OFFSET (pfn_base)
95
+#else
96
+#define va_pa_offset 0
97
+#define ARCH_PFN_OFFSET (PAGE_OFFSET >> PAGE_SHIFT)
98
+#endif /* CONFIG_MMU */
9199
92100 extern unsigned long max_low_pfn;
93101 extern unsigned long min_low_pfn;
94102
95
-#define __pa(x) ((unsigned long)(x) - va_pa_offset)
96
-#define __va(x) ((void *)((unsigned long) (x) + va_pa_offset))
103
+#define __pa_to_va_nodebug(x) ((void *)((unsigned long) (x) + va_pa_offset))
104
+#define __va_to_pa_nodebug(x) ((unsigned long)(x) - va_pa_offset)
105
+
106
+#ifdef CONFIG_DEBUG_VIRTUAL
107
+extern phys_addr_t __virt_to_phys(unsigned long x);
108
+extern phys_addr_t __phys_addr_symbol(unsigned long x);
109
+#else
110
+#define __virt_to_phys(x) __va_to_pa_nodebug(x)
111
+#define __phys_addr_symbol(x) __va_to_pa_nodebug(x)
112
+#endif /* CONFIG_DEBUG_VIRTUAL */
113
+
114
+#define __pa_symbol(x) __phys_addr_symbol(RELOC_HIDE((unsigned long)(x), 0))
115
+#define __pa(x) __virt_to_phys((unsigned long)(x))
116
+#define __va(x) ((void *)__pa_to_va_nodebug((phys_addr_t)(x)))
97117
98118 #define phys_to_pfn(phys) (PFN_DOWN(phys))
99119 #define pfn_to_phys(pfn) (PFN_PHYS(pfn))
....@@ -108,10 +128,10 @@
108128 #define page_to_bus(page) (page_to_phys(page))
109129 #define phys_to_page(paddr) (pfn_to_page(phys_to_pfn(paddr)))
110130
131
+#ifdef CONFIG_FLATMEM
111132 #define pfn_valid(pfn) \
112
- (((pfn) >= pfn_base) && (((pfn)-pfn_base) < max_mapnr))
113
-
114
-#define ARCH_PFN_OFFSET (pfn_base)
133
+ (((pfn) >= ARCH_PFN_OFFSET) && (((pfn) - ARCH_PFN_OFFSET) < max_mapnr))
134
+#endif
115135
116136 #endif /* __ASSEMBLY__ */
117137
....@@ -120,14 +140,9 @@
120140 (unsigned long)(_addr) >= PAGE_OFFSET && pfn_valid(virt_to_pfn(_addr)); \
121141 })
122142
123
-#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | \
124
- VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
143
+#define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_NON_EXEC
125144
126145 #include <asm-generic/memory_model.h>
127146 #include <asm-generic/getorder.h>
128
-
129
-/* vDSO support */
130
-/* We do define AT_SYSINFO_EHDR but don't use the gate mechanism */
131
-#define __HAVE_ARCH_GATE_AREA
132147
133148 #endif /* _ASM_RISCV_PAGE_H */