diff options
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1589-drm-amdkfd-CP-queue-priority-controls.patch')
-rw-r--r-- | meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1589-drm-amdkfd-CP-queue-priority-controls.patch | 245 |
1 files changed, 0 insertions, 245 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1589-drm-amdkfd-CP-queue-priority-controls.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1589-drm-amdkfd-CP-queue-priority-controls.patch deleted file mode 100644 index 6055b5a2..00000000 --- a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1589-drm-amdkfd-CP-queue-priority-controls.patch +++ /dev/null @@ -1,245 +0,0 @@ -From 4f27317eb6a7531d00cb929662822f9a7c03b405 Mon Sep 17 00:00:00 2001 -From: ozeng <oak.zeng@amd.com> -Date: Tue, 7 Feb 2017 15:40:14 -0600 -Subject: [PATCH 1589/4131] drm/amdkfd: CP queue priority controls - -Translate queue priority into pipe priority and SPI priority and write -to memory queue descriptors. The priority values are used to perform -queue and pipe arbitration. - -Change-Id: Icfef4c024d1d99a2b631f27dc7bf703ab366ad6c -Signed-off-by: Oak Zeng <Oak.Zeng@amd.com> ---- - drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c | 40 ++++++++++++++++++++++++ - drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h | 3 +- - drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c | 21 +++++++++---- - drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c | 16 ++++++++-- - drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 18 +++++++++++ - 5 files changed, 88 insertions(+), 10 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c -index 99c2535..5a5dd2a 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c -@@ -23,6 +23,46 @@ - - #include "kfd_priv.h" - -+/* Mapping queue priority to pipe priority, indexed by queue priority */ -+int pipe_priority_map[] = { -+ KFD_PIPE_PRIORITY_CS_LOW, -+ KFD_PIPE_PRIORITY_CS_LOW, -+ KFD_PIPE_PRIORITY_CS_LOW, -+ KFD_PIPE_PRIORITY_CS_LOW, -+ KFD_PIPE_PRIORITY_CS_LOW, -+ KFD_PIPE_PRIORITY_CS_LOW, -+ KFD_PIPE_PRIORITY_CS_LOW, -+ KFD_PIPE_PRIORITY_CS_MEDIUM, -+ KFD_PIPE_PRIORITY_CS_MEDIUM, -+ KFD_PIPE_PRIORITY_CS_MEDIUM, -+ KFD_PIPE_PRIORITY_CS_MEDIUM, -+ KFD_PIPE_PRIORITY_CS_HIGH, -+ KFD_PIPE_PRIORITY_CS_HIGH, -+ KFD_PIPE_PRIORITY_CS_HIGH, -+ KFD_PIPE_PRIORITY_CS_HIGH, -+ KFD_PIPE_PRIORITY_CS_HIGH -+}; -+ -+/* Mapping queue priority to SPI priority, indexed by queue priority */ -+int spi_priority_map[] = { -+ KFD_SPI_PRIORITY_EXTRA_LOW, -+ KFD_SPI_PRIORITY_EXTRA_LOW, -+ KFD_SPI_PRIORITY_EXTRA_LOW, -+ KFD_SPI_PRIORITY_EXTRA_LOW, -+ KFD_SPI_PRIORITY_LOW, -+ KFD_SPI_PRIORITY_LOW, -+ KFD_SPI_PRIORITY_LOW, -+ KFD_SPI_PRIORITY_LOW, -+ KFD_SPI_PRIORITY_MEDIUM, -+ KFD_SPI_PRIORITY_MEDIUM, -+ KFD_SPI_PRIORITY_MEDIUM, -+ KFD_SPI_PRIORITY_MEDIUM, -+ KFD_SPI_PRIORITY_HIGH, -+ KFD_SPI_PRIORITY_HIGH, -+ KFD_SPI_PRIORITY_HIGH, -+ KFD_SPI_PRIORITY_HIGH -+}; -+ - struct mqd_manager *mqd_manager_init(enum KFD_MQD_TYPE type, - struct kfd_dev *dev) - { -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h -index 8972bcf..6f33b79 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h -@@ -59,7 +59,8 @@ - * per KFD_MQD_TYPE for each device. - * - */ -- -+extern int pipe_priority_map[]; -+extern int spi_priority_map[]; - struct mqd_manager { - int (*init_mqd)(struct mqd_manager *mm, void **mqd, - struct kfd_mem_obj **mqd_mem_obj, uint64_t *gart_addr, -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c -index 11e85d3..b923fa6 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c -@@ -30,6 +30,7 @@ - #include "cik_regs.h" - #include "cik_structs.h" - #include "oss/oss_2_4_sh_mask.h" -+#include "asic_reg/gca/gfx_7_2_sh_mask.h" - - #define AQL_ENABLE 1 - -@@ -95,6 +96,16 @@ static void update_cu_mask(struct mqd_manager *mm, void *mqd, - m->compute_static_thread_mgmt_se3); - } - -+static void set_priority(struct cik_mqd *m, struct queue_properties *q) -+{ -+ m->cp_hqd_pipe_priority = pipe_priority_map[q->priority]; -+ m->cp_hqd_queue_priority = q->priority; -+ m->compute_pgm_rsrc1 = (m->compute_pgm_rsrc1 & -+ (~COMPUTE_PGM_RSRC1__PRIORITY_MASK)) | -+ (spi_priority_map[q->priority] << -+ COMPUTE_PGM_RSRC1__PRIORITY__SHIFT); -+} -+ - static int init_mqd(struct mqd_manager *mm, void **mqd, - struct kfd_mem_obj **mqd_mem_obj, uint64_t *gart_addr, - struct queue_properties *q) -@@ -103,8 +114,6 @@ static int init_mqd(struct mqd_manager *mm, void **mqd, - struct cik_mqd *m; - int retval; - -- BUG_ON(!mm || !q || !mqd); -- - pr_debug("kfd: In func %s\n", __func__); - - retval = kfd_gtt_sa_allocate(mm->dev, sizeof(struct cik_mqd), -@@ -149,8 +158,7 @@ static int init_mqd(struct mqd_manager *mm, void **mqd, - * 1 = CS_MEDIUM (typically between HP3D and GFX - * 2 = CS_HIGH (typically above HP3D) - */ -- m->cp_hqd_pipe_priority = 1; -- m->cp_hqd_queue_priority = 15; -+ set_priority(m, q); - - if (q->format == KFD_QUEUE_FORMAT_AQL) - m->cp_hqd_iq_rptr = AQL_ENABLE; -@@ -266,6 +274,7 @@ static int __update_mqd(struct mqd_manager *mm, void *mqd, - } - - update_cu_mask(mm, mqd, q); -+ set_priority(m, q); - - m->cp_hqd_active = 0; - q->is_active = false; -@@ -427,8 +436,7 @@ static int init_mqd_hiq(struct mqd_manager *mm, void **mqd, - * 1 = CS_MEDIUM (typically between HP3D and GFX - * 2 = CS_HIGH (typically above HP3D) - */ -- m->cp_hqd_pipe_priority = 1; -- m->cp_hqd_queue_priority = 15; -+ set_priority(m, q); - - *mqd = m; - if (gart_addr) -@@ -478,6 +486,7 @@ static int update_mqd_hiq(struct mqd_manager *mm, void *mqd, - q->is_active = true; - } - -+ set_priority(m, q); - return 0; - } - -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c -index 0050821..acff097 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c -@@ -31,6 +31,7 @@ - #include "asic_reg/gca/gfx_8_0_sh_mask.h" - #include "asic_reg/gca/gfx_8_0_enum.h" - #include "oss/oss_3_0_sh_mask.h" -+ - #define CP_MQD_CONTROL__PRIV_STATE__SHIFT 0x8 - - static inline struct vi_mqd *get_mqd(void *mqd) -@@ -95,6 +96,16 @@ static void update_cu_mask(struct mqd_manager *mm, void *mqd, - m->compute_static_thread_mgmt_se3); - } - -+static void set_priority(struct vi_mqd *m, struct queue_properties *q) -+{ -+ m->cp_hqd_pipe_priority = pipe_priority_map[q->priority]; -+ m->cp_hqd_queue_priority = q->priority; -+ m->compute_pgm_rsrc1 = (m->compute_pgm_rsrc1 & -+ (~COMPUTE_PGM_RSRC1__PRIORITY_MASK)) | -+ (spi_priority_map[q->priority] << -+ COMPUTE_PGM_RSRC1__PRIORITY__SHIFT); -+} -+ - static int init_mqd(struct mqd_manager *mm, void **mqd, - struct kfd_mem_obj **mqd_mem_obj, uint64_t *gart_addr, - struct queue_properties *q) -@@ -133,9 +144,7 @@ static int init_mqd(struct mqd_manager *mm, void **mqd, - 1 << CP_HQD_QUANTUM__QUANTUM_SCALE__SHIFT | - 10 << CP_HQD_QUANTUM__QUANTUM_DURATION__SHIFT; - -- m->cp_hqd_pipe_priority = 1; -- m->cp_hqd_queue_priority = 15; -- -+ set_priority(m, q); - m->cp_hqd_eop_rptr = 1 << CP_HQD_EOP_RPTR__INIT_FETCHER__SHIFT; - - if (q->format == KFD_QUEUE_FORMAT_AQL) -@@ -252,6 +261,7 @@ static int __update_mqd(struct mqd_manager *mm, void *mqd, - mtype << CP_HQD_CTX_SAVE_CONTROL__MTYPE__SHIFT; - - update_cu_mask(mm, mqd, q); -+ set_priority(m, q); - - m->cp_hqd_active = 0; - q->is_active = false; -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h -index 30bc546..b0a62dd 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h -@@ -352,6 +352,11 @@ enum kfd_queue_format { - KFD_QUEUE_FORMAT_AQL - }; - -+enum KFD_QUEUE_PRIORITY { -+ KFD_QUEUE_PRIORITY_MINIMUM = 0, -+ KFD_QUEUE_PRIORITY_MAXIMUM = 15 -+}; -+ - /** - * struct queue_properties - * -@@ -487,6 +492,19 @@ enum KFD_MQD_TYPE { - KFD_MQD_TYPE_MAX - }; - -+enum KFD_PIPE_PRIORITY { -+ KFD_PIPE_PRIORITY_CS_LOW = 0, -+ KFD_PIPE_PRIORITY_CS_MEDIUM, -+ KFD_PIPE_PRIORITY_CS_HIGH -+}; -+ -+enum KFD_SPI_PRIORITY { -+ KFD_SPI_PRIORITY_EXTRA_LOW = 0, -+ KFD_SPI_PRIORITY_LOW, -+ KFD_SPI_PRIORITY_MEDIUM, -+ KFD_SPI_PRIORITY_HIGH -+}; -+ - struct scheduling_resources { - unsigned int vmid_mask; - enum kfd_queue_type type; --- -2.7.4 - |