int cmd_fpga(FILE * f, int argc, char ** argv) { uint8_t * rbf = (uint8_t *)0x08060000; uint32_t flash_offs = (uint8_t *)rbf - STM32_FLASH_MEM; bool erase = false; bool load = false; bool cfg = false; if (argc > 1) { int i = 1; do { if ((strcmp(argv[i], "erase") == 0) || (strcmp(argv[i], "e") == 0)) { erase = true; } else if ((strcmp(argv[i], "load") == 0) || (strcmp(argv[i], "l") == 0)) { load = true; } else if ((strcmp(argv[i], "config") == 0) || (strcmp(argv[i], "cfg") == 0) || (strcmp(argv[i], "c") == 0)) { cfg = true; } else { fprintf(f, "Invalid argument: %s\n", argv[i]); return -1; } } while (++i < argc); } else { fprintf(f, "FPG sector: 0x%08x\n", (uint32_t)rbf); show_hex8(f, (uint32_t)rbf, rbf, 1024); return 0; } debugger_except("FPGA update, reboot required!"); if (erase) { fprintf(f, "Erasing sector: 0x%08x...\n", (uint32_t)rbf); if (stm32_flash_erase(flash_offs, 0x20000) < 0) { fprintf(f, "stm32f_flash_erase() failed!\n"); return -1; } }; if (load) { fprintf(f, "Loading FPGA .rbf file at 0x%08x...\n", (uint32_t)rbf); if (flash_xmodem_recv(f, flash_offs) < 0) { fprintf(f, "fpga_xmodem_recv() failed!\n"); return -1; } }; if (cfg) { fprintf(f, "Configuring FPGA...\n"); if (jtag3ctrl_init(rbf, 38177) < 0) { fprintf(f, "jtag3ctrl_init() failed!\n"); return -1; } }; return 0; }
int main(int argc, char ** argv) { int ret; DCC_LOG_INIT(); DCC_LOG_CONNECT(); stdio_init(); printf("\n---\n"); cm3_udelay_calibrate(); thinkos_init(THINKOS_OPT_PRIORITY(0) | THINKOS_OPT_ID(0)); trace_init(); tracef("## YARD-ICE " VERSION_NUM " - " VERSION_DATE " ##"); stm32f_nvram_env_init(); bsp_io_ini(); rtc_init(); supervisor_init(); __os_sleep(10); #if ENABLE_NETWORK DCC_LOG(LOG_TRACE, "network_config()."); network_config(); #endif DCC_LOG(LOG_TRACE, "modules_init()."); modules_init(); tracef("* Starting system module ..."); DCC_LOG(LOG_TRACE, "sys_start()."); sys_start(); tracef("* Initializing YARD-ICE debugger..."); DCC_LOG(LOG_TRACE, "debugger_init()."); debugger_init(); tracef("* Initializing JTAG module ..."); DCC_LOG(LOG_TRACE, "jtag_start()."); if ((ret = jtag_start()) < 0) { tracef("jtag_start() failed! [ret=%d]", ret); debugger_except("JTAG driver fault"); } #if (ENABLE_NAND) tracef("* Initializing NAND module..."); if (mod_nand_start() < 0) { tracef("mod_nand_start() failed!"); return 0; } #endif #if (ENABLE_I2C) tracef("* starting I2C module ... "); i2c_init(); #endif tracef("* configuring initial target ... "); init_target(); #if (ENABLE_VCOM) tracef("* starting VCOM daemon ... "); /* connect the UART to the JTAG auxiliary pins */ jtag3ctrl_aux_uart(true); vcom_start(); #endif #if (ENABLE_COMM) tracef("* starting COMM daemon ... "); comm_tcp_start(&debugger.comm); #endif #if (ENABLE_TFTP) tracef("* starting TFTP server ... "); tftpd_start(); #endif #if (ENABLE_GDB) tracef("* starting GDB daemon ... "); gdb_rspd_start(); #endif #if ENABLE_USB tracef("* starting USB shell ... "); usb_shell(); #endif #if ENABLE_TELNET tracef("* starting TELNET server ... "); telnet_shell(); #endif return console_shell(); }