adjusted timing
This commit is contained in:
@@ -44,7 +44,7 @@ sleep 10
|
|||||||
# use system sdram as flashlib scratch area.
|
# use system sdram as flashlib scratch area.
|
||||||
# TODO: plugin flashing seems to work o.k. now for smaller binaries, while it doesn't for larger ones (EmuTOS) yet.
|
# TODO: plugin flashing seems to work o.k. now for smaller binaries, while it doesn't for larger ones (EmuTOS) yet.
|
||||||
# This seems to be related to large flash buffers and PC-relative adressing of the plugin
|
# This seems to be related to large flash buffers and PC-relative adressing of the plugin
|
||||||
#flash-plugin 0x1000 0xf000 flash29.plugin
|
flash-plugin 0x1000 0xf000 flash29.plugin
|
||||||
# notify flashlib that we have flash at address 0xE0000000, length 0x7FFFFF, plugin is flash29
|
# notify flashlib that we have flash at address 0xE0000000, length 0x7FFFFF, plugin is flash29
|
||||||
flash 0xE0000000
|
flash 0xE0000000
|
||||||
|
|
||||||
@@ -55,9 +55,17 @@ flash 0xE0000000
|
|||||||
#
|
#
|
||||||
# contrary to documentation, it seems we need to erase-wait after each sector
|
# contrary to documentation, it seems we need to erase-wait after each sector
|
||||||
|
|
||||||
erase 0xE0000000 0x000000
|
erase 0xE0000000 0
|
||||||
erase-wait 0xE0000000
|
erase 0xE0000000 1
|
||||||
erase 0xE0000000 0x100000
|
erase 0xE0000000 2
|
||||||
|
erase 0xE0000000 3
|
||||||
|
erase 0xE0000000 4
|
||||||
|
erase 0xE0000000 5
|
||||||
|
erase 0xE0000000 7
|
||||||
|
erase 0xE0000000 8
|
||||||
|
erase 0xE0000000 9
|
||||||
|
erase 0xE0000000 10
|
||||||
erase-wait 0xE0000000
|
erase-wait 0xE0000000
|
||||||
|
|
||||||
load -v ../firebee/bas.elf
|
load -v ../firebee/bas.elf
|
||||||
wait
|
wait
|
||||||
|
|||||||
@@ -556,19 +556,19 @@ static void pci_device_config(uint16_t bus, uint16_t device, uint16_t function)
|
|||||||
cr |= 1;
|
cr |= 1;
|
||||||
|
|
||||||
barnum++;
|
barnum++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check if device requests an interrupt */
|
|
||||||
il = pci_read_config_byte(handle, PCIIPR);
|
|
||||||
xprintf("device requests interrupts on interrupt pin %d\r\n", il);
|
|
||||||
|
|
||||||
/* if so, register interrupts */
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* mark end of resource chain */
|
/* mark end of resource chain */
|
||||||
if (barnum > 0)
|
if (barnum > 0)
|
||||||
descriptors[barnum - 1].flags |= FLG_LAST;
|
descriptors[barnum - 1].flags |= FLG_LAST;
|
||||||
|
|
||||||
|
/* check if device requests an interrupt */
|
||||||
|
il = pci_read_config_byte(handle, PCIIPR);
|
||||||
|
xprintf("device requests interrupts on interrupt pin %d\r\n", il);
|
||||||
|
|
||||||
|
/* if so, register interrupts */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* enable device memory or I/O access
|
* enable device memory or I/O access
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -56,7 +56,7 @@
|
|||||||
extern int usb_stor_curr_dev;
|
extern int usb_stor_curr_dev;
|
||||||
extern uint32_t usb_1st_disk_drive;
|
extern uint32_t usb_1st_disk_drive;
|
||||||
|
|
||||||
//#define USB_DEBUG
|
#define USB_DEBUG
|
||||||
|
|
||||||
#ifdef USB_DEBUG
|
#ifdef USB_DEBUG
|
||||||
#define debug_printf(fmt, args...) xprintf(fmt , ##args)
|
#define debug_printf(fmt, args...) xprintf(fmt , ##args)
|
||||||
@@ -880,6 +880,7 @@ struct usb_device *usb_alloc_new_device(int bus_index, void *priv)
|
|||||||
{
|
{
|
||||||
int i, index = dev_index[bus_index];
|
int i, index = dev_index[bus_index];
|
||||||
struct usb_device *dev;
|
struct usb_device *dev;
|
||||||
|
|
||||||
debug_printf("USB %d new device %d\r\n", bus_index, index);
|
debug_printf("USB %d new device %d\r\n", bus_index, index);
|
||||||
if (index >= USB_MAX_DEVICE)
|
if (index >= USB_MAX_DEVICE)
|
||||||
{
|
{
|
||||||
@@ -898,6 +899,7 @@ struct usb_device *usb_alloc_new_device(int bus_index, void *priv)
|
|||||||
return dev;
|
return dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define CONFIG_LEGACY_USB_INIT_SEQ
|
||||||
/*
|
/*
|
||||||
* By the time we get here, the device has gotten a new device ID
|
* By the time we get here, the device has gotten a new device ID
|
||||||
* and is in the default state. We need to identify the thing and
|
* and is in the default state. We need to identify the thing and
|
||||||
@@ -909,23 +911,28 @@ int usb_new_device(struct usb_device *dev)
|
|||||||
{
|
{
|
||||||
int addr, err, tmp;
|
int addr, err, tmp;
|
||||||
unsigned char *tmpbuf;
|
unsigned char *tmpbuf;
|
||||||
|
|
||||||
#ifndef CONFIG_LEGACY_USB_INIT_SEQ
|
#ifndef CONFIG_LEGACY_USB_INIT_SEQ
|
||||||
struct usb_device_descriptor *desc;
|
struct usb_device_descriptor *desc;
|
||||||
int port = -1;
|
int port = -1;
|
||||||
struct usb_device *parent = dev->parent;
|
struct usb_device *parent = dev->parent;
|
||||||
unsigned short portstatus;
|
unsigned short portstatus;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (dev == NULL)
|
if (dev == NULL)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
/* We still haven't set the Address yet */
|
/* We still haven't set the Address yet */
|
||||||
addr = dev->devnum;
|
addr = dev->devnum;
|
||||||
dev->devnum = 0;
|
dev->devnum = 0;
|
||||||
tmpbuf = (unsigned char *)usb_malloc(USB_BUFSIZ);
|
|
||||||
|
tmpbuf = (unsigned char *) usb_malloc(USB_BUFSIZ);
|
||||||
if (tmpbuf == NULL)
|
if (tmpbuf == NULL)
|
||||||
{
|
{
|
||||||
debug_printf("usb_new_device: malloc failure\r\n");
|
debug_printf("usb_new_device: malloc failure\r\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_LEGACY_USB_INIT_SEQ
|
#ifdef CONFIG_LEGACY_USB_INIT_SEQ
|
||||||
/* this is the old and known way of initializing devices, it is
|
/* this is the old and known way of initializing devices, it is
|
||||||
* different than what Windows and Linux are doing. Windows and Linux
|
* different than what Windows and Linux are doing. Windows and Linux
|
||||||
@@ -969,6 +976,7 @@ int usb_new_device(struct usb_device *dev)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
dev->descriptor.bMaxPacketSize0 = desc->bMaxPacketSize0;
|
dev->descriptor.bMaxPacketSize0 = desc->bMaxPacketSize0;
|
||||||
|
|
||||||
/* find the port number we're at */
|
/* find the port number we're at */
|
||||||
if (parent)
|
if (parent)
|
||||||
{
|
{
|
||||||
@@ -991,7 +999,7 @@ int usb_new_device(struct usb_device *dev)
|
|||||||
err = hub_port_reset(dev->parent, port, &portstatus);
|
err = hub_port_reset(dev->parent, port, &portstatus);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
{
|
{
|
||||||
debug_printf("\r\nCouldn't reset port %i\r\n", port);
|
debug_printf("\r\nCouldn't reset port %d\r\n", port);
|
||||||
usb_free(tmpbuf);
|
usb_free(tmpbuf);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -1204,6 +1212,7 @@ static int hub_port_reset(struct usb_device *dev, int port, unsigned short *port
|
|||||||
unsigned short portstatus, portchange;
|
unsigned short portstatus, portchange;
|
||||||
|
|
||||||
dbg_hub("hub_port_reset: resetting port %d...\r\n", port + 1);
|
dbg_hub("hub_port_reset: resetting port %d...\r\n", port + 1);
|
||||||
|
|
||||||
for (tries = 0; tries < MAX_TRIES; tries++)
|
for (tries = 0; tries < MAX_TRIES; tries++)
|
||||||
{
|
{
|
||||||
usb_set_port_feature(dev, port + 1, USB_PORT_FEAT_RESET);
|
usb_set_port_feature(dev, port + 1, USB_PORT_FEAT_RESET);
|
||||||
@@ -1212,7 +1221,7 @@ static int hub_port_reset(struct usb_device *dev, int port, unsigned short *port
|
|||||||
vTaskDelay((200*configTICK_RATE_HZ)/1000);
|
vTaskDelay((200*configTICK_RATE_HZ)/1000);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
wait(400);
|
wait(10000);
|
||||||
if (usb_get_port_status(dev, port + 1, &portsts) < 0)
|
if (usb_get_port_status(dev, port + 1, &portsts) < 0)
|
||||||
{
|
{
|
||||||
dbg_hub("get_port_status failed status %lX\r\n", dev->status);
|
dbg_hub("get_port_status failed status %lX\r\n", dev->status);
|
||||||
@@ -1220,23 +1229,28 @@ static int hub_port_reset(struct usb_device *dev, int port, unsigned short *port
|
|||||||
}
|
}
|
||||||
portstatus = swpw(portsts.wPortStatus);
|
portstatus = swpw(portsts.wPortStatus);
|
||||||
portchange = swpw(portsts.wPortChange);
|
portchange = swpw(portsts.wPortChange);
|
||||||
dbg_hub("USB %d portstatus %x, change %x, %s\r\n", dev->usbnum, portstatus, portchange, portspeed(portstatus));
|
dbg_hub("USB %d portstatus 0x%x, change 0x%x, %s\r\n", dev->usbnum, portstatus, portchange, portspeed(portstatus));
|
||||||
dbg_hub("STAT_C_CONNECTION = %d STAT_CONNECTION = %d USB_PORT_STAT_ENABLE = %d\r\n",
|
dbg_hub("STAT_C_CONNECTION = %d STAT_CONNECTION = %d USB_PORT_STAT_ENABLE = %d\r\n",
|
||||||
(portchange & USB_PORT_STAT_C_CONNECTION) ? 1 : 0, (portstatus & USB_PORT_STAT_CONNECTION) ? 1 : 0, (portstatus & USB_PORT_STAT_ENABLE) ? 1 : 0);
|
(portchange & USB_PORT_STAT_C_CONNECTION) ? 1 : 0,
|
||||||
|
(portstatus & USB_PORT_STAT_CONNECTION) ? 1 : 0,
|
||||||
|
(portstatus & USB_PORT_STAT_ENABLE) ? 1 : 0);
|
||||||
|
|
||||||
if ((portchange & USB_PORT_STAT_C_CONNECTION) || !(portstatus & USB_PORT_STAT_CONNECTION))
|
if ((portchange & USB_PORT_STAT_C_CONNECTION) || !(portstatus & USB_PORT_STAT_CONNECTION))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (portstatus & USB_PORT_STAT_ENABLE)
|
if (portstatus & USB_PORT_STAT_ENABLE)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef USB_POLL_HUB
|
#ifdef USB_POLL_HUB
|
||||||
if (pxCurrentTCB != NULL)
|
if (pxCurrentTCB != NULL)
|
||||||
vTaskDelay((200*configTICK_RATE_HZ)/1000);
|
vTaskDelay((200*configTICK_RATE_HZ)/1000);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
wait(200);
|
wait(20000);
|
||||||
}
|
}
|
||||||
if (tries == MAX_TRIES)
|
if (tries == MAX_TRIES)
|
||||||
{
|
{
|
||||||
dbg_hub("USB %d, cannot enable port %i after %i retries, disabling port.\r\n", dev->usbnum, port + 1, MAX_TRIES);
|
dbg_hub("USB %d, cannot enable port %d after %d retries, disabling port.\r\n", dev->usbnum, port + 1, MAX_TRIES);
|
||||||
dbg_hub("Maybe the USB cable is bad?\r\n");
|
dbg_hub("Maybe the USB cable is bad?\r\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -1287,7 +1301,7 @@ void usb_hub_port_connect_change(struct usb_device *dev, int port)
|
|||||||
vTaskDelay((200*configTICK_RATE_HZ)/1000);
|
vTaskDelay((200*configTICK_RATE_HZ)/1000);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
wait(200);
|
wait(2000);
|
||||||
/* Reset the port */
|
/* Reset the port */
|
||||||
if (hub_port_reset(dev, port, &portstatus) < 0)
|
if (hub_port_reset(dev, port, &portstatus) < 0)
|
||||||
{
|
{
|
||||||
@@ -1299,17 +1313,21 @@ void usb_hub_port_connect_change(struct usb_device *dev, int port)
|
|||||||
vTaskDelay((200*configTICK_RATE_HZ)/1000);
|
vTaskDelay((200*configTICK_RATE_HZ)/1000);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
wait(200);
|
wait(2000);
|
||||||
|
|
||||||
/* Allocate a new device struct for it */
|
/* Allocate a new device struct for it */
|
||||||
usb = usb_alloc_new_device(dev->usbnum, dev->priv_hcd);
|
usb = usb_alloc_new_device(dev->usbnum, dev->priv_hcd);
|
||||||
|
|
||||||
if (portstatus & USB_PORT_STAT_HIGH_SPEED)
|
if (portstatus & USB_PORT_STAT_HIGH_SPEED)
|
||||||
usb->speed = USB_SPEED_HIGH;
|
usb->speed = USB_SPEED_HIGH;
|
||||||
else if (portstatus & USB_PORT_STAT_LOW_SPEED)
|
else if (portstatus & USB_PORT_STAT_LOW_SPEED)
|
||||||
usb->speed = USB_SPEED_LOW;
|
usb->speed = USB_SPEED_LOW;
|
||||||
else
|
else
|
||||||
usb->speed = USB_SPEED_FULL;
|
usb->speed = USB_SPEED_FULL;
|
||||||
|
dbg_hub("%s: usb=%p\r\n", __FUNCTION__, usb);
|
||||||
dev->children[port] = usb;
|
dev->children[port] = usb;
|
||||||
usb->parent = dev;
|
usb->parent = dev;
|
||||||
|
|
||||||
/* Run it through the hoops (find a driver, etc) */
|
/* Run it through the hoops (find a driver, etc) */
|
||||||
if (usb_new_device(usb))
|
if (usb_new_device(usb))
|
||||||
{
|
{
|
||||||
@@ -1317,6 +1335,7 @@ void usb_hub_port_connect_change(struct usb_device *dev, int port)
|
|||||||
dbg_hub("USB %d hub: disabling port %d\r\n", dev->usbnum, port + 1);
|
dbg_hub("USB %d hub: disabling port %d\r\n", dev->usbnum, port + 1);
|
||||||
usb_clear_port_feature(dev, port + 1, USB_PORT_FEAT_ENABLE);
|
usb_clear_port_feature(dev, port + 1, USB_PORT_FEAT_ENABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USB_POLL_HUB
|
#ifdef USB_POLL_HUB
|
||||||
else if (pxCurrentTCB != NULL)
|
else if (pxCurrentTCB != NULL)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user