Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

RDMA/bnxt_re: Update sysfs entries with appropriate data

Updated the existing sysfs entries with correct data.
This change is to align the behavior with our OOB driver.
Added "board_id" sysfs entry which will provide the
VPD Part number, if exists.

Signed-off-by: Anantha Prabhu <anantha.prabhu@broadcom.com>
Signed-off-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Link: https://patch.msgid.link/20250908094516.18222-2-kalesh-anakkur.purayil@broadcom.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>

authored by

Anantha Prabhu and committed by
Leon Romanovsky
72d0b87e 6603fbf1

+50 -2
+2
drivers/infiniband/hw/bnxt_re/bnxt_re.h
··· 228 228 struct workqueue_struct *dcb_wq; 229 229 struct dentry *cc_config; 230 230 struct bnxt_re_dbg_cc_config_params *cc_config_params; 231 + #define BNXT_VPD_FLD_LEN 32 232 + char board_partno[BNXT_VPD_FLD_LEN]; 231 233 /* RoCE mirror */ 232 234 u16 mirror_vnic_id; 233 235 union ib_gid ugid;
+48 -2
drivers/infiniband/hw/bnxt_re/main.c
··· 1031 1031 struct bnxt_re_dev *rdev = 1032 1032 rdma_device_to_drv_device(device, struct bnxt_re_dev, ibdev); 1033 1033 1034 - return sysfs_emit(buf, "0x%x\n", rdev->en_dev->pdev->vendor); 1034 + return sysfs_emit(buf, "0x%x\n", rdev->en_dev->pdev->revision); 1035 1035 } 1036 1036 static DEVICE_ATTR_RO(hw_rev); 1037 1037 ··· 1041 1041 struct bnxt_re_dev *rdev = 1042 1042 rdma_device_to_drv_device(device, struct bnxt_re_dev, ibdev); 1043 1043 1044 - return sysfs_emit(buf, "%s\n", rdev->ibdev.node_desc); 1044 + return sysfs_emit(buf, "0x%x\n", rdev->en_dev->pdev->device); 1045 1045 } 1046 1046 static DEVICE_ATTR_RO(hca_type); 1047 + 1048 + static ssize_t board_id_show(struct device *device, struct device_attribute *attr, 1049 + char *buf) 1050 + { 1051 + struct bnxt_re_dev *rdev = rdma_device_to_drv_device(device, 1052 + struct bnxt_re_dev, ibdev); 1053 + char buffer[BNXT_VPD_FLD_LEN] = {}; 1054 + 1055 + if (!rdev->is_virtfn) 1056 + memcpy(buffer, rdev->board_partno, BNXT_VPD_FLD_LEN - 1); 1057 + else 1058 + scnprintf(buffer, BNXT_VPD_FLD_LEN, "0x%x-VF", 1059 + rdev->en_dev->pdev->device); 1060 + 1061 + return sysfs_emit(buf, "%s\n", buffer); 1062 + } 1063 + static DEVICE_ATTR_RO(board_id); 1047 1064 1048 1065 static struct attribute *bnxt_re_attributes[] = { 1049 1066 &dev_attr_hw_rev.attr, 1050 1067 &dev_attr_hca_type.attr, 1068 + &dev_attr_board_id.attr, 1051 1069 NULL 1052 1070 }; 1053 1071 ··· 2022 2004 ASYNC_EVENT_CMPL_EVENT_ID_DCB_CONFIG_CHANGE); 2023 2005 } 2024 2006 2007 + static void bnxt_re_read_vpd_info(struct bnxt_re_dev *rdev) 2008 + { 2009 + struct pci_dev *pdev = rdev->en_dev->pdev; 2010 + unsigned int vpd_size, kw_len; 2011 + int pos, size; 2012 + u8 *vpd_data; 2013 + 2014 + vpd_data = pci_vpd_alloc(pdev, &vpd_size); 2015 + if (IS_ERR(vpd_data)) { 2016 + pci_warn(pdev, "Unable to read VPD, err=%ld\n", 2017 + PTR_ERR(vpd_data)); 2018 + return; 2019 + } 2020 + 2021 + pos = pci_vpd_find_ro_info_keyword(vpd_data, vpd_size, 2022 + PCI_VPD_RO_KEYWORD_PARTNO, &kw_len); 2023 + if (pos < 0) 2024 + goto free; 2025 + 2026 + size = min_t(int, kw_len, BNXT_VPD_FLD_LEN - 1); 2027 + memcpy(rdev->board_partno, &vpd_data[pos], size); 2028 + free: 2029 + kfree(vpd_data); 2030 + } 2031 + 2025 2032 static int bnxt_re_query_hwrm_intf_version(struct bnxt_re_dev *rdev) 2026 2033 { 2027 2034 struct bnxt_en_dev *en_dev = rdev->en_dev; ··· 2419 2376 2420 2377 bnxt_re_init_dcb_wq(rdev); 2421 2378 bnxt_re_net_register_async_event(rdev); 2379 + 2380 + if (!rdev->is_virtfn) 2381 + bnxt_re_read_vpd_info(rdev); 2422 2382 2423 2383 rc = bnxt_re_get_stats3_ctx(rdev); 2424 2384 if (rc)