aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2927-drm-amdkfd-Support-bigger-gds-size.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2927-drm-amdkfd-Support-bigger-gds-size.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2927-drm-amdkfd-Support-bigger-gds-size.patch107
1 files changed, 107 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2927-drm-amdkfd-Support-bigger-gds-size.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2927-drm-amdkfd-Support-bigger-gds-size.patch
new file mode 100644
index 00000000..ce64f3f7
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2927-drm-amdkfd-Support-bigger-gds-size.patch
@@ -0,0 +1,107 @@
+From 3c99869733cb47b04d809625959d1094e861c29d Mon Sep 17 00:00:00 2001
+From: Oak Zeng <Oak.Zeng@amd.com>
+Date: Tue, 19 Feb 2019 14:59:51 -0600
+Subject: [PATCH 2927/2940] drm/amdkfd: Support bigger gds size
+
+Extend map_process and set_resources pm4 packet to support
+bigger gds size for arcturus.
+
+v2: Only make the change for v9
+
+Signed-off-by: Oak Zeng <Oak.Zeng@amd.com>
+Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ .../gpu/drm/amd/amdkfd/kfd_kernel_queue_v9.c | 33 +++++++++++++++++--
+ .../gpu/drm/amd/amdkfd/kfd_pm4_headers_ai.h | 10 +++---
+ 2 files changed, 36 insertions(+), 7 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 6a4332f4a3fb..c3f39ef4de56 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_v9.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_v9.c
+@@ -82,7 +82,8 @@ static int pm_map_process_v9(struct packet_manager *pm,
+ packet->bitfields2.diq_enable = (qpd->is_debug) ? 1 : 0;
+ packet->bitfields2.process_quantum = 1;
+ packet->bitfields2.pasid = qpd->pqm->process->pasid;
+- packet->bitfields14.gds_size = qpd->gds_size;
++ packet->bitfields14.gds_size = qpd->gds_size & 0x3F;
++ packet->bitfields14.gds_size_hi = (qpd->gds_size >> 6) & 0xF;
+ packet->bitfields14.num_gws = qpd->num_gws;
+ packet->bitfields14.num_oac = qpd->num_oac;
+ packet->bitfields14.sdma_enable = 1;
+@@ -149,6 +150,34 @@ static int pm_runlist_v9(struct packet_manager *pm, uint32_t *buffer,
+ return 0;
+ }
+
++static int pm_set_resources_v9(struct packet_manager *pm, uint32_t *buffer,
++ struct scheduling_resources *res)
++{
++ struct pm4_mes_set_resources *packet;
++
++ packet = (struct pm4_mes_set_resources *)buffer;
++ memset(buffer, 0, sizeof(struct pm4_mes_set_resources));
++
++ packet->header.u32All = pm_build_pm4_header(IT_SET_RESOURCES,
++ sizeof(struct pm4_mes_set_resources));
++
++ packet->bitfields2.queue_type =
++ queue_type__mes_set_resources__hsa_interface_queue_hiq;
++ packet->bitfields2.vmid_mask = res->vmid_mask;
++ packet->bitfields2.unmap_latency = KFD_UNMAP_LATENCY_MS / 100;
++ packet->bitfields7.oac_mask = res->oac_mask;
++ packet->bitfields8.gds_heap_base = res->gds_heap_base;
++ packet->bitfields8.gds_heap_size = res->gds_heap_size;
++
++ packet->gws_mask_lo = lower_32_bits(res->gws_mask);
++ packet->gws_mask_hi = upper_32_bits(res->gws_mask);
++
++ packet->queue_mask_lo = lower_32_bits(res->queue_mask);
++ packet->queue_mask_hi = upper_32_bits(res->queue_mask);
++
++ return 0;
++}
++
+ static int pm_map_queues_v9(struct packet_manager *pm, uint32_t *buffer,
+ struct queue *q, bool is_static)
+ {
+@@ -385,7 +414,7 @@ static int pm_release_mem_v9(uint64_t gpu_addr, uint32_t *buffer)
+ const struct packet_manager_funcs kfd_v9_pm_funcs = {
+ .map_process = pm_map_process_v9,
+ .runlist = pm_runlist_v9,
+- .set_resources = pm_set_resources_vi,
++ .set_resources = pm_set_resources_v9,
+ .map_queues = pm_map_queues_v9,
+ .unmap_queues = pm_unmap_queues_v9,
+ .set_grace_period = pm_set_grace_period_v9,
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_pm4_headers_ai.h b/drivers/gpu/drm/amd/amdkfd/kfd_pm4_headers_ai.h
+index 249cfa4312a8..141d25607a50 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_pm4_headers_ai.h
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_pm4_headers_ai.h
+@@ -83,10 +83,10 @@ struct pm4_mes_set_resources {
+
+ union {
+ struct {
+- uint32_t gds_heap_base:6;
+- uint32_t reserved3:5;
+- uint32_t gds_heap_size:6;
+- uint32_t reserved4:15;
++ uint32_t gds_heap_base:10;
++ uint32_t reserved3:1;
++ uint32_t gds_heap_size:10;
++ uint32_t reserved4:11;
+ } bitfields8;
+ uint32_t ordinal8;
+ };
+@@ -182,7 +182,7 @@ struct pm4_mes_map_process {
+ uint32_t num_gws:7;
+ uint32_t sdma_enable:1;
+ uint32_t num_oac:4;
+- uint32_t reserved8:4;
++ uint32_t gds_size_hi:4;
+ uint32_t gds_size:6;
+ uint32_t num_queues:10;
+ } bitfields14;
+--
+2.17.1
+