netxen: defer firmware handshake
Removed duplicate firmware handshake, defer it until first port (interface) is brought up. Signed-off-by: Dhananjay Phadke <dhananjay@netxen.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d877f1e344
commit
56a007871a
3 changed files with 22 additions and 42 deletions
|
@ -1359,7 +1359,6 @@ unsigned long netxen_nic_pci_set_window_2M(struct netxen_adapter *adapter,
|
|||
void netxen_free_adapter_offload(struct netxen_adapter *adapter);
|
||||
int netxen_initialize_adapter_offload(struct netxen_adapter *adapter);
|
||||
int netxen_phantom_init(struct netxen_adapter *adapter, int pegtune_val);
|
||||
int netxen_receive_peg_ready(struct netxen_adapter *adapter);
|
||||
int netxen_load_firmware(struct netxen_adapter *adapter);
|
||||
int netxen_pinit_from_rom(struct netxen_adapter *adapter, int verbose);
|
||||
|
||||
|
|
|
@ -108,42 +108,6 @@ static void crb_addr_transform_setup(void)
|
|||
crb_addr_transform(I2C0);
|
||||
}
|
||||
|
||||
int netxen_init_firmware(struct netxen_adapter *adapter)
|
||||
{
|
||||
u32 state = 0, loops = 0, err = 0;
|
||||
|
||||
/* Window 1 call */
|
||||
state = adapter->pci_read_normalize(adapter, CRB_CMDPEG_STATE);
|
||||
|
||||
if (state == PHAN_INITIALIZE_ACK)
|
||||
return 0;
|
||||
|
||||
while (state != PHAN_INITIALIZE_COMPLETE && loops < 2000) {
|
||||
msleep(1);
|
||||
/* Window 1 call */
|
||||
state = adapter->pci_read_normalize(adapter, CRB_CMDPEG_STATE);
|
||||
|
||||
loops++;
|
||||
}
|
||||
if (loops >= 2000) {
|
||||
printk(KERN_ERR "Cmd Peg initialization not complete:%x.\n",
|
||||
state);
|
||||
err = -EIO;
|
||||
return err;
|
||||
}
|
||||
/* Window 1 call */
|
||||
adapter->pci_write_normalize(adapter,
|
||||
CRB_NIC_CAPABILITIES_HOST, INTR_SCHEME_PERPORT);
|
||||
adapter->pci_write_normalize(adapter,
|
||||
CRB_NIC_MSI_MODE_HOST, MSI_MODE_MULTIFUNC);
|
||||
adapter->pci_write_normalize(adapter,
|
||||
CRB_MPORT_MODE, MPORT_MULTI_FUNCTION_MODE);
|
||||
adapter->pci_write_normalize(adapter,
|
||||
CRB_CMDPEG_STATE, PHAN_INITIALIZE_ACK);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
void netxen_release_rx_buffers(struct netxen_adapter *adapter)
|
||||
{
|
||||
struct netxen_recv_context *recv_ctx;
|
||||
|
@ -789,7 +753,8 @@ int netxen_phantom_init(struct netxen_adapter *adapter, int pegtune_val)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int netxen_receive_peg_ready(struct netxen_adapter *adapter)
|
||||
static int
|
||||
netxen_receive_peg_ready(struct netxen_adapter *adapter)
|
||||
{
|
||||
u32 val = 0;
|
||||
int retries = 2000;
|
||||
|
@ -813,6 +778,26 @@ int netxen_receive_peg_ready(struct netxen_adapter *adapter)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int netxen_init_firmware(struct netxen_adapter *adapter)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = netxen_receive_peg_ready(adapter);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
adapter->pci_write_normalize(adapter,
|
||||
CRB_NIC_CAPABILITIES_HOST, INTR_SCHEME_PERPORT);
|
||||
adapter->pci_write_normalize(adapter,
|
||||
CRB_NIC_MSI_MODE_HOST, MSI_MODE_MULTIFUNC);
|
||||
adapter->pci_write_normalize(adapter,
|
||||
CRB_MPORT_MODE, MPORT_MULTI_FUNCTION_MODE);
|
||||
adapter->pci_write_normalize(adapter,
|
||||
CRB_CMDPEG_STATE, PHAN_INITIALIZE_ACK);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int
|
||||
netxen_alloc_rx_skb(struct netxen_adapter *adapter,
|
||||
struct nx_host_rds_ring *rds_ring,
|
||||
|
|
|
@ -1027,10 +1027,6 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
|
||||
netxen_napi_add(adapter, netdev);
|
||||
|
||||
err = netxen_receive_peg_ready(adapter);
|
||||
if (err)
|
||||
goto err_out_disable_msi;
|
||||
|
||||
init_timer(&adapter->watchdog_timer);
|
||||
adapter->watchdog_timer.function = &netxen_watchdog;
|
||||
adapter->watchdog_timer.data = (unsigned long)adapter;
|
||||
|
|
Loading…
Reference in a new issue