diff options
author | hyokeun <hyokeun.jeon@samsung.com> | 2016-09-06 14:09:22 +0900 |
---|---|---|
committer | hyokeun <hyokeun.jeon@samsung.com> | 2016-09-06 14:09:22 +0900 |
commit | bd54c25035217800f3b1d39f6472d599cd602d5a (patch) | |
tree | 299417fe96f546225439ff92b27ac3e55909a970 /roms/ipxe/src/drivers/net/smsc75xx.c | |
parent | 186efde2677c31fb40d154a81a5f3731eab52414 (diff) | |
download | qemu-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.c | 32 |
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, }; |