From 1fa91f336ae35a0b7b127c81c46ff9b5041e088e Mon Sep 17 00:00:00 2001
From: Marek Vasut <marek.vasut@gmail.com>
Date: Fri, 29 Oct 2010 02:57:32 +0200
Subject: 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>
---
 src/target/cortex_a8.c | 19 ++++++++++++-------
 1 file 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;
-- 
cgit v1.2.3