diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/5714-drm-amdkfd-Only-add-bi-directional-iolink-on-GPU-wit.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/5714-drm-amdkfd-Only-add-bi-directional-iolink-on-GPU-wit.patch | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/5714-drm-amdkfd-Only-add-bi-directional-iolink-on-GPU-wit.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/5714-drm-amdkfd-Only-add-bi-directional-iolink-on-GPU-wit.patch new file mode 100644 index 00000000..994f9ebe --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/5714-drm-amdkfd-Only-add-bi-directional-iolink-on-GPU-wit.patch @@ -0,0 +1,94 @@ +From 20620531eab1dd6d8a0f7f6314745121f42e1b5c Mon Sep 17 00:00:00 2001 +From: shaoyunl <Shaoyun.Liu@amd.com> +Date: Fri, 7 Sep 2018 12:00:07 -0400 +Subject: [PATCH 5714/5725] drm/amdkfd: Only add bi-directional iolink on GPU + with XGMI or largebar + +Change-Id: Ibb6a89ed878fffccb9a8bb4032b07a10ee298a99 +Signed-off-by: shaoyunl <Shaoyun.Liu@amd.com> +Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> +--- + 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 + + 3 files changed, 12 insertions(+), 7 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_crat.c b/drivers/gpu/drm/amd/amdkfd/kfd_crat.c +index 1655e8b..ee753cb 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; +@@ -1076,6 +1076,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 +@@ -1107,7 +1109,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 1ef8823..cfdd02f 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 ca42b58..1f0d558 100644 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h +@@ -834,6 +834,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.7.4 + |