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