summaryrefslogtreecommitdiff
path: root/roms/ipxe/src/drivers/net/smsc75xx.c
diff options
context:
space:
mode:
authorhyokeun <hyokeun.jeon@samsung.com>2016-09-06 14:09:22 +0900
committerhyokeun <hyokeun.jeon@samsung.com>2016-09-06 14:09:22 +0900
commitbd54c25035217800f3b1d39f6472d599cd602d5a (patch)
tree299417fe96f546225439ff92b27ac3e55909a970 /roms/ipxe/src/drivers/net/smsc75xx.c
parent186efde2677c31fb40d154a81a5f3731eab52414 (diff)
downloadqemu-bd54c25035217800f3b1d39f6472d599cd602d5a.tar.gz
qemu-bd54c25035217800f3b1d39f6472d599cd602d5a.tar.bz2
qemu-bd54c25035217800f3b1d39f6472d599cd602d5a.zip
Imported Upstream version 2.7.0upstream/2.7.0
Diffstat (limited to 'roms/ipxe/src/drivers/net/smsc75xx.c')
-rw-r--r--roms/ipxe/src/drivers/net/smsc75xx.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/roms/ipxe/src/drivers/net/smsc75xx.c b/roms/ipxe/src/drivers/net/smsc75xx.c
index 017e02a59..4ce98ac80 100644
--- a/roms/ipxe/src/drivers/net/smsc75xx.c
+++ b/roms/ipxe/src/drivers/net/smsc75xx.c
@@ -511,6 +511,7 @@ static int smsc75xx_dump_statistics ( struct smsc75xx_device *smsc75xx ) {
*/
static int smsc75xx_reset ( struct smsc75xx_device *smsc75xx ) {
uint32_t hw_cfg;
+ unsigned int i;
int rc;
/* Reset device */
@@ -519,18 +520,22 @@ static int smsc75xx_reset ( struct smsc75xx_device *smsc75xx ) {
return rc;
/* Wait for reset to complete */
- udelay ( SMSC75XX_RESET_DELAY_US );
+ for ( i = 0 ; i < SMSC75XX_RESET_MAX_WAIT_MS ; i++ ) {
- /* Check that reset has completed */
- if ( ( rc = smsc75xx_readl ( smsc75xx, SMSC75XX_HW_CFG,
- &hw_cfg ) ) != 0 )
- return rc;
- if ( hw_cfg & SMSC75XX_HW_CFG_LRST ) {
- DBGC ( smsc75xx, "SMSC75XX %p failed to reset\n", smsc75xx );
- return -ETIMEDOUT;
+ /* Check if reset has completed */
+ if ( ( rc = smsc75xx_readl ( smsc75xx, SMSC75XX_HW_CFG,
+ &hw_cfg ) ) != 0 )
+ return rc;
+ if ( ! ( hw_cfg & SMSC75XX_HW_CFG_LRST ) )
+ return 0;
+
+ /* Delay */
+ mdelay ( 1 );
}
- return 0;
+ DBGC ( smsc75xx, "SMSC75XX %p timed out waiting for reset\n",
+ smsc75xx );
+ return -ETIMEDOUT;
}
/******************************************************************************
@@ -979,8 +984,9 @@ static int smsc75xx_probe ( struct usb_function *func,
smsc75xx->netdev = netdev;
usbnet_init ( &smsc75xx->usbnet, func, &smsc75xx_intr_operations,
&smsc75xx_in_operations, &smsc75xx_out_operations );
- usb_refill_init ( &smsc75xx->usbnet.intr, 0, SMSC75XX_INTR_MAX_FILL );
- usb_refill_init ( &smsc75xx->usbnet.in, SMSC75XX_IN_MTU,
+ usb_refill_init ( &smsc75xx->usbnet.intr, 0, 0,
+ SMSC75XX_INTR_MAX_FILL );
+ usb_refill_init ( &smsc75xx->usbnet.in, 0, SMSC75XX_IN_MTU,
SMSC75XX_IN_MAX_FILL );
mii_init ( &smsc75xx->mii, &smsc75xx_mii_operations );
DBGC ( smsc75xx, "SMSC75XX %p on %s\n", smsc75xx, func->name );
@@ -1038,13 +1044,11 @@ static struct usb_device_id smsc75xx_ids[] = {
.name = "smsc7500",
.vendor = 0x0424,
.product = 0x7500,
- .class = { 0xff, 0x00, 0xff },
},
{
.name = "smsc7505",
.vendor = 0x0424,
.product = 0x7505,
- .class = { 0xff, 0x00, 0xff },
},
};
@@ -1052,6 +1056,8 @@ static struct usb_device_id smsc75xx_ids[] = {
struct usb_driver smsc75xx_driver __usb_driver = {
.ids = smsc75xx_ids,
.id_count = ( sizeof ( smsc75xx_ids ) / sizeof ( smsc75xx_ids[0] ) ),
+ .class = USB_CLASS_ID ( 0xff, 0x00, 0xff ),
+ .score = USB_SCORE_NORMAL,
.probe = smsc75xx_probe,
.remove = smsc75xx_remove,
};