summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarek Vasut <marek.vasut@gmail.com>2010-10-29 02:57:32 +0200
committerMarek Vasut <marek.vasut@gmail.com>2010-11-05 11:25:57 +0100
commit1fa91f336ae35a0b7b127c81c46ff9b5041e088e (patch)
tree7cf4b3126ff4082f1ae35ad03af73f1e4c0cd55b /src
parent887cac65b0672910bda4fec34ed05d72ce7208aa (diff)
downloadopenocd+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')
-rw-r--r--src/target/cortex_a8.c19
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;