diff --git a/CHANGELOG.md b/CHANGELOG.md index f08e1e90a0..dc42425852 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,8 @@ Full documentation for amd_smi_lib is available at [https://rocm.docs.amd.com/pr - **Added bad page threshold count**. - Added `amdsmi_get_gpu_bad_page_threshold` to Python API and CLI; root/sudo permissions required to display the count. +- **Added new firmware PLDM**. + ### Changed - **The `amd-smi topology` command has been enabled for Guest environments**. diff --git a/example/amd_smi_drm_example.cc b/example/amd_smi_drm_example.cc index 2092eecdbf..9ad936fcb9 100644 --- a/example/amd_smi_drm_example.cc +++ b/example/amd_smi_drm_example.cc @@ -188,6 +188,9 @@ void getFWNameFromId(int id, char *name) case AMDSMI_FW_ID_DMCU: strcpy(name, "ID_DMCU"); break; + case AMDSMI_FW_ID_PLDM: + strcpy(name, "PLDM"); + break; default: strcpy(name, ""); break; diff --git a/example/amd_smi_nodrm_example.cc b/example/amd_smi_nodrm_example.cc index 7860b735bc..b42c8fd94c 100644 --- a/example/amd_smi_nodrm_example.cc +++ b/example/amd_smi_nodrm_example.cc @@ -214,6 +214,10 @@ int main() { "\tPSP SOSDRV: %ld\n\n", fw_information.fw_info_list[amdsmi_fw_block_t::AMDSMI_FW_ID_PSP_SOSDRV] .fw_version); + printf( + "\tPLDM: %ld\n\n", + fw_information.fw_info_list[amdsmi_fw_block_t::AMDSMI_FW_ID_PLDM] + .fw_version); // Get temperature measurements int64_t temp_measurements[AMDSMI_TEMPERATURE_TYPE__MAX + 1]; diff --git a/include/amd_smi/amdsmi.h b/include/amd_smi/amdsmi.h index cce1db89df..acaea3bdf3 100644 --- a/include/amd_smi/amdsmi.h +++ b/include/amd_smi/amdsmi.h @@ -549,6 +549,7 @@ typedef enum { AMDSMI_FW_ID_RLC_SRLS, AMDSMI_FW_ID_PM, AMDSMI_FW_ID_DMCU, + AMDSMI_FW_ID_PLDM, AMDSMI_FW_ID__MAX } amdsmi_fw_block_t; diff --git a/py-interface/amdsmi_interface.py b/py-interface/amdsmi_interface.py index 74221bd83b..1619a22d5a 100644 --- a/py-interface/amdsmi_interface.py +++ b/py-interface/amdsmi_interface.py @@ -198,6 +198,7 @@ class AmdSmiFwBlock(IntEnum): AMDSMI_FW_ID_RLC_SRLS = amdsmi_wrapper.AMDSMI_FW_ID_RLC_SRLS AMDSMI_FW_ID_PM = amdsmi_wrapper.AMDSMI_FW_ID_PM AMDSMI_FW_ID_DMCU = amdsmi_wrapper.AMDSMI_FW_ID_DMCU + AMDSMI_FW_ID_PLDM = amdsmi_wrapper.AMDSMI_FW_ID_PLDM class AmdSmiClkType(IntEnum): @@ -2737,7 +2738,8 @@ def amdsmi_get_fw_info( AmdSmiFwBlock.AMDSMI_FW_ID_TA_XGMI, AmdSmiFwBlock.AMDSMI_FW_ID_UVD, AmdSmiFwBlock.AMDSMI_FW_ID_VCE, - AmdSmiFwBlock.AMDSMI_FW_ID_VCN] + AmdSmiFwBlock.AMDSMI_FW_ID_VCN, + AmdSmiFwBlock.AMDSMI_FW_ID_PLDM] # PM(AKA: SMC) firmware's hex value looks like 0x12345678 # However, they are parsed as: int(0x12).int(0x34).int(0x56).int(0x78) diff --git a/py-interface/amdsmi_wrapper.py b/py-interface/amdsmi_wrapper.py index dad184d56b..c86fd067e0 100644 --- a/py-interface/amdsmi_wrapper.py +++ b/py-interface/amdsmi_wrapper.py @@ -582,7 +582,8 @@ amdsmi_fw_block_t__enumvalues = { 76: 'AMDSMI_FW_ID_RLC_SRLS', 77: 'AMDSMI_FW_ID_PM', 78: 'AMDSMI_FW_ID_DMCU', - 79: 'AMDSMI_FW_ID__MAX', + 79: 'AMDSMI_FW_ID_PLDM', + 80: 'AMDSMI_FW_ID__MAX', } AMDSMI_FW_ID_SMU = 1 AMDSMI_FW_ID_FIRST = 1 @@ -663,7 +664,8 @@ AMDSMI_FW_ID_RLC_SRLG = 75 AMDSMI_FW_ID_RLC_SRLS = 76 AMDSMI_FW_ID_PM = 77 AMDSMI_FW_ID_DMCU = 78 -AMDSMI_FW_ID__MAX = 79 +AMDSMI_FW_ID_PLDM = 79 +AMDSMI_FW_ID__MAX = 80 amdsmi_fw_block_t = ctypes.c_uint32 # enum # values for enumeration 'amdsmi_vram_type_t' @@ -985,7 +987,7 @@ struct_amdsmi_fw_info_t._pack_ = 1 # source:False struct_amdsmi_fw_info_t._fields_ = [ ('num_fw_info', ctypes.c_ubyte), ('PADDING_0', ctypes.c_ubyte * 7), - ('fw_info_list', struct_fw_info_list_ * 79), + ('fw_info_list', struct_fw_info_list_ * 80), ('reserved', ctypes.c_uint32 * 7), ('PADDING_1', ctypes.c_ubyte * 4), ] @@ -3055,7 +3057,8 @@ __all__ = \ 'AMDSMI_FW_ID_ISP', 'AMDSMI_FW_ID_MC', 'AMDSMI_FW_ID_MES_KIQ', 'AMDSMI_FW_ID_MES_STACK', 'AMDSMI_FW_ID_MES_THREAD1', 'AMDSMI_FW_ID_MES_THREAD1_STACK', 'AMDSMI_FW_ID_MMSCH', - 'AMDSMI_FW_ID_PM', 'AMDSMI_FW_ID_PPTABLE', 'AMDSMI_FW_ID_PSP_BL', + 'AMDSMI_FW_ID_PLDM', 'AMDSMI_FW_ID_PM', + 'AMDSMI_FW_ID_PPTABLE', 'AMDSMI_FW_ID_PSP_BL', 'AMDSMI_FW_ID_PSP_DBG', 'AMDSMI_FW_ID_PSP_INTF', 'AMDSMI_FW_ID_PSP_KEYDB', 'AMDSMI_FW_ID_PSP_SOC', 'AMDSMI_FW_ID_PSP_SOSDRV', 'AMDSMI_FW_ID_PSP_SPL', diff --git a/rocm_smi/include/rocm_smi/rocm_smi.h b/rocm_smi/include/rocm_smi/rocm_smi.h index 33cd65999d..5e3d10ad7d 100644 --- a/rocm_smi/include/rocm_smi/rocm_smi.h +++ b/rocm_smi/include/rocm_smi/rocm_smi.h @@ -725,8 +725,8 @@ typedef enum { RSMI_FW_BLOCK_UVD, RSMI_FW_BLOCK_VCE, RSMI_FW_BLOCK_VCN, - - RSMI_FW_BLOCK_LAST = RSMI_FW_BLOCK_VCN + RSMI_FW_BLOCK_PLDM, + RSMI_FW_BLOCK_LAST = RSMI_FW_BLOCK_PLDM } rsmi_fw_block_t; /** diff --git a/rocm_smi/include/rocm_smi/rocm_smi_device.h b/rocm_smi/include/rocm_smi/rocm_smi_device.h index 190533d3ab..f408938419 100644 --- a/rocm_smi/include/rocm_smi/rocm_smi_device.h +++ b/rocm_smi/include/rocm_smi/rocm_smi_device.h @@ -152,6 +152,7 @@ enum DevInfoTypes { kDevFwVersionUvd, kDevFwVersionVce, kDevFwVersionVcn, + kDevFwVersionPldm, kDevSerialNumber, kDevMemPageBad, kDevNumaNode, diff --git a/rocm_smi/src/rocm_smi.cc b/rocm_smi/src/rocm_smi.cc index 9f0d3131c8..9fa3a929f4 100644 --- a/rocm_smi/src/rocm_smi.cc +++ b/rocm_smi/src/rocm_smi.cc @@ -1985,6 +1985,7 @@ rsmi_dev_firmware_version_get(uint32_t dv_ind, rsmi_fw_block_t block, { RSMI_FW_BLOCK_UVD, amd::smi::kDevFwVersionUvd }, { RSMI_FW_BLOCK_VCE, amd::smi::kDevFwVersionVce }, { RSMI_FW_BLOCK_VCN, amd::smi::kDevFwVersionVcn }, + { RSMI_FW_BLOCK_PLDM, amd::smi::kDevFwVersionPldm}, }; const auto & dev_type_it = kFWBlockTypeMap.find(block); diff --git a/rocm_smi/src/rocm_smi_device.cc b/rocm_smi/src/rocm_smi_device.cc index 1b490a7135..d7d29b03bf 100644 --- a/rocm_smi/src/rocm_smi_device.cc +++ b/rocm_smi/src/rocm_smi_device.cc @@ -160,6 +160,7 @@ static const char *kDevFwVersionTaXgmiFName = "fw_version/ta_xgmi_fw_version"; static const char *kDevFwVersionUvdFName = "fw_version/uvd_fw_version"; static const char *kDevFwVersionVceFName = "fw_version/vce_fw_version"; static const char *kDevFwVersionVcnFName = "fw_version/vcn_fw_version"; +static const char *kDevFwVersionPldmFName = "fw_version/pldm_fw_version"; static const char *kDevKFDNodePropCachesCntSName = "caches_count"; static const char *kDevKFDNodePropIoLinksCntSName = "io_links_count"; @@ -309,6 +310,7 @@ static const std::map kDevAttribNameMap = { {kDevFwVersionUvd, kDevFwVersionUvdFName}, {kDevFwVersionVce, kDevFwVersionVceFName}, {kDevFwVersionVcn, kDevFwVersionVcnFName}, + {kDevFwVersionPldm, kDevFwVersionPldmFName}, {kDevSerialNumber, kDevSerialNumberFName}, {kDevMemPageBad, kDevMemPageBadFName}, {kDevNumaNode, kDevNumaNodeFName}, @@ -396,6 +398,7 @@ static const std::map kDevInfoVarTypeToRSMIVariant = { {kDevFwVersionUvd, RSMI_FW_BLOCK_UVD}, {kDevFwVersionVce, RSMI_FW_BLOCK_VCE}, {kDevFwVersionVcn, RSMI_FW_BLOCK_VCN}, + {kDevFwVersionPldm, RSMI_FW_BLOCK_PLDM}, // rsmi_gpu_block_t {kDevErrCntUMC, RSMI_GPU_BLOCK_UMC}, @@ -480,6 +483,7 @@ Device::devInfoTypesStrings = { {kDevFwVersionUvd, "kDevFwVersionUvd"}, {kDevFwVersionVce, "kDevFwVersionVce"}, {kDevFwVersionVcn, "kDevFwVersionVcn"}, + {kDevFwVersionPldm, "kDevFwVersionPldm"}, {kDevSerialNumber, "kDevSerialNumber"}, {kDevMemPageBad, "kDevMemPageBad"}, {kDevNumaNode, "kDevNumaNode"}, @@ -648,6 +652,7 @@ static const std::map kDevFuncDependsMap = { kDevFwVersionUvd, kDevFwVersionVce, kDevFwVersionVcn, + kDevFwVersionPldm, } } }, @@ -1249,6 +1254,7 @@ int Device::readDevInfo(DevInfoTypes type, uint64_t *val) { case kDevFwVersionUvd: case kDevFwVersionVce: case kDevFwVersionVcn: + case kDevFwVersionPldm: ret = readDevInfoStr(type, &tempStr); RET_IF_NONZERO(ret); if (tempStr.empty()) { diff --git a/src/amd_smi/amd_smi.cc b/src/amd_smi/amd_smi.cc index f034829512..79bcc69b6e 100644 --- a/src/amd_smi/amd_smi.cc +++ b/src/amd_smi/amd_smi.cc @@ -1395,8 +1395,9 @@ amdsmi_status_t amdsmi_get_fw_info(amdsmi_processor_handle processor_handle, { AMDSMI_FW_ID_TA_RAS, RSMI_FW_BLOCK_TA_RAS}, { AMDSMI_FW_ID_TA_XGMI, RSMI_FW_BLOCK_TA_XGMI}, { AMDSMI_FW_ID_UVD, RSMI_FW_BLOCK_UVD}, - {AMDSMI_FW_ID_VCE, RSMI_FW_BLOCK_VCE}, - { AMDSMI_FW_ID_VCN, RSMI_FW_BLOCK_VCN} + { AMDSMI_FW_ID_VCE, RSMI_FW_BLOCK_VCE}, + { AMDSMI_FW_ID_VCN, RSMI_FW_BLOCK_VCN}, + { AMDSMI_FW_ID_PLDM, RSMI_FW_BLOCK_PLDM}, }; AMDSMI_CHECK_INIT(); diff --git a/tests/python_unittest/README.md b/tests/python_unittest/README.md index 4fcf240513..c3095101ba 100644 --- a/tests/python_unittest/README.md +++ b/tests/python_unittest/README.md @@ -278,6 +278,9 @@ test_fw_info (__main__.TestAmdSmiPythonInterface) ... FW version: 20.00.00.0F FW name: AMDSMI_FW_ID_PM FW version: 00.58.90.00 + FW name: AMDSMI_FW_ID_PLDM + FW version: 00.xx.yy.zz + ok test_gpu_activity (__main__.TestAmdSmiPythonInterface) ... @@ -587,6 +590,8 @@ test_walkthrough (__main__.TestAmdSmiPythonInterface) ... FW version: 20.00.00.0F FW name: AMDSMI_FW_ID_PM FW version: 00.58.90.00 + FW name: AMDSMI_FW_ID_PLDM + FW version: 00.xx.yy.zz