diff options
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.patch | 290 |
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 + |