Skip to content

Commit

Permalink
applet.debug.arm.jtag: enable debug power.
Browse files Browse the repository at this point in the history
Without debug power, AP enumeration will ~always fail.
  • Loading branch information
whitequark committed Nov 17, 2020
1 parent 4613a27 commit 8728433
Showing 1 changed file with 31 additions and 2 deletions.
33 changes: 31 additions & 2 deletions software/glasgow/applet/debug/arm/__init__.py
Expand Up @@ -6,12 +6,17 @@

from ....database.jedec import *
from ....arch.arm.dap import *
from ... import *


__all__ = ["ARMDPInterface", "ARMAPTransactionError", "DebugARMAppletMixin"]


class ARMAPTransactionError(Exception):
class ARMDPError(GlasgowAppletError):
pass


class ARMAPTransactionError(GlasgowAppletError):
pass


Expand Down Expand Up @@ -48,7 +53,29 @@ async def read_ap_reg(self, index, addr):

# Data link independent interface

...
async def set_debug_power(self, enabled):
dp_ctrl_stat = DP_CTRL_STAT.from_int(await self.read_dp_reg(DP_CTRL_STAT_addr))
dp_ctrl_stat.CDBGPWRUPREQ = enabled
await self.write_dp_reg(DP_CTRL_STAT_addr, dp_ctrl_stat.to_int())

for _ in range(4):
dp_ctrl_stat = DP_CTRL_STAT.from_int(await self.read_dp_reg(DP_CTRL_STAT_addr))
if dp_ctrl_stat.CDBGPWRUPACK == enabled:
break
else:
raise ARMDPError("cannot %s debug power".format("enable" if enabled else "disable"))

async def set_system_power(self, enabled):
dp_ctrl_stat = DP_CTRL_STAT.from_int(await self.read_dp_reg(DP_CTRL_STAT_addr))
dp_ctrl_stat.CSYSPWRUPREQ = enabled
await self.write_dp_reg(DP_CTRL_STAT_addr, dp_ctrl_stat.to_int())

for _ in range(4):
dp_ctrl_stat = DP_CTRL_STAT.from_int(await self.read_dp_reg(DP_CTRL_STAT_addr))
if dp_ctrl_stat.CSYSPWRUPACK == enabled:
break
else:
raise ARMDPError("cannot %s system power".format("enable" if enabled else "disable"))


class DebugARMAppletMixin:
Expand All @@ -57,6 +84,8 @@ def add_interact_arguments(cls, parser):
pass

async def interact(self, device, args, dp_iface):
await dp_iface.set_debug_power(True)

for ap_index in range(256):
try:
ap_idr = AP_IDR.from_int(await dp_iface.read_ap_reg(ap_index, AP_IDR_addr))
Expand Down

0 comments on commit 8728433

Please sign in to comment.