Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 60 additions & 2 deletions libcpu/risc-v/t-head/c908/riscv_mmu.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
* 2021-01-30 lizhirui first version
* 2021-05-03 lizhirui porting to C906
* 2023-10-12 Shell Add permission control API
* 2026-02-25 Steven Porting to Standard Svpbmt
*/

#ifndef __RISCV_MMU_H__
Expand All @@ -19,12 +20,26 @@

#undef PAGE_SIZE

/* C-SKY extend */
#if !CONFIG_XUANTIE_SVPBMT
/*
* RISC-V Standard Svpbmt Extension (Bit 61-62)
* 00: PMA (Normal Memory, Cacheable)
* 01: NC (Non-cacheable, Weakly-ordered)
* 10: IO (Strongly-ordered, Non-cacheable, Non-idempotent)
* 11: Reserved
*/
#define PTE_PBMT_MASK (3UL << 61)
#define PTE_PBMT_PMA (0UL << 61)
#define PTE_PBMT_NC (1UL << 61)
#define PTE_PBMT_IO (2UL << 61)
#else
/* XuanTie Extension (Bit 59-63) */
#define PTE_SEC (1UL << 59) /* Security */
#define PTE_SHARE (1UL << 60) /* Shareable */
#define PTE_BUF (1UL << 61) /* Bufferable */
#define PTE_CACHE (1UL << 62) /* Cacheable */
#define PTE_SO (1UL << 63) /* Strong Order */
#endif

#define PAGE_OFFSET_SHIFT 0
#define PAGE_OFFSET_BIT 12
Expand Down Expand Up @@ -60,12 +75,28 @@
#define PAGE_ATTR_USER (PTE_U)
#define PAGE_ATTR_SYSTEM (0)

#if !CONFIG_XUANTIE_SVPBMT
/*
* Default Leaf Attribute:
* RWX + User + Valid + Global + Accessed + Dirty + PMA(Cacheable)
*/
#define PAGE_DEFAULT_ATTR_LEAF \
(PAGE_ATTR_RWX | PAGE_ATTR_USER | PTE_V | PTE_G | PTE_PBMT_PMA | PTE_A | PTE_D)

/*
* Next Level Attribute:
* Svpbmt spec requires PBMT bits to be 0 for non-leaf PTEs.
*/
#define PAGE_DEFAULT_ATTR_NEXT \
(PAGE_ATTR_NEXT_LEVEL | PTE_V | PTE_G | PTE_A | PTE_D)
#else
#define PAGE_DEFAULT_ATTR_LEAF \
(PAGE_ATTR_RWX | PAGE_ATTR_USER | PTE_V | PTE_G | PTE_SHARE | PTE_BUF | \
PTE_CACHE | PTE_A | PTE_D)

#define PAGE_DEFAULT_ATTR_NEXT \
(PAGE_ATTR_NEXT_LEVEL | PTE_V | PTE_G | PTE_SHARE | PTE_BUF | PTE_CACHE | PTE_A | PTE_D)
#endif

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

Expand All @@ -85,7 +116,32 @@
#define ARCH_VADDR_WIDTH 39
#define SATP_MODE SATP_MODE_SV39

//compatible to rt-smart new version
#if !CONFIG_XUANTIE_SVPBMT
/*
* Kernel Mappings
*/
/* Device: IO Mode (Strongly Ordered) */
#define MMU_MAP_K_DEVICE (PTE_PBMT_IO | PTE_A | PTE_D | PTE_G | PTE_W | PTE_R | PTE_V)

/* RW: Non-Cacheable (NC Mode) */
#define MMU_MAP_K_RW (PTE_PBMT_NC | PTE_A | PTE_D | PTE_G | PAGE_ATTR_RWX | PTE_V)

/* RWCB: Cacheable (PMA Mode) - Normal RAM */
#define MMU_MAP_K_RWCB (PTE_PBMT_PMA | PTE_A | PTE_D | PTE_G | PAGE_ATTR_RWX | PTE_V)

/*
* User Mappings
*/
/* User RW: Non-Cacheable */
#define MMU_MAP_U_RW (PTE_PBMT_NC | PTE_U | PTE_A | PTE_D | PAGE_ATTR_RWX | PTE_V)

/* User RWCB: Cacheable */
#define MMU_MAP_U_RWCB (PTE_PBMT_PMA | PTE_U | PTE_A | PTE_D | PAGE_ATTR_RWX | PTE_V)

/* Early Mapping: Cacheable */
#define MMU_MAP_EARLY \
PTE_WRAP(PAGE_ATTR_RWX | PTE_G | PTE_V | PTE_PBMT_PMA)
#else
#define MMU_MAP_K_DEVICE (PTE_BUF | PTE_SO | PTE_A | PTE_D | PTE_G | PTE_W | PTE_R | PTE_V)
#define MMU_MAP_K_RW (PTE_SHARE | PTE_A | PTE_D | PTE_G | PAGE_ATTR_RWX | PTE_V)
#define MMU_MAP_K_RWCB (MMU_MAP_K_RW | PTE_BUF | PTE_CACHE)
Expand All @@ -94,6 +150,8 @@
#define MMU_MAP_U_RWCB (MMU_MAP_U_RW | PTE_BUF | PTE_CACHE)
#define MMU_MAP_EARLY \
PTE_WRAP(PAGE_ATTR_RWX | PTE_G | PTE_V | PTE_CACHE | PTE_SHARE | PTE_BUF)
#endif

#define MMU_MAP_TRACE(attr) (attr)

#define PTE_XWR_MASK 0xe
Expand Down