Skip to content

Commit 760446f

Browse files
Ganesh Goudardavem330
authored andcommitted
cxgb4: display serial config and vpd versions
print the versions of vpd and serial configuration file, flashed to adapter, and cleanup the relevant code. Signed-off-by: Casey Leedom <leedom@chelsio.com> Signed-off-by: Ganesh Goudar <ganeshgr@chelsio.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 04d8980 commit 760446f

File tree

4 files changed

+188
-58
lines changed

4 files changed

+188
-58
lines changed

drivers/net/ethernet/chelsio/cxgb4/cxgb4.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -338,10 +338,12 @@ struct adapter_params {
338338
unsigned int sf_nsec; /* # of flash sectors */
339339
unsigned int sf_fw_start; /* start of FW image in flash */
340340

341-
unsigned int fw_vers;
342-
unsigned int bs_vers; /* bootstrap version */
343-
unsigned int tp_vers;
344-
unsigned int er_vers; /* expansion ROM version */
341+
unsigned int fw_vers; /* firmware version */
342+
unsigned int bs_vers; /* bootstrap version */
343+
unsigned int tp_vers; /* TP microcode version */
344+
unsigned int er_vers; /* expansion ROM version */
345+
unsigned int scfg_vers; /* Serial Configuration version */
346+
unsigned int vpd_vers; /* VPD Version */
345347
u8 api_vers[7];
346348

347349
unsigned short mtus[NMTUS];
@@ -1407,6 +1409,10 @@ int t4_get_fw_version(struct adapter *adapter, u32 *vers);
14071409
int t4_get_bs_version(struct adapter *adapter, u32 *vers);
14081410
int t4_get_tp_version(struct adapter *adapter, u32 *vers);
14091411
int t4_get_exprom_version(struct adapter *adapter, u32 *vers);
1412+
int t4_get_scfg_version(struct adapter *adapter, u32 *vers);
1413+
int t4_get_vpd_version(struct adapter *adapter, u32 *vers);
1414+
int t4_get_version_info(struct adapter *adapter);
1415+
void t4_dump_version_info(struct adapter *adapter);
14101416
int t4_prep_fw(struct adapter *adap, struct fw_info *fw_info,
14111417
const u8 *fw_data, unsigned int fw_size,
14121418
struct fw_hdr *card_fw, enum dev_state state, int *reset);

drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c

Lines changed: 3 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -3610,11 +3610,8 @@ static int adap_init0(struct adapter *adap)
36103610
* later reporting and B. to warn if the currently loaded firmware
36113611
* is excessively mismatched relative to the driver.)
36123612
*/
3613-
t4_get_fw_version(adap, &adap->params.fw_vers);
3614-
t4_get_bs_version(adap, &adap->params.bs_vers);
3615-
t4_get_tp_version(adap, &adap->params.tp_vers);
3616-
t4_get_exprom_version(adap, &adap->params.er_vers);
36173613

3614+
t4_get_version_info(adap);
36183615
ret = t4_check_fw_version(adap);
36193616
/* If firmware is too old (not supported by driver) force an update. */
36203617
if (ret)
@@ -4560,56 +4557,8 @@ static void cxgb4_check_pcie_caps(struct adapter *adap)
45604557
/* Dump basic information about the adapter */
45614558
static void print_adapter_info(struct adapter *adapter)
45624559
{
4563-
/* Device information */
4564-
dev_info(adapter->pdev_dev, "Chelsio %s rev %d\n",
4565-
adapter->params.vpd.id,
4566-
CHELSIO_CHIP_RELEASE(adapter->params.chip));
4567-
dev_info(adapter->pdev_dev, "S/N: %s, P/N: %s\n",
4568-
adapter->params.vpd.sn, adapter->params.vpd.pn);
4569-
4570-
/* Firmware Version */
4571-
if (!adapter->params.fw_vers)
4572-
dev_warn(adapter->pdev_dev, "No firmware loaded\n");
4573-
else
4574-
dev_info(adapter->pdev_dev, "Firmware version: %u.%u.%u.%u\n",
4575-
FW_HDR_FW_VER_MAJOR_G(adapter->params.fw_vers),
4576-
FW_HDR_FW_VER_MINOR_G(adapter->params.fw_vers),
4577-
FW_HDR_FW_VER_MICRO_G(adapter->params.fw_vers),
4578-
FW_HDR_FW_VER_BUILD_G(adapter->params.fw_vers));
4579-
4580-
/* Bootstrap Firmware Version. (Some adapters don't have Bootstrap
4581-
* Firmware, so dev_info() is more appropriate here.)
4582-
*/
4583-
if (!adapter->params.bs_vers)
4584-
dev_info(adapter->pdev_dev, "No bootstrap loaded\n");
4585-
else
4586-
dev_info(adapter->pdev_dev, "Bootstrap version: %u.%u.%u.%u\n",
4587-
FW_HDR_FW_VER_MAJOR_G(adapter->params.bs_vers),
4588-
FW_HDR_FW_VER_MINOR_G(adapter->params.bs_vers),
4589-
FW_HDR_FW_VER_MICRO_G(adapter->params.bs_vers),
4590-
FW_HDR_FW_VER_BUILD_G(adapter->params.bs_vers));
4591-
4592-
/* TP Microcode Version */
4593-
if (!adapter->params.tp_vers)
4594-
dev_warn(adapter->pdev_dev, "No TP Microcode loaded\n");
4595-
else
4596-
dev_info(adapter->pdev_dev,
4597-
"TP Microcode version: %u.%u.%u.%u\n",
4598-
FW_HDR_FW_VER_MAJOR_G(adapter->params.tp_vers),
4599-
FW_HDR_FW_VER_MINOR_G(adapter->params.tp_vers),
4600-
FW_HDR_FW_VER_MICRO_G(adapter->params.tp_vers),
4601-
FW_HDR_FW_VER_BUILD_G(adapter->params.tp_vers));
4602-
4603-
/* Expansion ROM version */
4604-
if (!adapter->params.er_vers)
4605-
dev_info(adapter->pdev_dev, "No Expansion ROM loaded\n");
4606-
else
4607-
dev_info(adapter->pdev_dev,
4608-
"Expansion ROM version: %u.%u.%u.%u\n",
4609-
FW_HDR_FW_VER_MAJOR_G(adapter->params.er_vers),
4610-
FW_HDR_FW_VER_MINOR_G(adapter->params.er_vers),
4611-
FW_HDR_FW_VER_MICRO_G(adapter->params.er_vers),
4612-
FW_HDR_FW_VER_BUILD_G(adapter->params.er_vers));
4560+
/* Hardware/Firmware/etc. Version/Revision IDs */
4561+
t4_dump_version_info(adapter);
46134562

46144563
/* Software/Hardware configuration */
46154564
dev_info(adapter->pdev_dev, "Configuration: %sNIC %s, %s capable\n",

drivers/net/ethernet/chelsio/cxgb4/t4_hw.c

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3076,6 +3076,179 @@ int t4_get_exprom_version(struct adapter *adap, u32 *vers)
30763076
return 0;
30773077
}
30783078

3079+
/**
3080+
* t4_get_vpd_version - return the VPD version
3081+
* @adapter: the adapter
3082+
* @vers: where to place the version
3083+
*
3084+
* Reads the VPD via the Firmware interface (thus this can only be called
3085+
* once we're ready to issue Firmware commands). The format of the
3086+
* VPD version is adapter specific. Returns 0 on success, an error on
3087+
* failure.
3088+
*
3089+
* Note that early versions of the Firmware didn't include the ability
3090+
* to retrieve the VPD version, so we zero-out the return-value parameter
3091+
* in that case to avoid leaving it with garbage in it.
3092+
*
3093+
* Also note that the Firmware will return its cached copy of the VPD
3094+
* Revision ID, not the actual Revision ID as written in the Serial
3095+
* EEPROM. This is only an issue if a new VPD has been written and the
3096+
* Firmware/Chip haven't yet gone through a RESET sequence. So it's best
3097+
* to defer calling this routine till after a FW_RESET_CMD has been issued
3098+
* if the Host Driver will be performing a full adapter initialization.
3099+
*/
3100+
int t4_get_vpd_version(struct adapter *adapter, u32 *vers)
3101+
{
3102+
u32 vpdrev_param;
3103+
int ret;
3104+
3105+
vpdrev_param = (FW_PARAMS_MNEM_V(FW_PARAMS_MNEM_DEV) |
3106+
FW_PARAMS_PARAM_X_V(FW_PARAMS_PARAM_DEV_VPDREV));
3107+
ret = t4_query_params(adapter, adapter->mbox, adapter->pf, 0,
3108+
1, &vpdrev_param, vers);
3109+
if (ret)
3110+
*vers = 0;
3111+
return ret;
3112+
}
3113+
3114+
/**
3115+
* t4_get_scfg_version - return the Serial Configuration version
3116+
* @adapter: the adapter
3117+
* @vers: where to place the version
3118+
*
3119+
* Reads the Serial Configuration Version via the Firmware interface
3120+
* (thus this can only be called once we're ready to issue Firmware
3121+
* commands). The format of the Serial Configuration version is
3122+
* adapter specific. Returns 0 on success, an error on failure.
3123+
*
3124+
* Note that early versions of the Firmware didn't include the ability
3125+
* to retrieve the Serial Configuration version, so we zero-out the
3126+
* return-value parameter in that case to avoid leaving it with
3127+
* garbage in it.
3128+
*
3129+
* Also note that the Firmware will return its cached copy of the Serial
3130+
* Initialization Revision ID, not the actual Revision ID as written in
3131+
* the Serial EEPROM. This is only an issue if a new VPD has been written
3132+
* and the Firmware/Chip haven't yet gone through a RESET sequence. So
3133+
* it's best to defer calling this routine till after a FW_RESET_CMD has
3134+
* been issued if the Host Driver will be performing a full adapter
3135+
* initialization.
3136+
*/
3137+
int t4_get_scfg_version(struct adapter *adapter, u32 *vers)
3138+
{
3139+
u32 scfgrev_param;
3140+
int ret;
3141+
3142+
scfgrev_param = (FW_PARAMS_MNEM_V(FW_PARAMS_MNEM_DEV) |
3143+
FW_PARAMS_PARAM_X_V(FW_PARAMS_PARAM_DEV_SCFGREV));
3144+
ret = t4_query_params(adapter, adapter->mbox, adapter->pf, 0,
3145+
1, &scfgrev_param, vers);
3146+
if (ret)
3147+
*vers = 0;
3148+
return ret;
3149+
}
3150+
3151+
/**
3152+
* t4_get_version_info - extract various chip/firmware version information
3153+
* @adapter: the adapter
3154+
*
3155+
* Reads various chip/firmware version numbers and stores them into the
3156+
* adapter Adapter Parameters structure. If any of the efforts fails
3157+
* the first failure will be returned, but all of the version numbers
3158+
* will be read.
3159+
*/
3160+
int t4_get_version_info(struct adapter *adapter)
3161+
{
3162+
int ret = 0;
3163+
3164+
#define FIRST_RET(__getvinfo) \
3165+
do { \
3166+
int __ret = __getvinfo; \
3167+
if (__ret && !ret) \
3168+
ret = __ret; \
3169+
} while (0)
3170+
3171+
FIRST_RET(t4_get_fw_version(adapter, &adapter->params.fw_vers));
3172+
FIRST_RET(t4_get_bs_version(adapter, &adapter->params.bs_vers));
3173+
FIRST_RET(t4_get_tp_version(adapter, &adapter->params.tp_vers));
3174+
FIRST_RET(t4_get_exprom_version(adapter, &adapter->params.er_vers));
3175+
FIRST_RET(t4_get_scfg_version(adapter, &adapter->params.scfg_vers));
3176+
FIRST_RET(t4_get_vpd_version(adapter, &adapter->params.vpd_vers));
3177+
3178+
#undef FIRST_RET
3179+
return ret;
3180+
}
3181+
3182+
/**
3183+
* t4_dump_version_info - dump all of the adapter configuration IDs
3184+
* @adapter: the adapter
3185+
*
3186+
* Dumps all of the various bits of adapter configuration version/revision
3187+
* IDs information. This is typically called at some point after
3188+
* t4_get_version_info() has been called.
3189+
*/
3190+
void t4_dump_version_info(struct adapter *adapter)
3191+
{
3192+
/* Device information */
3193+
dev_info(adapter->pdev_dev, "Chelsio %s rev %d\n",
3194+
adapter->params.vpd.id,
3195+
CHELSIO_CHIP_RELEASE(adapter->params.chip));
3196+
dev_info(adapter->pdev_dev, "S/N: %s, P/N: %s\n",
3197+
adapter->params.vpd.sn, adapter->params.vpd.pn);
3198+
3199+
/* Firmware Version */
3200+
if (!adapter->params.fw_vers)
3201+
dev_warn(adapter->pdev_dev, "No firmware loaded\n");
3202+
else
3203+
dev_info(adapter->pdev_dev, "Firmware version: %u.%u.%u.%u\n",
3204+
FW_HDR_FW_VER_MAJOR_G(adapter->params.fw_vers),
3205+
FW_HDR_FW_VER_MINOR_G(adapter->params.fw_vers),
3206+
FW_HDR_FW_VER_MICRO_G(adapter->params.fw_vers),
3207+
FW_HDR_FW_VER_BUILD_G(adapter->params.fw_vers));
3208+
3209+
/* Bootstrap Firmware Version. (Some adapters don't have Bootstrap
3210+
* Firmware, so dev_info() is more appropriate here.)
3211+
*/
3212+
if (!adapter->params.bs_vers)
3213+
dev_info(adapter->pdev_dev, "No bootstrap loaded\n");
3214+
else
3215+
dev_info(adapter->pdev_dev, "Bootstrap version: %u.%u.%u.%u\n",
3216+
FW_HDR_FW_VER_MAJOR_G(adapter->params.bs_vers),
3217+
FW_HDR_FW_VER_MINOR_G(adapter->params.bs_vers),
3218+
FW_HDR_FW_VER_MICRO_G(adapter->params.bs_vers),
3219+
FW_HDR_FW_VER_BUILD_G(adapter->params.bs_vers));
3220+
3221+
/* TP Microcode Version */
3222+
if (!adapter->params.tp_vers)
3223+
dev_warn(adapter->pdev_dev, "No TP Microcode loaded\n");
3224+
else
3225+
dev_info(adapter->pdev_dev,
3226+
"TP Microcode version: %u.%u.%u.%u\n",
3227+
FW_HDR_FW_VER_MAJOR_G(adapter->params.tp_vers),
3228+
FW_HDR_FW_VER_MINOR_G(adapter->params.tp_vers),
3229+
FW_HDR_FW_VER_MICRO_G(adapter->params.tp_vers),
3230+
FW_HDR_FW_VER_BUILD_G(adapter->params.tp_vers));
3231+
3232+
/* Expansion ROM version */
3233+
if (!adapter->params.er_vers)
3234+
dev_info(adapter->pdev_dev, "No Expansion ROM loaded\n");
3235+
else
3236+
dev_info(adapter->pdev_dev,
3237+
"Expansion ROM version: %u.%u.%u.%u\n",
3238+
FW_HDR_FW_VER_MAJOR_G(adapter->params.er_vers),
3239+
FW_HDR_FW_VER_MINOR_G(adapter->params.er_vers),
3240+
FW_HDR_FW_VER_MICRO_G(adapter->params.er_vers),
3241+
FW_HDR_FW_VER_BUILD_G(adapter->params.er_vers));
3242+
3243+
/* Serial Configuration version */
3244+
dev_info(adapter->pdev_dev, "Serial Configuration version: %#x\n",
3245+
adapter->params.scfg_vers);
3246+
3247+
/* VPD Version */
3248+
dev_info(adapter->pdev_dev, "VPD version: %#x\n",
3249+
adapter->params.vpd_vers);
3250+
}
3251+
30793252
/**
30803253
* t4_check_fw_version - check if the FW is supported with this driver
30813254
* @adap: the adapter

drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1124,6 +1124,8 @@ enum fw_params_param_dev {
11241124
FW_PARAMS_PARAM_DEV_MAXIRD_ADAPTER = 0x14, /* max supported adap IRD */
11251125
FW_PARAMS_PARAM_DEV_ULPTX_MEMWRITE_DSGL = 0x17,
11261126
FW_PARAMS_PARAM_DEV_FWCACHE = 0x18,
1127+
FW_PARAMS_PARAM_DEV_SCFGREV = 0x1A,
1128+
FW_PARAMS_PARAM_DEV_VPDREV = 0x1B,
11271129
FW_PARAMS_PARAM_DEV_RI_FR_NSMR_TPTE_WR = 0x1C,
11281130
FW_PARAMS_PARAM_DEV_MPSBGMAP = 0x1E,
11291131
};

0 commit comments

Comments
 (0)