Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdkfd: separate kfd_iommu_resume from kfd_resume

Separate kfd_iommu_resume from kfd_resume for fine-tuning
of amdgpu device init/resume/reset/recovery sequence.

v2: squash in fix for !CONFIG_HSA_AMD

Bug: https://bugzilla.kernel.org/show_bug.cgi?id=211277
Signed-off-by: James Zhu <James.Zhu@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org

authored by

James Zhu and committed by
Alex Deucher
fefc01f0 71ae3099

+14 -4
+6
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
··· 327 327 const struct kgd2kfd_shared_resources *gpu_resources); 328 328 void kgd2kfd_device_exit(struct kfd_dev *kfd); 329 329 void kgd2kfd_suspend(struct kfd_dev *kfd, bool run_pm); 330 + int kgd2kfd_resume_iommu(struct kfd_dev *kfd); 330 331 int kgd2kfd_resume(struct kfd_dev *kfd, bool run_pm); 331 332 int kgd2kfd_pre_reset(struct kfd_dev *kfd); 332 333 int kgd2kfd_post_reset(struct kfd_dev *kfd); ··· 364 363 365 364 static inline void kgd2kfd_suspend(struct kfd_dev *kfd, bool run_pm) 366 365 { 366 + } 367 + 368 + static int __maybe_unused kgd2kfd_resume_iommu(struct kfd_dev *kfd) 369 + { 370 + return 0; 367 371 } 368 372 369 373 static inline int kgd2kfd_resume(struct kfd_dev *kfd, bool run_pm)
+8 -4
drivers/gpu/drm/amd/amdkfd/kfd_device.c
··· 1069 1069 return ret; 1070 1070 } 1071 1071 1072 - static int kfd_resume(struct kfd_dev *kfd) 1072 + int kgd2kfd_resume_iommu(struct kfd_dev *kfd) 1073 1073 { 1074 1074 int err = 0; 1075 1075 1076 1076 err = kfd_iommu_resume(kfd); 1077 - if (err) { 1077 + if (err) 1078 1078 dev_err(kfd_device, 1079 1079 "Failed to resume IOMMU for device %x:%x\n", 1080 1080 kfd->pdev->vendor, kfd->pdev->device); 1081 - return err; 1082 - } 1081 + return err; 1082 + } 1083 + 1084 + static int kfd_resume(struct kfd_dev *kfd) 1085 + { 1086 + int err = 0; 1083 1087 1084 1088 err = kfd->dqm->ops.start(kfd->dqm); 1085 1089 if (err) {