X-Git-Url: https://git.kernelconcepts.de/?a=blobdiff_plain;f=common%2Fcmd_log.c;h=49deddd7f99cebe07ca21d7da5ae8b50e7494df3;hb=199e262eb3c1b70553325c2010be0e28d9245460;hp=e593dbedd374c74fe2d5b61f3dbeaba189b56151;hpb=88fed9a120aabd6e0b684e2616cafca58aaa7f93;p=karo-tx-uboot.git diff --git a/common/cmd_log.c b/common/cmd_log.c index e593dbedd3..49deddd7f9 100644 --- a/common/cmd_log.c +++ b/common/cmd_log.c @@ -42,7 +42,7 @@ #include #include -#include +#include #include #include @@ -59,14 +59,31 @@ static char buf[1024]; static unsigned console_loglevel = 3; static unsigned default_message_loglevel = 4; static unsigned log_version = 1; +#ifdef CONFIG_ALT_LB_ADDR +static volatile logbuff_t *log; +#else static logbuff_t *log; +#endif +static char *lbuf; + +unsigned long __logbuffer_base(void) +{ + return CONFIG_SYS_SDRAM_BASE + gd->bd->bi_memsize - LOGBUFF_LEN; +} +unsigned long logbuffer_base (void) __attribute__((weak, alias("__logbuffer_base"))); void logbuff_init_ptrs (void) { unsigned long tag, post_word; char *s; - log = (logbuff_t *)(gd->bd->bi_memsize-LOGBUFF_LEN) - 1; +#ifdef CONFIG_ALT_LB_ADDR + log = (logbuff_t *)CONFIG_ALT_LH_ADDR; + lbuf = (char *)CONFIG_ALT_LB_ADDR; +#else + log = (logbuff_t *)(logbuffer_base ()) - 1; + lbuf = (char *)log->buf; +#endif /* Set up log version */ if ((s = getenv ("logversion")) != NULL) @@ -96,21 +113,36 @@ void logbuff_init_ptrs (void) if ((s = getenv ("loglevel")) != NULL) console_loglevel = (int)simple_strtoul (s, NULL, 10); - gd->post_log_word |= LOGBUFF_INITIALIZED; + gd->flags |= GD_FLG_LOGINIT; } void logbuff_reset (void) { +#ifndef CONFIG_ALT_LB_ADDR memset (log, 0, sizeof (logbuff_t)); - if (log_version == 2) +#endif + if (log_version == 2) { log->v2.tag = LOGBUFF_MAGIC; - else +#ifdef CONFIG_ALT_LB_ADDR + log->v2.start = 0; + log->v2.con = 0; + log->v2.end = 0; + log->v2.chars = 0; +#endif + } else { log->v1.tag = LOGBUFF_MAGIC; +#ifdef CONFIG_ALT_LB_ADDR + log->v1.dummy = 0; + log->v1.start = 0; + log->v1.size = 0; + log->v1.chars = 0; +#endif + } } int drv_logbuff_init (void) { - device_t logdev; + struct stdio_dev logdev; int rc; /* Device initialization */ @@ -122,7 +154,7 @@ int drv_logbuff_init (void) logdev.putc = logbuff_putc; /* 'putc' function */ logdev.puts = logbuff_puts; /* 'puts' function */ - rc = device_register (&logdev); + rc = stdio_register (&logdev); return (rc == 0) ? 1 : rc; } @@ -142,7 +174,7 @@ static void logbuff_puts (const char *s) void logbuff_log(char *msg) { - if ((gd->post_log_word & LOGBUFF_INITIALIZED)) { + if ((gd->flags & GD_FLG_LOGINIT)) { logbuff_printk (msg); } else { /* Can happen only for pre-relocated errors as logging */ @@ -161,7 +193,7 @@ void logbuff_log(char *msg) * Return: None * */ -int do_log (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +int do_log (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { char *s; unsigned long i, start, size; @@ -188,7 +220,7 @@ int do_log (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) size = log->v1.size; } for (i=0; i < (size&LOGBUFF_MASK); i++) { - s = (char *)log->buf+((start+i)&LOGBUFF_MASK); + s = lbuf+((start+i)&LOGBUFF_MASK); putc (*s); } return 0; @@ -196,7 +228,7 @@ int do_log (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) logbuff_reset (); return 0; } else if (strcmp(argv[1],"info") == 0) { - printf ("Logbuffer at %08lx\n", (unsigned long)log->buf); + printf ("Logbuffer at %08lx\n", (unsigned long)lbuf); if (log_version == 2) { printf ("log_start = %08lx\n", log->v2.start); printf ("log_end = %08lx\n", log->v2.end); @@ -209,22 +241,22 @@ int do_log (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) } return 0; } - printf ("Usage:\n%s\n", cmdtp->usage); + cmd_usage(cmdtp); return 1; default: - printf ("Usage:\n%s\n", cmdtp->usage); + cmd_usage(cmdtp); return 1; } } U_BOOT_CMD( log, 255, 1, do_log, - "log - manipulate logbuffer\n", + "manipulate logbuffer", "info - show pointer details\n" "log reset - clear contents\n" "log show - show contents\n" - "log append - append to the logbuffer\n" + "log append - append to the logbuffer" ); static int logbuff_printk(const char *line) @@ -257,14 +289,14 @@ static int logbuff_printk(const char *line) line_feed = 0; for (; p < buf_end; p++) { if (log_version == 2) { - log->buf[log->v2.end & LOGBUFF_MASK] = *p; + lbuf[log->v2.end & LOGBUFF_MASK] = *p; log->v2.end++; if (log->v2.end - log->v2.start > LOGBUFF_LEN) log->v2.start++; log->v2.chars++; } else { - log->buf[(log->v1.start + log->v1.size) & + lbuf[(log->v1.start + log->v1.size) & LOGBUFF_MASK] = *p; if (log->v1.size < LOGBUFF_LEN) log->v1.size++;