diff --git a/projects/amdsmi/CHANGELOG.md b/projects/amdsmi/CHANGELOG.md index 1169674e4e..b65081d1a3 100644 --- a/projects/amdsmi/CHANGELOG.md +++ b/projects/amdsmi/CHANGELOG.md @@ -4,16 +4,104 @@ Full documentation for amd_smi_lib is available at [https://rocm.docs.amd.com/pr ***All information listed below is for reference and subject to change.*** -## amd_smi_lib for ROCm 6.1.2 +## amd_smi_lib for ROCm 6.2.0 ### Additions +- **Added Handling to detect VMs with passthrough configurations in CLI Tool**. +CLI Tool had only allowed a restricted set of options for Virtual Machines with passthrough GPUs. Now we offer an expanded set of functions availble to passthrough configured GPUs. + +- **Added Process Isolation and Clear SRAM functionality to the CLI Tool for VMs**. +VMs now have the ability to set the process isolation and clear the sram from the CLI tool. Using the following commands + +```shell +amd-smi set --process-isolation <0 or 1> +amd-smi reset --clear-sram-data +``` + - **Added macros that were in `amdsmi.h` to the amdsmi Python library `amdsmi_interface.py`**. Added macros to reference max size limitations for certain amdsmi functions such as max dpm policies and max fanspeed. - **Added Ring Hang event**. Added `AMDSMI_EVT_NOTIF_RING_HANG` to the possible events in the `amdsmi_evt_notification_type_t` enum. +### Optimizations + +- **Updated `amdsmi_clk_info_t` struct in amdsmi.h and amdsmi_interface.py to align with host/guest**. +Changed cur_clk to clk, changed sleep_clk to clk_deep_sleep, and added clk_locked value. New struct will be in the following format: + +```shell + typedef struct { ++ uint32_t clk; + uint32_t min_clk; + uint32_t max_clk; ++ uint8_t clk_locked; ++ uint8_t clk_deep_sleep; + uint32_t reserved[4]; + } amdsmi_clk_info_t; +``` + +- **Multiple structure updates in amdsmi.h and amdsmi_interface.py to align with host/guest**. +Multiple structures used by APIs were changed for alignment unification: + - Changed `amdsmi_vram_info_t` `vram_size_mb` field changed to to `vram_size` + - Updated `amdsmi_vram_type_t` struct updated to include new enums and added `AMDSMI` prefix + - Updated `amdsmi_status_t` some enums were missing the `AMDSMI_STATUS` prefix + - Added `AMDSMI_PROCESSOR_TYPE` prefix to `processor_type_t` enums + - Removed the fields structure definition in favor for an anonymous definition in `amdsmi_bdf_t` + +- **Added `AMDSMI` prefix in amdsmi.h and amdsmi_interface.py to align with host/guest**. +Multiple structures used by APIs were changed for alignment unification. `AMDSMI` prefix was added to the following structures: + - Added AMDSMI prefix to `amdsmi_container_types_t` enums + - Added AMDSMI prefix to `amdsmi_clk_type_t` enums + - Added AMDSMI prefix to `amdsmi_compute_partition_type_t` enums + - Added AMDSMI prefix to `amdsmi_memory_partition_type_t` enums + - Added AMDSMI prefix to `amdsmi_clk_type_t` enums + - Added AMDSMI prefix to `amdsmi_temperature_type_t` enums + - Added AMDSMI prefix to `amdsmi_fw_block_t` enums + +- **Changed dpm_policy references to soc_pstate**. +The file structure referenced to dpm_policy changed to soc_pstate and we have changed the APIs and CLI tool to be inline with the current structure. `amdsmi_get_dpm_policy()` and `amdsmi_set_dpm_policy()` is no longer valid with the new API being `amdsmi_get_soc_pstate()` and `amdsmi_set_soc_pstate()`. The CLI tool has been changed from `--policy` to `--soc-pstate` + +- **Updated `amdsmi_get_gpu_board_info()` product_name to fallback to pciids**. +Previously on devices without a FRU we would not populate the product name in the `amdsmi_board_info_t` structure, now we will fallback to using the name listed according to the pciids file if available. + +- **Updated CLI voltage curve command output**. +The output for `amd-smi metric --voltage-curve` now splits the frequency and voltage output by curve point or outputs N/A if not applicable + +```shell +GPU: 0 + VOLTAGE_CURVE: + POINT_0_FREQUENCY: 872 Mhz + POINT_0_VOLTAGE: 736 mV + POINT_1_FREQUENCY: 1354 Mhz + POINT_1_VOLTAGE: 860 mV + POINT_2_FREQUENCY: 1837 Mhz + POINT_2_VOLTAGE: 1186 mV +``` + +- **Updated `amdsmi_get_gpu_board_info()` now has larger structure sizes for `amdsmi_board_info_t`**. +Updated sizes that work for retreiving relavant board information across AMD's +ASIC products. This requires users to update any ABIs using this structure. + +### Fixes + +- **`amdsmi_get_gpu_board_info()` no longer returns junk char strings**. +Previously if there was a partial failure to retrieve character strings, we would return +garbage output to users using the API. This fix intends to populate as many values as possible. +Then any failure(s) found along the way, `\0` is provided to `amdsmi_board_info_t` +structures data members which cannot be populated. Ensuring empty char string values. + +- **Fixed parsing of `pp_od_clk_voltage` within `amdsmi_get_gpu_od_volt_info`**. +The parsing of `pp_od_clk_voltage` was not dynamic enough to work with the dropping of voltage curve support on MI series cards. This propagates down to correcting the CLI's output `amd-smi metric --voltage-curve` to N/A if voltage curve is not enabled. + +### Known Issues + +- N/A + +## amd_smi_lib for ROCm 6.1.2 + +### Additions + - **Added process isolation and clean shader APIs and CLI commands**. Added APIs CLI and APIs to address LeftoverLocals security issues. Allowing clearing the sram data and setting process isolation on a per GPU basis. New APIs: - `amdsmi_get_gpu_process_isolation()` @@ -61,24 +149,6 @@ GPU PCIE_BW 0 26 Mb/s ``` -- **Updated CLI voltage curve command output**. -The output for `amd-smi metric --voltage-curve` now splits the frequency and voltage output by curve point or outputs N/A if not applicable - -```shell -GPU: 0 - VOLTAGE_CURVE: - POINT_0_FREQUENCY: 872 Mhz - POINT_0_VOLTAGE: 736 mV - POINT_1_FREQUENCY: 1354 Mhz - POINT_1_VOLTAGE: 860 mV - POINT_2_FREQUENCY: 1837 Mhz - POINT_2_VOLTAGE: 1186 mV -``` - -- **Updated `amdsmi_get_gpu_board_info()` now has larger structure sizes for `amdsmi_board_info_t`**. -Updated sizes that work for retreiving relavant board information across AMD's -ASIC products. This requires users to update any ABIs using this structure. - - **`amdsmi_get_power_cap_info` now returns values in uW instead of W**. `amdsmi_get_power_cap_info` will return in uW as originally reflected by driver. Previously `amdsmi_get_power_cap_info` returned W values, this conflicts with our sets and modifies values retrieved from driver. We decided to keep the values returned from driver untouched (in original units, uW). Then in CLI we will convert to watts (as previously done - no changes here). Additionally, driver made updates to min power cap displayed for devices when overdrive is disabled which prompted for this change (in this case min_power_cap and max_power_cap are the same). @@ -127,15 +197,6 @@ amdsmi_get_gpu_process_info was removed from the C library in an earlier build, ### Fixes -- **`amdsmi_get_gpu_board_info()` no longer returns junk char strings**. -Previously if there was a partial failure to retrieve character strings, we would return -garbage output to users using the API. This fix intends to populate as many values as possible. -Then any failure(s) found along the way, `\0` is provided to `amdsmi_board_info_t` -structures data members which cannot be populated. Ensuring empty char string values. - -- **Fixed parsing of `pp_od_clk_voltage` within `amdsmi_get_gpu_od_volt_info`**. -The parsing of `pp_od_clk_voltage` was not dynamic enough to work with the dropping of voltage curve support on MI series cards. This propagates down to correcting the CLI's output `amd-smi metric --voltage-curve` to N/A if voltage curve is not enabled. - - **Fixed `amd-smi metric --power` now provides power output for Navi2x/Navi3x/MI1x**. These systems use an older version of gpu_metrics in amdgpu. This fix only updates what CLI outputs. No change in any of our APIs. diff --git a/projects/amdsmi/CMakeLists.txt b/projects/amdsmi/CMakeLists.txt index 614ce51a6c..6b7a912d5f 100755 --- a/projects/amdsmi/CMakeLists.txt +++ b/projects/amdsmi/CMakeLists.txt @@ -28,7 +28,7 @@ find_program(GIT NAMES git) ## Setup the package version based on git tags. set(PKG_VERSION_GIT_TAG_PREFIX "amdsmi_pkg_ver") -get_package_version_number("24.5.3" ${PKG_VERSION_GIT_TAG_PREFIX} GIT) +get_package_version_number("24.6.0" ${PKG_VERSION_GIT_TAG_PREFIX} GIT) message("Package version: ${PKG_VERSION_STR}") set(${AMD_SMI_LIBS_TARGET}_VERSION_MAJOR "${CPACK_PACKAGE_VERSION_MAJOR}") set(${AMD_SMI_LIBS_TARGET}_VERSION_MINOR "${CPACK_PACKAGE_VERSION_MINOR}") diff --git a/projects/amdsmi/README.md b/projects/amdsmi/README.md index bd25e588b7..b29a5281c0 100755 --- a/projects/amdsmi/README.md +++ b/projects/amdsmi/README.md @@ -154,11 +154,11 @@ int main() { // For each device of the socket, get name and temperature. for (uint32_t j=0; j < device_count; j++) { // Get device type. Since the amdsmi is initialized with - // AMD_SMI_INIT_AMD_GPUS, the processor_type must be AMD_GPU. + // AMD_SMI_INIT_AMD_GPUS, the processor_type must be AMDSMI_PROCESSOR_TYPE_AMD_GPU. processor_type_t processor_type; ret = amdsmi_get_processor_type(processor_handles[j], &processor_type); - if (processor_type != AMD_GPU) { - std::cout << "Expect AMD_GPU device type!\n"; + if (processor_type != AMDSMI_PROCESSOR_TYPE_AMD_GPU) { + std::cout << "Expect AMDSMI_PROCESSOR_TYPE_AMD_GPU device type!\n"; return 1; } @@ -170,7 +170,7 @@ int main() { // Get temperature int64_t val_i64 = 0; - ret = amdsmi_get_temp_metric(processor_handles[j], TEMPERATURE_TYPE_EDGE, + ret = amdsmi_get_temp_metric(processor_handles[j], AMDSMI_TEMPERATURE_TYPE_EDGE, AMDSMI_TEMP_CURRENT, &val_i64); std::cout << "\t\tTemperature: " << val_i64 << "C" << std::endl; } @@ -212,8 +212,8 @@ int main(int argc, char **argv) { for (uint32_t i = 0; i < socket_count; i++) { uint32_t cpu_count = 0; - // Set processor type as AMD_CPU - processor_type_t processor_type = AMD_CPU; + // Set processor type as AMDSMI_PROCESSOR_TYPE_AMD_CPU + processor_type_t processor_type = AMDSMI_PROCESSOR_TYPE_AMD_CPU; ret = amdsmi_get_processor_handles_by_type(sockets[i], processor_type, nullptr, &cpu_count); // Allocate the memory for the cpus diff --git a/projects/amdsmi/amdsmi_cli/README.md b/projects/amdsmi/amdsmi_cli/README.md index f495e0845d..fd53c70716 100644 --- a/projects/amdsmi/amdsmi_cli/README.md +++ b/projects/amdsmi/amdsmi_cli/README.md @@ -79,7 +79,7 @@ amd-smi will report the version and current platform detected when running the c ~$ amd-smi usage: amd-smi [-h] ... -AMD System Management Interface | Version: 24.5.3.0 | ROCm version: 6.1.2 | Platform: Linux Baremetal +AMD System Management Interface | Version: 24.6.0.0 | ROCm version: 6.2.0 | Platform: Linux Baremetal options: -h, --help show this help message and exit @@ -109,7 +109,7 @@ Each command will have detailed information via `amd-smi [command] --help` For convenience, here is the help output for each command -``` bash +```bash ~$ amd-smi list --help usage: amd-smi list [-h] [--json | --csv] [--file FILE] [--loglevel LEVEL] [-g GPU [GPU ...] | -U CPU [CPU ...] | -O CORE [CORE ...]] @@ -123,10 +123,10 @@ GPU with some basic information for each VF. options: -h, --help show this help message and exit -g, --gpu GPU [GPU ...] Select a GPU ID, BDF, or UUID from the possible choices: - ID: 0 | BDF: 0000:01:00.0 | UUID: 71ff74a0-0000-1000-8066-0a3c71d5f817 - ID: 1 | BDF: 0001:01:00.0 | UUID: b4ff74a0-0000-1000-80b2-fa0be8628b1a - ID: 2 | BDF: 0002:01:00.0 | UUID: a9ff74a0-0000-1000-8007-3066a98ba4a6 - ID: 3 | BDF: 0003:01:00.0 | UUID: 53ff74a0-0000-1000-80a0-a1ff3830f499 + ID: 0 | BDF: 0000:01:00.0 | UUID: 7eff74a0-0000-1000-808f-7e20764e2714 + ID: 1 | BDF: 0001:01:00.0 | UUID: b6ff74a0-0000-1000-80ae-7c8cefe1f084 + ID: 2 | BDF: 0002:01:00.0 | UUID: 36ff74a0-0000-1000-8071-25d815189854 + ID: 3 | BDF: 0003:01:00.0 | UUID: f4ff74a0-0000-1000-80c4-4c2be5e66537 all | Selects all devices -U, --cpu CPU [CPU ...] Select a CPU ID from the possible choices: ID: 0 @@ -148,9 +148,9 @@ Command Modifiers: ```bash ~$ amd-smi static --help -usage: amd-smi static [-h] [-g GPU [GPU ...]] [-a] [-b] [-V] [-d] [-v] [-c] [-B] [-r] [-p] - [-l] [-P] [-x] [-s] [-u] [--json | --csv] [--file FILE] - [--loglevel LEVEL] +usage: amd-smi static [-h] [-g GPU [GPU ...] | -U CPU [CPU ...]] [-a] [-b] [-V] [-d] [-v] + [-c] [-B] [-R] [-r] [-p] [-l] [-P] [-x] [-u] [-s] [-i] + [--json | --csv] [--file FILE] [--loglevel LEVEL] If no GPU is specified, returns static information for all GPUs on the system. If no static argument is provided, all static information will be displayed. @@ -158,10 +158,10 @@ If no static argument is provided, all static information will be displayed. Static Arguments: -h, --help show this help message and exit -g, --gpu GPU [GPU ...] Select a GPU ID, BDF, or UUID from the possible choices: - ID: 0 | BDF: 0000:01:00.0 | UUID: 71ff74a0-0000-1000-8066-0a3c71d5f817 - ID: 1 | BDF: 0001:01:00.0 | UUID: b4ff74a0-0000-1000-80b2-fa0be8628b1a - ID: 2 | BDF: 0002:01:00.0 | UUID: a9ff74a0-0000-1000-8007-3066a98ba4a6 - ID: 3 | BDF: 0003:01:00.0 | UUID: 53ff74a0-0000-1000-80a0-a1ff3830f499 + ID: 0 | BDF: 0000:01:00.0 | UUID: 7eff74a0-0000-1000-808f-7e20764e2714 + ID: 1 | BDF: 0001:01:00.0 | UUID: b6ff74a0-0000-1000-80ae-7c8cefe1f084 + ID: 2 | BDF: 0002:01:00.0 | UUID: 36ff74a0-0000-1000-8071-25d815189854 + ID: 3 | BDF: 0003:01:00.0 | UUID: f4ff74a0-0000-1000-80c4-4c2be5e66537 all | Selects all devices -U, --cpu CPU [CPU ...] Select a CPU ID from the possible choices: ID: 0 @@ -176,10 +176,12 @@ Static Arguments: -v, --vram All vram information -c, --cache All cache information -B, --board All board information + -R, --process-isolation The process isolation status -r, --ras Displays RAS features information -p, --partition Partition information -l, --limit All limit metric values (i.e. power and thermal limits) - -s, --process-isolation The process isolation status + -P, --policy The available DPM policy + -x, --xgmi-plpd The available XGMI per-link power down policy -u, --numa All numa node information CPU Arguments: @@ -194,7 +196,7 @@ Command Modifiers: DEBUG, INFO, WARNING, ERROR, CRITICAL ``` -``` bash +```bash ~$ amd-smi firmware --help usage: amd-smi firmware [-h] [--json | --csv] [--file FILE] [--loglevel LEVEL] [-g GPU [GPU ...] | -U CPU [CPU ...] | -O CORE [CORE ...]] [-f] @@ -204,10 +206,10 @@ If no GPU is specified, return firmware information for all GPUs on the system. Firmware Arguments: -h, --help show this help message and exit -g, --gpu GPU [GPU ...] Select a GPU ID, BDF, or UUID from the possible choices: - ID: 0 | BDF: 0000:01:00.0 | UUID: 71ff74a0-0000-1000-8066-0a3c71d5f817 - ID: 1 | BDF: 0001:01:00.0 | UUID: b4ff74a0-0000-1000-80b2-fa0be8628b1a - ID: 2 | BDF: 0002:01:00.0 | UUID: a9ff74a0-0000-1000-8007-3066a98ba4a6 - ID: 3 | BDF: 0003:01:00.0 | UUID: 53ff74a0-0000-1000-80a0-a1ff3830f499 + ID: 0 | BDF: 0000:01:00.0 | UUID: 7eff74a0-0000-1000-808f-7e20764e2714 + ID: 1 | BDF: 0001:01:00.0 | UUID: b6ff74a0-0000-1000-80ae-7c8cefe1f084 + ID: 2 | BDF: 0002:01:00.0 | UUID: 36ff74a0-0000-1000-8071-25d815189854 + ID: 3 | BDF: 0003:01:00.0 | UUID: f4ff74a0-0000-1000-80c4-4c2be5e66537 all | Selects all devices -U, --cpu CPU [CPU ...] Select a CPU ID from the possible choices: ID: 0 @@ -239,10 +241,10 @@ If no GPU is specified, return bad page information for all GPUs on the system. Bad Pages Arguments: -h, --help show this help message and exit -g, --gpu GPU [GPU ...] Select a GPU ID, BDF, or UUID from the possible choices: - ID: 0 | BDF: 0000:01:00.0 | UUID: 71ff74a0-0000-1000-8066-0a3c71d5f817 - ID: 1 | BDF: 0001:01:00.0 | UUID: b4ff74a0-0000-1000-80b2-fa0be8628b1a - ID: 2 | BDF: 0002:01:00.0 | UUID: a9ff74a0-0000-1000-8007-3066a98ba4a6 - ID: 3 | BDF: 0003:01:00.0 | UUID: 53ff74a0-0000-1000-80a0-a1ff3830f499 + ID: 0 | BDF: 0000:01:00.0 | UUID: 7eff74a0-0000-1000-808f-7e20764e2714 + ID: 1 | BDF: 0001:01:00.0 | UUID: b6ff74a0-0000-1000-80ae-7c8cefe1f084 + ID: 2 | BDF: 0002:01:00.0 | UUID: 36ff74a0-0000-1000-8071-25d815189854 + ID: 3 | BDF: 0003:01:00.0 | UUID: f4ff74a0-0000-1000-80c4-4c2be5e66537 all | Selects all devices -U, --cpu CPU [CPU ...] Select a CPU ID from the possible choices: ID: 0 @@ -287,12 +289,12 @@ If no metric argument is provided all metric information will be displayed. Metric arguments: -h, --help show this help message and exit -g, --gpu GPU [GPU ...] Select a GPU ID, BDF, or UUID from the possible choices: - ID: 0 | BDF: 0000:01:00.0 | UUID: 71ff74a0-0000-1000-8066-0a3c71d5f817 - ID: 1 | BDF: 0001:01:00.0 | UUID: b4ff74a0-0000-1000-80b2-fa0be8628b1a - ID: 2 | BDF: 0002:01:00.0 | UUID: a9ff74a0-0000-1000-8007-3066a98ba4a6 - ID: 3 | BDF: 0003:01:00.0 | UUID: 53ff74a0-0000-1000-80a0-a1ff3830f499 + ID: 0 | BDF: 0000:01:00.0 | UUID: 7eff74a0-0000-1000-808f-7e20764e2714 + ID: 1 | BDF: 0001:01:00.0 | UUID: b6ff74a0-0000-1000-80ae-7c8cefe1f084 + ID: 2 | BDF: 0002:01:00.0 | UUID: 36ff74a0-0000-1000-8071-25d815189854 + ID: 3 | BDF: 0003:01:00.0 | UUID: f4ff74a0-0000-1000-80c4-4c2be5e66537 all | Selects all devices - -U, --cpu CPU [CPU ...] Select a CPU ID from the possible choices: + -U, --cpu CPU [CPU ...] Select a CPU ID from the possible choices: ID: 0 ID: 1 ID: 2 @@ -368,10 +370,10 @@ If no process argument is provided all process information will be displayed. Process arguments: -h, --help show this help message and exit -g, --gpu GPU [GPU ...] Select a GPU ID, BDF, or UUID from the possible choices: - ID: 0 | BDF: 0000:01:00.0 | UUID: 71ff74a0-0000-1000-8066-0a3c71d5f817 - ID: 1 | BDF: 0001:01:00.0 | UUID: b4ff74a0-0000-1000-80b2-fa0be8628b1a - ID: 2 | BDF: 0002:01:00.0 | UUID: a9ff74a0-0000-1000-8007-3066a98ba4a6 - ID: 3 | BDF: 0003:01:00.0 | UUID: 53ff74a0-0000-1000-80a0-a1ff3830f499 + ID: 0 | BDF: 0000:01:00.0 | UUID: 7eff74a0-0000-1000-808f-7e20764e2714 + ID: 1 | BDF: 0001:01:00.0 | UUID: b6ff74a0-0000-1000-80ae-7c8cefe1f084 + ID: 2 | BDF: 0002:01:00.0 | UUID: 36ff74a0-0000-1000-8071-25d815189854 + ID: 3 | BDF: 0003:01:00.0 | UUID: f4ff74a0-0000-1000-80c4-4c2be5e66537 all | Selects all devices -U, --cpu CPU [CPU ...] Select a CPU ID from the possible choices: ID: 0 @@ -409,10 +411,10 @@ If no GPU is specified, returns event information for all GPUs on the system. Event Arguments: -h, --help show this help message and exit -g, --gpu GPU [GPU ...] Select a GPU ID, BDF, or UUID from the possible choices: - ID: 0 | BDF: 0000:01:00.0 | UUID: 71ff74a0-0000-1000-8066-0a3c71d5f817 - ID: 1 | BDF: 0001:01:00.0 | UUID: b4ff74a0-0000-1000-80b2-fa0be8628b1a - ID: 2 | BDF: 0002:01:00.0 | UUID: a9ff74a0-0000-1000-8007-3066a98ba4a6 - ID: 3 | BDF: 0003:01:00.0 | UUID: 53ff74a0-0000-1000-80a0-a1ff3830f499 + ID: 0 | BDF: 0000:01:00.0 | UUID: 7eff74a0-0000-1000-808f-7e20764e2714 + ID: 1 | BDF: 0001:01:00.0 | UUID: b6ff74a0-0000-1000-80ae-7c8cefe1f084 + ID: 2 | BDF: 0002:01:00.0 | UUID: 36ff74a0-0000-1000-8071-25d815189854 + ID: 3 | BDF: 0003:01:00.0 | UUID: f4ff74a0-0000-1000-80c4-4c2be5e66537 all | Selects all devices -U, --cpu CPU [CPU ...] Select a CPU ID from the possible choices: ID: 0 @@ -444,10 +446,10 @@ If no topology argument is provided all topology information will be displayed. Topology arguments: -h, --help show this help message and exit -g, --gpu GPU [GPU ...] Select a GPU ID, BDF, or UUID from the possible choices: - ID: 0 | BDF: 0000:01:00.0 | UUID: 71ff74a0-0000-1000-8066-0a3c71d5f817 - ID: 1 | BDF: 0001:01:00.0 | UUID: b4ff74a0-0000-1000-80b2-fa0be8628b1a - ID: 2 | BDF: 0002:01:00.0 | UUID: a9ff74a0-0000-1000-8007-3066a98ba4a6 - ID: 3 | BDF: 0003:01:00.0 | UUID: 53ff74a0-0000-1000-80a0-a1ff3830f499 + ID: 0 | BDF: 0000:01:00.0 | UUID: 7eff74a0-0000-1000-808f-7e20764e2714 + ID: 1 | BDF: 0001:01:00.0 | UUID: b6ff74a0-0000-1000-80ae-7c8cefe1f084 + ID: 2 | BDF: 0002:01:00.0 | UUID: 36ff74a0-0000-1000-8071-25d815189854 + ID: 3 | BDF: 0003:01:00.0 | UUID: f4ff74a0-0000-1000-80c4-4c2be5e66537 all | Selects all devices -U, --cpu CPU [CPU ...] Select a CPU ID from the possible choices: ID: 0 @@ -473,15 +475,16 @@ Command Modifiers: ``` ```bash +~$ amd-smi set --help usage: amd-smi set [-h] (-g GPU [GPU ...] | -U CPU [CPU ...] | -O CORE [CORE ...]) [-f %] [-l LEVEL] [-P SETPROFILE] [-d SCLKMAX] [-C PARTITION] [-M PARTITION] - [-o WATTS] [-p POLICY] [-i STATUS] [--cpu-pwr-limit PWR_LIMIT] - [--cpu-xgmi-link-width MIN_WIDTH MAX_WIDTH] + [-o WATTS] [-p POLICY_ID] [-x POLICY_ID] [-R STATUS] + [--cpu-pwr-limit PWR_LIMIT] [--cpu-xgmi-link-width MIN_WIDTH MAX_WIDTH] [--cpu-lclk-dpm-level NBIOID MIN_DPM MAX_DPM] [--cpu-pwr-eff-mode MODE] [--cpu-gmi3-link-width MIN_LW MAX_LW] [--cpu-pcie-link-rate LINK_RATE] [--cpu-df-pstate-range MAX_PSTATE MIN_PSTATE] [--cpu-enable-apb] [--cpu-disable-apb DF_PSTATE] [--soc-boost-limit BOOST_LIMIT] - [--core-boost-limit BOOST_LIMIT] [-c] [--json | --csv] [--file FILE] + [--core-boost-limit BOOST_LIMIT] [--json | --csv] [--file FILE] [--loglevel LEVEL] A GPU must be specified to set a configuration. @@ -490,10 +493,10 @@ A set argument must be provided; Multiple set arguments are accepted Set Arguments: -h, --help show this help message and exit -g, --gpu GPU [GPU ...] Select a GPU ID, BDF, or UUID from the possible choices: - ID: 0 | BDF: 0000:01:00.0 | UUID: 71ff74a0-0000-1000-8066-0a3c71d5f817 - ID: 1 | BDF: 0001:01:00.0 | UUID: b4ff74a0-0000-1000-80b2-fa0be8628b1a - ID: 2 | BDF: 0002:01:00.0 | UUID: a9ff74a0-0000-1000-8007-3066a98ba4a6 - ID: 3 | BDF: 0003:01:00.0 | UUID: 53ff74a0-0000-1000-80a0-a1ff3830f499 + ID: 0 | BDF: 0000:01:00.0 | UUID: 7eff74a0-0000-1000-808f-7e20764e2714 + ID: 1 | BDF: 0001:01:00.0 | UUID: b6ff74a0-0000-1000-80ae-7c8cefe1f084 + ID: 2 | BDF: 0002:01:00.0 | UUID: 36ff74a0-0000-1000-8071-25d815189854 + ID: 3 | BDF: 0003:01:00.0 | UUID: f4ff74a0-0000-1000-80c4-4c2be5e66537 all | Selects all devices -U, --cpu CPU [CPU ...] Select a CPU ID from the possible choices: ID: 0 @@ -515,8 +518,7 @@ Set Arguments: -o, --power-cap WATTS Set power capacity limit -p, --dpm-policy POLICY_ID Set the GPU DPM policy using policy id -x, --xgmi-plpd POLICY_ID Set the GPU XGMI per-link power down policy using policy id - -i, --process-isolation STATUS Enable or disable the GPU process isolation: 0 for disable and 1 for enable. - -c, --clear-sram-data Clear the GPU SRAM data + -R, --process-isolation STATUS Enable or disable the GPU process isolation: 0 for disable and 1 for enable. CPU Arguments: --cpu-pwr-limit PWR_LIMIT Set power limit for the given socket. Input parameter is power limit value. @@ -546,7 +548,7 @@ Command Modifiers: ~$ amd-smi reset --help usage: amd-smi reset [-h] [--json | --csv] [--file FILE] [--loglevel LEVEL] (-g GPU [GPU ...] | -U CPU [CPU ...] | -O CORE [CORE ...]) [-G] [-c] - [-f] [-p] [-x] [-d] [-C] [-M] [-o] + [-f] [-p] [-x] [-d] [-C] [-M] [-o] [-l] A GPU must be specified to reset a configuration. A reset argument must be provided; Multiple reset arguments are accepted @@ -554,10 +556,10 @@ A reset argument must be provided; Multiple reset arguments are accepted Reset Arguments: -h, --help show this help message and exit -g, --gpu GPU [GPU ...] Select a GPU ID, BDF, or UUID from the possible choices: - ID: 0 | BDF: 0000:01:00.0 | UUID: 71ff74a0-0000-1000-8066-0a3c71d5f817 - ID: 1 | BDF: 0001:01:00.0 | UUID: b4ff74a0-0000-1000-80b2-fa0be8628b1a - ID: 2 | BDF: 0002:01:00.0 | UUID: a9ff74a0-0000-1000-8007-3066a98ba4a6 - ID: 3 | BDF: 0003:01:00.0 | UUID: 53ff74a0-0000-1000-80a0-a1ff3830f499 + ID: 0 | BDF: 0000:01:00.0 | UUID: 7eff74a0-0000-1000-808f-7e20764e2714 + ID: 1 | BDF: 0001:01:00.0 | UUID: b6ff74a0-0000-1000-80ae-7c8cefe1f084 + ID: 2 | BDF: 0002:01:00.0 | UUID: 36ff74a0-0000-1000-8071-25d815189854 + ID: 3 | BDF: 0003:01:00.0 | UUID: f4ff74a0-0000-1000-80c4-4c2be5e66537 all | Selects all devices -U, --cpu CPU [CPU ...] Select a CPU ID from the possible choices: ID: 0 @@ -577,6 +579,92 @@ Reset Arguments: -C, --compute-partition Reset compute partitions on the specified GPU -M, --memory-partition Reset memory partitions on the specified GPU -o, --power-cap Reset power capacity limit to max capable + -l, --clear-sram-data Clear the GPU SRAM data + +Command Modifiers: + --json Displays output in JSON format (human readable by default). + --csv Displays output in CSV format (human readable by default). + --file FILE Saves output into a file on the provided path (stdout by default). + --loglevel LEVEL Set the logging level from the possible choices: + DEBUG, INFO, WARNING, ERROR, CRITICAL +``` + +```bash +~$ amd-smi monitor --help +usage: amd-smi monitor [-h] [--json | --csv] [--file FILE] [--loglevel LEVEL] + [-g GPU [GPU ...] | -U CPU [CPU ...] | -O CORE [CORE ...]] + [-w INTERVAL] [-W TIME] [-i ITERATIONS] [-p] [-t] [-u] [-m] [-n] + [-d] [-s] [-e] [-v] [-r] + +Monitor a target device for the specified arguments. +If no arguments are provided, all arguments will be enabled. +Use the watch arguments to run continuously + +Monitor Arguments: + -h, --help show this help message and exit + -g, --gpu GPU [GPU ...] Select a GPU ID, BDF, or UUID from the possible choices: + ID: 0 | BDF: 0000:01:00.0 | UUID: 7eff74a0-0000-1000-808f-7e20764e2714 + ID: 1 | BDF: 0001:01:00.0 | UUID: b6ff74a0-0000-1000-80ae-7c8cefe1f084 + ID: 2 | BDF: 0002:01:00.0 | UUID: 36ff74a0-0000-1000-8071-25d815189854 + ID: 3 | BDF: 0003:01:00.0 | UUID: f4ff74a0-0000-1000-80c4-4c2be5e66537 + all | Selects all devices + -U, --cpu CPU [CPU ...] Select a CPU ID from the possible choices: + ID: 0 + ID: 1 + ID: 2 + ID: 3 + all | Selects all devices + -O, --core CORE [CORE ...] Select a Core ID from the possible choices: + ID: 0 - 95 + all | Selects all devices + -w, --watch INTERVAL Reprint the command in a loop of INTERVAL seconds + -W, --watch_time TIME The total TIME to watch the given command + -i, --iterations ITERATIONS Total number of ITERATIONS to loop on the given command + -p, --power-usage Monitor power usage in Watts + -t, --temperature Monitor temperature in Celsius + -u, --gfx Monitor graphics utilization (%) and clock (MHz) + -m, --mem Monitor memory utilization (%) and clock (MHz) + -n, --encoder Monitor encoder utilization (%) and clock (MHz) + -d, --decoder Monitor decoder utilization (%) and clock (MHz) + -s, --throttle-status Monitor thermal throttle status + -e, --ecc Monitor ECC single bit, ECC double bit, and PCIe replay error counts + -v, --vram-usage Monitor memory usage in MB + -r, --pcie Monitor PCIe bandwidth in Mb/s + +Command Modifiers: + --json Displays output in JSON format (human readable by default). + --csv Displays output in CSV format (human readable by default). + --file FILE Saves output into a file on the provided path (stdout by default). + --loglevel LEVEL Set the logging level from the possible choices: + DEBUG, INFO, WARNING, ERROR, CRITICAL +``` + +```bash +~$ amd-smi xgmi --help +usage: amd-smi xgmi [-h] [--json | --csv] [--file FILE] [--loglevel LEVEL] + [-g GPU [GPU ...] | -U CPU [CPU ...] | -O CORE [CORE ...]] [-m] + +If no GPU is specified, returns information for all GPUs on the system. +If no xgmi argument is provided all xgmi information will be displayed. + +XGMI arguments: + -h, --help show this help message and exit + -g, --gpu GPU [GPU ...] Select a GPU ID, BDF, or UUID from the possible choices: + ID: 0 | BDF: 0000:01:00.0 | UUID: 7eff74a0-0000-1000-808f-7e20764e2714 + ID: 1 | BDF: 0001:01:00.0 | UUID: b6ff74a0-0000-1000-80ae-7c8cefe1f084 + ID: 2 | BDF: 0002:01:00.0 | UUID: 36ff74a0-0000-1000-8071-25d815189854 + ID: 3 | BDF: 0003:01:00.0 | UUID: f4ff74a0-0000-1000-80c4-4c2be5e66537 + all | Selects all devices + -U, --cpu CPU [CPU ...] Select a CPU ID from the possible choices: + ID: 0 + ID: 1 + ID: 2 + ID: 3 + all | Selects all devices + -O, --core CORE [CORE ...] Select a Core ID from the possible choices: + ID: 0 - 95 + all | Selects all devices + -m, --metric Metric XGMI information Command Modifiers: --json Displays output in JSON format (human readable by default). @@ -593,28 +681,29 @@ Here is some example output from the tool: ```bash ~$ amd-smi static CPU: 0 - SMU: - FW_VERSION: 85:81:0 - INTERFACE_VERSION: - PROTO VERSION: 6 + SMU: + FW_VERSION: 85.90.0 + INTERFACE_VERSION: + PROTO VERSION: 6 CPU: 1 - SMU: - FW_VERSION: 85:81:0 - INTERFACE_VERSION: - PROTO VERSION: 6 + SMU: + FW_VERSION: 85.90.0 + INTERFACE_VERSION: + PROTO VERSION: 6 CPU: 2 - SMU: - FW_VERSION: 85:81:0 - INTERFACE_VERSION: - PROTO VERSION: 6 + SMU: + FW_VERSION: 85.90.0 + INTERFACE_VERSION: + PROTO VERSION: 6 CPU: 3 - SMU: - FW_VERSION: 85:81:0 - INTERFACE_VERSION: - PROTO VERSION: 6 + SMU: + FW_VERSION: 85.90.0 + INTERFACE_VERSION: + PROTO VERSION: 6 + GPU: 0 ASIC: @@ -623,8 +712,8 @@ GPU: 0 VENDOR_NAME: Advanced Micro Devices Inc. [AMD/ATI] SUBVENDOR_ID: 0x1002 DEVICE_ID: 0x74a0 - REV_ID: 0x0 - ASIC_SERIAL: 0x71660A3C71D5F817 + REV_ID: 0x00 + ASIC_SERIAL: 0x7E8F7E20764E2714 OAM_ID: 0 BUS: BDF: 0000:01:00.0 @@ -636,25 +725,26 @@ GPU: 0 NAME: N/A BUILD_DATE: N/A PART_NUMBER: N/A - VERSION: N/A + VERSION: N/A LIMIT: MAX_POWER: 550 W + MIN_POWER: 0 W SOCKET_POWER: 550 W SLOWDOWN_EDGE_TEMPERATURE: N/A SLOWDOWN_HOTSPOT_TEMPERATURE: 100 °C - SLOWDOWN_VRAM_TEMPERATURE: 95 °C + SLOWDOWN_VRAM_TEMPERATURE: 105 °C SHUTDOWN_EDGE_TEMPERATURE: N/A SHUTDOWN_HOTSPOT_TEMPERATURE: 110 °C - SHUTDOWN_VRAM_TEMPERATURE: 105 °C + SHUTDOWN_VRAM_TEMPERATURE: 115 °C DRIVER: NAME: amdgpu - VERSION: 6.7.0 + VERSION: 6.9.0-rc5+ BOARD: MODEL_NUMBER: N/A PRODUCT_SERIAL: N/A FRU_ID: N/A - PRODUCT_NAME: N/A - MANUFACTURER_NAME: N/A + PRODUCT_NAME: Aqua Vanjaram [Instinct MI300A] + MANUFACTURER_NAME: Advanced Micro Devices, Inc. [AMD/ATI] RAS: EEPROM_VERSION: 0x0 PARITY_SCHEMA: DISABLED @@ -676,10 +766,15 @@ GPU: 0 MP0: DISABLED MP1: DISABLED FUSE: DISABLED + MCA: DISABLED + VCN: DISABLED + JPEG: DISABLED + IH: DISABLED + MPIO: DISABLED PARTITION: COMPUTE_PARTITION: SPX MEMORY_PARTITION: NPS1 - DPM_POLICY: + SOC_PSTATE: NUM_SUPPORTED: 4 CURRENT_ID: 1 POLICIES: @@ -701,38 +796,39 @@ GPU: 0 POLICY_DESCRIPTION: plpd_default POLICY_ID: 2 POLICY_DESCRIPTION: plpd_optimized + PROCESS_ISOLATION: N/A NUMA: NODE: 0 AFFINITY: 0 VRAM: TYPE: HBM VENDOR: N/A - SIZE: 96432 MB - CACHE_INFO: - CACHE_0: - CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE - CACHE_SIZE: 32 KB - CACHE_LEVEL: 1 - MAX_NUM_CU_SHARED: 2 - NUM_CACHE_INSTANCE: 464 - CACHE_1: - CACHE_PROPERTIES: INST_CACHE, SIMD_CACHE - CACHE_SIZE: 64 KB - CACHE_LEVEL: 1 - MAX_NUM_CU_SHARED: 2 - NUM_CACHE_INSTANCE: 160 - CACHE_2: - CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE - CACHE_SIZE: 32768 KB - CACHE_LEVEL: 2 - MAX_NUM_CU_SHARED: 304 - NUM_CACHE_INSTANCE: 1 - CACHE_3: - CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE - CACHE_SIZE: 262144 KB - CACHE_LEVEL: 3 - MAX_NUM_CU_SHARED: 304 - NUM_CACHE_INSTANCE: 1 + SIZE: 64289 MB + CACHE_INFO: + CACHE_0: + CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE + CACHE_SIZE: 32 KB + CACHE_LEVEL: 1 + MAX_NUM_CU_SHARED: 2 + NUM_CACHE_INSTANCE: 348 + CACHE_1: + CACHE_PROPERTIES: INST_CACHE, SIMD_CACHE + CACHE_SIZE: 64 KB + CACHE_LEVEL: 1 + MAX_NUM_CU_SHARED: 2 + NUM_CACHE_INSTANCE: 120 + CACHE_2: + CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE + CACHE_SIZE: 4096 KB + CACHE_LEVEL: 2 + MAX_NUM_CU_SHARED: 228 + NUM_CACHE_INSTANCE: 1 + CACHE_3: + CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE + CACHE_SIZE: 262144 KB + CACHE_LEVEL: 3 + MAX_NUM_CU_SHARED: 228 + NUM_CACHE_INSTANCE: 1 GPU: 1 ASIC: @@ -741,8 +837,8 @@ GPU: 1 VENDOR_NAME: Advanced Micro Devices Inc. [AMD/ATI] SUBVENDOR_ID: 0x1002 DEVICE_ID: 0x74a0 - REV_ID: 0x0 - ASIC_SERIAL: 0xB4B2FA0BE8628B1A + REV_ID: 0x00 + ASIC_SERIAL: 0xB6AE7C8CEFE1F084 OAM_ID: 1 BUS: BDF: 0001:01:00.0 @@ -754,25 +850,26 @@ GPU: 1 NAME: N/A BUILD_DATE: N/A PART_NUMBER: N/A - VERSION: N/A + VERSION: N/A LIMIT: MAX_POWER: 550 W + MIN_POWER: 0 W SOCKET_POWER: 550 W SLOWDOWN_EDGE_TEMPERATURE: N/A SLOWDOWN_HOTSPOT_TEMPERATURE: 100 °C - SLOWDOWN_VRAM_TEMPERATURE: 95 °C + SLOWDOWN_VRAM_TEMPERATURE: 105 °C SHUTDOWN_EDGE_TEMPERATURE: N/A SHUTDOWN_HOTSPOT_TEMPERATURE: 110 °C - SHUTDOWN_VRAM_TEMPERATURE: 105 °C + SHUTDOWN_VRAM_TEMPERATURE: 115 °C DRIVER: NAME: amdgpu - VERSION: 6.7.0 + VERSION: 6.9.0-rc5+ BOARD: MODEL_NUMBER: N/A PRODUCT_SERIAL: N/A FRU_ID: N/A - PRODUCT_NAME: N/A - MANUFACTURER_NAME: N/A + PRODUCT_NAME: Aqua Vanjaram [Instinct MI300A] + MANUFACTURER_NAME: Advanced Micro Devices, Inc. [AMD/ATI] RAS: EEPROM_VERSION: 0x0 PARITY_SCHEMA: DISABLED @@ -794,10 +891,15 @@ GPU: 1 MP0: DISABLED MP1: DISABLED FUSE: DISABLED + MCA: DISABLED + VCN: DISABLED + JPEG: DISABLED + IH: DISABLED + MPIO: DISABLED PARTITION: COMPUTE_PARTITION: SPX MEMORY_PARTITION: NPS1 - DPM_POLICY: + SOC_PSTATE: NUM_SUPPORTED: 4 CURRENT_ID: 1 POLICIES: @@ -819,38 +921,39 @@ GPU: 1 POLICY_DESCRIPTION: plpd_default POLICY_ID: 2 POLICY_DESCRIPTION: plpd_optimized + PROCESS_ISOLATION: N/A NUMA: NODE: 1 AFFINITY: 1 VRAM: TYPE: HBM VENDOR: N/A - SIZE: 96432 MB - CACHE_INFO: - CACHE_0: - CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE - CACHE_SIZE: 32 KB - CACHE_LEVEL: 1 - MAX_NUM_CU_SHARED: 2 - NUM_CACHE_INSTANCE: 464 - CACHE_1: - CACHE_PROPERTIES: INST_CACHE, SIMD_CACHE - CACHE_SIZE: 64 KB - CACHE_LEVEL: 1 - MAX_NUM_CU_SHARED: 2 - NUM_CACHE_INSTANCE: 160 - CACHE_2: - CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE - CACHE_SIZE: 32768 KB - CACHE_LEVEL: 2 - MAX_NUM_CU_SHARED: 304 - NUM_CACHE_INSTANCE: 1 - CACHE_3: - CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE - CACHE_SIZE: 262144 KB - CACHE_LEVEL: 3 - MAX_NUM_CU_SHARED: 304 - NUM_CACHE_INSTANCE: 1 + SIZE: 64289 MB + CACHE_INFO: + CACHE_0: + CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE + CACHE_SIZE: 32 KB + CACHE_LEVEL: 1 + MAX_NUM_CU_SHARED: 2 + NUM_CACHE_INSTANCE: 348 + CACHE_1: + CACHE_PROPERTIES: INST_CACHE, SIMD_CACHE + CACHE_SIZE: 64 KB + CACHE_LEVEL: 1 + MAX_NUM_CU_SHARED: 2 + NUM_CACHE_INSTANCE: 120 + CACHE_2: + CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE + CACHE_SIZE: 4096 KB + CACHE_LEVEL: 2 + MAX_NUM_CU_SHARED: 228 + NUM_CACHE_INSTANCE: 1 + CACHE_3: + CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE + CACHE_SIZE: 262144 KB + CACHE_LEVEL: 3 + MAX_NUM_CU_SHARED: 228 + NUM_CACHE_INSTANCE: 1 GPU: 2 ASIC: @@ -859,8 +962,8 @@ GPU: 2 VENDOR_NAME: Advanced Micro Devices Inc. [AMD/ATI] SUBVENDOR_ID: 0x1002 DEVICE_ID: 0x74a0 - REV_ID: 0x0 - ASIC_SERIAL: 0xA9073066A98BA4A6 + REV_ID: 0x00 + ASIC_SERIAL: 0x367125D815189854 OAM_ID: 2 BUS: BDF: 0002:01:00.0 @@ -872,25 +975,26 @@ GPU: 2 NAME: N/A BUILD_DATE: N/A PART_NUMBER: N/A - VERSION: N/A + VERSION: N/A LIMIT: MAX_POWER: 550 W + MIN_POWER: 0 W SOCKET_POWER: 550 W SLOWDOWN_EDGE_TEMPERATURE: N/A SLOWDOWN_HOTSPOT_TEMPERATURE: 100 °C - SLOWDOWN_VRAM_TEMPERATURE: 95 °C + SLOWDOWN_VRAM_TEMPERATURE: 105 °C SHUTDOWN_EDGE_TEMPERATURE: N/A SHUTDOWN_HOTSPOT_TEMPERATURE: 110 °C - SHUTDOWN_VRAM_TEMPERATURE: 105 °C + SHUTDOWN_VRAM_TEMPERATURE: 115 °C DRIVER: NAME: amdgpu - VERSION: 6.7.0 + VERSION: 6.9.0-rc5+ BOARD: MODEL_NUMBER: N/A PRODUCT_SERIAL: N/A FRU_ID: N/A - PRODUCT_NAME: N/A - MANUFACTURER_NAME: N/A + PRODUCT_NAME: Aqua Vanjaram [Instinct MI300A] + MANUFACTURER_NAME: Advanced Micro Devices, Inc. [AMD/ATI] RAS: EEPROM_VERSION: 0x0 PARITY_SCHEMA: DISABLED @@ -912,10 +1016,15 @@ GPU: 2 MP0: DISABLED MP1: DISABLED FUSE: DISABLED + MCA: DISABLED + VCN: DISABLED + JPEG: DISABLED + IH: DISABLED + MPIO: DISABLED PARTITION: COMPUTE_PARTITION: SPX MEMORY_PARTITION: NPS1 - DPM_POLICY: + SOC_PSTATE: NUM_SUPPORTED: 4 CURRENT_ID: 1 POLICIES: @@ -937,38 +1046,39 @@ GPU: 2 POLICY_DESCRIPTION: plpd_default POLICY_ID: 2 POLICY_DESCRIPTION: plpd_optimized + PROCESS_ISOLATION: N/A NUMA: NODE: 2 AFFINITY: 2 VRAM: TYPE: HBM VENDOR: N/A - SIZE: 96432 MB - CACHE_INFO: - CACHE_0: - CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE - CACHE_SIZE: 32 KB - CACHE_LEVEL: 1 - MAX_NUM_CU_SHARED: 2 - NUM_CACHE_INSTANCE: 464 - CACHE_1: - CACHE_PROPERTIES: INST_CACHE, SIMD_CACHE - CACHE_SIZE: 64 KB - CACHE_LEVEL: 1 - MAX_NUM_CU_SHARED: 2 - NUM_CACHE_INSTANCE: 160 - CACHE_2: - CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE - CACHE_SIZE: 32768 KB - CACHE_LEVEL: 2 - MAX_NUM_CU_SHARED: 304 - NUM_CACHE_INSTANCE: 1 - CACHE_3: - CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE - CACHE_SIZE: 262144 KB - CACHE_LEVEL: 3 - MAX_NUM_CU_SHARED: 304 - NUM_CACHE_INSTANCE: 1 + SIZE: 64289 MB + CACHE_INFO: + CACHE_0: + CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE + CACHE_SIZE: 32 KB + CACHE_LEVEL: 1 + MAX_NUM_CU_SHARED: 2 + NUM_CACHE_INSTANCE: 348 + CACHE_1: + CACHE_PROPERTIES: INST_CACHE, SIMD_CACHE + CACHE_SIZE: 64 KB + CACHE_LEVEL: 1 + MAX_NUM_CU_SHARED: 2 + NUM_CACHE_INSTANCE: 120 + CACHE_2: + CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE + CACHE_SIZE: 4096 KB + CACHE_LEVEL: 2 + MAX_NUM_CU_SHARED: 228 + NUM_CACHE_INSTANCE: 1 + CACHE_3: + CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE + CACHE_SIZE: 262144 KB + CACHE_LEVEL: 3 + MAX_NUM_CU_SHARED: 228 + NUM_CACHE_INSTANCE: 1 GPU: 3 ASIC: @@ -977,8 +1087,8 @@ GPU: 3 VENDOR_NAME: Advanced Micro Devices Inc. [AMD/ATI] SUBVENDOR_ID: 0x1002 DEVICE_ID: 0x74a0 - REV_ID: 0x0 - ASIC_SERIAL: 0x53A0A1FF3830F499 + REV_ID: 0x00 + ASIC_SERIAL: 0xF4C44C2BE5E66537 OAM_ID: 3 BUS: BDF: 0003:01:00.0 @@ -990,25 +1100,26 @@ GPU: 3 NAME: N/A BUILD_DATE: N/A PART_NUMBER: N/A - VERSION: N/A + VERSION: N/A LIMIT: MAX_POWER: 550 W + MIN_POWER: 0 W SOCKET_POWER: 550 W SLOWDOWN_EDGE_TEMPERATURE: N/A SLOWDOWN_HOTSPOT_TEMPERATURE: 100 °C - SLOWDOWN_VRAM_TEMPERATURE: 95 °C + SLOWDOWN_VRAM_TEMPERATURE: 105 °C SHUTDOWN_EDGE_TEMPERATURE: N/A SHUTDOWN_HOTSPOT_TEMPERATURE: 110 °C - SHUTDOWN_VRAM_TEMPERATURE: 105 °C + SHUTDOWN_VRAM_TEMPERATURE: 115 °C DRIVER: NAME: amdgpu - VERSION: 6.7.0 + VERSION: 6.9.0-rc5+ BOARD: MODEL_NUMBER: N/A PRODUCT_SERIAL: N/A FRU_ID: N/A - PRODUCT_NAME: N/A - MANUFACTURER_NAME: N/A + PRODUCT_NAME: Aqua Vanjaram [Instinct MI300A] + MANUFACTURER_NAME: Advanced Micro Devices, Inc. [AMD/ATI] RAS: EEPROM_VERSION: 0x0 PARITY_SCHEMA: DISABLED @@ -1030,10 +1141,15 @@ GPU: 3 MP0: DISABLED MP1: DISABLED FUSE: DISABLED + MCA: DISABLED + VCN: DISABLED + JPEG: DISABLED + IH: DISABLED + MPIO: DISABLED PARTITION: COMPUTE_PARTITION: SPX MEMORY_PARTITION: NPS1 - DPM_POLICY: + SOC_PSTATE: NUM_SUPPORTED: 4 CURRENT_ID: 1 POLICIES: @@ -1055,38 +1171,39 @@ GPU: 3 POLICY_DESCRIPTION: plpd_default POLICY_ID: 2 POLICY_DESCRIPTION: plpd_optimized + PROCESS_ISOLATION: N/A NUMA: NODE: 3 AFFINITY: 3 VRAM: TYPE: HBM VENDOR: N/A - SIZE: 96432 MB - CACHE_INFO: - CACHE_0: - CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE - CACHE_SIZE: 32 KB - CACHE_LEVEL: 1 - MAX_NUM_CU_SHARED: 2 - NUM_CACHE_INSTANCE: 464 - CACHE_1: - CACHE_PROPERTIES: INST_CACHE, SIMD_CACHE - CACHE_SIZE: 64 KB - CACHE_LEVEL: 1 - MAX_NUM_CU_SHARED: 2 - NUM_CACHE_INSTANCE: 160 - CACHE_2: - CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE - CACHE_SIZE: 32768 KB - CACHE_LEVEL: 2 - MAX_NUM_CU_SHARED: 304 - NUM_CACHE_INSTANCE: 1 - CACHE_3: - CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE - CACHE_SIZE: 262144 KB - CACHE_LEVEL: 3 - MAX_NUM_CU_SHARED: 304 - NUM_CACHE_INSTANCE: 1 + SIZE: 64289 MB + CACHE_INFO: + CACHE_0: + CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE + CACHE_SIZE: 32 KB + CACHE_LEVEL: 1 + MAX_NUM_CU_SHARED: 2 + NUM_CACHE_INSTANCE: 348 + CACHE_1: + CACHE_PROPERTIES: INST_CACHE, SIMD_CACHE + CACHE_SIZE: 64 KB + CACHE_LEVEL: 1 + MAX_NUM_CU_SHARED: 2 + NUM_CACHE_INSTANCE: 120 + CACHE_2: + CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE + CACHE_SIZE: 4096 KB + CACHE_LEVEL: 2 + MAX_NUM_CU_SHARED: 228 + NUM_CACHE_INSTANCE: 1 + CACHE_3: + CACHE_PROPERTIES: DATA_CACHE, SIMD_CACHE + CACHE_SIZE: 262144 KB + CACHE_LEVEL: 3 + MAX_NUM_CU_SHARED: 228 + NUM_CACHE_INSTANCE: 1 ``` diff --git a/projects/amdsmi/amdsmi_cli/amdsmi_commands.py b/projects/amdsmi/amdsmi_cli/amdsmi_commands.py index 9ec0b5fa02..3aac8f4f6e 100644 --- a/projects/amdsmi/amdsmi_cli/amdsmi_commands.py +++ b/projects/amdsmi/amdsmi_cli/amdsmi_commands.py @@ -72,7 +72,7 @@ class AMDSMICommands(): self.cpu_handles = amdsmi_interface.amdsmi_get_cpusocket_handles() except amdsmi_exception.AmdSmiLibraryException as e: if e.err_code in (amdsmi_interface.amdsmi_wrapper.AMDSMI_STATUS_NOT_INIT, - amdsmi_interface.amdsmi_wrapper.AMDSMI_NO_DRV): + amdsmi_interface.amdsmi_wrapper.AMDSMI_STATUS_NO_DRV): logging.info('Unable to get CPU devices, amd_hsmp driver not loaded') else: raise e @@ -82,7 +82,7 @@ class AMDSMICommands(): self.core_handles = amdsmi_interface.amdsmi_get_cpucore_handles() except amdsmi_exception.AmdSmiLibraryException as e: if e.err_code in (amdsmi_interface.amdsmi_wrapper.AMDSMI_STATUS_NOT_INIT, - amdsmi_interface.amdsmi_wrapper.AMDSMI_NO_DRV): + amdsmi_interface.amdsmi_wrapper.AMDSMI_STATUS_NO_DRV): logging.info('Unable to get CORE devices, amd_hsmp driver not loaded') else: raise e @@ -245,7 +245,7 @@ class AMDSMICommands(): def static_gpu(self, args, multiple_devices=False, gpu=None, asic=None, bus=None, vbios=None, limit=None, driver=None, ras=None, board=None, numa=None, vram=None, cache=None, partition=None, dfc_ucode=None, fb_info=None, num_vf=None, - policy=None, xgmi_plpd=None, process_isolation=None): + soc_pstate=None, xgmi_plpd=None, process_isolation=None): """Get Static information for target gpu Args: @@ -268,7 +268,7 @@ class AMDSMICommands(): dfc_ucode (bool, optional): Value override for args.dfc_ucode. Defaults to None. fb_info (bool, optional): Value override for args.fb_info. Defaults to None. num_vf (bool, optional): Value override for args.num_vf. Defaults to None. - policy (bool, optional): Value override for args.policy. Defaults to None. + soc_pstate (bool, optional): Value override for args.soc_pstate. Defaults to None. xgmi_plpd (bool, optional): Value override for args.xgmi_plpd. Defaults to None. process_isolation (bool, optional): Value override for args.process_isolation. Defaults to None. Returns: @@ -291,10 +291,14 @@ class AMDSMICommands(): args.vram = vram if cache: args.cache = cache + if process_isolation: + args.process_isolation = process_isolation # Store args that are applicable to the current platform - current_platform_args = ["asic", "bus", "vbios", "driver", "vram", "cache", "board"] - current_platform_values = [args.asic, args.bus, args.vbios, args.driver, args.vram, args.cache, args.board] + current_platform_args = ["asic", "bus", "vbios", "driver", "vram", "cache", + "board", "process_isolation"] + current_platform_values = [args.asic, args.bus, args.vbios, args.driver, args.vram, args.cache, + args.board, args.process_isolation] if self.helpers.is_linux() and self.helpers.is_baremetal(): if ras: @@ -303,14 +307,12 @@ class AMDSMICommands(): args.partition = partition if limit: args.limit = limit - if policy: - args.policy = policy + if soc_pstate: + args.soc_pstate = soc_pstate if xgmi_plpd: args.xgmi_plpd = xgmi_plpd - if process_isolation: - args.process_isolation = process_isolation - current_platform_args += ["ras", "limit", "partition", "policy", "xgmi_plpd", "process_isolation"] - current_platform_values += [args.ras, args.limit, args.partition, args.policy, args.xgmi_plpd, args.process_isolation] + current_platform_args += ["ras", "limit", "partition", "soc_pstate", "xgmi_plpd"] + current_platform_values += [args.ras, args.limit, args.partition, args.soc_pstate, args.xgmi_plpd] if self.helpers.is_linux() and not self.helpers.is_virtual_os(): if numa: @@ -635,15 +637,15 @@ class AMDSMICommands(): static_dict['partition'] = {"compute_partition": compute_partition, "memory_partition": memory_partition} - if 'policy' in current_platform_args: - if args.policy: + if 'soc_pstate' in current_platform_args: + if args.soc_pstate: try: - policy_info = amdsmi_interface.amdsmi_get_dpm_policy(args.gpu) + policy_info = amdsmi_interface.amdsmi_get_soc_pstate(args.gpu) except amdsmi_exception.AmdSmiLibraryException as e: policy_info = "N/A" - logging.debug("Failed to get policy info for gpu %s | %s", gpu_id, e.get_error_info()) + logging.debug("Failed to get soc pstate policy info for gpu %s | %s", gpu_id, e.get_error_info()) - static_dict['dpm_policy'] = policy_info + static_dict['soc_pstate'] = policy_info if 'xgmi_plpd' in current_platform_args: if args.xgmi_plpd: try: @@ -691,12 +693,12 @@ class AMDSMICommands(): # Get vram type string vram_type_enum = vram_info['vram_type'] - if vram_type_enum == amdsmi_interface.amdsmi_wrapper.VRAM_TYPE_GDDR6: - vram_type = "GDDR6" + if vram_type_enum == amdsmi_interface.amdsmi_wrapper.AMDSMI_VRAM_TYPE__MAX: + vram_type = "GDDR7" else: vram_type = amdsmi_interface.amdsmi_wrapper.amdsmi_vram_type_t__enumvalues[vram_type_enum] # Remove amdsmi enum prefix - vram_type = vram_type.replace('VRAM_TYPE_', '').replace('_', '') + vram_type = vram_type.replace('AMDSMI_VRAM_TYPE_', '').replace('_', '') # Get vram vendor string vram_vendor_enum = vram_info['vram_vendor'] @@ -712,13 +714,13 @@ class AMDSMICommands(): vram_info_dict['vendor'] = vram_vendor # Populate vram size with unit - vram_info_dict['size'] = vram_info['vram_size_mb'] + vram_info_dict['size'] = vram_info['vram_size'] vram_size_unit = "MB" if self.logger.is_human_readable_format(): - vram_info_dict['size'] = f"{vram_info['vram_size_mb']} {vram_size_unit}" + vram_info_dict['size'] = f"{vram_info['vram_size']} {vram_size_unit}" if self.logger.is_json_format(): - vram_info_dict['size'] = {"value" : vram_info['vram_size_mb'], + vram_info_dict['size'] = {"value" : vram_info['vram_size'], "unit" : vram_size_unit} except amdsmi_exception.AmdSmiLibraryException as e: @@ -799,7 +801,7 @@ class AMDSMICommands(): bus=None, vbios=None, limit=None, driver=None, ras=None, board=None, numa=None, vram=None, cache=None, partition=None, dfc_ucode=None, fb_info=None, num_vf=None, cpu=None, - interface_ver=None, policy=None, xgmi_plpd = None, process_isolation=None): + interface_ver=None, soc_pstate=None, xgmi_plpd = None, process_isolation=None): """Get Static information for target gpu and cpu Args: @@ -822,7 +824,7 @@ class AMDSMICommands(): num_vf (bool, optional): Value override for args.num_vf. Defaults to None. cpu (cpu_handle, optional): cpu_handle for target device. Defaults to None. interface_ver (bool, optional): Value override for args.interface_ver. Defaults to None - policy (bool, optional): Value override for args.policy. Defaults to None. + soc_pstate (bool, optional): Value override for args.soc_pstate. Defaults to None. xgmi_plpd (bool, optional): Value override for args.xgmi_plpd. Defaults to None. process_isolation (bool, optional): Value override for args.process_isolation. Defaults to None. Raises: @@ -850,7 +852,7 @@ class AMDSMICommands(): gpu_args_enabled = False gpu_attributes = ["asic", "bus", "vbios", "limit", "driver", "ras", "board", "numa", "vram", "cache", "partition", - "dfc_ucode", "fb_info", "num_vf", "policy", "xgmi_plpd", + "dfc_ucode", "fb_info", "num_vf", "soc_pstate", "xgmi_plpd", "process_isolation"] for attr in gpu_attributes: if hasattr(args, attr): @@ -881,7 +883,7 @@ class AMDSMICommands(): self.static_gpu(args, multiple_devices, gpu, asic, bus, vbios, limit, driver, ras, board, numa, vram, cache, partition, - dfc_ucode, fb_info, num_vf, policy, + dfc_ucode, fb_info, num_vf, soc_pstate, process_isolation) elif self.helpers.is_amd_hsmp_initialized(): # Only CPU is initialized if args.cpu == None: @@ -896,7 +898,7 @@ class AMDSMICommands(): self.static_gpu(args, multiple_devices, gpu, asic, bus, vbios, limit, driver, ras, board, numa, vram, cache, partition, - dfc_ucode, fb_info, num_vf, policy, xgmi_plpd, + dfc_ucode, fb_info, num_vf, soc_pstate, xgmi_plpd, process_isolation) @@ -941,7 +943,7 @@ class AMDSMICommands(): for fw_index, fw_entry in enumerate(fw_info['fw_list']): # Change fw_name to fw_id - fw_entry['fw_id'] = fw_entry.pop('fw_name').name.replace("FW_ID_", "") + fw_entry['fw_id'] = fw_entry.pop('fw_name').name.replace("AMDSMI_FW_ID_", "") fw_entry['fw_version'] = fw_entry.pop('fw_version') # popping to ensure order # Add custom human readable formatting @@ -3384,8 +3386,8 @@ class AMDSMICommands(): def set_gpu(self, args, multiple_devices=False, gpu=None, fan=None, perf_level=None, profile=None, perf_determinism=None, compute_partition=None, - memory_partition=None, power_cap=None, dpm_policy=None, xgmi_plpd = None, - process_isolation=None, clear_sram_data = None): + memory_partition=None, power_cap=None, soc_pstate=None, xgmi_plpd = None, + process_isolation=None): """Issue reset commands to target gpu(s) Args: @@ -3399,10 +3401,9 @@ class AMDSMICommands(): compute_partition (amdsmi_interface.AmdSmiComputePartitionType, optional): Value override for args.compute_partition. Defaults to None. memory_partition (amdsmi_interface.AmdSmiMemoryPartitionType, optional): Value override for args.memory_partition. Defaults to None. power_cap (int, optional): Value override for args.power_cap. Defaults to None. - dpm_policy (int, optional): Value override for args.dpm_policy. Defaults to None. + soc_pstate (int, optional): Value override for args.soc_pstate. Defaults to None. xgmi_plpd (int, optional): Value override for args.xgmi_plpd. Defaults to None. process_isolation (int, optional): Value override for args.process_isolation. Defaults to None. - clear_sram_data (int, optional): Value override for args.clear_sram_data. Defaults to None. Raises: ValueError: Value error if no gpu value is provided IndexError: Index error if gpu list is empty @@ -3427,14 +3428,13 @@ class AMDSMICommands(): args.memory_partition = memory_partition if power_cap: args.power_cap = power_cap - if dpm_policy: - args.dpm_policy = dpm_policy + if soc_pstate: + args.soc_pstate = soc_pstate if xgmi_plpd: args.xgmi_plpd = xgmi_plpd if process_isolation: args.process_isolation = process_isolation - if clear_sram_data: - args.clear_sram_data = clear_sram_data + # Handle No GPU passed if args.gpu == None: raise ValueError('No GPU provided, specific GPU target(s) are needed') @@ -3454,10 +3454,9 @@ class AMDSMICommands(): args.memory_partition, args.perf_determinism is not None, args.power_cap is not None, - args.dpm_policy is not None, + args.soc_pstate is not None, args.xgmi_plpd is not None, - args.process_isolation is not None, - args.clear_sram_data]): + args.process_isolation is not None]): command = " ".join(sys.argv[1:]) raise AmdSmiRequiredCommandException(command, self.logger.format) @@ -3551,14 +3550,14 @@ class AMDSMICommands(): if min_power_cap == 0: min_power_cap = 1 self.logger.store_output(args.gpu, 'powercap', f"Power cap must be between {min_power_cap} and {max_power_cap}") - if isinstance(args.dpm_policy, int): + if isinstance(args.soc_pstate, int): try: - amdsmi_interface.amdsmi_set_dpm_policy(args.gpu, args.dpm_policy) + amdsmi_interface.amdsmi_set_soc_pstate(args.gpu, args.soc_pstate) except amdsmi_exception.AmdSmiLibraryException as e: if e.get_error_code() == amdsmi_interface.amdsmi_wrapper.AMDSMI_STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e - raise ValueError(f"Unable to set dpm policy to {args.dpm_policy} on {gpu_string}") from e - self.logger.store_output(args.gpu, 'dpmpolicy', f"Successfully set dpm policy to id {args.dpm_policy}") + raise ValueError(f"Unable to set dpm soc pstate policy to {args.soc_pstate} on {gpu_string}") from e + self.logger.store_output(args.gpu, 'socpstate', f"Successfully soc pstate dpm policy to id {args.soc_pstate}") if isinstance(args.xgmi_plpd, int): try: amdsmi_interface.amdsmi_set_xgmi_plpd(args.gpu, args.xgmi_plpd) @@ -3566,7 +3565,7 @@ class AMDSMICommands(): if e.get_error_code() == amdsmi_interface.amdsmi_wrapper.AMDSMI_STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set XGMI policy to {args.xgmi_plpd} on {gpu_string}") from e - self.logger.store_output(args.gpu, 'xgmiplpd', f"Successfully set per-link power down policy to id {args.dpm_policy}") + self.logger.store_output(args.gpu, 'xgmiplpd', f"Successfully set per-link power down policy to id {args.xgmi_plpd}") if isinstance(args.process_isolation, int): status_string = "Enabled" if args.process_isolation else "Disabled" result = f"Requested process isolation to {status_string}" # This should not print out @@ -3583,16 +3582,6 @@ class AMDSMICommands(): raise ValueError(f"Unable to set process isolation to {status_string} on {gpu_string}") from e self.logger.store_output(args.gpu, 'process_isolation', result) - if args.clear_sram_data: - try: - # Only 1 can be used for now. - amdsmi_interface.amdsmi_set_gpu_clear_sram_data(args.gpu, 1) - result = 'Successfully clear GPU SRAM data' - except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_interface.amdsmi_wrapper.AMDSMI_STATUS_NO_PERM: - raise PermissionError('Command requires elevation') from e - raise ValueError(f"Unable to clear SRAM data on GPU {gpu_id}") from e - self.logger.store_output(args.gpu, 'clear_sram_data', result) if multiple_devices: self.logger.store_multiple_device_output() @@ -3607,8 +3596,8 @@ class AMDSMICommands(): cpu=None, cpu_pwr_limit=None, cpu_xgmi_link_width=None, cpu_lclk_dpm_level=None, cpu_pwr_eff_mode=None, cpu_gmi3_link_width=None, cpu_pcie_link_rate=None, cpu_df_pstate_range=None, cpu_enable_apb=None, cpu_disable_apb=None, - soc_boost_limit=None, core=None, core_boost_limit=None, dpm_policy=None, xgmi_plpd=None, - process_isolation=None, clear_sram_data=None): + soc_boost_limit=None, core=None, core_boost_limit=None, soc_pstate=None, xgmi_plpd=None, + process_isolation=None): """Issue reset commands to target gpu(s) Args: @@ -3637,10 +3626,9 @@ class AMDSMICommands(): core (device_handle, optional): device_handle for target core. Defaults to None. core_boost_limit (int, optional): Value override for args.core_boost_limit. Defaults to None - dpm_policy (int, optional): Value override for args.dpm_policy. Defaults to None. + soc_pstate (int, optional): Value override for args.soc_pstate. Defaults to None. xgmi_plpd (int, optional): Value override for args.xgmi_plpd. Defaults to None. process_isolation (int, optional): Value override for args.process_isolation. Defaults to None. - clear_sram_data (int, optional): Value override for args.clear_sram_data. Defaults to None. Raises: ValueError: Value error if no gpu value is provided IndexError: Index error if gpu list is empty @@ -3660,8 +3648,8 @@ class AMDSMICommands(): # Check if a GPU argument has been set gpu_args_enabled = False gpu_attributes = ["fan", "perf_level", "profile", "perf_determinism", "compute_partition", - "memory_partition", "power_cap", "dpm_policy", "xgmi_plpd", "process_isolation", - "clear_sram_data"] + "memory_partition", "power_cap", "soc_pstate", "xgmi_plpd", "process_isolation", + ] for attr in gpu_attributes: if hasattr(args, attr): if getattr(args, attr) is not None: @@ -3716,8 +3704,8 @@ class AMDSMICommands(): self.logger.clear_multiple_devices_ouput() self.set_gpu(args, multiple_devices, gpu, fan, perf_level, profile, perf_determinism, compute_partition, - memory_partition, power_cap, dpm_policy, xgmi_plpd, - process_isolation, clear_sram_data) + memory_partition, power_cap, soc_pstate, xgmi_plpd, + process_isolation) elif self.helpers.is_amd_hsmp_initialized(): # Only CPU is initialized if args.cpu == None and args.core == None: raise ValueError('No CPU or CORE provided, specific target(s) are needed') @@ -3736,13 +3724,13 @@ class AMDSMICommands(): self.logger.clear_multiple_devices_ouput() self.set_gpu(args, multiple_devices, gpu, fan, perf_level, profile, perf_determinism, compute_partition, - memory_partition, power_cap, dpm_policy, xgmi_plpd, - process_isolation, clear_sram_data) + memory_partition, power_cap, soc_pstate, xgmi_plpd, + process_isolation) def reset(self, args, multiple_devices=False, gpu=None, gpureset=None, clocks=None, fans=None, profile=None, xgmierr=None, perf_determinism=None, - compute_partition=None, memory_partition=None, power_cap=None): + compute_partition=None, memory_partition=None, power_cap=None, clear_sram_data=None): """Issue reset commands to target gpu(s) Args: @@ -3757,7 +3745,9 @@ class AMDSMICommands(): perf_determinism (bool, optional): Value override for args.perf_determinism. Defaults to None. compute_partition (bool, optional): Value override for args.compute_partition. Defaults to None. memory_partition (bool, optional): Value override for args.memory_partition. Defaults to None. - power_cap (int, optional): Value override for args.power_cap. Defaults to None. + power_cap (bool, optional): Value override for args.power_cap. Defaults to None. + clear_sram_data (bool, optional): Value override for args.clear_sram_data. Defaults to None. + Raises: ValueError: Value error if no gpu value is provided IndexError: Index error if gpu list is empty @@ -3786,6 +3776,8 @@ class AMDSMICommands(): args.memory_partition = memory_partition if power_cap: args.power_cap = power_cap + if clear_sram_data: + args.clear_sram_data = clear_sram_data # Handle No GPU passed if args.gpu == None: @@ -3804,7 +3796,7 @@ class AMDSMICommands(): # Error if no subcommand args are passed if not any([args.gpureset, args.clocks, args.fans, args.profile, args.xgmierr, \ args.perf_determinism, args.compute_partition, args.memory_partition, \ - args.power_cap]): + args.power_cap, args.clear_sram_data]): command = " ".join(sys.argv[1:]) raise AmdSmiRequiredCommandException(command, self.logger.format) @@ -3955,6 +3947,16 @@ class AMDSMICommands(): raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to reset power cap to {default_power_cap_in_w} on GPU {gpu_id}") from e self.logger.store_output(args.gpu, 'powercap', f"Successfully set power cap to {default_power_cap_in_w}") + if args.clear_sram_data: + try: + # Only 1 can be used for now. + amdsmi_interface.amdsmi_set_gpu_clear_sram_data(args.gpu, 1) + result = 'Successfully clear GPU SRAM data' + except amdsmi_exception.AmdSmiLibraryException as e: + if e.get_error_code() == amdsmi_interface.amdsmi_wrapper.AMDSMI_STATUS_NO_PERM: + raise PermissionError('Command requires elevation') from e + raise ValueError(f"Unable to clear SRAM data on GPU {gpu_id}") from e + self.logger.store_output(args.gpu, 'clear_sram_data', result) if multiple_devices: self.logger.store_multiple_device_output() diff --git a/projects/amdsmi/amdsmi_cli/amdsmi_helpers.py b/projects/amdsmi/amdsmi_cli/amdsmi_helpers.py index fc19194727..f1bc229e21 100644 --- a/projects/amdsmi/amdsmi_cli/amdsmi_helpers.py +++ b/projects/amdsmi/amdsmi_cli/amdsmi_helpers.py @@ -49,6 +49,7 @@ class AMDSMIHelpers(): self._is_hypervisor = False self._is_virtual_os = False self._is_baremetal = False + self._is_passthrough = False self._is_linux = False self._is_windows = False @@ -63,6 +64,14 @@ class AMDSMIHelpers(): else: self._is_virtual_os = True + # Check for passthrough system filtering by device id + output = run(["lspci", "-nn"], stdout=PIPE, stderr=STDOUT, encoding="UTF-8").stdout + passthrough_device_ids = ["7460", "73c8", "74a0", "74a1", "74a2"] + if any(device_id in output for device_id in passthrough_device_ids): + self._is_baremetal = True + self._is_virtual_os = False + self._is_passthrough = True + def os_info(self, string_format=True): """Return operating_system and type information ex. (Linux, Baremetal) @@ -89,6 +98,10 @@ class AMDSMIHelpers(): else: operating_system_type = "Unknown" + # Passthrough Override + if self._is_passthrough: + operating_system_type = "Guest (Passthrough)" + if string_format: return f"{operating_system} {operating_system_type}" else: diff --git a/projects/amdsmi/amdsmi_cli/amdsmi_parser.py b/projects/amdsmi/amdsmi_cli/amdsmi_parser.py index 4b11188b03..b29a5bbb15 100644 --- a/projects/amdsmi/amdsmi_cli/amdsmi_parser.py +++ b/projects/amdsmi/amdsmi_cli/amdsmi_parser.py @@ -543,7 +543,7 @@ class AMDSMIParser(argparse.ArgumentParser): vram_help = "All vram information" cache_help = "All cache information" board_help = "All board information" - dpm_policy_help = "The available DPM policy" + soc_pstate_help = "The available soc pstate policy" xgmi_plpd_help = "The available XGMI per-link power down policy" process_isolation_help = "The process isolation status" @@ -579,15 +579,15 @@ class AMDSMIParser(argparse.ArgumentParser): static_parser.add_argument('-v', '--vram', action='store_true', required=False, help=vram_help) static_parser.add_argument('-c', '--cache', action='store_true', required=False, help=cache_help) static_parser.add_argument('-B', '--board', action='store_true', required=False, help=board_help) + static_parser.add_argument('-R', '--process-isolation', action='store_true', required=False, help=process_isolation_help) # Options to display on Hypervisors and Baremetal if self.helpers.is_hypervisor() or self.helpers.is_baremetal(): static_parser.add_argument('-r', '--ras', action='store_true', required=False, help=ras_help) static_parser.add_argument('-p', '--partition', action='store_true', required=False, help=partition_help) static_parser.add_argument('-l', '--limit', action='store_true', required=False, help=limit_help) - static_parser.add_argument('-P', '--policy', action='store_true', required=False, help=dpm_policy_help) + static_parser.add_argument('-P', '--soc-pstate', action='store_true', required=False, help=soc_pstate_help) static_parser.add_argument('-x', '--xgmi-plpd', action='store_true', required=False, help=xgmi_plpd_help) - static_parser.add_argument('-R', '--process-isolation', action='store_true', required=False, help=process_isolation_help) if self.helpers.is_linux() and not self.helpers.is_virtual_os(): static_parser.add_argument('-u', '--numa', action='store_true', required=False, help=numa_help) @@ -949,8 +949,8 @@ class AMDSMIParser(argparse.ArgumentParser): def _add_set_value_parser(self, subparsers, func): - if not(self.helpers.is_baremetal() and self.helpers.is_linux()): - # This subparser is only applicable to Baremetal Linux + if not self.helpers.is_linux(): + # This subparser is only applicable to Linux return # Subparser help text @@ -969,7 +969,7 @@ class AMDSMIParser(argparse.ArgumentParser): set_compute_partition_help = f"Set one of the following the compute partition modes:\n\t{compute_partition_choices_str}" set_memory_partition_help = f"Set one of the following the memory partition modes:\n\t{memory_partition_choices_str}" set_power_cap_help = "Set power capacity limit" - set_dpm_policy_help = "Set the GPU DPM policy using policy id\n" + set_soc_pstate_help = "Set the GPU soc pstate policy using policy id\n" set_xgmi_plpd_help = "Set the GPU XGMI per-link power down policy using policy id\n" set_process_isolation_help = "Enable or disable the GPU process isolation: 0 for disable and 1 for enable.\n" @@ -985,7 +985,6 @@ class AMDSMIParser(argparse.ArgumentParser): set_cpu_enable_apb_help = "Enables the DF p-state performance boost algorithm" set_cpu_disable_apb_help = "Disables the DF p-state performance boost algorithm. Input parameter is DFPstate (0-3)" set_soc_boost_limit_help = "Sets the boost limit for the given socket. Input parameter is socket BOOST_LIMIT value" - run_gpu_clear_sram_data_help = f"Clear the GPU SRAM data\n" # Help text for CPU Core set options set_core_boost_limit_help = "Sets the boost limit for the given core. Input parameter is core BOOST_LIMIT value" @@ -1000,44 +999,46 @@ class AMDSMIParser(argparse.ArgumentParser): self._add_device_arguments(set_value_parser, required=True) if self.helpers.is_amdgpu_initialized(): - # Optional GPU Args - set_value_parser.add_argument('-f', '--fan', action=self._validate_fan_speed(), required=False, help=set_fan_help, metavar='%') - set_value_parser.add_argument('-l', '--perf-level', action='store', choices=self.helpers.get_perf_levels()[0], type=str.upper, required=False, help=set_perf_level_help, metavar='LEVEL') - set_value_parser.add_argument('-P', '--profile', action='store', required=False, help=set_profile_help, metavar='SETPROFILE') - set_value_parser.add_argument('-d', '--perf-determinism', action='store', type=self._not_negative_int, required=False, help=set_perf_det_help, metavar='SCLKMAX') - set_value_parser.add_argument('-C', '--compute-partition', action='store', choices=self.helpers.get_compute_partition_types(), type=str.upper, required=False, help=set_compute_partition_help, metavar='PARTITION') - set_value_parser.add_argument('-M', '--memory-partition', action='store', choices=self.helpers.get_memory_partition_types(), type=str.upper, required=False, help=set_memory_partition_help, metavar='PARTITION') - set_value_parser.add_argument('-o', '--power-cap', action='store', type=self._positive_int, required=False, help=set_power_cap_help, metavar='WATTS') - set_value_parser.add_argument('-p', '--dpm-policy', action='store', required=False, type=self._not_negative_int, help=set_dpm_policy_help, metavar='POLICY_ID') - set_value_parser.add_argument('-x', '--xgmi-plpd', action='store', required=False, type=self._not_negative_int, help=set_xgmi_plpd_help, metavar='POLICY_ID') + if self.helpers.is_baremetal(): + # Optional GPU Args + set_value_parser.add_argument('-f', '--fan', action=self._validate_fan_speed(), required=False, help=set_fan_help, metavar='%') + set_value_parser.add_argument('-l', '--perf-level', action='store', choices=self.helpers.get_perf_levels()[0], type=str.upper, required=False, help=set_perf_level_help, metavar='LEVEL') + set_value_parser.add_argument('-P', '--profile', action='store', required=False, help=set_profile_help, metavar='SETPROFILE') + set_value_parser.add_argument('-d', '--perf-determinism', action='store', type=self._not_negative_int, required=False, help=set_perf_det_help, metavar='SCLKMAX') + set_value_parser.add_argument('-C', '--compute-partition', action='store', choices=self.helpers.get_compute_partition_types(), type=str.upper, required=False, help=set_compute_partition_help, metavar='PARTITION') + set_value_parser.add_argument('-M', '--memory-partition', action='store', choices=self.helpers.get_memory_partition_types(), type=str.upper, required=False, help=set_memory_partition_help, metavar='PARTITION') + set_value_parser.add_argument('-o', '--power-cap', action='store', type=self._positive_int, required=False, help=set_power_cap_help, metavar='WATTS') + set_value_parser.add_argument('-p', '--soc-pstate', action='store', required=False, type=self._not_negative_int, help=set_soc_pstate_help, metavar='POLICY_ID') + set_value_parser.add_argument('-x', '--xgmi-plpd', action='store', required=False, type=self._not_negative_int, help=set_xgmi_plpd_help, metavar='POLICY_ID') + set_value_parser.add_argument('-R', '--process-isolation', action='store', choices=[0,1], type=self._not_negative_int, required=False, help=set_process_isolation_help, metavar='STATUS') - set_value_parser.add_argument('-c', '--clear-sram-data', action='store_true', required=False, help=run_gpu_clear_sram_data_help) if self.helpers.is_amd_hsmp_initialized(): - # Optional CPU Args - cpu_group = set_value_parser.add_argument_group("CPU Arguments") - cpu_group.add_argument('--cpu-pwr-limit', action='append', required=False, type=self._validate_positive, nargs=1, metavar=("PWR_LIMIT"), help=set_cpu_pwr_limit_help) - cpu_group.add_argument('--cpu-xgmi-link-width', action='append', required=False, type=self._validate_positive, nargs=2, metavar=("MIN_WIDTH", "MAX_WIDTH"), help=set_cpu_xgmi_link_width_help) - cpu_group.add_argument('--cpu-lclk-dpm-level', action='append', required=False, type=self._validate_positive, nargs=3, metavar=("NBIOID", "MIN_DPM", "MAX_DPM"), help=set_cpu_lclk_dpm_level_help) - cpu_group.add_argument('--cpu-pwr-eff-mode', action='append', required=False, type=self._validate_positive, nargs=1, metavar=("MODE"), help=set_cpu_pwr_eff_mode_help) - cpu_group.add_argument('--cpu-gmi3-link-width', action='append', required=False, type=self._validate_positive, nargs=2, metavar=("MIN_LW", "MAX_LW"), help=set_cpu_gmi3_link_width_help) - cpu_group.add_argument('--cpu-pcie-link-rate', action='append', required=False, type=self._validate_positive, nargs=1, metavar=("LINK_RATE"), help=set_cpu_pcie_link_rate_help) - cpu_group.add_argument('--cpu-df-pstate-range', action='append', required=False, type=self._validate_positive, nargs=2, metavar=("MAX_PSTATE", "MIN_PSTATE"), help=set_cpu_df_pstate_range_help) - cpu_group.add_argument('--cpu-enable-apb', action='store_true', required=False, help=set_cpu_enable_apb_help) - cpu_group.add_argument('--cpu-disable-apb', action='append', required=False, type=self._validate_positive, nargs=1, metavar=("DF_PSTATE"), help=set_cpu_disable_apb_help) - cpu_group.add_argument('--soc-boost-limit', action='append', required=False, type=self._validate_positive, nargs=1, metavar=("BOOST_LIMIT"), help=set_soc_boost_limit_help) + if self.helpers.is_baremetal(): + # Optional CPU Args + cpu_group = set_value_parser.add_argument_group("CPU Arguments") + cpu_group.add_argument('--cpu-pwr-limit', action='append', required=False, type=self._validate_positive, nargs=1, metavar=("PWR_LIMIT"), help=set_cpu_pwr_limit_help) + cpu_group.add_argument('--cpu-xgmi-link-width', action='append', required=False, type=self._validate_positive, nargs=2, metavar=("MIN_WIDTH", "MAX_WIDTH"), help=set_cpu_xgmi_link_width_help) + cpu_group.add_argument('--cpu-lclk-dpm-level', action='append', required=False, type=self._validate_positive, nargs=3, metavar=("NBIOID", "MIN_DPM", "MAX_DPM"), help=set_cpu_lclk_dpm_level_help) + cpu_group.add_argument('--cpu-pwr-eff-mode', action='append', required=False, type=self._validate_positive, nargs=1, metavar=("MODE"), help=set_cpu_pwr_eff_mode_help) + cpu_group.add_argument('--cpu-gmi3-link-width', action='append', required=False, type=self._validate_positive, nargs=2, metavar=("MIN_LW", "MAX_LW"), help=set_cpu_gmi3_link_width_help) + cpu_group.add_argument('--cpu-pcie-link-rate', action='append', required=False, type=self._validate_positive, nargs=1, metavar=("LINK_RATE"), help=set_cpu_pcie_link_rate_help) + cpu_group.add_argument('--cpu-df-pstate-range', action='append', required=False, type=self._validate_positive, nargs=2, metavar=("MAX_PSTATE", "MIN_PSTATE"), help=set_cpu_df_pstate_range_help) + cpu_group.add_argument('--cpu-enable-apb', action='store_true', required=False, help=set_cpu_enable_apb_help) + cpu_group.add_argument('--cpu-disable-apb', action='append', required=False, type=self._validate_positive, nargs=1, metavar=("DF_PSTATE"), help=set_cpu_disable_apb_help) + cpu_group.add_argument('--soc-boost-limit', action='append', required=False, type=self._validate_positive, nargs=1, metavar=("BOOST_LIMIT"), help=set_soc_boost_limit_help) - # Optional CPU Core Args - core_group = set_value_parser.add_argument_group("CPU Core Arguments") - core_group.add_argument('--core-boost-limit', action='append', required=False, type=self._validate_positive, nargs=1, metavar=("BOOST_LIMIT"), help=set_core_boost_limit_help) + # Optional CPU Core Args + core_group = set_value_parser.add_argument_group("CPU Core Arguments") + core_group.add_argument('--core-boost-limit', action='append', required=False, type=self._validate_positive, nargs=1, metavar=("BOOST_LIMIT"), help=set_core_boost_limit_help) # Add command modifiers to the bottom self._add_command_modifiers(set_value_parser) def _add_reset_parser(self, subparsers, func): - if not(self.helpers.is_baremetal() and self.helpers.is_linux()): - # This subparser is only applicable to Baremetal Linux + if not self.helpers.is_linux(): + # This subparser is only applicable to Linux return if not self.helpers.is_amdgpu_initialized(): @@ -1060,6 +1061,7 @@ class AMDSMIParser(argparse.ArgumentParser): reset_compute_help = "Reset compute partitions on the specified GPU" reset_memory_help = "Reset memory partitions on the specified GPU" reset_power_cap_help = "Reset power capacity limit to max capable" + reset_gpu_clear_sram_data_help = "Clear the GPU SRAM data\n" # Create reset subparser reset_parser = subparsers.add_parser('reset', help=reset_help, description=reset_subcommand_help) @@ -1072,20 +1074,24 @@ class AMDSMIParser(argparse.ArgumentParser): # Device args are required as safeguard from the user applying the operation to all gpus unintentionally self._add_device_arguments(reset_parser, required=True) - # Add reset arguments - reset_parser.add_argument('-G', '--gpureset', action='store_true', required=False, help=gpureset_help) - reset_parser.add_argument('-c', '--clocks', action='store_true', required=False, help=reset_clocks_help) - reset_parser.add_argument('-f', '--fans', action='store_true', required=False, help=reset_fans_help) - reset_parser.add_argument('-p', '--profile', action='store_true', required=False, help=reset_profile_help) - reset_parser.add_argument('-x', '--xgmierr', action='store_true', required=False, help=reset_xgmierr_help) - reset_parser.add_argument('-d', '--perf-determinism', action='store_true', required=False, help=reset_perf_det_help) - reset_parser.add_argument('-C', '--compute-partition', action='store_true', required=False, help=reset_compute_help) - reset_parser.add_argument('-M', '--memory-partition', action='store_true', required=False, help=reset_memory_help) - reset_parser.add_argument('-o', '--power-cap', action='store_true', required=False, help=reset_power_cap_help) + if self.helpers.is_baremetal(): + # Add Baremetal reset arguments + reset_parser.add_argument('-G', '--gpureset', action='store_true', required=False, help=gpureset_help) + reset_parser.add_argument('-c', '--clocks', action='store_true', required=False, help=reset_clocks_help) + reset_parser.add_argument('-f', '--fans', action='store_true', required=False, help=reset_fans_help) + reset_parser.add_argument('-p', '--profile', action='store_true', required=False, help=reset_profile_help) + reset_parser.add_argument('-x', '--xgmierr', action='store_true', required=False, help=reset_xgmierr_help) + reset_parser.add_argument('-d', '--perf-determinism', action='store_true', required=False, help=reset_perf_det_help) + reset_parser.add_argument('-C', '--compute-partition', action='store_true', required=False, help=reset_compute_help) + reset_parser.add_argument('-M', '--memory-partition', action='store_true', required=False, help=reset_memory_help) + reset_parser.add_argument('-o', '--power-cap', action='store_true', required=False, help=reset_power_cap_help) + + # Add Baremetal and Virtual OS reset arguments + reset_parser.add_argument('-l', '--clear-sram-data', action='store_true', required=False, help=reset_gpu_clear_sram_data_help) def _add_monitor_parser(self, subparsers, func): - if not(self.helpers.is_linux()): + if not self.helpers.is_linux(): # This subparser is only applicable to Linux return diff --git a/projects/amdsmi/docs/doxygen/Doxyfile b/projects/amdsmi/docs/doxygen/Doxyfile index 193f79cc41..86489e990e 100644 --- a/projects/amdsmi/docs/doxygen/Doxyfile +++ b/projects/amdsmi/docs/doxygen/Doxyfile @@ -48,7 +48,7 @@ PROJECT_NAME = AMD SMI # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = "24.5.3.0" +PROJECT_NUMBER = "24.6.0.0" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/projects/amdsmi/docs/how-to/using-AMD-SMI-CLI-tool.md b/projects/amdsmi/docs/how-to/using-AMD-SMI-CLI-tool.md index 1455ec380d..d1cc76824e 100644 --- a/projects/amdsmi/docs/how-to/using-AMD-SMI-CLI-tool.md +++ b/projects/amdsmi/docs/how-to/using-AMD-SMI-CLI-tool.md @@ -6,7 +6,7 @@ AMD-SMI reports the version and current platform detected when running the comma ~$ amd-smi usage: amd-smi [-h] ... -AMD System Management Interface | Version: 24.5.2.0 | ROCm version: 6.1.2 | Platform: Linux Baremetal +AMD System Management Interface | Version: 24.6.0.0 | ROCm version: 6.2.0 | Platform: Linux Baremetal options: -h, --help show this help message and exit @@ -607,7 +607,7 @@ GPU: 0 PARTITION: COMPUTE_PARTITION: SPX MEMORY_PARTITION: NPS1 - DPM_POLICY: + SOC_PSTATE: NUM_SUPPORTED: 4 CURRENT_ID: 1 POLICIES: @@ -725,7 +725,7 @@ GPU: 1 PARTITION: COMPUTE_PARTITION: SPX MEMORY_PARTITION: NPS1 - DPM_POLICY: + SOC_PSTATE: NUM_SUPPORTED: 4 CURRENT_ID: 1 POLICIES: @@ -843,7 +843,7 @@ GPU: 2 PARTITION: COMPUTE_PARTITION: SPX MEMORY_PARTITION: NPS1 - DPM_POLICY: + SOC_PSTATE: NUM_SUPPORTED: 4 CURRENT_ID: 1 POLICIES: @@ -961,7 +961,7 @@ GPU: 3 PARTITION: COMPUTE_PARTITION: SPX MEMORY_PARTITION: NPS1 - DPM_POLICY: + SOC_PSTATE: NUM_SUPPORTED: 4 CURRENT_ID: 1 POLICIES: diff --git a/projects/amdsmi/docs/how-to/using-amdsmi-for-C++.rst b/projects/amdsmi/docs/how-to/using-amdsmi-for-C++.rst index 9428bc99cb..1b5f736f3b 100644 --- a/projects/amdsmi/docs/how-to/using-amdsmi-for-C++.rst +++ b/projects/amdsmi/docs/how-to/using-amdsmi-for-C++.rst @@ -86,7 +86,7 @@ When AMD SMI is no longer used, `amdsmi_shut_down()` should be called. This prov // Get temperature int64_t val_i64 = 0; - ret = amdsmi_get_temp_metric(processor_handles[j], TEMPERATURE_TYPE_EDGE, + ret = amdsmi_get_temp_metric(processor_handles[j], AMDSMI_TEMPERATURE_TYPE_EDGE, AMDSMI_TEMP_CURRENT, &val_i64); std::cout << "\t\tTemperature: " << val_i64 << "C" << std::endl; } diff --git a/projects/amdsmi/docs/how-to/using-amdsmi-for-python.md b/projects/amdsmi/docs/how-to/using-amdsmi-for-python.md index 9ebf63220a..d6c0172595 100644 --- a/projects/amdsmi/docs/how-to/using-amdsmi-for-python.md +++ b/projects/amdsmi/docs/how-to/using-amdsmi-for-python.md @@ -470,7 +470,7 @@ Field | Description ---|--- `vram_type` | vram type `vram_vendor` | vram vendor -`vram_size_mb` | vram size in mb +`vram_size` | vram size in mb Exceptions that can be thrown by `amdsmi_get_gpu_vram_info` function: @@ -490,7 +490,7 @@ try: vram_info = amdsmi_get_gpu_vram_info(device) print(vram_info['vram_type']) print(vram_info['vram_vendor']) - print(vram_info['vram_size_mb']) + print(vram_info['vram_size']) except AmdSmiException as e: print(e) ``` @@ -2705,7 +2705,7 @@ except AmdSmiException as e: print(e) ``` -### amdsmi_get_dpm_policy +### amdsmi_get_soc_pstate Description: Get dpm policy information. @@ -2722,7 +2722,7 @@ Field | Description `current_id` | current policy id `policies` | list of dictionaries containing possible policies -Exceptions that can be thrown by `amdsmi_get_dpm_policy` function: +Exceptions that can be thrown by `amdsmi_get_soc_pstate` function: * `AmdSmiLibraryException` * `AmdSmiRetryException` @@ -2737,13 +2737,13 @@ try: print("No GPUs on machine") else: for device in devices: - dpm_policies = amdsmi_get_dpm_policy(device) + dpm_policies = amdsmi_get_soc_pstate(device) print(dpm_policies) except AmdSmiException as e: print(e) ``` -### amdsmi_set_dpm_policy +### amdsmi_set_soc_pstate Description: Set the dpm policy to corresponding policy_id. Typically following: 0(default),1,2,3 @@ -2754,7 +2754,7 @@ Input parameters: Output: None -Exceptions that can be thrown by `amdsmi_set_dpm_policy` function: +Exceptions that can be thrown by `amdsmi_set_soc_pstate` function: * `AmdSmiLibraryException` * `AmdSmiRetryException` @@ -2769,7 +2769,7 @@ try: print("No GPUs on machine") else: for device in devices: - amdsmi_set_dpm_policy(device, 0) + amdsmi_set_soc_pstate(device, 0) except AmdSmiException as e: print(e) ``` diff --git a/projects/amdsmi/example/amd_smi_drm_example.cc b/projects/amdsmi/example/amd_smi_drm_example.cc index 92103085e9..94179c47bc 100644 --- a/projects/amdsmi/example/amd_smi_drm_example.cc +++ b/projects/amdsmi/example/amd_smi_drm_example.cc @@ -71,146 +71,146 @@ void getFWNameFromId(int id, char *name) { - switch (id) { - case FW_ID_SMU: - strcpy(name, "SMU"); - break; - case FW_ID_CP_CE: - strcpy(name, "CP_CE"); - break; - case FW_ID_CP_PFP: - strcpy(name, "CP_PFP"); - break; - case FW_ID_CP_ME: - strcpy(name, "CP_ME"); - break; - case FW_ID_CP_MEC_JT1: - strcpy(name, "CP_MEC_JT1"); - break; - case FW_ID_CP_MEC_JT2: - strcpy(name, "CP_MEC_JT2"); - break; - case FW_ID_CP_MEC1: - strcpy(name, "CP_MEC1"); - break; - case FW_ID_CP_MEC2: - strcpy(name, "CP_MEC2"); - break; - case FW_ID_RLC: - strcpy(name, "RLC"); - break; - case FW_ID_SDMA0: - strcpy(name, "SDMA0"); - break; - case FW_ID_SDMA1: - strcpy(name, "SDMA1"); - break; - case FW_ID_SDMA2: - strcpy(name, "SDMA2"); - break; - case FW_ID_SDMA3: - strcpy(name, "SDMA3"); - break; - case FW_ID_SDMA4: - strcpy(name, "SDMA4"); - break; - case FW_ID_SDMA5: - strcpy(name, "SDMA5"); - break; - case FW_ID_SDMA6: - strcpy(name, "SDMA6"); - break; - case FW_ID_SDMA7: - strcpy(name, "SDMA7"); - break; - case FW_ID_VCN: - strcpy(name, "VCN"); - break; - case FW_ID_UVD: - strcpy(name, "UVD"); - break; - case FW_ID_VCE: - strcpy(name, "VCE"); - break; - case FW_ID_ISP: - strcpy(name, "ISP"); - break; - case FW_ID_DMCU_ERAM: - strcpy(name, "DMCU_ERAM"); - break; - case FW_ID_DMCU_ISR: - strcpy(name, "DMCU_ISR"); - break; - case FW_ID_RLC_RESTORE_LIST_GPM_MEM: - strcpy(name, "RLC_RESTORE_LIST_GPM_MEM"); - break; - case FW_ID_RLC_RESTORE_LIST_SRM_MEM: - strcpy(name, "RLC_RESTORE_LIST_SRM_MEM"); - break; - case FW_ID_RLC_RESTORE_LIST_CNTL: - strcpy(name, "RLC_RESTORE_LIST_CNTL"); - break; - case FW_ID_RLC_V: - strcpy(name, "RLC_V"); - break; - case FW_ID_MMSCH: - strcpy(name, "MMSCH"); - break; - case FW_ID_PSP_SYSDRV: - strcpy(name, "PSP_SYSDRV"); - break; - case FW_ID_PSP_SOSDRV: - strcpy(name, "PSP_SOSDRV"); - break; - case FW_ID_PSP_TOC: - strcpy(name, "PSP_TOC"); - break; - case FW_ID_PSP_KEYDB: - strcpy(name, "PSP_KEYDB"); - break; - case FW_ID_DFC: - strcpy(name, "DFC"); - break; - case FW_ID_PSP_SPL: - strcpy(name, "PSP_SPL"); - break; - case FW_ID_DRV_CAP: - strcpy(name, "DRV_CAP"); - break; - case FW_ID_MC: - strcpy(name, "MC"); - break; - case FW_ID_PSP_BL: - strcpy(name, "PSP_BL"); - break; - case FW_ID_CP_PM4: - strcpy(name, "CP_PM4"); - break; - case FW_ID_ASD: - strcpy(name, "ID_ASD"); - break; - case FW_ID_TA_RAS: - strcpy(name, "ID_TA_RAS"); - break; - case FW_ID_TA_XGMI: - strcpy(name, "ID_TA_XGMI"); - break; - case FW_ID_RLC_SRLG: - strcpy(name, "ID_RLC_SRLG"); - break; - case FW_ID_RLC_SRLS: - strcpy(name, "ID_RLC_SRLS"); - break; - case FW_ID_PM: - strcpy(name, "ID_PM"); - break; - case FW_ID_DMCU: - strcpy(name, "ID_DMCU"); - break; - default: - strcpy(name, ""); - break; - } + switch (id) { + case AMDSMI_FW_ID_SMU: + strcpy(name, "SMU"); + break; + case AMDSMI_FW_ID_CP_CE: + strcpy(name, "CP_CE"); + break; + case AMDSMI_FW_ID_CP_PFP: + strcpy(name, "CP_PFP"); + break; + case AMDSMI_FW_ID_CP_ME: + strcpy(name, "CP_ME"); + break; + case AMDSMI_FW_ID_CP_MEC_JT1: + strcpy(name, "CP_MEC_JT1"); + break; + case AMDSMI_FW_ID_CP_MEC_JT2: + strcpy(name, "CP_MEC_JT2"); + break; + case AMDSMI_FW_ID_CP_MEC1: + strcpy(name, "CP_MEC1"); + break; + case AMDSMI_FW_ID_CP_MEC2: + strcpy(name, "CP_MEC2"); + break; + case AMDSMI_FW_ID_RLC: + strcpy(name, "RLC"); + break; + case AMDSMI_FW_ID_SDMA0: + strcpy(name, "SDMA0"); + break; + case AMDSMI_FW_ID_SDMA1: + strcpy(name, "SDMA1"); + break; + case AMDSMI_FW_ID_SDMA2: + strcpy(name, "SDMA2"); + break; + case AMDSMI_FW_ID_SDMA3: + strcpy(name, "SDMA3"); + break; + case AMDSMI_FW_ID_SDMA4: + strcpy(name, "SDMA4"); + break; + case AMDSMI_FW_ID_SDMA5: + strcpy(name, "SDMA5"); + break; + case AMDSMI_FW_ID_SDMA6: + strcpy(name, "SDMA6"); + break; + case AMDSMI_FW_ID_SDMA7: + strcpy(name, "SDMA7"); + break; + case AMDSMI_FW_ID_VCN: + strcpy(name, "VCN"); + break; + case AMDSMI_FW_ID_UVD: + strcpy(name, "UVD"); + break; + case AMDSMI_FW_ID_VCE: + strcpy(name, "VCE"); + break; + case AMDSMI_FW_ID_ISP: + strcpy(name, "ISP"); + break; + case AMDSMI_FW_ID_DMCU_ERAM: + strcpy(name, "DMCU_ERAM"); + break; + case AMDSMI_FW_ID_DMCU_ISR: + strcpy(name, "DMCU_ISR"); + break; + case AMDSMI_FW_ID_RLC_RESTORE_LIST_GPM_MEM: + strcpy(name, "RLC_RESTORE_LIST_GPM_MEM"); + break; + case AMDSMI_FW_ID_RLC_RESTORE_LIST_SRM_MEM: + strcpy(name, "RLC_RESTORE_LIST_SRM_MEM"); + break; + case AMDSMI_FW_ID_RLC_RESTORE_LIST_CNTL: + strcpy(name, "RLC_RESTORE_LIST_CNTL"); + break; + case AMDSMI_FW_ID_RLC_V: + strcpy(name, "RLC_V"); + break; + case AMDSMI_FW_ID_MMSCH: + strcpy(name, "MMSCH"); + break; + case AMDSMI_FW_ID_PSP_SYSDRV: + strcpy(name, "PSP_SYSDRV"); + break; + case AMDSMI_FW_ID_PSP_SOSDRV: + strcpy(name, "PSP_SOSDRV"); + break; + case AMDSMI_FW_ID_PSP_TOC: + strcpy(name, "PSP_TOC"); + break; + case AMDSMI_FW_ID_PSP_KEYDB: + strcpy(name, "PSP_KEYDB"); + break; + case AMDSMI_FW_ID_DFC: + strcpy(name, "DFC"); + break; + case AMDSMI_FW_ID_PSP_SPL: + strcpy(name, "PSP_SPL"); + break; + case AMDSMI_FW_ID_DRV_CAP: + strcpy(name, "DRV_CAP"); + break; + case AMDSMI_FW_ID_MC: + strcpy(name, "MC"); + break; + case AMDSMI_FW_ID_PSP_BL: + strcpy(name, "PSP_BL"); + break; + case AMDSMI_FW_ID_CP_PM4: + strcpy(name, "CP_PM4"); + break; + case AMDSMI_FW_ID_ASD: + strcpy(name, "ID_ASD"); + break; + case AMDSMI_FW_ID_TA_RAS: + strcpy(name, "ID_TA_RAS"); + break; + case AMDSMI_FW_ID_TA_XGMI: + strcpy(name, "ID_TA_XGMI"); + break; + case AMDSMI_FW_ID_RLC_SRLG: + strcpy(name, "ID_RLC_SRLG"); + break; + case AMDSMI_FW_ID_RLC_SRLS: + strcpy(name, "ID_RLC_SRLS"); + break; + case AMDSMI_FW_ID_PM: + strcpy(name, "ID_PM"); + break; + case AMDSMI_FW_ID_DMCU: + strcpy(name, "ID_DMCU"); + break; + default: + strcpy(name, ""); + break; + } } template @@ -267,12 +267,12 @@ int main() { // For each device of the socket, get name and temperature. for (uint32_t j = 0; j < device_count; j++) { // Get device type. Since the amdsmi is initialized with - // AMD_SMI_INIT_AMD_GPUS, the processor_type must be AMD_GPU. + // AMD_SMI_INIT_AMD_GPUS, the processor_type must be AMDSMI_PROCESSOR_TYPE_AMD_GPU. processor_type_t processor_type = {}; ret = amdsmi_get_processor_type(processor_handles[j], &processor_type); CHK_AMDSMI_RET(ret) - if (processor_type != AMD_GPU) { - std::cout << "Expect AMD_GPU device type!\n"; + if (processor_type != AMDSMI_PROCESSOR_TYPE_AMD_GPU) { + std::cout << "Expect AMDSMI_PROCESSOR_TYPE_AMD_GPU device type!\n"; return AMDSMI_STATUS_NOT_SUPPORTED; } @@ -282,10 +282,10 @@ int main() { CHK_AMDSMI_RET(ret) printf(" Output of amdsmi_get_gpu_device_bdf:\n"); printf("\tDevice[%d] BDF %04lx:%02x:%02x.%d\n\n", i, - bdf.fields.domain_number, - bdf.fields.bus_number, - bdf.fields.device_number, - bdf.fields.function_number); + bdf.domain_number, + bdf.bus_number, + bdf.device_number, + bdf.function_number); // Get handle from BDF amdsmi_processor_handle dev_handle; @@ -383,20 +383,20 @@ int main() { // Get GFX clock measurements amdsmi_clk_info_t gfx_clk_values = {}; - ret = amdsmi_get_clock_info(processor_handles[j], CLK_TYPE_GFX, + ret = amdsmi_get_clock_info(processor_handles[j], AMDSMI_CLK_TYPE_GFX, &gfx_clk_values); CHK_AMDSMI_RET(ret) printf(" Output of amdsmi_get_clock_info:\n"); printf("\tGPU GFX Max Clock: %d\n", gfx_clk_values.max_clk); - printf("\tGPU GFX Current Clock: %d\n", gfx_clk_values.cur_clk); + printf("\tGPU GFX Current Clock: %d\n", gfx_clk_values.clk); // Get MEM clock measurements amdsmi_clk_info_t mem_clk_values = {}; - ret = amdsmi_get_clock_info(processor_handles[j], CLK_TYPE_MEM, + ret = amdsmi_get_clock_info(processor_handles[j], AMDSMI_CLK_TYPE_MEM, &mem_clk_values); CHK_AMDSMI_RET(ret) printf("\tGPU MEM Max Clock: %d\n", mem_clk_values.max_clk); - printf("\tGPU MEM Current Clock: %d\n\n", mem_clk_values.cur_clk); + printf("\tGPU MEM Current Clock: %d\n\n", mem_clk_values.clk); // Get PCIe status amdsmi_pcie_info_t pcie_info = {}; @@ -422,7 +422,7 @@ int main() { // Get VRAM temperature limit int64_t temperature = 0; ret = amdsmi_get_temp_metric( - processor_handles[j], TEMPERATURE_TYPE_VRAM, + processor_handles[j], AMDSMI_TEMPERATURE_TYPE_VRAM, AMDSMI_TEMP_CRITICAL, &temperature); CHK_AMDSMI_RET(ret) printf(" Output of amdsmi_get_temp_metric:\n"); @@ -430,7 +430,7 @@ int main() { // Get GFX temperature limit ret = amdsmi_get_temp_metric( - processor_handles[j], TEMPERATURE_TYPE_EDGE, + processor_handles[j], AMDSMI_TEMPERATURE_TYPE_EDGE, AMDSMI_TEMP_CRITICAL, &temperature); if (ret != amdsmi_status_t::AMDSMI_STATUS_NOT_SUPPORTED) { CHK_AMDSMI_RET(ret) @@ -440,10 +440,10 @@ int main() { // Get temperature measurements // amdsmi_temperature_t edge_temp, hotspot_temp, vram_temp, // plx_temp; - int64_t temp_measurements[TEMPERATURE_TYPE__MAX + 1]; + int64_t temp_measurements[AMDSMI_TEMPERATURE_TYPE__MAX + 1]; amdsmi_temperature_type_t temp_types[4] = { - TEMPERATURE_TYPE_EDGE, TEMPERATURE_TYPE_HOTSPOT, - TEMPERATURE_TYPE_VRAM, TEMPERATURE_TYPE_PLX}; + AMDSMI_TEMPERATURE_TYPE_EDGE, AMDSMI_TEMPERATURE_TYPE_HOTSPOT, + AMDSMI_TEMPERATURE_TYPE_VRAM, AMDSMI_TEMPERATURE_TYPE_PLX}; for (const auto &temp_type : temp_types) { ret = amdsmi_get_temp_metric( processor_handles[j], temp_type, @@ -455,13 +455,13 @@ int main() { } printf(" Output of amdsmi_get_temp_metric:\n"); printf("\tGPU Edge temp measurement: %ld\n", - temp_measurements[TEMPERATURE_TYPE_EDGE]); + temp_measurements[AMDSMI_TEMPERATURE_TYPE_EDGE]); printf("\tGPU Hotspot temp measurement: %ld\n", - temp_measurements[TEMPERATURE_TYPE_HOTSPOT]); + temp_measurements[AMDSMI_TEMPERATURE_TYPE_HOTSPOT]); printf("\tGPU VRAM temp measurement: %ld\n", - temp_measurements[TEMPERATURE_TYPE_VRAM]); + temp_measurements[AMDSMI_TEMPERATURE_TYPE_VRAM]); printf("\tGPU PLX temp measurement: %ld\n\n", - temp_measurements[TEMPERATURE_TYPE_PLX]); + temp_measurements[AMDSMI_TEMPERATURE_TYPE_PLX]); // Get RAS features enabled char block_names[14][10] = {"UMC", "SDMA", "GFX", "MMHUB", @@ -542,10 +542,10 @@ int main() { uint64_t gfx = 0, enc = 0; char bdf_str[20]; sprintf(bdf_str, "%04lx:%02x:%02x.%d", - bdf.fields.domain_number, - bdf.fields.bus_number, - bdf.fields.device_number, - bdf.fields.function_number); + bdf.domain_number, + bdf.bus_number, + bdf.device_number, + bdf.function_number); int num = 0; ret = amdsmi_get_gpu_process_list(processor_handles[j], &num_process, process_info_list); std::cout << "Allocation size for process list: " << num_process << "\n"; @@ -635,7 +635,7 @@ int main() { // Get temperature int64_t val_i64 = 0; - ret = amdsmi_get_temp_metric(processor_handles[j], TEMPERATURE_TYPE_EDGE, + ret = amdsmi_get_temp_metric(processor_handles[j], AMDSMI_TEMPERATURE_TYPE_EDGE, AMDSMI_TEMP_CURRENT, &val_i64); if (ret != amdsmi_status_t::AMDSMI_STATUS_NOT_SUPPORTED) { CHK_AMDSMI_RET(ret) @@ -674,10 +674,10 @@ int main() { CHK_AMDSMI_RET(ret) printf(" Output of amdsmi_get_gpu_metrics_info:\n"); printf("\tDevice[%d] BDF %04lx:%02x:%02x.%d\n\n", i, - bdf.fields.domain_number, - bdf.fields.bus_number, - bdf.fields.device_number, - bdf.fields.function_number); + bdf.domain_number, + bdf.bus_number, + bdf.device_number, + bdf.function_number); std::cout << "\t**.common_header.format_revision : " << print_unsigned_int(gpu_metrics.common_header.format_revision) << "\n"; diff --git a/projects/amdsmi/example/amd_smi_nodrm_example.cc b/projects/amdsmi/example/amd_smi_nodrm_example.cc index e6d37cedab..37f5b9645b 100644 --- a/projects/amdsmi/example/amd_smi_nodrm_example.cc +++ b/projects/amdsmi/example/amd_smi_nodrm_example.cc @@ -113,12 +113,12 @@ int main() { // For each device of the socket, get name and temperature. for (uint32_t j = 0; j < device_count; j++) { // Get device type. Since the amdsmi is initialized with - // AMD_SMI_INIT_AMD_GPUS, the processor_type must be AMD_GPU. + // AMD_SMI_INIT_AMD_GPUS, the processor_type must be AMDSMI_PROCESSOR_TYPE_AMD_GPU. processor_type_t processor_type = {}; ret = amdsmi_get_processor_type(processor_handles[j], &processor_type); CHK_AMDSMI_RET(ret) - if (processor_type != AMD_GPU) { - std::cout << "Expect AMD_GPU device type!\n"; + if (processor_type != AMDSMI_PROCESSOR_TYPE_AMD_GPU) { + std::cout << "Expect AMDSMI_PROCESSOR_TYPE_AMD_GPU device type!\n"; return AMDSMI_STATUS_NOT_SUPPORTED; } @@ -137,10 +137,10 @@ int main() { CHK_AMDSMI_RET(ret) printf(" Output of amdsmi_get_gpu_device_bdf:\n"); printf("\tDevice[%d] BDF %04lx:%02x:%02x.%d\n\n", i, - bdf.fields.domain_number, - bdf.fields.bus_number, - bdf.fields.device_number, - bdf.fields.function_number); + bdf.domain_number, + bdf.bus_number, + bdf.device_number, + bdf.function_number); amdsmi_asic_info_t asic_info = {}; ret = amdsmi_get_gpu_asic_info(processor_handles[j], &asic_info); @@ -183,63 +183,63 @@ int main() { printf(" Output of amdsmi_get_fw_info:\n"); printf("\tFirmware version: %d\n", fw_information.num_fw_info); printf("\tSMU: %ld\n", - fw_information.fw_info_list[amdsmi_fw_block_t::FW_ID_SMU] + fw_information.fw_info_list[amdsmi_fw_block_t::AMDSMI_FW_ID_SMU] .fw_version); printf("\tPM: %ld\n", - fw_information.fw_info_list[amdsmi_fw_block_t::FW_ID_PM] + fw_information.fw_info_list[amdsmi_fw_block_t::AMDSMI_FW_ID_PM] .fw_version); printf("\tVCN: %ld\n", - fw_information.fw_info_list[amdsmi_fw_block_t::FW_ID_VCN] + fw_information.fw_info_list[amdsmi_fw_block_t::AMDSMI_FW_ID_VCN] .fw_version); printf("\tCP_ME: %ld\n", - fw_information.fw_info_list[amdsmi_fw_block_t::FW_ID_CP_ME] + fw_information.fw_info_list[amdsmi_fw_block_t::AMDSMI_FW_ID_CP_ME] .fw_version); printf("\tCP_PFP: %ld\n", - fw_information.fw_info_list[amdsmi_fw_block_t::FW_ID_CP_PFP] + fw_information.fw_info_list[amdsmi_fw_block_t::AMDSMI_FW_ID_CP_PFP] .fw_version); printf("\tCP_CE: %ld\n", - fw_information.fw_info_list[amdsmi_fw_block_t::FW_ID_CP_CE] + fw_information.fw_info_list[amdsmi_fw_block_t::AMDSMI_FW_ID_CP_CE] .fw_version); printf("\tRLC: %ld\n", - fw_information.fw_info_list[amdsmi_fw_block_t::FW_ID_RLC] + fw_information.fw_info_list[amdsmi_fw_block_t::AMDSMI_FW_ID_RLC] .fw_version); printf("\tCP_MEC1: %ld\n", - fw_information.fw_info_list[amdsmi_fw_block_t::FW_ID_CP_MEC1] + fw_information.fw_info_list[amdsmi_fw_block_t::AMDSMI_FW_ID_CP_MEC1] .fw_version); printf("\tCP_MEC2: %ld\n", - fw_information.fw_info_list[amdsmi_fw_block_t::FW_ID_CP_MEC2] + fw_information.fw_info_list[amdsmi_fw_block_t::AMDSMI_FW_ID_CP_MEC2] .fw_version); printf("\tSDMA0: %ld\n", - fw_information.fw_info_list[amdsmi_fw_block_t::FW_ID_SDMA0] + fw_information.fw_info_list[amdsmi_fw_block_t::AMDSMI_FW_ID_SDMA0] .fw_version); printf("\tMC: %ld\n", - fw_information.fw_info_list[amdsmi_fw_block_t::FW_ID_MC] + fw_information.fw_info_list[amdsmi_fw_block_t::AMDSMI_FW_ID_MC] .fw_version); printf("\tRLC RESTORE LIST CNTL: %ld\n", fw_information .fw_info_list - [amdsmi_fw_block_t::FW_ID_RLC_RESTORE_LIST_CNTL] + [amdsmi_fw_block_t::AMDSMI_FW_ID_RLC_RESTORE_LIST_CNTL] .fw_version); printf("\tRLC RESTORE LIST GPM MEM: %ld\n", fw_information .fw_info_list - [amdsmi_fw_block_t::FW_ID_RLC_RESTORE_LIST_GPM_MEM] + [amdsmi_fw_block_t::AMDSMI_FW_ID_RLC_RESTORE_LIST_GPM_MEM] .fw_version); printf("\tRLC RESTORE LIST SRM MEM: %ld\n", fw_information .fw_info_list - [amdsmi_fw_block_t::FW_ID_RLC_RESTORE_LIST_SRM_MEM] + [amdsmi_fw_block_t::AMDSMI_FW_ID_RLC_RESTORE_LIST_SRM_MEM] .fw_version); printf( "\tPSP SOSDRV: %ld\n\n", - fw_information.fw_info_list[amdsmi_fw_block_t::FW_ID_PSP_SOSDRV] + fw_information.fw_info_list[amdsmi_fw_block_t::AMDSMI_FW_ID_PSP_SOSDRV] .fw_version); // Get temperature measurements - int64_t temp_measurements[TEMPERATURE_TYPE__MAX + 1]; + int64_t temp_measurements[AMDSMI_TEMPERATURE_TYPE__MAX + 1]; amdsmi_temperature_type_t temp_types[4] = { - TEMPERATURE_TYPE_EDGE, TEMPERATURE_TYPE_HOTSPOT, - TEMPERATURE_TYPE_VRAM, TEMPERATURE_TYPE_PLX}; + AMDSMI_TEMPERATURE_TYPE_EDGE, AMDSMI_TEMPERATURE_TYPE_HOTSPOT, + AMDSMI_TEMPERATURE_TYPE_VRAM, AMDSMI_TEMPERATURE_TYPE_PLX}; for (const auto &temp_type : temp_types) { ret = amdsmi_get_temp_metric( processor_handles[j], temp_type, @@ -249,13 +249,13 @@ int main() { } printf(" Output of amdsmi_get_temp_metric:\n"); printf("\tGPU Edge temp measurement: %ld\n", - temp_measurements[TEMPERATURE_TYPE_EDGE]); + temp_measurements[AMDSMI_TEMPERATURE_TYPE_EDGE]); printf("\tGPU Hotspot temp measurement: %ld\n", - temp_measurements[TEMPERATURE_TYPE_HOTSPOT]); + temp_measurements[AMDSMI_TEMPERATURE_TYPE_HOTSPOT]); printf("\tGPU VRAM temp measurement: %ld\n", - temp_measurements[TEMPERATURE_TYPE_VRAM]); + temp_measurements[AMDSMI_TEMPERATURE_TYPE_VRAM]); printf("\tGPU PLX temp measurement: %ld\n\n", - temp_measurements[TEMPERATURE_TYPE_PLX]); + temp_measurements[AMDSMI_TEMPERATURE_TYPE_PLX]); // Get bad pages char bad_page_status_names[3][15] = {"RESERVED", "PENDING", @@ -310,7 +310,7 @@ int main() { // Get temperature int64_t val_i64 = 0; - ret = amdsmi_get_temp_metric(processor_handles[j], TEMPERATURE_TYPE_EDGE, + ret = amdsmi_get_temp_metric(processor_handles[j], AMDSMI_TEMPERATURE_TYPE_EDGE, AMDSMI_TEMP_CURRENT, &val_i64); CHK_AMDSMI_RET(ret) printf(" Output of amdsmi_get_temp_metric:\n"); @@ -333,10 +333,10 @@ int main() { << "W\n\n"; amdsmi_dpm_policy_t policy; - ret = amdsmi_get_dpm_policy(processor_handles[j], &policy); + ret = amdsmi_get_soc_pstate(processor_handles[j], &policy); if (ret != AMDSMI_STATUS_NOT_SUPPORTED) { CHK_AMDSMI_RET(ret) - std::cout << "\t amdsmi_get_dpm_policy total:" << policy.num_supported + std::cout << "\t amdsmi_get_soc_pstate total:" << policy.num_supported <<" current:" << policy.current << "\n"; for (int x=0; x < policy.num_supported; x++) { std::cout << x <<": (" << policy.policies[x].policy_id diff --git a/projects/amdsmi/example/amdsmi_esmi_intg_example.cc b/projects/amdsmi/example/amdsmi_esmi_intg_example.cc index e3b3b67199..0041e0b11f 100644 --- a/projects/amdsmi/example/amdsmi_esmi_intg_example.cc +++ b/projects/amdsmi/example/amdsmi_esmi_intg_example.cc @@ -104,8 +104,8 @@ int main(int argc, char **argv) { uint32_t cpu_count = 0; uint32_t core_count = 0; - // Set processor type as AMD_CPU - processor_type_t processor_type = AMD_CPU; + // Set processor type as AMDSMI_PROCESSOR_TYPE_AMD_CPU + processor_type_t processor_type = AMDSMI_PROCESSOR_TYPE_AMD_CPU; ret = amdsmi_get_processor_handles_by_type(sockets[i], processor_type, nullptr, &cpu_count); CHK_AMDSMI_RET(ret) @@ -116,8 +116,8 @@ int main(int argc, char **argv) { ret = amdsmi_get_processor_handles_by_type(sockets[i], processor_type, &plist[0], &cpu_count); CHK_AMDSMI_RET(ret) - // Set processor type as AMD_CPU_CORE - processor_type = AMD_CPU_CORE; + // Set processor type as AMDSMI_PROCESSOR_TYPE_AMD_CPU_CORE + processor_type = AMDSMI_PROCESSOR_TYPE_AMD_CPU_CORE; ret = amdsmi_get_processor_handles_by_type(sockets[i], processor_type, nullptr, &core_count); CHK_AMDSMI_RET(ret) diff --git a/projects/amdsmi/include/amd_smi/amdsmi.h b/projects/amdsmi/include/amd_smi/amdsmi.h index fb2ea71e9f..7a3842d423 100644 --- a/projects/amdsmi/include/amd_smi/amdsmi.h +++ b/projects/amdsmi/include/amd_smi/amdsmi.h @@ -151,10 +151,10 @@ typedef enum { #define AMDSMI_LIB_VERSION_YEAR 24 //! Major version should be changed for every header change (adding/deleting APIs, changing names, fields of structures, etc.) -#define AMDSMI_LIB_VERSION_MAJOR 5 +#define AMDSMI_LIB_VERSION_MAJOR 6 //! Minor version should be updated for each API change, but without changing headers -#define AMDSMI_LIB_VERSION_MINOR 3 +#define AMDSMI_LIB_VERSION_MINOR 0 //! Release version should be set to 0 as default and can be updated by the PMs for each CSP point release #define AMDSMI_LIB_VERSION_RELEASE 0 @@ -171,8 +171,8 @@ typedef enum { } amdsmi_mm_ip_t; typedef enum { - CONTAINER_LXC, - CONTAINER_DOCKER, + AMDSMI_CONTAINER_LXC, + AMDSMI_CONTAINER_DOCKER, } amdsmi_container_types_t; //! opaque handler point to underlying implementation @@ -184,18 +184,18 @@ typedef void *amdsmi_cpusocket_handle; /** * @brief Processor types detectable by AMD SMI - * AMD_CPU - CPU Socket is a physical component that holds the CPU. - * AMD_CPU_CORE - CPU Cores are number of individual processing units within the CPU. - * AMD_APU - Combination of AMD_CPU and integrated GPU on single die + * AMDSMI_PROCESSOR_TYPE_AMD_CPU - CPU Socket is a physical component that holds the CPU. + * AMDSMI_PROCESSOR_TYPE_AMD_CPU_CORE - CPU Cores are number of individual processing units within the CPU. + * AMDSMI_PROCESSOR_TYPE_AMD_APU - Combination of AMDSMI_PROCESSOR_TYPE_AMD_CPU and integrated GPU on single die */ typedef enum { - UNKNOWN = 0, - AMD_GPU, - AMD_CPU, - NON_AMD_GPU, - NON_AMD_CPU, - AMD_CPU_CORE, - AMD_APU + AMDSMI_PROCESSOR_TYPE_UNKNOWN = 0, + AMDSMI_PROCESSOR_TYPE_AMD_GPU, + AMDSMI_PROCESSOR_TYPE_AMD_CPU, + AMDSMI_PROCESSOR_TYPE_NON_AMD_GPU, + AMDSMI_PROCESSOR_TYPE_NON_AMD_CPU, + AMDSMI_PROCESSOR_TYPE_AMD_CPU_CORE, + AMDSMI_PROCESSOR_TYPE_AMD_APU } processor_type_t; /** @@ -238,15 +238,15 @@ typedef enum { AMDSMI_STATUS_UNEXPECTED_DATA = 43, //!< The data read or provided to function is not what was expected //esmi errors AMDSMI_STATUS_NON_AMD_CPU = 44, //!< System has different cpu than AMD - AMDSMI_NO_ENERGY_DRV = 45, //!< Energy driver not found - AMDSMI_NO_MSR_DRV = 46, //!< MSR driver not found - AMDSMI_NO_HSMP_DRV = 47, //!< HSMP driver not found - AMDSMI_NO_HSMP_SUP = 48, //!< HSMP not supported - AMDSMI_NO_HSMP_MSG_SUP = 49, //!< HSMP message/feature not supported - AMDSMI_HSMP_TIMEOUT = 50, //!< HSMP message is timedout - AMDSMI_NO_DRV = 51, //!< No Energy and HSMP driver present - AMDSMI_FILE_NOT_FOUND = 52, //!< file or directory not found - AMDSMI_ARG_PTR_NULL = 53, //!< Parsed argument is invalid + AMDSMI_STATUS_NO_ENERGY_DRV = 45, //!< Energy driver not found + AMDSMI_STATUS_NO_MSR_DRV = 46, //!< MSR driver not found + AMDSMI_STATUS_NO_HSMP_DRV = 47, //!< HSMP driver not found + AMDSMI_STATUS_NO_HSMP_SUP = 48, //!< HSMP not supported + AMDSMI_STATUS_NO_HSMP_MSG_SUP = 49, //!< HSMP message/feature not supported + AMDSMI_STATUS_HSMP_TIMEOUT = 50, //!< HSMP message is timedout + AMDSMI_STATUS_NO_DRV = 51, //!< No Energy and HSMP driver present + AMDSMI_STATUS_FILE_NOT_FOUND = 52, //!< file or directory not found + AMDSMI_STATUS_ARG_PTR_NULL = 53, //!< Parsed argument is invalid AMDSMI_STATUS_AMDGPU_RESTART_ERR = 54, //!< AMDGPU restart failed AMDSMI_STATUS_SETTING_UNAVAILABLE = 55, //!< Setting is not available @@ -256,23 +256,23 @@ typedef enum { } amdsmi_status_t; /** - * Clock types + * @brief Clock types */ typedef enum { - CLK_TYPE_SYS = 0x0, //!< System clock - CLK_TYPE_FIRST = CLK_TYPE_SYS, - CLK_TYPE_GFX = CLK_TYPE_SYS, - CLK_TYPE_DF, //!< Data Fabric clock (for ASICs - //!< running on a separate clock) - CLK_TYPE_DCEF, //!< Display Controller Engine clock - CLK_TYPE_SOC, - CLK_TYPE_MEM, - CLK_TYPE_PCIE, - CLK_TYPE_VCLK0, - CLK_TYPE_VCLK1, - CLK_TYPE_DCLK0, - CLK_TYPE_DCLK1, - CLK_TYPE__MAX = CLK_TYPE_DCLK1 + AMDSMI_CLK_TYPE_SYS = 0x0, //!< System clock + AMDSMI_CLK_TYPE_FIRST = AMDSMI_CLK_TYPE_SYS, + AMDSMI_CLK_TYPE_GFX = AMDSMI_CLK_TYPE_SYS, + AMDSMI_CLK_TYPE_DF, //!< Data Fabric clock (for ASICs + //!< running on a separate clock) + AMDSMI_CLK_TYPE_DCEF, //!< Display Controller Engine clock + AMDSMI_CLK_TYPE_SOC, + AMDSMI_CLK_TYPE_MEM, + AMDSMI_CLK_TYPE_PCIE, + AMDSMI_CLK_TYPE_VCLK0, + AMDSMI_CLK_TYPE_VCLK1, + AMDSMI_CLK_TYPE_DCLK0, + AMDSMI_CLK_TYPE_DCLK1, + AMDSMI_CLK_TYPE__MAX = AMDSMI_CLK_TYPE_DCLK1 } amdsmi_clk_type_t; /** @@ -280,16 +280,16 @@ typedef enum { * various compute partitioning settings. */ typedef enum { - COMPUTE_PARTITION_INVALID = 0, - COMPUTE_PARTITION_CPX, //!< Core mode (CPX)- Per-chip XCC with + AMDSMI_COMPUTE_PARTITION_INVALID = 0, + AMDSMI_COMPUTE_PARTITION_CPX, //!< Core mode (CPX)- Per-chip XCC with //!< shared memory - COMPUTE_PARTITION_SPX, //!< Single GPU mode (SPX)- All XCCs work + AMDSMI_COMPUTE_PARTITION_SPX, //!< Single GPU mode (SPX)- All XCCs work //!< together with shared memory - COMPUTE_PARTITION_DPX, //!< Dual GPU mode (DPX)- Half XCCs work + AMDSMI_COMPUTE_PARTITION_DPX, //!< Dual GPU mode (DPX)- Half XCCs work //!< together with shared memory - COMPUTE_PARTITION_TPX, //!< Triple GPU mode (TPX)- One-third XCCs + AMDSMI_COMPUTE_PARTITION_TPX, //!< Triple GPU mode (TPX)- One-third XCCs //!< work together with shared memory - COMPUTE_PARTITION_QPX //!< Quad GPU mode (QPX)- Quarter XCCs + AMDSMI_COMPUTE_PARTITION_QPX //!< Quad GPU mode (QPX)- Quarter XCCs //!< work together with shared memory } amdsmi_compute_partition_type_t; @@ -298,16 +298,16 @@ typedef enum { * memory partition types. */ typedef enum { - MEMORY_PARTITION_UNKNOWN = 0, - MEMORY_PARTITION_NPS1, //!< NPS1 - All CCD & XCD data is interleaved + AMDSMI_MEMORY_PARTITION_UNKNOWN = 0, + AMDSMI_MEMORY_PARTITION_NPS1, //!< NPS1 - All CCD & XCD data is interleaved //!< accross all 8 HBM stacks (all stacks/1). - MEMORY_PARTITION_NPS2, //!< NPS2 - 2 sets of CCDs or 4 XCD interleaved + AMDSMI_MEMORY_PARTITION_NPS2, //!< NPS2 - 2 sets of CCDs or 4 XCD interleaved //!< accross the 4 HBM stacks per AID pair //!< (8 stacks/2). - MEMORY_PARTITION_NPS4, //!< NPS4 - Each XCD data is interleaved accross + AMDSMI_MEMORY_PARTITION_NPS4, //!< NPS4 - Each XCD data is interleaved accross //!< accross 2 (or single) HBM stacks //!< (8 stacks/8 or 8 stacks/4). - MEMORY_PARTITION_NPS8, //!< NPS8 - Each XCD uses a single HBM stack + AMDSMI_MEMORY_PARTITION_NPS8, //!< NPS8 - Each XCD uses a single HBM stack //!< (8 stacks/8). Or each XCD uses a single //!< HBM stack & CCDs share 2 non-interleaved //!< HBM stacks on its AID @@ -319,17 +319,17 @@ typedef enum { * temperature reading should be obtained. */ typedef enum { - TEMPERATURE_TYPE_EDGE, - TEMPERATURE_TYPE_FIRST = TEMPERATURE_TYPE_EDGE, - TEMPERATURE_TYPE_HOTSPOT, - TEMPERATURE_TYPE_JUNCTION = TEMPERATURE_TYPE_HOTSPOT, - TEMPERATURE_TYPE_VRAM, - TEMPERATURE_TYPE_HBM_0, - TEMPERATURE_TYPE_HBM_1, - TEMPERATURE_TYPE_HBM_2, - TEMPERATURE_TYPE_HBM_3, - TEMPERATURE_TYPE_PLX, - TEMPERATURE_TYPE__MAX = TEMPERATURE_TYPE_PLX + AMDSMI_TEMPERATURE_TYPE_EDGE, + AMDSMI_TEMPERATURE_TYPE_FIRST = AMDSMI_TEMPERATURE_TYPE_EDGE, + AMDSMI_TEMPERATURE_TYPE_HOTSPOT, + AMDSMI_TEMPERATURE_TYPE_JUNCTION = AMDSMI_TEMPERATURE_TYPE_HOTSPOT, + AMDSMI_TEMPERATURE_TYPE_VRAM, + AMDSMI_TEMPERATURE_TYPE_HBM_0, + AMDSMI_TEMPERATURE_TYPE_HBM_1, + AMDSMI_TEMPERATURE_TYPE_HBM_2, + AMDSMI_TEMPERATURE_TYPE_HBM_3, + AMDSMI_TEMPERATURE_TYPE_PLX, + AMDSMI_TEMPERATURE_TYPE__MAX = AMDSMI_TEMPERATURE_TYPE_PLX } amdsmi_temperature_type_t; /** @@ -337,101 +337,108 @@ typedef enum { * blocks. */ typedef enum { - FW_ID_SMU = 1, - FW_ID_FIRST = FW_ID_SMU, - FW_ID_CP_CE, - FW_ID_CP_PFP, - FW_ID_CP_ME, - FW_ID_CP_MEC_JT1, - FW_ID_CP_MEC_JT2, - FW_ID_CP_MEC1, - FW_ID_CP_MEC2, - FW_ID_RLC, - FW_ID_SDMA0, - FW_ID_SDMA1, - FW_ID_SDMA2, - FW_ID_SDMA3, - FW_ID_SDMA4, - FW_ID_SDMA5, - FW_ID_SDMA6, - FW_ID_SDMA7, - FW_ID_VCN, - FW_ID_UVD, - FW_ID_VCE, - FW_ID_ISP, - FW_ID_DMCU_ERAM, /*eRAM*/ - FW_ID_DMCU_ISR, /*ISR*/ - FW_ID_RLC_RESTORE_LIST_GPM_MEM, - FW_ID_RLC_RESTORE_LIST_SRM_MEM, - FW_ID_RLC_RESTORE_LIST_CNTL, - FW_ID_RLC_V, - FW_ID_MMSCH, - FW_ID_PSP_SYSDRV, - FW_ID_PSP_SOSDRV, - FW_ID_PSP_TOC, - FW_ID_PSP_KEYDB, - FW_ID_DFC, - FW_ID_PSP_SPL, - FW_ID_DRV_CAP, - FW_ID_MC, - FW_ID_PSP_BL, - FW_ID_CP_PM4, - FW_ID_RLC_P, - FW_ID_SEC_POLICY_STAGE2, - FW_ID_REG_ACCESS_WHITELIST, - FW_ID_IMU_DRAM, - FW_ID_IMU_IRAM, - FW_ID_SDMA_TH0, - FW_ID_SDMA_TH1, - FW_ID_CP_MES, - FW_ID_MES_KIQ, - FW_ID_MES_STACK, - FW_ID_MES_THREAD1, - FW_ID_MES_THREAD1_STACK, - FW_ID_RLX6, - FW_ID_RLX6_DRAM_BOOT, - FW_ID_RS64_ME, - FW_ID_RS64_ME_P0_DATA, - FW_ID_RS64_ME_P1_DATA, - FW_ID_RS64_PFP, - FW_ID_RS64_PFP_P0_DATA, - FW_ID_RS64_PFP_P1_DATA, - FW_ID_RS64_MEC, - FW_ID_RS64_MEC_P0_DATA, - FW_ID_RS64_MEC_P1_DATA, - FW_ID_RS64_MEC_P2_DATA, - FW_ID_RS64_MEC_P3_DATA, - FW_ID_PPTABLE, - FW_ID_PSP_SOC, - FW_ID_PSP_DBG, - FW_ID_PSP_INTF, - FW_ID_RLX6_CORE1, - FW_ID_RLX6_DRAM_BOOT_CORE1, - FW_ID_RLCV_LX7, - FW_ID_RLC_SAVE_RESTORE_LIST, - FW_ID_ASD, - FW_ID_TA_RAS, - FW_ID_TA_XGMI, - FW_ID_RLC_SRLG, - FW_ID_RLC_SRLS, - FW_ID_PM, - FW_ID_DMCU, - FW_ID__MAX + AMDSMI_FW_ID_SMU = 1, + AMDSMI_FW_ID_FIRST = AMDSMI_FW_ID_SMU, + AMDSMI_FW_ID_CP_CE, + AMDSMI_FW_ID_CP_PFP, + AMDSMI_FW_ID_CP_ME, + AMDSMI_FW_ID_CP_MEC_JT1, + AMDSMI_FW_ID_CP_MEC_JT2, + AMDSMI_FW_ID_CP_MEC1, + AMDSMI_FW_ID_CP_MEC2, + AMDSMI_FW_ID_RLC, + AMDSMI_FW_ID_SDMA0, + AMDSMI_FW_ID_SDMA1, + AMDSMI_FW_ID_SDMA2, + AMDSMI_FW_ID_SDMA3, + AMDSMI_FW_ID_SDMA4, + AMDSMI_FW_ID_SDMA5, + AMDSMI_FW_ID_SDMA6, + AMDSMI_FW_ID_SDMA7, + AMDSMI_FW_ID_VCN, + AMDSMI_FW_ID_UVD, + AMDSMI_FW_ID_VCE, + AMDSMI_FW_ID_ISP, + AMDSMI_FW_ID_DMCU_ERAM, /*eRAM*/ + AMDSMI_FW_ID_DMCU_ISR, /*ISR*/ + AMDSMI_FW_ID_RLC_RESTORE_LIST_GPM_MEM, + AMDSMI_FW_ID_RLC_RESTORE_LIST_SRM_MEM, + AMDSMI_FW_ID_RLC_RESTORE_LIST_CNTL, + AMDSMI_FW_ID_RLC_V, + AMDSMI_FW_ID_MMSCH, + AMDSMI_FW_ID_PSP_SYSDRV, + AMDSMI_FW_ID_PSP_SOSDRV, + AMDSMI_FW_ID_PSP_TOC, + AMDSMI_FW_ID_PSP_KEYDB, + AMDSMI_FW_ID_DFC, + AMDSMI_FW_ID_PSP_SPL, + AMDSMI_FW_ID_DRV_CAP, + AMDSMI_FW_ID_MC, + AMDSMI_FW_ID_PSP_BL, + AMDSMI_FW_ID_CP_PM4, + AMDSMI_FW_ID_RLC_P, + AMDSMI_FW_ID_SEC_POLICY_STAGE2, + AMDSMI_FW_ID_REG_ACCESS_WHITELIST, + AMDSMI_FW_ID_IMU_DRAM, + AMDSMI_FW_ID_IMU_IRAM, + AMDSMI_FW_ID_SDMA_TH0, + AMDSMI_FW_ID_SDMA_TH1, + AMDSMI_FW_ID_CP_MES, + AMDSMI_FW_ID_MES_KIQ, + AMDSMI_FW_ID_MES_STACK, + AMDSMI_FW_ID_MES_THREAD1, + AMDSMI_FW_ID_MES_THREAD1_STACK, + AMDSMI_FW_ID_RLX6, + AMDSMI_FW_ID_RLX6_DRAM_BOOT, + AMDSMI_FW_ID_RS64_ME, + AMDSMI_FW_ID_RS64_ME_P0_DATA, + AMDSMI_FW_ID_RS64_ME_P1_DATA, + AMDSMI_FW_ID_RS64_PFP, + AMDSMI_FW_ID_RS64_PFP_P0_DATA, + AMDSMI_FW_ID_RS64_PFP_P1_DATA, + AMDSMI_FW_ID_RS64_MEC, + AMDSMI_FW_ID_RS64_MEC_P0_DATA, + AMDSMI_FW_ID_RS64_MEC_P1_DATA, + AMDSMI_FW_ID_RS64_MEC_P2_DATA, + AMDSMI_FW_ID_RS64_MEC_P3_DATA, + AMDSMI_FW_ID_PPTABLE, + AMDSMI_FW_ID_PSP_SOC, + AMDSMI_FW_ID_PSP_DBG, + AMDSMI_FW_ID_PSP_INTF, + AMDSMI_FW_ID_RLX6_CORE1, + AMDSMI_FW_ID_RLX6_DRAM_BOOT_CORE1, + AMDSMI_FW_ID_RLCV_LX7, + AMDSMI_FW_ID_RLC_SAVE_RESTORE_LIST, + AMDSMI_FW_ID_ASD, + AMDSMI_FW_ID_TA_RAS, + AMDSMI_FW_ID_TA_XGMI, + AMDSMI_FW_ID_RLC_SRLG, + AMDSMI_FW_ID_RLC_SRLS, + AMDSMI_FW_ID_PM, + AMDSMI_FW_ID_DMCU, + AMDSMI_FW_ID__MAX } amdsmi_fw_block_t; - typedef enum { - VRAM_TYPE_UNKNOWN = 0, - VRAM_TYPE_GDDR1 = 1, - VRAM_TYPE_DDR2 = 2, - VRAM_TYPE_GDDR3 = 3, - VRAM_TYPE_GDDR4 = 4, - VRAM_TYPE_GDDR5 = 5, - VRAM_TYPE_HBM = 6, - VRAM_TYPE_DDR3 = 7, - VRAM_TYPE_DDR4 = 8, - VRAM_TYPE_GDDR6 = 9, - VRAM_TYPE__MAX = VRAM_TYPE_GDDR6 + AMDSMI_VRAM_TYPE_UNKNOWN = 0, + // HBM + AMDSMI_VRAM_TYPE_HBM = 1, + AMDSMI_VRAM_TYPE_HBM2 = 2, + AMDSMI_VRAM_TYPE_HBM2E = 3, + AMDSMI_VRAM_TYPE_HBM3 = 4, + // DDR + AMDSMI_VRAM_TYPE_DDR2 = 10, + AMDSMI_VRAM_TYPE_DDR3 = 11, + AMDSMI_VRAM_TYPE_DDR4 = 12, + // GDDR + AMDSMI_VRAM_TYPE_GDDR1 = 17, + AMDSMI_VRAM_TYPE_GDDR2 = 18, + AMDSMI_VRAM_TYPE_GDDR3 = 19, + AMDSMI_VRAM_TYPE_GDDR4 = 20, + AMDSMI_VRAM_TYPE_GDDR5 = 21, + AMDSMI_VRAM_TYPE_GDDR6 = 22, + AMDSMI_VRAM_TYPE_GDDR7 = 23, + AMDSMI_VRAM_TYPE__MAX = AMDSMI_VRAM_TYPE_GDDR7 } amdsmi_vram_type_t; typedef enum { @@ -483,12 +490,12 @@ typedef struct { } amdsmi_frequency_range_t; typedef union { - struct fields_ { + struct { uint64_t function_number : 3; uint64_t device_number : 5; uint64_t bus_number : 8; uint64_t domain_number : 48; - } fields; + }; uint64_t as_uint; } amdsmi_bdf_t; @@ -568,7 +575,7 @@ typedef struct { amdsmi_fw_block_t fw_id; uint64_t fw_version; uint64_t reserved[2]; - } fw_info_list[FW_ID__MAX]; + } fw_info_list[AMDSMI_FW_ID__MAX]; uint32_t reserved[7]; } amdsmi_fw_info_t; @@ -608,7 +615,8 @@ typedef struct { typedef struct { amdsmi_vram_type_t vram_type; amdsmi_vram_vendor_type_t vram_vendor; - uint64_t vram_size_mb; + uint64_t vram_size; + uint64_t reserved[6]; } amdsmi_vram_info_t; @@ -638,10 +646,11 @@ typedef struct { } amdsmi_power_info_t; typedef struct { - uint32_t cur_clk; + uint32_t clk; uint32_t min_clk; uint32_t max_clk; - uint32_t sleep_clk; + uint8_t clk_locked; + uint8_t clk_deep_sleep; uint32_t reserved[4]; } amdsmi_clk_info_t; @@ -3375,45 +3384,45 @@ amdsmi_status_t amdsmi_set_clk_freq(amdsmi_processor_handle processor_handle, amdsmi_clk_type_t clk_type, uint64_t freq_bitmask); /** - * @brief Get the dpm policy for the processor + * @brief Get the soc pstate policy for the processor * * @platform{gpu_bm_linux} @platform{guest_1vf} * * @details Given a processor handle @p processor_handle, this function will write - * current dpm policy settings to @p policy. All the processors at the same socket + * current soc pstate policy settings to @p policy. All the processors at the same socket * will have the same policy. * * @param[in] processor_handle a processor handle * - * @param[in, out] policy the dpm policy for this processor. + * @param[in, out] policy the soc pstate policy for this processor. * If this parameter is nullptr, this function will return * ::AMDSMI_STATUS_INVAL * * @return ::amdsmi_status_t | ::AMDSMI_STATUS_SUCCESS on success, non-zero on fail */ -amdsmi_status_t amdsmi_get_dpm_policy(amdsmi_processor_handle processor_handle, +amdsmi_status_t amdsmi_get_soc_pstate(amdsmi_processor_handle processor_handle, amdsmi_dpm_policy_t* policy); /** - * @brief Set the dpm policy for the processor + * @brief Set the soc pstate policy for the processor * * @platform{gpu_bm_linux} @platform{guest_1vf} * - * @details Given a processor handle @p processor_handle and a dpm policy @p policy_id, - * this function will set the dpm policy for this processor. All the processors at + * @details Given a processor handle @p processor_handle and a soc pstate policy @p policy_id, + * this function will set the soc pstate policy for this processor. All the processors at * the same socket will be set to the same policy. * * @note This function requires root access * * @param[in] processor_handle a processor handle * - * @param[in] policy_id the dpm policy id to set. The id is the id in + * @param[in] policy_id the soc pstate policy id to set. The id is the id in * amdsmi_dpm_policy_entry_t, which can be obtained by calling - * amdsmi_get_dpm_policy() + * amdsmi_get_soc_pstate() * * @return ::amdsmi_status_t | ::AMDSMI_STATUS_SUCCESS on success, non-zero on fail */ -amdsmi_status_t amdsmi_set_dpm_policy(amdsmi_processor_handle processor_handle, +amdsmi_status_t amdsmi_set_soc_pstate(amdsmi_processor_handle processor_handle, uint32_t policy_id); /** diff --git a/projects/amdsmi/include/amd_smi/impl/amd_smi_common.h b/projects/amdsmi/include/amd_smi/impl/amd_smi_common.h index 16362a157a..6d4be4b364 100644 --- a/projects/amdsmi/include/amd_smi/impl/amd_smi_common.h +++ b/projects/amdsmi/include/amd_smi/impl/amd_smi_common.h @@ -77,8 +77,23 @@ const std::map rsmi_status_map = { {RSMI_STATUS_UNKNOWN_ERROR, AMDSMI_STATUS_UNKNOWN_ERROR}, }; +const std::map vram_type_map = { + {0, AMDSMI_VRAM_TYPE_UNKNOWN}, + {1, AMDSMI_VRAM_TYPE_GDDR1}, + {2, AMDSMI_VRAM_TYPE_DDR2}, + {3, AMDSMI_VRAM_TYPE_GDDR3}, + {4, AMDSMI_VRAM_TYPE_GDDR4}, + {5, AMDSMI_VRAM_TYPE_GDDR5}, + {6, AMDSMI_VRAM_TYPE_HBM}, + {7, AMDSMI_VRAM_TYPE_DDR3}, + {8, AMDSMI_VRAM_TYPE_DDR4}, + {9, AMDSMI_VRAM_TYPE_GDDR6}, +}; + amdsmi_status_t rsmi_to_amdsmi_status(rsmi_status_t status); +amdsmi_vram_type_t vram_type_value(unsigned type); + #ifdef ENABLE_ESMI_LIB // Define a map of esmi status codes to amdsmi status codes const std::map esmi_status_map = { @@ -95,15 +110,15 @@ const std::map esmi_status_map = { {ESMI_NOT_INITIALIZED, AMDSMI_STATUS_NOT_INIT}, {ESMI_UNEXPECTED_SIZE, AMDSMI_STATUS_UNEXPECTED_SIZE}, {ESMI_UNKNOWN_ERROR, AMDSMI_STATUS_UNKNOWN_ERROR}, - {ESMI_NO_ENERGY_DRV, AMDSMI_NO_ENERGY_DRV}, - {ESMI_NO_MSR_DRV, AMDSMI_NO_MSR_DRV}, - {ESMI_NO_HSMP_DRV, AMDSMI_NO_HSMP_DRV}, - {ESMI_NO_HSMP_SUP, AMDSMI_NO_HSMP_SUP}, - {ESMI_NO_DRV, AMDSMI_NO_DRV}, - {ESMI_FILE_NOT_FOUND, AMDSMI_FILE_NOT_FOUND}, - {ESMI_ARG_PTR_NULL, AMDSMI_ARG_PTR_NULL}, - {ESMI_HSMP_TIMEOUT, AMDSMI_HSMP_TIMEOUT}, - {ESMI_NO_HSMP_MSG_SUP, AMDSMI_NO_HSMP_MSG_SUP}, + {ESMI_NO_ENERGY_DRV, AMDSMI_STATUS_NO_ENERGY_DRV}, + {ESMI_NO_MSR_DRV, AMDSMI_STATUS_NO_MSR_DRV}, + {ESMI_NO_HSMP_DRV, AMDSMI_STATUS_NO_HSMP_DRV}, + {ESMI_NO_HSMP_SUP, AMDSMI_STATUS_NO_HSMP_SUP}, + {ESMI_NO_DRV, AMDSMI_STATUS_NO_DRV}, + {ESMI_FILE_NOT_FOUND, AMDSMI_STATUS_FILE_NOT_FOUND}, + {ESMI_ARG_PTR_NULL, AMDSMI_STATUS_ARG_PTR_NULL}, + {ESMI_HSMP_TIMEOUT, AMDSMI_STATUS_HSMP_TIMEOUT}, + {ESMI_NO_HSMP_MSG_SUP, AMDSMI_STATUS_NO_HSMP_MSG_SUP}, }; amdsmi_status_t esmi_to_amdsmi_status(esmi_status_t status); diff --git a/projects/amdsmi/include/amd_smi/impl/amd_smi_gpu_device.h b/projects/amdsmi/include/amd_smi/impl/amd_smi_gpu_device.h index 9dd3942457..b50159e89c 100644 --- a/projects/amdsmi/include/amd_smi/impl/amd_smi_gpu_device.h +++ b/projects/amdsmi/include/amd_smi/impl/amd_smi_gpu_device.h @@ -69,10 +69,10 @@ class AMDSmiGPUDevice: public AMDSmiProcessor { public: AMDSmiGPUDevice(uint32_t gpu_id, uint32_t fd, std::string path, amdsmi_bdf_t bdf, AMDSmiDrm& drm): - AMDSmiProcessor(AMD_GPU), gpu_id_(gpu_id), fd_(fd), path_(path), bdf_(bdf), drm_(drm) {} + AMDSmiProcessor(AMDSMI_PROCESSOR_TYPE_AMD_GPU), gpu_id_(gpu_id), fd_(fd), path_(path), bdf_(bdf), drm_(drm) {} AMDSmiGPUDevice(uint32_t gpu_id, AMDSmiDrm& drm): - AMDSmiProcessor(AMD_GPU), gpu_id_(gpu_id), drm_(drm) { + AMDSmiProcessor(AMDSMI_PROCESSOR_TYPE_AMD_GPU), gpu_id_(gpu_id), drm_(drm) { if (check_if_drm_is_supported()) this->get_drm_data(); } ~AMDSmiGPUDevice() { diff --git a/projects/amdsmi/include/amd_smi/impl/amd_smi_socket.h b/projects/amdsmi/include/amd_smi/impl/amd_smi_socket.h index dbbfdae970..282859cbea 100644 --- a/projects/amdsmi/include/amd_smi/impl/amd_smi_socket.h +++ b/projects/amdsmi/include/amd_smi/impl/amd_smi_socket.h @@ -62,13 +62,13 @@ class AMDSmiSocket { uint32_t get_socket_index() { return sindex_;} void add_processor(AMDSmiProcessor* processor) { switch (processor->get_processor_type()) { - case AMD_GPU: + case AMDSMI_PROCESSOR_TYPE_AMD_GPU: processors_.push_back(processor); break; - case AMD_CPU: + case AMDSMI_PROCESSOR_TYPE_AMD_CPU: cpu_processors_.push_back(processor); break; - case AMD_CPU_CORE: + case AMDSMI_PROCESSOR_TYPE_AMD_CPU_CORE: cpu_core_processors_.push_back(processor); break; default: @@ -78,11 +78,11 @@ class AMDSmiSocket { std::vector& get_processors() { return processors_;} std::vector& get_processors(processor_type_t type) { switch (type) { - case AMD_GPU: + case AMDSMI_PROCESSOR_TYPE_AMD_GPU: return processors_; - case AMD_CPU: + case AMDSMI_PROCESSOR_TYPE_AMD_CPU: return cpu_processors_; - case AMD_CPU_CORE: + case AMDSMI_PROCESSOR_TYPE_AMD_CPU_CORE: return cpu_core_processors_; default: return processors_; diff --git a/projects/amdsmi/py-interface/README.md b/projects/amdsmi/py-interface/README.md index c54f711339..286840db59 100644 --- a/projects/amdsmi/py-interface/README.md +++ b/projects/amdsmi/py-interface/README.md @@ -461,7 +461,7 @@ Field | Description ---|--- `vram_type` | vram type `vram_vendor` | vram vendor -`vram_size_mb` | vram size in mb +`vram_size` | vram size in mb Exceptions that can be thrown by `amdsmi_get_gpu_vram_info` function: @@ -481,7 +481,7 @@ try: vram_info = amdsmi_get_gpu_vram_info(device) print(vram_info['vram_type']) print(vram_info['vram_vendor']) - print(vram_info['vram_size_mb']) + print(vram_info['vram_size']) except AmdSmiException as e: print(e) ``` @@ -769,9 +769,11 @@ Output: Dictionary with fields Field | Description ---|--- -`cur_clk` | Current clock for given clock type -`max_clk` | Maximum clock for given clock type +`clk` | Current clock for given clock type `min_clk` | Minimum clock for given clock type +`max_clk` | Maximum clock for given clock type +`clk_locked` | flag only supported on GFX clock domain +`clk_deep_sleep` | clock deep sleep mode flag Exceptions that can be thrown by `amdsmi_get_clock_info` function: @@ -789,9 +791,11 @@ try: else: for device in devices: clock_measure = amdsmi_get_clock_info(device, AmdSmiClkType.GFX) - print(clock_measure['cur_clk']) + print(clock_measure['clk']) print(clock_measure['min_clk']) print(clock_measure['max_clk']) + print(clock_measure['clk_locked']) + print(clock_measure['clk_deep_sleep']) except AmdSmiException as e: print(e) ``` @@ -2743,7 +2747,7 @@ except AmdSmiException as e: print(e) ``` -### amdsmi_get_dpm_policy +### amdsmi_get_soc_pstate Description: Get dpm policy information. @@ -2760,7 +2764,7 @@ Field | Description `current_id` | current policy id `policies` | list of dictionaries containing possible policies -Exceptions that can be thrown by `amdsmi_get_dpm_policy` function: +Exceptions that can be thrown by `amdsmi_get_soc_pstate` function: * `AmdSmiLibraryException` * `AmdSmiRetryException` @@ -2775,13 +2779,13 @@ try: print("No GPUs on machine") else: for device in devices: - dpm_policies = amdsmi_get_dpm_policy(device) + dpm_policies = amdsmi_get_soc_pstate(device) print(dpm_policies) except AmdSmiException as e: print(e) ``` -### amdsmi_set_dpm_policy +### amdsmi_set_soc_pstate Description: Set the dpm policy to corresponding policy_id. Typically following: 0(default),1,2,3 @@ -2792,7 +2796,7 @@ Input parameters: Output: None -Exceptions that can be thrown by `amdsmi_set_dpm_policy` function: +Exceptions that can be thrown by `amdsmi_set_soc_pstate` function: * `AmdSmiLibraryException` * `AmdSmiRetryException` @@ -2807,7 +2811,7 @@ try: print("No GPUs on machine") else: for device in devices: - amdsmi_set_dpm_policy(device, 0) + amdsmi_set_soc_pstate(device, 0) except AmdSmiException as e: print(e) ``` diff --git a/projects/amdsmi/py-interface/__init__.py b/projects/amdsmi/py-interface/__init__.py index 759c147980..0d642993c1 100644 --- a/projects/amdsmi/py-interface/__init__.py +++ b/projects/amdsmi/py-interface/__init__.py @@ -134,7 +134,7 @@ from .amdsmi_interface import amdsmi_set_gpu_fan_speed from .amdsmi_interface import amdsmi_reset_gpu_fan from .amdsmi_interface import amdsmi_set_clk_freq from .amdsmi_interface import amdsmi_set_gpu_overdrive_level -from .amdsmi_interface import amdsmi_set_dpm_policy +from .amdsmi_interface import amdsmi_set_soc_pstate from .amdsmi_interface import amdsmi_set_xgmi_plpd from .amdsmi_interface import amdsmi_set_gpu_clear_sram_data from .amdsmi_interface import amdsmi_set_gpu_process_isolation diff --git a/projects/amdsmi/py-interface/amdsmi_exception.py b/projects/amdsmi/py-interface/amdsmi_exception.py index 309831101b..ae07cdbe44 100644 --- a/projects/amdsmi/py-interface/amdsmi_exception.py +++ b/projects/amdsmi/py-interface/amdsmi_exception.py @@ -78,15 +78,15 @@ class AmdSmiLibraryException(AmdSmiException): amdsmi_wrapper.AMDSMI_STATUS_UNEXPECTED_SIZE : "AMDSMI_STATUS_UNEXPECTED_SIZE - unexpected size of data was read", amdsmi_wrapper.AMDSMI_STATUS_UNEXPECTED_DATA : "AMDSMI_STATUS_UNEXPECTED_DATA - The data read or provided was unexpected", amdsmi_wrapper.AMDSMI_STATUS_NON_AMD_CPU : "AMDSMI_STATUS_NON_AMD_CPU - System has non-AMD CPU", - amdsmi_wrapper.AMDSMI_NO_ENERGY_DRV : "AMD_SMI_NO_ENERGY_DRV - Energy driver not found", - amdsmi_wrapper.AMDSMI_NO_MSR_DRV : "AMDSMI_NO_MSR_DRV - MSR driver not found", - amdsmi_wrapper.AMDSMI_NO_HSMP_DRV : "AMD_SMI_NO_HSMP_DRV - HSMP driver not found", - amdsmi_wrapper.AMDSMI_NO_HSMP_SUP : "AMD_SMI_NO_HSMP_SUP - HSMP not supported", - amdsmi_wrapper.AMDSMI_NO_HSMP_MSG_SUP : "AMD_SMI_NO_HSMP_MSG_SUP - HSMP message/feature not supported", - amdsmi_wrapper.AMDSMI_HSMP_TIMEOUT : "AMD_SMI_HSMP_TIMEOUT - HSMP message timeout", - amdsmi_wrapper.AMDSMI_NO_DRV : "AMDSMI_NO_DRV - No Energy and HSMP driver present", - amdsmi_wrapper.AMDSMI_FILE_NOT_FOUND : "AMDSMI_FILE_NOT_FOUND - File or directory not found", - amdsmi_wrapper.AMDSMI_ARG_PTR_NULL : "AMDSMI_ARG_PTR_NULL - Parsed argument is invalid", + amdsmi_wrapper.AMDSMI_STATUS_NO_ENERGY_DRV : "AMD_SMI_NO_ENERGY_DRV - Energy driver not found", + amdsmi_wrapper.AMDSMI_STATUS_NO_MSR_DRV : "AMDSMI_STATUS_NO_MSR_DRV - MSR driver not found", + amdsmi_wrapper.AMDSMI_STATUS_NO_HSMP_DRV : "AMD_SMI_NO_HSMP_DRV - HSMP driver not found", + amdsmi_wrapper.AMDSMI_STATUS_NO_HSMP_SUP : "AMD_SMI_NO_HSMP_SUP - HSMP not supported", + amdsmi_wrapper.AMDSMI_STATUS_NO_HSMP_MSG_SUP : "AMD_SMI_NO_HSMP_MSG_SUP - HSMP message/feature not supported", + amdsmi_wrapper.AMDSMI_STATUS_HSMP_TIMEOUT : "AMD_SMI_HSMP_TIMEOUT - HSMP message timeout", + amdsmi_wrapper.AMDSMI_STATUS_NO_DRV : "AMDSMI_STATUS_NO_DRV - No Energy and HSMP driver present", + amdsmi_wrapper.AMDSMI_STATUS_FILE_NOT_FOUND : "AMDSMI_STATUS_FILE_NOT_FOUND - File or directory not found", + amdsmi_wrapper.AMDSMI_STATUS_ARG_PTR_NULL : "AMDSMI_STATUS_ARG_PTR_NULL - Parsed argument is invalid", amdsmi_wrapper.AMDSMI_STATUS_MAP_ERROR : "AMDSMI_STATUS_MAP_ERROR - The internal library error did not map to a status code", amdsmi_wrapper.AMDSMI_STATUS_UNKNOWN_ERROR : "AMDSMI_STATUS_UNKNOWN_ERROR - An unknown error occurred" } diff --git a/projects/amdsmi/py-interface/amdsmi_interface.py b/projects/amdsmi/py-interface/amdsmi_interface.py index 4cb7ce21ce..f025956313 100644 --- a/projects/amdsmi/py-interface/amdsmi_interface.py +++ b/projects/amdsmi/py-interface/amdsmi_interface.py @@ -82,16 +82,16 @@ class AmdSmiInitFlags(IntEnum): class AmdSmiContainerTypes(IntEnum): - LXC = amdsmi_wrapper.CONTAINER_LXC - DOCKER = amdsmi_wrapper.CONTAINER_DOCKER + LXC = amdsmi_wrapper.AMDSMI_CONTAINER_LXC + DOCKER = amdsmi_wrapper.AMDSMI_CONTAINER_DOCKER class AmdSmiDeviceType(IntEnum): - UNKNOWN_DEVICE = amdsmi_wrapper.UNKNOWN - AMD_GPU_DEVICE = amdsmi_wrapper.AMD_GPU - AMD_CPU_DEVICE = amdsmi_wrapper.AMD_CPU - NON_AMD_GPU_DEVICE = amdsmi_wrapper.NON_AMD_GPU - NON_AMD_CPU_DEVICE = amdsmi_wrapper.NON_AMD_CPU + UNKNOWN_DEVICE = amdsmi_wrapper.AMDSMI_PROCESSOR_TYPE_UNKNOWN + AMD_GPU_DEVICE = amdsmi_wrapper.AMDSMI_PROCESSOR_TYPE_AMD_GPU + AMD_CPU_DEVICE = amdsmi_wrapper.AMDSMI_PROCESSOR_TYPE_AMD_CPU + NON_AMD_GPU_DEVICE = amdsmi_wrapper.AMDSMI_PROCESSOR_TYPE_NON_AMD_GPU + NON_AMD_CPU_DEVICE = amdsmi_wrapper.AMDSMI_PROCESSOR_TYPE_NON_AMD_CPU class AmdSmiMmIp(IntEnum): @@ -101,109 +101,109 @@ class AmdSmiMmIp(IntEnum): class AmdSmiFwBlock(IntEnum): - FW_ID_SMU = amdsmi_wrapper.FW_ID_SMU - FW_ID_CP_CE = amdsmi_wrapper.FW_ID_CP_CE - FW_ID_CP_PFP = amdsmi_wrapper.FW_ID_CP_PFP - FW_ID_CP_ME = amdsmi_wrapper.FW_ID_CP_ME - FW_ID_CP_MEC_JT1 = amdsmi_wrapper.FW_ID_CP_MEC_JT1 - FW_ID_CP_MEC_JT2 = amdsmi_wrapper.FW_ID_CP_MEC_JT2 - FW_ID_CP_MEC1 = amdsmi_wrapper.FW_ID_CP_MEC1 - FW_ID_CP_MEC2 = amdsmi_wrapper.FW_ID_CP_MEC2 - FW_ID_RLC = amdsmi_wrapper.FW_ID_RLC - FW_ID_SDMA0 = amdsmi_wrapper.FW_ID_SDMA0 - FW_ID_SDMA1 = amdsmi_wrapper.FW_ID_SDMA1 - FW_ID_SDMA2 = amdsmi_wrapper.FW_ID_SDMA2 - FW_ID_SDMA3 = amdsmi_wrapper.FW_ID_SDMA3 - FW_ID_SDMA4 = amdsmi_wrapper.FW_ID_SDMA4 - FW_ID_SDMA5 = amdsmi_wrapper.FW_ID_SDMA5 - FW_ID_SDMA6 = amdsmi_wrapper.FW_ID_SDMA6 - FW_ID_SDMA7 = amdsmi_wrapper.FW_ID_SDMA7 - FW_ID_VCN = amdsmi_wrapper.FW_ID_VCN - FW_ID_UVD = amdsmi_wrapper.FW_ID_UVD - FW_ID_VCE = amdsmi_wrapper.FW_ID_VCE - FW_ID_ISP = amdsmi_wrapper.FW_ID_ISP - FW_ID_DMCU_ERAM = amdsmi_wrapper.FW_ID_DMCU_ERAM - FW_ID_DMCU_ISR = amdsmi_wrapper.FW_ID_DMCU_ISR - FW_ID_RLC_RESTORE_LIST_GPM_MEM = amdsmi_wrapper.FW_ID_RLC_RESTORE_LIST_GPM_MEM - FW_ID_RLC_RESTORE_LIST_SRM_MEM = amdsmi_wrapper.FW_ID_RLC_RESTORE_LIST_SRM_MEM - FW_ID_RLC_RESTORE_LIST_CNTL = amdsmi_wrapper.FW_ID_RLC_RESTORE_LIST_CNTL - FW_ID_RLC_V = amdsmi_wrapper.FW_ID_RLC_V - FW_ID_MMSCH = amdsmi_wrapper.FW_ID_MMSCH - FW_ID_PSP_SYSDRV = amdsmi_wrapper.FW_ID_PSP_SYSDRV - FW_ID_PSP_SOSDRV = amdsmi_wrapper.FW_ID_PSP_SOSDRV - FW_ID_PSP_TOC = amdsmi_wrapper.FW_ID_PSP_TOC - FW_ID_PSP_KEYDB = amdsmi_wrapper.FW_ID_PSP_KEYDB - FW_ID_DFC = amdsmi_wrapper.FW_ID_DFC - FW_ID_PSP_SPL = amdsmi_wrapper.FW_ID_PSP_SPL - FW_ID_DRV_CAP = amdsmi_wrapper.FW_ID_DRV_CAP - FW_ID_MC = amdsmi_wrapper.FW_ID_MC - FW_ID_PSP_BL = amdsmi_wrapper.FW_ID_PSP_BL - FW_ID_CP_PM4 = amdsmi_wrapper.FW_ID_CP_PM4 - FW_ID_RLC_P = amdsmi_wrapper.FW_ID_RLC_P - FW_ID_SEC_POLICY_STAGE2 = amdsmi_wrapper.FW_ID_SEC_POLICY_STAGE2 - FW_ID_REG_ACCESS_WHITELIST = amdsmi_wrapper.FW_ID_REG_ACCESS_WHITELIST - FW_ID_IMU_DRAM = amdsmi_wrapper.FW_ID_IMU_DRAM - FW_ID_IMU_IRAM = amdsmi_wrapper.FW_ID_IMU_IRAM - FW_ID_SDMA_TH0 = amdsmi_wrapper.FW_ID_SDMA_TH0 - FW_ID_SDMA_TH1 = amdsmi_wrapper.FW_ID_SDMA_TH1 - FW_ID_CP_MES = amdsmi_wrapper.FW_ID_CP_MES - FW_ID_MES_STACK = amdsmi_wrapper.FW_ID_MES_STACK - FW_ID_MES_THREAD1 = amdsmi_wrapper.FW_ID_MES_THREAD1 - FW_ID_MES_THREAD1_STACK = amdsmi_wrapper.FW_ID_MES_THREAD1_STACK - FW_ID_RLX6 = amdsmi_wrapper.FW_ID_RLX6 - FW_ID_RLX6_DRAM_BOOT = amdsmi_wrapper.FW_ID_RLX6_DRAM_BOOT - FW_ID_RS64_ME = amdsmi_wrapper.FW_ID_RS64_ME - FW_ID_RS64_ME_P0_DATA = amdsmi_wrapper.FW_ID_RS64_ME_P0_DATA - FW_ID_RS64_ME_P1_DATA = amdsmi_wrapper.FW_ID_RS64_ME_P1_DATA - FW_ID_RS64_PFP = amdsmi_wrapper.FW_ID_RS64_PFP - FW_ID_RS64_PFP_P0_DATA = amdsmi_wrapper.FW_ID_RS64_PFP_P0_DATA - FW_ID_RS64_PFP_P1_DATA = amdsmi_wrapper.FW_ID_RS64_PFP_P1_DATA - FW_ID_RS64_MEC = amdsmi_wrapper.FW_ID_RS64_MEC - FW_ID_RS64_MEC_P0_DATA = amdsmi_wrapper.FW_ID_RS64_MEC_P0_DATA - FW_ID_RS64_MEC_P1_DATA = amdsmi_wrapper.FW_ID_RS64_MEC_P1_DATA - FW_ID_RS64_MEC_P2_DATA = amdsmi_wrapper.FW_ID_RS64_MEC_P2_DATA - FW_ID_RS64_MEC_P3_DATA = amdsmi_wrapper.FW_ID_RS64_MEC_P3_DATA - FW_ID_PPTABLE = amdsmi_wrapper.FW_ID_PPTABLE - FW_ID_PSP_SOC = amdsmi_wrapper.FW_ID_PSP_SOC - FW_ID_PSP_DBG = amdsmi_wrapper.FW_ID_PSP_DBG - FW_ID_PSP_INTF = amdsmi_wrapper.FW_ID_PSP_INTF - FW_ID_RLX6_CORE1 = amdsmi_wrapper.FW_ID_RLX6_CORE1 - FW_ID_RLX6_DRAM_BOOT_CORE1 = amdsmi_wrapper.FW_ID_RLX6_DRAM_BOOT_CORE1 - FW_ID_RLCV_LX7 = amdsmi_wrapper.FW_ID_RLCV_LX7 - FW_ID_RLC_SAVE_RESTORE_LIST = amdsmi_wrapper.FW_ID_RLC_SAVE_RESTORE_LIST - FW_ID_ASD = amdsmi_wrapper.FW_ID_ASD - FW_ID_TA_RAS = amdsmi_wrapper.FW_ID_TA_RAS - FW_ID_TA_XGMI = amdsmi_wrapper.FW_ID_TA_XGMI - FW_ID_RLC_SRLG = amdsmi_wrapper.FW_ID_RLC_SRLG - FW_ID_RLC_SRLS = amdsmi_wrapper.FW_ID_RLC_SRLS - FW_ID_PM = amdsmi_wrapper.FW_ID_PM - FW_ID_DMCU = amdsmi_wrapper.FW_ID_DMCU + AMDSMI_FW_ID_SMU = amdsmi_wrapper.AMDSMI_FW_ID_SMU + AMDSMI_FW_ID_CP_CE = amdsmi_wrapper.AMDSMI_FW_ID_CP_CE + AMDSMI_FW_ID_CP_PFP = amdsmi_wrapper.AMDSMI_FW_ID_CP_PFP + AMDSMI_FW_ID_CP_ME = amdsmi_wrapper.AMDSMI_FW_ID_CP_ME + AMDSMI_FW_ID_CP_MEC_JT1 = amdsmi_wrapper.AMDSMI_FW_ID_CP_MEC_JT1 + AMDSMI_FW_ID_CP_MEC_JT2 = amdsmi_wrapper.AMDSMI_FW_ID_CP_MEC_JT2 + AMDSMI_FW_ID_CP_MEC1 = amdsmi_wrapper.AMDSMI_FW_ID_CP_MEC1 + AMDSMI_FW_ID_CP_MEC2 = amdsmi_wrapper.AMDSMI_FW_ID_CP_MEC2 + AMDSMI_FW_ID_RLC = amdsmi_wrapper.AMDSMI_FW_ID_RLC + AMDSMI_FW_ID_SDMA0 = amdsmi_wrapper.AMDSMI_FW_ID_SDMA0 + AMDSMI_FW_ID_SDMA1 = amdsmi_wrapper.AMDSMI_FW_ID_SDMA1 + AMDSMI_FW_ID_SDMA2 = amdsmi_wrapper.AMDSMI_FW_ID_SDMA2 + AMDSMI_FW_ID_SDMA3 = amdsmi_wrapper.AMDSMI_FW_ID_SDMA3 + AMDSMI_FW_ID_SDMA4 = amdsmi_wrapper.AMDSMI_FW_ID_SDMA4 + AMDSMI_FW_ID_SDMA5 = amdsmi_wrapper.AMDSMI_FW_ID_SDMA5 + AMDSMI_FW_ID_SDMA6 = amdsmi_wrapper.AMDSMI_FW_ID_SDMA6 + AMDSMI_FW_ID_SDMA7 = amdsmi_wrapper.AMDSMI_FW_ID_SDMA7 + AMDSMI_FW_ID_VCN = amdsmi_wrapper.AMDSMI_FW_ID_VCN + AMDSMI_FW_ID_UVD = amdsmi_wrapper.AMDSMI_FW_ID_UVD + AMDSMI_FW_ID_VCE = amdsmi_wrapper.AMDSMI_FW_ID_VCE + AMDSMI_FW_ID_ISP = amdsmi_wrapper.AMDSMI_FW_ID_ISP + AMDSMI_FW_ID_DMCU_ERAM = amdsmi_wrapper.AMDSMI_FW_ID_DMCU_ERAM + AMDSMI_FW_ID_DMCU_ISR = amdsmi_wrapper.AMDSMI_FW_ID_DMCU_ISR + AMDSMI_FW_ID_RLC_RESTORE_LIST_GPM_MEM = amdsmi_wrapper.AMDSMI_FW_ID_RLC_RESTORE_LIST_GPM_MEM + AMDSMI_FW_ID_RLC_RESTORE_LIST_SRM_MEM = amdsmi_wrapper.AMDSMI_FW_ID_RLC_RESTORE_LIST_SRM_MEM + AMDSMI_FW_ID_RLC_RESTORE_LIST_CNTL = amdsmi_wrapper.AMDSMI_FW_ID_RLC_RESTORE_LIST_CNTL + AMDSMI_FW_ID_RLC_V = amdsmi_wrapper.AMDSMI_FW_ID_RLC_V + AMDSMI_FW_ID_MMSCH = amdsmi_wrapper.AMDSMI_FW_ID_MMSCH + AMDSMI_FW_ID_PSP_SYSDRV = amdsmi_wrapper.AMDSMI_FW_ID_PSP_SYSDRV + AMDSMI_FW_ID_PSP_SOSDRV = amdsmi_wrapper.AMDSMI_FW_ID_PSP_SOSDRV + AMDSMI_FW_ID_PSP_TOC = amdsmi_wrapper.AMDSMI_FW_ID_PSP_TOC + AMDSMI_FW_ID_PSP_KEYDB = amdsmi_wrapper.AMDSMI_FW_ID_PSP_KEYDB + AMDSMI_FW_ID_DFC = amdsmi_wrapper.AMDSMI_FW_ID_DFC + AMDSMI_FW_ID_PSP_SPL = amdsmi_wrapper.AMDSMI_FW_ID_PSP_SPL + AMDSMI_FW_ID_DRV_CAP = amdsmi_wrapper.AMDSMI_FW_ID_DRV_CAP + AMDSMI_FW_ID_MC = amdsmi_wrapper.AMDSMI_FW_ID_MC + AMDSMI_FW_ID_PSP_BL = amdsmi_wrapper.AMDSMI_FW_ID_PSP_BL + AMDSMI_FW_ID_CP_PM4 = amdsmi_wrapper.AMDSMI_FW_ID_CP_PM4 + AMDSMI_FW_ID_RLC_P = amdsmi_wrapper.AMDSMI_FW_ID_RLC_P + AMDSMI_FW_ID_SEC_POLICY_STAGE2 = amdsmi_wrapper.AMDSMI_FW_ID_SEC_POLICY_STAGE2 + AMDSMI_FW_ID_REG_ACCESS_WHITELIST = amdsmi_wrapper.AMDSMI_FW_ID_REG_ACCESS_WHITELIST + AMDSMI_FW_ID_IMU_DRAM = amdsmi_wrapper.AMDSMI_FW_ID_IMU_DRAM + AMDSMI_FW_ID_IMU_IRAM = amdsmi_wrapper.AMDSMI_FW_ID_IMU_IRAM + AMDSMI_FW_ID_SDMA_TH0 = amdsmi_wrapper.AMDSMI_FW_ID_SDMA_TH0 + AMDSMI_FW_ID_SDMA_TH1 = amdsmi_wrapper.AMDSMI_FW_ID_SDMA_TH1 + AMDSMI_FW_ID_CP_MES = amdsmi_wrapper.AMDSMI_FW_ID_CP_MES + AMDSMI_FW_ID_MES_STACK = amdsmi_wrapper.AMDSMI_FW_ID_MES_STACK + AMDSMI_FW_ID_MES_THREAD1 = amdsmi_wrapper.AMDSMI_FW_ID_MES_THREAD1 + AMDSMI_FW_ID_MES_THREAD1_STACK = amdsmi_wrapper.AMDSMI_FW_ID_MES_THREAD1_STACK + AMDSMI_FW_ID_RLX6 = amdsmi_wrapper.AMDSMI_FW_ID_RLX6 + AMDSMI_FW_ID_RLX6_DRAM_BOOT = amdsmi_wrapper.AMDSMI_FW_ID_RLX6_DRAM_BOOT + AMDSMI_FW_ID_RS64_ME = amdsmi_wrapper.AMDSMI_FW_ID_RS64_ME + AMDSMI_FW_ID_RS64_ME_P0_DATA = amdsmi_wrapper.AMDSMI_FW_ID_RS64_ME_P0_DATA + AMDSMI_FW_ID_RS64_ME_P1_DATA = amdsmi_wrapper.AMDSMI_FW_ID_RS64_ME_P1_DATA + AMDSMI_FW_ID_RS64_PFP = amdsmi_wrapper.AMDSMI_FW_ID_RS64_PFP + AMDSMI_FW_ID_RS64_PFP_P0_DATA = amdsmi_wrapper.AMDSMI_FW_ID_RS64_PFP_P0_DATA + AMDSMI_FW_ID_RS64_PFP_P1_DATA = amdsmi_wrapper.AMDSMI_FW_ID_RS64_PFP_P1_DATA + AMDSMI_FW_ID_RS64_MEC = amdsmi_wrapper.AMDSMI_FW_ID_RS64_MEC + AMDSMI_FW_ID_RS64_MEC_P0_DATA = amdsmi_wrapper.AMDSMI_FW_ID_RS64_MEC_P0_DATA + AMDSMI_FW_ID_RS64_MEC_P1_DATA = amdsmi_wrapper.AMDSMI_FW_ID_RS64_MEC_P1_DATA + AMDSMI_FW_ID_RS64_MEC_P2_DATA = amdsmi_wrapper.AMDSMI_FW_ID_RS64_MEC_P2_DATA + AMDSMI_FW_ID_RS64_MEC_P3_DATA = amdsmi_wrapper.AMDSMI_FW_ID_RS64_MEC_P3_DATA + AMDSMI_FW_ID_PPTABLE = amdsmi_wrapper.AMDSMI_FW_ID_PPTABLE + AMDSMI_FW_ID_PSP_SOC = amdsmi_wrapper.AMDSMI_FW_ID_PSP_SOC + AMDSMI_FW_ID_PSP_DBG = amdsmi_wrapper.AMDSMI_FW_ID_PSP_DBG + AMDSMI_FW_ID_PSP_INTF = amdsmi_wrapper.AMDSMI_FW_ID_PSP_INTF + AMDSMI_FW_ID_RLX6_CORE1 = amdsmi_wrapper.AMDSMI_FW_ID_RLX6_CORE1 + AMDSMI_FW_ID_RLX6_DRAM_BOOT_CORE1 = amdsmi_wrapper.AMDSMI_FW_ID_RLX6_DRAM_BOOT_CORE1 + AMDSMI_FW_ID_RLCV_LX7 = amdsmi_wrapper.AMDSMI_FW_ID_RLCV_LX7 + AMDSMI_FW_ID_RLC_SAVE_RESTORE_LIST = amdsmi_wrapper.AMDSMI_FW_ID_RLC_SAVE_RESTORE_LIST + AMDSMI_FW_ID_ASD = amdsmi_wrapper.AMDSMI_FW_ID_ASD + AMDSMI_FW_ID_TA_RAS = amdsmi_wrapper.AMDSMI_FW_ID_TA_RAS + AMDSMI_FW_ID_TA_XGMI = amdsmi_wrapper.AMDSMI_FW_ID_TA_XGMI + AMDSMI_FW_ID_RLC_SRLG = amdsmi_wrapper.AMDSMI_FW_ID_RLC_SRLG + 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 class AmdSmiClkType(IntEnum): - SYS = amdsmi_wrapper.CLK_TYPE_SYS - GFX = amdsmi_wrapper.CLK_TYPE_GFX - DF = amdsmi_wrapper.CLK_TYPE_DF - DCEF = amdsmi_wrapper.CLK_TYPE_DCEF - SOC = amdsmi_wrapper.CLK_TYPE_SOC - MEM = amdsmi_wrapper.CLK_TYPE_MEM - PCIE = amdsmi_wrapper.CLK_TYPE_PCIE - VCLK0 = amdsmi_wrapper.CLK_TYPE_VCLK0 - VCLK1 = amdsmi_wrapper.CLK_TYPE_VCLK1 - DCLK0 = amdsmi_wrapper.CLK_TYPE_DCLK0 - DCLK1 = amdsmi_wrapper.CLK_TYPE_DCLK1 + SYS = amdsmi_wrapper.AMDSMI_CLK_TYPE_SYS + GFX = amdsmi_wrapper.AMDSMI_CLK_TYPE_GFX + DF = amdsmi_wrapper.AMDSMI_CLK_TYPE_DF + DCEF = amdsmi_wrapper.AMDSMI_CLK_TYPE_DCEF + SOC = amdsmi_wrapper.AMDSMI_CLK_TYPE_SOC + MEM = amdsmi_wrapper.AMDSMI_CLK_TYPE_MEM + PCIE = amdsmi_wrapper.AMDSMI_CLK_TYPE_PCIE + VCLK0 = amdsmi_wrapper.AMDSMI_CLK_TYPE_VCLK0 + VCLK1 = amdsmi_wrapper.AMDSMI_CLK_TYPE_VCLK1 + DCLK0 = amdsmi_wrapper.AMDSMI_CLK_TYPE_DCLK0 + DCLK1 = amdsmi_wrapper.AMDSMI_CLK_TYPE_DCLK1 class AmdSmiTemperatureType(IntEnum): - EDGE = amdsmi_wrapper.TEMPERATURE_TYPE_EDGE - HOTSPOT = amdsmi_wrapper.TEMPERATURE_TYPE_HOTSPOT - JUNCTION = amdsmi_wrapper.TEMPERATURE_TYPE_JUNCTION - VRAM = amdsmi_wrapper.TEMPERATURE_TYPE_VRAM - HBM_0 = amdsmi_wrapper.TEMPERATURE_TYPE_HBM_0 - HBM_1 = amdsmi_wrapper.TEMPERATURE_TYPE_HBM_1 - HBM_2 = amdsmi_wrapper.TEMPERATURE_TYPE_HBM_2 - HBM_3 = amdsmi_wrapper.TEMPERATURE_TYPE_HBM_3 - PLX = amdsmi_wrapper.TEMPERATURE_TYPE_PLX + EDGE = amdsmi_wrapper.AMDSMI_TEMPERATURE_TYPE_EDGE + HOTSPOT = amdsmi_wrapper.AMDSMI_TEMPERATURE_TYPE_HOTSPOT + JUNCTION = amdsmi_wrapper.AMDSMI_TEMPERATURE_TYPE_JUNCTION + VRAM = amdsmi_wrapper.AMDSMI_TEMPERATURE_TYPE_VRAM + HBM_0 = amdsmi_wrapper.AMDSMI_TEMPERATURE_TYPE_HBM_0 + HBM_1 = amdsmi_wrapper.AMDSMI_TEMPERATURE_TYPE_HBM_1 + HBM_2 = amdsmi_wrapper.AMDSMI_TEMPERATURE_TYPE_HBM_2 + HBM_3 = amdsmi_wrapper.AMDSMI_TEMPERATURE_TYPE_HBM_3 + PLX = amdsmi_wrapper.AMDSMI_TEMPERATURE_TYPE_PLX class AmdSmiDevPerfLevel(IntEnum): @@ -289,20 +289,20 @@ class AmdSmiVoltageType(IntEnum): class AmdSmiComputePartitionType(IntEnum): - CPX = amdsmi_wrapper.COMPUTE_PARTITION_CPX - SPX = amdsmi_wrapper.COMPUTE_PARTITION_SPX - DPX = amdsmi_wrapper.COMPUTE_PARTITION_DPX - TPX = amdsmi_wrapper.COMPUTE_PARTITION_TPX - QPX = amdsmi_wrapper.COMPUTE_PARTITION_QPX - INVALID = amdsmi_wrapper.COMPUTE_PARTITION_INVALID + CPX = amdsmi_wrapper.AMDSMI_COMPUTE_PARTITION_CPX + SPX = amdsmi_wrapper.AMDSMI_COMPUTE_PARTITION_SPX + DPX = amdsmi_wrapper.AMDSMI_COMPUTE_PARTITION_DPX + TPX = amdsmi_wrapper.AMDSMI_COMPUTE_PARTITION_TPX + QPX = amdsmi_wrapper.AMDSMI_COMPUTE_PARTITION_QPX + INVALID = amdsmi_wrapper.AMDSMI_COMPUTE_PARTITION_INVALID class AmdSmiMemoryPartitionType(IntEnum): - NPS1 = amdsmi_wrapper.MEMORY_PARTITION_NPS1 - NPS2 = amdsmi_wrapper.MEMORY_PARTITION_NPS2 - NPS4 = amdsmi_wrapper.MEMORY_PARTITION_NPS4 - NPS8 = amdsmi_wrapper.MEMORY_PARTITION_NPS8 - UNKNOWN = amdsmi_wrapper.MEMORY_PARTITION_UNKNOWN + NPS1 = amdsmi_wrapper.AMDSMI_MEMORY_PARTITION_NPS1 + NPS2 = amdsmi_wrapper.AMDSMI_MEMORY_PARTITION_NPS2 + NPS4 = amdsmi_wrapper.AMDSMI_MEMORY_PARTITION_NPS4 + NPS8 = amdsmi_wrapper.AMDSMI_MEMORY_PARTITION_NPS8 + UNKNOWN = amdsmi_wrapper.AMDSMI_MEMORY_PARTITION_UNKNOWN class AmdSmiPowerProfilePresetMasks(IntEnum): @@ -391,11 +391,11 @@ class AmdSmiUtilizationCounterType(IntEnum): class AmdSmiProcessorType(IntEnum): - UNKNOWN = amdsmi_wrapper.UNKNOWN - AMD_GPU = amdsmi_wrapper.AMD_GPU - AMD_CPU = amdsmi_wrapper.AMD_CPU - NON_AMD_GPU = amdsmi_wrapper.NON_AMD_GPU - NON_AMD_CPU = amdsmi_wrapper.NON_AMD_CPU + UNKNOWN = amdsmi_wrapper.AMDSMI_PROCESSOR_TYPE_UNKNOWN + AMDSMI_PROCESSOR_TYPE_AMD_GPU = amdsmi_wrapper.AMDSMI_PROCESSOR_TYPE_AMD_GPU + AMDSMI_PROCESSOR_TYPE_AMD_CPU = amdsmi_wrapper.AMDSMI_PROCESSOR_TYPE_AMD_CPU + AMDSMI_PROCESSOR_TYPE_NON_AMD_GPU = amdsmi_wrapper.AMDSMI_PROCESSOR_TYPE_NON_AMD_GPU + AMDSMI_PROCESSOR_TYPE_NON_AMD_CPU = amdsmi_wrapper.AMDSMI_PROCESSOR_TYPE_NON_AMD_CPU class AmdSmiEventReader: @@ -421,7 +421,8 @@ class AmdSmiEventReader: self.processor_handle = processor_handle mask = 0 for event_type in event_types: - mask |= (1 << (int(event_type) - 1)) + if event_type != AmdSmiEvtNotificationType.NONE: + mask |= (1 << (int(event_type) - 1)) _check_res(amdsmi_wrapper.amdsmi_init_gpu_event_notification(processor_handle)) _check_res(amdsmi_wrapper.amdsmi_set_gpu_event_notification_mask( @@ -513,10 +514,10 @@ def _format_bdf(amdsmi_bdf: amdsmi_wrapper.amdsmi_bdf_t) -> str: Returns: `str`: String containing BDF data in a readable format. """ - domain = hex(amdsmi_bdf.fields.domain_number)[2:].zfill(4) - bus = hex(amdsmi_bdf.fields.bus_number)[2:].zfill(2) - device = hex(amdsmi_bdf.fields.device_number)[2:].zfill(2) - function = hex(amdsmi_bdf.fields.function_number)[2:] + domain = hex(amdsmi_bdf.struct_amdsmi_bdf_t.domain_number)[2:].zfill(4) + bus = hex(amdsmi_bdf.struct_amdsmi_bdf_t.bus_number)[2:].zfill(2) + device = hex(amdsmi_bdf.struct_amdsmi_bdf_t.device_number)[2:].zfill(2) + function = hex(amdsmi_bdf.struct_amdsmi_bdf_t.function_number)[2:] return domain + ":" + bus + ":" + device + "." + function @@ -563,10 +564,10 @@ def _make_amdsmi_bdf_from_list(bdf): if len(bdf) != 4: return None amdsmi_bdf = amdsmi_wrapper.amdsmi_bdf_t() - amdsmi_bdf.fields.function_number = bdf[3] - amdsmi_bdf.fields.device_number = bdf[2] - amdsmi_bdf.fields.bus_number = bdf[1] - amdsmi_bdf.fields.domain_number = bdf[0] + amdsmi_bdf.struct_amdsmi_bdf_t.function_number = bdf[3] + amdsmi_bdf.struct_amdsmi_bdf_t.device_number = bdf[2] + amdsmi_bdf.struct_amdsmi_bdf_t.bus_number = bdf[1] + amdsmi_bdf.struct_amdsmi_bdf_t.domain_number = bdf[0] return amdsmi_bdf def _padHexValue(value, length): @@ -626,7 +627,7 @@ def amdsmi_get_cpusocket_handles() -> List[amdsmi_wrapper.amdsmi_socket_handle]: """ socket_handles = amdsmi_get_socket_handles() cpu_handles = [] - type = amdsmi_wrapper.AMD_CPU + type = amdsmi_wrapper.AMDSMI_PROCESSOR_TYPE_AMD_CPU for socket in socket_handles: cpu_count = ctypes.c_uint32() null_ptr = ctypes.POINTER(amdsmi_wrapper.amdsmi_processor_handle)() @@ -719,7 +720,7 @@ def amdsmi_get_processor_handles() -> List[amdsmi_wrapper.amdsmi_processor_handl def amdsmi_get_cpucore_handles() -> List[amdsmi_wrapper.amdsmi_processor_handle]: socket_handles = amdsmi_get_socket_handles() core_handles = [] - type = amdsmi_wrapper.AMD_CPU_CORE + type = amdsmi_wrapper.AMDSMI_PROCESSOR_TYPE_AMD_CPU_CORE for socket in socket_handles: core_count = ctypes.c_uint32() @@ -1709,7 +1710,7 @@ def amdsmi_get_gpu_vram_info( return { "vram_type": vram_info.vram_type, "vram_vendor": vram_info.vram_vendor, - "vram_size_mb": vram_info.vram_size_mb, + "vram_size": vram_info.vram_size, } @@ -1835,10 +1836,11 @@ def amdsmi_get_clock_info( ) return { - "cur_clk": clock_measure.cur_clk, - "max_clk": clock_measure.max_clk, + "clk": clock_measure.clk, "min_clk": clock_measure.min_clk, - "sleep_clk" : clock_measure.sleep_clk, + "max_clk": clock_measure.max_clk, + "clk_locked": clock_measure.clk_locked, + "clk_deep_sleep" : clock_measure.clk_deep_sleep, } @@ -2119,14 +2121,14 @@ def amdsmi_get_fw_info( _check_res(amdsmi_wrapper.amdsmi_get_fw_info( processor_handle, ctypes.byref(fw_info))) - hex_format_fw = [AmdSmiFwBlock.FW_ID_PSP_SOSDRV, - AmdSmiFwBlock.FW_ID_TA_RAS, - AmdSmiFwBlock.FW_ID_TA_XGMI, - AmdSmiFwBlock.FW_ID_UVD, - AmdSmiFwBlock.FW_ID_VCE, - AmdSmiFwBlock.FW_ID_VCN] + hex_format_fw = [AmdSmiFwBlock.AMDSMI_FW_ID_PSP_SOSDRV, + AmdSmiFwBlock.AMDSMI_FW_ID_TA_RAS, + AmdSmiFwBlock.AMDSMI_FW_ID_TA_XGMI, + AmdSmiFwBlock.AMDSMI_FW_ID_UVD, + AmdSmiFwBlock.AMDSMI_FW_ID_VCE, + AmdSmiFwBlock.AMDSMI_FW_ID_VCN] - dec_format_fw = [AmdSmiFwBlock.FW_ID_PM] + dec_format_fw = [AmdSmiFwBlock.AMDSMI_FW_ID_PM] firmwares = [] for i in range(0, fw_info.num_fw_info): @@ -2784,7 +2786,7 @@ def amdsmi_set_clk_freq( ) -def amdsmi_set_dpm_policy( +def amdsmi_set_soc_pstate( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, policy_id: int, ): @@ -2793,7 +2795,7 @@ def amdsmi_set_dpm_policy( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) _check_res( - amdsmi_wrapper.amdsmi_set_dpm_policy( + amdsmi_wrapper.amdsmi_set_soc_pstate( processor_handle, policy_id ) ) @@ -3403,7 +3405,7 @@ def amdsmi_get_clk_freq( } -def amdsmi_get_dpm_policy( +def amdsmi_get_soc_pstate( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, ) -> Dict[str, Any]: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): @@ -3413,7 +3415,7 @@ def amdsmi_get_dpm_policy( policy = amdsmi_wrapper.amdsmi_dpm_policy_t() _check_res( - amdsmi_wrapper.amdsmi_get_dpm_policy( + amdsmi_wrapper.amdsmi_get_soc_pstate( processor_handle, ctypes.byref(policy) ) ) diff --git a/projects/amdsmi/py-interface/amdsmi_wrapper.py b/projects/amdsmi/py-interface/amdsmi_wrapper.py index 11206dad40..a9255ee8b0 100644 --- a/projects/amdsmi/py-interface/amdsmi_wrapper.py +++ b/projects/amdsmi/py-interface/amdsmi_wrapper.py @@ -226,11 +226,11 @@ amdsmi_mm_ip_t = ctypes.c_uint32 # enum # values for enumeration 'amdsmi_container_types_t' amdsmi_container_types_t__enumvalues = { - 0: 'CONTAINER_LXC', - 1: 'CONTAINER_DOCKER', + 0: 'AMDSMI_CONTAINER_LXC', + 1: 'AMDSMI_CONTAINER_DOCKER', } -CONTAINER_LXC = 0 -CONTAINER_DOCKER = 1 +AMDSMI_CONTAINER_LXC = 0 +AMDSMI_CONTAINER_DOCKER = 1 amdsmi_container_types_t = ctypes.c_uint32 # enum amdsmi_processor_handle = ctypes.POINTER(None) amdsmi_socket_handle = ctypes.POINTER(None) @@ -238,21 +238,21 @@ amdsmi_cpusocket_handle = ctypes.POINTER(None) # values for enumeration 'processor_type_t' processor_type_t__enumvalues = { - 0: 'UNKNOWN', - 1: 'AMD_GPU', - 2: 'AMD_CPU', - 3: 'NON_AMD_GPU', - 4: 'NON_AMD_CPU', - 5: 'AMD_CPU_CORE', - 6: 'AMD_APU', + 0: 'AMDSMI_PROCESSOR_TYPE_UNKNOWN', + 1: 'AMDSMI_PROCESSOR_TYPE_AMD_GPU', + 2: 'AMDSMI_PROCESSOR_TYPE_AMD_CPU', + 3: 'AMDSMI_PROCESSOR_TYPE_NON_AMD_GPU', + 4: 'AMDSMI_PROCESSOR_TYPE_NON_AMD_CPU', + 5: 'AMDSMI_PROCESSOR_TYPE_AMD_CPU_CORE', + 6: 'AMDSMI_PROCESSOR_TYPE_AMD_APU', } -UNKNOWN = 0 -AMD_GPU = 1 -AMD_CPU = 2 -NON_AMD_GPU = 3 -NON_AMD_CPU = 4 -AMD_CPU_CORE = 5 -AMD_APU = 6 +AMDSMI_PROCESSOR_TYPE_UNKNOWN = 0 +AMDSMI_PROCESSOR_TYPE_AMD_GPU = 1 +AMDSMI_PROCESSOR_TYPE_AMD_CPU = 2 +AMDSMI_PROCESSOR_TYPE_NON_AMD_GPU = 3 +AMDSMI_PROCESSOR_TYPE_NON_AMD_CPU = 4 +AMDSMI_PROCESSOR_TYPE_AMD_CPU_CORE = 5 +AMDSMI_PROCESSOR_TYPE_AMD_APU = 6 processor_type_t = ctypes.c_uint32 # enum # values for enumeration 'amdsmi_status_t' @@ -287,15 +287,15 @@ amdsmi_status_t__enumvalues = { 42: 'AMDSMI_STATUS_UNEXPECTED_SIZE', 43: 'AMDSMI_STATUS_UNEXPECTED_DATA', 44: 'AMDSMI_STATUS_NON_AMD_CPU', - 45: 'AMDSMI_NO_ENERGY_DRV', - 46: 'AMDSMI_NO_MSR_DRV', - 47: 'AMDSMI_NO_HSMP_DRV', - 48: 'AMDSMI_NO_HSMP_SUP', - 49: 'AMDSMI_NO_HSMP_MSG_SUP', - 50: 'AMDSMI_HSMP_TIMEOUT', - 51: 'AMDSMI_NO_DRV', - 52: 'AMDSMI_FILE_NOT_FOUND', - 53: 'AMDSMI_ARG_PTR_NULL', + 45: 'AMDSMI_STATUS_NO_ENERGY_DRV', + 46: 'AMDSMI_STATUS_NO_MSR_DRV', + 47: 'AMDSMI_STATUS_NO_HSMP_DRV', + 48: 'AMDSMI_STATUS_NO_HSMP_SUP', + 49: 'AMDSMI_STATUS_NO_HSMP_MSG_SUP', + 50: 'AMDSMI_STATUS_HSMP_TIMEOUT', + 51: 'AMDSMI_STATUS_NO_DRV', + 52: 'AMDSMI_STATUS_FILE_NOT_FOUND', + 53: 'AMDSMI_STATUS_ARG_PTR_NULL', 54: 'AMDSMI_STATUS_AMDGPU_RESTART_ERR', 55: 'AMDSMI_STATUS_SETTING_UNAVAILABLE', 4294967294: 'AMDSMI_STATUS_MAP_ERROR', @@ -331,15 +331,15 @@ AMDSMI_STATUS_INSUFFICIENT_SIZE = 41 AMDSMI_STATUS_UNEXPECTED_SIZE = 42 AMDSMI_STATUS_UNEXPECTED_DATA = 43 AMDSMI_STATUS_NON_AMD_CPU = 44 -AMDSMI_NO_ENERGY_DRV = 45 -AMDSMI_NO_MSR_DRV = 46 -AMDSMI_NO_HSMP_DRV = 47 -AMDSMI_NO_HSMP_SUP = 48 -AMDSMI_NO_HSMP_MSG_SUP = 49 -AMDSMI_HSMP_TIMEOUT = 50 -AMDSMI_NO_DRV = 51 -AMDSMI_FILE_NOT_FOUND = 52 -AMDSMI_ARG_PTR_NULL = 53 +AMDSMI_STATUS_NO_ENERGY_DRV = 45 +AMDSMI_STATUS_NO_MSR_DRV = 46 +AMDSMI_STATUS_NO_HSMP_DRV = 47 +AMDSMI_STATUS_NO_HSMP_SUP = 48 +AMDSMI_STATUS_NO_HSMP_MSG_SUP = 49 +AMDSMI_STATUS_HSMP_TIMEOUT = 50 +AMDSMI_STATUS_NO_DRV = 51 +AMDSMI_STATUS_FILE_NOT_FOUND = 52 +AMDSMI_STATUS_ARG_PTR_NULL = 53 AMDSMI_STATUS_AMDGPU_RESTART_ERR = 54 AMDSMI_STATUS_SETTING_UNAVAILABLE = 55 AMDSMI_STATUS_MAP_ERROR = 4294967294 @@ -348,284 +348,294 @@ amdsmi_status_t = ctypes.c_uint32 # enum # values for enumeration 'amdsmi_clk_type_t' amdsmi_clk_type_t__enumvalues = { - 0: 'CLK_TYPE_SYS', - 0: 'CLK_TYPE_FIRST', - 0: 'CLK_TYPE_GFX', - 1: 'CLK_TYPE_DF', - 2: 'CLK_TYPE_DCEF', - 3: 'CLK_TYPE_SOC', - 4: 'CLK_TYPE_MEM', - 5: 'CLK_TYPE_PCIE', - 6: 'CLK_TYPE_VCLK0', - 7: 'CLK_TYPE_VCLK1', - 8: 'CLK_TYPE_DCLK0', - 9: 'CLK_TYPE_DCLK1', - 9: 'CLK_TYPE__MAX', + 0: 'AMDSMI_CLK_TYPE_SYS', + 0: 'AMDSMI_CLK_TYPE_FIRST', + 0: 'AMDSMI_CLK_TYPE_GFX', + 1: 'AMDSMI_CLK_TYPE_DF', + 2: 'AMDSMI_CLK_TYPE_DCEF', + 3: 'AMDSMI_CLK_TYPE_SOC', + 4: 'AMDSMI_CLK_TYPE_MEM', + 5: 'AMDSMI_CLK_TYPE_PCIE', + 6: 'AMDSMI_CLK_TYPE_VCLK0', + 7: 'AMDSMI_CLK_TYPE_VCLK1', + 8: 'AMDSMI_CLK_TYPE_DCLK0', + 9: 'AMDSMI_CLK_TYPE_DCLK1', + 9: 'AMDSMI_CLK_TYPE__MAX', } -CLK_TYPE_SYS = 0 -CLK_TYPE_FIRST = 0 -CLK_TYPE_GFX = 0 -CLK_TYPE_DF = 1 -CLK_TYPE_DCEF = 2 -CLK_TYPE_SOC = 3 -CLK_TYPE_MEM = 4 -CLK_TYPE_PCIE = 5 -CLK_TYPE_VCLK0 = 6 -CLK_TYPE_VCLK1 = 7 -CLK_TYPE_DCLK0 = 8 -CLK_TYPE_DCLK1 = 9 -CLK_TYPE__MAX = 9 +AMDSMI_CLK_TYPE_SYS = 0 +AMDSMI_CLK_TYPE_FIRST = 0 +AMDSMI_CLK_TYPE_GFX = 0 +AMDSMI_CLK_TYPE_DF = 1 +AMDSMI_CLK_TYPE_DCEF = 2 +AMDSMI_CLK_TYPE_SOC = 3 +AMDSMI_CLK_TYPE_MEM = 4 +AMDSMI_CLK_TYPE_PCIE = 5 +AMDSMI_CLK_TYPE_VCLK0 = 6 +AMDSMI_CLK_TYPE_VCLK1 = 7 +AMDSMI_CLK_TYPE_DCLK0 = 8 +AMDSMI_CLK_TYPE_DCLK1 = 9 +AMDSMI_CLK_TYPE__MAX = 9 amdsmi_clk_type_t = ctypes.c_uint32 # enum # values for enumeration 'amdsmi_compute_partition_type_t' amdsmi_compute_partition_type_t__enumvalues = { - 0: 'COMPUTE_PARTITION_INVALID', - 1: 'COMPUTE_PARTITION_CPX', - 2: 'COMPUTE_PARTITION_SPX', - 3: 'COMPUTE_PARTITION_DPX', - 4: 'COMPUTE_PARTITION_TPX', - 5: 'COMPUTE_PARTITION_QPX', + 0: 'AMDSMI_COMPUTE_PARTITION_INVALID', + 1: 'AMDSMI_COMPUTE_PARTITION_CPX', + 2: 'AMDSMI_COMPUTE_PARTITION_SPX', + 3: 'AMDSMI_COMPUTE_PARTITION_DPX', + 4: 'AMDSMI_COMPUTE_PARTITION_TPX', + 5: 'AMDSMI_COMPUTE_PARTITION_QPX', } -COMPUTE_PARTITION_INVALID = 0 -COMPUTE_PARTITION_CPX = 1 -COMPUTE_PARTITION_SPX = 2 -COMPUTE_PARTITION_DPX = 3 -COMPUTE_PARTITION_TPX = 4 -COMPUTE_PARTITION_QPX = 5 +AMDSMI_COMPUTE_PARTITION_INVALID = 0 +AMDSMI_COMPUTE_PARTITION_CPX = 1 +AMDSMI_COMPUTE_PARTITION_SPX = 2 +AMDSMI_COMPUTE_PARTITION_DPX = 3 +AMDSMI_COMPUTE_PARTITION_TPX = 4 +AMDSMI_COMPUTE_PARTITION_QPX = 5 amdsmi_compute_partition_type_t = ctypes.c_uint32 # enum # values for enumeration 'amdsmi_memory_partition_type_t' amdsmi_memory_partition_type_t__enumvalues = { - 0: 'MEMORY_PARTITION_UNKNOWN', - 1: 'MEMORY_PARTITION_NPS1', - 2: 'MEMORY_PARTITION_NPS2', - 3: 'MEMORY_PARTITION_NPS4', - 4: 'MEMORY_PARTITION_NPS8', + 0: 'AMDSMI_MEMORY_PARTITION_UNKNOWN', + 1: 'AMDSMI_MEMORY_PARTITION_NPS1', + 2: 'AMDSMI_MEMORY_PARTITION_NPS2', + 3: 'AMDSMI_MEMORY_PARTITION_NPS4', + 4: 'AMDSMI_MEMORY_PARTITION_NPS8', } -MEMORY_PARTITION_UNKNOWN = 0 -MEMORY_PARTITION_NPS1 = 1 -MEMORY_PARTITION_NPS2 = 2 -MEMORY_PARTITION_NPS4 = 3 -MEMORY_PARTITION_NPS8 = 4 +AMDSMI_MEMORY_PARTITION_UNKNOWN = 0 +AMDSMI_MEMORY_PARTITION_NPS1 = 1 +AMDSMI_MEMORY_PARTITION_NPS2 = 2 +AMDSMI_MEMORY_PARTITION_NPS4 = 3 +AMDSMI_MEMORY_PARTITION_NPS8 = 4 amdsmi_memory_partition_type_t = ctypes.c_uint32 # enum # values for enumeration 'amdsmi_temperature_type_t' amdsmi_temperature_type_t__enumvalues = { - 0: 'TEMPERATURE_TYPE_EDGE', - 0: 'TEMPERATURE_TYPE_FIRST', - 1: 'TEMPERATURE_TYPE_HOTSPOT', - 1: 'TEMPERATURE_TYPE_JUNCTION', - 2: 'TEMPERATURE_TYPE_VRAM', - 3: 'TEMPERATURE_TYPE_HBM_0', - 4: 'TEMPERATURE_TYPE_HBM_1', - 5: 'TEMPERATURE_TYPE_HBM_2', - 6: 'TEMPERATURE_TYPE_HBM_3', - 7: 'TEMPERATURE_TYPE_PLX', - 7: 'TEMPERATURE_TYPE__MAX', + 0: 'AMDSMI_TEMPERATURE_TYPE_EDGE', + 0: 'AMDSMI_TEMPERATURE_TYPE_FIRST', + 1: 'AMDSMI_TEMPERATURE_TYPE_HOTSPOT', + 1: 'AMDSMI_TEMPERATURE_TYPE_JUNCTION', + 2: 'AMDSMI_TEMPERATURE_TYPE_VRAM', + 3: 'AMDSMI_TEMPERATURE_TYPE_HBM_0', + 4: 'AMDSMI_TEMPERATURE_TYPE_HBM_1', + 5: 'AMDSMI_TEMPERATURE_TYPE_HBM_2', + 6: 'AMDSMI_TEMPERATURE_TYPE_HBM_3', + 7: 'AMDSMI_TEMPERATURE_TYPE_PLX', + 7: 'AMDSMI_TEMPERATURE_TYPE__MAX', } -TEMPERATURE_TYPE_EDGE = 0 -TEMPERATURE_TYPE_FIRST = 0 -TEMPERATURE_TYPE_HOTSPOT = 1 -TEMPERATURE_TYPE_JUNCTION = 1 -TEMPERATURE_TYPE_VRAM = 2 -TEMPERATURE_TYPE_HBM_0 = 3 -TEMPERATURE_TYPE_HBM_1 = 4 -TEMPERATURE_TYPE_HBM_2 = 5 -TEMPERATURE_TYPE_HBM_3 = 6 -TEMPERATURE_TYPE_PLX = 7 -TEMPERATURE_TYPE__MAX = 7 +AMDSMI_TEMPERATURE_TYPE_EDGE = 0 +AMDSMI_TEMPERATURE_TYPE_FIRST = 0 +AMDSMI_TEMPERATURE_TYPE_HOTSPOT = 1 +AMDSMI_TEMPERATURE_TYPE_JUNCTION = 1 +AMDSMI_TEMPERATURE_TYPE_VRAM = 2 +AMDSMI_TEMPERATURE_TYPE_HBM_0 = 3 +AMDSMI_TEMPERATURE_TYPE_HBM_1 = 4 +AMDSMI_TEMPERATURE_TYPE_HBM_2 = 5 +AMDSMI_TEMPERATURE_TYPE_HBM_3 = 6 +AMDSMI_TEMPERATURE_TYPE_PLX = 7 +AMDSMI_TEMPERATURE_TYPE__MAX = 7 amdsmi_temperature_type_t = ctypes.c_uint32 # enum # values for enumeration 'amdsmi_fw_block_t' amdsmi_fw_block_t__enumvalues = { - 1: 'FW_ID_SMU', - 1: 'FW_ID_FIRST', - 2: 'FW_ID_CP_CE', - 3: 'FW_ID_CP_PFP', - 4: 'FW_ID_CP_ME', - 5: 'FW_ID_CP_MEC_JT1', - 6: 'FW_ID_CP_MEC_JT2', - 7: 'FW_ID_CP_MEC1', - 8: 'FW_ID_CP_MEC2', - 9: 'FW_ID_RLC', - 10: 'FW_ID_SDMA0', - 11: 'FW_ID_SDMA1', - 12: 'FW_ID_SDMA2', - 13: 'FW_ID_SDMA3', - 14: 'FW_ID_SDMA4', - 15: 'FW_ID_SDMA5', - 16: 'FW_ID_SDMA6', - 17: 'FW_ID_SDMA7', - 18: 'FW_ID_VCN', - 19: 'FW_ID_UVD', - 20: 'FW_ID_VCE', - 21: 'FW_ID_ISP', - 22: 'FW_ID_DMCU_ERAM', - 23: 'FW_ID_DMCU_ISR', - 24: 'FW_ID_RLC_RESTORE_LIST_GPM_MEM', - 25: 'FW_ID_RLC_RESTORE_LIST_SRM_MEM', - 26: 'FW_ID_RLC_RESTORE_LIST_CNTL', - 27: 'FW_ID_RLC_V', - 28: 'FW_ID_MMSCH', - 29: 'FW_ID_PSP_SYSDRV', - 30: 'FW_ID_PSP_SOSDRV', - 31: 'FW_ID_PSP_TOC', - 32: 'FW_ID_PSP_KEYDB', - 33: 'FW_ID_DFC', - 34: 'FW_ID_PSP_SPL', - 35: 'FW_ID_DRV_CAP', - 36: 'FW_ID_MC', - 37: 'FW_ID_PSP_BL', - 38: 'FW_ID_CP_PM4', - 39: 'FW_ID_RLC_P', - 40: 'FW_ID_SEC_POLICY_STAGE2', - 41: 'FW_ID_REG_ACCESS_WHITELIST', - 42: 'FW_ID_IMU_DRAM', - 43: 'FW_ID_IMU_IRAM', - 44: 'FW_ID_SDMA_TH0', - 45: 'FW_ID_SDMA_TH1', - 46: 'FW_ID_CP_MES', - 47: 'FW_ID_MES_KIQ', - 48: 'FW_ID_MES_STACK', - 49: 'FW_ID_MES_THREAD1', - 50: 'FW_ID_MES_THREAD1_STACK', - 51: 'FW_ID_RLX6', - 52: 'FW_ID_RLX6_DRAM_BOOT', - 53: 'FW_ID_RS64_ME', - 54: 'FW_ID_RS64_ME_P0_DATA', - 55: 'FW_ID_RS64_ME_P1_DATA', - 56: 'FW_ID_RS64_PFP', - 57: 'FW_ID_RS64_PFP_P0_DATA', - 58: 'FW_ID_RS64_PFP_P1_DATA', - 59: 'FW_ID_RS64_MEC', - 60: 'FW_ID_RS64_MEC_P0_DATA', - 61: 'FW_ID_RS64_MEC_P1_DATA', - 62: 'FW_ID_RS64_MEC_P2_DATA', - 63: 'FW_ID_RS64_MEC_P3_DATA', - 64: 'FW_ID_PPTABLE', - 65: 'FW_ID_PSP_SOC', - 66: 'FW_ID_PSP_DBG', - 67: 'FW_ID_PSP_INTF', - 68: 'FW_ID_RLX6_CORE1', - 69: 'FW_ID_RLX6_DRAM_BOOT_CORE1', - 70: 'FW_ID_RLCV_LX7', - 71: 'FW_ID_RLC_SAVE_RESTORE_LIST', - 72: 'FW_ID_ASD', - 73: 'FW_ID_TA_RAS', - 74: 'FW_ID_TA_XGMI', - 75: 'FW_ID_RLC_SRLG', - 76: 'FW_ID_RLC_SRLS', - 77: 'FW_ID_PM', - 78: 'FW_ID_DMCU', - 79: 'FW_ID__MAX', + 1: 'AMDSMI_FW_ID_SMU', + 1: 'AMDSMI_FW_ID_FIRST', + 2: 'AMDSMI_FW_ID_CP_CE', + 3: 'AMDSMI_FW_ID_CP_PFP', + 4: 'AMDSMI_FW_ID_CP_ME', + 5: 'AMDSMI_FW_ID_CP_MEC_JT1', + 6: 'AMDSMI_FW_ID_CP_MEC_JT2', + 7: 'AMDSMI_FW_ID_CP_MEC1', + 8: 'AMDSMI_FW_ID_CP_MEC2', + 9: 'AMDSMI_FW_ID_RLC', + 10: 'AMDSMI_FW_ID_SDMA0', + 11: 'AMDSMI_FW_ID_SDMA1', + 12: 'AMDSMI_FW_ID_SDMA2', + 13: 'AMDSMI_FW_ID_SDMA3', + 14: 'AMDSMI_FW_ID_SDMA4', + 15: 'AMDSMI_FW_ID_SDMA5', + 16: 'AMDSMI_FW_ID_SDMA6', + 17: 'AMDSMI_FW_ID_SDMA7', + 18: 'AMDSMI_FW_ID_VCN', + 19: 'AMDSMI_FW_ID_UVD', + 20: 'AMDSMI_FW_ID_VCE', + 21: 'AMDSMI_FW_ID_ISP', + 22: 'AMDSMI_FW_ID_DMCU_ERAM', + 23: 'AMDSMI_FW_ID_DMCU_ISR', + 24: 'AMDSMI_FW_ID_RLC_RESTORE_LIST_GPM_MEM', + 25: 'AMDSMI_FW_ID_RLC_RESTORE_LIST_SRM_MEM', + 26: 'AMDSMI_FW_ID_RLC_RESTORE_LIST_CNTL', + 27: 'AMDSMI_FW_ID_RLC_V', + 28: 'AMDSMI_FW_ID_MMSCH', + 29: 'AMDSMI_FW_ID_PSP_SYSDRV', + 30: 'AMDSMI_FW_ID_PSP_SOSDRV', + 31: 'AMDSMI_FW_ID_PSP_TOC', + 32: 'AMDSMI_FW_ID_PSP_KEYDB', + 33: 'AMDSMI_FW_ID_DFC', + 34: 'AMDSMI_FW_ID_PSP_SPL', + 35: 'AMDSMI_FW_ID_DRV_CAP', + 36: 'AMDSMI_FW_ID_MC', + 37: 'AMDSMI_FW_ID_PSP_BL', + 38: 'AMDSMI_FW_ID_CP_PM4', + 39: 'AMDSMI_FW_ID_RLC_P', + 40: 'AMDSMI_FW_ID_SEC_POLICY_STAGE2', + 41: 'AMDSMI_FW_ID_REG_ACCESS_WHITELIST', + 42: 'AMDSMI_FW_ID_IMU_DRAM', + 43: 'AMDSMI_FW_ID_IMU_IRAM', + 44: 'AMDSMI_FW_ID_SDMA_TH0', + 45: 'AMDSMI_FW_ID_SDMA_TH1', + 46: 'AMDSMI_FW_ID_CP_MES', + 47: 'AMDSMI_FW_ID_MES_KIQ', + 48: 'AMDSMI_FW_ID_MES_STACK', + 49: 'AMDSMI_FW_ID_MES_THREAD1', + 50: 'AMDSMI_FW_ID_MES_THREAD1_STACK', + 51: 'AMDSMI_FW_ID_RLX6', + 52: 'AMDSMI_FW_ID_RLX6_DRAM_BOOT', + 53: 'AMDSMI_FW_ID_RS64_ME', + 54: 'AMDSMI_FW_ID_RS64_ME_P0_DATA', + 55: 'AMDSMI_FW_ID_RS64_ME_P1_DATA', + 56: 'AMDSMI_FW_ID_RS64_PFP', + 57: 'AMDSMI_FW_ID_RS64_PFP_P0_DATA', + 58: 'AMDSMI_FW_ID_RS64_PFP_P1_DATA', + 59: 'AMDSMI_FW_ID_RS64_MEC', + 60: 'AMDSMI_FW_ID_RS64_MEC_P0_DATA', + 61: 'AMDSMI_FW_ID_RS64_MEC_P1_DATA', + 62: 'AMDSMI_FW_ID_RS64_MEC_P2_DATA', + 63: 'AMDSMI_FW_ID_RS64_MEC_P3_DATA', + 64: 'AMDSMI_FW_ID_PPTABLE', + 65: 'AMDSMI_FW_ID_PSP_SOC', + 66: 'AMDSMI_FW_ID_PSP_DBG', + 67: 'AMDSMI_FW_ID_PSP_INTF', + 68: 'AMDSMI_FW_ID_RLX6_CORE1', + 69: 'AMDSMI_FW_ID_RLX6_DRAM_BOOT_CORE1', + 70: 'AMDSMI_FW_ID_RLCV_LX7', + 71: 'AMDSMI_FW_ID_RLC_SAVE_RESTORE_LIST', + 72: 'AMDSMI_FW_ID_ASD', + 73: 'AMDSMI_FW_ID_TA_RAS', + 74: 'AMDSMI_FW_ID_TA_XGMI', + 75: 'AMDSMI_FW_ID_RLC_SRLG', + 76: 'AMDSMI_FW_ID_RLC_SRLS', + 77: 'AMDSMI_FW_ID_PM', + 78: 'AMDSMI_FW_ID_DMCU', + 79: 'AMDSMI_FW_ID__MAX', } -FW_ID_SMU = 1 -FW_ID_FIRST = 1 -FW_ID_CP_CE = 2 -FW_ID_CP_PFP = 3 -FW_ID_CP_ME = 4 -FW_ID_CP_MEC_JT1 = 5 -FW_ID_CP_MEC_JT2 = 6 -FW_ID_CP_MEC1 = 7 -FW_ID_CP_MEC2 = 8 -FW_ID_RLC = 9 -FW_ID_SDMA0 = 10 -FW_ID_SDMA1 = 11 -FW_ID_SDMA2 = 12 -FW_ID_SDMA3 = 13 -FW_ID_SDMA4 = 14 -FW_ID_SDMA5 = 15 -FW_ID_SDMA6 = 16 -FW_ID_SDMA7 = 17 -FW_ID_VCN = 18 -FW_ID_UVD = 19 -FW_ID_VCE = 20 -FW_ID_ISP = 21 -FW_ID_DMCU_ERAM = 22 -FW_ID_DMCU_ISR = 23 -FW_ID_RLC_RESTORE_LIST_GPM_MEM = 24 -FW_ID_RLC_RESTORE_LIST_SRM_MEM = 25 -FW_ID_RLC_RESTORE_LIST_CNTL = 26 -FW_ID_RLC_V = 27 -FW_ID_MMSCH = 28 -FW_ID_PSP_SYSDRV = 29 -FW_ID_PSP_SOSDRV = 30 -FW_ID_PSP_TOC = 31 -FW_ID_PSP_KEYDB = 32 -FW_ID_DFC = 33 -FW_ID_PSP_SPL = 34 -FW_ID_DRV_CAP = 35 -FW_ID_MC = 36 -FW_ID_PSP_BL = 37 -FW_ID_CP_PM4 = 38 -FW_ID_RLC_P = 39 -FW_ID_SEC_POLICY_STAGE2 = 40 -FW_ID_REG_ACCESS_WHITELIST = 41 -FW_ID_IMU_DRAM = 42 -FW_ID_IMU_IRAM = 43 -FW_ID_SDMA_TH0 = 44 -FW_ID_SDMA_TH1 = 45 -FW_ID_CP_MES = 46 -FW_ID_MES_KIQ = 47 -FW_ID_MES_STACK = 48 -FW_ID_MES_THREAD1 = 49 -FW_ID_MES_THREAD1_STACK = 50 -FW_ID_RLX6 = 51 -FW_ID_RLX6_DRAM_BOOT = 52 -FW_ID_RS64_ME = 53 -FW_ID_RS64_ME_P0_DATA = 54 -FW_ID_RS64_ME_P1_DATA = 55 -FW_ID_RS64_PFP = 56 -FW_ID_RS64_PFP_P0_DATA = 57 -FW_ID_RS64_PFP_P1_DATA = 58 -FW_ID_RS64_MEC = 59 -FW_ID_RS64_MEC_P0_DATA = 60 -FW_ID_RS64_MEC_P1_DATA = 61 -FW_ID_RS64_MEC_P2_DATA = 62 -FW_ID_RS64_MEC_P3_DATA = 63 -FW_ID_PPTABLE = 64 -FW_ID_PSP_SOC = 65 -FW_ID_PSP_DBG = 66 -FW_ID_PSP_INTF = 67 -FW_ID_RLX6_CORE1 = 68 -FW_ID_RLX6_DRAM_BOOT_CORE1 = 69 -FW_ID_RLCV_LX7 = 70 -FW_ID_RLC_SAVE_RESTORE_LIST = 71 -FW_ID_ASD = 72 -FW_ID_TA_RAS = 73 -FW_ID_TA_XGMI = 74 -FW_ID_RLC_SRLG = 75 -FW_ID_RLC_SRLS = 76 -FW_ID_PM = 77 -FW_ID_DMCU = 78 -FW_ID__MAX = 79 +AMDSMI_FW_ID_SMU = 1 +AMDSMI_FW_ID_FIRST = 1 +AMDSMI_FW_ID_CP_CE = 2 +AMDSMI_FW_ID_CP_PFP = 3 +AMDSMI_FW_ID_CP_ME = 4 +AMDSMI_FW_ID_CP_MEC_JT1 = 5 +AMDSMI_FW_ID_CP_MEC_JT2 = 6 +AMDSMI_FW_ID_CP_MEC1 = 7 +AMDSMI_FW_ID_CP_MEC2 = 8 +AMDSMI_FW_ID_RLC = 9 +AMDSMI_FW_ID_SDMA0 = 10 +AMDSMI_FW_ID_SDMA1 = 11 +AMDSMI_FW_ID_SDMA2 = 12 +AMDSMI_FW_ID_SDMA3 = 13 +AMDSMI_FW_ID_SDMA4 = 14 +AMDSMI_FW_ID_SDMA5 = 15 +AMDSMI_FW_ID_SDMA6 = 16 +AMDSMI_FW_ID_SDMA7 = 17 +AMDSMI_FW_ID_VCN = 18 +AMDSMI_FW_ID_UVD = 19 +AMDSMI_FW_ID_VCE = 20 +AMDSMI_FW_ID_ISP = 21 +AMDSMI_FW_ID_DMCU_ERAM = 22 +AMDSMI_FW_ID_DMCU_ISR = 23 +AMDSMI_FW_ID_RLC_RESTORE_LIST_GPM_MEM = 24 +AMDSMI_FW_ID_RLC_RESTORE_LIST_SRM_MEM = 25 +AMDSMI_FW_ID_RLC_RESTORE_LIST_CNTL = 26 +AMDSMI_FW_ID_RLC_V = 27 +AMDSMI_FW_ID_MMSCH = 28 +AMDSMI_FW_ID_PSP_SYSDRV = 29 +AMDSMI_FW_ID_PSP_SOSDRV = 30 +AMDSMI_FW_ID_PSP_TOC = 31 +AMDSMI_FW_ID_PSP_KEYDB = 32 +AMDSMI_FW_ID_DFC = 33 +AMDSMI_FW_ID_PSP_SPL = 34 +AMDSMI_FW_ID_DRV_CAP = 35 +AMDSMI_FW_ID_MC = 36 +AMDSMI_FW_ID_PSP_BL = 37 +AMDSMI_FW_ID_CP_PM4 = 38 +AMDSMI_FW_ID_RLC_P = 39 +AMDSMI_FW_ID_SEC_POLICY_STAGE2 = 40 +AMDSMI_FW_ID_REG_ACCESS_WHITELIST = 41 +AMDSMI_FW_ID_IMU_DRAM = 42 +AMDSMI_FW_ID_IMU_IRAM = 43 +AMDSMI_FW_ID_SDMA_TH0 = 44 +AMDSMI_FW_ID_SDMA_TH1 = 45 +AMDSMI_FW_ID_CP_MES = 46 +AMDSMI_FW_ID_MES_KIQ = 47 +AMDSMI_FW_ID_MES_STACK = 48 +AMDSMI_FW_ID_MES_THREAD1 = 49 +AMDSMI_FW_ID_MES_THREAD1_STACK = 50 +AMDSMI_FW_ID_RLX6 = 51 +AMDSMI_FW_ID_RLX6_DRAM_BOOT = 52 +AMDSMI_FW_ID_RS64_ME = 53 +AMDSMI_FW_ID_RS64_ME_P0_DATA = 54 +AMDSMI_FW_ID_RS64_ME_P1_DATA = 55 +AMDSMI_FW_ID_RS64_PFP = 56 +AMDSMI_FW_ID_RS64_PFP_P0_DATA = 57 +AMDSMI_FW_ID_RS64_PFP_P1_DATA = 58 +AMDSMI_FW_ID_RS64_MEC = 59 +AMDSMI_FW_ID_RS64_MEC_P0_DATA = 60 +AMDSMI_FW_ID_RS64_MEC_P1_DATA = 61 +AMDSMI_FW_ID_RS64_MEC_P2_DATA = 62 +AMDSMI_FW_ID_RS64_MEC_P3_DATA = 63 +AMDSMI_FW_ID_PPTABLE = 64 +AMDSMI_FW_ID_PSP_SOC = 65 +AMDSMI_FW_ID_PSP_DBG = 66 +AMDSMI_FW_ID_PSP_INTF = 67 +AMDSMI_FW_ID_RLX6_CORE1 = 68 +AMDSMI_FW_ID_RLX6_DRAM_BOOT_CORE1 = 69 +AMDSMI_FW_ID_RLCV_LX7 = 70 +AMDSMI_FW_ID_RLC_SAVE_RESTORE_LIST = 71 +AMDSMI_FW_ID_ASD = 72 +AMDSMI_FW_ID_TA_RAS = 73 +AMDSMI_FW_ID_TA_XGMI = 74 +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_block_t = ctypes.c_uint32 # enum # values for enumeration 'amdsmi_vram_type_t' amdsmi_vram_type_t__enumvalues = { - 0: 'VRAM_TYPE_UNKNOWN', - 1: 'VRAM_TYPE_GDDR1', - 2: 'VRAM_TYPE_DDR2', - 3: 'VRAM_TYPE_GDDR3', - 4: 'VRAM_TYPE_GDDR4', - 5: 'VRAM_TYPE_GDDR5', - 6: 'VRAM_TYPE_HBM', - 7: 'VRAM_TYPE_DDR3', - 8: 'VRAM_TYPE_DDR4', - 9: 'VRAM_TYPE_GDDR6', - 9: 'VRAM_TYPE__MAX', + 0: 'AMDSMI_VRAM_TYPE_UNKNOWN', + 1: 'AMDSMI_VRAM_TYPE_HBM', + 2: 'AMDSMI_VRAM_TYPE_HBM2', + 3: 'AMDSMI_VRAM_TYPE_HBM2E', + 4: 'AMDSMI_VRAM_TYPE_HBM3', + 10: 'AMDSMI_VRAM_TYPE_DDR2', + 11: 'AMDSMI_VRAM_TYPE_DDR3', + 12: 'AMDSMI_VRAM_TYPE_DDR4', + 17: 'AMDSMI_VRAM_TYPE_GDDR1', + 18: 'AMDSMI_VRAM_TYPE_GDDR2', + 19: 'AMDSMI_VRAM_TYPE_GDDR3', + 20: 'AMDSMI_VRAM_TYPE_GDDR4', + 21: 'AMDSMI_VRAM_TYPE_GDDR5', + 22: 'AMDSMI_VRAM_TYPE_GDDR6', + 23: 'AMDSMI_VRAM_TYPE_GDDR7', + 23: 'AMDSMI_VRAM_TYPE__MAX', } -VRAM_TYPE_UNKNOWN = 0 -VRAM_TYPE_GDDR1 = 1 -VRAM_TYPE_DDR2 = 2 -VRAM_TYPE_GDDR3 = 3 -VRAM_TYPE_GDDR4 = 4 -VRAM_TYPE_GDDR5 = 5 -VRAM_TYPE_HBM = 6 -VRAM_TYPE_DDR3 = 7 -VRAM_TYPE_DDR4 = 8 -VRAM_TYPE_GDDR6 = 9 -VRAM_TYPE__MAX = 9 +AMDSMI_VRAM_TYPE_UNKNOWN = 0 +AMDSMI_VRAM_TYPE_HBM = 1 +AMDSMI_VRAM_TYPE_HBM2 = 2 +AMDSMI_VRAM_TYPE_HBM2E = 3 +AMDSMI_VRAM_TYPE_HBM3 = 4 +AMDSMI_VRAM_TYPE_DDR2 = 10 +AMDSMI_VRAM_TYPE_DDR3 = 11 +AMDSMI_VRAM_TYPE_DDR4 = 12 +AMDSMI_VRAM_TYPE_GDDR1 = 17 +AMDSMI_VRAM_TYPE_GDDR2 = 18 +AMDSMI_VRAM_TYPE_GDDR3 = 19 +AMDSMI_VRAM_TYPE_GDDR4 = 20 +AMDSMI_VRAM_TYPE_GDDR5 = 21 +AMDSMI_VRAM_TYPE_GDDR6 = 22 +AMDSMI_VRAM_TYPE_GDDR7 = 23 +AMDSMI_VRAM_TYPE__MAX = 23 amdsmi_vram_type_t = ctypes.c_uint32 # enum # values for enumeration 'amdsmi_vram_vendor_type_t' @@ -714,11 +724,11 @@ amdsmi_frequency_range_t = struct_amdsmi_frequency_range_t class union_amdsmi_bdf_t(Union): pass -class struct_fields_(Structure): +class struct_amdsmi_bdf_t(Structure): pass -struct_fields_._pack_ = 1 # source:False -struct_fields_._fields_ = [ +struct_amdsmi_bdf_t._pack_ = 1 # source:False +struct_amdsmi_bdf_t._fields_ = [ ('function_number', ctypes.c_uint64, 3), ('device_number', ctypes.c_uint64, 5), ('bus_number', ctypes.c_uint64, 8), @@ -726,8 +736,9 @@ struct_fields_._fields_ = [ ] union_amdsmi_bdf_t._pack_ = 1 # source:False + union_amdsmi_bdf_t._fields_ = [ - ('fields', struct_fields_), + ('struct_amdsmi_bdf_t', struct_amdsmi_bdf_t), ('as_uint', ctypes.c_uint64), ] @@ -748,19 +759,6 @@ amdsmi_card_form_factor_t = ctypes.c_uint32 # enum class struct_amdsmi_pcie_info_t(Structure): pass -class struct_pcie_static_(Structure): - pass - -struct_pcie_static_._pack_ = 1 # source:False -struct_pcie_static_._fields_ = [ - ('max_pcie_width', ctypes.c_uint16), - ('PADDING_0', ctypes.c_ubyte * 2), - ('max_pcie_speed', ctypes.c_uint32), - ('pcie_interface_version', ctypes.c_uint32), - ('slot_type', amdsmi_card_form_factor_t), - ('reserved', ctypes.c_uint64 * 10), -] - class struct_pcie_metric_(Structure): pass @@ -779,6 +777,19 @@ struct_pcie_metric_._fields_ = [ ('reserved', ctypes.c_uint64 * 13), ] +class struct_pcie_static_(Structure): + pass + +struct_pcie_static_._pack_ = 1 # source:False +struct_pcie_static_._fields_ = [ + ('max_pcie_width', ctypes.c_uint16), + ('PADDING_0', ctypes.c_ubyte * 2), + ('max_pcie_speed', ctypes.c_uint32), + ('pcie_interface_version', ctypes.c_uint32), + ('slot_type', amdsmi_card_form_factor_t), + ('reserved', ctypes.c_uint64 * 10), +] + struct_amdsmi_pcie_info_t._pack_ = 1 # source:False struct_amdsmi_pcie_info_t._fields_ = [ ('pcie_static', struct_pcie_static_), @@ -941,7 +952,8 @@ struct_amdsmi_vram_info_t._pack_ = 1 # source:False struct_amdsmi_vram_info_t._fields_ = [ ('vram_type', amdsmi_vram_type_t), ('vram_vendor', amdsmi_vram_vendor_type_t), - ('vram_size_mb', ctypes.c_uint64), + ('vram_size', ctypes.c_uint64), + ('reserved', ctypes.c_uint64 * 6), ] amdsmi_vram_info_t = struct_amdsmi_vram_info_t @@ -990,10 +1002,12 @@ class struct_amdsmi_clk_info_t(Structure): struct_amdsmi_clk_info_t._pack_ = 1 # source:False struct_amdsmi_clk_info_t._fields_ = [ - ('cur_clk', ctypes.c_uint32), + ('clk', ctypes.c_uint32), ('min_clk', ctypes.c_uint32), ('max_clk', ctypes.c_uint32), - ('sleep_clk', ctypes.c_uint32), + ('clk_locked', ctypes.c_ubyte), + ('clk_deep_sleep', ctypes.c_ubyte), + ('PADDING_0', ctypes.c_ubyte * 2), ('reserved', ctypes.c_uint32 * 4), ] @@ -1505,7 +1519,7 @@ struct_amdsmi_dpm_policy_entry_t._fields_ = [ ('policy_description', ctypes.c_char * 32), ] -amdsmi_dpm_policy_entry_t = struct_amdsmi_dpm_policy_entry_t +struct_amdsmi_dpm_policy_entry_t = struct_amdsmi_dpm_policy_entry_t class struct_amdsmi_dpm_policy_t(Structure): pass @@ -2068,12 +2082,12 @@ amdsmi_set_gpu_overdrive_level.argtypes = [amdsmi_processor_handle, uint32_t] amdsmi_set_clk_freq = _libraries['libamd_smi.so'].amdsmi_set_clk_freq amdsmi_set_clk_freq.restype = amdsmi_status_t amdsmi_set_clk_freq.argtypes = [amdsmi_processor_handle, amdsmi_clk_type_t, uint64_t] -amdsmi_get_dpm_policy = _libraries['libamd_smi.so'].amdsmi_get_dpm_policy -amdsmi_get_dpm_policy.restype = amdsmi_status_t -amdsmi_get_dpm_policy.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_dpm_policy_t)] -amdsmi_set_dpm_policy = _libraries['libamd_smi.so'].amdsmi_set_dpm_policy -amdsmi_set_dpm_policy.restype = amdsmi_status_t -amdsmi_set_dpm_policy.argtypes = [amdsmi_processor_handle, uint32_t] +amdsmi_get_soc_pstate = _libraries['libamd_smi.so'].amdsmi_get_soc_pstate +amdsmi_get_soc_pstate.restype = amdsmi_status_t +amdsmi_get_soc_pstate.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_dpm_policy_t)] +amdsmi_set_soc_pstate = _libraries['libamd_smi.so'].amdsmi_set_soc_pstate +amdsmi_set_soc_pstate.restype = amdsmi_status_t +amdsmi_set_soc_pstate.argtypes = [amdsmi_processor_handle, uint32_t] amdsmi_get_xgmi_plpd = _libraries['libamd_smi.so'].amdsmi_get_xgmi_plpd amdsmi_get_xgmi_plpd.restype = amdsmi_status_t amdsmi_get_xgmi_plpd.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_dpm_policy_t)] @@ -2364,16 +2378,28 @@ amdsmi_get_esmi_err_msg = _libraries['libamd_smi.so'].amdsmi_get_esmi_err_msg amdsmi_get_esmi_err_msg.restype = amdsmi_status_t amdsmi_get_esmi_err_msg.argtypes = [amdsmi_status_t, ctypes.POINTER(ctypes.POINTER(ctypes.c_char))] __all__ = \ - ['AGG_BW0', 'AMDSMI_ARG_PTR_NULL', 'AMDSMI_AVERAGE_POWER', + ['AGG_BW0', 'AMDSMI_AVERAGE_POWER', 'AMDSMI_CACHE_PROPERTY_CPU_CACHE', 'AMDSMI_CACHE_PROPERTY_DATA_CACHE', 'AMDSMI_CACHE_PROPERTY_ENABLED', 'AMDSMI_CACHE_PROPERTY_INST_CACHE', 'AMDSMI_CACHE_PROPERTY_SIMD_CACHE', 'AMDSMI_CARD_FORM_FACTOR_CEM', 'AMDSMI_CARD_FORM_FACTOR_OAM', 'AMDSMI_CARD_FORM_FACTOR_PCIE', - 'AMDSMI_CARD_FORM_FACTOR_UNKNOWN', 'AMDSMI_CNTR_CMD_START', - 'AMDSMI_CNTR_CMD_STOP', 'AMDSMI_COARSE_GRAIN_GFX_ACTIVITY', - 'AMDSMI_COARSE_GRAIN_MEM_ACTIVITY', 'AMDSMI_CURRENT_POWER', + 'AMDSMI_CARD_FORM_FACTOR_UNKNOWN', 'AMDSMI_CLK_TYPE_DCEF', + 'AMDSMI_CLK_TYPE_DCLK0', 'AMDSMI_CLK_TYPE_DCLK1', + 'AMDSMI_CLK_TYPE_DF', 'AMDSMI_CLK_TYPE_FIRST', + 'AMDSMI_CLK_TYPE_GFX', 'AMDSMI_CLK_TYPE_MEM', + 'AMDSMI_CLK_TYPE_PCIE', 'AMDSMI_CLK_TYPE_SOC', + 'AMDSMI_CLK_TYPE_SYS', 'AMDSMI_CLK_TYPE_VCLK0', + 'AMDSMI_CLK_TYPE_VCLK1', 'AMDSMI_CLK_TYPE__MAX', + 'AMDSMI_CNTR_CMD_START', 'AMDSMI_CNTR_CMD_STOP', + 'AMDSMI_COARSE_GRAIN_GFX_ACTIVITY', + 'AMDSMI_COARSE_GRAIN_MEM_ACTIVITY', + 'AMDSMI_COMPUTE_PARTITION_CPX', 'AMDSMI_COMPUTE_PARTITION_DPX', + 'AMDSMI_COMPUTE_PARTITION_INVALID', + 'AMDSMI_COMPUTE_PARTITION_QPX', 'AMDSMI_COMPUTE_PARTITION_SPX', + 'AMDSMI_COMPUTE_PARTITION_TPX', 'AMDSMI_CONTAINER_DOCKER', + 'AMDSMI_CONTAINER_LXC', 'AMDSMI_CURRENT_POWER', 'AMDSMI_DEV_PERF_LEVEL_AUTO', 'AMDSMI_DEV_PERF_LEVEL_DETERMINISM', 'AMDSMI_DEV_PERF_LEVEL_FIRST', 'AMDSMI_DEV_PERF_LEVEL_HIGH', 'AMDSMI_DEV_PERF_LEVEL_LAST', 'AMDSMI_DEV_PERF_LEVEL_LOW', @@ -2399,8 +2425,45 @@ __all__ = \ 'AMDSMI_EVT_NOTIF_GPU_PRE_RESET', 'AMDSMI_EVT_NOTIF_LAST', 'AMDSMI_EVT_NOTIF_NONE', 'AMDSMI_EVT_NOTIF_RING_HANG', 'AMDSMI_EVT_NOTIF_THERMAL_THROTTLE', 'AMDSMI_EVT_NOTIF_VMFAULT', - 'AMDSMI_FILE_NOT_FOUND', 'AMDSMI_FREQ_IND_INVALID', - 'AMDSMI_FREQ_IND_MAX', 'AMDSMI_FREQ_IND_MIN', + 'AMDSMI_FREQ_IND_INVALID', 'AMDSMI_FREQ_IND_MAX', + 'AMDSMI_FREQ_IND_MIN', 'AMDSMI_FW_ID_ASD', 'AMDSMI_FW_ID_CP_CE', + 'AMDSMI_FW_ID_CP_ME', 'AMDSMI_FW_ID_CP_MEC1', + 'AMDSMI_FW_ID_CP_MEC2', 'AMDSMI_FW_ID_CP_MEC_JT1', + 'AMDSMI_FW_ID_CP_MEC_JT2', 'AMDSMI_FW_ID_CP_MES', + 'AMDSMI_FW_ID_CP_PFP', 'AMDSMI_FW_ID_CP_PM4', 'AMDSMI_FW_ID_DFC', + 'AMDSMI_FW_ID_DMCU', 'AMDSMI_FW_ID_DMCU_ERAM', + 'AMDSMI_FW_ID_DMCU_ISR', 'AMDSMI_FW_ID_DRV_CAP', + 'AMDSMI_FW_ID_FIRST', 'AMDSMI_FW_ID_IMU_DRAM', + 'AMDSMI_FW_ID_IMU_IRAM', '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_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', 'AMDSMI_FW_ID_PSP_SYSDRV', + 'AMDSMI_FW_ID_PSP_TOC', 'AMDSMI_FW_ID_REG_ACCESS_WHITELIST', + 'AMDSMI_FW_ID_RLC', 'AMDSMI_FW_ID_RLCV_LX7', 'AMDSMI_FW_ID_RLC_P', + 'AMDSMI_FW_ID_RLC_RESTORE_LIST_CNTL', + 'AMDSMI_FW_ID_RLC_RESTORE_LIST_GPM_MEM', + 'AMDSMI_FW_ID_RLC_RESTORE_LIST_SRM_MEM', + 'AMDSMI_FW_ID_RLC_SAVE_RESTORE_LIST', 'AMDSMI_FW_ID_RLC_SRLG', + 'AMDSMI_FW_ID_RLC_SRLS', 'AMDSMI_FW_ID_RLC_V', + 'AMDSMI_FW_ID_RLX6', 'AMDSMI_FW_ID_RLX6_CORE1', + 'AMDSMI_FW_ID_RLX6_DRAM_BOOT', + 'AMDSMI_FW_ID_RLX6_DRAM_BOOT_CORE1', 'AMDSMI_FW_ID_RS64_ME', + 'AMDSMI_FW_ID_RS64_MEC', 'AMDSMI_FW_ID_RS64_MEC_P0_DATA', + 'AMDSMI_FW_ID_RS64_MEC_P1_DATA', 'AMDSMI_FW_ID_RS64_MEC_P2_DATA', + 'AMDSMI_FW_ID_RS64_MEC_P3_DATA', 'AMDSMI_FW_ID_RS64_ME_P0_DATA', + 'AMDSMI_FW_ID_RS64_ME_P1_DATA', 'AMDSMI_FW_ID_RS64_PFP', + 'AMDSMI_FW_ID_RS64_PFP_P0_DATA', 'AMDSMI_FW_ID_RS64_PFP_P1_DATA', + 'AMDSMI_FW_ID_SDMA0', 'AMDSMI_FW_ID_SDMA1', 'AMDSMI_FW_ID_SDMA2', + 'AMDSMI_FW_ID_SDMA3', 'AMDSMI_FW_ID_SDMA4', 'AMDSMI_FW_ID_SDMA5', + 'AMDSMI_FW_ID_SDMA6', 'AMDSMI_FW_ID_SDMA7', + 'AMDSMI_FW_ID_SDMA_TH0', 'AMDSMI_FW_ID_SDMA_TH1', + 'AMDSMI_FW_ID_SEC_POLICY_STAGE2', 'AMDSMI_FW_ID_SMU', + 'AMDSMI_FW_ID_TA_RAS', 'AMDSMI_FW_ID_TA_XGMI', 'AMDSMI_FW_ID_UVD', + 'AMDSMI_FW_ID_VCE', 'AMDSMI_FW_ID_VCN', 'AMDSMI_FW_ID__MAX', 'AMDSMI_GPU_BLOCK_ATHUB', 'AMDSMI_GPU_BLOCK_DF', 'AMDSMI_GPU_BLOCK_FIRST', 'AMDSMI_GPU_BLOCK_FUSE', 'AMDSMI_GPU_BLOCK_GFX', 'AMDSMI_GPU_BLOCK_HDP', @@ -2412,24 +2475,31 @@ __all__ = \ 'AMDSMI_GPU_BLOCK_RESERVED', 'AMDSMI_GPU_BLOCK_SDMA', 'AMDSMI_GPU_BLOCK_SEM', 'AMDSMI_GPU_BLOCK_SMN', 'AMDSMI_GPU_BLOCK_UMC', 'AMDSMI_GPU_BLOCK_VCN', - 'AMDSMI_GPU_BLOCK_XGMI_WAFL', 'AMDSMI_HSMP_TIMEOUT', - 'AMDSMI_INIT_ALL_PROCESSORS', 'AMDSMI_INIT_AMD_APUS', - 'AMDSMI_INIT_AMD_CPUS', 'AMDSMI_INIT_AMD_GPUS', - 'AMDSMI_INIT_NON_AMD_CPUS', 'AMDSMI_INIT_NON_AMD_GPUS', - 'AMDSMI_INVALID_POWER', 'AMDSMI_IOLINK_TYPE_NUMIOLINKTYPES', + 'AMDSMI_GPU_BLOCK_XGMI_WAFL', 'AMDSMI_INIT_ALL_PROCESSORS', + 'AMDSMI_INIT_AMD_APUS', 'AMDSMI_INIT_AMD_CPUS', + 'AMDSMI_INIT_AMD_GPUS', 'AMDSMI_INIT_NON_AMD_CPUS', + 'AMDSMI_INIT_NON_AMD_GPUS', 'AMDSMI_INVALID_POWER', + 'AMDSMI_IOLINK_TYPE_NUMIOLINKTYPES', 'AMDSMI_IOLINK_TYPE_PCIEXPRESS', 'AMDSMI_IOLINK_TYPE_SIZE', 'AMDSMI_IOLINK_TYPE_UNDEFINED', 'AMDSMI_IOLINK_TYPE_XGMI', 'AMDSMI_LINK_TYPE_NOT_APPLICABLE', 'AMDSMI_LINK_TYPE_PCIE', 'AMDSMI_LINK_TYPE_UNKNOWN', 'AMDSMI_LINK_TYPE_XGMI', + 'AMDSMI_MEMORY_PARTITION_NPS1', 'AMDSMI_MEMORY_PARTITION_NPS2', + 'AMDSMI_MEMORY_PARTITION_NPS4', 'AMDSMI_MEMORY_PARTITION_NPS8', + 'AMDSMI_MEMORY_PARTITION_UNKNOWN', 'AMDSMI_MEM_PAGE_STATUS_PENDING', 'AMDSMI_MEM_PAGE_STATUS_RESERVED', 'AMDSMI_MEM_PAGE_STATUS_UNRESERVABLE', 'AMDSMI_MEM_TYPE_FIRST', 'AMDSMI_MEM_TYPE_GTT', 'AMDSMI_MEM_TYPE_LAST', 'AMDSMI_MEM_TYPE_VIS_VRAM', 'AMDSMI_MEM_TYPE_VRAM', 'AMDSMI_MM_UVD', 'AMDSMI_MM_VCE', 'AMDSMI_MM_VCN', - 'AMDSMI_MM__MAX', 'AMDSMI_NO_DRV', 'AMDSMI_NO_ENERGY_DRV', - 'AMDSMI_NO_HSMP_DRV', 'AMDSMI_NO_HSMP_MSG_SUP', - 'AMDSMI_NO_HSMP_SUP', 'AMDSMI_NO_MSR_DRV', + 'AMDSMI_MM__MAX', 'AMDSMI_PROCESSOR_TYPE_AMD_APU', + 'AMDSMI_PROCESSOR_TYPE_AMD_CPU', + 'AMDSMI_PROCESSOR_TYPE_AMD_CPU_CORE', + 'AMDSMI_PROCESSOR_TYPE_AMD_GPU', + 'AMDSMI_PROCESSOR_TYPE_NON_AMD_CPU', + 'AMDSMI_PROCESSOR_TYPE_NON_AMD_GPU', + 'AMDSMI_PROCESSOR_TYPE_UNKNOWN', 'AMDSMI_PWR_PROF_PRST_3D_FULL_SCR_MASK', 'AMDSMI_PWR_PROF_PRST_BOOTUP_DEFAULT', 'AMDSMI_PWR_PROF_PRST_COMPUTE_MASK', @@ -2445,9 +2515,11 @@ __all__ = \ 'AMDSMI_REG_USR', 'AMDSMI_REG_USR1', 'AMDSMI_REG_WAFL', 'AMDSMI_REG_XGMI', 'AMDSMI_STATUS_ADDRESS_FAULT', 'AMDSMI_STATUS_AMDGPU_RESTART_ERR', 'AMDSMI_STATUS_API_FAILED', - 'AMDSMI_STATUS_BUSY', 'AMDSMI_STATUS_DRIVER_NOT_LOADED', - 'AMDSMI_STATUS_DRM_ERROR', 'AMDSMI_STATUS_FAIL_LOAD_MODULE', + 'AMDSMI_STATUS_ARG_PTR_NULL', 'AMDSMI_STATUS_BUSY', + 'AMDSMI_STATUS_DRIVER_NOT_LOADED', 'AMDSMI_STATUS_DRM_ERROR', + 'AMDSMI_STATUS_FAIL_LOAD_MODULE', 'AMDSMI_STATUS_FAIL_LOAD_SYMBOL', 'AMDSMI_STATUS_FILE_ERROR', + 'AMDSMI_STATUS_FILE_NOT_FOUND', 'AMDSMI_STATUS_HSMP_TIMEOUT', 'AMDSMI_STATUS_INIT_ERROR', 'AMDSMI_STATUS_INPUT_OUT_OF_BOUNDS', 'AMDSMI_STATUS_INSUFFICIENT_SIZE', 'AMDSMI_STATUS_INTERNAL_EXCEPTION', 'AMDSMI_STATUS_INTERRUPT', @@ -2456,12 +2528,21 @@ __all__ = \ 'AMDSMI_STATUS_NOT_FOUND', 'AMDSMI_STATUS_NOT_INIT', 'AMDSMI_STATUS_NOT_SUPPORTED', 'AMDSMI_STATUS_NOT_YET_IMPLEMENTED', 'AMDSMI_STATUS_NO_DATA', + 'AMDSMI_STATUS_NO_DRV', 'AMDSMI_STATUS_NO_ENERGY_DRV', + 'AMDSMI_STATUS_NO_HSMP_DRV', 'AMDSMI_STATUS_NO_HSMP_MSG_SUP', + 'AMDSMI_STATUS_NO_HSMP_SUP', 'AMDSMI_STATUS_NO_MSR_DRV', 'AMDSMI_STATUS_NO_PERM', 'AMDSMI_STATUS_NO_SLOT', 'AMDSMI_STATUS_OUT_OF_RESOURCES', 'AMDSMI_STATUS_REFCOUNT_OVERFLOW', 'AMDSMI_STATUS_RETRY', 'AMDSMI_STATUS_SETTING_UNAVAILABLE', 'AMDSMI_STATUS_SUCCESS', 'AMDSMI_STATUS_TIMEOUT', 'AMDSMI_STATUS_UNEXPECTED_DATA', 'AMDSMI_STATUS_UNEXPECTED_SIZE', 'AMDSMI_STATUS_UNKNOWN_ERROR', + 'AMDSMI_TEMPERATURE_TYPE_EDGE', 'AMDSMI_TEMPERATURE_TYPE_FIRST', + 'AMDSMI_TEMPERATURE_TYPE_HBM_0', 'AMDSMI_TEMPERATURE_TYPE_HBM_1', + 'AMDSMI_TEMPERATURE_TYPE_HBM_2', 'AMDSMI_TEMPERATURE_TYPE_HBM_3', + 'AMDSMI_TEMPERATURE_TYPE_HOTSPOT', + 'AMDSMI_TEMPERATURE_TYPE_JUNCTION', 'AMDSMI_TEMPERATURE_TYPE_PLX', + 'AMDSMI_TEMPERATURE_TYPE_VRAM', 'AMDSMI_TEMPERATURE_TYPE__MAX', 'AMDSMI_TEMP_CRITICAL', 'AMDSMI_TEMP_CRITICAL_HYST', 'AMDSMI_TEMP_CRIT_MIN', 'AMDSMI_TEMP_CRIT_MIN_HYST', 'AMDSMI_TEMP_CURRENT', 'AMDSMI_TEMP_EMERGENCY', @@ -2476,6 +2557,14 @@ __all__ = \ 'AMDSMI_VOLT_MAX_CRIT', 'AMDSMI_VOLT_MIN', 'AMDSMI_VOLT_MIN_CRIT', 'AMDSMI_VOLT_TYPE_FIRST', 'AMDSMI_VOLT_TYPE_INVALID', 'AMDSMI_VOLT_TYPE_LAST', 'AMDSMI_VOLT_TYPE_VDDGFX', + 'AMDSMI_VRAM_TYPE_DDR2', 'AMDSMI_VRAM_TYPE_DDR3', + 'AMDSMI_VRAM_TYPE_DDR4', 'AMDSMI_VRAM_TYPE_GDDR1', + 'AMDSMI_VRAM_TYPE_GDDR2', 'AMDSMI_VRAM_TYPE_GDDR3', + 'AMDSMI_VRAM_TYPE_GDDR4', 'AMDSMI_VRAM_TYPE_GDDR5', + 'AMDSMI_VRAM_TYPE_GDDR6', 'AMDSMI_VRAM_TYPE_GDDR7', + 'AMDSMI_VRAM_TYPE_HBM', 'AMDSMI_VRAM_TYPE_HBM2', + 'AMDSMI_VRAM_TYPE_HBM2E', 'AMDSMI_VRAM_TYPE_HBM3', + 'AMDSMI_VRAM_TYPE_UNKNOWN', 'AMDSMI_VRAM_TYPE__MAX', 'AMDSMI_VRAM_VENDOR__ELPIDA', 'AMDSMI_VRAM_VENDOR__ESMT', 'AMDSMI_VRAM_VENDOR__ETRON', 'AMDSMI_VRAM_VENDOR__HYNIX', 'AMDSMI_VRAM_VENDOR__INFINEON', 'AMDSMI_VRAM_VENDOR__MICRON', @@ -2488,68 +2577,22 @@ __all__ = \ 'AMDSMI_VRAM_VENDOR__PLACEHOLDER5', 'AMDSMI_VRAM_VENDOR__SAMSUNG', 'AMDSMI_VRAM_VENDOR__WINBOND', 'AMDSMI_XGMI_STATUS_ERROR', 'AMDSMI_XGMI_STATUS_MULTIPLE_ERRORS', - 'AMDSMI_XGMI_STATUS_NO_ERRORS', 'AMD_APU', 'AMD_CPU', - 'AMD_CPU_CORE', 'AMD_GPU', 'CLK_TYPE_DCEF', 'CLK_TYPE_DCLK0', - 'CLK_TYPE_DCLK1', 'CLK_TYPE_DF', 'CLK_TYPE_FIRST', 'CLK_TYPE_GFX', - 'CLK_TYPE_MEM', 'CLK_TYPE_PCIE', 'CLK_TYPE_SOC', 'CLK_TYPE_SYS', - 'CLK_TYPE_VCLK0', 'CLK_TYPE_VCLK1', 'CLK_TYPE__MAX', - 'COMPUTE_PARTITION_CPX', 'COMPUTE_PARTITION_DPX', - 'COMPUTE_PARTITION_INVALID', 'COMPUTE_PARTITION_QPX', - 'COMPUTE_PARTITION_SPX', 'COMPUTE_PARTITION_TPX', - 'CONTAINER_DOCKER', 'CONTAINER_LXC', 'FW_ID_ASD', 'FW_ID_CP_CE', - 'FW_ID_CP_ME', 'FW_ID_CP_MEC1', 'FW_ID_CP_MEC2', - 'FW_ID_CP_MEC_JT1', 'FW_ID_CP_MEC_JT2', 'FW_ID_CP_MES', - 'FW_ID_CP_PFP', 'FW_ID_CP_PM4', 'FW_ID_DFC', 'FW_ID_DMCU', - 'FW_ID_DMCU_ERAM', 'FW_ID_DMCU_ISR', 'FW_ID_DRV_CAP', - 'FW_ID_FIRST', 'FW_ID_IMU_DRAM', 'FW_ID_IMU_IRAM', 'FW_ID_ISP', - 'FW_ID_MC', 'FW_ID_MES_KIQ', 'FW_ID_MES_STACK', - 'FW_ID_MES_THREAD1', 'FW_ID_MES_THREAD1_STACK', 'FW_ID_MMSCH', - 'FW_ID_PM', 'FW_ID_PPTABLE', 'FW_ID_PSP_BL', 'FW_ID_PSP_DBG', - 'FW_ID_PSP_INTF', 'FW_ID_PSP_KEYDB', 'FW_ID_PSP_SOC', - 'FW_ID_PSP_SOSDRV', 'FW_ID_PSP_SPL', 'FW_ID_PSP_SYSDRV', - 'FW_ID_PSP_TOC', 'FW_ID_REG_ACCESS_WHITELIST', 'FW_ID_RLC', - 'FW_ID_RLCV_LX7', 'FW_ID_RLC_P', 'FW_ID_RLC_RESTORE_LIST_CNTL', - 'FW_ID_RLC_RESTORE_LIST_GPM_MEM', - 'FW_ID_RLC_RESTORE_LIST_SRM_MEM', 'FW_ID_RLC_SAVE_RESTORE_LIST', - 'FW_ID_RLC_SRLG', 'FW_ID_RLC_SRLS', 'FW_ID_RLC_V', 'FW_ID_RLX6', - 'FW_ID_RLX6_CORE1', 'FW_ID_RLX6_DRAM_BOOT', - 'FW_ID_RLX6_DRAM_BOOT_CORE1', 'FW_ID_RS64_ME', 'FW_ID_RS64_MEC', - 'FW_ID_RS64_MEC_P0_DATA', 'FW_ID_RS64_MEC_P1_DATA', - 'FW_ID_RS64_MEC_P2_DATA', 'FW_ID_RS64_MEC_P3_DATA', - 'FW_ID_RS64_ME_P0_DATA', 'FW_ID_RS64_ME_P1_DATA', - 'FW_ID_RS64_PFP', 'FW_ID_RS64_PFP_P0_DATA', - 'FW_ID_RS64_PFP_P1_DATA', 'FW_ID_SDMA0', 'FW_ID_SDMA1', - 'FW_ID_SDMA2', 'FW_ID_SDMA3', 'FW_ID_SDMA4', 'FW_ID_SDMA5', - 'FW_ID_SDMA6', 'FW_ID_SDMA7', 'FW_ID_SDMA_TH0', 'FW_ID_SDMA_TH1', - 'FW_ID_SEC_POLICY_STAGE2', 'FW_ID_SMU', 'FW_ID_TA_RAS', - 'FW_ID_TA_XGMI', 'FW_ID_UVD', 'FW_ID_VCE', 'FW_ID_VCN', - 'FW_ID__MAX', 'MEMORY_PARTITION_NPS1', 'MEMORY_PARTITION_NPS2', - 'MEMORY_PARTITION_NPS4', 'MEMORY_PARTITION_NPS8', - 'MEMORY_PARTITION_UNKNOWN', 'NON_AMD_CPU', 'NON_AMD_GPU', - 'RD_BW0', 'TEMPERATURE_TYPE_EDGE', 'TEMPERATURE_TYPE_FIRST', - 'TEMPERATURE_TYPE_HBM_0', 'TEMPERATURE_TYPE_HBM_1', - 'TEMPERATURE_TYPE_HBM_2', 'TEMPERATURE_TYPE_HBM_3', - 'TEMPERATURE_TYPE_HOTSPOT', 'TEMPERATURE_TYPE_JUNCTION', - 'TEMPERATURE_TYPE_PLX', 'TEMPERATURE_TYPE_VRAM', - 'TEMPERATURE_TYPE__MAX', 'UNKNOWN', 'VRAM_TYPE_DDR2', - 'VRAM_TYPE_DDR3', 'VRAM_TYPE_DDR4', 'VRAM_TYPE_GDDR1', - 'VRAM_TYPE_GDDR3', 'VRAM_TYPE_GDDR4', 'VRAM_TYPE_GDDR5', - 'VRAM_TYPE_GDDR6', 'VRAM_TYPE_HBM', 'VRAM_TYPE_UNKNOWN', - 'VRAM_TYPE__MAX', 'WR_BW0', 'amd_metrics_table_header_t', - 'amdsmi_asic_info_t', 'amdsmi_bdf_t', 'amdsmi_bit_field_t', - 'amdsmi_board_info_t', 'amdsmi_cache_property_type_t', - 'amdsmi_card_form_factor_t', 'amdsmi_clk_info_t', - 'amdsmi_clk_type_t', 'amdsmi_compute_partition_type_t', - 'amdsmi_container_types_t', 'amdsmi_counter_command_t', - 'amdsmi_counter_value_t', 'amdsmi_cpu_apb_disable', - 'amdsmi_cpu_apb_enable', 'amdsmi_cpusocket_handle', - 'amdsmi_ddr_bw_metrics_t', 'amdsmi_dev_perf_level_t', - 'amdsmi_dimm_power_t', 'amdsmi_dimm_thermal_t', - 'amdsmi_dpm_level_t', 'amdsmi_dpm_policy_entry_t', - 'amdsmi_dpm_policy_t', 'amdsmi_driver_info_t', - 'amdsmi_engine_usage_t', 'amdsmi_error_count_t', - 'amdsmi_event_group_t', 'amdsmi_event_handle_t', - 'amdsmi_event_type_t', 'amdsmi_evt_notification_data_t', + 'AMDSMI_XGMI_STATUS_NO_ERRORS', 'RD_BW0', 'WR_BW0', + 'amd_metrics_table_header_t', 'amdsmi_asic_info_t', + 'amdsmi_bdf_t', 'amdsmi_bit_field_t', 'amdsmi_board_info_t', + 'amdsmi_cache_property_type_t', 'amdsmi_card_form_factor_t', + 'amdsmi_clk_info_t', 'amdsmi_clk_type_t', + 'amdsmi_compute_partition_type_t', 'amdsmi_container_types_t', + 'amdsmi_counter_command_t', 'amdsmi_counter_value_t', + 'amdsmi_cpu_apb_disable', 'amdsmi_cpu_apb_enable', + 'amdsmi_cpusocket_handle', 'amdsmi_ddr_bw_metrics_t', + 'amdsmi_dev_perf_level_t', 'amdsmi_dimm_power_t', + 'amdsmi_dimm_thermal_t', 'amdsmi_dpm_level_t', + 'amdsmi_dpm_policy_entry_t', 'amdsmi_dpm_policy_t', + 'amdsmi_driver_info_t', 'amdsmi_engine_usage_t', + 'amdsmi_error_count_t', 'amdsmi_event_group_t', + 'amdsmi_event_handle_t', 'amdsmi_event_type_t', + 'amdsmi_evt_notification_data_t', 'amdsmi_evt_notification_type_t', 'amdsmi_first_online_core_on_cpu_socket', 'amdsmi_freq_ind_t', 'amdsmi_freq_volt_region_t', 'amdsmi_frequencies_t', @@ -2576,7 +2619,7 @@ __all__ = \ 'amdsmi_get_cpu_socket_power', 'amdsmi_get_cpu_socket_power_cap', 'amdsmi_get_cpu_socket_power_cap_max', 'amdsmi_get_cpu_socket_temperature', 'amdsmi_get_cpucore_handles', - 'amdsmi_get_cpusocket_handles', 'amdsmi_get_dpm_policy', + 'amdsmi_get_cpusocket_handles', 'amdsmi_get_soc_pstate', 'amdsmi_get_energy_count', 'amdsmi_get_esmi_err_msg', 'amdsmi_get_fw_info', 'amdsmi_get_gpu_activity', 'amdsmi_get_gpu_asic_info', 'amdsmi_get_gpu_available_counters', @@ -2660,7 +2703,7 @@ __all__ = \ 'amdsmi_set_cpu_socket_boostlimit', 'amdsmi_set_cpu_socket_lclk_dpm_level', 'amdsmi_set_cpu_socket_power_cap', 'amdsmi_set_cpu_xgmi_width', - 'amdsmi_set_dpm_policy', 'amdsmi_set_gpu_clear_sram_data', + 'amdsmi_set_soc_pstate', 'amdsmi_set_gpu_clear_sram_data', 'amdsmi_set_gpu_clk_range', 'amdsmi_set_gpu_compute_partition', 'amdsmi_set_gpu_event_notification_mask', 'amdsmi_set_gpu_fan_speed', 'amdsmi_set_gpu_memory_partition', @@ -2712,7 +2755,8 @@ __all__ = \ 'struct_amdsmi_vbios_info_t', 'struct_amdsmi_version_t', 'struct_amdsmi_vram_info_t', 'struct_amdsmi_vram_usage_t', 'struct_amdsmi_xgmi_info_t', 'struct_cache_', - 'struct_engine_usage_', 'struct_fields_', 'struct_fw_info_list_', + 'struct_engine_usage_', 'struct_fw_info_list_', 'struct_memory_usage_', 'struct_pcie_metric_', - 'struct_pcie_static_', 'uint32_t', 'uint64_t', 'uint8_t', + 'struct_pcie_static_', 'struct_amdsmi_bdf_t', + 'uint32_t', 'uint64_t', 'uint8_t', 'union_amdsmi_bdf_t'] diff --git a/projects/amdsmi/rocm_smi/include/rocm_smi/rocm_smi.h b/projects/amdsmi/rocm_smi/include/rocm_smi/rocm_smi.h index 9be5ee1e3b..8b3ec699a3 100755 --- a/projects/amdsmi/rocm_smi/include/rocm_smi/rocm_smi.h +++ b/projects/amdsmi/rocm_smi/include/rocm_smi/rocm_smi.h @@ -3353,7 +3353,7 @@ rsmi_status_t rsmi_dev_gpu_clk_freq_set(uint32_t dv_ind, * * @return ::RSMI_STATUS_SUCCESS is returned upon successful call, non-zero on fail */ -rsmi_status_t rsmi_dev_dpm_policy_get(uint32_t dv_ind, +rsmi_status_t rsmi_dev_soc_pstate_get(uint32_t dv_ind, rsmi_dpm_policy_t* policy); /** @@ -3371,7 +3371,7 @@ rsmi_status_t rsmi_dev_dpm_policy_get(uint32_t dv_ind, * * @return ::RSMI_STATUS_SUCCESS is returned upon successful call, non-zero on fail */ -rsmi_status_t rsmi_dev_dpm_policy_set(uint32_t dv_ind, +rsmi_status_t rsmi_dev_soc_pstate_set(uint32_t dv_ind, uint32_t policy_id); /** @@ -3406,7 +3406,7 @@ rsmi_status_t rsmi_dev_xgmi_plpd_get(uint32_t dv_ind, * @param[in] processor_handle a processor handle * * @param[in] xgmi_plpd_id the xgmi plpd id to set. The id is the id in - * rsmi_dpm_policy_entry_t, which can be obtained by calling + * rsmi_soc_pstate_entry_t, which can be obtained by calling * rsmi_dev_xgmi_plpd_get() * * @return ::RSMI_STATUS_SUCCESS is returned upon successful call, non-zero on fail diff --git a/projects/amdsmi/rocm_smi/include/rocm_smi/rocm_smi_device.h b/projects/amdsmi/rocm_smi/include/rocm_smi/rocm_smi_device.h index 768c736cbc..00b553d207 100755 --- a/projects/amdsmi/rocm_smi/include/rocm_smi/rocm_smi_device.h +++ b/projects/amdsmi/rocm_smi/include/rocm_smi/rocm_smi_device.h @@ -101,6 +101,8 @@ enum DevKFDNodePropTypes { enum DevInfoTypes { kDevPerfLevel, + kDevSocPstate, + kDevXgmiPlpd, kDevProcessIsolation, kDevShaderClean, kDevOverDriveLevel, @@ -175,7 +177,6 @@ enum DevInfoTypes { kDevNumaNode, kDevGpuMetrics, kDevPmMetrics, - kDevDPMPolicy, kDevRegMetrics, kDevGpuReset, kDevAvailableComputePartition, diff --git a/projects/amdsmi/rocm_smi/src/rocm_smi.cc b/projects/amdsmi/rocm_smi/src/rocm_smi.cc index b545fa1973..03dc5abe58 100755 --- a/projects/amdsmi/rocm_smi/src/rocm_smi.cc +++ b/projects/amdsmi/rocm_smi/src/rocm_smi.cc @@ -2142,27 +2142,6 @@ rsmi_status_t rsmi_dev_gpu_clear_sram_data(uint32_t dv_ind, CATCH } -rsmi_status_t -rsmi_dev_dpm_policy_set(uint32_t dv_ind, - uint32_t policy_id) { - rsmi_status_t ret; - - TRY - std::ostringstream ss; - ss << __PRETTY_FUNCTION__ << " | ======= start ======="; - LOG_TRACE(ss); - REQUIRE_ROOT_ACCESS - DEVICE_MUTEX - GET_DEV_FROM_INDX - - std::string value("soc_pstate "); - value += std::to_string(policy_id); - int ret = dev->writeDevInfo(amd::smi::kDevDPMPolicy , value); - return amd::smi::ErrnoToRsmiStatus(ret); - - CATCH -} - rsmi_status_t rsmi_dev_xgmi_plpd_get(uint32_t dv_ind, rsmi_dpm_policy_t* policy) { @@ -2181,7 +2160,7 @@ rsmi_dev_xgmi_plpd_get(uint32_t dv_ind, LOG_TRACE(ss); DEVICE_MUTEX - ret = GetDevValueVec(amd::smi::kDevDPMPolicy, dv_ind, &val_vec); + ret = GetDevValueVec(amd::smi::kDevXgmiPlpd, dv_ind, &val_vec); if (ret == RSMI_STATUS_FILE_ERROR) { ss << __PRETTY_FUNCTION__ << " | ======= end =======" << ", GetDevValueVec() ret was RSMI_STATUS_FILE_ERROR " @@ -2199,21 +2178,14 @@ rsmi_dev_xgmi_plpd_get(uint32_t dv_ind, /* It will reply on the number but no string as it may vary from soc to soc. The current xmgi plpd marked with * - xgmi plpd - 0 : plpd_disallow - 1 : plpd_default - 2 : plpd_optimized* + 0 : plpd_disallow + 1 : plpd_default* + 2 : plpd_optimized */ - bool see_plpd_pstate = false; bool see_current = false; policy->num_supported = 0; for (uint32_t i = 0; i < val_vec.size(); ++i) { auto current_line = amd::smi::trim(val_vec[i]); - if (current_line == "xgmi plpd") { - see_plpd_pstate = true; - continue; - } - if (see_plpd_pstate == false) continue; // Get tokens: : std::vector tokens; @@ -2250,17 +2222,13 @@ rsmi_dev_xgmi_plpd_get(uint32_t dv_ind, policy->num_supported++; } // end for - if (!see_plpd_pstate) { - return RSMI_STATUS_NOT_SUPPORTED; - } - if (!see_current) { ss << __PRETTY_FUNCTION__ << " | ======= end =======" - << ", Unexpected pstat data: cannot find the current plpd policy."; + << ", Unexpected pstat data: cannot find the current xgmi_plpd policy."; LOG_ERROR(ss); return RSMI_STATUS_UNEXPECTED_DATA; } - // Cannot find it + return RSMI_STATUS_SUCCESS; CATCH @@ -2279,16 +2247,15 @@ rsmi_dev_xgmi_plpd_set(uint32_t dv_ind, DEVICE_MUTEX GET_DEV_FROM_INDX - std::string value("xgmi "); - value += std::to_string(plpd_id); - int ret = dev->writeDevInfo(amd::smi::kDevDPMPolicy , value); + std::string value = std::to_string(plpd_id); + int ret = dev->writeDevInfo(amd::smi::kDevXgmiPlpd , value); return amd::smi::ErrnoToRsmiStatus(ret); CATCH } rsmi_status_t -rsmi_dev_dpm_policy_get(uint32_t dv_ind, +rsmi_dev_soc_pstate_get(uint32_t dv_ind, rsmi_dpm_policy_t* policy) { rsmi_status_t ret; std::vector val_vec; @@ -2305,7 +2272,7 @@ rsmi_dev_dpm_policy_get(uint32_t dv_ind, LOG_TRACE(ss); DEVICE_MUTEX - ret = GetDevValueVec(amd::smi::kDevDPMPolicy, dv_ind, &val_vec); + ret = GetDevValueVec(amd::smi::kDevSocPstate, dv_ind, &val_vec); if (ret == RSMI_STATUS_FILE_ERROR) { ss << __PRETTY_FUNCTION__ << " | ======= end =======" << ", GetDevValueVec() ret was RSMI_STATUS_FILE_ERROR " @@ -2323,22 +2290,15 @@ rsmi_dev_dpm_policy_get(uint32_t dv_ind, /* It will reply on the number but no string as it may vary from soc to soc. The current pstate marked with * - soc pstate 0 : soc_pstate_default 1 : soc_pstate_0 2 : soc_pstate_1* 3 : soc_pstate_2 */ - bool see_soc_pstate = false; bool see_current = false; policy->num_supported = 0; for (uint32_t i = 0; i < val_vec.size(); ++i) { auto current_line = amd::smi::trim(val_vec[i]); - if (current_line == "soc pstate") { - see_soc_pstate = true; - continue; - } - if (see_soc_pstate == false) continue; // Get tokens: : std::vector tokens; @@ -2375,10 +2335,6 @@ rsmi_dev_dpm_policy_get(uint32_t dv_ind, policy->num_supported++; } // end for - if (!see_soc_pstate) { - return RSMI_STATUS_NOT_SUPPORTED; - } - if (!see_current) { ss << __PRETTY_FUNCTION__ << " | ======= end =======" << ", Unexpected pstat data: cannot find the current policy."; @@ -2391,6 +2347,26 @@ rsmi_dev_dpm_policy_get(uint32_t dv_ind, CATCH } +rsmi_status_t +rsmi_dev_soc_pstate_set(uint32_t dv_ind, + uint32_t policy_id) { + rsmi_status_t ret; + + TRY + std::ostringstream ss; + ss << __PRETTY_FUNCTION__ << " | ======= start ======="; + LOG_TRACE(ss); + REQUIRE_ROOT_ACCESS + DEVICE_MUTEX + GET_DEV_FROM_INDX + + std::string value = std::to_string(policy_id); + int ret = dev->writeDevInfo(amd::smi::kDevSocPstate , value); + return amd::smi::ErrnoToRsmiStatus(ret); + + CATCH +} + static std::vector pci_name_files = { "/usr/share/misc/pci.ids", "/usr/share/hwdata/pci.ids", diff --git a/projects/amdsmi/rocm_smi/src/rocm_smi_device.cc b/projects/amdsmi/rocm_smi/src/rocm_smi_device.cc index e9ae71b0fc..5eafc45555 100755 --- a/projects/amdsmi/rocm_smi/src/rocm_smi_device.cc +++ b/projects/amdsmi/rocm_smi/src/rocm_smi_device.cc @@ -82,6 +82,8 @@ static const char *kDevPCieVendorIDFName = "vendor"; // Device sysfs file names static const char *kDevPerfLevelFName = "power_dpm_force_performance_level"; +static const char *kDevSocPstateFName = "pm_policy/soc_pstate"; +static const char *kDevXgmiPlpdFName = "pm_policy/xgmi_plpd"; static const char *kDevProcessIsolationFName = "enforce_isolation"; static const char *kDevShaderCleanFName = "run_cleaner_shader"; static const char *kDevDevProdNameFName = "product_name"; @@ -138,7 +140,6 @@ static const char *kDevAvailableComputePartitionFName = "available_compute_partition"; static const char *kDevComputePartitionFName = "current_compute_partition"; static const char *kDevMemoryPartitionFName = "current_memory_partition"; -static const char* kDevDPMPolicyFName = "pm_policy"; // The PM policy for pstat and XGMI // Firmware version files static const char *kDevFwVersionAsdFName = "fw_version/asd_fw_version"; @@ -318,7 +319,8 @@ static const std::map kDevAttribNameMap = { {kDevNumaNode, kDevNumaNodeFName}, {kDevGpuMetrics, kDevGpuMetricsFName}, {kDevPmMetrics, kDevPmMetricsFName}, - {kDevDPMPolicy, kDevDPMPolicyFName}, + {kDevSocPstate, kDevSocPstateFName}, + {kDevXgmiPlpd, kDevXgmiPlpdFName}, {kDevProcessIsolation, kDevProcessIsolationFName}, {kDevShaderClean, kDevShaderCleanFName}, {kDevRegMetrics, kDevRegMetricsFName}, @@ -478,7 +480,8 @@ Device::devInfoTypesStrings = { {kDevComputePartition, "kDevComputePartition"}, {kDevMemoryPartition, "kDevMemoryPartition"}, {kDevPCieVendorID, "kDevPCieVendorID"}, - {kDevDPMPolicy, "kDevDPMPolicy"}, + {kDevSocPstate, "kDevSocPstate"}, + {kDevXgmiPlpd, "kDevXgmiPlpd"}, {kDevProcessIsolation, "kDevProcessIsolation"}, {kDevShaderClean, "kDevShaderClean"}, }; @@ -522,6 +525,10 @@ static const std::map kDevFuncDependsMap = { {"rsmi_dev_perf_level_set", {{kDevPerfLevelFName}, {}}}, {"rsmi_dev_perf_level_set_v1", {{kDevPerfLevelFName}, {}}}, {"rsmi_dev_perf_level_get", {{kDevPerfLevelFName}, {}}}, + {"rsmi_dev_soc_pstate_set", {{kDevSocPstateFName}, {}}}, + {"rsmi_dev_soc_pstate_get", {{kDevSocPstateFName}, {}}}, + {"rsmi_dev_xgmi_plpd_set", {{kDevXgmiPlpdFName}, {}}}, + {"rsmi_dev_xgmi_plpd_get", {{kDevXgmiPlpdFName}, {}}}, {"rsmi_dev_process_isolation_set", {{kDevProcessIsolationFName}, {}}}, {"rsmi_dev_process_isolation_get", {{kDevProcessIsolationFName}, {}}}, {"rsmi_dev_gpu_shader_clean", {{kDevShaderCleanFName}, {}}}, @@ -545,10 +552,6 @@ static const std::map kDevFuncDependsMap = { {"rsmi_topo_numa_affinity_get", {{kDevNumaNodeFName}, {}}}, {"rsmi_dev_gpu_metrics_info_get", {{kDevGpuMetricsFName}, {}}}, {"rsmi_dev_pm_metrics_info_get", {{kDevPmMetricsFName}, {}}}, - {"rsmi_dev_dpm_policy_get", {{kDevDPMPolicyFName}, {}}}, - {"rsmi_dev_dpm_policy_set", {{kDevDPMPolicyFName}, {}}}, - {"rsmi_dev_xgmi_plpd_get", {{kDevDPMPolicyFName}, {}}}, - {"rsmi_dev_xgmi_plpd_set", {{kDevDPMPolicyFName}, {}}}, {"rsmi_dev_reg_table_info_get", {{kDevRegMetricsFName}, {}}}, {"rsmi_dev_gpu_reset", {{kDevGpuResetFName}, {}}}, {"rsmi_dev_compute_partition_get", {{kDevComputePartitionFName}, {}}}, @@ -948,6 +951,8 @@ int Device::writeDevInfo(DevInfoTypes type, std::string val) { sysfs_path += kDevAttribNameMap.at(type); switch (type) { case kDevGPUMClk: + case kDevSocPstate: + case kDevXgmiPlpd: case kDevProcessIsolation: case kDevShaderClean: case kDevDCEFClk: @@ -956,7 +961,6 @@ int Device::writeDevInfo(DevInfoTypes type, std::string val) { case kDevPCIEClk: case kDevPowerODVoltage: case kDevSOCClk: - case kDevDPMPolicy: return writeDevInfoStr(type, val); case kDevComputePartition: case kDevMemoryPartition: @@ -1223,6 +1227,8 @@ int Device::readDevInfo(DevInfoTypes type, std::vector *val) { switch (type) { case kDevGPUMClk: + case kDevSocPstate: + case kDevXgmiPlpd: case kDevProcessIsolation: case kDevGPUSClk: case kDevDCEFClk: @@ -1239,7 +1245,6 @@ int Device::readDevInfo(DevInfoTypes type, std::vector *val) { case kDevErrCntHDP: case kDevErrCntXGMIWAFL: case kDevMemPageBad: - case kDevDPMPolicy: return readDevInfoMultiLineStr(type, val); break; diff --git a/projects/amdsmi/src/amd_smi/amd_smi.cc b/projects/amdsmi/src/amd_smi/amd_smi.cc index 5fcee46eff..1b317ee385 100644 --- a/projects/amdsmi/src/amd_smi/amd_smi.cc +++ b/projects/amdsmi/src/amd_smi/amd_smi.cc @@ -94,7 +94,7 @@ static amdsmi_status_t get_gpu_device_from_handle(amdsmi_processor_handle proces .handle_to_processor(processor_handle, &device); if (r != AMDSMI_STATUS_SUCCESS) return r; - if (device->get_processor_type() == AMD_GPU) { + if (device->get_processor_type() == AMDSMI_PROCESSOR_TYPE_AMD_GPU) { *gpudevice = static_cast(processor_handle); return AMDSMI_STATUS_SUCCESS; } @@ -304,11 +304,11 @@ amdsmi_status_t amdsmi_get_processor_count_from_handles(amdsmi_processor_handle* &processor_type); if (r != AMDSMI_STATUS_SUCCESS) return r; - if(processor_type == AMD_CPU) { + if(processor_type == AMDSMI_PROCESSOR_TYPE_AMD_CPU) { count_cpusockets++; - } else if(processor_type == AMD_CPU_CORE) { + } else if(processor_type == AMDSMI_PROCESSOR_TYPE_AMD_CPU_CORE) { count_cpucores++; - } else if(processor_type == AMD_GPU) { + } else if(processor_type == AMDSMI_PROCESSOR_TYPE_AMD_GPU) { count_gpus++; } } @@ -538,7 +538,7 @@ amdsmi_status_t amdsmi_get_temp_metric(amdsmi_processor_handle processor_handle } // Get the PLX temperature from the gpu_metrics - if (sensor_type == TEMPERATURE_TYPE_PLX) { + if (sensor_type == AMDSMI_TEMPERATURE_TYPE_PLX) { amdsmi_gpu_metrics_t metric_info; auto r_status = amdsmi_get_gpu_metrics_info( processor_handle, &metric_info); @@ -568,7 +568,7 @@ amdsmi_status_t amdsmi_get_gpu_vram_usage(amdsmi_processor_handle processor_hand .handle_to_processor(processor_handle, &device); if (ret != AMDSMI_STATUS_SUCCESS) return ret; - if (device->get_processor_type() != AMD_GPU) { + if (device->get_processor_type() != AMDSMI_PROCESSOR_TYPE_AMD_GPU) { return AMDSMI_STATUS_NOT_SUPPORTED; } @@ -639,27 +639,27 @@ amdsmi_status_t amdsmi_get_gpu_revision(amdsmi_processor_handle processor_handle amdsmi_status_t amdsmi_get_fw_info(amdsmi_processor_handle processor_handle, amdsmi_fw_info_t *info) { const std::map fw_in_rsmi = { - { FW_ID_ASD, RSMI_FW_BLOCK_ASD}, - { FW_ID_CP_CE, RSMI_FW_BLOCK_CE}, - { FW_ID_DMCU, RSMI_FW_BLOCK_DMCU}, - { FW_ID_MC, RSMI_FW_BLOCK_MC}, - { FW_ID_CP_ME, RSMI_FW_BLOCK_ME}, - { FW_ID_CP_MEC1, RSMI_FW_BLOCK_MEC}, - { FW_ID_CP_MEC2, RSMI_FW_BLOCK_MEC2}, - { FW_ID_CP_PFP, RSMI_FW_BLOCK_PFP}, - { FW_ID_RLC, RSMI_FW_BLOCK_RLC}, - { FW_ID_RLC_RESTORE_LIST_CNTL, RSMI_FW_BLOCK_RLC_SRLC}, - { FW_ID_RLC_RESTORE_LIST_GPM_MEM, RSMI_FW_BLOCK_RLC_SRLG}, - { FW_ID_RLC_RESTORE_LIST_SRM_MEM, RSMI_FW_BLOCK_RLC_SRLS}, - { FW_ID_SDMA0, RSMI_FW_BLOCK_SDMA}, - { FW_ID_SDMA1, RSMI_FW_BLOCK_SDMA2}, - { FW_ID_PM, RSMI_FW_BLOCK_SMC}, - { FW_ID_PSP_SOSDRV, RSMI_FW_BLOCK_SOS}, - { FW_ID_TA_RAS, RSMI_FW_BLOCK_TA_RAS}, - { FW_ID_TA_XGMI, RSMI_FW_BLOCK_TA_XGMI}, - { FW_ID_UVD, RSMI_FW_BLOCK_UVD}, - { FW_ID_VCE, RSMI_FW_BLOCK_VCE}, - { FW_ID_VCN, RSMI_FW_BLOCK_VCN} + { AMDSMI_FW_ID_ASD, RSMI_FW_BLOCK_ASD}, + { AMDSMI_FW_ID_CP_CE, RSMI_FW_BLOCK_CE}, + { AMDSMI_FW_ID_DMCU, RSMI_FW_BLOCK_DMCU}, + { AMDSMI_FW_ID_MC, RSMI_FW_BLOCK_MC}, + { AMDSMI_FW_ID_CP_ME, RSMI_FW_BLOCK_ME}, + { AMDSMI_FW_ID_CP_MEC1, RSMI_FW_BLOCK_MEC}, + { AMDSMI_FW_ID_CP_MEC2, RSMI_FW_BLOCK_MEC2}, + { AMDSMI_FW_ID_CP_PFP, RSMI_FW_BLOCK_PFP}, + { AMDSMI_FW_ID_RLC, RSMI_FW_BLOCK_RLC}, + { AMDSMI_FW_ID_RLC_RESTORE_LIST_CNTL, RSMI_FW_BLOCK_RLC_SRLC}, + { AMDSMI_FW_ID_RLC_RESTORE_LIST_GPM_MEM, RSMI_FW_BLOCK_RLC_SRLG}, + { AMDSMI_FW_ID_RLC_RESTORE_LIST_SRM_MEM, RSMI_FW_BLOCK_RLC_SRLS}, + { AMDSMI_FW_ID_SDMA0, RSMI_FW_BLOCK_SDMA}, + { AMDSMI_FW_ID_SDMA1, RSMI_FW_BLOCK_SDMA2}, + { AMDSMI_FW_ID_PM, RSMI_FW_BLOCK_SMC}, + { AMDSMI_FW_ID_PSP_SOSDRV, RSMI_FW_BLOCK_SOS}, + { 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_CHECK_INIT(); @@ -794,8 +794,8 @@ amdsmi_status_t amdsmi_get_gpu_vram_info( return r; // init the info structure with default value - info->vram_type = VRAM_TYPE_UNKNOWN; - info->vram_size_mb = 0; + info->vram_type = AMDSMI_VRAM_TYPE_UNKNOWN; + info->vram_size = 0; info->vram_vendor = AMDSMI_VRAM_VENDOR__PLACEHOLDER0; // Only can read vram type from libdrm @@ -805,14 +805,13 @@ amdsmi_status_t amdsmi_get_gpu_vram_info( AMDGPU_INFO_DEV_INFO, sizeof(struct drm_amdgpu_info_device), &dev_info); if (r == AMDSMI_STATUS_SUCCESS) { - info->vram_type = static_cast( - dev_info.vram_type); + info->vram_type = amd::smi::vram_type_value(dev_info.vram_type); } } // if vram type is greater than the max enum set it to unknown - if (info->vram_type > VRAM_TYPE__MAX) - info->vram_type = VRAM_TYPE_UNKNOWN; + if (info->vram_type > AMDSMI_VRAM_TYPE__MAX) + info->vram_type = AMDSMI_VRAM_TYPE_UNKNOWN; // map the vendor name to enum char brand[256]; @@ -843,7 +842,7 @@ amdsmi_status_t amdsmi_get_gpu_vram_info( r = rsmi_wrapper(rsmi_dev_memory_total_get, processor_handle, RSMI_MEM_TYPE_VRAM, &total); if (r == AMDSMI_STATUS_SUCCESS) { - info->vram_size_mb = total / (1024 * 1024); + info->vram_size = total / (1024 * 1024); } return AMDSMI_STATUS_SUCCESS; @@ -1250,7 +1249,7 @@ amdsmi_get_power_cap_info(amdsmi_processor_handle processor_handle, set_ret_success = true; info->power_cap = power_cap; - status = smi_amdgpu_get_ranges(gpudevice, CLK_TYPE_GFX, + status = smi_amdgpu_get_ranges(gpudevice, AMDSMI_CLK_TYPE_GFX, NULL, NULL, &dpm, NULL); if ((status == AMDSMI_STATUS_SUCCESS) && !set_ret_success) set_ret_success = true; @@ -1349,10 +1348,10 @@ amdsmi_status_t amdsmi_get_clk_freq(amdsmi_processor_handle processor_handle, // nullptr api supported // Get from gpu_metrics - if (clk_type == CLK_TYPE_VCLK0 || - clk_type == CLK_TYPE_VCLK1 || - clk_type == CLK_TYPE_DCLK0 || - clk_type == CLK_TYPE_DCLK1 ) { + if (clk_type == AMDSMI_CLK_TYPE_VCLK0 || + clk_type == AMDSMI_CLK_TYPE_VCLK1 || + clk_type == AMDSMI_CLK_TYPE_DCLK0 || + clk_type == AMDSMI_CLK_TYPE_DCLK1 ) { // when f == nullptr -> check if metrics are supported amdsmi_gpu_metrics_t metric_info; @@ -1369,19 +1368,19 @@ amdsmi_status_t amdsmi_get_clk_freq(amdsmi_processor_handle processor_handle, return r_status; f->num_supported = 1; - if (clk_type == CLK_TYPE_VCLK0) { + if (clk_type == AMDSMI_CLK_TYPE_VCLK0) { f->current = metric_info_p->current_vclk0; f->frequency[0] = metric_info_p->average_vclk0_frequency; } - if (clk_type == CLK_TYPE_VCLK1) { + if (clk_type == AMDSMI_CLK_TYPE_VCLK1) { f->current = metric_info_p->current_vclk1; f->frequency[0] = metric_info_p->average_vclk1_frequency; } - if (clk_type == CLK_TYPE_DCLK0) { + if (clk_type == AMDSMI_CLK_TYPE_DCLK0) { f->current = metric_info_p->current_dclk0; f->frequency[0] = metric_info_p->average_dclk0_frequency; } - if (clk_type == CLK_TYPE_DCLK1) { + if (clk_type == AMDSMI_CLK_TYPE_DCLK1) { f->current = metric_info_p->current_dclk1; f->frequency[0] = metric_info_p->average_dclk1_frequency; } @@ -1399,10 +1398,10 @@ amdsmi_status_t amdsmi_set_clk_freq(amdsmi_processor_handle processor_handle, AMDSMI_CHECK_INIT(); // Not support the clock type write into gpu_metrics - if (clk_type == CLK_TYPE_VCLK0 || - clk_type == CLK_TYPE_VCLK1 || - clk_type == CLK_TYPE_DCLK0 || - clk_type == CLK_TYPE_DCLK1 ) { + if (clk_type == AMDSMI_CLK_TYPE_VCLK0 || + clk_type == AMDSMI_CLK_TYPE_VCLK1 || + clk_type == AMDSMI_CLK_TYPE_DCLK0 || + clk_type == AMDSMI_CLK_TYPE_DCLK1 ) { return AMDSMI_STATUS_NOT_SUPPORTED; } @@ -1410,19 +1409,19 @@ amdsmi_status_t amdsmi_set_clk_freq(amdsmi_processor_handle processor_handle, static_cast(clk_type), freq_bitmask); } -amdsmi_status_t amdsmi_set_dpm_policy(amdsmi_processor_handle processor_handle, +amdsmi_status_t amdsmi_set_soc_pstate(amdsmi_processor_handle processor_handle, uint32_t policy) { AMDSMI_CHECK_INIT(); - return rsmi_wrapper(rsmi_dev_dpm_policy_set, processor_handle, + return rsmi_wrapper(rsmi_dev_soc_pstate_set, processor_handle, policy); } -amdsmi_status_t amdsmi_get_dpm_policy(amdsmi_processor_handle processor_handle, +amdsmi_status_t amdsmi_get_soc_pstate(amdsmi_processor_handle processor_handle, amdsmi_dpm_policy_t* policy) { AMDSMI_CHECK_INIT(); - return rsmi_wrapper(rsmi_dev_dpm_policy_get, processor_handle, + return rsmi_wrapper(rsmi_dev_soc_pstate_get, processor_handle, reinterpret_cast(policy)); } @@ -1692,7 +1691,7 @@ amdsmi_get_clock_info(amdsmi_processor_handle processor_handle, amdsmi_clk_type_ return AMDSMI_STATUS_INVAL; } - if (clk_type > CLK_TYPE__MAX) { + if (clk_type > AMDSMI_CLK_TYPE__MAX) { return AMDSMI_STATUS_INVAL; } @@ -1717,26 +1716,26 @@ amdsmi_get_clock_info(amdsmi_processor_handle processor_handle, amdsmi_clk_type_ } info->max_clk = max_freq; info->min_clk = min_freq; - info->sleep_clk = sleep_state_freq; + info->clk_deep_sleep = sleep_state_freq; switch (clk_type) { - case CLK_TYPE_GFX: - info->cur_clk = metrics.current_gfxclk; + case AMDSMI_CLK_TYPE_GFX: + info->clk = metrics.current_gfxclk; break; - case CLK_TYPE_MEM: - info->cur_clk = metrics.current_uclk; + case AMDSMI_CLK_TYPE_MEM: + info->clk = metrics.current_uclk; break; - case CLK_TYPE_VCLK0: - info->cur_clk = metrics.current_vclk0; + case AMDSMI_CLK_TYPE_VCLK0: + info->clk = metrics.current_vclk0; break; - case CLK_TYPE_VCLK1: - info->cur_clk = metrics.current_vclk1; + case AMDSMI_CLK_TYPE_VCLK1: + info->clk = metrics.current_vclk1; break; - case CLK_TYPE_DCLK0: - info->cur_clk = metrics.current_dclk0; + case AMDSMI_CLK_TYPE_DCLK0: + info->clk = metrics.current_dclk0; break; - case CLK_TYPE_DCLK1: - info->cur_clk = metrics.current_dclk1; + case AMDSMI_CLK_TYPE_DCLK1: + info->clk = metrics.current_dclk1; break; default: return AMDSMI_STATUS_INVAL; @@ -2207,10 +2206,10 @@ amdsmi_status_t amdsmi_get_processor_handle_from_bdf(amdsmi_bdf_t bdf, return status; } amdsmi_bdf_t found_bdf = gpu_device->get_bdf(); - if ((bdf.fields.bus_number == found_bdf.fields.bus_number) && - (bdf.fields.device_number == found_bdf.fields.device_number) && - (bdf.fields.domain_number == found_bdf.fields.domain_number) && - (bdf.fields.function_number == found_bdf.fields.function_number)) { + if ((bdf.bus_number == found_bdf.bus_number) && + (bdf.device_number == found_bdf.device_number) && + (bdf.domain_number == found_bdf.domain_number) && + (bdf.function_number == found_bdf.function_number)) { *processor_handle = devs[idx]; return AMDSMI_STATUS_SUCCESS; } diff --git a/projects/amdsmi/src/amd_smi/amd_smi_common.cc b/projects/amdsmi/src/amd_smi/amd_smi_common.cc index 4f839e8cd7..2751d8efb9 100644 --- a/projects/amdsmi/src/amd_smi/amd_smi_common.cc +++ b/projects/amdsmi/src/amd_smi/amd_smi_common.cc @@ -63,6 +63,18 @@ amdsmi_status_t rsmi_to_amdsmi_status(rsmi_status_t status) { return amdsmi_status; } +amdsmi_vram_type_t vram_type_value(unsigned type) { + amdsmi_vram_type_t value = AMDSMI_VRAM_TYPE_UNKNOWN; + + auto search = amd::smi::vram_type_map.find(type); + if (search != amd::smi::vram_type_map.end()) { + value = search->second; + } + + return value; +} + + #ifdef ENABLE_ESMI_LIB amdsmi_status_t esmi_to_amdsmi_status(esmi_status_t status) { amdsmi_status_t amdsmi_status = AMDSMI_STATUS_MAP_ERROR; diff --git a/projects/amdsmi/src/amd_smi/amd_smi_drm.cc b/projects/amdsmi/src/amd_smi/amd_smi_drm.cc index 3d0f4558c3..a17ed40843 100644 --- a/projects/amdsmi/src/amd_smi/amd_smi_drm.cc +++ b/projects/amdsmi/src/amd_smi/amd_smi_drm.cc @@ -173,10 +173,10 @@ amdsmi_status_t AMDSmiDrm::init() { } has_valid_fds = true; - bdf.fields.function_number = device->businfo.pci->func; - bdf.fields.device_number = device->businfo.pci->dev; - bdf.fields.bus_number = device->businfo.pci->bus; - bdf.fields.domain_number = device->businfo.pci->domain; + bdf.function_number = device->businfo.pci->func; + bdf.device_number = device->businfo.pci->dev; + bdf.bus_number = device->businfo.pci->bus; + bdf.domain_number = device->businfo.pci->domain; vendor_id = device->deviceinfo.pci->vendor_id; diff --git a/projects/amdsmi/src/amd_smi/amd_smi_socket.cc b/projects/amdsmi/src/amd_smi/amd_smi_socket.cc index 9481f9702d..5f7029fc16 100644 --- a/projects/amdsmi/src/amd_smi/amd_smi_socket.cc +++ b/projects/amdsmi/src/amd_smi/amd_smi_socket.cc @@ -71,13 +71,13 @@ amdsmi_status_t AMDSmiSocket::get_processor_count(uint32_t* processor_count) con amdsmi_status_t AMDSmiSocket::get_processor_count(processor_type_t type, uint32_t* processor_count) const { amdsmi_status_t ret = AMDSMI_STATUS_SUCCESS; switch (type) { - case AMD_GPU: + case AMDSMI_PROCESSOR_TYPE_AMD_GPU: *processor_count = static_cast(processors_.size()); break; - case AMD_CPU: + case AMDSMI_PROCESSOR_TYPE_AMD_CPU: *processor_count = static_cast(cpu_processors_.size()); break; - case AMD_CPU_CORE: + case AMDSMI_PROCESSOR_TYPE_AMD_CPU_CORE: *processor_count = static_cast(cpu_core_processors_.size()); break; default: diff --git a/projects/amdsmi/src/amd_smi/amd_smi_system.cc b/projects/amdsmi/src/amd_smi/amd_smi_system.cc index 7b0da49bf5..efdb698329 100644 --- a/projects/amdsmi/src/amd_smi/amd_smi_system.cc +++ b/projects/amdsmi/src/amd_smi/amd_smi_system.cc @@ -162,12 +162,12 @@ amdsmi_status_t AMDSmiSystem::populate_amd_cpus() { socket = new AMDSmiSocket(cpu_socket_id); sockets_.push_back(socket); } - AMDSmiProcessor* cpusocket = new AMDSmiProcessor(AMD_CPU, i); + AMDSmiProcessor* cpusocket = new AMDSmiProcessor(AMDSMI_PROCESSOR_TYPE_AMD_CPU, i); socket->add_processor(cpusocket); processors_.insert(cpusocket); for (uint32_t k = 0; k < (cpus/threads)/sockets; k++) { - AMDSmiProcessor* core = new AMDSmiProcessor(AMD_CPU_CORE, k); + AMDSmiProcessor* core = new AMDSmiProcessor(AMDSMI_PROCESSOR_TYPE_AMD_CPU_CORE, k); socket->add_processor(core); processors_.insert(core); } @@ -322,7 +322,7 @@ amdsmi_status_t AMDSmiSystem::gpu_index_to_handle(uint32_t gpu_index, auto iter = processors_.begin(); for (; iter != processors_.end(); iter++) { auto cur_device = (*iter); - if (cur_device->get_processor_type() != AMD_GPU) + if (cur_device->get_processor_type() != AMDSMI_PROCESSOR_TYPE_AMD_GPU) continue; amd::smi::AMDSmiGPUDevice* gpu_device = static_cast(cur_device); diff --git a/projects/amdsmi/src/amd_smi/amd_smi_utils.cc b/projects/amdsmi/src/amd_smi/amd_smi_utils.cc index 0c61ba6127..fa8a6e1e4e 100644 --- a/projects/amdsmi/src/amd_smi/amd_smi_utils.cc +++ b/projects/amdsmi/src/amd_smi/amd_smi_utils.cc @@ -256,22 +256,22 @@ amdsmi_status_t smi_amdgpu_get_ranges(amd::smi::AMDSmiGPUDevice* device, amdsmi_ std::string fullpath = "/sys/class/drm/" + device->get_gpu_path() + "/device"; switch (domain) { - case CLK_TYPE_GFX: + case AMDSMI_CLK_TYPE_GFX: fullpath += "/pp_dpm_sclk"; break; - case CLK_TYPE_MEM: + case AMDSMI_CLK_TYPE_MEM: fullpath += "/pp_dpm_mclk"; break; - case CLK_TYPE_VCLK0: + case AMDSMI_CLK_TYPE_VCLK0: fullpath += "/pp_dpm_vclk"; break; - case CLK_TYPE_VCLK1: + case AMDSMI_CLK_TYPE_VCLK1: fullpath += "/pp_dpm_vclk1"; break; - case CLK_TYPE_DCLK0: + case AMDSMI_CLK_TYPE_DCLK0: fullpath += "/pp_dpm_dclk"; break; - case CLK_TYPE_DCLK1: + case AMDSMI_CLK_TYPE_DCLK1: fullpath += "/pp_dpm_dclk1"; break; default: diff --git a/projects/amdsmi/src/amd_smi/fdinfo.cc b/projects/amdsmi/src/amd_smi/fdinfo.cc index 9b963a8a6d..29fd3f2c03 100644 --- a/projects/amdsmi/src/amd_smi/fdinfo.cc +++ b/projects/amdsmi/src/amd_smi/fdinfo.cc @@ -34,8 +34,8 @@ extern "C" { static const char *container_type_name[AMDSMI_MAX_CONTAINER_TYPE] = { - [CONTAINER_LXC] = "lxc", - [CONTAINER_DOCKER] = "docker", + [AMDSMI_CONTAINER_LXC] = "lxc", + [AMDSMI_CONTAINER_DOCKER] = "docker", }; amdsmi_status_t gpuvsmi_pid_is_gpu(const std::string &path, const char *bdf) @@ -74,10 +74,10 @@ amdsmi_status_t gpuvsmi_get_pids(const amdsmi_bdf_t &bdf, std::vector /* 0000:00:00.0 */ snprintf(bdf_str, 13, "%04x:%02x:%02x.%d", - bdf.fields.domain_number & 0xffff, - bdf.fields.bus_number & 0xff, - bdf.fields.device_number & 0x1f, - bdf.fields.function_number & 0x7); + bdf.domain_number & 0xffff, + bdf.bus_number & 0xff, + bdf.device_number & 0x1f, + bdf.function_number & 0x7); d = opendir("/proc"); if (!d) @@ -123,10 +123,10 @@ amdsmi_status_t gpuvsmi_get_pid_info(const amdsmi_bdf_t &bdf, long int pid, /* 0000:00:00.0 */ snprintf(bdf_str, 13, "%04x:%02x:%02x.%d", - bdf.fields.domain_number & 0xffff, - bdf.fields.bus_number & 0xff, - bdf.fields.device_number & 0x1f, - bdf.fields.function_number & 0x7); + bdf.domain_number & 0xffff, + bdf.bus_number & 0xff, + bdf.device_number & 0x1f, + bdf.function_number & 0x7); std::string path = "/proc/" + std::to_string(pid) + "/fdinfo/"; diff --git a/projects/amdsmi/tests/amd_smi_test/functional/frequencies_read.cc b/projects/amdsmi/tests/amd_smi_test/functional/frequencies_read.cc index c9a54c5426..92975be224 100755 --- a/projects/amdsmi/tests/amd_smi_test/functional/frequencies_read.cc +++ b/projects/amdsmi/tests/amd_smi_test/functional/frequencies_read.cc @@ -158,11 +158,11 @@ void TestFrequenciesRead::Run(void) { PrintDeviceHeader(processor_handles_[i]); - freq_output(CLK_TYPE_MEM, "Supported GPU Memory"); - freq_output(CLK_TYPE_SYS, "Supported GPU"); - freq_output(CLK_TYPE_DF, "Data Fabric Clock"); - freq_output(CLK_TYPE_DCEF, "Display Controller Engine Clock"); - freq_output(CLK_TYPE_SOC, "SOC Clock"); + freq_output(AMDSMI_CLK_TYPE_MEM, "Supported GPU Memory"); + freq_output(AMDSMI_CLK_TYPE_SYS, "Supported GPU"); + freq_output(AMDSMI_CLK_TYPE_DF, "Data Fabric Clock"); + freq_output(AMDSMI_CLK_TYPE_DCEF, "Display Controller Engine Clock"); + freq_output(AMDSMI_CLK_TYPE_SOC, "SOC Clock"); err = amdsmi_get_gpu_pci_bandwidth(processor_handles_[i], &b); if (err == AMDSMI_STATUS_NOT_SUPPORTED) { diff --git a/projects/amdsmi/tests/amd_smi_test/functional/frequencies_read_write.cc b/projects/amdsmi/tests/amd_smi_test/functional/frequencies_read_write.cc index cc35838293..bea412a366 100755 --- a/projects/amdsmi/tests/amd_smi_test/functional/frequencies_read_write.cc +++ b/projects/amdsmi/tests/amd_smi_test/functional/frequencies_read_write.cc @@ -104,13 +104,13 @@ void TestFrequenciesReadWrite::Run(void) { for (uint32_t dv_ind = 0; dv_ind < num_monitor_devs(); ++dv_ind) { PrintDeviceHeader(processor_handles_[dv_ind]); - for (uint32_t clk = CLK_TYPE_FIRST; clk <= CLK_TYPE__MAX; ++clk) { + for (uint32_t clk = AMDSMI_CLK_TYPE_FIRST; clk <= AMDSMI_CLK_TYPE__MAX; ++clk) { amdsmi_clk = (amdsmi_clk_type_t)clk; auto freq_read = [&]() -> bool { - // Skip CLK_TYPE_PCIE, which does not supported in rocm-smi. + // Skip AMDSMI_CLK_TYPE_PCIE, which does not supported in rocm-smi. std::cout << amdsmi_clk << std::endl; - if (amdsmi_clk == CLK_TYPE_PCIE) + if (amdsmi_clk == AMDSMI_CLK_TYPE_PCIE) return false; ret = amdsmi_get_clk_freq(processor_handles_[dv_ind], amdsmi_clk, &f); std::cout << ret << std::endl; @@ -139,8 +139,8 @@ void TestFrequenciesReadWrite::Run(void) { auto freq_write = [&]() { // Set clocks to something other than the usual default of the lowest // frequency. - // Skip CLK_TYPE_PCIE, which does not supported in rocm-smi. - if (amdsmi_clk == CLK_TYPE_PCIE) + // Skip AMDSMI_CLK_TYPE_PCIE, which does not supported in rocm-smi. + if (amdsmi_clk == AMDSMI_CLK_TYPE_PCIE) return; freq_bitmask = 0b01100; // Try the 3rd and 4th clocks diff --git a/projects/amdsmi/tests/amd_smi_test/functional/id_info_read.cc b/projects/amdsmi/tests/amd_smi_test/functional/id_info_read.cc index 192e672c85..d6e208fbdd 100755 --- a/projects/amdsmi/tests/amd_smi_test/functional/id_info_read.cc +++ b/projects/amdsmi/tests/amd_smi_test/functional/id_info_read.cc @@ -155,7 +155,7 @@ void TestIdInfoRead::Run(void) { std::cout << "\t**Device Vram vendor id: " << vram_info.vram_vendor << std::endl; std::cout << "\t**Device Vram size: " - << vram_info.vram_size_mb << std::endl; + << vram_info.vram_size << std::endl; } err = amdsmi_get_gpu_vendor_name(processor_handles_[i], buffer, kBufferLen); diff --git a/projects/amdsmi/tests/amd_smi_test/functional/mutual_exclusion.cc b/projects/amdsmi/tests/amd_smi_test/functional/mutual_exclusion.cc index e5578619f1..b9a0fd8afa 100755 --- a/projects/amdsmi/tests/amd_smi_test/functional/mutual_exclusion.cc +++ b/projects/amdsmi/tests/amd_smi_test/functional/mutual_exclusion.cc @@ -229,7 +229,7 @@ void TestMutualExclusion::Run(void) { CHECK_RET(ret, AMDSMI_STATUS_BUSY); ret = amdsmi_get_gpu_fan_speed_max(processor_handles_[0], 0, &dmy_ui64); CHECK_RET(ret, AMDSMI_STATUS_BUSY); - ret = amdsmi_get_temp_metric(processor_handles_[0], TEMPERATURE_TYPE_EDGE, AMDSMI_TEMP_CURRENT, &dmy_i64); + ret = amdsmi_get_temp_metric(processor_handles_[0], AMDSMI_TEMPERATURE_TYPE_EDGE, AMDSMI_TEMP_CURRENT, &dmy_i64); CHECK_RET(ret, AMDSMI_STATUS_BUSY); ret = amdsmi_reset_gpu_fan(processor_handles_[0], 0); CHECK_RET(ret, AMDSMI_STATUS_BUSY); @@ -239,13 +239,13 @@ void TestMutualExclusion::Run(void) { CHECK_RET(ret, AMDSMI_STATUS_BUSY); ret = amdsmi_get_gpu_overdrive_level(processor_handles_[0], &dmy_ui32); CHECK_RET(ret, AMDSMI_STATUS_BUSY); - ret = amdsmi_get_clk_freq(processor_handles_[0], CLK_TYPE_SYS, &dmy_freqs); + ret = amdsmi_get_clk_freq(processor_handles_[0], AMDSMI_CLK_TYPE_SYS, &dmy_freqs); CHECK_RET(ret, AMDSMI_STATUS_BUSY); ret = amdsmi_get_gpu_od_volt_info(processor_handles_[0], &dmy_od_volt); CHECK_RET(ret, AMDSMI_STATUS_BUSY); ret = amdsmi_get_gpu_od_volt_curve_regions(processor_handles_[0], &dmy_ui32, &dmy_vlt_reg); CHECK_RET(ret, AMDSMI_STATUS_BUSY); - ret = amdsmi_set_clk_freq(processor_handles_[0], CLK_TYPE_SYS, 0); + ret = amdsmi_set_clk_freq(processor_handles_[0], AMDSMI_CLK_TYPE_SYS, 0); CHECK_RET(ret, AMDSMI_STATUS_BUSY); ret = amdsmi_get_gpu_ecc_count(processor_handles_[0], AMDSMI_GPU_BLOCK_UMC, &dmy_err_cnt); CHECK_RET(ret, AMDSMI_STATUS_BUSY); diff --git a/projects/amdsmi/tests/amd_smi_test/functional/temp_read.cc b/projects/amdsmi/tests/amd_smi_test/functional/temp_read.cc index fea3b4e5d0..5169047767 100755 --- a/projects/amdsmi/tests/amd_smi_test/functional/temp_read.cc +++ b/projects/amdsmi/tests/amd_smi_test/functional/temp_read.cc @@ -57,15 +57,15 @@ static const std::map kTempSensorNameMap = { - {TEMPERATURE_TYPE_VRAM, "Memory"}, - {TEMPERATURE_TYPE_HOTSPOT, "Hotspot"}, - {TEMPERATURE_TYPE_JUNCTION, "Junction"}, - {TEMPERATURE_TYPE_EDGE, "Edge"}, - {TEMPERATURE_TYPE_HBM_0, "HBM_0"}, - {TEMPERATURE_TYPE_HBM_1, "HBM_1"}, - {TEMPERATURE_TYPE_HBM_2, "HBM_2"}, - {TEMPERATURE_TYPE_HBM_3, "HBM_3"}, - {TEMPERATURE_TYPE_PLX, "PLX"} + {AMDSMI_TEMPERATURE_TYPE_VRAM, "Memory"}, + {AMDSMI_TEMPERATURE_TYPE_HOTSPOT, "Hotspot"}, + {AMDSMI_TEMPERATURE_TYPE_JUNCTION, "Junction"}, + {AMDSMI_TEMPERATURE_TYPE_EDGE, "Edge"}, + {AMDSMI_TEMPERATURE_TYPE_HBM_0, "HBM_0"}, + {AMDSMI_TEMPERATURE_TYPE_HBM_1, "HBM_1"}, + {AMDSMI_TEMPERATURE_TYPE_HBM_2, "HBM_2"}, + {AMDSMI_TEMPERATURE_TYPE_HBM_3, "HBM_3"}, + {AMDSMI_TEMPERATURE_TYPE_PLX, "PLX"} }; TestTempRead::TestTempRead() : TestBase() { set_title("AMDSMI Temp Read Test"); @@ -141,7 +141,7 @@ void TestTempRead::Run(void) { "C" << std::endl; } }; - for (type = TEMPERATURE_TYPE_FIRST; type <= TEMPERATURE_TYPE__MAX; ++type) { + for (type = AMDSMI_TEMPERATURE_TYPE_FIRST; type <= AMDSMI_TEMPERATURE_TYPE__MAX; ++type) { IF_VERB(STANDARD) { std::cout << "\t** **********" << kTempSensorNameMap.at(type) << " Temperatures **********" << std::endl; diff --git a/projects/amdsmi/tests/amd_smi_test/test_common.cc b/projects/amdsmi/tests/amd_smi_test/test_common.cc index 669c8186f1..9335626893 100644 --- a/projects/amdsmi/tests/amd_smi_test/test_common.cc +++ b/projects/amdsmi/tests/amd_smi_test/test_common.cc @@ -220,19 +220,19 @@ const std::string GetVoltSensorNameStr(amdsmi_voltage_type_t st) { return kVoltSensorNameMap.at(st); } const char *FreqEnumToStr(amdsmi_clk_type_t amdsmi_clk) { - static_assert(CLK_TYPE__MAX == CLK_TYPE_DCLK1, + static_assert(AMDSMI_CLK_TYPE__MAX == AMDSMI_CLK_TYPE_DCLK1, "FreqEnumToStr() needs to be updated"); switch (amdsmi_clk) { - case CLK_TYPE_SYS: return "System clock"; - case CLK_TYPE_DF: return "Data Fabric clock"; - case CLK_TYPE_DCEF: return "Display Controller Engine clock"; - case CLK_TYPE_SOC: return "SOC clock"; - case CLK_TYPE_MEM: return "Memory clock"; - case CLK_TYPE_PCIE: return "PCIE clock"; - case CLK_TYPE_VCLK0: return "VCLK0 clock"; - case CLK_TYPE_VCLK1: return "VCLK1 clock"; - case CLK_TYPE_DCLK0: return "DCLK0 clock"; - case CLK_TYPE_DCLK1: return "DCLK1 clock"; + case AMDSMI_CLK_TYPE_SYS: return "System clock"; + case AMDSMI_CLK_TYPE_DF: return "Data Fabric clock"; + case AMDSMI_CLK_TYPE_DCEF: return "Display Controller Engine clock"; + case AMDSMI_CLK_TYPE_SOC: return "SOC clock"; + case AMDSMI_CLK_TYPE_MEM: return "Memory clock"; + case AMDSMI_CLK_TYPE_PCIE: return "PCIE clock"; + case AMDSMI_CLK_TYPE_VCLK0: return "VCLK0 clock"; + case AMDSMI_CLK_TYPE_VCLK1: return "VCLK1 clock"; + case AMDSMI_CLK_TYPE_DCLK0: return "DCLK0 clock"; + case AMDSMI_CLK_TYPE_DCLK1: return "DCLK1 clock"; default: return "Invalid Clock ID"; } } diff --git a/projects/amdsmi/tests/amd_smi_test/test_utils.cc b/projects/amdsmi/tests/amd_smi_test/test_utils.cc index 0c0cc8a9b6..b1f461ffdc 100644 --- a/projects/amdsmi/tests/amd_smi_test/test_utils.cc +++ b/projects/amdsmi/tests/amd_smi_test/test_utils.cc @@ -49,28 +49,28 @@ #include "test_utils.h" static const std::map kDevFWNameMap = { - {FW_ID_ASD, "asd"}, - {FW_ID_CP_CE, "ce"}, - {FW_ID_DMCU_ERAM, "dmcu"}, // TODO(bliu): double check - {FW_ID_MC, "mc"}, - {FW_ID_CP_ME, "me"}, - {FW_ID_CP_MEC1, "mec1"}, - {FW_ID_CP_MEC2, "mec2"}, - {FW_ID_CP_MES, "mes"}, - {FW_ID_MES_KIQ, "mes_kiq"}, // TODO: double check - {FW_ID_CP_PFP, "pfp"}, - {FW_ID_RLC, "rlc"}, - {FW_ID_RLC_SRLG, "rlc_srlg"}, - {FW_ID_RLC_SRLS, "rlc_srls"}, - {FW_ID_SDMA1, "sdma1"}, - {FW_ID_SDMA2, "sdma2"}, - {FW_ID_PM, "pm"}, - {FW_ID_PSP_SOSDRV, "sos"}, - {FW_ID_TA_RAS, "ta_ras"}, - {FW_ID_TA_XGMI, "ta_xgmi"}, - {FW_ID_UVD, "uvd"}, - {FW_ID_VCE, "vce"}, - {FW_ID_VCN, "vcn"}, + {AMDSMI_FW_ID_ASD, "asd"}, + {AMDSMI_FW_ID_CP_CE, "ce"}, + {AMDSMI_FW_ID_DMCU_ERAM, "dmcu"}, // TODO(bliu): double check + {AMDSMI_FW_ID_MC, "mc"}, + {AMDSMI_FW_ID_CP_ME, "me"}, + {AMDSMI_FW_ID_CP_MEC1, "mec1"}, + {AMDSMI_FW_ID_CP_MEC2, "mec2"}, + {AMDSMI_FW_ID_CP_MES, "mes"}, + {AMDSMI_FW_ID_MES_KIQ, "mes_kiq"}, // TODO: double check + {AMDSMI_FW_ID_CP_PFP, "pfp"}, + {AMDSMI_FW_ID_RLC, "rlc"}, + {AMDSMI_FW_ID_RLC_SRLG, "rlc_srlg"}, + {AMDSMI_FW_ID_RLC_SRLS, "rlc_srls"}, + {AMDSMI_FW_ID_SDMA1, "sdma1"}, + {AMDSMI_FW_ID_SDMA2, "sdma2"}, + {AMDSMI_FW_ID_PM, "pm"}, + {AMDSMI_FW_ID_PSP_SOSDRV, "sos"}, + {AMDSMI_FW_ID_TA_RAS, "ta_ras"}, + {AMDSMI_FW_ID_TA_XGMI, "ta_xgmi"}, + {AMDSMI_FW_ID_UVD, "uvd"}, + {AMDSMI_FW_ID_VCE, "vce"}, + {AMDSMI_FW_ID_VCN, "vcn"}, }; const char * diff --git a/projects/amdsmi/tools/generator.py b/projects/amdsmi/tools/generator.py index cc3db2f92b..d9b6459d6e 100644 --- a/projects/amdsmi/tools/generator.py +++ b/projects/amdsmi/tools/generator.py @@ -73,7 +73,6 @@ def parseArgument(): def replace_line(full_path_file_name, string_to_repalce, new_string): fh, abs_path = tempfile.mkstemp() with os.fdopen(fh, 'w') as new_file: - new_file.write(HEADER) with open(full_path_file_name, 'r+', encoding='UTF-8') as old_file: for line in old_file: new_file.write(line.replace(string_to_repalce, new_string)) @@ -83,6 +82,19 @@ def replace_line(full_path_file_name, string_to_repalce, new_string): shutil.move(abs_path, full_path_file_name) +def write_header(full_path_file_name): + fh, abs_path = tempfile.mkstemp() + with os.fdopen(fh, 'w') as new_file: + new_file.write(HEADER) + with open(full_path_file_name, 'r+', encoding='UTF-8') as old_file: + for line in old_file: + new_file.write(line) + + shutil.copymode(full_path_file_name, abs_path) + os.remove(full_path_file_name) + shutil.move(abs_path, full_path_file_name) + + def main(): output_file, input_file, library, clang_extra_args = parseArgument() @@ -134,8 +146,41 @@ except OSError as error: arguments.append("--clang-args=-I" + clang_include_dir + clang_extra_args) clangToPy(arguments) + write_header(output_file) replace_line(output_file, line_to_replace, new_line) + # Custom handling for anonymous struct within amdsmi_bdf_t in Linux + if os_platform == "Linux": + # Get line number for anonymous error in struct_amdsmi_bdf_t + reference_line = "uint64_t function_number :" + line_number = -1 + with open(input_file, 'r') as file: + for input_file_line_number, line in enumerate(file, 1): + if reference_line in line: + line_number = input_file_line_number - 1 # Anonymous line will error on the line before this + break + + if line_number == -1: + print("Could not find reference line in amdsmi.h for amdsmi_bdf_t struct. Skipping anonymous struct replacement.") + else: + print(f"Found reference line in amdsmi.h for amdsmi_bdf_t struct at line {line_number}") + union_anon_line = "union_amdsmi_bdf_t._anonymous_ = ('_0',)" + replace_line(output_file, union_anon_line, "") + + internal_union_anon_line = f"('_0', struct_struct (anonymous at amdsmi.h:{line_number}:3))" + internal_union_struct_line = "('struct_amdsmi_bdf_t', struct_amdsmi_bdf_t)" + replace_line(output_file, internal_union_anon_line, internal_union_struct_line) + + struct_anon_line = f"struct_struct (anonymous at amdsmi.h:{line_number}:3)" + struct_amdsmi_bdf_t_line = "struct_amdsmi_bdf_t" + replace_line(output_file, struct_anon_line, struct_amdsmi_bdf_t_line) + + struct_anon_all_line = "'struct_struct (anonymous at" + struct_amdsmi_bdf_t_line = "'struct_amdsmi_bdf_t'," + replace_line(output_file, struct_anon_all_line, struct_amdsmi_bdf_t_line) + + struct_anon_all_line = f"amdsmi.h:{line_number}:3)', " + replace_line(output_file, struct_anon_all_line, "") if __name__ == "__main__": main()