|
19 | 19 |
|
20 | 20 | #undef PAGE_SIZE |
21 | 21 |
|
22 | | -/* C-SKY extend */ |
| 22 | +#if !CONFIG_XUANTIE_SVPBMT |
| 23 | +/* |
| 24 | + * RISC-V Standard Svpbmt Extension (Bit 61-62) |
| 25 | + * 00: PMA (Normal Memory, Cacheable, No change to implied PMA memory type) |
| 26 | + * 01: NC (Non-cacheable, Weakly-ordered) |
| 27 | + * 10: IO (Strongly-ordered, Non-cacheable, Non-idempotent) |
| 28 | + * 11: Reserved |
| 29 | + */ |
| 30 | +#define PTE_PBMT_PMA (0UL << 61) |
| 31 | +#define PTE_PBMT_NC (1UL << 61) |
| 32 | +#define PTE_PBMT_IO (2UL << 61) |
| 33 | +#define PTE_PBMT_MASK (3UL << 61) |
| 34 | +#else |
| 35 | +/* XuanTie Extension (Bit 59-63) */ |
23 | 36 | #define PTE_SEC (1UL << 59) /* Security */ |
24 | 37 | #define PTE_SHARE (1UL << 60) /* Shareable */ |
25 | 38 | #define PTE_BUF (1UL << 61) /* Bufferable */ |
26 | 39 | #define PTE_CACHE (1UL << 62) /* Cacheable */ |
27 | 40 | #define PTE_SO (1UL << 63) /* Strong Order */ |
| 41 | +/* Compatible with Standard Svpbmt */ |
| 42 | +#define PTE_PBMT_PMA (PTE_CACHE | PTE_BUF | PTE_SHARE) |
| 43 | +#define PTE_PBMT_NC (PTE_BUF | PTE_SHARE) |
| 44 | +#define PTE_PBMT_IO (PTE_SO | PTE_SHARE) |
| 45 | +#define PTE_PBMT_MASK (PTE_PBMT_PMA | PTE_PBMT_IO | PTE_SEC) |
| 46 | +#endif |
28 | 47 |
|
29 | 48 | #define PAGE_OFFSET_SHIFT 0 |
30 | 49 | #define PAGE_OFFSET_BIT 12 |
|
65 | 84 | #define PAGE_ATTR_CB (PTE_BUF | PTE_CACHE) |
66 | 85 | #define PAGE_ATTR_DEV (PTE_SO) |
67 | 86 |
|
| 87 | +#if !CONFIG_XUANTIE_SVPBMT |
| 88 | +/* |
| 89 | + * Default Leaf Attribute: |
| 90 | + * RWX + User + Valid + Global + Accessed + Dirty + PMA(Cacheable) |
| 91 | + */ |
| 92 | +#define PAGE_DEFAULT_ATTR_LEAF \ |
| 93 | + (PAGE_ATTR_RWX | PAGE_ATTR_USER | PTE_V | PTE_G | PTE_PBMT_PMA | PTE_A | PTE_D) |
| 94 | +#else |
68 | 95 | #define PAGE_DEFAULT_ATTR_LEAF \ |
69 | 96 | (PTE_SHARE | PTE_BUF | PTE_CACHE | PTE_A | PTE_D | PTE_G | PTE_U | \ |
70 | 97 | PAGE_ATTR_RWX | PTE_V) |
71 | | -#define PAGE_DEFAULT_ATTR_NEXT \ |
72 | | - (PTE_SHARE | PTE_BUF | PTE_CACHE | PTE_A | PTE_D | PTE_G | PTE_V) |
| 98 | +#endif |
| 99 | + |
| 100 | +#define PAGE_DEFAULT_ATTR_NEXT (PAGE_ATTR_NEXT_LEVEL | PTE_V | PTE_G) |
73 | 101 |
|
74 | 102 | #define PAGE_IS_LEAF(pte) __MASKVALUE(pte, PAGE_ATTR_RWX) |
75 | 103 |
|
|
89 | 117 | #define ARCH_VADDR_WIDTH 39 |
90 | 118 | #define SATP_MODE SATP_MODE_SV39 |
91 | 119 |
|
| 120 | +#if !CONFIG_XUANTIE_SVPBMT |
| 121 | +/* |
| 122 | + * Kernel Mappings |
| 123 | + */ |
| 124 | +/* Device: IO Mode (Strongly Ordered) */ |
| 125 | +#define MMU_MAP_K_DEVICE (PTE_PBMT_IO | PTE_A | PTE_D | PTE_G | PTE_W | PTE_R | PTE_V) |
| 126 | + |
| 127 | +/* RW: Non-Cacheable (NC Mode) */ |
| 128 | +#define MMU_MAP_K_RW (PTE_PBMT_NC | PTE_A | PTE_D | PTE_G | PAGE_ATTR_RWX | PTE_V) |
| 129 | + |
| 130 | +/* RWCB: Cacheable (PMA Mode) - Normal RAM */ |
| 131 | +#define MMU_MAP_K_RWCB (PTE_PBMT_PMA | PTE_A | PTE_D | PTE_G | PAGE_ATTR_RWX | PTE_V) |
| 132 | + |
| 133 | +/* |
| 134 | + * User Mappings |
| 135 | + */ |
| 136 | +/* User RW: Non-Cacheable */ |
| 137 | +#define MMU_MAP_U_RW (PTE_PBMT_NC | PTE_U | PTE_A | PTE_D | PAGE_ATTR_RWX | PTE_V) |
| 138 | + |
| 139 | +/* User RWCB: Cacheable */ |
| 140 | +#define MMU_MAP_U_RWCB (PTE_PBMT_PMA | PTE_U | PTE_A | PTE_D | PAGE_ATTR_RWX | PTE_V) |
| 141 | + |
| 142 | +/* User ROCB: Cacheable */ |
| 143 | +#define MMU_MAP_U_ROCB (PTE_PBMT_PMA | PTE_U | PTE_A | PTE_D | PAGE_ATTR_READONLY | PTE_V) |
| 144 | + |
| 145 | +/* User RWCB: Cacheable */ |
| 146 | +#define MMU_MAP_U_RWCB_XN (PTE_PBMT_PMA | PTE_U | PTE_A | PTE_D | PAGE_ATTR_XN | PTE_V) |
| 147 | + |
| 148 | +/* Early Mapping: Cacheable */ |
| 149 | +#define MMU_MAP_EARLY \ |
| 150 | + PTE_WRAP(PAGE_ATTR_RWX | PTE_G | PTE_V | PTE_PBMT_PMA) |
| 151 | +#else |
92 | 152 | #define MMU_MAP_K_DEVICE PTE_WRAP(PAGE_ATTR_DEV | PTE_G | PAGE_ATTR_XN | PTE_V) |
93 | 153 | #define MMU_MAP_K_RWCB PTE_WRAP(PAGE_ATTR_CB | PTE_G | PAGE_ATTR_RWX | PTE_V) |
94 | 154 | #define MMU_MAP_K_RW PTE_WRAP(PTE_G | PAGE_ATTR_RWX | PTE_V) |
|
99 | 159 | #define MMU_MAP_U_RW PTE_WRAP(PTE_U | PAGE_ATTR_RWX | PTE_V) |
100 | 160 | #define MMU_MAP_EARLY \ |
101 | 161 | PTE_WRAP(PAGE_ATTR_RWX | PTE_G | PTE_V | PTE_CACHE | PTE_SHARE | PTE_BUF) |
| 162 | +#endif |
| 163 | + |
102 | 164 | #define MMU_MAP_TRACE(attr) (attr) |
103 | 165 |
|
104 | 166 | #define PTE_XWR_MASK 0xe |
|
0 commit comments