[PATCH] drm/amdgpu: fix S3 issue if MQD in VRAM
Alex Deucher
alexdeucher at gmail.com
Wed May 17 12:11:20 UTC 2023
Thanks for fixing this up.
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
On Wed, May 17, 2023 at 5:45 AM Jack Xiao <Jack.Xiao at amd.com> wrote:
>
> 1. Need flush HDP for MQD putting in vram
> 2. Zero out mes MQD
>
> Signed-off-by: Jack Xiao <Jack.Xiao at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 4 ++++
> drivers/gpu/drm/amd/amdgpu/mes_v10_1.c | 3 +++
> drivers/gpu/drm/amd/amdgpu/mes_v11_0.c | 3 +++
> 3 files changed, 10 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
> index 8883d5ee13cb..f2d0b1d55d77 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
> @@ -593,6 +593,8 @@ int amdgpu_gfx_enable_kcq(struct amdgpu_device *adev, int xcc_id)
>
> DRM_INFO("kiq ring mec %d pipe %d q %d\n", kiq_ring->me, kiq_ring->pipe,
> kiq_ring->queue);
> + amdgpu_device_flush_hdp(adev, NULL);
> +
> spin_lock(&kiq->ring_lock);
> r = amdgpu_ring_alloc(kiq_ring, kiq->pmf->map_queues_size *
> adev->gfx.num_compute_rings +
> @@ -630,6 +632,8 @@ int amdgpu_gfx_enable_kgq(struct amdgpu_device *adev, int xcc_id)
> if (!kiq->pmf || !kiq->pmf->kiq_map_queues)
> return -EINVAL;
>
> + amdgpu_device_flush_hdp(adev, NULL);
> +
> spin_lock(&kiq->ring_lock);
> /* No need to map kcq on the slave */
> if (amdgpu_gfx_is_master_xcc(adev, xcc_id)) {
> diff --git a/drivers/gpu/drm/amd/amdgpu/mes_v10_1.c b/drivers/gpu/drm/amd/amdgpu/mes_v10_1.c
> index f1a6abdad21b..88262f10ef7c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/mes_v10_1.c
> +++ b/drivers/gpu/drm/amd/amdgpu/mes_v10_1.c
> @@ -632,6 +632,8 @@ static int mes_v10_1_mqd_init(struct amdgpu_ring *ring)
> uint64_t hqd_gpu_addr, wb_gpu_addr, eop_base_addr;
> uint32_t tmp;
>
> + memset(mqd, 0, sizeof(*mqd));
> +
> mqd->header = 0xC0310800;
> mqd->compute_pipelinestat_enable = 0x00000001;
> mqd->compute_static_thread_mgmt_se0 = 0xffffffff;
> @@ -728,6 +730,7 @@ static int mes_v10_1_mqd_init(struct amdgpu_ring *ring)
> /* offset: 184 - this is used for CP_HQD_GFX_CONTROL */
> mqd->cp_hqd_suspend_cntl_stack_offset = tmp;
>
> + amdgpu_device_flush_hdp(ring->adev, NULL);
> return 0;
> }
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c b/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
> index 9791f3581786..9a48328c6572 100644
> --- a/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
> @@ -704,6 +704,8 @@ static int mes_v11_0_mqd_init(struct amdgpu_ring *ring)
> uint64_t hqd_gpu_addr, wb_gpu_addr, eop_base_addr;
> uint32_t tmp;
>
> + memset(mqd, 0, sizeof(*mqd));
> +
> mqd->header = 0xC0310800;
> mqd->compute_pipelinestat_enable = 0x00000001;
> mqd->compute_static_thread_mgmt_se0 = 0xffffffff;
> @@ -797,6 +799,7 @@ static int mes_v11_0_mqd_init(struct amdgpu_ring *ring)
> mqd->cp_hqd_iq_timer = regCP_HQD_IQ_TIMER_DEFAULT;
> mqd->cp_hqd_quantum = regCP_HQD_QUANTUM_DEFAULT;
>
> + amdgpu_device_flush_hdp(ring->adev, NULL);
> return 0;
> }
>
> --
> 2.37.3
>
More information about the amd-gfx
mailing list