drm/amd/powerplay: implement is_support_sw_smu function for new smu
authorKevin Wang <Kevin1.Wang@amd.com>
Thu, 10 Jan 2019 04:33:23 +0000 (12:33 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 19 Mar 2019 20:03:57 +0000 (15:03 -0500)
add this helper to check new sw-smu support.

Signed-off-by: Kevin Wang <Kevin1.Wang@amd.com>
Reviewed-by: Huang Rui <ray.huang@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
drivers/gpu/drm/amd/amdgpu/soc15.c
drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h

index c124a90e147575b85e741a0653094c07b8ecb77d..a5ca9c4ccbf5a03ae6b466ae044699857897e2c7 100644 (file)
@@ -712,7 +712,7 @@ static ssize_t amdgpu_get_pp_dpm_sclk(struct device *dev,
        struct drm_device *ddev = dev_get_drvdata(dev);
        struct amdgpu_device *adev = ddev->dev_private;
 
-       if (adev->smu.ppt_funcs)
+       if (is_support_sw_smu(adev))
                return smu_print_clk_levels(&adev->smu, PP_SCLK, buf);
        else if (adev->powerplay.pp_funcs->print_clock_levels)
                return amdgpu_dpm_print_clock_levels(adev, PP_SCLK, buf);
@@ -786,7 +786,7 @@ static ssize_t amdgpu_get_pp_dpm_mclk(struct device *dev,
        struct drm_device *ddev = dev_get_drvdata(dev);
        struct amdgpu_device *adev = ddev->dev_private;
 
-       if (adev->smu.ppt_funcs)
+       if (is_support_sw_smu(adev))
                return smu_print_clk_levels(&adev->smu, PP_MCLK, buf);
        else if (adev->powerplay.pp_funcs->print_clock_levels)
                return amdgpu_dpm_print_clock_levels(adev, PP_MCLK, buf);
index 3bf5580d674783123855e8fbf0c40fe0f9e6d7a3..9f6ce6e83494093a1aa6e61288e243673af2eff0 100644 (file)
@@ -605,7 +605,7 @@ int soc15_set_ip_blocks(struct amdgpu_device *adev)
                amdgpu_device_ip_block_add(adev, &gfx_v9_0_ip_block);
                amdgpu_device_ip_block_add(adev, &sdma_v4_0_ip_block);
                if (!amdgpu_sriov_vf(adev)) {
-                       if (amdgpu_dpm == 1 && adev->asic_type >= CHIP_VEGA20)
+                       if (is_support_sw_smu(adev))
                                amdgpu_device_ip_block_add(adev, &smu_v11_0_ip_block);
                        else
                                amdgpu_device_ip_block_add(adev, &pp_smu_ip_block);
index 56095a400731ce66842771ce506795df1125417f..f35c2177d13d8e5917c29fbad9ba5e1634ea0678 100644 (file)
@@ -65,6 +65,17 @@ int smu_update_table(struct smu_context *smu, uint32_t table_id,
        return ret;
 }
 
+bool is_support_sw_smu(struct amdgpu_device *adev)
+{
+       if (amdgpu_dpm != 1)
+               return false;
+
+       if (adev->asic_type >= CHIP_VEGA20)
+               return true;
+
+       return false;
+}
+
 int smu_feature_init_dpm(struct smu_context *smu)
 {
        struct smu_feature *feature = &smu->smu_feature;
@@ -222,7 +233,7 @@ static int smu_sw_init(void *handle)
        struct smu_context *smu = &adev->smu;
        int ret;
 
-       if (adev->asic_type < CHIP_VEGA20)
+       if (!is_support_sw_smu(adev))
                return -EINVAL;
 
        smu->pool_size = adev->pm.smu_prv_buffer_size;
@@ -252,7 +263,7 @@ static int smu_sw_fini(void *handle)
        struct smu_context *smu = &adev->smu;
        int ret;
 
-       if (adev->asic_type < CHIP_VEGA20)
+       if (!is_support_sw_smu(adev))
                return -EINVAL;
 
        ret = smu_smc_table_sw_fini(smu);
@@ -517,7 +528,7 @@ static int smu_hw_init(void *handle)
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
        struct smu_context *smu = &adev->smu;
 
-       if (adev->asic_type < CHIP_VEGA20)
+       if (!is_support_sw_smu(adev))
                return -EINVAL;
 
        if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP) {
@@ -576,7 +587,7 @@ static int smu_hw_fini(void *handle)
        struct smu_table_context *table_context = &smu->smu_table;
        int ret = 0;
 
-       if (adev->asic_type < CHIP_VEGA20)
+       if (!is_support_sw_smu(adev))
                return -EINVAL;
 
        if (!table_context->driver_pptable)
@@ -603,7 +614,7 @@ static int smu_suspend(void *handle)
 {
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
-       if (adev->asic_type < CHIP_VEGA20)
+       if (!is_support_sw_smu(adev))
                return -EINVAL;
 
        return 0;
@@ -615,7 +626,7 @@ static int smu_resume(void *handle)
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
        struct smu_context *smu = &adev->smu;
 
-       if (adev->asic_type < CHIP_VEGA20)
+       if (!is_support_sw_smu(adev))
                return -EINVAL;
 
        pr_info("SMU is resuming...\n");
index c159e4d731fe601f8fe80cfef7c429e00a0f6b7d..51fb1f9b2abf090f1f5e38fc13b712b429d25f4f 100644 (file)
@@ -366,5 +366,6 @@ extern int smu_feature_set_supported(struct smu_context *smu, int feature_id, bo
 
 int smu_update_table(struct smu_context *smu, uint32_t table_id,
                     void *table_data, bool drv2smu);
+bool is_support_sw_smu(struct amdgpu_device *adev);
 
 #endif