summaryrefslogtreecommitdiffstats
path: root/debug/risc-v-gsp-rm-vm/sim/devices/__init__.py
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-04 18:42:36 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-04 18:42:36 -0400
commit1f2073d4fbb1d412d9bbf373312e3c51b83db92a (patch)
treea661537d7ec9510324e0a40a5a65e4b8c853f01b /debug/risc-v-gsp-rm-vm/sim/devices/__init__.py
parentc1adf2727983f5cace8ca0f5d1119ac2256c348e (diff)
downloadopen-iov-1f2073d4fbb1d412d9bbf373312e3c51b83db92a.tar.gz
open-iov-1f2073d4fbb1d412d9bbf373312e3c51b83db92a.zip
greeneye: GMMU/FBIF observability, PTE decoder and oracle, MPU/libos simulator wave
Simulator development wave (docs 42-44): GMMU page-table entry decode with its oracle/workflow harness, FBIF observability, and MPU/LIBOS device surfaces in the device model, plus refreshed boot/machine/profile data (tu104-570.144), the qemu-line results, and the new unit tests. Docs 00/06/35-41 updated to match; harness helpers and .gitignore included.
Diffstat (limited to 'debug/risc-v-gsp-rm-vm/sim/devices/__init__.py')
-rw-r--r--debug/risc-v-gsp-rm-vm/sim/devices/__init__.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/debug/risc-v-gsp-rm-vm/sim/devices/__init__.py b/debug/risc-v-gsp-rm-vm/sim/devices/__init__.py
index caf22b3..6fdce2e 100644
--- a/debug/risc-v-gsp-rm-vm/sim/devices/__init__.py
+++ b/debug/risc-v-gsp-rm-vm/sim/devices/__init__.py
@@ -26,6 +26,14 @@ from .dma import DmaTranslator
from .falcon import FalconBlock
from .fwsec import Wpr2Block
from .irq import IrqRouter
+from .observe import (
+ TRACE_SCHEMA,
+ ObservedWindow,
+ build_trace,
+ collect_observations,
+ parse_window_spec,
+ windows_from_section,
+)
from .pmc import PmcBlock
from .pmu import PmuStub
from .priscv import PriscvBlock
@@ -33,12 +41,16 @@ from .timer import PtimerBlock
PROFILE_SCHEMA = "greeneye-sim-profile/1"
+#: Profile device sections that declare observe-only/log-only windows.
+OBSERVE_SECTIONS = ("gmmu", "fbif")
+
__all__ = [
"Device",
"DeviceRegistry",
"Window",
"SNAPSHOT_SCHEMA",
"PROFILE_SCHEMA",
+ "TRACE_SCHEMA",
"PmcBlock",
"FalconBlock",
"PriscvBlock",
@@ -48,8 +60,13 @@ __all__ = [
"PmuStub",
"DmaTranslator",
"IrqRouter",
+ "ObservedWindow",
"load_profile",
"registry_from_profile",
+ "windows_from_section",
+ "parse_window_spec",
+ "collect_observations",
+ "build_trace",
]
@@ -153,6 +170,15 @@ def registry_from_profile(profile: dict, *, machine=None,
)
elif name == "pmu":
dev = PmuStub()
+ elif name in OBSERVE_SECTIONS:
+ for win in windows_from_section(section):
+ reg.add(ObservedWindow(
+ base=win["base"], size=win["size"], label=win["label"],
+ mode=win["mode"], registers=win["registers"],
+ evidence=section.get("evidence", ""),
+ clock=(machine.insn_count if machine is not None else None),
+ ))
+ continue
else:
raise ValueError(f"unknown device section {name!r}")
for base, size in _windows(section):