Commit 4aac3899 authored by Divy Le Ray's avatar Divy Le Ray Committed by Jeff Garzik

cxgb3 - FW versioning

Clean up FW version checking.
The supported FW version is now 3.1.
Signed-off-by: default avatarDivy Le Ray <divy@chelsio.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent b9662d0e
...@@ -665,11 +665,8 @@ static int cxgb_up(struct adapter *adap) ...@@ -665,11 +665,8 @@ static int cxgb_up(struct adapter *adap)
if (!(adap->flags & FULL_INIT_DONE)) { if (!(adap->flags & FULL_INIT_DONE)) {
err = t3_check_fw_version(adap); err = t3_check_fw_version(adap);
if (err) { if (err)
dev_err(&adap->pdev->dev,
"adapter FW is not compatible with driver\n");
goto out; goto out;
}
err = init_dummy_netdevs(adap); err = init_dummy_netdevs(adap);
if (err) if (err)
...@@ -1002,10 +999,14 @@ static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) ...@@ -1002,10 +999,14 @@ static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
strcpy(info->bus_info, pci_name(adapter->pdev)); strcpy(info->bus_info, pci_name(adapter->pdev));
if (!fw_vers) if (!fw_vers)
strcpy(info->fw_version, "N/A"); strcpy(info->fw_version, "N/A");
else else {
snprintf(info->fw_version, sizeof(info->fw_version), snprintf(info->fw_version, sizeof(info->fw_version),
"%s %u.%u", (fw_vers >> 24) ? "T" : "N", "%s %u.%u.%u",
(fw_vers >> 12) & 0xfff, fw_vers & 0xfff); G_FW_VERSION_TYPE(fw_vers) ? "T" : "N",
G_FW_VERSION_MAJOR(fw_vers),
G_FW_VERSION_MINOR(fw_vers),
G_FW_VERSION_MICRO(fw_vers));
}
} }
static void get_strings(struct net_device *dev, u32 stringset, u8 * data) static void get_strings(struct net_device *dev, u32 stringset, u8 * data)
......
...@@ -141,4 +141,31 @@ ...@@ -141,4 +141,31 @@
#define FW_WRC_NUM \ #define FW_WRC_NUM \
(65536 + FW_TUNNEL_NUM + FW_CTRL_NUM + FW_RI_NUM + FW_RX_PKT_NUM) (65536 + FW_TUNNEL_NUM + FW_CTRL_NUM + FW_RI_NUM + FW_RX_PKT_NUM)
/*
* FW type and version.
*/
#define S_FW_VERSION_TYPE 28
#define M_FW_VERSION_TYPE 0xF
#define V_FW_VERSION_TYPE(x) ((x) << S_FW_VERSION_TYPE)
#define G_FW_VERSION_TYPE(x) \
(((x) >> S_FW_VERSION_TYPE) & M_FW_VERSION_TYPE)
#define S_FW_VERSION_MAJOR 16
#define M_FW_VERSION_MAJOR 0xFFF
#define V_FW_VERSION_MAJOR(x) ((x) << S_FW_VERSION_MAJOR)
#define G_FW_VERSION_MAJOR(x) \
(((x) >> S_FW_VERSION_MAJOR) & M_FW_VERSION_MAJOR)
#define S_FW_VERSION_MINOR 8
#define M_FW_VERSION_MINOR 0xFF
#define V_FW_VERSION_MINOR(x) ((x) << S_FW_VERSION_MINOR)
#define G_FW_VERSION_MINOR(x) \
(((x) >> S_FW_VERSION_MINOR) & M_FW_VERSION_MINOR)
#define S_FW_VERSION_MICRO 0
#define M_FW_VERSION_MICRO 0xFF
#define V_FW_VERSION_MICRO(x) ((x) << S_FW_VERSION_MICRO)
#define G_FW_VERSION_MICRO(x) \
(((x) >> S_FW_VERSION_MICRO) & M_FW_VERSION_MICRO)
#endif /* _FIRMWARE_EXPORTS_H_ */ #endif /* _FIRMWARE_EXPORTS_H_ */
...@@ -826,6 +826,11 @@ static int t3_write_flash(struct adapter *adapter, unsigned int addr, ...@@ -826,6 +826,11 @@ static int t3_write_flash(struct adapter *adapter, unsigned int addr,
return 0; return 0;
} }
enum fw_version_type {
FW_VERSION_N3,
FW_VERSION_T3
};
/** /**
* t3_get_fw_version - read the firmware version * t3_get_fw_version - read the firmware version
* @adapter: the adapter * @adapter: the adapter
...@@ -849,19 +854,21 @@ int t3_check_fw_version(struct adapter *adapter) ...@@ -849,19 +854,21 @@ int t3_check_fw_version(struct adapter *adapter)
{ {
int ret; int ret;
u32 vers; u32 vers;
unsigned int type, major, minor;
ret = t3_get_fw_version(adapter, &vers); ret = t3_get_fw_version(adapter, &vers);
if (ret) if (ret)
return ret; return ret;
/* Minor 0xfff means the FW is an internal development-only version. */ type = G_FW_VERSION_TYPE(vers);
if ((vers & 0xfff) == 0xfff) major = G_FW_VERSION_MAJOR(vers);
return 0; minor = G_FW_VERSION_MINOR(vers);
if (vers == 0x1002009) if (type == FW_VERSION_T3 && major == 3 && minor == 1)
return 0; return 0;
CH_ERR(adapter, "found wrong FW version, driver needs version 2.9\n"); CH_ERR(adapter, "found wrong FW version(%u.%u), "
"driver needs version 3.1\n", major, minor);
return -EINVAL; return -EINVAL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment