int do_cpld(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int rc = 0; if (argc <= 1) return cmd_usage(cmdtp); if (strcmp(argv[1], "reset") == 0) { if (strcmp(argv[2], "altbank") == 0) cpld_set_altbank(); else if (strcmp(argv[2], "nand") == 0) cpld_set_nand(); else if (strcmp(argv[2], "sd") == 0) cpld_set_sd(); else cpld_set_defbank(); #ifdef DEBUG } else if (strcmp(argv[1], "dump") == 0) { cpld_dump_regs(); #endif } else { rc = cmd_usage(cmdtp); } return rc; }
int cpld_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int rc = 0; unsigned char value; if (argc <= 1) return cmd_usage(cmdtp); if (strcmp(argv[1], "reset") == 0) { if (!strcmp(argv[2], "altbank") && argv[3]) { value = (u8)simple_strtoul(argv[3], NULL, 16); cpld_set_altbank(value); } else if (!argv[2]) cpld_set_defbank(); else cmd_usage(cmdtp); #ifdef DEBUG } else if (strcmp(argv[1], "dump") == 0) { cpld_dump_regs(); #endif } else rc = cmd_usage(cmdtp); return rc; }
int cpld_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int rc = 0; unsigned int i; if (argc <= 1) return cmd_usage(cmdtp); if (strcmp(argv[1], "reset") == 0) { if (strcmp(argv[2], "altbank") == 0) cpld_set_altbank(); else cpld_clear_altbank(); cpld_reset(); } else if (strcmp(argv[1], "watchdog") == 0) { static char *period[8] = {"1ms", "10ms", "30ms", "disable", "100ms", "1s", "10s", "60s"}; for (i = 0; i < ARRAY_SIZE(period); i++) { if (strcmp(argv[2], period[i]) == 0) CPLD_WRITE(wd_cfg, i); } } else if (strcmp(argv[1], "lane_mux") == 0) { u32 lane = simple_strtoul(argv[2], NULL, 16); u8 val = (u8)simple_strtoul(argv[3], NULL, 16); u8 reg = CPLD_READ(serdes_mux); switch (lane) { case 0x6: reg &= ~SERDES_MUX_LANE_6_MASK; reg |= val << SERDES_MUX_LANE_6_SHIFT; break; case 0xa: reg &= ~SERDES_MUX_LANE_A_MASK; reg |= val << SERDES_MUX_LANE_A_SHIFT; break; case 0xc: reg &= ~SERDES_MUX_LANE_C_MASK; reg |= val << SERDES_MUX_LANE_C_SHIFT; break; case 0xd: reg &= ~SERDES_MUX_LANE_D_MASK; reg |= val << SERDES_MUX_LANE_D_SHIFT; break; default: printf("Invalid value\n"); break; } CPLD_WRITE(serdes_mux, reg); #ifdef DEBUG } else if (strcmp(argv[1], "dump") == 0) { cpld_dump_regs(); #endif } else rc = cmd_usage(cmdtp); return rc; }
int cpld_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int rc = 0; if (argc <= 1) return cmd_usage(cmdtp); if (strcmp(argv[1], "reset") == 0) { if (strcmp(argv[2], "altbank") == 0) cpld_set_altbank(); else cpld_set_defbank(); } else if (strcmp(argv[1], "lane_mux") == 0) { u32 lane = simple_strtoul(argv[2], NULL, 16); u8 val = (u8)simple_strtoul(argv[3], NULL, 16); u8 reg = CPLD_READ(serdes_mux); switch (lane) { case 0x6: reg &= ~SERDES_MUX_LANE_6_MASK; reg |= val << SERDES_MUX_LANE_6_SHIFT; break; case 0xa: reg &= ~SERDES_MUX_LANE_A_MASK; reg |= val << SERDES_MUX_LANE_A_SHIFT; break; case 0xc: reg &= ~SERDES_MUX_LANE_C_MASK; reg |= val << SERDES_MUX_LANE_C_SHIFT; break; case 0xd: reg &= ~SERDES_MUX_LANE_D_MASK; reg |= val << SERDES_MUX_LANE_D_SHIFT; break; default: printf("Invalid value\n"); break; } CPLD_WRITE(serdes_mux, reg); #ifdef DEBUG } else if (strcmp(argv[1], "dump") == 0) { cpld_dump_regs(); #endif } else rc = cmd_usage(cmdtp); return rc; }
/** * Set the boot bank to the default bank */ void cpld_set_defbank(void) { cpld_set_altbank(4); }