forked from luck/tmp_suning_uos_patched
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
@ -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);
|
void netxen_free_adapter_offload(struct netxen_adapter *adapter);
|
||||||
int netxen_initialize_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_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_load_firmware(struct netxen_adapter *adapter);
|
||||||
int netxen_pinit_from_rom(struct netxen_adapter *adapter, int verbose);
|
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);
|
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)
|
void netxen_release_rx_buffers(struct netxen_adapter *adapter)
|
||||||
{
|
{
|
||||||
struct netxen_recv_context *recv_ctx;
|
struct netxen_recv_context *recv_ctx;
|
||||||
@ -789,7 +753,8 @@ int netxen_phantom_init(struct netxen_adapter *adapter, int pegtune_val)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int netxen_receive_peg_ready(struct netxen_adapter *adapter)
|
static int
|
||||||
|
netxen_receive_peg_ready(struct netxen_adapter *adapter)
|
||||||
{
|
{
|
||||||
u32 val = 0;
|
u32 val = 0;
|
||||||
int retries = 2000;
|
int retries = 2000;
|
||||||
@ -813,6 +778,26 @@ int netxen_receive_peg_ready(struct netxen_adapter *adapter)
|
|||||||
return 0;
|
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
|
static int
|
||||||
netxen_alloc_rx_skb(struct netxen_adapter *adapter,
|
netxen_alloc_rx_skb(struct netxen_adapter *adapter,
|
||||||
struct nx_host_rds_ring *rds_ring,
|
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);
|
netxen_napi_add(adapter, netdev);
|
||||||
|
|
||||||
err = netxen_receive_peg_ready(adapter);
|
|
||||||
if (err)
|
|
||||||
goto err_out_disable_msi;
|
|
||||||
|
|
||||||
init_timer(&adapter->watchdog_timer);
|
init_timer(&adapter->watchdog_timer);
|
||||||
adapter->watchdog_timer.function = &netxen_watchdog;
|
adapter->watchdog_timer.function = &netxen_watchdog;
|
||||||
adapter->watchdog_timer.data = (unsigned long)adapter;
|
adapter->watchdog_timer.data = (unsigned long)adapter;
|
||||||
|
Loading…
Reference in New Issue
Block a user