]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
tg3: Fix the setting of the APE_HAS_NCSI flag
authorMichael Chan <mchan@broadcom.com>
Mon, 16 Jul 2012 16:23:59 +0000 (16:23 +0000)
committerJoe Jin <joe.jin@oracle.com>
Tue, 28 Aug 2012 07:23:08 +0000 (15:23 +0800)
The driver currently skips setting this flag if the VPD contains the
firmware version string.  We fix this by separating the probing of NCSI
from the reading of the NCSI version string.  The APE_HAS_NCSI flag is
needed to properly read sensor data.

(cherry picked from commit 165f4d1cb3d7a10c5bc8c0fdae63323354f5a225)
Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Joe Jin <joe.jin@oracle.com>
drivers/net/tg3.c

index c3c60c2ac77079d641354014e1816b1980737da6..8deaced1e18c42d5b9c7cef7315fe7a2756e0ffd 100644 (file)
@@ -13826,14 +13826,9 @@ static void __devinit tg3_read_mgmtfw_ver(struct tg3 *tp)
        }
 }
 
-static void __devinit tg3_read_dash_ver(struct tg3 *tp)
+static void __devinit tg3_probe_ncsi(struct tg3 *tp)
 {
-       int vlen;
        u32 apedata;
-       char *fwtype;
-
-       if (!tg3_flag(tp, ENABLE_APE) || !tg3_flag(tp, ENABLE_ASF))
-               return;
 
        apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
        if (apedata != APE_SEG_SIG_MAGIC)
@@ -13843,14 +13838,22 @@ static void __devinit tg3_read_dash_ver(struct tg3 *tp)
        if (!(apedata & APE_FW_STATUS_READY))
                return;
 
+       if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI)
+               tg3_flag_set(tp, APE_HAS_NCSI);
+}
+
+static void __devinit tg3_read_dash_ver(struct tg3 *tp)
+{
+       int vlen;
+       u32 apedata;
+       char *fwtype;
+
        apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION);
 
-       if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI) {
-               tg3_flag_set(tp, APE_HAS_NCSI);
+       if (tg3_flag(tp, APE_HAS_NCSI))
                fwtype = "NCSI";
-       } else {
+       else
                fwtype = "DASH";
-       }
 
        vlen = strlen(tp->fw_ver);
 
@@ -13884,20 +13887,17 @@ static void __devinit tg3_read_fw_ver(struct tg3 *tp)
                tg3_read_sb_ver(tp, val);
        else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
                tg3_read_hwsb_ver(tp);
-       else
-               return;
 
-       if (vpd_vers)
-               goto done;
-
-       if (tg3_flag(tp, ENABLE_APE)) {
-               if (tg3_flag(tp, ENABLE_ASF))
-                       tg3_read_dash_ver(tp);
-       } else if (tg3_flag(tp, ENABLE_ASF)) {
-               tg3_read_mgmtfw_ver(tp);
+       if (tg3_flag(tp, ENABLE_ASF)) {
+               if (tg3_flag(tp, ENABLE_APE)) {
+                       tg3_probe_ncsi(tp);
+                       if (!vpd_vers)
+                               tg3_read_dash_ver(tp);
+               } else if (!vpd_vers) {
+                       tg3_read_mgmtfw_ver(tp);
+               }
        }
 
-done:
        tp->fw_ver[TG3_VER_SIZE - 1] = 0;
 }