|
8 | 8 | * 2021-01-30 lizhirui first version |
9 | 9 | * 2021-05-03 lizhirui porting to C906 |
10 | 10 | * 2023-10-12 Shell Add permission control API |
| 11 | + * 2026-02-25 Steven Porting to Standard Svpbmt |
11 | 12 | */ |
12 | 13 |
|
13 | 14 | #ifndef __RISCV_MMU_H__ |
|
19 | 20 |
|
20 | 21 | #undef PAGE_SIZE |
21 | 22 |
|
22 | | -/* C-SKY extend */ |
| 23 | +#if !CONFIG_XUANTIE_SVPBMT |
| 24 | +/* |
| 25 | + * RISC-V Standard Svpbmt Extension (Bit 61-62) |
| 26 | + * 00: PMA (Normal Memory, Cacheable) |
| 27 | + * 01: NC (Non-cacheable, Weakly-ordered) |
| 28 | + * 10: IO (Strongly-ordered, Non-cacheable, Non-idempotent) |
| 29 | + * 11: Reserved |
| 30 | + */ |
| 31 | +#define PTE_PBMT_MASK (3UL << 61) |
| 32 | +#define PTE_PBMT_PMA (0UL << 61) |
| 33 | +#define PTE_PBMT_NC (1UL << 61) |
| 34 | +#define PTE_PBMT_IO (2UL << 61) |
| 35 | +#else |
| 36 | +/* XuanTie Extension (Bit 59-63) */ |
23 | 37 | #define PTE_SEC (1UL << 59) /* Security */ |
24 | 38 | #define PTE_SHARE (1UL << 60) /* Shareable */ |
25 | 39 | #define PTE_BUF (1UL << 61) /* Bufferable */ |
26 | 40 | #define PTE_CACHE (1UL << 62) /* Cacheable */ |
27 | 41 | #define PTE_SO (1UL << 63) /* Strong Order */ |
| 42 | +#endif |
28 | 43 |
|
29 | 44 | #define PAGE_OFFSET_SHIFT 0 |
30 | 45 | #define PAGE_OFFSET_BIT 12 |
|
60 | 75 | #define PAGE_ATTR_USER (PTE_U) |
61 | 76 | #define PAGE_ATTR_SYSTEM (0) |
62 | 77 |
|
| 78 | +#if !CONFIG_XUANTIE_SVPBMT |
| 79 | +/* |
| 80 | + * Default Leaf Attribute: |
| 81 | + * RWX + User + Valid + Global + Accessed + Dirty + PMA(Cacheable) |
| 82 | + */ |
| 83 | +#define PAGE_DEFAULT_ATTR_LEAF \ |
| 84 | + (PAGE_ATTR_RWX | PAGE_ATTR_USER | PTE_V | PTE_G | PTE_PBMT_PMA | PTE_A | PTE_D) |
| 85 | + |
| 86 | +/* |
| 87 | + * Next Level Attribute: |
| 88 | + * Svpbmt spec requires PBMT bits to be 0 for non-leaf PTEs. |
| 89 | + */ |
| 90 | +#define PAGE_DEFAULT_ATTR_NEXT \ |
| 91 | + (PAGE_ATTR_NEXT_LEVEL | PTE_V | PTE_G | PTE_A | PTE_D) |
| 92 | +#else |
63 | 93 | #define PAGE_DEFAULT_ATTR_LEAF \ |
64 | 94 | (PAGE_ATTR_RWX | PAGE_ATTR_USER | PTE_V | PTE_G | PTE_SHARE | PTE_BUF | \ |
65 | 95 | PTE_CACHE | PTE_A | PTE_D) |
66 | 96 |
|
67 | 97 | #define PAGE_DEFAULT_ATTR_NEXT \ |
68 | 98 | (PAGE_ATTR_NEXT_LEVEL | PTE_V | PTE_G | PTE_SHARE | PTE_BUF | PTE_CACHE | PTE_A | PTE_D) |
| 99 | +#endif |
69 | 100 |
|
70 | 101 | #define PAGE_IS_LEAF(pte) __MASKVALUE(pte, PAGE_ATTR_RWX) |
71 | 102 |
|
|
85 | 116 | #define ARCH_VADDR_WIDTH 39 |
86 | 117 | #define SATP_MODE SATP_MODE_SV39 |
87 | 118 |
|
88 | | -//compatible to rt-smart new version |
| 119 | +#if !CONFIG_XUANTIE_SVPBMT |
| 120 | +/* |
| 121 | + * Kernel Mappings |
| 122 | + */ |
| 123 | +/* Device: IO Mode (Strongly Ordered) */ |
| 124 | +#define MMU_MAP_K_DEVICE (PTE_PBMT_IO | PTE_A | PTE_D | PTE_G | PTE_W | PTE_R | PTE_V) |
| 125 | + |
| 126 | +/* RW: Non-Cacheable (NC Mode) */ |
| 127 | +#define MMU_MAP_K_RW (PTE_PBMT_NC | PTE_A | PTE_D | PTE_G | PAGE_ATTR_RWX | PTE_V) |
| 128 | + |
| 129 | +/* RWCB: Cacheable (PMA Mode) - Normal RAM */ |
| 130 | +#define MMU_MAP_K_RWCB (PTE_PBMT_PMA | PTE_A | PTE_D | PTE_G | PAGE_ATTR_RWX | PTE_V) |
| 131 | + |
| 132 | +/* |
| 133 | + * User Mappings |
| 134 | + */ |
| 135 | +/* User RW: Non-Cacheable */ |
| 136 | +#define MMU_MAP_U_RW (PTE_PBMT_NC | PTE_U | PTE_A | PTE_D | PAGE_ATTR_RWX | PTE_V) |
| 137 | + |
| 138 | +/* User RWCB: Cacheable */ |
| 139 | +#define MMU_MAP_U_RWCB (PTE_PBMT_PMA | PTE_U | PTE_A | PTE_D | PAGE_ATTR_RWX | PTE_V) |
| 140 | + |
| 141 | +/* Early Mapping: Cacheable */ |
| 142 | +#define MMU_MAP_EARLY \ |
| 143 | + PTE_WRAP(PAGE_ATTR_RWX | PTE_G | PTE_V | PTE_PBMT_PMA) |
| 144 | +#else |
89 | 145 | #define MMU_MAP_K_DEVICE (PTE_BUF | PTE_SO | PTE_A | PTE_D | PTE_G | PTE_W | PTE_R | PTE_V) |
90 | 146 | #define MMU_MAP_K_RW (PTE_SHARE | PTE_A | PTE_D | PTE_G | PAGE_ATTR_RWX | PTE_V) |
91 | 147 | #define MMU_MAP_K_RWCB (MMU_MAP_K_RW | PTE_BUF | PTE_CACHE) |
|
94 | 150 | #define MMU_MAP_U_RWCB (MMU_MAP_U_RW | PTE_BUF | PTE_CACHE) |
95 | 151 | #define MMU_MAP_EARLY \ |
96 | 152 | PTE_WRAP(PAGE_ATTR_RWX | PTE_G | PTE_V | PTE_CACHE | PTE_SHARE | PTE_BUF) |
| 153 | +#endif |
| 154 | + |
97 | 155 | #define MMU_MAP_TRACE(attr) (attr) |
98 | 156 |
|
99 | 157 | #define PTE_XWR_MASK 0xe |
|
0 commit comments