aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2735-drm-amdkfd-Don-t-assign-dGPUs-to-APU-topology-device.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2735-drm-amdkfd-Don-t-assign-dGPUs-to-APU-topology-device.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2735-drm-amdkfd-Don-t-assign-dGPUs-to-APU-topology-device.patch56
1 files changed, 56 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2735-drm-amdkfd-Don-t-assign-dGPUs-to-APU-topology-device.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2735-drm-amdkfd-Don-t-assign-dGPUs-to-APU-topology-device.patch
new file mode 100644
index 00000000..bdc0bd64
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2735-drm-amdkfd-Don-t-assign-dGPUs-to-APU-topology-device.patch
@@ -0,0 +1,56 @@
+From 17f87ce7c63e70314fdb59a37d809564c78f76e3 Mon Sep 17 00:00:00 2001
+From: Felix Kuehling <Felix.Kuehling@amd.com>
+Date: Wed, 2 Jan 2019 17:47:39 -0500
+Subject: [PATCH 2735/2940] drm/amdkfd: Don't assign dGPUs to APU topology
+ devices
+
+dGPUs need their own topology devices. Don't assign them to APU topology
+devices with CPU cores.
+
+Bug: https://github.com/RadeonOpenCompute/ROCK-Kernel-Driver/issues/66
+Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
+Tested-by: Elias Konstantinidis <ekondis@gmail.com>
+Acked-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
+index 4734f1a35516..09da91644f9f 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
+@@ -1093,8 +1093,6 @@ static uint32_t kfd_generate_gpu_id(struct kfd_dev *gpu)
+ * the GPU device is not already present in the topology device
+ * list then return NULL. This means a new topology device has to
+ * be created for this GPU.
+- * TODO: Rather than assiging @gpu to first topology device withtout
+- * gpu attached, it will better to have more stringent check.
+ */
+ static struct kfd_topology_device *kfd_assign_gpu(struct kfd_dev *gpu)
+ {
+@@ -1102,12 +1100,20 @@ static struct kfd_topology_device *kfd_assign_gpu(struct kfd_dev *gpu)
+ struct kfd_topology_device *out_dev = NULL;
+
+ down_write(&topology_lock);
+- list_for_each_entry(dev, &topology_device_list, list)
++ list_for_each_entry(dev, &topology_device_list, list) {
++ /* Discrete GPUs need their own topology device list
++ * entries. Don't assign them to CPU/APU nodes.
++ */
++ if (!gpu->device_info->needs_iommu_device &&
++ dev->node_props.cpu_cores_count)
++ continue;
++
+ if (!dev->gpu && (dev->node_props.simd_count > 0)) {
+ dev->gpu = gpu;
+ out_dev = dev;
+ break;
+ }
++ }
+ up_write(&topology_lock);
+ return out_dev;
+ }
+--
+2.17.1
+