From 35693eb7cc20fdfd3c9fea62084bf6ed99f0f893 Mon Sep 17 00:00:00 2001 From: Rose Thompson Date: Wed, 2 Oct 2024 14:04:01 -0500 Subject: [PATCH] Fixed bug so AMO access faults only produce StoreAmoAccessFault and not both LoadAccessFault adn StoreAmoAccessFault. --- src/mmu/pmachecker.sv | 2 +- src/mmu/pmpchecker.sv | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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