]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amd/pm: Add common smu fw check function
authorAsad Kamal <asad.kamal@amd.com>
Thu, 12 Mar 2026 07:26:16 +0000 (15:26 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 17 Mar 2026 14:33:47 +0000 (10:33 -0400)
Add common smu firmware version check function

Signed-off-by: Asad Kamal <asad.kamal@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c
drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h

index 326c86b920a2f134db514c7dee70755d78ef707a..a644579903f400fd545cb388e9be4146284c50e1 100644 (file)
@@ -1035,6 +1035,35 @@ int smu_cmn_get_smc_version(struct smu_context *smu,
        return ret;
 }
 
+int smu_cmn_check_fw_version(struct smu_context *smu)
+{
+       struct amdgpu_device *adev = smu->adev;
+       uint32_t if_version = 0xff, smu_version = 0xff;
+       uint8_t smu_program, smu_major, smu_minor, smu_debug;
+       int ret;
+
+       ret = smu_cmn_get_smc_version(smu, &if_version, &smu_version);
+       if (ret)
+               return ret;
+
+       smu_program = (smu_version >> 24) & 0xff;
+       smu_major = (smu_version >> 16) & 0xff;
+       smu_minor = (smu_version >> 8) & 0xff;
+       smu_debug = (smu_version >> 0) & 0xff;
+       adev->pm.fw_version = smu_version;
+
+       dev_info_once(adev->dev, "smu driver if version = 0x%08x, smu fw if version = 0x%08x, "
+                     "smu fw program = %d, smu fw version = 0x%08x (%d.%d.%d)\n",
+                     smu->smc_driver_if_version, if_version,
+                     smu_program, smu_version, smu_major, smu_minor, smu_debug);
+
+       if (smu->smc_driver_if_version != SMU_IGNORE_IF_VERSION &&
+           if_version != smu->smc_driver_if_version)
+               dev_info(adev->dev, "SMU driver if version not matched\n");
+
+       return 0;
+}
+
 int smu_cmn_update_table(struct smu_context *smu,
                         enum smu_table_id table_index,
                         int argument,
index b7bfddc65fb217896382fdb0c3e366528b6d792c..e4d282d8bcae39b51f07e8ce2e1b75062425e96a 100644 (file)
@@ -207,6 +207,7 @@ int smu_cmn_print_pcie_levels(struct smu_context *smu,
 
 int smu_cmn_dpm_pcie_gen_idx(int gen);
 int smu_cmn_dpm_pcie_width_idx(int width);
+int smu_cmn_check_fw_version(struct smu_context *smu);
 
 /*SMU gpu metrics */