netxen: defer firmware handshake
authorDhananjay Phadke <dhananjay@netxen.com>
Tue, 7 Apr 2009 22:50:41 +0000 (22:50 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 8 Apr 2009 22:58:26 +0000 (15:58 -0700)
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>
drivers/net/netxen/netxen_nic.h
drivers/net/netxen/netxen_nic_init.c
drivers/net/netxen/netxen_nic_main.c

index 2aa658db103f34074cd3e7c049d94f40ebcca6dc..7e208b31a27eb3bb2048fdb5f4d0bb7d6d3d8851 100644 (file)
@@ -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);
 
index 8e45dcc27c7ff465f94d7bed88b5e3ad890daae1..9991951e6e058f72a29dd683ec8d3ae50fc7c39a 100644 (file)
@@ -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,
index 22b2d491c782847b79c79b4ec80da72b8b80b719..665fce561d4aa85ad89448072e96b6ec70bec71f 100644 (file)
@@ -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;