RE: [PATCH AUTOSEL 5.15 3/5] drm/amdgpu: Enable gpu reset for S3 abort cases on Raven series

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[AMD Official Use Only - General]

> From: Alex Deucher <alexdeucher@xxxxxxxxx>
> Sent: Thursday, March 14, 2024 4:46 AM
> To: Kuehling, Felix <Felix.Kuehling@xxxxxxx>
> Cc: Sasha Levin <sashal@xxxxxxxxxx>; linux-kernel@xxxxxxxxxxxxxxx;
> stable@xxxxxxxxxxxxxxx; Liang, Prike <Prike.Liang@xxxxxxx>; Deucher,
> Alexander <Alexander.Deucher@xxxxxxx>; Koenig, Christian
> <Christian.Koenig@xxxxxxx>; Pan, Xinhui <Xinhui.Pan@xxxxxxx>;
> airlied@xxxxxxxxx; daniel@xxxxxxxx; Zhang, Hawking
> <Hawking.Zhang@xxxxxxx>; Lazar, Lijo <Lijo.Lazar@xxxxxxx>; Ma, Le
> <Le.Ma@xxxxxxx>; Zhu, James <James.Zhu@xxxxxxx>; Xiao, Shane
> <shane.xiao@xxxxxxx>; Jiang, Sonny <Sonny.Jiang@xxxxxxx>; amd-
> gfx@xxxxxxxxxxxxxxxxxxxxx; dri-devel@xxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [PATCH AUTOSEL 5.15 3/5] drm/amdgpu: Enable gpu reset for S3
> abort cases on Raven series
>
> On Wed, Mar 13, 2024 at 4:12 PM Felix Kuehling <felix.kuehling@xxxxxxx>
> wrote:
> >
> > On 2024-03-11 11:14, Sasha Levin wrote:
> > > From: Prike Liang <Prike.Liang@xxxxxxx>
> > >
> > > [ Upstream commit c671ec01311b4744b377f98b0b4c6d033fe569b3 ]
> > >
> > > Currently, GPU resets can now be performed successfully on the Raven
> > > series. While GPU reset is required for the S3 suspend abort case.
> > > So now can enable gpu reset for S3 abort cases on the Raven series.
> >
> > This looks suspicious to me. I'm not sure what conditions made the GPU
> > reset successful. But unless all the changes involved were also
> > backported, this should probably not be applied to older kernel
> > branches. I'm speculating it may be related to the removal of AMD
> IOMMUv2.
> >
>
> We should get confirmation from Prike, but I think he tested this on older
> kernels as well.
>
> Alex
>
> > Regards,
> >    Felix
> >

The Raven/Raven2 series GPU reset function was enabled in some older kernel versions such as 5.5 but filtered out in more recent kernel driver versions. Therefore, this patch only applies to the latest kernel version, and it should be safe without affecting other cases by enabling the Raven GPU reset only on the S3 suspend abort case. From the Chrome kernel log indicating that the AMD IOMMUv2 driver is loaded, and with this patch triggering the GPU reset before the AMDGPU device reinitialization, it can effectively handle the S3 suspend abort resume problem on the Raven series.

Was the Raven GPU reset previously disabled due to the AMD IOMMUv2 driver? If so, based on the Chromebook's verification result, the Raven series GPU reset can probably be enabled with IOMMUv2 for other cases as well.

Thanks,
Prike
> >
> > >
> > > Signed-off-by: Prike Liang <Prike.Liang@xxxxxxx>
> > > Acked-by: Alex Deucher <alexander.deucher@xxxxxxx>
> > > Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx>
> > > Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>
> > > ---
> > >   drivers/gpu/drm/amd/amdgpu/soc15.c | 45 +++++++++++++++++----------
> ---
> > >   1 file changed, 25 insertions(+), 20 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c
> > > b/drivers/gpu/drm/amd/amdgpu/soc15.c
> > > index 6a3486f52d698..ef5b3eedc8615 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/soc15.c
> > > +++ b/drivers/gpu/drm/amd/amdgpu/soc15.c
> > > @@ -605,11 +605,34 @@ soc15_asic_reset_method(struct
> amdgpu_device *adev)
> > >               return AMD_RESET_METHOD_MODE1;
> > >   }
> > >
> > > +static bool soc15_need_reset_on_resume(struct amdgpu_device *adev)
> > > +{
> > > +     u32 sol_reg;
> > > +
> > > +     sol_reg = RREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_81);
> > > +
> > > +     /* Will reset for the following suspend abort cases.
> > > +      * 1) Only reset limit on APU side, dGPU hasn't checked yet.
> > > +      * 2) S3 suspend abort and TOS already launched.
> > > +      */
> > > +     if (adev->flags & AMD_IS_APU && adev->in_s3 &&
> > > +                     !adev->suspend_complete &&
> > > +                     sol_reg)
> > > +             return true;
> > > +
> > > +     return false;
> > > +}
> > > +
> > >   static int soc15_asic_reset(struct amdgpu_device *adev)
> > >   {
> > >       /* original raven doesn't have full asic reset */
> > > -     if ((adev->apu_flags & AMD_APU_IS_RAVEN) ||
> > > -         (adev->apu_flags & AMD_APU_IS_RAVEN2))
> > > +     /* On the latest Raven, the GPU reset can be performed
> > > +      * successfully. So now, temporarily enable it for the
> > > +      * S3 suspend abort case.
> > > +      */
> > > +     if (((adev->apu_flags & AMD_APU_IS_RAVEN) ||
> > > +         (adev->apu_flags & AMD_APU_IS_RAVEN2)) &&
> > > +             !soc15_need_reset_on_resume(adev))
> > >               return 0;
> > >
> > >       switch (soc15_asic_reset_method(adev)) { @@ -1490,24 +1513,6
> > > @@ static int soc15_common_suspend(void *handle)
> > >       return soc15_common_hw_fini(adev);
> > >   }
> > >
> > > -static bool soc15_need_reset_on_resume(struct amdgpu_device *adev)
> > > -{
> > > -     u32 sol_reg;
> > > -
> > > -     sol_reg = RREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_81);
> > > -
> > > -     /* Will reset for the following suspend abort cases.
> > > -      * 1) Only reset limit on APU side, dGPU hasn't checked yet.
> > > -      * 2) S3 suspend abort and TOS already launched.
> > > -      */
> > > -     if (adev->flags & AMD_IS_APU && adev->in_s3 &&
> > > -                     !adev->suspend_complete &&
> > > -                     sol_reg)
> > > -             return true;
> > > -
> > > -     return false;
> > > -}
> > > -
> > >   static int soc15_common_resume(void *handle)
> > >   {
> > >       struct amdgpu_device *adev = (struct amdgpu_device *)handle;




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux