Get PCIe slot type
Add API to get the PCIe slot type. Change-Id: If6894af53894c524d61c7586c59768541bbf0ac6
이 커밋은 다음에 포함됨:
@@ -380,8 +380,9 @@ int main() {
|
||||
CHK_AMDSMI_RET(ret)
|
||||
printf(" Output of amdsmi_get_pcie_link_status:\n");
|
||||
printf("\tPCIe lanes: %d\n", pcie_info.pcie_lanes);
|
||||
printf("\tPCIe speed: %d\n\n", pcie_info.pcie_speed);
|
||||
printf("\tPCIe Interface Version: %d\n\n", pcie_info.pcie_interface_version);
|
||||
printf("\tPCIe speed: %d\n", pcie_info.pcie_speed);
|
||||
printf("\tPCIe Interface Version: %d\n", pcie_info.pcie_interface_version);
|
||||
printf("\tPCIe slot type: %d\n\n", pcie_info.pcie_slot_type);
|
||||
|
||||
// Get PCIe caps
|
||||
amdsmi_pcie_info_t pcie_caps_info = {};
|
||||
@@ -389,7 +390,7 @@ int main() {
|
||||
CHK_AMDSMI_RET(ret)
|
||||
printf(" Output of amdsmi_get_pcie_link_caps:\n");
|
||||
printf("\tPCIe max lanes: %d\n", pcie_caps_info.pcie_lanes);
|
||||
printf("\tPCIe max speed: %d\n\n", pcie_caps_info.pcie_speed);
|
||||
printf("\tPCIe max speed: %d\n", pcie_caps_info.pcie_speed);
|
||||
printf("\tPCIe Interface Version: %d\n\n", pcie_caps_info.pcie_interface_version);
|
||||
|
||||
// Get VRAM temperature limit
|
||||
|
||||
@@ -1157,6 +1157,7 @@ typedef struct {
|
||||
uint16_t pcie_lanes;
|
||||
uint32_t pcie_speed;
|
||||
uint32_t pcie_interface_version;
|
||||
uint32_t pcie_slot_type; // 0: PCIE, 1: CEM, 2: OAM, 3: Reserved
|
||||
uint32_t reserved[5];
|
||||
} amdsmi_pcie_info_t;
|
||||
/**
|
||||
|
||||
@@ -1061,7 +1061,8 @@ def amdsmi_get_pcie_link_status(
|
||||
|
||||
return {"pcie_speed": pcie_info.pcie_speed,
|
||||
"pcie_lanes": pcie_info.pcie_lanes,
|
||||
"pcie_interface_version": pcie_info.pcie_interface_version}
|
||||
"pcie_interface_version": pcie_info.pcie_interface_version,
|
||||
"pcie_slot_type": pcie_info.pcie_slot_type}
|
||||
|
||||
def amdsmi_get_pcie_link_caps(
|
||||
processor_handle: amdsmi_wrapper.amdsmi_processor_handle,
|
||||
@@ -1079,7 +1080,8 @@ def amdsmi_get_pcie_link_caps(
|
||||
|
||||
return {"max_pcie_speed": pcie_info.pcie_speed,
|
||||
"max_pcie_lanes": pcie_info.pcie_lanes,
|
||||
"pcie_interface_version": pcie_info.pcie_interface_version}
|
||||
"pcie_interface_version": pcie_info.pcie_interface_version,
|
||||
"pcie_slot_type": pcie_info.pcie_slot_type}
|
||||
|
||||
|
||||
def amdsmi_get_processor_handle_from_bdf(bdf):
|
||||
|
||||
@@ -1433,6 +1433,7 @@ struct_amdsmi_pcie_info_t._fields_ = [
|
||||
('PADDING_0', ctypes.c_ubyte * 2),
|
||||
('pcie_speed', ctypes.c_uint32),
|
||||
('pcie_interface_version', ctypes.c_uint32),
|
||||
('pcie_slot_type', ctypes.c_uint32),
|
||||
('reserved', ctypes.c_uint32 * 5),
|
||||
]
|
||||
|
||||
|
||||
@@ -1813,6 +1813,23 @@ amdsmi_get_pcie_link_status(amdsmi_processor_handle processor_handle, amdsmi_pci
|
||||
info->pcie_interface_version = 0;
|
||||
}
|
||||
|
||||
// default to PCIe
|
||||
info->pcie_slot_type = 0;
|
||||
amd::smi::AMDSmiGPUDevice* gpu_device = nullptr;
|
||||
status = get_gpu_device_from_handle(
|
||||
processor_handle, &gpu_device);
|
||||
if (status == AMDSMI_STATUS_SUCCESS
|
||||
&& gpu_device->check_if_drm_is_supported()) {
|
||||
struct drm_amdgpu_info_device dev_info = {};
|
||||
status = gpu_device->amdgpu_query_info(AMDGPU_INFO_DEV_INFO,
|
||||
sizeof(struct drm_amdgpu_memory_info), &dev_info);
|
||||
// bits [16:17] in ids_flags field as slot type
|
||||
if (status == AMDSMI_STATUS_SUCCESS) {
|
||||
// two bits starts with index 16
|
||||
info->pcie_slot_type = (dev_info.ids_flags >> 16) & 0x03;
|
||||
}
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -1887,6 +1904,19 @@ amdsmi_status_t amdsmi_get_pcie_link_caps(amdsmi_processor_handle processor_hand
|
||||
info->pcie_interface_version = 0;
|
||||
}
|
||||
|
||||
// default to PCIe
|
||||
info->pcie_slot_type = 0;
|
||||
if (gpu_device->check_if_drm_is_supported()) {
|
||||
struct drm_amdgpu_info_device dev_info = {};
|
||||
status = gpu_device->amdgpu_query_info(AMDGPU_INFO_DEV_INFO,
|
||||
sizeof(struct drm_amdgpu_memory_info), &dev_info);
|
||||
// bits [16:17] in ids_flags field as slot type
|
||||
if (status == AMDSMI_STATUS_SUCCESS) {
|
||||
// two bits starts with index 16
|
||||
info->pcie_slot_type = (dev_info.ids_flags >> 16) & 0x03;
|
||||
}
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
새 이슈에서 참조
사용자 차단