aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/5630-drm-amdkfd-Put-packet-sizes-directly-into-packet_man.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/5630-drm-amdkfd-Put-packet-sizes-directly-into-packet_man.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/5630-drm-amdkfd-Put-packet-sizes-directly-into-packet_man.patch290
1 files changed, 290 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/5630-drm-amdkfd-Put-packet-sizes-directly-into-packet_man.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/5630-drm-amdkfd-Put-packet-sizes-directly-into-packet_man.patch
new file mode 100644
index 00000000..db935237
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/5630-drm-amdkfd-Put-packet-sizes-directly-into-packet_man.patch
@@ -0,0 +1,290 @@
+From ac3a7f1f0b4f8163bf43a6b97c29aa310edb8192 Mon Sep 17 00:00:00 2001
+From: Felix Kuehling <Felix.Kuehling@amd.com>
+Date: Tue, 27 Mar 2018 15:50:08 -0400
+Subject: [PATCH 5630/5725] drm/amdkfd: Put packet sizes directly into
+ packet_manager_funcs
+
+This is more efficient than indirectly calling a size query function
+that just returns the constant size.
+
+Change-Id: Ifbab7d7ea74b66e7de56e061a2c8fa78cfc0db47
+Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
+---
+ drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_v9.c | 58 ++++++---------------
+ drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_vi.c | 64 ++++++------------------
+ drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c | 20 ++++----
+ drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 17 +++----
+ 4 files changed, 46 insertions(+), 113 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_v9.c b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_v9.c
+index b53e5ee..f311f13 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_v9.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_v9.c
+@@ -323,51 +323,21 @@ static uint32_t pm_release_mem_v9(uint64_t gpu_addr, uint32_t *buffer)
+ return sizeof(struct pm4_mec_release_mem) / sizeof(unsigned int);
+ }
+
+-static uint32_t pm_get_map_process_packet_size_v9(void)
+-{
+- return sizeof(struct pm4_mes_map_process);
+-}
+-
+-static uint32_t pm_get_runlist_packet_size_v9(void)
+-{
+- return sizeof(struct pm4_mes_runlist);
+-}
+-
+-static uint32_t pm_get_map_queues_packet_size_v9(void)
+-{
+- return sizeof(struct pm4_mes_map_queues);
+-}
+-
+-static uint32_t pm_get_unmap_queues_packet_size_v9(void)
+-{
+- return sizeof(struct pm4_mes_unmap_queues);
+-}
+-
+-static uint32_t pm_get_query_status_packet_size_v9(void)
+-{
+- return sizeof(struct pm4_mes_query_status);
+-}
+-
+-static uint32_t pm_get_release_mem_packet_size_v9(void)
+-{
+- return sizeof(struct pm4_mec_release_mem);
+-}
+-
+ static struct packet_manager_funcs kfd_v9_pm_funcs = {
+- .map_process = pm_map_process_v9,
+- .runlist = pm_runlist_v9,
+- .set_resources = pm_set_resources_vi,
+- .map_queues = pm_map_queues_v9,
+- .unmap_queues = pm_unmap_queues_v9,
+- .query_status = pm_query_status_v9,
+- .release_mem = pm_release_mem_v9,
+- .get_map_process_packet_size = pm_get_map_process_packet_size_v9,
+- .get_runlist_packet_size = pm_get_runlist_packet_size_v9,
+- .get_set_resources_packet_size = pm_get_set_resources_packet_size_vi,
+- .get_map_queues_packet_size = pm_get_map_queues_packet_size_v9,
+- .get_unmap_queues_packet_size = pm_get_unmap_queues_packet_size_v9,
+- .get_query_status_packet_size = pm_get_query_status_packet_size_v9,
+- .get_release_mem_packet_size = pm_get_release_mem_packet_size_v9,
++ .map_process = pm_map_process_v9,
++ .runlist = pm_runlist_v9,
++ .set_resources = pm_set_resources_vi,
++ .map_queues = pm_map_queues_v9,
++ .unmap_queues = pm_unmap_queues_v9,
++ .query_status = pm_query_status_v9,
++ .release_mem = pm_release_mem_v9,
++ .map_process_size = sizeof(struct pm4_mes_map_process),
++ .runlist_size = sizeof(struct pm4_mes_runlist),
++ .set_resources_size = sizeof(struct pm4_mes_set_resources),
++ .map_queues_size = sizeof(struct pm4_mes_map_queues),
++ .unmap_queues_size = sizeof(struct pm4_mes_unmap_queues),
++ .query_status_size = sizeof(struct pm4_mes_query_status),
++ .release_mem_size = sizeof(struct pm4_mec_release_mem)
+ };
+
+ void kfd_pm_func_init_v9(struct packet_manager *pm)
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_vi.c b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_vi.c
+index e798873..178c5d0 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_vi.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_vi.c
+@@ -358,57 +358,21 @@ static uint32_t pm_release_mem_vi(uint64_t gpu_addr, uint32_t *buffer)
+ return sizeof(struct pm4_mec_release_mem) / sizeof(unsigned int);
+ }
+
+-static uint32_t pm_get_map_process_packet_size_vi(void)
+-{
+- return sizeof(struct pm4_mes_map_process);
+-}
+-
+-static uint32_t pm_get_runlist_packet_size_vi(void)
+-{
+- return sizeof(struct pm4_mes_runlist);
+-}
+-
+-uint32_t pm_get_set_resources_packet_size_vi(void)
+-{
+- return sizeof(struct pm4_mes_set_resources);
+-}
+-
+-static uint32_t pm_get_map_queues_packet_size_vi(void)
+-{
+- return sizeof(struct pm4_mes_map_queues);
+-}
+-
+-static uint32_t pm_get_unmap_queues_packet_size_vi(void)
+-{
+- return sizeof(struct pm4_mes_unmap_queues);
+-}
+-
+-static uint32_t pm_get_query_status_packet_size_vi(void)
+-{
+- return sizeof(struct pm4_mes_query_status);
+-}
+-
+-static uint32_t pm_get_release_mem_packet_size_vi(void)
+-{
+- return sizeof(struct pm4_mec_release_mem);
+-}
+-
+-
+ static struct packet_manager_funcs kfd_vi_pm_funcs = {
+- .map_process = pm_map_process_vi,
+- .runlist = pm_runlist_vi,
+- .set_resources = pm_set_resources_vi,
+- .map_queues = pm_map_queues_vi,
+- .unmap_queues = pm_unmap_queues_vi,
+- .query_status = pm_query_status_vi,
+- .release_mem = pm_release_mem_vi,
+- .get_map_process_packet_size = pm_get_map_process_packet_size_vi,
+- .get_runlist_packet_size = pm_get_runlist_packet_size_vi,
+- .get_set_resources_packet_size = pm_get_set_resources_packet_size_vi,
+- .get_map_queues_packet_size = pm_get_map_queues_packet_size_vi,
+- .get_unmap_queues_packet_size = pm_get_unmap_queues_packet_size_vi,
+- .get_query_status_packet_size = pm_get_query_status_packet_size_vi,
+- .get_release_mem_packet_size = pm_get_release_mem_packet_size_vi,
++ .map_process = pm_map_process_vi,
++ .runlist = pm_runlist_vi,
++ .set_resources = pm_set_resources_vi,
++ .map_queues = pm_map_queues_vi,
++ .unmap_queues = pm_unmap_queues_vi,
++ .query_status = pm_query_status_vi,
++ .release_mem = pm_release_mem_vi,
++ .map_process_size = sizeof(struct pm4_mes_map_process),
++ .runlist_size = sizeof(struct pm4_mes_runlist),
++ .set_resources_size = sizeof(struct pm4_mes_set_resources),
++ .map_queues_size = sizeof(struct pm4_mes_map_queues),
++ .unmap_queues_size = sizeof(struct pm4_mes_unmap_queues),
++ .query_status_size = sizeof(struct pm4_mes_query_status),
++ .release_mem_size = sizeof(struct pm4_mec_release_mem)
+ };
+
+ void kfd_pm_func_init_vi(struct packet_manager *pm)
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c
+index 8abefd7..699352b 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c
+@@ -69,9 +69,9 @@ static void pm_calc_rlib_size(struct packet_manager *pm,
+ pr_debug("Over subscribed runlist\n");
+ }
+
+- map_queue_size = pm->pmf->get_map_queues_packet_size();
++ map_queue_size = pm->pmf->map_queues_size;
+ /* calculate run list ib allocation size */
+- *rlib_size = process_count * pm->pmf->get_map_process_packet_size() +
++ *rlib_size = process_count * pm->pmf->map_process_size +
+ queue_count * map_queue_size;
+
+ /*
+@@ -79,7 +79,7 @@ static void pm_calc_rlib_size(struct packet_manager *pm,
+ * when over subscription
+ */
+ if (*over_subscription)
+- *rlib_size += pm->pmf->get_runlist_packet_size();
++ *rlib_size += pm->pmf->runlist_size;
+
+ pr_debug("runlist ib size %d\n", *rlib_size);
+ }
+@@ -160,7 +160,7 @@ static int pm_create_runlist_ib(struct packet_manager *pm,
+ return retval;
+
+ proccesses_mapped++;
+- inc_wptr(&rl_wptr, pm->pmf->get_map_process_packet_size(),
++ inc_wptr(&rl_wptr, pm->pmf->map_process_size,
+ alloc_size_bytes);
+
+ list_for_each_entry(kq, &qpd->priv_queue_list, list) {
+@@ -178,7 +178,7 @@ static int pm_create_runlist_ib(struct packet_manager *pm,
+ return retval;
+
+ inc_wptr(&rl_wptr,
+- pm->pmf->get_map_queues_packet_size(),
++ pm->pmf->map_queues_size,
+ alloc_size_bytes);
+ }
+
+@@ -197,7 +197,7 @@ static int pm_create_runlist_ib(struct packet_manager *pm,
+ return retval;
+
+ inc_wptr(&rl_wptr,
+- pm->pmf->get_map_queues_packet_size(),
++ pm->pmf->map_queues_size,
+ alloc_size_bytes);
+ }
+ }
+@@ -262,7 +262,7 @@ int pm_send_set_resources(struct packet_manager *pm,
+ uint32_t *buffer, size;
+ int retval = 0;
+
+- size = pm->pmf->get_set_resources_packet_size();
++ size = pm->pmf->set_resources_size;
+ mutex_lock(&pm->lock);
+ pm->priv_queue->ops.acquire_packet_buffer(pm->priv_queue,
+ size / sizeof(uint32_t),
+@@ -299,7 +299,7 @@ int pm_send_runlist(struct packet_manager *pm, struct list_head *dqm_queues)
+
+ pr_debug("runlist IB address: 0x%llX\n", rl_gpu_ib_addr);
+
+- packet_size_dwords = pm->pmf->get_runlist_packet_size() /
++ packet_size_dwords = pm->pmf->runlist_size /
+ sizeof(uint32_t);
+ mutex_lock(&pm->lock);
+
+@@ -337,7 +337,7 @@ int pm_send_query_status(struct packet_manager *pm, uint64_t fence_address,
+ if (WARN_ON(!fence_address))
+ return -EFAULT;
+
+- size = pm->pmf->get_query_status_packet_size();
++ size = pm->pmf->query_status_size;
+ mutex_lock(&pm->lock);
+ pm->priv_queue->ops.acquire_packet_buffer(pm->priv_queue,
+ size / sizeof(uint32_t), (unsigned int **)&buffer);
+@@ -366,7 +366,7 @@ int pm_send_unmap_queue(struct packet_manager *pm, enum kfd_queue_type type,
+ uint32_t *buffer, size;
+ int retval = 0;
+
+- size = pm->pmf->get_unmap_queues_packet_size();
++ size = pm->pmf->unmap_queues_size;
+ mutex_lock(&pm->lock);
+ pm->priv_queue->ops.acquire_packet_buffer(pm->priv_queue,
+ size / sizeof(uint32_t), (unsigned int **)&buffer);
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+index fe25058..319a8b7 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+@@ -974,14 +974,14 @@ struct packet_manager_funcs {
+ uint64_t fence_address, uint32_t fence_value);
+ uint32_t (*release_mem)(uint64_t gpu_addr, uint32_t *buffer);
+
+- uint32_t (*get_map_process_packet_size)(void);
+- uint32_t (*get_runlist_packet_size)(void);
+- uint32_t (*get_set_resources_packet_size)(void);
+- uint32_t (*get_map_queues_packet_size)(void);
+- uint32_t (*get_unmap_queues_packet_size)(void);
+- uint32_t (*get_query_status_packet_size)(void);
+- uint32_t (*get_release_mem_packet_size)(void);
+-
++ /* Packet sizes */
++ int map_process_size;
++ int runlist_size;
++ int set_resources_size;
++ int map_queues_size;
++ int unmap_queues_size;
++ int query_status_size;
++ int release_mem_size;
+ };
+
+ int pm_init(struct packet_manager *pm, struct device_queue_manager *dqm);
+@@ -1003,7 +1003,6 @@ void pm_release_ib(struct packet_manager *pm);
+ unsigned int pm_build_pm4_header(unsigned int opcode, size_t packet_size);
+ int pm_set_resources_vi(struct packet_manager *pm, uint32_t *buffer,
+ struct scheduling_resources *res);
+-uint32_t pm_get_set_resources_packet_size_vi(void);
+
+ void kfd_pm_func_init_vi(struct packet_manager *pm);
+ void kfd_pm_func_init_v9(struct packet_manager *pm);
+--
+2.7.4
+