浏览代码

[smsc75xx] Allow up to 100ms for reset to complete

Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown 9 年前
父节点
当前提交
c9176878ef
共有 2 个文件被更改,包括 16 次插入11 次删除
  1. 14
    9
      src/drivers/net/smsc75xx.c
  2. 2
    2
      src/drivers/net/smsc75xx.h

+ 14
- 9
src/drivers/net/smsc75xx.c 查看文件

511
  */
511
  */
512
 static int smsc75xx_reset ( struct smsc75xx_device *smsc75xx ) {
512
 static int smsc75xx_reset ( struct smsc75xx_device *smsc75xx ) {
513
 	uint32_t hw_cfg;
513
 	uint32_t hw_cfg;
514
+	unsigned int i;
514
 	int rc;
515
 	int rc;
515
 
516
 
516
 	/* Reset device */
517
 	/* Reset device */
519
 		return rc;
520
 		return rc;
520
 
521
 
521
 	/* Wait for reset to complete */
522
 	/* Wait for reset to complete */
522
-	udelay ( SMSC75XX_RESET_DELAY_US );
523
+	for ( i = 0 ; i < SMSC75XX_RESET_MAX_WAIT_MS ; i++ ) {
523
 
524
 
524
-	/* Check that reset has completed */
525
-	if ( ( rc = smsc75xx_readl ( smsc75xx, SMSC75XX_HW_CFG,
526
-				     &hw_cfg ) ) != 0 )
527
-		return rc;
528
-	if ( hw_cfg & SMSC75XX_HW_CFG_LRST ) {
529
-		DBGC ( smsc75xx, "SMSC75XX %p failed to reset\n", smsc75xx );
530
-		return -ETIMEDOUT;
525
+		/* Check if reset has completed */
526
+		if ( ( rc = smsc75xx_readl ( smsc75xx, SMSC75XX_HW_CFG,
527
+					     &hw_cfg ) ) != 0 )
528
+			return rc;
529
+		if ( ! ( hw_cfg & SMSC75XX_HW_CFG_LRST ) )
530
+			return 0;
531
+
532
+		/* Delay */
533
+		mdelay ( 1 );
531
 	}
534
 	}
532
 
535
 
533
-	return 0;
536
+	DBGC ( smsc75xx, "SMSC75XX %p timed out waiting for reset\n",
537
+	       smsc75xx );
538
+	return -ETIMEDOUT;
534
 }
539
 }
535
 
540
 
536
 /******************************************************************************
541
 /******************************************************************************

+ 2
- 2
src/drivers/net/smsc75xx.h 查看文件

280
 	uint32_t int_sts;
280
 	uint32_t int_sts;
281
 };
281
 };
282
 
282
 
283
-/** Reset delay (in microseconds) */
284
-#define SMSC75XX_RESET_DELAY_US 2
283
+/** Maximum time to wait for reset (in milliseconds) */
284
+#define SMSC75XX_RESET_MAX_WAIT_MS 100
285
 
285
 
286
 /** Maximum time to wait for EEPROM (in milliseconds) */
286
 /** Maximum time to wait for EEPROM (in milliseconds) */
287
 #define SMSC75XX_EEPROM_MAX_WAIT_MS 100
287
 #define SMSC75XX_EEPROM_MAX_WAIT_MS 100

正在加载...
取消
保存