diff --git a/src/mmu/pmachecker.sv b/src/mmu/pmachecker.sv index f2a2e984b..021f448b2 100644 --- a/src/mmu/pmachecker.sv +++ b/src/mmu/pmachecker.sv @@ -75,6 +75,6 @@ module pmachecker import cvw::*; #(parameter cvw_t P) ( // Detect access faults assign PMAAccessFault = SelRegions[0] & AccessRWXC | AtomicAccessM & ~AtomicAllowed; assign PMAInstrAccessFaultF = ExecuteAccessF & PMAAccessFault; - assign PMALoadAccessFaultM = ReadAccessM & PMAAccessFault; + assign PMALoadAccessFaultM = ReadAccessM & ~WriteAccessM & PMAAccessFault; assign PMAStoreAmoAccessFaultM = (WriteAccessM | (|CMOpM)) & PMAAccessFault; endmodule diff --git a/src/mmu/pmpchecker.sv b/src/mmu/pmpchecker.sv index a97b7ff2e..a55e137ef 100644 --- a/src/mmu/pmpchecker.sv +++ b/src/mmu/pmpchecker.sv @@ -79,5 +79,5 @@ module pmpchecker import cvw::*; #(parameter cvw_t P) ( assign PMPInstrAccessFaultF = EnforcePMP & ExecuteAccessF & ~|(X & FirstMatch) ; assign PMPStoreAmoAccessFaultM = (EnforcePMP & WriteAccessM & ~|(W & FirstMatch)) | PMPCMOAccessFault; // exclusion-tag: immu-pmpstoreamoaccessfault - assign PMPLoadAccessFaultM = EnforcePMP & ReadAccessM & ~|(R & FirstMatch) ; + assign PMPLoadAccessFaultM = EnforcePMP & ReadAccessM & ~WriteAccessM & ~|(R & FirstMatch) ; endmodule