示例#1
0
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();
}
示例#2
0
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();
}
示例#3
0
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;
}
示例#4
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;
}