netxen: fix firmware type check
authorDhananjay Phadke <dhananjay@netxen.com>
Sat, 5 Dec 2009 12:23:56 +0000 (12:23 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 9 Dec 2009 04:37:46 +0000 (20:37 -0800)
Unified firmware image may not contain MN type of firmware.
Driver should fall back to NOMN firmware type instead
of going to flash.

Signed-off-by: Dhananjay Phadke <dhananjay@netxen.com>
Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/netxen/netxen_nic_init.c

index 80a6674..02f8d4b 100644 (file)
@@ -619,17 +619,20 @@ nx_set_product_offs(struct netxen_adapter *adapter)
        uint32_t i;
        __le32 entries;
 
+       int mn_present = (NX_IS_REVISION_P2(adapter->ahw.revision_id)) ?
+                       1 : netxen_p3_has_mn(adapter);
+
        ptab_descr = nx_get_table_desc(unirom, NX_UNI_DIR_SECT_PRODUCT_TBL);
        if (ptab_descr == NULL)
                return -1;
 
        entries = cpu_to_le32(ptab_descr->num_entries);
 
+nomn:
        for (i = 0; i < entries; i++) {
 
                __le32 flags, file_chiprev, offs;
                u8 chiprev = adapter->ahw.revision_id;
-               int mn_present = netxen_p3_has_mn(adapter);
                uint32_t flagbit;
 
                offs = cpu_to_le32(ptab_descr->findex) +
@@ -647,6 +650,11 @@ nx_set_product_offs(struct netxen_adapter *adapter)
                }
        }
 
+       if (mn_present && NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
+               mn_present = 0;
+               goto nomn;
+       }
+
        return -1;
 }
 
@@ -1021,6 +1029,10 @@ netxen_p3_has_mn(struct netxen_adapter *adapter)
        u32 capability, flashed_ver;
        capability = 0;
 
+       /* NX2031 always had MN */
+       if (NX_IS_REVISION_P2(adapter->ahw.revision_id))
+               return 1;
+
        netxen_rom_fast_read(adapter,
                        NX_FW_VERSION_OFFSET, (int *)&flashed_ver);
        flashed_ver = NETXEN_DECODE_VERSION(flashed_ver);