From 413119d2fe2b469cbde84a902772e5fe26d4a3c1 Mon Sep 17 00:00:00 2001 From: Dalibor Stanisavljevic Date: Fri, 9 Dec 2022 13:28:07 +0100 Subject: [PATCH] SWDEV-370502 - Reserved fields in structs Change-Id: I23aed12baf6b3173eb149eb3b969e55d7e4360ee Signed-off-by: Dalibor Stanisavljevic [ROCm/amdsmi commit: cb013d25ff4109871c190341ee4762a7afb6ab3e] --- projects/amdsmi/include/amd_smi/amdsmi.h | 24 ++++++++- .../amdsmi/py-interface/amdsmi_wrapper.py | 51 ++++++++++++++----- 2 files changed, 59 insertions(+), 16 deletions(-) diff --git a/projects/amdsmi/include/amd_smi/amdsmi.h b/projects/amdsmi/include/amd_smi/amdsmi.h index 5fde4b7788..b1450a856f 100644 --- a/projects/amdsmi/include/amd_smi/amdsmi.h +++ b/projects/amdsmi/include/amd_smi/amdsmi.h @@ -71,7 +71,7 @@ typedef enum amdsmi_init_flags { AMDSMI_INIT_NON_AMD_GPUS = (1 << 3) } amdsmi_init_flags_t; -/* Maximum size definitions GPUVSMI */ +/* Maximum size definitions AMDSMI */ #define AMDSMI_MAX_MM_IP_COUNT 8 #define AMDSMI_MAX_DATE_LENGTH 32 /**< YYYY-MM-DD:HH:MM:SS.MSC */ #define AMDSMI_MAX_STRING_LENGTH 64 @@ -252,6 +252,7 @@ typedef enum amdsmi_fw_block { typedef struct { uint64_t lower_bound; //!< Lower bound of range uint64_t upper_bound; //!< Upper bound of range + uint64_t reserved[2]; } amdsmi_range_t; /// @cond Ignore in docs. typedef amdsmi_range_t amdsmi_range; @@ -262,6 +263,7 @@ typedef struct amdsmi_xgmi_info { uint64_t xgmi_hive_id; uint64_t xgmi_node_id; uint32_t index; + uint32_t reserved[9]; } amdsmi_xgmi_info_t; /** @@ -272,16 +274,19 @@ typedef struct amdsmi_gpu_caps { uint32_t gfxip_major; uint32_t gfxip_minor; uint16_t gfxip_cu_count; + uint32_t reserved[5]; } gfx; struct { uint8_t mm_ip_count; uint8_t mm_ip_list[AMDSMI_MAX_MM_IP_COUNT]; + uint32_t reserved[5]; } mm; bool ras_supported; uint8_t max_vf_num; uint32_t gfx_ip_count; uint32_t dma_ip_count; + uint32_t reserved[5]; } amdsmi_gpu_caps_t; typedef struct amdsmi_vram_info { @@ -292,6 +297,7 @@ typedef struct amdsmi_vram_info { typedef struct amdsmi_frequency_range { amdsmi_range_t supported_freq_range; amdsmi_range_t current_freq_range; + uint32_t reserved[8]; } amdsmi_frequency_range_t; typedef union amdsmi_bdf { @@ -310,6 +316,7 @@ typedef struct amdsmi_power_cap_info { uint64_t dpm_cap; uint64_t min_power_cap; uint64_t max_power_cap; + uint64_t reserved[3]; } amdsmi_power_cap_info_t; typedef struct amdsmi_vbios_info { @@ -318,6 +325,7 @@ typedef struct amdsmi_vbios_info { char build_date[AMDSMI_MAX_DATE_LENGTH]; char part_number[AMDSMI_MAX_STRING_LENGTH]; char vbios_version_string[AMDSMI_NORMAL_STRING_LENGTH]; + uint32_t reserved[15]; } amdsmi_vbios_info_t; typedef struct amdsmi_fw_info { @@ -325,7 +333,9 @@ typedef struct amdsmi_fw_info { struct { amdsmi_fw_block_t fw_id; uint64_t fw_version; + uint64_t reserved[2]; } fw_info_list[FW_ID__MAX]; + uint32_t reserved[7]; } amdsmi_fw_info_t; typedef struct amdsmi_asic_info { @@ -350,14 +360,17 @@ typedef struct amdsmi_board_info { typedef struct amdsmi_temperature { uint32_t cur_temp; + uint32_t reserved[7]; } amdsmi_temperature_t; typedef struct amdsmi_temperature_limit { uint32_t limit; + uint32_t reserved[7]; } amdsmi_temperature_limit_t; typedef struct amdsmi_power_limit { uint32_t limit; + uint32_t reserved[7]; } amdsmi_power_limit_t; typedef struct amdsmi_power_measure { @@ -366,6 +379,7 @@ typedef struct amdsmi_power_measure { uint32_t voltage_gfx; // GFX voltage measurement in mV uint32_t voltage_soc; // SOC voltage measurement in mV uint32_t voltage_mem; // MEM voltage measurement in mV + uint32_t reserved[10]; } amdsmi_power_measure_t; typedef struct amdsmi_clk_measure { @@ -373,12 +387,14 @@ typedef struct amdsmi_clk_measure { uint32_t avg_clk; uint32_t min_clk; uint32_t max_clk; + uint32_t reserved[4]; } amdsmi_clk_measure_t; typedef struct amdsmi_engine_usage { uint32_t gfx_activity; uint32_t umc_activity; uint32_t mm_activity[AMDSMI_MAX_MM_IP_COUNT]; + uint32_t reserved[6]; } amdsmi_engine_usage_t; typedef uint32_t amdsmi_process_handle; @@ -399,7 +415,8 @@ typedef struct amdsmi_process_info { uint64_t cpu_mem; uint64_t vram_mem; } memory_usage; /** in bytes */ - char container_name[AMDSMI_NORMAL_STRING_LENGTH]; + char container_name[AMDSMI_NORMAL_STRING_LENGTH]; + uint32_t reserved[10]; } amdsmi_proc_info_t; //! Guaranteed maximum possible number of supported frequencies @@ -924,6 +941,7 @@ typedef struct { uint32_t minor; //!< Minor version uint32_t patch; //!< Patch, build or stepping version const char *build; //!< Build string + uint32_t reserved[4]; } amdsmi_version_t; /// @cond Ignore in docs. typedef amdsmi_version_t amdsmi_version; @@ -1093,6 +1111,7 @@ typedef struct { typedef struct { uint64_t correctable_count; //!< Accumulated correctable errors uint64_t uncorrectable_count; //!< Accumulated uncorrectable errors + uint64_t reserved[2]; } amdsmi_error_count_t; /** @@ -1101,6 +1120,7 @@ typedef struct { typedef struct amdsmi_pcie_info { uint16_t pcie_lanes; uint32_t pcie_speed; + uint32_t reserved[6]; } amdsmi_pcie_info_t; /** * @brief This structure contains information specific to a process. diff --git a/projects/amdsmi/py-interface/amdsmi_wrapper.py b/projects/amdsmi/py-interface/amdsmi_wrapper.py index 35b4c4d972..3382b0a8fb 100644 --- a/projects/amdsmi/py-interface/amdsmi_wrapper.py +++ b/projects/amdsmi/py-interface/amdsmi_wrapper.py @@ -403,6 +403,7 @@ c__SA_amdsmi_range_t._pack_ = 1 # source:False c__SA_amdsmi_range_t._fields_ = [ ('lower_bound', ctypes.c_uint64), ('upper_bound', ctypes.c_uint64), + ('reserved', ctypes.c_uint64 * 2), ] amdsmi_range_t = c__SA_amdsmi_range_t @@ -417,22 +418,13 @@ amdsmi_xgmi_info._fields_ = [ ('xgmi_hive_id', ctypes.c_uint64), ('xgmi_node_id', ctypes.c_uint64), ('index', ctypes.c_uint32), - ('PADDING_1', ctypes.c_ubyte * 4), + ('reserved', ctypes.c_uint32 * 9), ] amdsmi_xgmi_info_t = amdsmi_xgmi_info class amdsmi_gpu_caps(Structure): pass -class amdsmi_gpu_caps_1(Structure): - pass - -amdsmi_gpu_caps_1._pack_ = 1 # source:False -amdsmi_gpu_caps_1._fields_ = [ - ('mm_ip_count', ctypes.c_ubyte), - ('mm_ip_list', ctypes.c_ubyte * 8), -] - class amdsmi_gpu_caps_0(Structure): pass @@ -442,6 +434,18 @@ amdsmi_gpu_caps_0._fields_ = [ ('gfxip_minor', ctypes.c_uint32), ('gfxip_cu_count', ctypes.c_uint16), ('PADDING_0', ctypes.c_ubyte * 2), + ('reserved', ctypes.c_uint32 * 5), +] + +class amdsmi_gpu_caps_1(Structure): + pass + +amdsmi_gpu_caps_1._pack_ = 1 # source:False +amdsmi_gpu_caps_1._fields_ = [ + ('mm_ip_count', ctypes.c_ubyte), + ('mm_ip_list', ctypes.c_ubyte * 8), + ('PADDING_0', ctypes.c_ubyte * 3), + ('reserved', ctypes.c_uint32 * 5), ] amdsmi_gpu_caps._pack_ = 1 # source:False @@ -450,9 +454,10 @@ amdsmi_gpu_caps._fields_ = [ ('mm', amdsmi_gpu_caps_1), ('ras_supported', ctypes.c_bool), ('max_vf_num', ctypes.c_ubyte), - ('PADDING_0', ctypes.c_ubyte), + ('PADDING_0', ctypes.c_ubyte * 2), ('gfx_ip_count', ctypes.c_uint32), ('dma_ip_count', ctypes.c_uint32), + ('reserved', ctypes.c_uint32 * 5), ] amdsmi_gpu_caps_t = amdsmi_gpu_caps @@ -467,11 +472,14 @@ amdsmi_vram_info._fields_ = [ amdsmi_vram_info_t = amdsmi_vram_info class amdsmi_frequency_range(Structure): - _pack_ = 1 # source:False - _fields_ = [ + pass + +amdsmi_frequency_range._pack_ = 1 # source:False +amdsmi_frequency_range._fields_ = [ ('supported_freq_range', amdsmi_range_t), ('current_freq_range', amdsmi_range_t), - ] + ('reserved', ctypes.c_uint32 * 8), +] amdsmi_frequency_range_t = amdsmi_frequency_range class amdsmi_bdf(Union): @@ -505,6 +513,7 @@ amdsmi_power_cap_info._fields_ = [ ('dpm_cap', ctypes.c_uint64), ('min_power_cap', ctypes.c_uint64), ('max_power_cap', ctypes.c_uint64), + ('reserved', ctypes.c_uint64 * 3), ] amdsmi_power_cap_info_t = amdsmi_power_cap_info @@ -518,6 +527,7 @@ amdsmi_vbios_info._fields_ = [ ('build_date', ctypes.c_char * 32), ('part_number', ctypes.c_char * 64), ('vbios_version_string', ctypes.c_char * 32), + ('reserved', ctypes.c_uint32 * 15), ] amdsmi_vbios_info_t = amdsmi_vbios_info @@ -532,6 +542,7 @@ amdsmi_fw_info_0._fields_ = [ ('fw_id', amdsmi_fw_block_t), ('PADDING_0', ctypes.c_ubyte * 4), ('fw_version', ctypes.c_uint64), + ('reserved', ctypes.c_uint64 * 2), ] amdsmi_fw_info._pack_ = 1 # source:False @@ -539,6 +550,8 @@ amdsmi_fw_info._fields_ = [ ('num_fw_info', ctypes.c_ubyte), ('PADDING_0', ctypes.c_ubyte * 7), ('fw_info_list', amdsmi_fw_info_0 * 46), + ('reserved', ctypes.c_uint32 * 7), + ('PADDING_1', ctypes.c_ubyte * 4), ] amdsmi_fw_info_t = amdsmi_fw_info @@ -581,6 +594,7 @@ class amdsmi_temperature(Structure): amdsmi_temperature._pack_ = 1 # source:False amdsmi_temperature._fields_ = [ ('cur_temp', ctypes.c_uint32), + ('reserved', ctypes.c_uint32 * 7), ] amdsmi_temperature_t = amdsmi_temperature @@ -590,6 +604,7 @@ class amdsmi_temperature_limit(Structure): amdsmi_temperature_limit._pack_ = 1 # source:False amdsmi_temperature_limit._fields_ = [ ('limit', ctypes.c_uint32), + ('reserved', ctypes.c_uint32 * 7), ] amdsmi_temperature_limit_t = amdsmi_temperature_limit @@ -599,6 +614,7 @@ class amdsmi_power_limit(Structure): amdsmi_power_limit._pack_ = 1 # source:False amdsmi_power_limit._fields_ = [ ('limit', ctypes.c_uint32), + ('reserved', ctypes.c_uint32 * 7), ] amdsmi_power_limit_t = amdsmi_power_limit @@ -613,6 +629,7 @@ amdsmi_power_measure._fields_ = [ ('voltage_gfx', ctypes.c_uint32), ('voltage_soc', ctypes.c_uint32), ('voltage_mem', ctypes.c_uint32), + ('reserved', ctypes.c_uint32 * 10), ('PADDING_1', ctypes.c_ubyte * 4), ] @@ -626,6 +643,7 @@ amdsmi_clk_measure._fields_ = [ ('avg_clk', ctypes.c_uint32), ('min_clk', ctypes.c_uint32), ('max_clk', ctypes.c_uint32), + ('reserved', ctypes.c_uint32 * 4), ] amdsmi_clk_measure_t = amdsmi_clk_measure @@ -637,6 +655,7 @@ amdsmi_engine_usage._fields_ = [ ('gfx_activity', ctypes.c_uint32), ('umc_activity', ctypes.c_uint32), ('mm_activity', ctypes.c_uint32 * 8), + ('reserved', ctypes.c_uint32 * 6), ] amdsmi_engine_usage_t = amdsmi_engine_usage @@ -675,6 +694,7 @@ amdsmi_process_info._fields_ = [ ('engine_usage', amdsmi_process_info_0), ('memory_usage', amdsmi_process_info_1), ('container_name', ctypes.c_char * 32), + ('reserved', ctypes.c_uint32 * 10), ] amdsmi_proc_info_t = amdsmi_process_info @@ -1179,6 +1199,7 @@ c__SA_amdsmi_version_t._fields_ = [ ('patch', ctypes.c_uint32), ('PADDING_0', ctypes.c_ubyte * 4), ('build', ctypes.POINTER(ctypes.c_char)), + ('reserved', ctypes.c_uint32 * 4), ] amdsmi_version_t = c__SA_amdsmi_version_t @@ -1287,6 +1308,7 @@ c__SA_amdsmi_error_count_t._pack_ = 1 # source:False c__SA_amdsmi_error_count_t._fields_ = [ ('correctable_count', ctypes.c_uint64), ('uncorrectable_count', ctypes.c_uint64), + ('reserved', ctypes.c_uint64 * 2), ] amdsmi_error_count_t = c__SA_amdsmi_error_count_t @@ -1298,6 +1320,7 @@ amdsmi_pcie_info._fields_ = [ ('pcie_lanes', ctypes.c_uint16), ('PADDING_0', ctypes.c_ubyte * 2), ('pcie_speed', ctypes.c_uint32), + ('reserved', ctypes.c_uint32 * 6), ] amdsmi_pcie_info_t = amdsmi_pcie_info