int usb_read_bootloader(int *_len) {
	long len = 0;
	int n = 0;
	unsigned long offset = (CFG_LOADADDR -0x120);
	static unsigned MSG = 0xaabbccdd;

	/*Enable USB mux pin cfg  enable USB clock */	
	enable_irqs();
	if (usb_open(&usbdev))
		return -1;

	usb_queue_read(&usbdev, &len, 4);
	printf("USB write MSG flag\n");
	usb_write(&usbdev, &MSG, 4);
	n = usb_wait_read(&usbdev);
	if (n)
		return -1;
	printf("USB read to %x len=%d\n", offset, len);
	if (usb_read(&usbdev, (void*) offset, len))
		return -1;

	/* read the img file */
	usb_queue_read(&usbdev, &len, 4);
	n = usb_wait_read(&usbdev);
	if (n)
		return -1;

	/* read the boot.img for booti command */
	printf("USB read2 to %x len=%d\n", 0x81000000, len);
	if (usb_read(&usbdev, (void*) 0x81000000, len))
		return -1;

	usb_close(&usbdev);
	disable_irqs();
	*_len = len;
	return 0;
}
Example #2
0
int usb_read(struct usb *usb, void *data, unsigned len)
{
	unsigned xfer;
	unsigned char *x = data;
	int n;
	while (len > 0) {
		xfer = (len > USB_MAX_IO) ? USB_MAX_IO : len;
		usb_queue_read(usb, x, xfer);
		n = usb_wait_read(usb);
		if (n)
			return n;
		x += xfer;
		len -= xfer;
	}
	return 0;
}
Example #3
0
static int load_from_usb(unsigned *_len, struct usb *usb)
{
	unsigned len, n;
	enable_irqs();

	usb_queue_read(usb, &len, 4);
	usb_write(usb, &MSG, 4);
	n = usb_wait_read(usb);
	if (n)
		return -1;

	if (usb_read(usb, (void*) CONFIG_ADDR_DOWNLOAD, len))
		return -1;

	usb_close(usb);

	disable_irqs();
	*_len = len;
	return 0;
}