aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2818-drm-amdkfd-remove-duplicated-PCIE-atomics-request.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2818-drm-amdkfd-remove-duplicated-PCIE-atomics-request.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2818-drm-amdkfd-remove-duplicated-PCIE-atomics-request.patch78
1 files changed, 78 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2818-drm-amdkfd-remove-duplicated-PCIE-atomics-request.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2818-drm-amdkfd-remove-duplicated-PCIE-atomics-request.patch
new file mode 100644
index 00000000..df2c47dd
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2818-drm-amdkfd-remove-duplicated-PCIE-atomics-request.patch
@@ -0,0 +1,78 @@
+From eedbfbf6c406b7dfdbd2e96a501433156877f92a Mon Sep 17 00:00:00 2001
+From: Jack Xiao <Jack.Xiao@amd.com>
+Date: Wed, 29 May 2019 13:52:17 +0800
+Subject: [PATCH 2818/2940] drm/amdkfd: remove duplicated PCIE atomics request
+
+Since amdgpu has always requested PCIE atomics, kfd don't
+need duplicated PCIE atomics enablement. Referring to amdgpu
+request result is enough.
+
+Change-Id: I1f4d6cadf9804ad74f914243b120d71fda95df28
+Signed-off-by: Jack Xiao <Jack.Xiao@amd.com>
+Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
+Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 7 +++++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 1 +
+ drivers/gpu/drm/amd/amdkfd/kfd_device.c | 10 ++++------
+ 3 files changed, 12 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+index 6b92be548484..b2657294b811 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+@@ -624,6 +624,13 @@ void amdgpu_amdkfd_debug_mem_fence(struct kgd_dev *kgd)
+ amdgpu_asic_flush_hdp((struct amdgpu_device *) kgd, NULL);
+ }
+
++bool amdgpu_amdkfd_have_atomics_support(struct kgd_dev *kgd)
++{
++ struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
++
++ return adev->have_atomics_support;
++}
++
+ #ifndef CONFIG_HSA_AMD
+ bool amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm)
+ {
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
+index 96ff067ae88e..3a521cf36c90 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
+@@ -124,6 +124,7 @@ int amdgpu_amdkfd_submit_ib(struct kgd_dev *kgd, enum kgd_engine_type engine,
+ uint32_t vmid, uint64_t gpu_addr,
+ uint32_t *ib_cmd, uint32_t ib_len);
+ void amdgpu_amdkfd_set_compute_idle(struct kgd_dev *kgd, bool idle);
++bool amdgpu_amdkfd_have_atomics_support(struct kgd_dev *kgd);
+
+ struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void);
+ struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void);
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
+index 9bd16644c25c..af49d2dd361d 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
+@@ -504,17 +504,15 @@ struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd,
+ * 32 and 64-bit requests are possible and must be
+ * supported.
+ */
+- ret = pci_enable_atomic_ops_to_root(pdev,
+- PCI_EXP_DEVCAP2_ATOMIC_COMP32 |
+- PCI_EXP_DEVCAP2_ATOMIC_COMP64);
+- if (device_info->needs_pci_atomics && ret < 0) {
++ kfd->pci_atomic_requested = amdgpu_amdkfd_have_atomics_support(kgd);
++ if (device_info->needs_pci_atomics &&
++ !kfd->pci_atomic_requested) {
+ dev_info(kfd_device,
+ "skipped device %x:%x, PCI rejects atomics\n",
+ pdev->vendor, pdev->device);
+ kfree(kfd);
+ return NULL;
+- } else if (!ret)
+- kfd->pci_atomic_requested = true;
++ }
+
+ kfd->kgd = kgd;
+ kfd->device_info = device_info;
+--
+2.17.1
+