drm/amdgpu: cache smu fw version info
authorJohn Clements <john.clements@amd.com>
Wed, 15 Apr 2020 02:57:33 +0000 (10:57 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 22 Apr 2020 22:11:46 +0000 (18:11 -0400)
reduce cmd submission to smu by caching version info

Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: John Clements <john.clements@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
drivers/gpu/drm/amd/powerplay/renoir_ppt.c
drivers/gpu/drm/amd/powerplay/smu_v11_0.c
drivers/gpu/drm/amd/powerplay/smu_v12_0.c

index acbbc50..d4599fa 100644 (file)
@@ -196,16 +196,31 @@ int smu_get_smc_version(struct smu_context *smu, uint32_t *if_version, uint32_t
        if (!if_version && !smu_version)
                return -EINVAL;
 
+       if (smu->smc_fw_if_version && smu->smc_fw_version)
+       {
+               if (if_version)
+                       *if_version = smu->smc_fw_if_version;
+
+               if (smu_version)
+                       *smu_version = smu->smc_fw_version;
+
+               return 0;
+       }
+
        if (if_version) {
                ret = smu_send_smc_msg(smu, SMU_MSG_GetDriverIfVersion, if_version);
                if (ret)
                        return ret;
+
+               smu->smc_fw_if_version = *if_version;
        }
 
        if (smu_version) {
                ret = smu_send_smc_msg(smu, SMU_MSG_GetSmuVersion, smu_version);
                if (ret)
                        return ret;
+
+               smu->smc_fw_version = *smu_version;
        }
 
        return ret;
index 30643b9..928eed2 100644 (file)
@@ -405,7 +405,9 @@ struct smu_context
        bool pm_enabled;
        bool is_apu;
 
-       uint32_t smc_if_version;
+       uint32_t smc_driver_if_version;
+       uint32_t smc_fw_if_version;
+       uint32_t smc_fw_version;
 
        bool uploading_custom_pp_table;
        bool dc_controlled_by_gpio;
index d9e1365..281b7b6 100644 (file)
@@ -950,6 +950,6 @@ static const struct pptable_funcs renoir_ppt_funcs = {
 void renoir_set_ppt_funcs(struct smu_context *smu)
 {
        smu->ppt_funcs = &renoir_ppt_funcs;
-       smu->smc_if_version = SMU12_DRIVER_IF_VERSION;
+       smu->smc_driver_if_version = SMU12_DRIVER_IF_VERSION;
        smu->is_apu = true;
 }
index a96ea3e..a97b296 100644 (file)
@@ -266,23 +266,23 @@ int smu_v11_0_check_fw_version(struct smu_context *smu)
 
        switch (smu->adev->asic_type) {
        case CHIP_VEGA20:
-               smu->smc_if_version = SMU11_DRIVER_IF_VERSION_VG20;
+               smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_VG20;
                break;
        case CHIP_ARCTURUS:
-               smu->smc_if_version = SMU11_DRIVER_IF_VERSION_ARCT;
+               smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_ARCT;
                break;
        case CHIP_NAVI10:
-               smu->smc_if_version = SMU11_DRIVER_IF_VERSION_NV10;
+               smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV10;
                break;
        case CHIP_NAVI12:
-               smu->smc_if_version = SMU11_DRIVER_IF_VERSION_NV12;
+               smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV12;
                break;
        case CHIP_NAVI14:
-               smu->smc_if_version = SMU11_DRIVER_IF_VERSION_NV14;
+               smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV14;
                break;
        default:
                pr_err("smu unsupported asic type:%d.\n", smu->adev->asic_type);
-               smu->smc_if_version = SMU11_DRIVER_IF_VERSION_INV;
+               smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_INV;
                break;
        }
 
@@ -294,10 +294,10 @@ int smu_v11_0_check_fw_version(struct smu_context *smu)
         * Considering above, we just leave user a warning message instead
         * of halt driver loading.
         */
-       if (if_version != smu->smc_if_version) {
+       if (if_version != smu->smc_driver_if_version) {
                pr_info("smu driver if version = 0x%08x, smu fw if version = 0x%08x, "
                        "smu fw version = 0x%08x (%d.%d.%d)\n",
-                       smu->smc_if_version, if_version,
+                       smu->smc_driver_if_version, if_version,
                        smu_version, smu_major, smu_minor, smu_debug);
                pr_warn("SMU driver if version not matched\n");
        }
index 4fc68d4..4023d10 100644 (file)
@@ -160,10 +160,10 @@ int smu_v12_0_check_fw_version(struct smu_context *smu)
         * Considering above, we just leave user a warning message instead
         * of halt driver loading.
         */
-       if (if_version != smu->smc_if_version) {
+       if (if_version != smu->smc_driver_if_version) {
                pr_info("smu driver if version = 0x%08x, smu fw if version = 0x%08x, "
                        "smu fw version = 0x%08x (%d.%d.%d)\n",
-                       smu->smc_if_version, if_version,
+                       smu->smc_driver_if_version, if_version,
                        smu_version, smu_major, smu_minor, smu_debug);
                pr_warn("SMU driver if version not matched\n");
        }