void main(void) { // enable pinmux clamp inputs clamp_tristate_inputs(); // enable JTAG at the earliest stage enable_jtag(); clock_early_uart(); // Serial out, tristate off. pinmux_set_config(PINMUX_KB_ROW9_INDEX, PINMUX_KB_ROW9_FUNC_UA3); // Serial in, tristate_on. pinmux_set_config(PINMUX_KB_ROW10_INDEX, PINMUX_KB_ROW10_FUNC_UA3 | PINMUX_PULL_UP | PINMUX_INPUT_ENABLE); // Mux some pins away from uart A. pinmux_set_config(PINMUX_UART2_CTS_N_INDEX, PINMUX_UART2_CTS_N_FUNC_UB3 | PINMUX_INPUT_ENABLE); pinmux_set_config(PINMUX_UART2_RTS_N_INDEX, PINMUX_UART2_RTS_N_FUNC_UB3); if (CONFIG_BOOTBLOCK_CONSOLE) { console_init(); exception_init(); } clock_init(); bootblock_mainboard_init(); pinmux_set_config(PINMUX_CORE_PWR_REQ_INDEX, PINMUX_CORE_PWR_REQ_FUNC_PWRON); pinmux_set_config(PINMUX_CPU_PWR_REQ_INDEX, PINMUX_CPU_PWR_REQ_FUNC_CPU); pinmux_set_config(PINMUX_PWR_INT_N_INDEX, PINMUX_PWR_INT_N_FUNC_PMICINTR | PINMUX_INPUT_ENABLE); run_romstage(); }
void main(void) { // enable JTAG at the earliest stage enable_jtag(); clock_early_uart(); /* Configure mselect clock. */ clock_configure_source(mselect, PLLP, 102000); /* Enable AVP cache, timer, APB dma, and mselect blocks. */ clock_enable_clear_reset(CLK_L_CACHE2 | CLK_L_TMR, CLK_H_APBDMA, 0, CLK_V_MSELECT, 0, 0); /* Find ODMDATA in IRAM and save it to scratch reg */ save_odmdata(); bootblock_mainboard_early_init(); if (CONFIG_BOOTBLOCK_CONSOLE) { console_init(); exception_init(); printk(BIOS_INFO, "T132: Bootblock here\n"); } clock_init(); printk(BIOS_INFO, "T132 bootblock: Clock init done\n"); pmc_print_rst_status(); bootblock_mainboard_init(); printk(BIOS_INFO, "T132 bootblock: Mainboard bootblock init done\n"); run_romstage(); }
int digilent::close() { enable_jtag(0); #ifdef WIN32 if (handle_in != INVALID_HANDLE_VALUE) CloseHandle(handle_in); if (handle_out != INVALID_HANDLE_VALUE) CloseHandle(handle_out); handle_in = INVALID_HANDLE_VALUE; handle_out = INVALID_HANDLE_VALUE; #else if (handle == NULL) return -1; usb_close(handle); //usb_reset(handle); handle = NULL; #endif return 0; }
int digilent::open() { #ifdef WIN32 int rc = -1; char device_name[MAX_PATH]; char name[MAX_PATH]; if (handle_in != INVALID_HANDLE_VALUE || handle_out != INVALID_HANDLE_VALUE) // Already open return -1; // Find digilent USB device name if (find_digilent_device_name(device_name) < 0) goto cleanup; sprintf(name, "\\\\.\\%s\\PIPE00", device_name); handle_in = CreateFile( name, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); sprintf(name, "\\\\.\\%s\\PIPE01", device_name); handle_out = CreateFile( name, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if (handle_in == INVALID_HANDLE_VALUE || handle_out == INVALID_HANDLE_VALUE) goto cleanup; #else int rc = -1; struct usb_device* dev; if (handle) // Already open return -1; dev = find_digilent_device(); if (dev == NULL) goto cleanup; handle = usb_open(dev); if (handle == NULL) goto cleanup; if (usb_set_configuration(handle, 1) < 0) goto cleanup; if (usb_claim_interface(handle, 0) < 0) goto cleanup; #endif if (enable_jtag(1)) goto cleanup; reset_tap_state(); rc = 0; cleanup: if (rc) { close(); msgf(STR_UNABLE_TO_OPEN_DIGILENT_USB); } return rc; }