drm/amd/powerplay: bypass dpm_context null pointer check guard for some smu series
authorPrike Liang <Prike.Liang@amd.com>
Wed, 18 Sep 2019 07:11:34 +0000 (15:11 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 3 Oct 2019 14:11:04 +0000 (09:11 -0500)
For now APU has no smu_dpm_context structure for containing default/current related dpm tables,
thus will needn't initialize smu_dpm_context to aviod APU null pointer issue.

Signed-off-by: Prike Liang <Prike.Liang@amd.com>
Reviewed-by: Kevin Wang <kevin1.wang@amd.com>
Reviewed-by: Evan Quan <evan.quan@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

index df510cb86da507886a8c9cbc6b9c50e1b3f3e7f8..d9ef4ae4b8f65076ec6d94e7bd7e384b76089cda 100644 (file)
@@ -1559,7 +1559,8 @@ static int smu_enable_umd_pstate(void *handle,
 
        struct smu_context *smu = (struct smu_context*)(handle);
        struct smu_dpm_context *smu_dpm_ctx = &(smu->smu_dpm);
-       if (!smu->pm_enabled || !smu_dpm_ctx->dpm_context)
+
+       if (!smu->is_apu && (!smu->pm_enabled || !smu_dpm_ctx->dpm_context))
                return -EINVAL;
 
        if (!(smu_dpm_ctx->dpm_level & profile_mode_mask)) {
@@ -1757,7 +1758,7 @@ enum amd_dpm_forced_level smu_get_performance_level(struct smu_context *smu)
        struct smu_dpm_context *smu_dpm_ctx = &(smu->smu_dpm);
        enum amd_dpm_forced_level level;
 
-       if (!smu_dpm_ctx->dpm_context)
+       if (!smu->is_apu && !smu_dpm_ctx->dpm_context)
                return -EINVAL;
 
        mutex_lock(&(smu->mutex));
@@ -1772,7 +1773,7 @@ int smu_force_performance_level(struct smu_context *smu, enum amd_dpm_forced_lev
        struct smu_dpm_context *smu_dpm_ctx = &(smu->smu_dpm);
        int ret = 0;
 
-       if (!smu_dpm_ctx->dpm_context)
+       if (!smu->is_apu && !smu_dpm_ctx->dpm_context)
                return -EINVAL;
 
        ret = smu_enable_umd_pstate(smu, &level);
index bc4b73e0718e36b61d39fcfe7f7a23ff470314e1..f1b37896555199f2d8b2413c1b368904ef1c0c22 100644 (file)
@@ -388,6 +388,7 @@ struct smu_context
        uint32_t power_profile_mode;
        uint32_t default_power_profile_mode;
        bool pm_enabled;
+       bool is_apu;
 
        uint32_t smc_if_version;
 
index 9311b6acc34dcab4b88edf981e8441fdb6373c33..0985da2ed922bfec26945255a2f4501e8851278b 100644 (file)
@@ -319,4 +319,5 @@ void renoir_set_ppt_funcs(struct smu_context *smu)
 {
        smu->ppt_funcs = &renoir_ppt_funcs;
        smu->smc_if_version = SMU12_DRIVER_IF_VERSION;
+       smu->is_apu = true;
 }