]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - common/cmd_log.c
NAND: move board_nand_init to nand.h
[people/ms/u-boot.git] / common / cmd_log.c
index 5bf811e75580e2842c0c323ddceb118fbfeb2ee3..febdb90cfcb243530d2d47d727b78558c03b833a 100644 (file)
@@ -48,8 +48,6 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#if defined(CONFIG_LOGBUFFER)
-
 /* Local prototypes */
 static void logbuff_putc (const char c);
 static void logbuff_puts (const char *s);
@@ -61,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)
@@ -83,13 +98,13 @@ void logbuff_init_ptrs (void)
        /* The post routines have setup the word so we can simply test it */
        if (tag != LOGBUFF_MAGIC || (post_word & POST_COLDBOOT)) {
                logbuff_reset ();
-       }
+       }
 #else
        /* No post routines, so we do our own checking                    */
        if (tag != LOGBUFF_MAGIC || post_word != LOGBUFF_MAGIC) {
                logbuff_reset ();
                post_word_store (LOGBUFF_MAGIC);
-       }
+       }
 #endif
        if (log_version == 2 && (long)log->v2.start > (long)log->v2.con)
                log->v2.start = log->v2.con;
@@ -98,16 +113,31 @@ 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)
@@ -144,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 */
@@ -190,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;
@@ -198,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);
@@ -259,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++;
@@ -287,5 +317,3 @@ static int logbuff_printk(const char *line)
        }
        return i;
 }
-
-#endif /* (CONFIG_LOGBUFFER) */