[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