cxgb3 - FW versioning
Clean up FW version checking. The supported FW version is now 3.1. Signed-off-by: Divy Le Ray <divy@chelsio.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
@@ -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)
|
|||||||
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 @@
|
|||||||
#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,
|
|||||||
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)
|
|||||||
{
|
{
|
||||||
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);
|
||||||
|
minor = G_FW_VERSION_MINOR(vers);
|
||||||
|
|
||||||
|
if (type == FW_VERSION_T3 && major == 3 && minor == 1)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (vers == 0x1002009)
|
CH_ERR(adapter, "found wrong FW version(%u.%u), "
|
||||||
return 0;
|
"driver needs version 3.1\n", major, minor);
|
||||||
|
|
||||||
CH_ERR(adapter, "found wrong FW version, driver needs version 2.9\n");
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user