diff options
author | Rex Zhu <Rex.Zhu@amd.com> | 2018-10-18 22:46:53 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-10-24 21:04:03 -0400 |
commit | 7179d24040d66de22e4710e943256be9e1045feb (patch) | |
tree | 057355430d6663577ad36f1b8bca8a037c45a099 | |
parent | 6f059c641b31076248ba89d0f7e0e753946a8099 (diff) |
drm/amdgpu: Fix null point error
need to check adev->powerplay.pp_funcs first, becasue from
AI, the smu ip can be disabled by user, and the pp_handle
is null in this case.
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 6 |
4 files changed, 10 insertions, 6 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c index 297a5490ad8c..0a4fba196b84 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c | |||
@@ -135,7 +135,8 @@ static int acp_poweroff(struct generic_pm_domain *genpd) | |||
135 | * 2. power off the acp tiles | 135 | * 2. power off the acp tiles |
136 | * 3. check and enter ulv state | 136 | * 3. check and enter ulv state |
137 | */ | 137 | */ |
138 | if (adev->powerplay.pp_funcs->set_powergating_by_smu) | 138 | if (adev->powerplay.pp_funcs && |
139 | adev->powerplay.pp_funcs->set_powergating_by_smu) | ||
139 | amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_ACP, true); | 140 | amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_ACP, true); |
140 | } | 141 | } |
141 | return 0; | 142 | return 0; |
@@ -517,7 +518,8 @@ static int acp_set_powergating_state(void *handle, | |||
517 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | 518 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; |
518 | bool enable = state == AMD_PG_STATE_GATE ? true : false; | 519 | bool enable = state == AMD_PG_STATE_GATE ? true : false; |
519 | 520 | ||
520 | if (adev->powerplay.pp_funcs->set_powergating_by_smu) | 521 | if (adev->powerplay.pp_funcs && |
522 | adev->powerplay.pp_funcs->set_powergating_by_smu) | ||
521 | amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_ACP, enable); | 523 | amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_ACP, enable); |
522 | 524 | ||
523 | return 0; | 525 | return 0; |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c index 790fd5408ddf..1a656b8657f7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | |||
@@ -392,7 +392,7 @@ void amdgpu_gfx_off_ctrl(struct amdgpu_device *adev, bool enable) | |||
392 | if (!(adev->powerplay.pp_feature & PP_GFXOFF_MASK)) | 392 | if (!(adev->powerplay.pp_feature & PP_GFXOFF_MASK)) |
393 | return; | 393 | return; |
394 | 394 | ||
395 | if (!adev->powerplay.pp_funcs->set_powergating_by_smu) | 395 | if (!adev->powerplay.pp_funcs || !adev->powerplay.pp_funcs->set_powergating_by_smu) |
396 | return; | 396 | return; |
397 | 397 | ||
398 | 398 | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c index 14649f8475f3..fd23ba1226a5 100644 --- a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c +++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c | |||
@@ -280,7 +280,7 @@ void mmhub_v1_0_update_power_gating(struct amdgpu_device *adev, | |||
280 | return; | 280 | return; |
281 | 281 | ||
282 | if (enable && adev->pg_flags & AMD_PG_SUPPORT_MMHUB) { | 282 | if (enable && adev->pg_flags & AMD_PG_SUPPORT_MMHUB) { |
283 | if (adev->powerplay.pp_funcs->set_powergating_by_smu) | 283 | if (adev->powerplay.pp_funcs && adev->powerplay.pp_funcs->set_powergating_by_smu) |
284 | amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_GMC, true); | 284 | amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_GMC, true); |
285 | 285 | ||
286 | } | 286 | } |
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c index 04fa3d972636..7a8c9172d30a 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | |||
@@ -1366,7 +1366,8 @@ static int sdma_v4_0_hw_init(void *handle) | |||
1366 | int r; | 1366 | int r; |
1367 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | 1367 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; |
1368 | 1368 | ||
1369 | if (adev->asic_type == CHIP_RAVEN && adev->powerplay.pp_funcs->set_powergating_by_smu) | 1369 | if (adev->asic_type == CHIP_RAVEN && adev->powerplay.pp_funcs && |
1370 | adev->powerplay.pp_funcs->set_powergating_by_smu) | ||
1370 | amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_SDMA, false); | 1371 | amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_SDMA, false); |
1371 | 1372 | ||
1372 | sdma_v4_0_init_golden_registers(adev); | 1373 | sdma_v4_0_init_golden_registers(adev); |
@@ -1386,7 +1387,8 @@ static int sdma_v4_0_hw_fini(void *handle) | |||
1386 | sdma_v4_0_ctx_switch_enable(adev, false); | 1387 | sdma_v4_0_ctx_switch_enable(adev, false); |
1387 | sdma_v4_0_enable(adev, false); | 1388 | sdma_v4_0_enable(adev, false); |
1388 | 1389 | ||
1389 | if (adev->asic_type == CHIP_RAVEN && adev->powerplay.pp_funcs->set_powergating_by_smu) | 1390 | if (adev->asic_type == CHIP_RAVEN && adev->powerplay.pp_funcs |
1391 | && adev->powerplay.pp_funcs->set_powergating_by_smu) | ||
1390 | amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_SDMA, true); | 1392 | amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_SDMA, true); |
1391 | 1393 | ||
1392 | return 0; | 1394 | return 0; |