@@ -382,6 +382,31 @@ static int bnxt_hwrm_get_nvm_cfg_ver(struct bnxt *bp,
382382 return rc ;
383383}
384384
385+ static int bnxt_dl_info_put (struct bnxt * bp , struct devlink_info_req * req ,
386+ enum bnxt_dl_version_type type , const char * key ,
387+ char * buf )
388+ {
389+ if (!strlen (buf ))
390+ return 0 ;
391+
392+ if ((bp -> flags & BNXT_FLAG_CHIP_P5 ) &&
393+ (!strcmp (key , DEVLINK_INFO_VERSION_GENERIC_FW_NCSI ) ||
394+ !strcmp (key , DEVLINK_INFO_VERSION_GENERIC_FW_ROCE )))
395+ return 0 ;
396+
397+ switch (type ) {
398+ case BNXT_VERSION_FIXED :
399+ return devlink_info_version_fixed_put (req , key , buf );
400+ case BNXT_VERSION_RUNNING :
401+ return devlink_info_version_running_put (req , key , buf );
402+ case BNXT_VERSION_STORED :
403+ return devlink_info_version_stored_put (req , key , buf );
404+ }
405+ return 0 ;
406+ }
407+
408+ #define HWRM_FW_VER_STR_LEN 16
409+
385410static int bnxt_dl_info_get (struct devlink * dl , struct devlink_info_req * req ,
386411 struct netlink_ext_ack * extack )
387412{
@@ -390,18 +415,19 @@ static int bnxt_dl_info_get(struct devlink *dl, struct devlink_info_req *req,
390415 struct hwrm_ver_get_output * ver_resp ;
391416 char mgmt_ver [FW_VER_STR_LEN ];
392417 char roce_ver [FW_VER_STR_LEN ];
393- char fw_ver [FW_VER_STR_LEN ];
418+ char ncsi_ver [FW_VER_STR_LEN ];
394419 char buf [32 ];
395420 int rc ;
396421
397422 rc = devlink_info_driver_name_put (req , DRV_MODULE_NAME );
398423 if (rc )
399424 return rc ;
400425
401- if (strlen (bp -> board_partno )) {
402- rc = devlink_info_version_fixed_put (req ,
403- DEVLINK_INFO_VERSION_GENERIC_BOARD_ID ,
404- bp -> board_partno );
426+ if (BNXT_PF (bp ) && (bp -> flags & BNXT_FLAG_DSN_VALID )) {
427+ sprintf (buf , "%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X" ,
428+ bp -> dsn [7 ], bp -> dsn [6 ], bp -> dsn [5 ], bp -> dsn [4 ],
429+ bp -> dsn [3 ], bp -> dsn [2 ], bp -> dsn [1 ], bp -> dsn [0 ]);
430+ rc = devlink_info_serial_number_put (req , buf );
405431 if (rc )
406432 return rc ;
407433 }
@@ -412,96 +438,87 @@ static int bnxt_dl_info_get(struct devlink *dl, struct devlink_info_req *req,
412438 return rc ;
413439 }
414440
441+ rc = bnxt_dl_info_put (bp , req , BNXT_VERSION_FIXED ,
442+ DEVLINK_INFO_VERSION_GENERIC_BOARD_ID ,
443+ bp -> board_partno );
444+ if (rc )
445+ return rc ;
446+
415447 sprintf (buf , "%X" , bp -> chip_num );
416- rc = devlink_info_version_fixed_put ( req ,
417- DEVLINK_INFO_VERSION_GENERIC_ASIC_ID , buf );
448+ rc = bnxt_dl_info_put ( bp , req , BNXT_VERSION_FIXED ,
449+ DEVLINK_INFO_VERSION_GENERIC_ASIC_ID , buf );
418450 if (rc )
419451 return rc ;
420452
421453 ver_resp = & bp -> ver_resp ;
422454 sprintf (buf , "%X" , ver_resp -> chip_rev );
423- rc = devlink_info_version_fixed_put ( req ,
424- DEVLINK_INFO_VERSION_GENERIC_ASIC_REV , buf );
455+ rc = bnxt_dl_info_put ( bp , req , BNXT_VERSION_FIXED ,
456+ DEVLINK_INFO_VERSION_GENERIC_ASIC_REV , buf );
425457 if (rc )
426458 return rc ;
427459
428- if (BNXT_PF (bp )) {
429- sprintf (buf , "%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X" ,
430- bp -> dsn [7 ], bp -> dsn [6 ], bp -> dsn [5 ], bp -> dsn [4 ],
431- bp -> dsn [3 ], bp -> dsn [2 ], bp -> dsn [1 ], bp -> dsn [0 ]);
432- rc = devlink_info_serial_number_put (req , buf );
433- if (rc )
434- return rc ;
435- }
436-
437- if (strlen (ver_resp -> active_pkg_name )) {
438- rc =
439- devlink_info_version_running_put (req ,
440- DEVLINK_INFO_VERSION_GENERIC_FW ,
441- ver_resp -> active_pkg_name );
442- if (rc )
443- return rc ;
444- }
460+ buf [0 ] = 0 ;
461+ strncat (buf , ver_resp -> active_pkg_name , HWRM_FW_VER_STR_LEN );
462+ rc = bnxt_dl_info_put (bp , req , BNXT_VERSION_RUNNING ,
463+ DEVLINK_INFO_VERSION_GENERIC_FW , buf );
464+ if (rc )
465+ return rc ;
445466
446467 if (BNXT_PF (bp ) && !bnxt_hwrm_get_nvm_cfg_ver (bp , & nvm_cfg_ver )) {
447468 u32 ver = nvm_cfg_ver .vu32 ;
448469
449470 sprintf (buf , "%X.%X.%X" , (ver >> 16 ) & 0xF , (ver >> 8 ) & 0xF ,
450471 ver & 0xF );
451- rc = devlink_info_version_running_put (req ,
452- DEVLINK_INFO_VERSION_GENERIC_FW_PSID , buf );
472+ rc = bnxt_dl_info_put (bp , req , BNXT_VERSION_RUNNING ,
473+ DEVLINK_INFO_VERSION_GENERIC_FW_PSID ,
474+ buf );
453475 if (rc )
454476 return rc ;
455477 }
456478
457479 if (ver_resp -> flags & VER_GET_RESP_FLAGS_EXT_VER_AVAIL ) {
458- snprintf (fw_ver , FW_VER_STR_LEN , "%d.%d.%d.%d" ,
480+ snprintf (mgmt_ver , FW_VER_STR_LEN , "%d.%d.%d.%d" ,
459481 ver_resp -> hwrm_fw_major , ver_resp -> hwrm_fw_minor ,
460482 ver_resp -> hwrm_fw_build , ver_resp -> hwrm_fw_patch );
461483
462- snprintf (mgmt_ver , FW_VER_STR_LEN , "%d.%d.%d.%d" ,
484+ snprintf (ncsi_ver , FW_VER_STR_LEN , "%d.%d.%d.%d" ,
463485 ver_resp -> mgmt_fw_major , ver_resp -> mgmt_fw_minor ,
464486 ver_resp -> mgmt_fw_build , ver_resp -> mgmt_fw_patch );
465487
466488 snprintf (roce_ver , FW_VER_STR_LEN , "%d.%d.%d.%d" ,
467489 ver_resp -> roce_fw_major , ver_resp -> roce_fw_minor ,
468490 ver_resp -> roce_fw_build , ver_resp -> roce_fw_patch );
469491 } else {
470- snprintf (fw_ver , FW_VER_STR_LEN , "%d.%d.%d.%d" ,
492+ snprintf (mgmt_ver , FW_VER_STR_LEN , "%d.%d.%d.%d" ,
471493 ver_resp -> hwrm_fw_maj_8b , ver_resp -> hwrm_fw_min_8b ,
472494 ver_resp -> hwrm_fw_bld_8b , ver_resp -> hwrm_fw_rsvd_8b );
473495
474- snprintf (mgmt_ver , FW_VER_STR_LEN , "%d.%d.%d.%d" ,
496+ snprintf (ncsi_ver , FW_VER_STR_LEN , "%d.%d.%d.%d" ,
475497 ver_resp -> mgmt_fw_maj_8b , ver_resp -> mgmt_fw_min_8b ,
476498 ver_resp -> mgmt_fw_bld_8b , ver_resp -> mgmt_fw_rsvd_8b );
477499
478500 snprintf (roce_ver , FW_VER_STR_LEN , "%d.%d.%d.%d" ,
479501 ver_resp -> roce_fw_maj_8b , ver_resp -> roce_fw_min_8b ,
480502 ver_resp -> roce_fw_bld_8b , ver_resp -> roce_fw_rsvd_8b );
481503 }
482- rc = devlink_info_version_running_put ( req ,
483- DEVLINK_INFO_VERSION_GENERIC_FW_MGMT , fw_ver );
504+ rc = bnxt_dl_info_put ( bp , req , BNXT_VERSION_RUNNING ,
505+ DEVLINK_INFO_VERSION_GENERIC_FW_MGMT , mgmt_ver );
484506 if (rc )
485507 return rc ;
486508
487- rc = devlink_info_version_running_put ( req ,
488- DEVLINK_INFO_VERSION_GENERIC_FW_MGMT_API ,
489- bp -> hwrm_ver_supp );
509+ rc = bnxt_dl_info_put ( bp , req , BNXT_VERSION_RUNNING ,
510+ DEVLINK_INFO_VERSION_GENERIC_FW_MGMT_API ,
511+ bp -> hwrm_ver_supp );
490512 if (rc )
491513 return rc ;
492514
493- if (!(bp -> flags & BNXT_FLAG_CHIP_P5 )) {
494- rc = devlink_info_version_running_put (req ,
495- DEVLINK_INFO_VERSION_GENERIC_FW_NCSI , mgmt_ver );
496- if (rc )
497- return rc ;
515+ rc = bnxt_dl_info_put (bp , req , BNXT_VERSION_RUNNING ,
516+ DEVLINK_INFO_VERSION_GENERIC_FW_NCSI , ncsi_ver );
517+ if (rc )
518+ return rc ;
498519
499- rc = devlink_info_version_running_put (req ,
500- DEVLINK_INFO_VERSION_GENERIC_FW_ROCE , roce_ver );
501- if (rc )
502- return rc ;
503- }
504- return 0 ;
520+ return bnxt_dl_info_put (bp , req , BNXT_VERSION_RUNNING ,
521+ DEVLINK_INFO_VERSION_GENERIC_FW_ROCE , roce_ver );
505522}
506523
507524static int bnxt_hwrm_nvm_req (struct bnxt * bp , u32 param_id , void * msg ,
0 commit comments