This is a workaround for s3 hang for r7340(amdgpu).
When we test s3 with r7340 on arm64 platform, graphics card will hang up,
the error message are as follows:
Mar 4 01:14:11 greatwall-GW-XXXXXX-XXX kernel: [ 1.599374][ 7] [ T291] amdgpu 0000:02:00.0: fb0: amdgpudrmfb frame buffer device
Mar 4 01:14:11 greatwall-GW-XXXXXX-XXX kernel: [ 1.612869][ 7] [ T291] [drm:amdgpu_device_ip_late_init [amdgpu]] *ERROR* late_init of IP block <si_dpm> failed -22
Mar 4 01:14:11 greatwall-GW-XXXXXX-XXX kernel: [ 1.623392][ 7] [ T291] amdgpu 0000:02:00.0: amdgpu_device_ip_late_init failed
Mar 4 01:14:11 greatwall-GW-XXXXXX-XXX kernel: [ 1.630696][ 7] [ T291] amdgpu 0000:02:00.0: Fatal error during GPU init
Mar 4 01:14:11 greatwall-GW-XXXXXX-XXX kernel: [ 1.637477][ 7] [ T291] [drm] amdgpu: finishing device.
Change-Id: I5048b3894c0ca9faf2f4847ddab61f9eb17b4823
Signed-off-by: Zhenneng Li <[email protected]>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 3987ecb24ef4..1eced991b5b2 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -2903,6 +2903,8 @@ static void amdgpu_device_delayed_init_work_handler(struct work_struct *work)
container_of(work, struct amdgpu_device, delayed_init_work.work);
int r;
+ mdelay(1);
+
r = amdgpu_ib_ring_tests(adev);
if (r)
DRM_ERROR("ib ring test failed (%d).\n", r);
--
2.25.1
[Cc: -Jack Zhang (invalid address)
Am 28.03.22 um 09:36 schrieb Paul Menzel:
> Dear Zhenneng,
>
>
> Thank you for your patch.
>
> Am 28.03.22 um 06:05 schrieb Zhenneng Li:
>> This is a workaround for s3 hang for r7340(amdgpu).
>
> Is it hanging when resuming from S3? Maybe also use the line below for
> the commit message summary:
>
> drm/amdgpu: Add 1 ms delay to init handler to fix s3 resume hang
>
> Also, please add a space before the ( in “r7340(amdgpu)”.
>
>> When we test s3 with r7340 on arm64 platform, graphics card will hang up,
>> the error message are as follows:
>> Mar 4 01:14:11 greatwall-GW-XXXXXX-XXX kernel: [ 1.599374][ 7] [ T291] amdgpu 0000:02:00.0: fb0: amdgpudrmfb frame buffer device
>> Mar 4 01:14:11 greatwall-GW-XXXXXX-XXX kernel: [ 1.612869][ 7] [ T291] [drm:amdgpu_device_ip_late_init [amdgpu]] *ERROR* late_init of IP block <si_dpm> failed -22
>> Mar 4 01:14:11 greatwall-GW-XXXXXX-XXX kernel: [ 1.623392][ 7] [ T291] amdgpu 0000:02:00.0: amdgpu_device_ip_late_init failed
>> Mar 4 01:14:11 greatwall-GW-XXXXXX-XXX kernel: [ 1.630696][ 7] [ T291] amdgpu 0000:02:00.0: Fatal error during GPU init
>> Mar 4 01:14:11 greatwall-GW-XXXXXX-XXX kernel: [ 1.637477][ 7] [ T291] [drm] amdgpu: finishing device.
>
> The prefix in the beginning is not really needed. Only the stuff after
> `kernel: `.
>
> Maybe also add the output of `lspci -nn -s …` for that r7340 device.
>
>> Change-Id: I5048b3894c0ca9faf2f4847ddab61f9eb17b4823
>
> Without the Gerrit instance this belongs to, the Change-Id is of no use
> in the public.
>
>> Signed-off-by: Zhenneng Li <[email protected]>
>> ---
>> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 2 ++
>> 1 file changed, 2 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> index 3987ecb24ef4..1eced991b5b2 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> @@ -2903,6 +2903,8 @@ static void
>> amdgpu_device_delayed_init_work_handler(struct work_struct *work)
>> container_of(work, struct amdgpu_device, delayed_init_work.work);
>> int r;
>> + mdelay(1);
>> +
>
> Wow, I wonder how long it took you to find that workaround.
>
>> r = amdgpu_ib_ring_tests(adev);
>> if (r)
>> DRM_ERROR("ib ring test failed (%d).\n", r);
>
>
> Kind regards,
>
> Paul
Dear Zhenneng,
Thank you for your patch.
Am 28.03.22 um 06:05 schrieb Zhenneng Li:
> This is a workaround for s3 hang for r7340(amdgpu).
Is it hanging when resuming from S3? Maybe also use the line below for
the commit message summary:
drm/amdgpu: Add 1 ms delay to init handler to fix s3 resume hang
Also, please add a space before the ( in “r7340(amdgpu)”.
> When we test s3 with r7340 on arm64 platform, graphics card will hang up,
> the error message are as follows:
> Mar 4 01:14:11 greatwall-GW-XXXXXX-XXX kernel: [ 1.599374][ 7] [ T291] amdgpu 0000:02:00.0: fb0: amdgpudrmfb frame buffer device
> Mar 4 01:14:11 greatwall-GW-XXXXXX-XXX kernel: [ 1.612869][ 7] [ T291] [drm:amdgpu_device_ip_late_init [amdgpu]] *ERROR* late_init of IP block <si_dpm> failed -22
> Mar 4 01:14:11 greatwall-GW-XXXXXX-XXX kernel: [ 1.623392][ 7] [ T291] amdgpu 0000:02:00.0: amdgpu_device_ip_late_init failed
> Mar 4 01:14:11 greatwall-GW-XXXXXX-XXX kernel: [ 1.630696][ 7] [ T291] amdgpu 0000:02:00.0: Fatal error during GPU init
> Mar 4 01:14:11 greatwall-GW-XXXXXX-XXX kernel: [ 1.637477][ 7] [ T291] [drm] amdgpu: finishing device.
The prefix in the beginning is not really needed. Only the stuff after
`kernel: `.
Maybe also add the output of `lspci -nn -s …` for that r7340 device.
> Change-Id: I5048b3894c0ca9faf2f4847ddab61f9eb17b4823
Without the Gerrit instance this belongs to, the Change-Id is of no use
in the public.
> Signed-off-by: Zhenneng Li <[email protected]>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index 3987ecb24ef4..1eced991b5b2 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -2903,6 +2903,8 @@ static void amdgpu_device_delayed_init_work_handler(struct work_struct *work)
> container_of(work, struct amdgpu_device, delayed_init_work.work);
> int r;
>
> + mdelay(1);
> +
Wow, I wonder how long it took you to find that workaround.
> r = amdgpu_ib_ring_tests(adev);
> if (r)
> DRM_ERROR("ib ring test failed (%d).\n", r);
Kind regards,
Paul