[PATCH 06/12] drm/amdgpu: Correctly establish the suspend/resume hook for amdkfd

Yong Zhao yong.zhao at amd.com
Thu Jul 6 21:33:21 UTC 2017


Hi Alex,

As far as I know, we never tested suspend/resume on the setting you 
mentioned. Theoretically it should work.

When I read the code now, I was wondering whether we should stop kfd 
before amdgpu_bo_evict_vram() and amdgpu_fence_driver_suspend(). If 
that's not needed, it may make more sense to stick to the previous 
design which kept the kfd suspend/resume inside your IP block 
suspend/resume.

Regards,

Yong


On 2017-07-06 05:06 PM, Alex Deucher wrote:
> On Mon, Jul 3, 2017 at 5:11 PM, Felix Kuehling <Felix.Kuehling at amd.com> wrote:
>> From: Yong Zhao <yong.zhao at amd.com>
>>
>> Signed-off-by: Yong Zhao <yong.zhao at amd.com>
>> Reviewed-by: Felix Kuehling <Felix.Kuehling at amd.com>
> Does this work properly for multiple GPUs?  E.g., if one is suspended
> and another is not?  E.g., PX laptops where we runtime suspend the
> dGPU while the APU is still running.
>
> Alex
>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 7 +++++++
>>   drivers/gpu/drm/amd/amdgpu/cik.c           | 9 +--------
>>   2 files 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 5b1220f..bc69b9c 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> @@ -56,6 +56,8 @@
>>   #include <linux/firmware.h>
>>   #include "amdgpu_vf_error.h"
>>
>> +#include "amdgpu_amdkfd.h"
>> +
>>   MODULE_FIRMWARE("amdgpu/vega10_gpu_info.bin");
>>   MODULE_FIRMWARE("amdgpu/raven_gpu_info.bin");
>>
>> @@ -2397,6 +2399,8 @@ int amdgpu_device_suspend(struct drm_device *dev, bool suspend, bool fbcon)
>>                  drm_modeset_unlock_all(dev);
>>          }
>>
>> +       amdgpu_amdkfd_suspend(adev);
>> +
>>          /* unpin the front buffers and cursors */
>>          list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
>>                  struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
>> @@ -2537,6 +2541,9 @@ int amdgpu_device_resume(struct drm_device *dev, bool resume, bool fbcon)
>>                          }
>>                  }
>>          }
>> +       r = amdgpu_amdkfd_resume(adev);
>> +       if (r)
>> +               return r;
>>
>>          /* blat the mode back in */
>>          if (fbcon) {
>> diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c b/drivers/gpu/drm/amd/amdgpu/cik.c
>> index 6ce9f80..00639bf 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/cik.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/cik.c
>> @@ -1825,21 +1825,14 @@ static int cik_common_suspend(void *handle)
>>   {
>>          struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>>
>> -       amdgpu_amdkfd_suspend(adev);
>> -
>>          return cik_common_hw_fini(adev);
>>   }
>>
>>   static int cik_common_resume(void *handle)
>>   {
>> -       int r;
>>          struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>>
>> -       r = cik_common_hw_init(adev);
>> -       if (r)
>> -               return r;
>> -
>> -       return amdgpu_amdkfd_resume(adev);
>> +       return cik_common_hw_init(adev);
>>   }
>>
>>   static bool cik_common_is_idle(void *handle)
>> --
>> 1.9.1
>>
>> _______________________________________________
>> 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