mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-14 15:54:15 +08:00
S2io: Check for register initialization completion before accesing device registers
- Making sure register initialisation is complete before proceeding further. The driver must wait until initialization is complete before attempting to access any other device registers. Signed-off-by: Surjit Reang <surjit.reang@neterion.com> Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
17cf803a57
commit
7962024e9d
@ -66,6 +66,7 @@ struct XENA_dev_config {
|
||||
#define ADAPTER_STATUS_RC_PRC_QUIESCENT vBIT(0xFF,16,8)
|
||||
#define ADAPTER_STATUS_MC_DRAM_READY s2BIT(24)
|
||||
#define ADAPTER_STATUS_MC_QUEUES_READY s2BIT(25)
|
||||
#define ADAPTER_STATUS_RIC_RUNNING s2BIT(26)
|
||||
#define ADAPTER_STATUS_M_PLL_LOCK s2BIT(30)
|
||||
#define ADAPTER_STATUS_P_PLL_LOCK s2BIT(31)
|
||||
|
||||
|
@ -84,7 +84,7 @@
|
||||
#include "s2io.h"
|
||||
#include "s2io-regs.h"
|
||||
|
||||
#define DRV_VERSION "2.0.26.6"
|
||||
#define DRV_VERSION "2.0.26.10"
|
||||
|
||||
/* S2io Driver name & version. */
|
||||
static char s2io_driver_name[] = "Neterion";
|
||||
@ -1100,6 +1100,20 @@ static int init_nic(struct s2io_nic *nic)
|
||||
msleep(500);
|
||||
val64 = readq(&bar0->sw_reset);
|
||||
|
||||
/* Ensure that it's safe to access registers by checking
|
||||
* RIC_RUNNING bit is reset. Check is valid only for XframeII.
|
||||
*/
|
||||
if (nic->device_type == XFRAME_II_DEVICE) {
|
||||
for (i = 0; i < 50; i++) {
|
||||
val64 = readq(&bar0->adapter_status);
|
||||
if (!(val64 & ADAPTER_STATUS_RIC_RUNNING))
|
||||
break;
|
||||
msleep(10);
|
||||
}
|
||||
if (i == 50)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* Enable Receiving broadcasts */
|
||||
add = &bar0->mac_cfg;
|
||||
val64 = readq(&bar0->mac_cfg);
|
||||
|
Loading…
Reference in New Issue
Block a user