aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0316-drm-amdkfd-fix-runlist-length-calculation.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0316-drm-amdkfd-fix-runlist-length-calculation.patch')
-rw-r--r--common/recipes-kernel/linux/files/0316-drm-amdkfd-fix-runlist-length-calculation.patch53
1 files changed, 53 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0316-drm-amdkfd-fix-runlist-length-calculation.patch b/common/recipes-kernel/linux/files/0316-drm-amdkfd-fix-runlist-length-calculation.patch
new file mode 100644
index 00000000..95d267d3
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0316-drm-amdkfd-fix-runlist-length-calculation.patch
@@ -0,0 +1,53 @@
+From e1940fa4bfa32d86a771e300a3fd116c46878bf4 Mon Sep 17 00:00:00 2001
+From: Ben Goz <ben.goz@amd.com>
+Date: Tue, 6 Jan 2015 11:32:13 +0200
+Subject: [PATCH 0316/1050] drm/amdkfd: fix runlist length calculation
+
+The MAP_QUEUES packet length for Carrizo is different than for Kaveri.
+Therefore, we now need to calculate the runlist length with regard to the
+underlying H/W.
+
+Signed-off-by: Ben Goz <ben.goz@amd.com>
+Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
+---
+ drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c
+index 99b6d28..e3230cc 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c
+@@ -27,6 +27,7 @@
+ #include "kfd_kernel_queue.h"
+ #include "kfd_priv.h"
+ #include "kfd_pm4_headers.h"
++#include "kfd_pm4_headers_vi.h"
+ #include "kfd_pm4_opcodes.h"
+
+ static inline void inc_wptr(unsigned int *wptr, unsigned int increment_bytes,
+@@ -55,6 +56,7 @@ static void pm_calc_rlib_size(struct packet_manager *pm,
+ bool *over_subscription)
+ {
+ unsigned int process_count, queue_count;
++ unsigned int map_queue_size;
+
+ BUG_ON(!pm || !rlib_size || !over_subscription);
+
+@@ -69,9 +71,13 @@ static void pm_calc_rlib_size(struct packet_manager *pm,
+ pr_debug("kfd: over subscribed runlist\n");
+ }
+
++ map_queue_size =
++ (pm->dqm->dev->device_info->asic_family == CHIP_CARRIZO) ?
++ sizeof(struct pm4_mes_map_queues) :
++ sizeof(struct pm4_map_queues);
+ /* calculate run list ib allocation size */
+ *rlib_size = process_count * sizeof(struct pm4_map_process) +
+- queue_count * sizeof(struct pm4_map_queues);
++ queue_count * map_queue_size;
+
+ /*
+ * Increase the allocation size in case we need a chained run list
+--
+1.9.1
+