summaryrefslogtreecommitdiff
path: root/tools/proxyclient/hv/trace_i2c.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/proxyclient/hv/trace_i2c.py')
-rw-r--r--tools/proxyclient/hv/trace_i2c.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/tools/proxyclient/hv/trace_i2c.py b/tools/proxyclient/hv/trace_i2c.py
new file mode 100644
index 0000000..f64fd24
--- /dev/null
+++ b/tools/proxyclient/hv/trace_i2c.py
@@ -0,0 +1,41 @@
+# SPDX-License-Identifier: MIT
+
+from m1n1.trace.i2c import I2CTracer
+
+I2CTracer = I2CTracer._reloadcls()
+
+i2c_tracers = {}
+
+for node in hv.adt["/arm-io"]:
+ if node.name.startswith("i2c"):
+ n = int(node.name[3:])
+ i2c_tracers[n] = I2CTracer(hv, f"/arm-io/i2c{n}", verbose=0)
+ i2c_tracers[n].stop()
+ i2c_tracers[n].start()
+ if hv.ctx:
+ for irq in getattr(node, "interrupts"):
+ hv.trace_irq(node.name, irq, 1, hv.IRQTRACE_IRQ)
+
+from m1n1.gpiola import GPIOLogicAnalyzer
+
+if not hv.started:
+ for cpu in list(hv.adt["cpus"]):
+ if cpu.name == "cpu3":
+ print(f"Removing ADT node {cpu._path}")
+ del hv.adt["cpus"][cpu.name]
+
+if not hv.started or hv.ctx is not None:
+ m = GPIOLogicAnalyzer(u, "arm-io/gpio",
+ pins={"scl": 0xc9, "sda": 0xc7},
+ div=1, on_pin_change=True, cpu=3)
+
+ m.load_regmap(list(i2c_tracers[1].regmaps.values())[0],
+ regs={"SMSTA", "XFSTA"})
+
+def start_la():
+ m.start(1000000, bufsize=0x80000)
+ hv.cont()
+
+def stop_la():
+ m.complete()
+ m.show()