ramoops: make ramoops command
authorMinkyu Kang <mk7.kang@samsung.com>
Fri, 29 Oct 2010 10:25:40 +0000 (19:25 +0900)
committerMinkyu Kang <mk7.kang@samsung.com>
Fri, 29 Oct 2010 10:25:40 +0000 (19:25 +0900)
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
board/samsung/universal_c110/universal.c
board/samsung/universal_c210/universal.c
drivers/misc/Makefile
drivers/misc/ramoops.c
include/configs/s5pc110_universal.h
include/configs/s5pc210_universal.h
include/ramoops.h

index 16bee3a..37b9e90 100644 (file)
@@ -2449,12 +2449,12 @@ static void setup_meminfo(void)
        setenv("meminfo", meminfo);
 }
 
-#ifdef CONFIG_RAMOOPS
+#ifdef CONFIG_CMD_RAMOOPS
 static void show_dump_msg(void)
 {
        int ret;
 
-       ret = ramoops_show_msg(samsung_get_base_modem());
+       ret = ramoops_init(samsung_get_base_modem());
 
        if (!ret)
                setenv("bootdelay", "-1");
@@ -2464,7 +2464,7 @@ static void show_dump_msg(void)
 int misc_init_r(void)
 {
        check_reset_status();
-#ifdef CONFIG_RAMOOPS
+#ifdef CONFIG_CMD_RAMOOPS
        show_dump_msg();
 #endif
 
index e117113..c7c4346 100644 (file)
@@ -934,7 +934,7 @@ static void check_reset_status(void)
        }
 }
 
-#ifdef CONFIG_RAMOOPS
+#ifdef CONFIG_CMD_RAMOOPS
 static void show_dump_msg(void)
 {
        struct s5pc210_clock *clk =
@@ -942,7 +942,7 @@ static void show_dump_msg(void)
        int ret;
        unsigned int reg;
 
-       ret = ramoops_show_msg(samsung_get_base_modem());
+       ret = ramoops_init(samsung_get_base_modem());
 
        if (!ret)
                setenv("bootdelay", "-1");
@@ -958,7 +958,7 @@ static void show_dump_msg(void)
 int misc_init_r(void)
 {
        check_reset_status();
-#ifdef CONFIG_RAMOOPS
+#ifdef CONFIG_CMD_RAMOOPS
        show_dump_msg();
 #endif
        check_auto_burn();
index 6463a6d..209c4b4 100644 (file)
@@ -33,7 +33,7 @@ COBJS-$(CONFIG_NS87308) += ns87308.o
 COBJS-$(CONFIG_STATUS_LED) += status_led.o
 COBJS-$(CONFIG_TWL4030_LED) += twl4030_led.o
 COBJS-$(CONFIG_FSL_PMIC) += fsl_pmic.o
-COBJS-$(CONFIG_RAMOOPS) += ramoops.o
+COBJS-$(CONFIG_CMD_RAMOOPS) += ramoops.o
 
 COBJS  := $(COBJS-y)
 SRCS   := $(COBJS:.o=.c)
index dda3860..21d9dc5 100644 (file)
@@ -5,24 +5,64 @@
 #include <common.h>
 #include <ramoops.h>
 
-int ramoops_show_msg(unsigned int base)
+static char msg[RAMOOPS_SIZE];
+static int dumped;
+
+static void ramoops_show(void)
 {
-       unsigned int *msg_header = (unsigned int *)base;
-       char msg[RAMOOPS_SIZE];
        int i;
 
-       if (*msg_header != RAMOOPS_HEADER)
-               return -1;
-
-       memcpy(msg, (void *)base, RAMOOPS_SIZE);
+       if (!dumped) {
+               puts("No Messages\n");
+               return;
+       }
 
        printf("\n\n");
-       for (i = 0; i < RAMOOPS_SIZE; i++) {
+       for (i = 0; i < RAMOOPS_SIZE; i++)
                printf("%c", msg[i]);
-       }
        printf("\n\n");
+}
+
+int ramoops_init(unsigned int base)
+{
+       unsigned int *msg_header = (unsigned int *)base;
+
+       dumped = 0;
 
+       if (*msg_header != RAMOOPS_HEADER)
+               return -1;
+
+       memcpy(msg, (void *)base, RAMOOPS_SIZE);
        memset((void *)base, 0x0, RAMOOPS_SIZE);
 
+       dumped = 1;
+
+       ramoops_show();
+
        return 0;
 }
+
+static int do_ramoops(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
+{
+       switch (argc) {
+       case 2:
+               if (strncmp(argv[1], "show", 2) == 0) {
+                       ramoops_show();
+               } else {
+                       cmd_usage(cmdtp);
+                       return 1;
+               }
+               break;
+       default:
+               cmd_usage(cmdtp);
+               return 1;
+       }
+
+       return 0;
+}
+
+U_BOOT_CMD(
+       ramoops,                CONFIG_SYS_MAXARGS,     1, do_ramoops,
+       "RAM Oops/Panic Logger",
+       "show - show messages\n"
+);
index 98b220b..02e1ce9 100644 (file)
 #define CONFIG_CMD_PMIC
 #define CONFIG_CMD_DEVICE_POWER
 #define CONFIG_CMD_FAT
+#define CONFIG_CMD_RAMOOPS
 
 /* disabled commands */
 //#define CONFIG_CMD_GPIO
 #define CONFIG_SYS_SP_ADDR     (CONFIG_SYS_LOAD_ADDR - 0x1000000)
 #define CONFIG_SYS_INIT_SP_ADDR        (CONFIG_SYS_SP_ADDR - CONFIG_SYS_GBL_DATA_SIZE)
 
-#define CONFIG_RAMOOPS
-
 #endif /* __CONFIG_H */
index 54e22d3..22ccce0 100644 (file)
 #define CONFIG_CMD_PMIC
 #define CONFIG_CMD_DEVICE_POWER
 #define CONFIG_CMD_FAT
+#define CONFIG_CMD_RAMOOPS
 
 /* disabled commands */
 //#define CONFIG_CMD_GPIO
 #define CONFIG_SYS_SP_ADDR     (CONFIG_SYS_LOAD_ADDR - 0x1000000)
 #define CONFIG_SYS_INIT_SP_ADDR        (CONFIG_SYS_SP_ADDR - CONFIG_SYS_GBL_DATA_SIZE)
 
-#define CONFIG_RAMOOPS
-
 #define CONFIG_TEST_BOOTTIME
 #define CONFIG_TEST_BOOTFAIL
 
index 77aa2ea..ebcffdc 100644 (file)
@@ -6,4 +6,4 @@
 #define RAMOOPS_SIZE   0x1000
 #define RAMOOPS_HEADER 0x3d3d3d3d
 
-int ramoops_show_msg(unsigned int base);
+int ramoops_init(unsigned int base);