On 2017-07-06 05:44 PM, Alex Deucher wrote: > On Thu, Jul 6, 2017 at 5:33 PM, Yong Zhao <yong.zhao at amd.com> wrote: >> Hi Alex, >> >> As far as I know, we never tested suspend/resume on the setting you >> mentioned. Theoretically it should work. > Are the kfd s/r entry points global or per GPU? If you have two GPUs > and you suspend one, will it suspend the entire kfd? I'm fine with > the change, it's no worse than the current situation. Mostly just > curious. kfd s/r is per GPU. If we suspend only one out of two GPUs, the other one will keep working. > >> 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. > I think it makes more sense to put the kfd calls in the common device > s/r code rather than in the soc specific ip functions. Change is: > Reviewed-by: Alex Deucher <alexander.deucher at amd.com> > > >> 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 >>