Am 07.03.19 um 17:57 schrieb Andrey Grodzovsky: > Problem: > Using SDMA for TLB invalidation in certain ASICs exposed a problem > of IB pool not being ready while SDMA already up on Init and already > shutt down while SDMA still running on Fini. This caused > IB allocation failure. Temproary fix was commited into a > bringup branch but this is the generic fix. > > Fix: > Init IB pool rigth after GMC is ready but before SDMA is ready. > Do th opposite for Fini. > > v2: Remove restriction on SDMA early init and move amdgpu_ib_pool_fini > > Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@xxxxxxx> Reviewed-by: Christian König <christian.koenig@xxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > index 00def57..0c4a580 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > @@ -1686,6 +1686,13 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev) > } > } > > + r = amdgpu_ib_pool_init(adev); > + if (r) { > + dev_err(adev->dev, "IB initialization failed (%d).\n", r); > + amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_IB_INIT_FAIL, 0, r); > + goto init_failed; > + } > + > r = amdgpu_ucode_create_bo(adev); /* create ucode bo when sw_init complete*/ > if (r) > goto init_failed; > @@ -1924,6 +1931,7 @@ static int amdgpu_device_ip_fini(struct amdgpu_device *adev) > amdgpu_free_static_csa(&adev->virt.csa_obj); > amdgpu_device_wb_fini(adev); > amdgpu_device_vram_scratch_fini(adev); > + amdgpu_ib_pool_fini(adev); > } > > r = adev->ip_blocks[i].version->funcs->sw_fini((void *)adev); > @@ -2651,13 +2659,6 @@ int amdgpu_device_init(struct amdgpu_device *adev, > /* Get a log2 for easy divisions. */ > adev->mm_stats.log2_max_MBps = ilog2(max(1u, max_MBps)); > > - r = amdgpu_ib_pool_init(adev); > - if (r) { > - dev_err(adev->dev, "IB initialization failed (%d).\n", r); > - amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_IB_INIT_FAIL, 0, r); > - goto failed; > - } > - > amdgpu_fbdev_init(adev); > > r = amdgpu_pm_sysfs_init(adev); > @@ -2735,7 +2736,6 @@ void amdgpu_device_fini(struct amdgpu_device *adev) > else > drm_atomic_helper_shutdown(adev->ddev); > } > - amdgpu_ib_pool_fini(adev); > amdgpu_fence_driver_fini(adev); > amdgpu_pm_sysfs_fini(adev); > amdgpu_fbdev_fini(adev); _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx