diff options
author | Marek Vasut <marek.vasut@gmail.com> | 2010-10-29 02:57:32 +0200 |
---|---|---|
committer | Marek Vasut <marek.vasut@gmail.com> | 2010-11-05 11:25:57 +0100 |
commit | 1fa91f336ae35a0b7b127c81c46ff9b5041e088e (patch) | |
tree | 7cf4b3126ff4082f1ae35ad03af73f1e4c0cd55b /src/target | |
parent | 887cac65b0672910bda4fec34ed05d72ce7208aa (diff) | |
download | openocd+libswd-1fa91f336ae35a0b7b127c81c46ff9b5041e088e.tar.gz openocd+libswd-1fa91f336ae35a0b7b127c81c46ff9b5041e088e.tar.bz2 openocd+libswd-1fa91f336ae35a0b7b127c81c46ff9b5041e088e.tar.xz openocd+libswd-1fa91f336ae35a0b7b127c81c46ff9b5041e088e.zip |
CortexA8: Implement debug base autodetection
Implement autodetection of debug base. Also, implement a function solving
various hardware quirks (like iMX51 ROM Table location bug).
Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
Diffstat (limited to 'src/target')
-rw-r--r-- | src/target/cortex_a8.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/target/cortex_a8.c b/src/target/cortex_a8.c index 8b4ced59..3c80923f 100644 --- a/src/target/cortex_a8.c +++ b/src/target/cortex_a8.c @@ -73,7 +73,6 @@ static int cortex_a8_get_ttb(struct target *target, uint32_t *result); */ #define swjdp_memoryap 0 #define swjdp_debugap 1 -#define OMAP3530_DEBUG_BASE 0x54011000 /* * Cortex-A8 Basic debug access, very low level assumes state is saved @@ -1714,12 +1713,7 @@ static int cortex_a8_examine_first(struct target *target) int i; int retval = ERROR_OK; uint32_t didr, ctypr, ttypr, cpuid; - - /* stop assuming this is an OMAP! */ - LOG_DEBUG("TODO - autoconfigure"); - - /* Here we shall insert a proper ROM Table scan */ - armv7a->debug_base = OMAP3530_DEBUG_BASE; + uint32_t dbgbase, apid; /* We do one extra read to ensure DAP is configured, * we call ahbap_debugport_init(swjdp) instead @@ -1728,6 +1722,17 @@ static int cortex_a8_examine_first(struct target *target) if (retval != ERROR_OK) return retval; + /* Get ROM Table base */ + retval = dap_get_debugbase(swjdp, 1, &dbgbase, &apid); + if (retval != ERROR_OK) + return retval; + + /* Lookup 0x15 -- Processor DAP */ + retval = dap_lookup_cs_component(swjdp, 1, dbgbase, 0x15, + &armv7a->debug_base); + if (retval != ERROR_OK) + return retval; + retval = mem_ap_read_atomic_u32(swjdp, armv7a->debug_base + CPUDBG_CPUID, &cpuid); if (retval != ERROR_OK) return retval; |