X-Git-Url: https://git.kernelconcepts.de/?p=karo-tx-uboot.git;a=blobdiff_plain;f=common%2Fcmd_log.c;h=873ee4037196e1488ac78b9e21b6d9cb44208cdf;hp=c6e72ac3c0ca3a84485e5b0b3ae924da13b13916;hb=97842e1ee9f04e8a5a54c3dcbbd048bd581ad09c;hpb=0e15ddd11f1a84c465e434eb051d2ef08ef02b9b diff --git a/common/cmd_log.c b/common/cmd_log.c index c6e72ac3c0..873ee40371 100644 --- a/common/cmd_log.c +++ b/common/cmd_log.c @@ -5,23 +5,7 @@ * Code used from linux/kernel/printk.c * Copyright (C) 1991, 1992 Linus Torvalds * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA + * SPDX-License-Identifier: GPL-2.0+ * * Comments: * @@ -42,15 +26,15 @@ #include #include -#include +#include #include #include DECLARE_GLOBAL_DATA_PTR; /* Local prototypes */ -static void logbuff_putc (const char c); -static void logbuff_puts (const char *s); +static void logbuff_putc(struct stdio_dev *dev, const char c); +static void logbuff_puts(struct stdio_dev *dev, const char *s); static int logbuff_printk(const char *line); static char buf[1024]; @@ -66,7 +50,14 @@ static logbuff_t *log; #endif static char *lbuf; -void logbuff_init_ptrs (void) +unsigned long __logbuffer_base(void) +{ + return CONFIG_SYS_SDRAM_BASE + get_effective_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; @@ -75,13 +66,13 @@ void logbuff_init_ptrs (void) log = (logbuff_t *)CONFIG_ALT_LH_ADDR; lbuf = (char *)CONFIG_ALT_LB_ADDR; #else - log = (logbuff_t *)(gd->bd->bi_memsize-LOGBUFF_LEN) - 1; + log = (logbuff_t *)(logbuffer_base()) - 1; lbuf = (char *)log->buf; #endif /* Set up log version */ if ((s = getenv ("logversion")) != NULL) - log_version = (int)simple_strtoul (s, NULL, 10); + log_version = (int)simple_strtoul(s, NULL, 10); if (log_version == 2) tag = log->v2.tag; @@ -90,9 +81,8 @@ void logbuff_init_ptrs (void) post_word = post_word_load(); #ifdef CONFIG_POST /* The post routines have setup the word so we can simply test it */ - if (tag != LOGBUFF_MAGIC || (post_word & POST_COLDBOOT)) { - logbuff_reset (); - } + 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) { @@ -105,15 +95,15 @@ void logbuff_init_ptrs (void) /* Initialize default loglevel if present */ if ((s = getenv ("loglevel")) != NULL) - console_loglevel = (int)simple_strtoul (s, NULL, 10); + console_loglevel = (int)simple_strtoul(s, NULL, 10); gd->flags |= GD_FLG_LOGINIT; } -void logbuff_reset (void) +void logbuff_reset(void) { #ifndef CONFIG_ALT_LB_ADDR - memset (log, 0, sizeof (logbuff_t)); + memset(log, 0, sizeof(logbuff_t)); #endif if (log_version == 2) { log->v2.tag = LOGBUFF_MAGIC; @@ -134,9 +124,9 @@ void logbuff_reset (void) } } -int drv_logbuff_init (void) +int drv_logbuff_init(void) { - device_t logdev; + struct stdio_dev logdev; int rc; /* Device initialization */ @@ -148,20 +138,20 @@ 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; } -static void logbuff_putc (const char c) +static void logbuff_putc(struct stdio_dev *dev, const char c) { char buf[2]; buf[0] = c; buf[1] = '\0'; - logbuff_printk (buf); + logbuff_printk(buf); } -static void logbuff_puts (const char *s) +static void logbuff_puts(struct stdio_dev *dev, const char *s) { logbuff_printk (s); } @@ -169,10 +159,12 @@ static void logbuff_puts (const char *s) void logbuff_log(char *msg) { if ((gd->flags & GD_FLG_LOGINIT)) { - logbuff_printk (msg); + logbuff_printk(msg); } else { - /* Can happen only for pre-relocated errors as logging */ - /* at that stage should be disabled */ + /* + * Can happen only for pre-relocated errors as logging + * at that stage should be disabled + */ puts (msg); } } @@ -187,16 +179,17 @@ 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[]) { + struct stdio_dev *sdev = NULL; char *s; unsigned long i, start, size; - if (strcmp(argv[1],"append") == 0) { + if (strcmp(argv[1], "append") == 0) { /* Log concatenation of all arguments separated by spaces */ - for (i=2; iv2.start; size = log->v2.end - log->v2.start; - } - else { + } else { start = log->v1.start; size = log->v1.size; } - for (i=0; i < (size&LOGBUFF_MASK); i++) { - s = lbuf+((start+i)&LOGBUFF_MASK); - putc (*s); + if (size > LOGBUFF_LEN) + size = LOGBUFF_LEN; + for (i = 0; i < size; i++) { + s = lbuf + ((start + i) & LOGBUFF_MASK); + putc(*s); } return 0; - } else if (strcmp(argv[1],"reset") == 0) { - logbuff_reset (); + } else if (strcmp(argv[1], "reset") == 0) { + logbuff_reset(); return 0; - } else if (strcmp(argv[1],"info") == 0) { - printf ("Logbuffer at %08lx\n", (unsigned long)lbuf); + } else if (strcmp(argv[1], "info") == 0) { + 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); - printf ("logged_chars = %08lx\n", log->v2.chars); + printf("log_start = %08lx\n", + log->v2.start); + printf("log_end = %08lx\n", log->v2.end); + printf("log_con = %08lx\n", log->v2.con); + printf("logged_chars = %08lx\n", + log->v2.chars); } else { - printf ("log_start = %08lx\n", log->v1.start); - printf ("log_size = %08lx\n", log->v1.size); - printf ("logged_chars = %08lx\n", log->v1.chars); + printf("log_start = %08lx\n", + log->v1.start); + printf("log_size = %08lx\n", + log->v1.size); + printf("logged_chars = %08lx\n", + log->v1.chars); } return 0; } - printf ("Usage:\n%s\n", cmdtp->usage); - return 1; + return CMD_RET_USAGE; default: - printf ("Usage:\n%s\n", cmdtp->usage); - return 1; + return CMD_RET_USAGE; } } 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) @@ -260,8 +258,8 @@ static int logbuff_printk(const char *line) int line_feed; static signed char msg_level = -1; - strcpy (buf + 3, line); - i = strlen (line); + strcpy(buf + 3, line); + i = strlen(line); buf_end = buf + 3 + i; for (p = buf + 3; p < buf_end; p++) { msg = p; @@ -276,8 +274,9 @@ static int logbuff_printk(const char *line) p[0] = '<'; p[1] = default_message_loglevel + '0'; p[2] = '>'; - } else + } else { msg += 3; + } msg_level = p[1] - '0'; } line_feed = 0; @@ -288,8 +287,7 @@ static int logbuff_printk(const char *line) if (log->v2.end - log->v2.start > LOGBUFF_LEN) log->v2.start++; log->v2.chars++; - } - else { + } else { lbuf[(log->v1.start + log->v1.size) & LOGBUFF_MASK] = *p; if (log->v1.size < LOGBUFF_LEN)