.. | .. |
---|
1 | | -// SPDX-License-Identifier: GPL-2.0 |
---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0 */ |
---|
2 | 2 | // Copyright (C) 2005-2017 Andes Technology Corporation |
---|
3 | 3 | |
---|
4 | 4 | #ifndef _ASMNDS32_PGTABLE_H |
---|
5 | 5 | #define _ASMNDS32_PGTABLE_H |
---|
6 | 6 | |
---|
7 | | -#define __PAGETABLE_PMD_FOLDED 1 |
---|
8 | | -#include <asm-generic/4level-fixup.h> |
---|
9 | | -#include <asm-generic/sizes.h> |
---|
| 7 | +#include <asm-generic/pgtable-nopmd.h> |
---|
| 8 | +#include <linux/sizes.h> |
---|
10 | 9 | |
---|
11 | 10 | #include <asm/memory.h> |
---|
12 | 11 | #include <asm/nds32.h> |
---|
13 | 12 | #ifndef __ASSEMBLY__ |
---|
14 | 13 | #include <asm/fixmap.h> |
---|
15 | | -#include <asm/io.h> |
---|
16 | 14 | #include <nds32_intrinsic.h> |
---|
17 | 15 | #endif |
---|
18 | 16 | |
---|
19 | 17 | #ifdef CONFIG_ANDES_PAGE_SIZE_4KB |
---|
20 | 18 | #define PGDIR_SHIFT 22 |
---|
21 | 19 | #define PTRS_PER_PGD 1024 |
---|
22 | | -#define PMD_SHIFT 22 |
---|
23 | | -#define PTRS_PER_PMD 1 |
---|
24 | 20 | #define PTRS_PER_PTE 1024 |
---|
25 | 21 | #endif |
---|
26 | 22 | |
---|
27 | 23 | #ifdef CONFIG_ANDES_PAGE_SIZE_8KB |
---|
28 | 24 | #define PGDIR_SHIFT 24 |
---|
29 | 25 | #define PTRS_PER_PGD 256 |
---|
30 | | -#define PMD_SHIFT 24 |
---|
31 | | -#define PTRS_PER_PMD 1 |
---|
32 | 26 | #define PTRS_PER_PTE 2048 |
---|
33 | 27 | #endif |
---|
34 | 28 | |
---|
35 | 29 | #ifndef __ASSEMBLY__ |
---|
36 | 30 | extern void __pte_error(const char *file, int line, unsigned long val); |
---|
37 | | -extern void __pmd_error(const char *file, int line, unsigned long val); |
---|
38 | 31 | extern void __pgd_error(const char *file, int line, unsigned long val); |
---|
39 | 32 | |
---|
40 | 33 | #define pte_ERROR(pte) __pte_error(__FILE__, __LINE__, pte_val(pte)) |
---|
41 | | -#define pmd_ERROR(pmd) __pmd_error(__FILE__, __LINE__, pmd_val(pmd)) |
---|
42 | 34 | #define pgd_ERROR(pgd) __pgd_error(__FILE__, __LINE__, pgd_val(pgd)) |
---|
43 | 35 | #endif /* !__ASSEMBLY__ */ |
---|
44 | 36 | |
---|
.. | .. |
---|
130 | 122 | #define _PAGE_CACHE _PAGE_C_MEM_WB |
---|
131 | 123 | #endif |
---|
132 | 124 | |
---|
| 125 | +#define _PAGE_IOREMAP \ |
---|
| 126 | + (_PAGE_V | _PAGE_M_KRW | _PAGE_D | _PAGE_G | _PAGE_C_DEV) |
---|
| 127 | + |
---|
133 | 128 | /* |
---|
134 | 129 | * + Level 1 descriptor (PMD) |
---|
135 | 130 | */ |
---|
.. | .. |
---|
191 | 186 | #define pte_clear(mm,addr,ptep) set_pte_at((mm),(addr),(ptep), __pte(0)) |
---|
192 | 187 | #define pte_page(pte) (pfn_to_page(pte_pfn(pte))) |
---|
193 | 188 | |
---|
194 | | -#define pte_index(address) (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) |
---|
195 | | -#define pte_offset_kernel(dir, address) ((pte_t *)pmd_page_kernel(*(dir)) + pte_index(address)) |
---|
196 | | -#define pte_offset_map(dir, address) ((pte_t *)page_address(pmd_page(*(dir))) + pte_index(address)) |
---|
197 | | -#define pte_offset_map_nested(dir, address) pte_offset_map(dir, address) |
---|
198 | | -#define pmd_page_kernel(pmd) ((unsigned long) __va(pmd_val(pmd) & PAGE_MASK)) |
---|
199 | | - |
---|
200 | | -#define pte_unmap(pte) do { } while (0) |
---|
201 | | -#define pte_unmap_nested(pte) do { } while (0) |
---|
202 | | - |
---|
203 | | -#define pmd_off_k(address) pmd_offset(pgd_offset_k(address), address) |
---|
| 189 | +static unsigned long pmd_page_vaddr(pmd_t pmd) |
---|
| 190 | +{ |
---|
| 191 | + return ((unsigned long) __va(pmd_val(pmd) & PAGE_MASK)); |
---|
| 192 | +} |
---|
204 | 193 | |
---|
205 | 194 | #define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval) |
---|
206 | 195 | /* |
---|
.. | .. |
---|
291 | 280 | PTE_BIT_FUNC(mkdirty, |=_PAGE_D); |
---|
292 | 281 | PTE_BIT_FUNC(mkold, &=~_PAGE_YOUNG); |
---|
293 | 282 | PTE_BIT_FUNC(mkyoung, |=_PAGE_YOUNG); |
---|
294 | | -static inline int pte_special(pte_t pte) |
---|
295 | | -{ |
---|
296 | | - return 0; |
---|
297 | | -} |
---|
298 | | - |
---|
299 | | -static inline pte_t pte_mkspecial(pte_t pte) |
---|
300 | | -{ |
---|
301 | | - return pte; |
---|
302 | | -} |
---|
303 | 283 | |
---|
304 | 284 | /* |
---|
305 | 285 | * Mark the prot value as uncacheable and unbufferable. |
---|
.. | .. |
---|
360 | 340 | * |
---|
361 | 341 | */ |
---|
362 | 342 | |
---|
363 | | -/* to find an entry in a page-table-directory */ |
---|
364 | | -#define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1)) |
---|
365 | | -#define pgd_offset(mm, address) ((mm)->pgd + pgd_index(address)) |
---|
366 | | -/* to find an entry in a kernel page-table-directory */ |
---|
367 | | -#define pgd_offset_k(addr) pgd_offset(&init_mm, addr) |
---|
368 | | - |
---|
369 | | -/* Find an entry in the second-level page table.. */ |
---|
370 | | -#define pmd_offset(dir, addr) ((pmd_t *)(dir)) |
---|
371 | | - |
---|
372 | 343 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) |
---|
373 | 344 | { |
---|
374 | 345 | const unsigned long mask = 0xfff; |
---|
.. | .. |
---|
391 | 362 | /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ |
---|
392 | 363 | #define kern_addr_valid(addr) (1) |
---|
393 | 364 | |
---|
394 | | -#include <asm-generic/pgtable.h> |
---|
395 | | - |
---|
396 | 365 | /* |
---|
397 | 366 | * We provide our own arch_get_unmapped_area to cope with VIPT caches. |
---|
398 | 367 | */ |
---|
.. | .. |
---|
402 | 371 | * remap a physical address `phys' of size `size' with page protection `prot' |
---|
403 | 372 | * into virtual address `from' |
---|
404 | 373 | */ |
---|
405 | | - |
---|
406 | | -#define pgtable_cache_init() do { } while (0) |
---|
407 | 374 | |
---|
408 | 375 | #endif /* !__ASSEMBLY__ */ |
---|
409 | 376 | |
---|