[PATCH 1/2] drm/amdgpu: fix ring0 failed on firepro card
Christian König
deathsimple at vodafone.de
Fri May 5 12:06:36 UTC 2017
We should really improve the order in which blocks are handled.
Having all this special order handling in amdgpu_device.c and for SRIOV
is really not a good idea.
Anyway, patch is Acked-by: Christian König <christian.koenig at amd.com>
for now.
Regards,
Christian.
Am 05.05.2017 um 09:46 schrieb He, Hongbo:
> Looks fine to me, Reviewed-by: Roger.He <Hongbo.He at amd.com>
>
> BTW, I have noticed SRIOV has more IP resume in first phase, maybe also needed for bare metal for other ASIC.
>
> Thanks
> Roger(Hongbo.He)
> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf Of Chunming Zhou
> Sent: Friday, May 05, 2017 2:46 PM
> To: amd-gfx at lists.freedesktop.org
> Cc: Zhou, David(ChunMing)
> Subject: [PATCH 1/2] drm/amdgpu: fix ring0 failed on firepro card
>
> the root cause is vram content is lost completely after pci reset.
>
> Change-Id: I012cea984702894410b0f05149fd017bb62b624c
> Signed-off-by: Chunming Zhou <David1.Zhou at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 57 ++++++++++++++++++++++++++----
> 1 file changed, 50 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index 8a75327..b44ecdb 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -1787,13 +1787,40 @@ static int amdgpu_sriov_reinit_late(struct amdgpu_device *adev)
> return 0;
> }
>
> -static int amdgpu_resume(struct amdgpu_device *adev)
> +static int amdgpu_resume_phase1(struct amdgpu_device *adev)
> {
> int i, r;
>
> for (i = 0; i < adev->num_ip_blocks; i++) {
> if (!adev->ip_blocks[i].status.valid)
> continue;
> + if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON ||
> + adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC ||
> + adev->ip_blocks[i].version->type ==
> + AMD_IP_BLOCK_TYPE_IH) {
> + r = adev->ip_blocks[i].version->funcs->resume(adev);
> + if (r) {
> + DRM_ERROR("resume of IP block <%s> failed %d\n",
> + adev->ip_blocks[i].version->funcs->name, r);
> + return r;
> + }
> + }
> + }
> +
> + return 0;
> +}
> +
> +static int amdgpu_resume_phase2(struct amdgpu_device *adev) {
> + int i, r;
> +
> + for (i = 0; i < adev->num_ip_blocks; i++) {
> + if (!adev->ip_blocks[i].status.valid)
> + continue;
> + if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON ||
> + adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC ||
> + adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_IH )
> + continue;
> r = adev->ip_blocks[i].version->funcs->resume(adev);
> if (r) {
> DRM_ERROR("resume of IP block <%s> failed %d\n", @@ -1805,6 +1832,18 @@ static int amdgpu_resume(struct amdgpu_device *adev)
> return 0;
> }
>
> +static int amdgpu_resume(struct amdgpu_device *adev) {
> + int r;
> +
> + r = amdgpu_resume_phase1(adev);
> + if (r)
> + return r;
> + r = amdgpu_resume_phase2(adev);
> +
> + return r;
> +}
> +
> static void amdgpu_device_detect_sriov_bios(struct amdgpu_device *adev) {
> if (adev->is_atom_fw) {
> @@ -2730,16 +2769,20 @@ int amdgpu_gpu_reset(struct amdgpu_device *adev)
>
> if (!r) {
> dev_info(adev->dev, "GPU reset succeeded, trying to resume\n");
> - r = amdgpu_resume(adev);
> + r = amdgpu_resume_phase1(adev);
> + if (r)
> + goto out;
> + r = amdgpu_ttm_recover_gart(adev);
> + if (r)
> + goto out;
> + r = amdgpu_resume_phase2(adev);
> + if (r)
> + goto out;
> }
> }
> +out:
> if (!r) {
> amdgpu_irq_gpu_reset_resume_helper(adev);
> - if (need_full_reset && amdgpu_need_backup(adev)) {
> - r = amdgpu_ttm_recover_gart(adev);
> - if (r)
> - DRM_ERROR("gart recovery failed!!!\n");
> - }
> r = amdgpu_ib_ring_tests(adev);
> if (r) {
> dev_err(adev->dev, "ib ring test failed (%d).\n", r);
> --
> 1.9.1
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list