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

2018-09-29 Thread Quan, Evan
Reviewed-by: Evan Quan 

> -Original Message-
> From: amd-gfx  On Behalf Of Rex
> Zhu
> Sent: 2018年9月30日 0:15
> To: amd-gfx@lists.freedesktop.org
> Cc: Zhu, Rex 
> 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 
> ---
>  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 */
> + boolin_suspend;
> +
>   /* record last mm index being written through WREG32*/
>   unsigned long last_mm_index;
>   boolin_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_tgrbm_soft_reset;
>   uint32_tsrbm_soft_reset;
> - /* s3/s4 mask */
> - boolin_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 - >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 =
> 0x;
>   ((struct vi_mqd_allocation *)mqd)->dynamic_rb_mask =
> 0x; @@ -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 - >gfx.compute_ring[0];
> 
> - if (!adev->in_gpu_reset && !adev->gfx.in_suspend) {
> + if (!adev->in_gpu_re

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

2018-09-29 Thread Rex Zhu
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 
---
 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 */
+   boolin_suspend;
+
/* record last mm index being written through WREG32*/
unsigned long last_mm_index;
boolin_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_tgrbm_soft_reset;
uint32_tsrbm_soft_reset;
-   /* s3/s4 mask */
-   boolin_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 - >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 = 0x;
((struct vi_mqd_allocation *)mqd)->dynamic_rb_mask = 0x;
@@ -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 - >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 = 0x;
((struct v9_mqd_allocation *)mqd)->dynamic_rb_mask = 0x;
@@ -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(>srbm_mutex);
soc15_grbm_select(adev, adev->gfx.kiq.ring.me,
adev->gfx.kiq.ring.pipe,
@@ -3437,20 +3437,12 @@ static int