aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4154-drm-amdgpu-Remove-pm_map_process_cik.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4154-drm-amdgpu-Remove-pm_map_process_cik.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4154-drm-amdgpu-Remove-pm_map_process_cik.patch347
1 files changed, 347 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4154-drm-amdgpu-Remove-pm_map_process_cik.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4154-drm-amdgpu-Remove-pm_map_process_cik.patch
new file mode 100644
index 00000000..e5077657
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4154-drm-amdgpu-Remove-pm_map_process_cik.patch
@@ -0,0 +1,347 @@
+From af9ee366994d3ccab78f486715e44161941950c3 Mon Sep 17 00:00:00 2001
+From: Felix Kuehling <Felix.Kuehling@amd.com>
+Date: Tue, 27 Mar 2018 15:23:19 -0400
+Subject: [PATCH 4154/5725] drm/amdgpu: Remove pm_map_process_cik
+
+This deprecated packet format does not support scratch memory, which
+has long been required by the runtime. It was not upstreamed and can
+be removed.
+
+Now CIK and VI use the same packets across the board, so there is no
+more need to maintain a separate function table for CIK. The FW
+version check is also no longer needed.
+
+Change-Id: Icb2d9fb0e83eb0dc1547fd85bf4cd971b4b08fec
+Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
+---
+ .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 4 +-
+ drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_cik.c | 79 ----------------------
+ drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_v9.c | 2 +-
+ drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_vi.c | 26 +++----
+ drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c | 10 ++-
+ drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 31 +--------
+ 6 files changed, 23 insertions(+), 129 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+index 8c04f7a2..b0c159a 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+@@ -885,7 +885,7 @@ static void uninitialize(struct device_queue_manager *dqm)
+ static int start_nocpsch(struct device_queue_manager *dqm)
+ {
+ init_interrupts(dqm);
+- return pm_init(&dqm->packets, dqm, dqm->dev->mec_fw_version);
++ return pm_init(&dqm->packets, dqm);
+ }
+
+ static int stop_nocpsch(struct device_queue_manager *dqm)
+@@ -1030,7 +1030,7 @@ static int start_cpsch(struct device_queue_manager *dqm)
+
+ retval = 0;
+
+- retval = pm_init(&dqm->packets, dqm, dqm->dev->mec_fw_version);
++ retval = pm_init(&dqm->packets, dqm);
+ if (retval)
+ goto fail_packet_manager_init;
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_cik.c b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_cik.c
+index b8a7c4a..b48c29f 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_cik.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_cik.c
+@@ -53,82 +53,3 @@ static void submit_packet_cik(struct kernel_queue *kq)
+ write_kernel_doorbell(kq->queue->properties.doorbell_ptr,
+ kq->pending_wptr);
+ }
+-
+-static int pm_map_process_cik(struct packet_manager *pm, uint32_t *buffer,
+- struct qcm_process_device *qpd)
+-{
+- struct pm4_map_process *packet;
+-
+- packet = (struct pm4_map_process *)buffer;
+-
+- memset(buffer, 0, sizeof(struct pm4_map_process));
+-
+- packet->header.u32all = pm_build_pm4_header(IT_MAP_PROCESS,
+- sizeof(struct pm4_map_process));
+- packet->bitfields2.diq_enable = (qpd->is_debug) ? 1 : 0;
+- packet->bitfields2.process_quantum = 1;
+- packet->bitfields2.pasid = qpd->pqm->process->pasid;
+- packet->bitfields3.page_table_base = qpd->page_table_base;
+- packet->bitfields10.gds_size = qpd->gds_size;
+- packet->bitfields10.num_gws = qpd->num_gws;
+- packet->bitfields10.num_oac = qpd->num_oac;
+- packet->bitfields10.num_queues = (qpd->is_debug) ? 0 : qpd->queue_count;
+-
+- packet->sh_mem_config = qpd->sh_mem_config;
+- packet->sh_mem_bases = qpd->sh_mem_bases;
+- packet->sh_mem_ape1_base = qpd->sh_mem_ape1_base;
+- packet->sh_mem_ape1_limit = qpd->sh_mem_ape1_limit;
+-
+- packet->gds_addr_lo = lower_32_bits(qpd->gds_context_area);
+- packet->gds_addr_hi = upper_32_bits(qpd->gds_context_area);
+-
+- return 0;
+-}
+-
+-static uint32_t pm_get_map_process_packet_size_cik(void)
+-{
+- return sizeof(struct pm4_map_process);
+-}
+-
+-
+-static struct packet_manager_funcs kfd_cik_pm_funcs = {
+- .map_process = pm_map_process_cik,
+- .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_cik,
+- .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,
+-};
+-
+-static struct packet_manager_funcs kfd_cik_scratch_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,
+-};
+-
+-void kfd_pm_func_init_cik(struct packet_manager *pm, uint16_t fw_ver)
+-{
+- if (fw_ver >= KFD_SCRATCH_KV_FW_VER)
+- pm->pmf = &kfd_cik_scratch_pm_funcs;
+- else
+- pm->pmf = &kfd_cik_pm_funcs;
+-}
+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 5fe4f60..b53e5ee 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_v9.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_v9.c
+@@ -370,7 +370,7 @@ static struct packet_manager_funcs kfd_v9_pm_funcs = {
+ .get_release_mem_packet_size = pm_get_release_mem_packet_size_v9,
+ };
+
+-void kfd_pm_func_init_v9(struct packet_manager *pm, uint16_t fw_ver)
++void kfd_pm_func_init_v9(struct packet_manager *pm)
+ {
+ pm->pmf = &kfd_v9_pm_funcs;
+ }
+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 13ff604d..e798873 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_vi.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_vi.c
+@@ -67,7 +67,7 @@ static void submit_packet_vi(struct kernel_queue *kq)
+ kq->pending_wptr);
+ }
+
+-int pm_map_process_vi(struct packet_manager *pm,
++static int pm_map_process_vi(struct packet_manager *pm,
+ uint32_t *buffer, struct qcm_process_device *qpd)
+ {
+ struct pm4_mes_map_process *packet;
+@@ -112,7 +112,7 @@ unsigned int pm_build_pm4_header(unsigned int opcode, size_t packet_size)
+ return header.u32All;
+ }
+
+-int pm_runlist_vi(struct packet_manager *pm, uint32_t *buffer,
++static int pm_runlist_vi(struct packet_manager *pm, uint32_t *buffer,
+ uint64_t ib, size_t ib_size_in_dwords, bool chain)
+ {
+ struct pm4_mes_runlist *packet;
+@@ -150,7 +150,7 @@ int pm_runlist_vi(struct packet_manager *pm, uint32_t *buffer,
+ return 0;
+ }
+
+-int pm_map_queues_vi(struct packet_manager *pm, uint32_t *buffer,
++static int pm_map_queues_vi(struct packet_manager *pm, uint32_t *buffer,
+ struct queue *q, bool is_static)
+ {
+ struct pm4_mes_map_queues *packet;
+@@ -237,7 +237,7 @@ int pm_set_resources_vi(struct packet_manager *pm, uint32_t *buffer,
+ return 0;
+ }
+
+-int pm_unmap_queues_vi(struct packet_manager *pm, uint32_t *buffer,
++static int pm_unmap_queues_vi(struct packet_manager *pm, uint32_t *buffer,
+ enum kfd_queue_type type,
+ enum kfd_unmap_queues_filter filter,
+ uint32_t filter_param, bool reset,
+@@ -302,7 +302,7 @@ int pm_unmap_queues_vi(struct packet_manager *pm, uint32_t *buffer,
+
+ }
+
+-int pm_query_status_vi(struct packet_manager *pm, uint32_t *buffer,
++static int pm_query_status_vi(struct packet_manager *pm, uint32_t *buffer,
+ uint64_t fence_address, uint32_t fence_value)
+ {
+ struct pm4_mes_query_status *packet;
+@@ -329,7 +329,7 @@ int pm_query_status_vi(struct packet_manager *pm, uint32_t *buffer,
+ }
+
+
+-uint32_t pm_release_mem_vi(uint64_t gpu_addr, uint32_t *buffer)
++static uint32_t pm_release_mem_vi(uint64_t gpu_addr, uint32_t *buffer)
+ {
+ struct pm4_mec_release_mem *packet;
+
+@@ -358,12 +358,12 @@ uint32_t pm_release_mem_vi(uint64_t gpu_addr, uint32_t *buffer)
+ return sizeof(struct pm4_mec_release_mem) / sizeof(unsigned int);
+ }
+
+-uint32_t pm_get_map_process_packet_size_vi(void)
++static uint32_t pm_get_map_process_packet_size_vi(void)
+ {
+ return sizeof(struct pm4_mes_map_process);
+ }
+
+-uint32_t pm_get_runlist_packet_size_vi(void)
++static uint32_t pm_get_runlist_packet_size_vi(void)
+ {
+ return sizeof(struct pm4_mes_runlist);
+ }
+@@ -373,22 +373,22 @@ uint32_t pm_get_set_resources_packet_size_vi(void)
+ return sizeof(struct pm4_mes_set_resources);
+ }
+
+-uint32_t pm_get_map_queues_packet_size_vi(void)
++static uint32_t pm_get_map_queues_packet_size_vi(void)
+ {
+ return sizeof(struct pm4_mes_map_queues);
+ }
+
+-uint32_t pm_get_unmap_queues_packet_size_vi(void)
++static uint32_t pm_get_unmap_queues_packet_size_vi(void)
+ {
+ return sizeof(struct pm4_mes_unmap_queues);
+ }
+
+-uint32_t pm_get_query_status_packet_size_vi(void)
++static uint32_t pm_get_query_status_packet_size_vi(void)
+ {
+ return sizeof(struct pm4_mes_query_status);
+ }
+
+-uint32_t pm_get_release_mem_packet_size_vi(void)
++static uint32_t pm_get_release_mem_packet_size_vi(void)
+ {
+ return sizeof(struct pm4_mec_release_mem);
+ }
+@@ -411,7 +411,7 @@ static struct packet_manager_funcs kfd_vi_pm_funcs = {
+ .get_release_mem_packet_size = pm_get_release_mem_packet_size_vi,
+ };
+
+-void kfd_pm_func_init_vi(struct packet_manager *pm, uint16_t fw_ver)
++void kfd_pm_func_init_vi(struct packet_manager *pm)
+ {
+ pm->pmf = &kfd_vi_pm_funcs;
+ }
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c
+index 98c89d2..8abefd7 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c
+@@ -217,8 +217,7 @@ static int pm_create_runlist_ib(struct packet_manager *pm,
+ return retval;
+ }
+
+-int pm_init(struct packet_manager *pm, struct device_queue_manager *dqm,
+- uint16_t fw_ver)
++int pm_init(struct packet_manager *pm, struct device_queue_manager *dqm)
+ {
+ pm->dqm = dqm;
+ mutex_init(&pm->lock);
+@@ -232,18 +231,17 @@ int pm_init(struct packet_manager *pm, struct device_queue_manager *dqm,
+ switch (pm->dqm->dev->device_info->asic_family) {
+ case CHIP_KAVERI:
+ case CHIP_HAWAII:
+- kfd_pm_func_init_cik(pm, fw_ver);
+- break;
++ /* PM4 packet structures on CIK are the same as on VI */
+ case CHIP_CARRIZO:
+ case CHIP_TONGA:
+ case CHIP_FIJI:
+ case CHIP_POLARIS10:
+ case CHIP_POLARIS11:
+- kfd_pm_func_init_vi(pm, fw_ver);
++ kfd_pm_func_init_vi(pm);
+ break;
+ case CHIP_VEGA10:
+ case CHIP_RAVEN:
+- kfd_pm_func_init_v9(pm, fw_ver);
++ kfd_pm_func_init_v9(pm);
+ break;
+ default:
+ BUG();
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+index 795bec1..641ea82 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+@@ -986,8 +986,7 @@ struct packet_manager_funcs {
+
+ };
+
+-int pm_init(struct packet_manager *pm, struct device_queue_manager *dqm,
+- uint16_t fw_ver);
++int pm_init(struct packet_manager *pm, struct device_queue_manager *dqm);
+ void pm_uninit(struct packet_manager *pm);
+ int pm_send_set_resources(struct packet_manager *pm,
+ struct scheduling_resources *res);
+@@ -1004,36 +1003,12 @@ void pm_release_ib(struct packet_manager *pm);
+
+ /* Following PM funcs can be shared among CIK and VI */
+ unsigned int pm_build_pm4_header(unsigned int opcode, size_t packet_size);
+-int pm_map_process_vi(struct packet_manager *pm,
+- uint32_t *buffer, struct qcm_process_device *qpd);
+-int pm_runlist_vi(struct packet_manager *pm, uint32_t *buffer,
+- uint64_t ib, size_t ib_size_in_dwords, bool chain);
+-int pm_map_queues_vi(struct packet_manager *pm, uint32_t *buffer,
+- struct queue *q, bool is_static);
+ int pm_set_resources_vi(struct packet_manager *pm, uint32_t *buffer,
+ struct scheduling_resources *res);
+-int pm_unmap_queues_vi(struct packet_manager *pm, uint32_t *buffer,
+- enum kfd_queue_type type,
+- enum kfd_unmap_queues_filter filter,
+- uint32_t filter_param, bool reset,
+- unsigned int sdma_engine);
+-int pm_query_status_vi(struct packet_manager *pm, uint32_t *buffer,
+- uint64_t fence_address, uint32_t fence_value);
+-uint32_t pm_release_mem_vi(uint64_t gpu_addr, uint32_t *buffer);
+-
+-uint32_t pm_get_map_process_packet_size_vi(void);
+-uint32_t pm_get_runlist_packet_size_vi(void);
+ uint32_t pm_get_set_resources_packet_size_vi(void);
+-uint32_t pm_get_map_queues_packet_size_vi(void);
+-uint32_t pm_get_unmap_queues_packet_size_vi(void);
+-uint32_t pm_get_query_status_packet_size_vi(void);
+-uint32_t pm_get_release_mem_packet_size_vi(void);
+-
+-
+-void kfd_pm_func_init_vi(struct packet_manager *pm, uint16_t fw_ver);
+-void kfd_pm_func_init_cik(struct packet_manager *pm, uint16_t fw_ver);
+
+-void kfd_pm_func_init_v9(struct packet_manager *pm, uint16_t fw_ver);
++void kfd_pm_func_init_vi(struct packet_manager *pm);
++void kfd_pm_func_init_v9(struct packet_manager *pm);
+
+
+ uint64_t kfd_get_number_elems(struct kfd_dev *kfd);
+--
+2.7.4
+