diff options
| author | Hawking Zhang <Hawking.Zhang@amd.com> | 2017-06-16 21:31:43 +0800 | 
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2017-06-29 12:43:45 -0400 | 
| commit | a95890b45fcf982b34a0357793499ed44f15ddd9 (patch) | |
| tree | a4b41170775ed0d9c3df32cd2cc65657791c4337 /drivers/gpu/drm | |
| parent | 2fcd43cef6e28ca546376af07c0454dc72b593f9 (diff) | |
drm/amdgpu: add interface to enable/disable mmhub pg on raven
Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c | 48 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.h | 2 | 
2 files changed, 50 insertions, 0 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c index 8447ce74304f..c885c0d9344b 100644 --- a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c +++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c @@ -414,6 +414,54 @@ void mmhub_v1_0_initialize_power_gating(struct amdgpu_device *adev)  	WREG32_SOC15(MMHUB, 0, mmPCTL1_MISC, pctl1_misc);  } +void mmhub_v1_0_update_power_gating(struct amdgpu_device *adev, +				bool enable) +{ +	uint32_t pctl0_reng_execute = 0; +	uint32_t pctl1_reng_execute = 0; + +	if (amdgpu_sriov_vf(adev)) +		return; + +	pctl0_reng_execute = RREG32_SOC15(MMHUB, 0, mmPCTL0_RENG_EXECUTE); +	pctl1_reng_execute = RREG32_SOC15(MMHUB, 0, mmPCTL1_RENG_EXECUTE); + +	if (enable) { +		pctl0_reng_execute = REG_SET_FIELD(pctl0_reng_execute, +						PCTL0_RENG_EXECUTE, +						RENG_EXECUTE_ON_PWR_UP, 1); +		pctl0_reng_execute = REG_SET_FIELD(pctl0_reng_execute, +						PCTL0_RENG_EXECUTE, +						RENG_EXECUTE_ON_REG_UPDATE, 1); +		WREG32_SOC15(MMHUB, 0, mmPCTL0_RENG_EXECUTE, pctl0_reng_execute); + +		pctl1_reng_execute = REG_SET_FIELD(pctl1_reng_execute, +						PCTL1_RENG_EXECUTE, +						RENG_EXECUTE_ON_PWR_UP, 1); +		pctl1_reng_execute = REG_SET_FIELD(pctl1_reng_execute, +						PCTL1_RENG_EXECUTE, +						RENG_EXECUTE_ON_REG_UPDATE, 1); +		WREG32_SOC15(MMHUB, 0, mmPCTL1_RENG_EXECUTE, pctl1_reng_execute); + +	} else { +		pctl0_reng_execute = REG_SET_FIELD(pctl0_reng_execute, +						PCTL0_RENG_EXECUTE, +						RENG_EXECUTE_ON_PWR_UP, 0); +		pctl0_reng_execute = REG_SET_FIELD(pctl0_reng_execute, +						PCTL0_RENG_EXECUTE, +						RENG_EXECUTE_ON_REG_UPDATE, 0); +		WREG32_SOC15(MMHUB, 0, mmPCTL0_RENG_EXECUTE, pctl0_reng_execute); + +		pctl1_reng_execute = REG_SET_FIELD(pctl1_reng_execute, +						PCTL1_RENG_EXECUTE, +						RENG_EXECUTE_ON_PWR_UP, 0); +		pctl1_reng_execute = REG_SET_FIELD(pctl1_reng_execute, +						PCTL1_RENG_EXECUTE, +						RENG_EXECUTE_ON_REG_UPDATE, 0); +		WREG32_SOC15(MMHUB, 0, mmPCTL1_RENG_EXECUTE, pctl1_reng_execute); +	} +} +  int mmhub_v1_0_gart_enable(struct amdgpu_device *adev)  {  	if (amdgpu_sriov_vf(adev)) { diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.h b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.h index 025b88b9de81..57bb940c0ecd 100644 --- a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.h +++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.h @@ -33,6 +33,8 @@ int mmhub_v1_0_set_clockgating(struct amdgpu_device *adev,  			       enum amd_clockgating_state state);  void mmhub_v1_0_get_clockgating(struct amdgpu_device *adev, u32 *flags);  void mmhub_v1_0_initialize_power_gating(struct amdgpu_device *adev); +void mmhub_v1_0_update_power_gating(struct amdgpu_device *adev, +                                bool enable);  extern const struct amd_ip_funcs mmhub_v1_0_ip_funcs;  extern const struct amdgpu_ip_block_version mmhub_v1_0_ip_block; | 
