diff options
| author | Alejandro Soto <alejandro@34project.org> | 2022-12-16 22:20:01 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2022-12-16 22:20:26 -0600 |
| commit | 9ebb4b712e1d6c97a999652d0b9105847eabd134 (patch) | |
| tree | 0526b6d473ccb1652033613477ad1e8cae034c24 /rtl/core | |
| parent | 17366ce06afe0a611ba25a47523c81b01c64961c (diff) | |
Implement mode privilege checks in MMU
Diffstat (limited to '')
| -rw-r--r-- | rtl/core/arm810.sv | 2 | ||||
| -rw-r--r-- | rtl/core/mmu/mmu.sv | 3 | ||||
| -rw-r--r-- | rtl/core/mmu/pagewalk.sv | 4 | ||||
| -rw-r--r-- | rtl/core/psr.sv | 4 |
4 files changed, 8 insertions, 5 deletions
diff --git a/rtl/core/arm810.sv b/rtl/core/arm810.sv index 569b973..c0e717f 100644 --- a/rtl/core/arm810.sv +++ b/rtl/core/arm810.sv @@ -89,7 +89,7 @@ module arm810 ); word cpsr_rd, spsr_rd, psr_wr; - logic psr_write, psr_saved, update_flags, psr_wr_flags, psr_wr_control; + logic psr_write, psr_saved, update_flags, psr_wr_flags, psr_wr_control, privileged; psr_mode mode; psr_flags flags; psr_intmask intmask; diff --git a/rtl/core/mmu/mmu.sv b/rtl/core/mmu/mmu.sv index d22f1cd..f8e808b 100644 --- a/rtl/core/mmu/mmu.sv +++ b/rtl/core/mmu/mmu.sv @@ -6,7 +6,8 @@ module core_mmu input logic clk, rst_n, - input logic mmu_enable /*verilator public*/, + input logic privileged, + mmu_enable /*verilator public*/, input mmu_base mmu_ttbr /*verilator public*/, input word mmu_dac, diff --git a/rtl/core/mmu/pagewalk.sv b/rtl/core/mmu/pagewalk.sv index ce25b19..eb36580 100644 --- a/rtl/core/mmu/pagewalk.sv +++ b/rtl/core/mmu/pagewalk.sv @@ -6,7 +6,8 @@ module core_mmu_pagewalk input logic clk, rst_n, - input logic mmu_enable, + input logic privileged, + mmu_enable, input mmu_base mmu_ttbr, input word mmu_dac, @@ -56,7 +57,6 @@ module core_mmu_pagewalk .write(hold_write), .fault(access_fault), .domain(entry_domain), - .privileged(1), //TODO .fault_type(access_fault_type), .* ); diff --git a/rtl/core/psr.sv b/rtl/core/psr.sv index c1fe0fd..41982c0 100644 --- a/rtl/core/psr.sv +++ b/rtl/core/psr.sv @@ -17,7 +17,8 @@ module core_psr output psr_intmask mask, output psr_mode mode, output word cpsr_rd, - spsr_rd + spsr_rd, + output logic privileged ); typedef struct packed @@ -54,6 +55,7 @@ module core_psr assign wr_word = psr_wr; assign cpsr_rd = cpsr_word; assign spsr_rd = spsr_word; + assign privileged = |mode[3:0]; // Not user assign {wr_state.flags, wr_state.mask, wr_state.mode} = {wr_word.nzcv, wr_word.if_, wr_word.m}; `ifdef VERILATOR |
