diff options
Diffstat (limited to 'tools/proxyclient/experiments/mtp.py')
| -rw-r--r-- | tools/proxyclient/experiments/mtp.py | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/tools/proxyclient/experiments/mtp.py b/tools/proxyclient/experiments/mtp.py new file mode 100644 index 0000000..56a72b1 --- /dev/null +++ b/tools/proxyclient/experiments/mtp.py @@ -0,0 +1,129 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: MIT +import sys, pathlib, fnmatch +import time +sys.path.append(str(pathlib.Path(__file__).resolve().parents[1])) + +import struct +from m1n1.setup import * +from m1n1.fw.asc import StandardASC +from m1n1.hw.dart8110 import DART8110 +from m1n1.hw.dockchannel import DockChannel +from m1n1.fw.smc import SMCClient, SMCError +from m1n1.shell import run_shell +from m1n1.fw.mtp import * + +from construct import * + +mon = RegMonitor(u) + +#mon.add(0x23b700000, 0x10000) +mon.add(0x23d28c000, 0x4000) +mon.poll() +mon.poll() +mon.poll() +mon.add(0x24e400000, 0x4000) +mon.add(0x24e808000, 0x14000) + +smc_addr = u.adt["arm-io/smc"].get_reg(0)[0] +smc = SMCClient(u, smc_addr) +smc.start() +smc.start_ep(0x20) +smc.verbose = 0 + +p.dapf_init_all() + +dart = DART8110.from_adt(u, "/arm-io/dart-mtp", iova_range=(0x8000, 0x100000)) + +dart.regs.TCR[1].set(BYPASS_DAPF=0, BYPASS_DART=0, TRANSLATE_ENABLE=1) + +irq_base = u.adt["/arm-io/dockchannel-mtp"].get_reg(1)[0] +fifo_base = u.adt["/arm-io/dockchannel-mtp"].get_reg(2)[0] +dc = DockChannel(u, irq_base, fifo_base, 1) + +node = u.adt["/arm-io/dockchannel-mtp/mtp-transport"] + +while dc.rx_count: + dc.read(dc.rx_count) + +mtp_addr = u.adt["/arm-io/mtp"].get_reg(0)[0] +mtp = StandardASC(u, mtp_addr, dart, stream=1) +mtp.allow_phys = True +print("pre start") +mon.poll() +mtp.start() +print("started") +mon.poll() +print("ok") + +def poll(): + mtp.work() + mp.work_pending() + +# 0x40: device reset +# 0x42: + +# 0 -> mbox? +# 2 -> dapf? +# 3 -> dart? +# 3 -> dockchannel? +# 5 -> mbox? +def reset(i): + reg = 0x23d28c000 + i*8 + p.set32(reg, 1<<10) + p.set32(reg, 1<<31) + p.clear32(reg, 1<<31) + p.clear32(reg, 1<<10) + +try: + + mp = MTPProtocol(u, node, mtp, dc, smc) + + mp.wait_init("keyboard") + #mp.wait_init("multi_touch") + mp.wait_init("stm") + + mtp.stop() + mtp.start() + mon.poll() + + for i in range(256): + mp.stm.get_report(i) + mtp.work() + mp.work_pending() + + #for i in range(256): + #if i in (0x40, 0x42): + #continue + #m = UnkDeviceControlMsg() + #m.command = i + #for args in (b"", b"\x00", b"\x01", b"\x02", + #b"\x01\x00", b"\x01\x01", b"\x01\x02", + #b"\x00\x01", b"\x00\x02", b"\x00\x00", + #b"\x00\x00\x00", + #b"\x00\x00\x00\x00", + #b"\x00\x00\x00\x00\x00", + #b"\x00\x00\x00\x00\x00\x00", + #b"\x00\x00\x00\x00\x00\x00\x00", + #b"\x00\x00\x00\x00\x00\x00\x00\x00",): + #m.args = args + #print(f"{m.command:#x} {m.args.hex()}") + #mp.comm.device_control(m) + + #mon.poll() + #mtp.stop() + #mon.poll() + #mtp.start() + + #mon.poll() + #mtp.stop(1) + ##reset(1) + ##p.dapf_init_all() + + #mtp.boot() + + run_shell(locals(), poll_func=poll) + +finally: + #mtp.stop() + p.reboot() |
