int pixis_reset_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { unsigned int i; char *p_altbank = NULL; #ifdef DEBUG char *p_dump = NULL; #endif char *unknown_param = NULL; /* No args is a simple reset request. */ if (argc <= 1) pixis_reset(); for (i = 1; i < argc; i++) { if (strcmp(argv[i], "altbank") == 0) { p_altbank = argv[i]; continue; } #ifdef DEBUG if (strcmp(argv[i], "dump") == 0) { p_dump = argv[i]; continue; } #endif unknown_param = argv[i]; } if (unknown_param) { printf("Invalid option: %s\n", unknown_param); return 1; } #ifdef DEBUG if (p_dump) { pixis_dump_regs(); /* 'dump' ignores other commands */ return 0; } #endif if (p_altbank) set_altbank(); else clear_altbank(); pixis_bank_reset(); /* Shouldn't be reached. */ return 0; }
static int pixis_reset_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { unsigned int i; char *p_cf = NULL; char *p_cf_sysclk = NULL; char *p_cf_corepll = NULL; char *p_cf_mpxpll = NULL; char *p_altbank = NULL; char *p_wd = NULL; int unknown_param = 0; /* * No args is a simple reset request. */ if (argc <= 1) { pixis_reset(); /* not reached */ } for (i = 1; i < argc; i++) { if (strcmp(argv[i], "cf") == 0) { p_cf = argv[i]; if (i + 3 >= argc) { break; } p_cf_sysclk = argv[i+1]; p_cf_corepll = argv[i+2]; p_cf_mpxpll = argv[i+3]; i += 3; continue; } if (strcmp(argv[i], "altbank") == 0) { p_altbank = argv[i]; continue; } if (strcmp(argv[i], "wd") == 0) { p_wd = argv[i]; continue; } unknown_param = 1; } /* * Check that cf has all required parms */ if ((p_cf && !(p_cf_sysclk && p_cf_corepll && p_cf_mpxpll)) || unknown_param) { #ifdef CONFIG_SYS_LONGHELP puts(cmdtp->help); #endif return 1; } /* * PIXIS seems to be sensitive to the ordering of * the registers that are touched. */ read_from_px_regs(0); if (p_altbank) read_from_px_regs_altbank(0); clear_altbank(); /* * Clock configuration specified. */ if (p_cf) { unsigned long sysclk; unsigned long corepll; unsigned long mpxpll; sysclk = simple_strtoul(p_cf_sysclk, NULL, 10); corepll = strfractoint(p_cf_corepll); mpxpll = simple_strtoul(p_cf_mpxpll, NULL, 10); if (!(set_px_sysclk(sysclk) && set_px_corepll(corepll) && set_px_mpxpll(mpxpll))) { #ifdef CONFIG_SYS_LONGHELP puts(cmdtp->help); #endif return 1; } read_from_px_regs(1); } /* * Altbank specified * * NOTE CHANGE IN BEHAVIOR: previous code would default * to enabling watchdog if altbank is specified. * Now the watchdog must be enabled explicitly using 'wd'. */ if (p_altbank) { set_altbank(); read_from_px_regs_altbank(1); } /* * Reset with watchdog specified. */ if (p_wd) set_px_go_with_watchdog(); else set_px_go(); /* * Shouldn't be reached. */ return 0; }