diff --git a/debug/targets.py b/debug/targets.py index c2d43a39b..eca02313f 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 + # Support set_pmp_deny to create invalid addresses. support_set_pmp_deny = False diff --git a/debug/testlib.py b/debug/testlib.py index 5143a62c2..82fe3fb61 100644 --- a/debug/testlib.py +++ b/debug/testlib.py @@ -1514,6 +1514,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