/* * Subroutine: do_log * * Description: Handler for 'log' command.. * * Inputs: argv[1] contains the subcommand * * Return: None * */ int do_log (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { char *s; unsigned long i, start, size; if (strcmp(argv[1],"append") == 0) { /* Log concatenation of all arguments separated by spaces */ for (i=2; i<argc; i++) { logbuff_printk (argv[i]); logbuff_putc ((i<argc-1) ? ' ' : '\n'); } return 0; } switch (argc) { case 2: if (strcmp(argv[1],"show") == 0) { if (log_version == 2) { start = log->v2.start; size = log->v2.end - log->v2.start; } 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); } return 0; } 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); 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); } 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); } return 0; } printf ("Usage:\n%s\n", cmdtp->usage); return 1; default: printf ("Usage:\n%s\n", cmdtp->usage); return 1; } }
void logbuff_init_ptrs (void) { unsigned long tag, post_word; char *s; #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) log_version = (int)simple_strtoul (s, NULL, 10); if (log_version == 2) tag = log->v2.tag; else tag = log->v1.tag; 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 (); } #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; /* Initialize default loglevel if present */ if ((s = getenv ("loglevel")) != NULL) console_loglevel = (int)simple_strtoul (s, NULL, 10); gd->flags |= GD_FLG_LOGINIT; }
int do_chkreset(cmd_tbl_t* cmdtp, int flag, int argc, char * const argv[]) { int delta; int count = 0; int post = 0; int factory_reset = 0; if (!sw_reset_pressed()) { printf("SW-Reset already high (Button released)\n"); printf("-> No action taken!\n"); return 0; } printf("Waiting for SW-Reset button to be released."); while (1) { delta = get_timer(start_time); if (!sw_reset_pressed()) break; if ((delta > CONFIG_SYS_TIME_POST) && !post) { printf("\nWhen released now, POST tests will be started."); gpio_write_bit(CONFIG_SYS_GPIO_LED_GREEN, 0); post = 1; } if ((delta > CONFIG_SYS_TIME_FACTORY_RESET) && !factory_reset) { printf("\nWhen released now, factory default values" " will be restored."); gpio_write_bit(CONFIG_SYS_GPIO_LED_RED, 0); factory_reset = 1; } udelay(1000); if (!(count++ % 1000)) printf("."); } printf("\nSW-Reset Button released after %d milli-seconds!\n", delta); if (delta > CONFIG_SYS_TIME_FACTORY_RESET) { printf("Starting factory reset value restoration...\n"); /* * Restore default setting */ restore_default(); /* * Reset the board for default to become valid */ do_reset(NULL, 0, 0, NULL); return 0; } if (delta > CONFIG_SYS_TIME_POST) { printf("Starting POST configuration...\n"); /* * Enable POST upon next bootup */ out_be32((void *)CONFIG_SYS_POST_MAGIC, REBOOT_MAGIC); out_be32((void *)CONFIG_SYS_POST_VAL, REBOOT_DO_POST); post_bootmode_init(); /* * Reset the logbuffer for a clean start */ logbuff_reset(); do_reset(NULL, 0, 0, NULL); return 0; } return 0; }