diff options
Diffstat (limited to 'drivers/net/ethernet/emulex/benet/be_cmds.c')
| -rw-r--r-- | drivers/net/ethernet/emulex/benet/be_cmds.c | 36 | 
1 files changed, 16 insertions, 20 deletions
| diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c index 071aea79d21..3c9b4f12e3e 100644 --- a/drivers/net/ethernet/emulex/benet/be_cmds.c +++ b/drivers/net/ethernet/emulex/benet/be_cmds.c @@ -473,19 +473,17 @@ static int be_mbox_notify_wait(struct be_adapter *adapter)  	return 0;  } -static int be_POST_stage_get(struct be_adapter *adapter, u16 *stage) +static u16 be_POST_stage_get(struct be_adapter *adapter)  {  	u32 sem; -	u32 reg = skyhawk_chip(adapter) ? SLIPORT_SEMAPHORE_OFFSET_SH : -					  SLIPORT_SEMAPHORE_OFFSET_BE; -	pci_read_config_dword(adapter->pdev, reg, &sem); -	*stage = sem & POST_STAGE_MASK; - -	if ((sem >> POST_ERR_SHIFT) & POST_ERR_MASK) -		return -1; +	if (BEx_chip(adapter)) +		sem  = ioread32(adapter->csr + SLIPORT_SEMAPHORE_OFFSET_BEx);  	else -		return 0; +		pci_read_config_dword(adapter->pdev, +				      SLIPORT_SEMAPHORE_OFFSET_SH, &sem); + +	return sem & POST_STAGE_MASK;  }  int lancer_wait_ready(struct be_adapter *adapter) @@ -579,19 +577,17 @@ int be_fw_wait_ready(struct be_adapter *adapter)  	}  	do { -		status = be_POST_stage_get(adapter, &stage); -		if (status) { -			dev_err(dev, "POST error; stage=0x%x\n", stage); -			return -1; -		} else if (stage != POST_STAGE_ARMFW_RDY) { -			if (msleep_interruptible(2000)) { -				dev_err(dev, "Waiting for POST aborted\n"); -				return -EINTR; -			} -			timeout += 2; -		} else { +		stage = be_POST_stage_get(adapter); +		if (stage == POST_STAGE_ARMFW_RDY)  			return 0; + +		dev_info(dev, "Waiting for POST, %ds elapsed\n", +			 timeout); +		if (msleep_interruptible(2000)) { +			dev_err(dev, "Waiting for POST aborted\n"); +			return -EINTR;  		} +		timeout += 2;  	} while (timeout < 60);  	dev_err(dev, "POST timeout; stage=0x%x\n", stage); |