aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorEvan Quan <evan.quan@amd.com>2019-07-25 10:12:42 +0800
committerAlex Deucher <alexander.deucher@amd.com>2019-07-30 23:23:37 -0500
commit4d7fd9e20b0784b07777728316da5bcc13f9f2ab (patch)
tree62da3358a6a7e8325b07a835417a8570e9e1a5f4 /drivers/gpu
parentf0d2a7dc1154ed680a8422916ab6a38860800de4 (diff)
downloadkernel_replicant_linux-4d7fd9e20b0784b07777728316da5bcc13f9f2ab.tar.gz
kernel_replicant_linux-4d7fd9e20b0784b07777728316da5bcc13f9f2ab.tar.bz2
kernel_replicant_linux-4d7fd9e20b0784b07777728316da5bcc13f9f2ab.zip
drm/amd/powerplay: enable SW SMU reset functionality
Move SMU irq handler register to sw_init as that's totally software related. Otherwise, it will prevent SMU reset working. Signed-off-by: Evan Quan <evan.quan@amd.com> Reviewed-by: Kenneth Feng <kenneth.feng@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/amd/powerplay/amdgpu_smu.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
index 24644f320073..e8dba0256457 100644
--- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
+++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
@@ -743,6 +743,12 @@ static int smu_sw_init(void *handle)
return ret;
}
+ ret = smu_register_irq_handler(smu);
+ if (ret) {
+ pr_err("Failed to register smc irq handler!\n");
+ return ret;
+ }
+
return 0;
}
@@ -752,6 +758,9 @@ static int smu_sw_fini(void *handle)
struct smu_context *smu = &adev->smu;
int ret;
+ kfree(smu->irq_source);
+ smu->irq_source = NULL;
+
ret = smu_smc_table_sw_fini(smu);
if (ret) {
pr_err("Failed to sw fini smc table!\n");
@@ -1111,10 +1120,6 @@ static int smu_hw_init(void *handle)
if (ret)
goto failed;
- ret = smu_register_irq_handler(smu);
- if (ret)
- goto failed;
-
if (!smu->pm_enabled)
adev->pm.dpm_enabled = false;
else
@@ -1144,9 +1149,6 @@ static int smu_hw_fini(void *handle)
kfree(table_context->overdrive_table);
table_context->overdrive_table = NULL;
- kfree(smu->irq_source);
- smu->irq_source = NULL;
-
ret = smu_fini_fb_allocations(smu);
if (ret)
return ret;