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.grodzov...@amd.com>

Reviewed-by: Christian König <christian.koe...@amd.com>

> ---
>   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@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to