aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/1263-drm-amdkfd-Ignore-ACPI-CRAT-for-non-APU-systems.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/1263-drm-amdkfd-Ignore-ACPI-CRAT-for-non-APU-systems.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/1263-drm-amdkfd-Ignore-ACPI-CRAT-for-non-APU-systems.patch106
1 files changed, 106 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/1263-drm-amdkfd-Ignore-ACPI-CRAT-for-non-APU-systems.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/1263-drm-amdkfd-Ignore-ACPI-CRAT-for-non-APU-systems.patch
new file mode 100644
index 00000000..c5e79a92
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/1263-drm-amdkfd-Ignore-ACPI-CRAT-for-non-APU-systems.patch
@@ -0,0 +1,106 @@
+From 20a37acfdc750227167cf82a5ee02e13847ed97b Mon Sep 17 00:00:00 2001
+From: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
+Date: Thu, 20 Apr 2017 12:14:12 -0400
+Subject: [PATCH 1263/4131] drm/amdkfd: Ignore ACPI CRAT for non APU systems
+
+Bug: SWDEV-112350
+
+Change-Id: I768009dd4622627cf0b913f6034100ef5bcb90be
+Signed-off-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
+
+ Conflicts:
+ drivers/gpu/drm/amd/amdkfd/kfd_topology.c
+---
+ drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 58 ++++++++++++++++++++++++++-----
+ 1 file changed, 50 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
+index 605e42f..603fcde9 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
+@@ -951,6 +951,33 @@ static void kfd_add_non_crat_information(struct kfd_topology_device *kdev)
+ /* TODO: For GPU node, rearrange code from kfd_topology_add_device */
+ }
+
++/* kfd_is_acpi_crat_invalid - CRAT from ACPI is valid only for AMD APU devices.
++ * Ignore CRAT for all other devices. AMD APU is identified if both CPU
++ * and GPU cores are present.
++ * @device_list - topology device list created by parsing ACPI CRAT table.
++ * @return - TRUE if invalid, FALSE is valid.
++ */
++static bool kfd_is_acpi_crat_invalid(struct list_head *device_list)
++{
++ struct kfd_topology_device *dev;
++
++ list_for_each_entry(dev, device_list, list) {
++ if (dev->node_props.cpu_cores_count &&
++ dev->node_props.simd_count)
++ return false;
++ }
++ pr_info("Ignoring ACPI CRAT on non-APU system\n");
++ return true;
++}
++
++static void kfd_delete_topology_device_list(struct list_head *device_list)
++{
++ struct kfd_topology_device *dev, *tmp;
++
++ list_for_each_entry_safe(dev, tmp, device_list, list)
++ kfd_release_topology_device(dev);
++}
++
+ int kfd_topology_init(void)
+ {
+ void *crat_image = NULL;
+@@ -984,25 +1011,40 @@ int kfd_topology_init(void)
+
+ /*
+ * Get the CRAT image from the ACPI. If ACPI doesn't have one
+- * create a virtual CRAT.
++ * or if ACPI CRAT is invalid create a virtual CRAT.
+ * NOTE: The current implementation expects all AMD APUs to have
+ * CRAT. If no CRAT is available, it is assumed to be a CPU
+ */
+ ret = kfd_create_crat_image_acpi(&crat_image, &image_size);
+- if (ret != 0) {
++ if (ret == 0) {
++ ret = kfd_parse_crat_table(crat_image,
++ &temp_topology_device_list,
++ proximity_domain);
++ if (ret ||
++ kfd_is_acpi_crat_invalid(&temp_topology_device_list)) {
++
++ kfd_delete_topology_device_list(
++ &temp_topology_device_list);
++ INIT_LIST_HEAD(&temp_topology_device_list);
++ kfd_destroy_crat_image(crat_image);
++ crat_image = NULL;
++ }
++ }
++
++ if (!crat_image) {
+ ret = kfd_create_crat_image_virtual(&crat_image, &image_size,
+ COMPUTE_UNIT_CPU, NULL,
+ proximity_domain);
+ cpu_only_node = 1;
+- }
+
+- if (ret == 0)
+- ret = kfd_parse_crat_table(crat_image,
++ if (ret == 0)
++ ret = kfd_parse_crat_table(crat_image,
+ &temp_topology_device_list,
+ proximity_domain);
+- else {
+- pr_err("Error getting/creating CRAT table\n");
+- goto err;
++ else {
++ pr_err("Error getting/creating CRAT table\n");
++ goto err;
++ }
+ }
+
+ kdev = list_first_entry(&temp_topology_device_list,
+--
+2.7.4
+