On Fri, Aug 28, 2020 at 12:06 PM Andrey Grodzovsky <andrey.grodzovsky@xxxxxxx> wrote: > > Wait for HW/PSP initiated ASIC reset to complete before > starting the recovery operations. > > v2: Remove typo > > Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@xxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 22 ++++++++++++++++++++-- > 1 file changed, 20 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > index 9a367a8..06664a9 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > @@ -4844,14 +4844,32 @@ pci_ers_result_t amdgpu_pci_slot_reset(struct pci_dev *pdev) > { > struct drm_device *dev = pci_get_drvdata(pdev); > struct amdgpu_device *adev = drm_to_adev(dev); > - int r; > + int r, i; > bool vram_lost; > + u32 memsize; > > DRM_INFO("PCI error: slot reset callback!!\n"); > > + /* wait for asic to come out of reset */ > + msleep(500); > + I wonder if other reset paths need this wait as well? Reviewed-by: Alex Deucher <alexander.deucher@xxxxxxx> > pci_restore_state(pdev); > > - adev->in_pci_err_recovery = true; > + /* confirm ASIC came out of reset */ > + for (i = 0; i < adev->usec_timeout; i++) { > + memsize = amdgpu_asic_get_config_memsize(adev); > + > + if (memsize != 0xffffffff) > + break; > + udelay(1); > + } > + if (memsize == 0xffffffff) { > + r = -ETIME; > + goto out; > + } > + > + /* TODO Call amdgpu_pre_asic_reset instead */ > + adev->in_pci_err_recovery = true; > r = amdgpu_device_ip_suspend(adev); > adev->in_pci_err_recovery = false; > if (r) > -- > 2.7.4 > > _______________________________________________ > 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