aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2689-drm-amdkfd-Only-add-bi-directional-iolink-on-GPU-wit.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2689-drm-amdkfd-Only-add-bi-directional-iolink-on-GPU-wit.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2689-drm-amdkfd-Only-add-bi-directional-iolink-on-GPU-wit.patch110
1 files changed, 110 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2689-drm-amdkfd-Only-add-bi-directional-iolink-on-GPU-wit.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2689-drm-amdkfd-Only-add-bi-directional-iolink-on-GPU-wit.patch
new file mode 100644
index 00000000..a031eeea
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2689-drm-amdkfd-Only-add-bi-directional-iolink-on-GPU-wit.patch
@@ -0,0 +1,110 @@
+From e4b08e7c4b2791210ac529614464d9608976a5eb Mon Sep 17 00:00:00 2001
+From: shaoyunl <Shaoyun.Liu@amd.com>
+Date: Fri, 7 Sep 2018 12:00:07 -0400
+Subject: [PATCH 2689/2940] drm/amdkfd: Only add bi-directional iolink on GPU
+ with XGMI or largebar (v2)
+
+v2: compile fix
+
+Signed-off-by: shaoyunl <Shaoyun.Liu@amd.com>
+Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 2 +-
+ drivers/gpu/drm/amd/amdkfd/kfd_crat.c | 15 +++++++++------
+ drivers/gpu/drm/amd/amdkfd/kfd_crat.h | 3 ++-
+ drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 1 +
+ 4 files changed, 13 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+index 297b36c26a05..758398bdb39b 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+@@ -1210,7 +1210,7 @@ static int kfd_ioctl_acquire_vm(struct file *filep, struct kfd_process *p,
+ return ret;
+ }
+
+-static bool kfd_dev_is_large_bar(struct kfd_dev *dev)
++bool kfd_dev_is_large_bar(struct kfd_dev *dev)
+ {
+ struct kfd_local_mem_info mem_info;
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_crat.c b/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
+index 130db4dc115f..d4560f1869bd 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
+@@ -353,8 +353,8 @@ static int kfd_parse_subtype_iolink(struct crat_subtype_iolink *iolink,
+ id_from = iolink->proximity_domain_from;
+ id_to = iolink->proximity_domain_to;
+
+- pr_debug("Found IO link entry in CRAT table with id_from=%d\n",
+- id_from);
++ pr_debug("Found IO link entry in CRAT table with id_from=%d, id_to %d\n",
++ id_from, id_to);
+ list_for_each_entry(dev, device_list, list) {
+ if (id_from == dev->proximity_domain) {
+ props = kfd_alloc_struct(props);
+@@ -391,12 +391,12 @@ static int kfd_parse_subtype_iolink(struct crat_subtype_iolink *iolink,
+ /* CPU topology is created before GPUs are detected, so CPU->GPU
+ * links are not built at that time. If a PCIe type is discovered, it
+ * means a GPU is detected and we are adding GPU->CPU to the topology.
+- * At this time, also add the corresponded CPU->GPU link.
++ * At this time, also add the corresponded CPU->GPU link if GPU
++ * is large bar.
+ * For xGMI, we only added the link with one direction in the crat
+ * table, add corresponded reversed direction link now.
+ */
+- if (props && (props->iolink_type == CRAT_IOLINK_TYPE_PCIEXPRESS ||
+- props->iolink_type == CRAT_IOLINK_TYPE_XGMI)) {
++ if (props && (iolink->flags & CRAT_IOLINK_FLAGS_BI_DIRECTIONAL)) {
+ to_dev = kfd_topology_device_by_proximity_domain(id_to);
+ if (!to_dev)
+ return -ENODEV;
+@@ -1057,6 +1057,8 @@ static int kfd_fill_gpu_direct_io_link_to_cpu(int *avail_size,
+ sub_type_hdr->type = CRAT_SUBTYPE_IOLINK_AFFINITY;
+ sub_type_hdr->length = sizeof(struct crat_subtype_iolink);
+ sub_type_hdr->flags |= CRAT_SUBTYPE_FLAGS_ENABLED;
++ if (kfd_dev_is_large_bar(kdev))
++ sub_type_hdr->flags |= CRAT_IOLINK_FLAGS_BI_DIRECTIONAL;
+
+ /* Fill in IOLINK subtype.
+ * TODO: Fill-in other fields of iolink subtype
+@@ -1088,7 +1090,8 @@ static int kfd_fill_gpu_xgmi_link_to_gpu(int *avail_size,
+
+ sub_type_hdr->type = CRAT_SUBTYPE_IOLINK_AFFINITY;
+ sub_type_hdr->length = sizeof(struct crat_subtype_iolink);
+- sub_type_hdr->flags |= CRAT_SUBTYPE_FLAGS_ENABLED;
++ sub_type_hdr->flags |= CRAT_SUBTYPE_FLAGS_ENABLED |
++ CRAT_IOLINK_FLAGS_BI_DIRECTIONAL;
+
+ sub_type_hdr->io_interface_type = CRAT_IOLINK_TYPE_XGMI;
+ sub_type_hdr->proximity_domain_from = proximity_domain_from;
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_crat.h b/drivers/gpu/drm/amd/amdkfd/kfd_crat.h
+index 7a93aeb984de..7c3f192fe25f 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_crat.h
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_crat.h
+@@ -232,7 +232,8 @@ struct crat_subtype_ccompute {
+ #define CRAT_IOLINK_FLAGS_NO_ATOMICS_32_BIT (1 << 2)
+ #define CRAT_IOLINK_FLAGS_NO_ATOMICS_64_BIT (1 << 3)
+ #define CRAT_IOLINK_FLAGS_NO_PEER_TO_PEER_DMA (1 << 4)
+-#define CRAT_IOLINK_FLAGS_RESERVED_MASK 0xffffffe0
++#define CRAT_IOLINK_FLAGS_BI_DIRECTIONAL (1 << 31)
++#define CRAT_IOLINK_FLAGS_RESERVED_MASK 0x7fffffe0
+
+ /*
+ * IO interface types
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+index 843dbd4ad776..1e37e9e0b87d 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+@@ -724,6 +724,7 @@ struct amdkfd_ioctl_desc {
+ unsigned int cmd_drv;
+ const char *name;
+ };
++bool kfd_dev_is_large_bar(struct kfd_dev *dev);
+
+ int kfd_process_create_wq(void);
+ void kfd_process_destroy_wq(void);
+--
+2.17.1
+