diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_device.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 22 | 
1 files changed, 20 insertions, 2 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 559dc24ef436..f84f9e35a73b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -2008,8 +2008,24 @@ static void amdgpu_device_fill_reset_magic(struct amdgpu_device *adev)   */  static bool amdgpu_device_check_vram_lost(struct amdgpu_device *adev)  { -	return !!memcmp(adev->gart.ptr, adev->reset_magic, -			AMDGPU_RESET_MAGIC_NUM); +	if (memcmp(adev->gart.ptr, adev->reset_magic, +			AMDGPU_RESET_MAGIC_NUM)) +		return true; + +	if (!adev->in_gpu_reset) +		return false; + +	/* +	 * For all ASICs with baco/mode1 reset, the VRAM is +	 * always assumed to be lost. +	 */ +	switch (amdgpu_asic_reset_method(adev)) { +	case AMD_RESET_METHOD_BACO: +	case AMD_RESET_METHOD_MODE1: +		return true; +	default: +		return false; +	}  }  /** @@ -2340,6 +2356,8 @@ static int amdgpu_device_ip_suspend_phase1(struct amdgpu_device *adev)  {  	int i, r; +	amdgpu_device_set_pg_state(adev, AMD_PG_STATE_UNGATE); +	amdgpu_device_set_cg_state(adev, AMD_CG_STATE_UNGATE);  	for (i = adev->num_ip_blocks - 1; i >= 0; i--) {  		if (!adev->ip_blocks[i].status.valid) |