From 52373e4c5f5f5783af601213d4739991aac43fa6 Mon Sep 17 00:00:00 2001 From: Yureka Date: Fri, 15 May 2026 13:23:09 +0200 Subject: [PATCH 1/5] proxyclient/adt: switch offset and group The upper 8 bits are group, and the lower 24 bits are offset. Signed-off-by: Yureka --- proxyclient/m1n1/adt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proxyclient/m1n1/adt.py b/proxyclient/m1n1/adt.py index 0df523b36..2471c4f3d 100644 --- a/proxyclient/m1n1/adt.py +++ b/proxyclient/m1n1/adt.py @@ -102,8 +102,8 @@ "unk2_0" / Int16ul, "pd" / Int8ul, "ps_cfg16" / Int8ul, - "group" / Int8ul, "offset" / Int24ul, + "group" / Int8ul, "unk2_2" / Int32ul, "unk2_3" / Int16ul, "id2" / Int16ul, From 7e9a90a857581961d4a089f24c7452b2de5f74db Mon Sep 17 00:00:00 2001 From: Yureka Date: Fri, 15 May 2026 13:23:43 +0200 Subject: [PATCH 2/5] proxyclient/adt: add pmgr_dev_get_{block,offset,addr} helpers Signed-off-by: Yureka --- proxyclient/m1n1/adt.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/proxyclient/m1n1/adt.py b/proxyclient/m1n1/adt.py index 2471c4f3d..e6390d03c 100644 --- a/proxyclient/m1n1/adt.py +++ b/proxyclient/m1n1/adt.py @@ -823,6 +823,7 @@ def create_node(self, name): def pmgr_init(self): self._pmgr_u8id = (self["/arm-io/pmgr"].devices[0].id1 != self["/arm-io/pmgr"].devices[1].id1) + self._pmgr_use_group_and_offset = not "ps-regs" in self["/arm-io/pmgr"]._properties def pmgr_dev_get_id(self, dev): if self._pmgr_u8id: @@ -836,6 +837,22 @@ def pmgr_dev_get_parents(self, dev): else: return dev.parents_un.u16id.parents + def pmgr_dev_get_block(self, dev): + if self._pmgr_use_group_and_offset: + reg = self["/arm-io/pmgr"].ps_groups[dev.group].reg + else: + reg = self["/arm-io/pmgr"].ps_regs[dev.psreg].reg + return self["/arm-io/pmgr"].get_reg(reg) + + def pmgr_dev_get_offset(self, dev): + if self._pmgr_use_group_and_offset: + return dev.offset + else: + return self["/arm-io/pmgr"].ps_regs[dev.psreg].offset + dev.psidx * 8 + + def pmgr_dev_get_addr(self, dev): + return self.pmgr_dev_get_block(dev)[0] + self.pmgr_dev_get_offset(dev) + def load_adt(data): node = ADTNode(ADTNodeStruct.parse(data)) node.pmgr_init() From 23df089ccd517e70e61d0cabdb17d86a8db2f223 Mon Sep 17 00:00:00 2001 From: Yureka Date: Fri, 15 May 2026 13:26:05 +0200 Subject: [PATCH 3/5] tools/pmgr_adt2dt: use new helpers Signed-off-by: Yureka --- proxyclient/tools/pmgr_adt2dt.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/proxyclient/tools/pmgr_adt2dt.py b/proxyclient/tools/pmgr_adt2dt.py index e9a7cea28..e826fd54e 100755 --- a/proxyclient/tools/pmgr_adt2dt.py +++ b/proxyclient/tools/pmgr_adt2dt.py @@ -39,10 +39,9 @@ def die_label(s): for i, dev in enumerate(pmgr.devices): if dev.flags.no_ps: continue - ps = pmgr.ps_regs[dev.psreg] - block = pmgr.get_reg(ps.reg) + block = dt.pmgr_dev_get_block(dev) blocks.setdefault(block, []).append(dev) - offset = ps.offset + dev.psidx * 8 + offset = dt.pmgr_dev_get_offset(dev) maxaddr[block[0]] = max(maxaddr.get(block[0], 0), offset) pmgr_compat = pmgr.compatible[0].split(",")[1] @@ -65,13 +64,11 @@ def die_label(s): for i, ((base, size), devices) in enumerate(sorted(blocks.items())): print(f"&pmgr{i} {{") - for dev in sorted(devices, key=lambda d: pmgr.ps_regs[d.psreg].offset + dev.psidx * 8): + for dev in sorted(devices, key=dt.pmgr_dev_get_addr): if dev.flags.no_ps: continue - ps = pmgr.ps_regs[dev.psreg] - offset = ps.offset + dev.psidx * 8 - addr = pmgr.get_reg(ps.reg)[0] + offset + addr = dt.pmgr_dev_get_addr(dev) assert base <= addr <= (base + size) print() From 906add6d3b5c4d7c29420c7b044b3963fa415c07 Mon Sep 17 00:00:00 2001 From: Yureka Date: Fri, 15 May 2026 13:31:42 +0200 Subject: [PATCH 4/5] tools/dump_pmgr: reference to undeclared chip_id Signed-off-by: Yureka --- proxyclient/tools/dump_pmgr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proxyclient/tools/dump_pmgr.py b/proxyclient/tools/dump_pmgr.py index b1f6f61bd..d84ce9d93 100755 --- a/proxyclient/tools/dump_pmgr.py +++ b/proxyclient/tools/dump_pmgr.py @@ -108,7 +108,7 @@ print() -if chip_id in (0x8960, 0x7000, 0x7001, 0x8000, 0x8001, 0x8003, 0x8010, 0x8012, 0x8015): +if dt["/chosen"].chip_id in (0x8960, 0x7000, 0x7001, 0x8000, 0x8001, 0x8003, 0x8010, 0x8012, 0x8015): exit(0) print("=== Boot clocks ===") From 03793ca226d94f0587d6eb2fa6e22a6132d4747e Mon Sep 17 00:00:00 2001 From: Yureka Date: Fri, 15 May 2026 13:33:10 +0200 Subject: [PATCH 5/5] tools/dump_pmgr: use new helpers Signed-off-by: Yureka --- proxyclient/tools/dump_pmgr.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/proxyclient/tools/dump_pmgr.py b/proxyclient/tools/dump_pmgr.py index d84ce9d93..3521d1037 100755 --- a/proxyclient/tools/dump_pmgr.py +++ b/proxyclient/tools/dump_pmgr.py @@ -52,8 +52,7 @@ s += f" perf_reg: {dev.perf_block}:{dev.perf_idx:#04x} unk3: {dev.unk3:3d} {dev.unk2_0:2d} {dev.ps_cfg16:2d} {dev.unk2_3:3d}" if not dev.flags.no_ps: - ps = pmgr.ps_regs[dev.psreg] - addr = pmgr.get_reg(ps.reg)[0] + ps.offset + dev.psidx * 8 + addr = dt.pmgr_dev_get_addr(dev) val = p.read32(addr) s += f" @ {addr:#x} = {val:#010x}" else: