diff --git a/debug/targets.py b/debug/targets.py index bb7a5cf15..2c04ed718 100644 --- a/debug/targets.py +++ b/debug/targets.py @@ -141,6 +141,10 @@ class Target: # Instruction count limit icount_limit = 4 + # Implements page-based virtual memory. So when PMP changes execute an + # SFENCE.VMA + implements_page_virtual_memory = True + # Internal variables: directory = None temporary_files = [] diff --git a/debug/testlib.py b/debug/testlib.py index 7f28186cb..a115896cd 100644 --- a/debug/testlib.py +++ b/debug/testlib.py @@ -1453,6 +1453,9 @@ def disable_pmp(self): # pmcfg0 readback matches write, so TOR is supported. self.gdb.p("$pmpaddr0=" f"0x{(self.hart.ram + self.hart.ram_size) >> 2:x}") + if self.target.implements_page_virtual_memory: + # PMP changes require an sfence.vma, 0x12000073 is sfence.vma + self.gdb.command("monitor riscv exec_progbuf 0x12000073") except CouldNotFetch: # PMP registers are optional pass