提交 165f4d1c 编写于 作者: M Michael Chan 提交者: David S. Miller

tg3: Fix the setting of the APE_HAS_NCSI flag

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.
Signed-off-by: NMichael Chan <mchan@broadcom.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 5a308f40
...@@ -13858,14 +13858,9 @@ static void __devinit tg3_read_mgmtfw_ver(struct tg3 *tp) ...@@ -13858,14 +13858,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; 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); apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
if (apedata != APE_SEG_SIG_MAGIC) if (apedata != APE_SEG_SIG_MAGIC)
...@@ -13875,14 +13870,22 @@ static void __devinit tg3_read_dash_ver(struct tg3 *tp) ...@@ -13875,14 +13870,22 @@ static void __devinit tg3_read_dash_ver(struct tg3 *tp)
if (!(apedata & APE_FW_STATUS_READY)) if (!(apedata & APE_FW_STATUS_READY))
return; 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); apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION);
if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI) { if (tg3_flag(tp, APE_HAS_NCSI))
tg3_flag_set(tp, APE_HAS_NCSI);
fwtype = "NCSI"; fwtype = "NCSI";
} else { else
fwtype = "DASH"; fwtype = "DASH";
}
vlen = strlen(tp->fw_ver); vlen = strlen(tp->fw_ver);
...@@ -13916,20 +13919,17 @@ static void __devinit tg3_read_fw_ver(struct tg3 *tp) ...@@ -13916,20 +13919,17 @@ static void __devinit tg3_read_fw_ver(struct tg3 *tp)
tg3_read_sb_ver(tp, val); tg3_read_sb_ver(tp, val);
else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW) else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
tg3_read_hwsb_ver(tp); tg3_read_hwsb_ver(tp);
else
return;
if (vpd_vers) if (tg3_flag(tp, ENABLE_ASF)) {
goto done; if (tg3_flag(tp, ENABLE_APE)) {
tg3_probe_ncsi(tp);
if (tg3_flag(tp, ENABLE_APE)) { if (!vpd_vers)
if (tg3_flag(tp, ENABLE_ASF)) tg3_read_dash_ver(tp);
tg3_read_dash_ver(tp); } else if (!vpd_vers) {
} else if (tg3_flag(tp, ENABLE_ASF)) { tg3_read_mgmtfw_ver(tp);
tg3_read_mgmtfw_ver(tp); }
} }
done:
tp->fw_ver[TG3_VER_SIZE - 1] = 0; tp->fw_ver[TG3_VER_SIZE - 1] = 0;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册