On Thu, Feb 18, 2021 at 8:20 PM shaoyunl <shaoyun.liu@xxxxxxx> wrote: > > The MQD might not be initialized duirng first init period if the device need to be reset > druing probe. Driver need to proper init them in gpu recovery period > > Signed-off-by: shaoyunl <shaoyun.liu@xxxxxxx> > Change-Id: Iad58a050939af2afa46d1c74a90866c47ba9efd2 > --- > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 20 +++++++++++++++++--- > 1 file changed, 17 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > index 65db88bb6cbc..8fc2fd518a1b 100644 > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > @@ -3696,11 +3696,18 @@ static int gfx_v9_0_kiq_init_queue(struct amdgpu_ring *ring) > struct amdgpu_device *adev = ring->adev; > struct v9_mqd *mqd = ring->mqd_ptr; > int mqd_idx = AMDGPU_MAX_COMPUTE_RINGS; > + struct v9_mqd *tmp_mqd; > > gfx_v9_0_kiq_setting(ring); > > - if (amdgpu_in_reset(adev)) { /* for GPU_RESET case */ > - /* reset MQD to a clean status */ > + /* GPU could be in bad state during probe, driver trigger the reset > + * after load the SMU, in this case , the mqd is not be initialized. > + * driver need to re-init the mqd in this case. > + * check mqd->cp_hqd_pq_control since this value should not be 0 > + */ > + tmp_mqd = (struct v9_mqd *)adev->gfx.mec.mqd_backup[mqd_idx]; > + if (amdgpu_in_reset(adev) && tmp_mqd->cp_hqd_pq_control){ > + /* for GPU_RESET case , reset MQD to a clean status */ > if (adev->gfx.mec.mqd_backup[mqd_idx]) > memcpy(mqd, adev->gfx.mec.mqd_backup[mqd_idx], sizeof(struct v9_mqd_allocation)); > > @@ -3736,8 +3743,15 @@ static int gfx_v9_0_kcq_init_queue(struct amdgpu_ring *ring) > struct amdgpu_device *adev = ring->adev; > struct v9_mqd *mqd = ring->mqd_ptr; > int mqd_idx = ring - &adev->gfx.compute_ring[0]; > + struct v9_mqd *tmp_mqd; > > - if (!amdgpu_in_reset(adev) && !adev->in_suspend) { > + /* Samw as above kiq init, driver need to re-init the mqd if mqd->cp_hqd_pq_control Samw -> Same I think this also needs to come before patch 1. With these comments fixed: Acked-by: Alex Deucher <alexander.deucher@xxxxxxx> > + * is not be initialized before > + */ > + tmp_mqd = (struct v9_mqd *)adev->gfx.mec.mqd_backup[mqd_idx]; > + > + if (!tmp_mqd->cp_hqd_pq_control || > + (!amdgpu_in_reset(adev) && !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; > -- > 2.17.1 > > _______________________________________________ > amd-gfx mailing list > amd-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/amd-gfx _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx