diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1779-drm-amdgpu-Fix-KFD-initialization-for-multi-GPU-syst.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1779-drm-amdgpu-Fix-KFD-initialization-for-multi-GPU-syst.patch | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1779-drm-amdgpu-Fix-KFD-initialization-for-multi-GPU-syst.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1779-drm-amdgpu-Fix-KFD-initialization-for-multi-GPU-syst.patch new file mode 100644 index 00000000..af76b9cd --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1779-drm-amdgpu-Fix-KFD-initialization-for-multi-GPU-syst.patch @@ -0,0 +1,107 @@ +From 75b356b15ac83dc336dac953ecdd2b2b9703f91d Mon Sep 17 00:00:00 2001 +From: Felix Kuehling <Felix.Kuehling@amd.com> +Date: Fri, 28 Jul 2017 16:54:54 -0400 +Subject: [PATCH 1779/4131] drm/amdgpu: Fix KFD initialization for multi-GPU + systems + +kfd2kgd is device-specific, so it should not be a global variable. +Merge amdgpu_amdkfd_load_interface and amdgpu_amdkfd_device_probe +so that it's only needed as a local variable in one function. + +Modificatin in this commit was reverted before to reduce conflicts +when port kfd primary patches. Re-cherry-pick it again now. + +Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> +Reviewed-by: Oded Gabbay <oded.gabbay@gmail.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +Signed-off-by: Le Ma <Le.Ma@amd.com> + + Conflicts: + drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c + +Change-Id: Id87865187760e36c2fc71a51da22502f71dc8968 +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 36 ++++++++++++++---------------- + drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 2 -- + 2 files changed, 17 insertions(+), 21 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +index 106ccb4..8a35200 100755 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +@@ -32,7 +32,6 @@ + + #define AMDKFD_SKIP_UNCOMPILED_CODE 1 + +-const struct kfd2kgd_calls *kfd2kgd; + const struct kgd2kfd_calls *kgd2kfd; + bool (*kgd2kfd_init_p)(unsigned int, const struct kgd2kfd_calls**); + +@@ -68,8 +67,21 @@ int amdgpu_amdkfd_init(void) + return ret; + } + +-bool amdgpu_amdkfd_load_interface(struct amdgpu_device *adev) ++void amdgpu_amdkfd_fini(void) ++{ ++ if (kgd2kfd) { ++ kgd2kfd->exit(); ++ symbol_put(kgd2kfd_init); ++ } ++} ++ ++void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev) + { ++ const struct kfd2kgd_calls *kfd2kgd; ++ ++ if (!kgd2kfd) ++ return; ++ + switch (adev->asic_type) { + #ifdef CONFIG_DRM_AMDGPU_CIK + case CHIP_KAVERI: +@@ -90,25 +102,11 @@ bool amdgpu_amdkfd_load_interface(struct amdgpu_device *adev) + break; + default: + dev_info(adev->dev, "kfd not supported on this ASIC\n"); +- return false; ++ return; + } + +- return true; +-} +- +-void amdgpu_amdkfd_fini(void) +-{ +- if (kgd2kfd) { +- kgd2kfd->exit(); +- symbol_put(kgd2kfd_init); +- } +-} +- +-void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev) +-{ +- if (kgd2kfd) +- adev->kfd = kgd2kfd->probe((struct kgd_dev *)adev, +- adev->pdev, kfd2kgd); ++ adev->kfd = kgd2kfd->probe((struct kgd_dev *)adev, ++ adev->pdev, kfd2kgd); + } + + void amdgpu_amdkfd_device_init(struct amdgpu_device *adev) +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h +index 50cd9e1..0756fff 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h +@@ -131,8 +131,6 @@ struct amdkfd_vm { + int amdgpu_amdkfd_init(void); + void amdgpu_amdkfd_fini(void); + +-bool amdgpu_amdkfd_load_interface(struct amdgpu_device *adev); +- + void amdgpu_amdkfd_suspend(struct amdgpu_device *adev); + int amdgpu_amdkfd_resume(struct amdgpu_device *adev); + void amdgpu_amdkfd_interrupt(struct amdgpu_device *adev, +-- +2.7.4 + |