Commit b0b00ff1 authored by Arindam Nath's avatar Arindam Nath Committed by Alex Deucher

drm/amd/amdgpu: enable clockgating only after late init

Sometimes during multiple reboots, the system hangs
during bootup. The issue is very random and happens
once in around 50 reboots or so.

It seems if clockgating is enabled before late init,
the GFX engine sometimes does not respond.

This patch changes the ordering a little so that
both powergating and clockgating are enabled only
after late init calls.
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarArindam Nath <arindam.nath@amd.com>
Tested-by: default avatarSunil Uttarwar <Sunil.Uttarwar1@amd.com>
Reviewed-by: default avatarTom St Denis <tom.stdenis@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 113d0f9d
...@@ -1411,13 +1411,6 @@ static int amdgpu_late_init(struct amdgpu_device *adev) ...@@ -1411,13 +1411,6 @@ static int amdgpu_late_init(struct amdgpu_device *adev)
if (adev->ip_blocks[i].type == AMD_IP_BLOCK_TYPE_UVD || if (adev->ip_blocks[i].type == AMD_IP_BLOCK_TYPE_UVD ||
adev->ip_blocks[i].type == AMD_IP_BLOCK_TYPE_VCE) adev->ip_blocks[i].type == AMD_IP_BLOCK_TYPE_VCE)
continue; continue;
/* enable clockgating to save power */
r = adev->ip_blocks[i].funcs->set_clockgating_state((void *)adev,
AMD_CG_STATE_GATE);
if (r) {
DRM_ERROR("set_clockgating_state(gate) of IP block <%s> failed %d\n", adev->ip_blocks[i].funcs->name, r);
return r;
}
if (adev->ip_blocks[i].funcs->late_init) { if (adev->ip_blocks[i].funcs->late_init) {
r = adev->ip_blocks[i].funcs->late_init((void *)adev); r = adev->ip_blocks[i].funcs->late_init((void *)adev);
if (r) { if (r) {
...@@ -1426,6 +1419,13 @@ static int amdgpu_late_init(struct amdgpu_device *adev) ...@@ -1426,6 +1419,13 @@ static int amdgpu_late_init(struct amdgpu_device *adev)
} }
adev->ip_block_status[i].late_initialized = true; adev->ip_block_status[i].late_initialized = true;
} }
/* enable clockgating to save power */
r = adev->ip_blocks[i].funcs->set_clockgating_state((void *)adev,
AMD_CG_STATE_GATE);
if (r) {
DRM_ERROR("set_clockgating_state(gate) of IP block <%s> failed %d\n", adev->ip_blocks[i].funcs->name, r);
return r;
}
} }
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment