[PATCH 2/6] drm/amdgpu: Move gfx flag in_suspend to adev

Quan, Evan Evan.Quan at amd.com
Sun Sep 30 03:02:05 UTC 2018


Reviewed-by: Evan Quan <evan.quan at amd.com>

> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of Rex
> Zhu
> Sent: 2018年9月30日 0:15
> To: amd-gfx at lists.freedesktop.org
> Cc: Zhu, Rex <Rex.Zhu at amd.com>
> Subject: [PATCH 2/6] drm/amdgpu: Move gfx flag in_suspend to adev
> 
> Move in_suspend flag to adev from gfx, so can be used in other ip blocks,
> also keep consistent with gpu_in_reset flag.
> 
> Signed-off-by: Rex Zhu <Rex.Zhu at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu.h        |  3 +++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |  3 +++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h    |  3 +--
>  drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c      | 13 +++----------
>  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 6583a68..7c44871 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -1046,6 +1046,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 a1d8d97..95095a8 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 f172e92..b61b5c1 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 c63ede1..6b1954e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> @@ -4732,7 +4732,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; @@ -4991,19 +4991,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 7a6a814..4b020cc 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)
> --
> 1.9.1
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list