Skip to content

Commit 0dfc5f3

Browse files
goodnorningRbb666
authored andcommitted
feat[libcpu][t-head][c908]: Support RISC-V Standard Svpbmt Extension For C908;
1 parent 7247a45 commit 0dfc5f3

File tree

1 file changed

+60
-2
lines changed

1 file changed

+60
-2
lines changed

libcpu/risc-v/t-head/c908/riscv_mmu.h

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
* 2021-01-30 lizhirui first version
99
* 2021-05-03 lizhirui porting to C906
1010
* 2023-10-12 Shell Add permission control API
11+
* 2026-02-25 Steven Porting to Standard Svpbmt
1112
*/
1213

1314
#ifndef __RISCV_MMU_H__
@@ -19,12 +20,26 @@
1920

2021
#undef PAGE_SIZE
2122

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) */
2337
#define PTE_SEC (1UL << 59) /* Security */
2438
#define PTE_SHARE (1UL << 60) /* Shareable */
2539
#define PTE_BUF (1UL << 61) /* Bufferable */
2640
#define PTE_CACHE (1UL << 62) /* Cacheable */
2741
#define PTE_SO (1UL << 63) /* Strong Order */
42+
#endif
2843

2944
#define PAGE_OFFSET_SHIFT 0
3045
#define PAGE_OFFSET_BIT 12
@@ -60,12 +75,28 @@
6075
#define PAGE_ATTR_USER (PTE_U)
6176
#define PAGE_ATTR_SYSTEM (0)
6277

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
6393
#define PAGE_DEFAULT_ATTR_LEAF \
6494
(PAGE_ATTR_RWX | PAGE_ATTR_USER | PTE_V | PTE_G | PTE_SHARE | PTE_BUF | \
6595
PTE_CACHE | PTE_A | PTE_D)
6696

6797
#define PAGE_DEFAULT_ATTR_NEXT \
6898
(PAGE_ATTR_NEXT_LEVEL | PTE_V | PTE_G | PTE_SHARE | PTE_BUF | PTE_CACHE | PTE_A | PTE_D)
99+
#endif
69100

70101
#define PAGE_IS_LEAF(pte) __MASKVALUE(pte, PAGE_ATTR_RWX)
71102

@@ -85,7 +116,32 @@
85116
#define ARCH_VADDR_WIDTH 39
86117
#define SATP_MODE SATP_MODE_SV39
87118

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
89145
#define MMU_MAP_K_DEVICE (PTE_BUF | PTE_SO | PTE_A | PTE_D | PTE_G | PTE_W | PTE_R | PTE_V)
90146
#define MMU_MAP_K_RW (PTE_SHARE | PTE_A | PTE_D | PTE_G | PAGE_ATTR_RWX | PTE_V)
91147
#define MMU_MAP_K_RWCB (MMU_MAP_K_RW | PTE_BUF | PTE_CACHE)
@@ -94,6 +150,8 @@
94150
#define MMU_MAP_U_RWCB (MMU_MAP_U_RW | PTE_BUF | PTE_CACHE)
95151
#define MMU_MAP_EARLY \
96152
PTE_WRAP(PAGE_ATTR_RWX | PTE_G | PTE_V | PTE_CACHE | PTE_SHARE | PTE_BUF)
153+
#endif
154+
97155
#define MMU_MAP_TRACE(attr) (attr)
98156

99157
#define PTE_XWR_MASK 0xe

0 commit comments

Comments
 (0)