Skip to content

Commit

Permalink
drm/amdgpu: fix CG enabling hang with gfxoff enabled
Browse files Browse the repository at this point in the history
After defer the execution of clockgating enabling, at that time, gfx already
enter into "off" state. Howerver, clockgating enabling will use MMIO to access
the gfx registers, then get the gfx hung.

So here we should move the gfx powergating and gfxoff enabling behavior at the
end of initialization behind clockgating.

Signed-off-by: Huang Rui <ray.huang@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
Cc: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
  • Loading branch information
Huang Rui authored and Alex Deucher committed Jun 13, 2018
1 parent 387f49e commit 06b18f6
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 8 deletions.
12 changes: 12 additions & 0 deletions drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -1730,6 +1730,18 @@ static int amdgpu_device_ip_late_set_cg_state(struct amdgpu_device *adev)
}
}
}

if (adev->powerplay.pp_feature & PP_GFXOFF_MASK) {
/* enable gfx powergating */
amdgpu_device_ip_set_powergating_state(adev,
AMD_IP_BLOCK_TYPE_GFX,
AMD_PG_STATE_GATE);
/* enable gfxoff */
amdgpu_device_ip_set_powergating_state(adev,
AMD_IP_BLOCK_TYPE_SMC,
AMD_PG_STATE_GATE);
}

return 0;
}

Expand Down
5 changes: 0 additions & 5 deletions drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
Original file line number Diff line number Diff line change
Expand Up @@ -3405,11 +3405,6 @@ static int gfx_v9_0_late_init(void *handle)
if (r)
return r;

r = amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_GFX,
AMD_PG_STATE_GATE);
if (r)
return r;

return 0;
}

Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/amd/powerplay/amd_powerplay.c
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ static int pp_set_powergating_state(void *handle,
}

if (hwmgr->hwmgr_func->enable_per_cu_power_gating == NULL) {
pr_info("%s was not implemented.\n", __func__);
pr_debug("%s was not implemented.\n", __func__);
return 0;
}

Expand Down
4 changes: 2 additions & 2 deletions drivers/gpu/drm/amd/powerplay/hwmgr/smu10_hwmgr.c
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ static int smu10_disable_gfx_off(struct pp_hwmgr *hwmgr)

static int smu10_disable_dpm_tasks(struct pp_hwmgr *hwmgr)
{
return smu10_disable_gfx_off(hwmgr);
return 0;
}

static int smu10_enable_gfx_off(struct pp_hwmgr *hwmgr)
Expand All @@ -328,7 +328,7 @@ static int smu10_enable_gfx_off(struct pp_hwmgr *hwmgr)

static int smu10_enable_dpm_tasks(struct pp_hwmgr *hwmgr)
{
return smu10_enable_gfx_off(hwmgr);
return 0;
}

static int smu10_gfx_off_control(struct pp_hwmgr *hwmgr, bool enable)
Expand Down

0 comments on commit 06b18f6

Please sign in to comment.