diff options
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 3 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 3 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h | 3 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 13 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 16 | 
5 files changed, 14 insertions, 24 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 44140cce067c..d0102cfc8efb 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -1015,6 +1015,9 @@ struct amdgpu_device {  	bool has_hw_reset;  	u8				reset_magic[AMDGPU_RESET_MAGIC_NUM]; +	/* s3/s4 mask */ +	bool                            in_suspend; +  	/* record last mm index being written through WREG32*/  	unsigned long last_mm_index;  	bool                            in_gpu_reset; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index a1d8d97252e0..95095a8d2125 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -2649,6 +2649,7 @@ int amdgpu_device_suspend(struct drm_device *dev, bool suspend, bool fbcon)  	if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)  		return 0; +	adev->in_suspend = true;  	drm_kms_helper_poll_disable(dev);  	if (fbcon) @@ -2834,6 +2835,8 @@ int amdgpu_device_resume(struct drm_device *dev, bool resume, bool fbcon)  #ifdef CONFIG_PM  	dev->dev->power.disable_depth--;  #endif +	adev->in_suspend = false; +  	return 0;  } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h index f172e92c463c..b61b5c11aead 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h @@ -297,8 +297,7 @@ struct amdgpu_gfx {  	/* reset mask */  	uint32_t                        grbm_soft_reset;  	uint32_t                        srbm_soft_reset; -	/* s3/s4 mask */ -	bool                            in_suspend; +  	/* NGG */  	struct amdgpu_ngg		ngg; diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c index 2aeef2bb93a4..f9e0a21435f8 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c @@ -4872,7 +4872,7 @@ static int gfx_v8_0_kcq_init_queue(struct amdgpu_ring *ring)  	struct vi_mqd *mqd = ring->mqd_ptr;  	int mqd_idx = ring - &adev->gfx.compute_ring[0]; -	if (!adev->in_gpu_reset && !adev->gfx.in_suspend) { +	if (!adev->in_gpu_reset && !adev->in_suspend) {  		memset((void *)mqd, 0, sizeof(struct vi_mqd_allocation));  		((struct vi_mqd_allocation *)mqd)->dynamic_cu_mask = 0xFFFFFFFF;  		((struct vi_mqd_allocation *)mqd)->dynamic_rb_mask = 0xFFFFFFFF; @@ -5142,19 +5142,12 @@ static int gfx_v8_0_hw_fini(void *handle)  static int gfx_v8_0_suspend(void *handle)  { -	struct amdgpu_device *adev = (struct amdgpu_device *)handle; -	adev->gfx.in_suspend = true; -	return gfx_v8_0_hw_fini(adev); +	return gfx_v8_0_hw_fini(handle);  }  static int gfx_v8_0_resume(void *handle)  { -	int r; -	struct amdgpu_device *adev = (struct amdgpu_device *)handle; - -	r = gfx_v8_0_hw_init(adev); -	adev->gfx.in_suspend = false; -	return r; +	return gfx_v8_0_hw_init(handle);  }  static bool gfx_v8_0_check_soft_reset(void *handle) diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c index 7a6a814ba9b8..4b020cc4bea9 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c @@ -3198,7 +3198,7 @@ static int gfx_v9_0_kcq_init_queue(struct amdgpu_ring *ring)  	struct v9_mqd *mqd = ring->mqd_ptr;  	int mqd_idx = ring - &adev->gfx.compute_ring[0]; -	if (!adev->in_gpu_reset && !adev->gfx.in_suspend) { +	if (!adev->in_gpu_reset && !adev->in_suspend) {  		memset((void *)mqd, 0, sizeof(struct v9_mqd_allocation));  		((struct v9_mqd_allocation *)mqd)->dynamic_cu_mask = 0xFFFFFFFF;  		((struct v9_mqd_allocation *)mqd)->dynamic_rb_mask = 0xFFFFFFFF; @@ -3417,7 +3417,7 @@ static int gfx_v9_0_hw_fini(void *handle)  	/* Use deinitialize sequence from CAIL when unbinding device from driver,  	 * otherwise KIQ is hanging when binding back  	 */ -	if (!adev->in_gpu_reset && !adev->gfx.in_suspend) { +	if (!adev->in_gpu_reset && !adev->in_suspend) {  		mutex_lock(&adev->srbm_mutex);  		soc15_grbm_select(adev, adev->gfx.kiq.ring.me,  				adev->gfx.kiq.ring.pipe, @@ -3437,20 +3437,12 @@ static int gfx_v9_0_hw_fini(void *handle)  static int gfx_v9_0_suspend(void *handle)  { -	struct amdgpu_device *adev = (struct amdgpu_device *)handle; - -	adev->gfx.in_suspend = true; -	return gfx_v9_0_hw_fini(adev); +	return gfx_v9_0_hw_fini(handle);  }  static int gfx_v9_0_resume(void *handle)  { -	struct amdgpu_device *adev = (struct amdgpu_device *)handle; -	int r; - -	r = gfx_v9_0_hw_init(adev); -	adev->gfx.in_suspend = false; -	return r; +	return gfx_v9_0_hw_init(handle);  }  static bool gfx_v9_0_is_idle(void *handle) | 
