Skip to content

Commit 00a818c

Browse files
Merge pull request #338 from rmsyn/riscv/register/mseccfg
riscv: add mseccfg/h CSR registers
2 parents 6c0c255 + 1537fdd commit 00a818c

File tree

7 files changed

+163
-11
lines changed

7 files changed

+163
-11
lines changed

riscv/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1919
- New `riscv::register::xip::clear_pending` atomic function for `mip` and `sip` registers.
2020
This function is marked as `unsafe`, as its availability depends both on the target chip
2121
and the target interrupt source.
22+
- Add `mseccfg` CSR
23+
- Add `mseccfgh` CSR
2224

2325
### Changed
2426

riscv/src/register.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ pub use self::mhpmeventx::*;
113113

114114
// Machine configuration
115115
pub mod mconfigptr;
116+
pub mod mseccfg;
117+
#[cfg(any(test, target_arch = "riscv32"))]
118+
pub mod mseccfgh;
116119

117120
#[cfg(test)]
118121
mod tests;

riscv/src/register/mip.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,11 @@ mod tests {
8484

8585
#[test]
8686
fn test_mip() {
87-
let mut m = Mip::from_bits(0);
87+
let mip = Mip::from_bits(0);
8888

89-
test_csr_field!(m, ssoft);
90-
test_csr_field!(m, stimer);
91-
test_csr_field!(m, sext);
92-
93-
assert!(!m.msoft());
94-
assert!(!m.mtimer());
95-
assert!(!m.mext());
89+
assert!(!mip.msoft());
90+
assert!(!mip.mtimer());
91+
assert!(!mip.mext());
9692

9793
assert!(Mip::from_bits(1 << 3).msoft());
9894
assert!(Mip::from_bits(1 << 7).mtimer());

riscv/src/register/mseccfg.rs

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
//! mseccfg register
2+
3+
#[cfg(not(target_arch = "riscv32"))]
4+
const MASK: usize = 0x3_0000_0707;
5+
#[cfg(target_arch = "riscv32")]
6+
const MASK: usize = 0x707;
7+
8+
read_write_csr! {
9+
/// mseccfg register
10+
Mseccfg: 0x747,
11+
mask: MASK,
12+
}
13+
14+
read_write_csr_field! {
15+
Mseccfg,
16+
/// Machine-Mode Lockdown
17+
///
18+
/// # Note
19+
///
20+
/// Defined in in the [Smepmp](https://raw.githubusercontent.com/riscv/riscv-tee/main/Smepmp/Smepmp.pdf) extension.
21+
mml: 0,
22+
}
23+
24+
read_write_csr_field! {
25+
Mseccfg,
26+
/// Machine-Mode Whitelist Policy
27+
///
28+
/// # Note
29+
///
30+
/// Defined in in the [Smepmp](https://raw.githubusercontent.com/riscv/riscv-tee/main/Smepmp/Smepmp.pdf) extension.
31+
mmwp: 1,
32+
}
33+
34+
read_write_csr_field! {
35+
Mseccfg,
36+
/// Rule Locking Bypass
37+
///
38+
/// # Note
39+
///
40+
/// Defined in in the [Smepmp](https://raw.githubusercontent.com/riscv/riscv-tee/main/Smepmp/Smepmp.pdf) extension.
41+
rlb: 2,
42+
}
43+
44+
read_write_csr_field! {
45+
Mseccfg,
46+
/// User-mode seed
47+
///
48+
/// # Note
49+
///
50+
/// Defined in in the [Zkr](https://github.com/riscv/riscv-crypto/releases/download/v1.0.1-scalar/riscv-crypto-spec-scalar-v1.0.1.pdf) extension.
51+
useed: 8,
52+
}
53+
54+
read_write_csr_field! {
55+
Mseccfg,
56+
/// Supervisor-mode seed
57+
///
58+
/// # Note
59+
///
60+
/// Defined in in the [Zkr](https://github.com/riscv/riscv-crypto/releases/download/v1.0.1-scalar/riscv-crypto-spec-scalar-v1.0.1.pdf) extension.
61+
sseed: 9,
62+
}
63+
64+
read_write_csr_field! {
65+
Mseccfg,
66+
/// Machine-mode Landing Pad Enable
67+
///
68+
/// # Note
69+
///
70+
/// Defined in in the [Zicfilp](https://github.com/riscv/riscv-cfi/releases/download/v1.0/riscv-cfi.pdf) extension.
71+
mlpe: 10,
72+
}
73+
74+
csr_field_enum! {
75+
/// Pointer Masking Machine-mode
76+
PMM {
77+
default: Disabled,
78+
Disabled = 0,
79+
EnabledXlen57 = 2,
80+
EnabledXlen48 = 3,
81+
}
82+
}
83+
84+
#[cfg(not(target_arch = "riscv32"))]
85+
read_write_csr_field! {
86+
Mseccfg,
87+
/// Pointer Masking Machine-mode
88+
///
89+
/// # Note
90+
///
91+
/// Defined in in the [Smmpm](https://github.com/riscv/riscv-j-extension/releases/download/pointer-masking-ratified/pointer-masking-ratified.pdf) extension.
92+
pmm,
93+
PMM: [32:33],
94+
}
95+
96+
#[cfg(test)]
97+
mod tests {
98+
use super::*;
99+
100+
#[test]
101+
fn test_mseccfg() {
102+
let mut mseccfg = Mseccfg::from_bits(0);
103+
104+
test_csr_field!(mseccfg, mml);
105+
test_csr_field!(mseccfg, mmwp);
106+
test_csr_field!(mseccfg, rlb);
107+
test_csr_field!(mseccfg, useed);
108+
test_csr_field!(mseccfg, sseed);
109+
test_csr_field!(mseccfg, mlpe);
110+
111+
#[cfg(not(target_arch = "riscv32"))]
112+
{
113+
test_csr_field!(mseccfg, pmm: PMM::Disabled);
114+
test_csr_field!(mseccfg, pmm: PMM::EnabledXlen57);
115+
test_csr_field!(mseccfg, pmm: PMM::EnabledXlen48);
116+
}
117+
}
118+
}

riscv/src/register/mseccfgh.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
//! mseccfgh register
2+
3+
use super::mseccfg::PMM;
4+
5+
read_write_csr! {
6+
/// mseccfgh register
7+
Mseccfgh: 0x757,
8+
mask: 0x3,
9+
}
10+
11+
read_write_csr_field! {
12+
Mseccfgh,
13+
/// Pointer Masking Machine-mode
14+
///
15+
/// # Note
16+
///
17+
/// Defined in in the [Smmpm](https://github.com/riscv/riscv-j-extension/releases/download/pointer-masking-ratified/pointer-masking-ratified.pdf) extension.
18+
pmm,
19+
PMM: [0:1],
20+
}
21+
22+
#[cfg(test)]
23+
mod tests {
24+
use super::*;
25+
26+
#[test]
27+
fn test_mseccfgh() {
28+
let mut mseccfgh = Mseccfgh::from_bits(0);
29+
30+
test_csr_field!(mseccfgh, pmm: PMM::Disabled);
31+
test_csr_field!(mseccfgh, pmm: PMM::EnabledXlen57);
32+
test_csr_field!(mseccfgh, pmm: PMM::EnabledXlen48);
33+
}
34+
}

riscv/src/register/sip.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,8 @@ mod tests {
6060

6161
#[test]
6262
fn test_sip() {
63-
let mut sip = Sip::from_bits(0);
63+
let sip = Sip::from_bits(0);
6464

65-
test_csr_field!(sip, ssoft);
6665
assert!(!sip.stimer());
6766
assert!(!sip.sext());
6867

typos.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
[default]
2-
extend-ignore-re = ["[Ss][Ii][Ee]", "[Ss][Xx][Ll]"]
2+
extend-ignore-re = ["[Ss][Ii][Ee]", "[Ss][Xx][Ll]", "[.]?useed[.,:]?"]

0 commit comments

Comments
 (0)