Add trace support to generic board
authorSimon Glass <sjg@chromium.org>
Tue, 11 Jun 2013 18:14:42 +0000 (11:14 -0700)
committerTom Rini <trini@ti.com>
Wed, 26 Jun 2013 14:16:41 +0000 (10:16 -0400)
Add hooks for tracing to generic board, including:

- allow early tracing to start early as possible in U-Boot
- reserve memory for trace buffer
- copy early trace buffer to main trace buffer after relocation
- setup full tracing support after relocation

Signed-off-by: Simon Glass <sjg@chromium.org>
common/board_f.c
common/board_r.c
include/asm-generic/global_data.h

index 8efdb6365577e519c62ef4b56fa41919b4ee94d1..ab4242a77ea487cf17e68ae413d57a6c6c1a90e5 100644 (file)
@@ -53,6 +53,7 @@
 #include <os.h>
 #include <post.h>
 #include <spi.h>
+#include <trace.h>
 #include <watchdog.h>
 #include <asm/errno.h>
 #include <asm/io.h>
@@ -500,6 +501,18 @@ static int reserve_lcd(void)
 }
 #endif /* CONFIG_LCD */
 
+static int reserve_trace(void)
+{
+#ifdef CONFIG_TRACE
+       gd->relocaddr -= CONFIG_TRACE_BUFFER_SIZE;
+       gd->trace_buff = map_sysmem(gd->relocaddr, CONFIG_TRACE_BUFFER_SIZE);
+       debug("Reserving %dk for trace data at: %08lx\n",
+             CONFIG_TRACE_BUFFER_SIZE >> 10, gd->relocaddr);
+#endif
+
+       return 0;
+}
+
 #if defined(CONFIG_VIDEO) && (!defined(CONFIG_PPC) || defined(CONFIG_8xx)) \
                && !defined(CONFIG_ARM) && !defined(CONFIG_X86)
 static int reserve_video(void)
@@ -818,8 +831,9 @@ static init_fnc_t init_sequence_f[] = {
 #ifdef CONFIG_SANDBOX
        setup_ram_buf,
 #endif
-       setup_fdt,
        setup_mon_len,
+       setup_fdt,
+       trace_early_init,
 #if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx)
        /* TODO: can this go into arch_cpu_init()? */
        probecpu,
@@ -963,6 +977,7 @@ static init_fnc_t init_sequence_f[] = {
 #ifdef CONFIG_LCD
        reserve_lcd,
 #endif
+       reserve_trace,
        /* TODO: Why the dependency on CONFIG_8xx? */
 #if defined(CONFIG_VIDEO) && (!defined(CONFIG_PPC) || defined(CONFIG_8xx)) \
                && !defined(CONFIG_ARM) && !defined(CONFIG_X86)
index f5649c95f16f5291cecee4dc5fdf70e56fb4c759..f7a036e32f42e0adcbda61cebb566ee695dd2340 100644 (file)
@@ -58,6 +58,7 @@
 #include <serial.h>
 #include <spi.h>
 #include <stdio_dev.h>
+#include <trace.h>
 #include <watchdog.h>
 #ifdef CONFIG_ADDR_MAP
 #include <asm/mmu.h>
@@ -106,6 +107,15 @@ static int initr_secondary_cpu(void)
        return 0;
 }
 
+static int initr_trace(void)
+{
+#ifdef CONFIG_TRACE
+       trace_init(gd->trace_buff, CONFIG_TRACE_BUFFER_SIZE);
+#endif
+
+       return 0;
+}
+
 static int initr_reloc(void)
 {
        gd->flags |= GD_FLG_RELOC;      /* tell others: relocation done */
@@ -711,6 +721,7 @@ static int run_main_loop(void)
  * TODO: perhaps reset the watchdog in the initcall function after each call?
  */
 init_fnc_t init_sequence_r[] = {
+       initr_trace,
        initr_reloc,
        /* TODO: could x86/PPC have this also perhaps? */
 #ifdef CONFIG_ARM
index 3e9ca1182d7e48e2a6cd63d17f5da44da7b027e7..8cfc3fa775610ae2de9c01166da82efdade34434 100644 (file)
@@ -82,6 +82,9 @@ typedef struct global_data {
        unsigned long fdt_size; /* Space reserved for relocated FDT */
        void **jt;              /* jump table */
        char env_buf[32];       /* buffer for getenv() before reloc. */
+#ifdef CONFIG_TRACE
+       void            *trace_buff;    /* The trace buffer */
+#endif
        struct arch_global_data arch;   /* architecture-specific data */
 } gd_t;
 #endif