diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1121-drm-amdkfd-revert-kfd-part-to-a-previous-state.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1121-drm-amdkfd-revert-kfd-part-to-a-previous-state.patch | 5722 |
1 files changed, 0 insertions, 5722 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1121-drm-amdkfd-revert-kfd-part-to-a-previous-state.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1121-drm-amdkfd-revert-kfd-part-to-a-previous-state.patch deleted file mode 100644 index becf2699..00000000 --- a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1121-drm-amdkfd-revert-kfd-part-to-a-previous-state.patch +++ /dev/null @@ -1,5722 +0,0 @@ -From e00ab6ceb6cc2d43225b57f76f63994bd4d49054 Mon Sep 17 00:00:00 2001 -From: Chaudhary Amit Kumar <chaudharyamit.kumar@amd.com> -Date: Wed, 17 Oct 2018 19:04:35 +0530 -Subject: [PATCH 1121/4131] drm/amdkfd: revert kfd part to a previous state - -Revert following files to "2ba6b00 drm/amd/powerplay: add profile mode for vega10.": - - - drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd* - - drivers/gpu/drm/amd/amdkfd/* - - drivers/gpu/drm/amd/include/kgd_kfd_interface.h - - include/uapi/linux/kfd_ioctl.h - - drivers/gpu/drm/radeon/radeon_kfd* - -Due to upstream, porting kfd patches to 4.13 all-open has many conflicts. -It's hard to elegantly fix these conflicts. So we revert the kfd part to a -previous commit, where we began to first port dkms patches in 4.12 hybrid. -Then sequentially port all kfd patches. - -Signed-off-by: Le.Ma <Le.Ma@amd.com> -Acked-by: Junwei Zhang <Jerry.Zhang@amd.com> -Signed-off-by: Sanjay R Mehta <sanju.mehta@amd.com> -Signed-off-by: Chaudhary Amit Kumar <chaudharyamit.kumar@amd.com> ---- - drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 44 +-- - drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 18 +- - drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c | 189 ++---------- - drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c | 163 ++-------- - drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 183 ++++-------- - drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c | 102 ++++--- - drivers/gpu/drm/amd/amdkfd/kfd_dbgmgr.c | 21 +- - drivers/gpu/drm/amd/amdkfd/kfd_dbgmgr.h | 27 +- - drivers/gpu/drm/amd/amdkfd/kfd_device.c | 123 ++++---- - .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 316 ++++++++++++-------- - .../drm/amd/amdkfd/kfd_device_queue_manager_cik.c | 8 +- - .../drm/amd/amdkfd/kfd_device_queue_manager_vi.c | 8 +- - drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c | 40 ++- - drivers/gpu/drm/amd/amdkfd/kfd_events.c | 33 ++- - drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c | 2 +- - drivers/gpu/drm/amd/amdkfd/kfd_interrupt.c | 2 +- - drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c | 63 ++-- - drivers/gpu/drm/amd/amdkfd/kfd_module.c | 10 +- - drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h | 3 +- - drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c | 62 ++-- - drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c | 46 ++- - drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c | 289 ++++++++++++------ - drivers/gpu/drm/amd/amdkfd/kfd_pasid.c | 7 +- - drivers/gpu/drm/amd/amdkfd/kfd_pm4_headers.h | 330 ++++++++++++++++++--- - drivers/gpu/drm/amd/amdkfd/kfd_pm4_headers_vi.h | 140 +-------- - drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 32 +- - drivers/gpu/drm/amd/amdkfd/kfd_process.c | 25 +- - .../gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 71 +++-- - drivers/gpu/drm/amd/amdkfd/kfd_queue.c | 12 +- - drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 46 ++- - drivers/gpu/drm/amd/include/kgd_kfd_interface.h | 30 +- - drivers/gpu/drm/radeon/radeon_kfd.c | 15 +- - include/uapi/linux/kfd_ioctl.h | 36 +-- - 33 files changed, 1261 insertions(+), 1235 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c -index f7fa767..7ec1915 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c -@@ -27,15 +27,16 @@ - #include "amdgpu_gfx.h" - #include <linux/module.h> - -+const struct kfd2kgd_calls *kfd2kgd; - const struct kgd2kfd_calls *kgd2kfd; --bool (*kgd2kfd_init_p)(unsigned int, const struct kgd2kfd_calls**); -+bool (*kgd2kfd_init_p)(unsigned, const struct kgd2kfd_calls**); - - int amdgpu_amdkfd_init(void) - { - int ret; - - #if defined(CONFIG_HSA_AMD_MODULE) -- int (*kgd2kfd_init_p)(unsigned int, const struct kgd2kfd_calls**); -+ int (*kgd2kfd_init_p)(unsigned, const struct kgd2kfd_calls**); - - kgd2kfd_init_p = symbol_request(kgd2kfd_init); - -@@ -60,21 +61,8 @@ int amdgpu_amdkfd_init(void) - return ret; - } - --void amdgpu_amdkfd_fini(void) --{ -- if (kgd2kfd) { -- kgd2kfd->exit(); -- symbol_put(kgd2kfd_init); -- } --} -- --void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev) -+bool amdgpu_amdkfd_load_interface(struct amdgpu_device *adev) - { -- const struct kfd2kgd_calls *kfd2kgd; -- -- if (!kgd2kfd) -- return; -- - switch (adev->asic_type) { - #ifdef CONFIG_DRM_AMDGPU_CIK - case CHIP_KAVERI: -@@ -85,12 +73,25 @@ void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev) - kfd2kgd = amdgpu_amdkfd_gfx_8_0_get_functions(); - break; - default: -- dev_info(adev->dev, "kfd not supported on this ASIC\n"); -- return; -+ return false; - } - -- adev->kfd = kgd2kfd->probe((struct kgd_dev *)adev, -- adev->pdev, kfd2kgd); -+ return true; -+} -+ -+void amdgpu_amdkfd_fini(void) -+{ -+ if (kgd2kfd) { -+ kgd2kfd->exit(); -+ symbol_put(kgd2kfd_init); -+ } -+} -+ -+void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev) -+{ -+ if (kgd2kfd) -+ adev->kfd = kgd2kfd->probe((struct kgd_dev *)adev, -+ adev->pdev, kfd2kgd); - } - - void amdgpu_amdkfd_device_init(struct amdgpu_device *adev) -@@ -183,8 +184,7 @@ int alloc_gtt_mem(struct kgd_dev *kgd, size_t size, - return -ENOMEM; - - r = amdgpu_bo_create(adev, size, PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_GTT, -- AMDGPU_GEM_CREATE_CPU_GTT_USWC, NULL, NULL, 0, -- &(*mem)->bo); -+ AMDGPU_GEM_CREATE_CPU_GTT_USWC, NULL, NULL, &(*mem)->bo); - if (r) { - dev_err(adev->dev, - "failed to allocate BO for amdkfd (%d)\n", r); -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h -index 1ef486b..6d3a10b 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h -@@ -27,7 +27,6 @@ - - #include <linux/types.h> - #include <linux/mm.h> --#include <linux/mmu_context.h> - #include <kgd_kfd_interface.h> - - struct amdgpu_device; -@@ -41,6 +40,8 @@ struct kgd_mem { - int amdgpu_amdkfd_init(void); - void amdgpu_amdkfd_fini(void); - -+bool amdgpu_amdkfd_load_interface(struct amdgpu_device *adev); -+ - void amdgpu_amdkfd_suspend(struct amdgpu_device *adev); - int amdgpu_amdkfd_resume(struct amdgpu_device *adev); - void amdgpu_amdkfd_interrupt(struct amdgpu_device *adev, -@@ -62,19 +63,4 @@ uint64_t get_gpu_clock_counter(struct kgd_dev *kgd); - - uint32_t get_max_engine_clock_in_mhz(struct kgd_dev *kgd); - --#define read_user_wptr(mmptr, wptr, dst) \ -- ({ \ -- bool valid = false; \ -- if ((mmptr) && (wptr)) { \ -- if ((mmptr) == current->mm) { \ -- valid = !get_user((dst), (wptr)); \ -- } else if (current->mm == NULL) { \ -- use_mm(mmptr); \ -- valid = !get_user((dst), (wptr)); \ -- unuse_mm(mmptr); \ -- } \ -- } \ -- valid; \ -- }) -- - #endif /* AMDGPU_AMDKFD_H_INCLUDED */ -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c -index bdabaa3..5748504 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c -@@ -39,12 +39,6 @@ - #include "gmc/gmc_7_1_sh_mask.h" - #include "cik_structs.h" - --enum hqd_dequeue_request_type { -- NO_ACTION = 0, -- DRAIN_PIPE, -- RESET_WAVES --}; -- - enum { - MAX_TRAPID = 8, /* 3 bits in the bitfield. */ - MAX_WATCH_ADDRESSES = 4 -@@ -102,15 +96,12 @@ static int kgd_init_pipeline(struct kgd_dev *kgd, uint32_t pipe_id, - uint32_t hpd_size, uint64_t hpd_gpu_addr); - static int kgd_init_interrupts(struct kgd_dev *kgd, uint32_t pipe_id); - static int kgd_hqd_load(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id, -- uint32_t queue_id, uint32_t __user *wptr, -- uint32_t wptr_shift, uint32_t wptr_mask, -- struct mm_struct *mm); -+ uint32_t queue_id, uint32_t __user *wptr); - static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd); - static bool kgd_hqd_is_occupied(struct kgd_dev *kgd, uint64_t queue_address, - uint32_t pipe_id, uint32_t queue_id); - --static int kgd_hqd_destroy(struct kgd_dev *kgd, void *mqd, -- enum kfd_preempt_type reset_type, -+static int kgd_hqd_destroy(struct kgd_dev *kgd, uint32_t reset_type, - unsigned int utimeout, uint32_t pipe_id, - uint32_t queue_id); - static bool kgd_hqd_sdma_is_occupied(struct kgd_dev *kgd, void *mqd); -@@ -135,33 +126,6 @@ static uint16_t get_atc_vmid_pasid_mapping_pasid(struct kgd_dev *kgd, - static void write_vmid_invalidate_request(struct kgd_dev *kgd, uint8_t vmid); - - static uint16_t get_fw_version(struct kgd_dev *kgd, enum kgd_engine_type type); --static void set_scratch_backing_va(struct kgd_dev *kgd, -- uint64_t va, uint32_t vmid); -- --/* Because of REG_GET_FIELD() being used, we put this function in the -- * asic specific file. -- */ --static int get_tile_config(struct kgd_dev *kgd, -- struct tile_config *config) --{ -- struct amdgpu_device *adev = (struct amdgpu_device *)kgd; -- -- config->gb_addr_config = adev->gfx.config.gb_addr_config; -- config->num_banks = REG_GET_FIELD(adev->gfx.config.mc_arb_ramcfg, -- MC_ARB_RAMCFG, NOOFBANK); -- config->num_ranks = REG_GET_FIELD(adev->gfx.config.mc_arb_ramcfg, -- MC_ARB_RAMCFG, NOOFRANKS); -- -- config->tile_config_ptr = adev->gfx.config.tile_mode_array; -- config->num_tile_configs = -- ARRAY_SIZE(adev->gfx.config.tile_mode_array); -- config->macro_tile_config_ptr = -- adev->gfx.config.macrotile_mode_array; -- config->num_macro_tile_configs = -- ARRAY_SIZE(adev->gfx.config.macrotile_mode_array); -- -- return 0; --} - - static const struct kfd2kgd_calls kfd2kgd = { - .init_gtt_mem_allocation = alloc_gtt_mem, -@@ -186,9 +150,7 @@ static const struct kfd2kgd_calls kfd2kgd = { - .get_atc_vmid_pasid_mapping_pasid = get_atc_vmid_pasid_mapping_pasid, - .get_atc_vmid_pasid_mapping_valid = get_atc_vmid_pasid_mapping_valid, - .write_vmid_invalidate_request = write_vmid_invalidate_request, -- .get_fw_version = get_fw_version, -- .set_scratch_backing_va = set_scratch_backing_va, -- .get_tile_config = get_tile_config, -+ .get_fw_version = get_fw_version - }; - - struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void) -@@ -224,7 +186,7 @@ static void acquire_queue(struct kgd_dev *kgd, uint32_t pipe_id, - { - struct amdgpu_device *adev = get_amdgpu_device(kgd); - -- uint32_t mec = (pipe_id / adev->gfx.mec.num_pipe_per_mec) + 1; -+ uint32_t mec = (++pipe_id / adev->gfx.mec.num_pipe_per_mec) + 1; - uint32_t pipe = (pipe_id % adev->gfx.mec.num_pipe_per_mec); - - lock_srbm(kgd, mec, pipe, queue_id, 0); -@@ -328,38 +290,20 @@ static inline struct cik_sdma_rlc_registers *get_sdma_mqd(void *mqd) - } - - static int kgd_hqd_load(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id, -- uint32_t queue_id, uint32_t __user *wptr, -- uint32_t wptr_shift, uint32_t wptr_mask, -- struct mm_struct *mm) -+ uint32_t queue_id, uint32_t __user *wptr) - { - struct amdgpu_device *adev = get_amdgpu_device(kgd); -+ uint32_t wptr_shadow, is_wptr_shadow_valid; - struct cik_mqd *m; -- uint32_t *mqd_hqd; -- uint32_t reg, wptr_val, data; - - m = get_mqd(mqd); - -- acquire_queue(kgd, pipe_id, queue_id); -- -- /* HQD registers extend from CP_MQD_BASE_ADDR to CP_MQD_CONTROL. */ -- mqd_hqd = &m->cp_mqd_base_addr_lo; -- -- for (reg = mmCP_MQD_BASE_ADDR; reg <= mmCP_MQD_CONTROL; reg++) -- WREG32(reg, mqd_hqd[reg - mmCP_MQD_BASE_ADDR]); -- -- /* Copy userspace write pointer value to register. -- * Activate doorbell logic to monitor subsequent changes. -- */ -- data = REG_SET_FIELD(m->cp_hqd_pq_doorbell_control, -- CP_HQD_PQ_DOORBELL_CONTROL, DOORBELL_EN, 1); -- WREG32(mmCP_HQD_PQ_DOORBELL_CONTROL, data); -- -- if (read_user_wptr(mm, wptr, wptr_val)) -- WREG32(mmCP_HQD_PQ_WPTR, (wptr_val << wptr_shift) & wptr_mask); -- -- data = REG_SET_FIELD(m->cp_hqd_active, CP_HQD_ACTIVE, ACTIVE, 1); -- WREG32(mmCP_HQD_ACTIVE, data); -+ is_wptr_shadow_valid = !get_user(wptr_shadow, wptr); -+ if (is_wptr_shadow_valid) -+ m->cp_hqd_pq_wptr = wptr_shadow; - -+ acquire_queue(kgd, pipe_id, queue_id); -+ gfx_v7_0_mqd_commit(adev, m); - release_queue(kgd); - - return 0; -@@ -459,99 +403,30 @@ static bool kgd_hqd_sdma_is_occupied(struct kgd_dev *kgd, void *mqd) - return false; - } - --static int kgd_hqd_destroy(struct kgd_dev *kgd, void *mqd, -- enum kfd_preempt_type reset_type, -+static int kgd_hqd_destroy(struct kgd_dev *kgd, uint32_t reset_type, - unsigned int utimeout, uint32_t pipe_id, - uint32_t queue_id) - { - struct amdgpu_device *adev = get_amdgpu_device(kgd); - uint32_t temp; -- enum hqd_dequeue_request_type type; -- unsigned long flags, end_jiffies; -- int retry; -+ int timeout = utimeout; - - acquire_queue(kgd, pipe_id, queue_id); - WREG32(mmCP_HQD_PQ_DOORBELL_CONTROL, 0); - -- switch (reset_type) { -- case KFD_PREEMPT_TYPE_WAVEFRONT_DRAIN: -- type = DRAIN_PIPE; -- break; -- case KFD_PREEMPT_TYPE_WAVEFRONT_RESET: -- type = RESET_WAVES; -- break; -- default: -- type = DRAIN_PIPE; -- break; -- } -+ WREG32(mmCP_HQD_DEQUEUE_REQUEST, reset_type); - -- /* Workaround: If IQ timer is active and the wait time is close to or -- * equal to 0, dequeueing is not safe. Wait until either the wait time -- * is larger or timer is cleared. Also, ensure that IQ_REQ_PEND is -- * cleared before continuing. Also, ensure wait times are set to at -- * least 0x3. -- */ -- local_irq_save(flags); -- preempt_disable(); -- retry = 5000; /* wait for 500 usecs at maximum */ -- while (true) { -- temp = RREG32(mmCP_HQD_IQ_TIMER); -- if (REG_GET_FIELD(temp, CP_HQD_IQ_TIMER, PROCESSING_IQ)) { -- pr_debug("HW is processing IQ\n"); -- goto loop; -- } -- if (REG_GET_FIELD(temp, CP_HQD_IQ_TIMER, ACTIVE)) { -- if (REG_GET_FIELD(temp, CP_HQD_IQ_TIMER, RETRY_TYPE) -- == 3) /* SEM-rearm is safe */ -- break; -- /* Wait time 3 is safe for CP, but our MMIO read/write -- * time is close to 1 microsecond, so check for 10 to -- * leave more buffer room -- */ -- if (REG_GET_FIELD(temp, CP_HQD_IQ_TIMER, WAIT_TIME) -- >= 10) -- break; -- pr_debug("IQ timer is active\n"); -- } else -- break; --loop: -- if (!retry) { -- pr_err("CP HQD IQ timer status time out\n"); -- break; -- } -- ndelay(100); -- --retry; -- } -- retry = 1000; -- while (true) { -- temp = RREG32(mmCP_HQD_DEQUEUE_REQUEST); -- if (!(temp & CP_HQD_DEQUEUE_REQUEST__IQ_REQ_PEND_MASK)) -- break; -- pr_debug("Dequeue request is pending\n"); -- -- if (!retry) { -- pr_err("CP HQD dequeue request time out\n"); -- break; -- } -- ndelay(100); -- --retry; -- } -- local_irq_restore(flags); -- preempt_enable(); -- -- WREG32(mmCP_HQD_DEQUEUE_REQUEST, type); -- -- end_jiffies = (utimeout * HZ / 1000) + jiffies; - while (true) { - temp = RREG32(mmCP_HQD_ACTIVE); -- if (!(temp & CP_HQD_ACTIVE__ACTIVE_MASK)) -+ if (temp & CP_HQD_ACTIVE__ACTIVE_MASK) - break; -- if (time_after(jiffies, end_jiffies)) { -- pr_err("cp queue preemption time out\n"); -+ if (timeout <= 0) { -+ pr_err("kfd: cp queue preemption time out.\n"); - release_queue(kgd); - return -ETIME; - } -- usleep_range(500, 1000); -+ msleep(20); -+ timeout -= 20; - } - - release_queue(kgd); -@@ -702,16 +577,6 @@ static void write_vmid_invalidate_request(struct kgd_dev *kgd, uint8_t vmid) - WREG32(mmVM_INVALIDATE_REQUEST, 1 << vmid); - } - --static void set_scratch_backing_va(struct kgd_dev *kgd, -- uint64_t va, uint32_t vmid) --{ -- struct amdgpu_device *adev = (struct amdgpu_device *) kgd; -- -- lock_srbm(kgd, 0, 0, 0, vmid); -- WREG32(mmSH_HIDDEN_PRIVATE_BASE_VMID, va); -- unlock_srbm(kgd); --} -- - static uint16_t get_fw_version(struct kgd_dev *kgd, enum kgd_engine_type type) - { - struct amdgpu_device *adev = (struct amdgpu_device *) kgd; -@@ -722,42 +587,42 @@ static uint16_t get_fw_version(struct kgd_dev *kgd, enum kgd_engine_type type) - switch (type) { - case KGD_ENGINE_PFP: - hdr = (const union amdgpu_firmware_header *) -- adev->gfx.pfp_fw->data; -+ adev->gfx.pfp_fw->data; - break; - - case KGD_ENGINE_ME: - hdr = (const union amdgpu_firmware_header *) -- adev->gfx.me_fw->data; -+ adev->gfx.me_fw->data; - break; - - case KGD_ENGINE_CE: - hdr = (const union amdgpu_firmware_header *) -- adev->gfx.ce_fw->data; -+ adev->gfx.ce_fw->data; - break; - - case KGD_ENGINE_MEC1: - hdr = (const union amdgpu_firmware_header *) -- adev->gfx.mec_fw->data; -+ adev->gfx.mec_fw->data; - break; - - case KGD_ENGINE_MEC2: - hdr = (const union amdgpu_firmware_header *) -- adev->gfx.mec2_fw->data; -+ adev->gfx.mec2_fw->data; - break; - - case KGD_ENGINE_RLC: - hdr = (const union amdgpu_firmware_header *) -- adev->gfx.rlc_fw->data; -+ adev->gfx.rlc_fw->data; - break; - - case KGD_ENGINE_SDMA1: - hdr = (const union amdgpu_firmware_header *) -- adev->sdma.instance[0].fw->data; -+ adev->sdma.instance[0].fw->data; - break; - - case KGD_ENGINE_SDMA2: - hdr = (const union amdgpu_firmware_header *) -- adev->sdma.instance[1].fw->data; -+ adev->sdma.instance[1].fw->data; - break; - - default: -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c -index d1a32be..c5044d5 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c -@@ -39,12 +39,6 @@ - #include "vi_structs.h" - #include "vid.h" - --enum hqd_dequeue_request_type { -- NO_ACTION = 0, -- DRAIN_PIPE, -- RESET_WAVES --}; -- - struct cik_sdma_rlc_registers; - - /* -@@ -61,15 +55,12 @@ static int kgd_init_pipeline(struct kgd_dev *kgd, uint32_t pipe_id, - uint32_t hpd_size, uint64_t hpd_gpu_addr); - static int kgd_init_interrupts(struct kgd_dev *kgd, uint32_t pipe_id); - static int kgd_hqd_load(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id, -- uint32_t queue_id, uint32_t __user *wptr, -- uint32_t wptr_shift, uint32_t wptr_mask, -- struct mm_struct *mm); -+ uint32_t queue_id, uint32_t __user *wptr); - static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd); - static bool kgd_hqd_is_occupied(struct kgd_dev *kgd, uint64_t queue_address, - uint32_t pipe_id, uint32_t queue_id); - static bool kgd_hqd_sdma_is_occupied(struct kgd_dev *kgd, void *mqd); --static int kgd_hqd_destroy(struct kgd_dev *kgd, void *mqd, -- enum kfd_preempt_type reset_type, -+static int kgd_hqd_destroy(struct kgd_dev *kgd, uint32_t reset_type, - unsigned int utimeout, uint32_t pipe_id, - uint32_t queue_id); - static int kgd_hqd_sdma_destroy(struct kgd_dev *kgd, void *mqd, -@@ -94,33 +85,6 @@ static uint16_t get_atc_vmid_pasid_mapping_pasid(struct kgd_dev *kgd, - uint8_t vmid); - static void write_vmid_invalidate_request(struct kgd_dev *kgd, uint8_t vmid); - static uint16_t get_fw_version(struct kgd_dev *kgd, enum kgd_engine_type type); --static void set_scratch_backing_va(struct kgd_dev *kgd, -- uint64_t va, uint32_t vmid); -- --/* Because of REG_GET_FIELD() being used, we put this function in the -- * asic specific file. -- */ --static int get_tile_config(struct kgd_dev *kgd, -- struct tile_config *config) --{ -- struct amdgpu_device *adev = (struct amdgpu_device *)kgd; -- -- config->gb_addr_config = adev->gfx.config.gb_addr_config; -- config->num_banks = REG_GET_FIELD(adev->gfx.config.mc_arb_ramcfg, -- MC_ARB_RAMCFG, NOOFBANK); -- config->num_ranks = REG_GET_FIELD(adev->gfx.config.mc_arb_ramcfg, -- MC_ARB_RAMCFG, NOOFRANKS); -- -- config->tile_config_ptr = adev->gfx.config.tile_mode_array; -- config->num_tile_configs = -- ARRAY_SIZE(adev->gfx.config.tile_mode_array); -- config->macro_tile_config_ptr = -- adev->gfx.config.macrotile_mode_array; -- config->num_macro_tile_configs = -- ARRAY_SIZE(adev->gfx.config.macrotile_mode_array); -- -- return 0; --} - - static const struct kfd2kgd_calls kfd2kgd = { - .init_gtt_mem_allocation = alloc_gtt_mem, -@@ -147,9 +111,7 @@ static const struct kfd2kgd_calls kfd2kgd = { - .get_atc_vmid_pasid_mapping_valid = - get_atc_vmid_pasid_mapping_valid, - .write_vmid_invalidate_request = write_vmid_invalidate_request, -- .get_fw_version = get_fw_version, -- .set_scratch_backing_va = set_scratch_backing_va, -- .get_tile_config = get_tile_config, -+ .get_fw_version = get_fw_version - }; - - struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void) -@@ -185,7 +147,7 @@ static void acquire_queue(struct kgd_dev *kgd, uint32_t pipe_id, - { - struct amdgpu_device *adev = get_amdgpu_device(kgd); - -- uint32_t mec = (pipe_id / adev->gfx.mec.num_pipe_per_mec) + 1; -+ uint32_t mec = (++pipe_id / adev->gfx.mec.num_pipe_per_mec) + 1; - uint32_t pipe = (pipe_id % adev->gfx.mec.num_pipe_per_mec); - - lock_srbm(kgd, mec, pipe, queue_id, 0); -@@ -254,7 +216,7 @@ static int kgd_init_interrupts(struct kgd_dev *kgd, uint32_t pipe_id) - uint32_t mec; - uint32_t pipe; - -- mec = (pipe_id / adev->gfx.mec.num_pipe_per_mec) + 1; -+ mec = (++pipe_id / adev->gfx.mec.num_pipe_per_mec) + 1; - pipe = (pipe_id % adev->gfx.mec.num_pipe_per_mec); - - lock_srbm(kgd, mec, pipe, 0, 0); -@@ -398,102 +360,29 @@ static bool kgd_hqd_sdma_is_occupied(struct kgd_dev *kgd, void *mqd) - return false; - } - --static int kgd_hqd_destroy(struct kgd_dev *kgd, void *mqd, -- enum kfd_preempt_type reset_type, -+static int kgd_hqd_destroy(struct kgd_dev *kgd, uint32_t reset_type, - unsigned int utimeout, uint32_t pipe_id, - uint32_t queue_id) - { - struct amdgpu_device *adev = get_amdgpu_device(kgd); - uint32_t temp; -- enum hqd_dequeue_request_type type; -- unsigned long flags, end_jiffies; -- int retry; -- struct vi_mqd *m = get_mqd(mqd); -+ int timeout = utimeout; - - acquire_queue(kgd, pipe_id, queue_id); - -- if (m->cp_hqd_vmid == 0) -- WREG32_FIELD(RLC_CP_SCHEDULERS, scheduler1, 0); -+ WREG32(mmCP_HQD_DEQUEUE_REQUEST, reset_type); - -- switch (reset_type) { -- case KFD_PREEMPT_TYPE_WAVEFRONT_DRAIN: -- type = DRAIN_PIPE; -- break; -- case KFD_PREEMPT_TYPE_WAVEFRONT_RESET: -- type = RESET_WAVES; -- break; -- default: -- type = DRAIN_PIPE; -- break; -- } -- -- /* Workaround: If IQ timer is active and the wait time is close to or -- * equal to 0, dequeueing is not safe. Wait until either the wait time -- * is larger or timer is cleared. Also, ensure that IQ_REQ_PEND is -- * cleared before continuing. Also, ensure wait times are set to at -- * least 0x3. -- */ -- local_irq_save(flags); -- preempt_disable(); -- retry = 5000; /* wait for 500 usecs at maximum */ -- while (true) { -- temp = RREG32(mmCP_HQD_IQ_TIMER); -- if (REG_GET_FIELD(temp, CP_HQD_IQ_TIMER, PROCESSING_IQ)) { -- pr_debug("HW is processing IQ\n"); -- goto loop; -- } -- if (REG_GET_FIELD(temp, CP_HQD_IQ_TIMER, ACTIVE)) { -- if (REG_GET_FIELD(temp, CP_HQD_IQ_TIMER, RETRY_TYPE) -- == 3) /* SEM-rearm is safe */ -- break; -- /* Wait time 3 is safe for CP, but our MMIO read/write -- * time is close to 1 microsecond, so check for 10 to -- * leave more buffer room -- */ -- if (REG_GET_FIELD(temp, CP_HQD_IQ_TIMER, WAIT_TIME) -- >= 10) -- break; -- pr_debug("IQ timer is active\n"); -- } else -- break; --loop: -- if (!retry) { -- pr_err("CP HQD IQ timer status time out\n"); -- break; -- } -- ndelay(100); -- --retry; -- } -- retry = 1000; -- while (true) { -- temp = RREG32(mmCP_HQD_DEQUEUE_REQUEST); -- if (!(temp & CP_HQD_DEQUEUE_REQUEST__IQ_REQ_PEND_MASK)) -- break; -- pr_debug("Dequeue request is pending\n"); -- -- if (!retry) { -- pr_err("CP HQD dequeue request time out\n"); -- break; -- } -- ndelay(100); -- --retry; -- } -- local_irq_restore(flags); -- preempt_enable(); -- -- WREG32(mmCP_HQD_DEQUEUE_REQUEST, type); -- -- end_jiffies = (utimeout * HZ / 1000) + jiffies; - while (true) { - temp = RREG32(mmCP_HQD_ACTIVE); -- if (!(temp & CP_HQD_ACTIVE__ACTIVE_MASK)) -+ if (temp & CP_HQD_ACTIVE__ACTIVE_MASK) - break; -- if (time_after(jiffies, end_jiffies)) { -- pr_err("cp queue preemption time out.\n"); -+ if (timeout <= 0) { -+ pr_err("kfd: cp queue preemption time out.\n"); - release_queue(kgd); - return -ETIME; - } -- usleep_range(500, 1000); -+ msleep(20); -+ timeout -= 20; - } - - release_queue(kgd); -@@ -607,16 +496,6 @@ static uint32_t kgd_address_watch_get_offset(struct kgd_dev *kgd, - return 0; - } - --static void set_scratch_backing_va(struct kgd_dev *kgd, -- uint64_t va, uint32_t vmid) --{ -- struct amdgpu_device *adev = (struct amdgpu_device *) kgd; -- -- lock_srbm(kgd, 0, 0, 0, vmid); -- WREG32(mmSH_HIDDEN_PRIVATE_BASE_VMID, va); -- unlock_srbm(kgd); --} -- - static uint16_t get_fw_version(struct kgd_dev *kgd, enum kgd_engine_type type) - { - struct amdgpu_device *adev = (struct amdgpu_device *) kgd; -@@ -627,42 +506,42 @@ static uint16_t get_fw_version(struct kgd_dev *kgd, enum kgd_engine_type type) - switch (type) { - case KGD_ENGINE_PFP: - hdr = (const union amdgpu_firmware_header *) -- adev->gfx.pfp_fw->data; -+ adev->gfx.pfp_fw->data; - break; - - case KGD_ENGINE_ME: - hdr = (const union amdgpu_firmware_header *) -- adev->gfx.me_fw->data; -+ adev->gfx.me_fw->data; - break; - - case KGD_ENGINE_CE: - hdr = (const union amdgpu_firmware_header *) -- adev->gfx.ce_fw->data; -+ adev->gfx.ce_fw->data; - break; - - case KGD_ENGINE_MEC1: - hdr = (const union amdgpu_firmware_header *) -- adev->gfx.mec_fw->data; -+ adev->gfx.mec_fw->data; - break; - - case KGD_ENGINE_MEC2: - hdr = (const union amdgpu_firmware_header *) -- adev->gfx.mec2_fw->data; -+ adev->gfx.mec2_fw->data; - break; - - case KGD_ENGINE_RLC: - hdr = (const union amdgpu_firmware_header *) -- adev->gfx.rlc_fw->data; -+ adev->gfx.rlc_fw->data; - break; - - case KGD_ENGINE_SDMA1: - hdr = (const union amdgpu_firmware_header *) -- adev->sdma.instance[0].fw->data; -+ adev->sdma.instance[0].fw->data; - break; - - case KGD_ENGINE_SDMA2: - hdr = (const union amdgpu_firmware_header *) -- adev->sdma.instance[1].fw->data; -+ adev->sdma.instance[1].fw->data; - break; - - default: -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c -index abdafb9..3016098 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c -@@ -142,12 +142,12 @@ static int set_queue_properties_from_user(struct queue_properties *q_properties, - struct kfd_ioctl_create_queue_args *args) - { - if (args->queue_percentage > KFD_MAX_QUEUE_PERCENTAGE) { -- pr_err("Queue percentage must be between 0 to KFD_MAX_QUEUE_PERCENTAGE\n"); -+ pr_err("kfd: queue percentage must be between 0 to KFD_MAX_QUEUE_PERCENTAGE\n"); - return -EINVAL; - } - - if (args->queue_priority > KFD_MAX_QUEUE_PRIORITY) { -- pr_err("Queue priority must be between 0 to KFD_MAX_QUEUE_PRIORITY\n"); -+ pr_err("kfd: queue priority must be between 0 to KFD_MAX_QUEUE_PRIORITY\n"); - return -EINVAL; - } - -@@ -155,26 +155,26 @@ static int set_queue_properties_from_user(struct queue_properties *q_properties, - (!access_ok(VERIFY_WRITE, - (const void __user *) args->ring_base_address, - sizeof(uint64_t)))) { -- pr_err("Can't access ring base address\n"); -+ pr_err("kfd: can't access ring base address\n"); - return -EFAULT; - } - - if (!is_power_of_2(args->ring_size) && (args->ring_size != 0)) { -- pr_err("Ring size must be a power of 2 or 0\n"); -+ pr_err("kfd: ring size must be a power of 2 or 0\n"); - return -EINVAL; - } - - if (!access_ok(VERIFY_WRITE, - (const void __user *) args->read_pointer_address, - sizeof(uint32_t))) { -- pr_err("Can't access read pointer\n"); -+ pr_err("kfd: can't access read pointer\n"); - return -EFAULT; - } - - if (!access_ok(VERIFY_WRITE, - (const void __user *) args->write_pointer_address, - sizeof(uint32_t))) { -- pr_err("Can't access write pointer\n"); -+ pr_err("kfd: can't access write pointer\n"); - return -EFAULT; - } - -@@ -182,7 +182,7 @@ static int set_queue_properties_from_user(struct queue_properties *q_properties, - !access_ok(VERIFY_WRITE, - (const void __user *) args->eop_buffer_address, - sizeof(uint32_t))) { -- pr_debug("Can't access eop buffer"); -+ pr_debug("kfd: can't access eop buffer"); - return -EFAULT; - } - -@@ -190,7 +190,7 @@ static int set_queue_properties_from_user(struct queue_properties *q_properties, - !access_ok(VERIFY_WRITE, - (const void __user *) args->ctx_save_restore_address, - sizeof(uint32_t))) { -- pr_debug("Can't access ctx save restore buffer"); -+ pr_debug("kfd: can't access ctx save restore buffer"); - return -EFAULT; - } - -@@ -219,27 +219,27 @@ static int set_queue_properties_from_user(struct queue_properties *q_properties, - else - q_properties->format = KFD_QUEUE_FORMAT_PM4; - -- pr_debug("Queue Percentage: %d, %d\n", -+ pr_debug("Queue Percentage (%d, %d)\n", - q_properties->queue_percent, args->queue_percentage); - -- pr_debug("Queue Priority: %d, %d\n", -+ pr_debug("Queue Priority (%d, %d)\n", - q_properties->priority, args->queue_priority); - -- pr_debug("Queue Address: 0x%llX, 0x%llX\n", -+ pr_debug("Queue Address (0x%llX, 0x%llX)\n", - q_properties->queue_address, args->ring_base_address); - -- pr_debug("Queue Size: 0x%llX, %u\n", -+ pr_debug("Queue Size (0x%llX, %u)\n", - q_properties->queue_size, args->ring_size); - -- pr_debug("Queue r/w Pointers: %p, %p\n", -- q_properties->read_ptr, -- q_properties->write_ptr); -+ pr_debug("Queue r/w Pointers (0x%llX, 0x%llX)\n", -+ (uint64_t) q_properties->read_ptr, -+ (uint64_t) q_properties->write_ptr); - -- pr_debug("Queue Format: %d\n", q_properties->format); -+ pr_debug("Queue Format (%d)\n", q_properties->format); - -- pr_debug("Queue EOP: 0x%llX\n", q_properties->eop_ring_buffer_address); -+ pr_debug("Queue EOP (0x%llX)\n", q_properties->eop_ring_buffer_address); - -- pr_debug("Queue CTX save area: 0x%llX\n", -+ pr_debug("Queue CTX save arex (0x%llX)\n", - q_properties->ctx_save_restore_area_address); - - return 0; -@@ -257,16 +257,16 @@ static int kfd_ioctl_create_queue(struct file *filep, struct kfd_process *p, - - memset(&q_properties, 0, sizeof(struct queue_properties)); - -- pr_debug("Creating queue ioctl\n"); -+ pr_debug("kfd: creating queue ioctl\n"); - - err = set_queue_properties_from_user(&q_properties, args); - if (err) - return err; - -- pr_debug("Looking for gpu id 0x%x\n", args->gpu_id); -+ pr_debug("kfd: looking for gpu id 0x%x\n", args->gpu_id); - dev = kfd_device_by_id(args->gpu_id); -- if (!dev) { -- pr_debug("Could not find gpu id 0x%x\n", args->gpu_id); -+ if (dev == NULL) { -+ pr_debug("kfd: gpu id 0x%x was not found\n", args->gpu_id); - return -EINVAL; - } - -@@ -278,7 +278,7 @@ static int kfd_ioctl_create_queue(struct file *filep, struct kfd_process *p, - goto err_bind_process; - } - -- pr_debug("Creating queue for PASID %d on gpu 0x%x\n", -+ pr_debug("kfd: creating queue for PASID %d on GPU 0x%x\n", - p->pasid, - dev->id); - -@@ -296,15 +296,15 @@ static int kfd_ioctl_create_queue(struct file *filep, struct kfd_process *p, - - mutex_unlock(&p->mutex); - -- pr_debug("Queue id %d was created successfully\n", args->queue_id); -+ pr_debug("kfd: queue id %d was created successfully\n", args->queue_id); - -- pr_debug("Ring buffer address == 0x%016llX\n", -+ pr_debug("ring buffer address == 0x%016llX\n", - args->ring_base_address); - -- pr_debug("Read ptr address == 0x%016llX\n", -+ pr_debug("read ptr address == 0x%016llX\n", - args->read_pointer_address); - -- pr_debug("Write ptr address == 0x%016llX\n", -+ pr_debug("write ptr address == 0x%016llX\n", - args->write_pointer_address); - - return 0; -@@ -321,7 +321,7 @@ static int kfd_ioctl_destroy_queue(struct file *filp, struct kfd_process *p, - int retval; - struct kfd_ioctl_destroy_queue_args *args = data; - -- pr_debug("Destroying queue id %d for pasid %d\n", -+ pr_debug("kfd: destroying queue id %d for PASID %d\n", - args->queue_id, - p->pasid); - -@@ -341,12 +341,12 @@ static int kfd_ioctl_update_queue(struct file *filp, struct kfd_process *p, - struct queue_properties properties; - - if (args->queue_percentage > KFD_MAX_QUEUE_PERCENTAGE) { -- pr_err("Queue percentage must be between 0 to KFD_MAX_QUEUE_PERCENTAGE\n"); -+ pr_err("kfd: queue percentage must be between 0 to KFD_MAX_QUEUE_PERCENTAGE\n"); - return -EINVAL; - } - - if (args->queue_priority > KFD_MAX_QUEUE_PRIORITY) { -- pr_err("Queue priority must be between 0 to KFD_MAX_QUEUE_PRIORITY\n"); -+ pr_err("kfd: queue priority must be between 0 to KFD_MAX_QUEUE_PRIORITY\n"); - return -EINVAL; - } - -@@ -354,12 +354,12 @@ static int kfd_ioctl_update_queue(struct file *filp, struct kfd_process *p, - (!access_ok(VERIFY_WRITE, - (const void __user *) args->ring_base_address, - sizeof(uint64_t)))) { -- pr_err("Can't access ring base address\n"); -+ pr_err("kfd: can't access ring base address\n"); - return -EFAULT; - } - - if (!is_power_of_2(args->ring_size) && (args->ring_size != 0)) { -- pr_err("Ring size must be a power of 2 or 0\n"); -+ pr_err("kfd: ring size must be a power of 2 or 0\n"); - return -EINVAL; - } - -@@ -368,7 +368,7 @@ static int kfd_ioctl_update_queue(struct file *filp, struct kfd_process *p, - properties.queue_percent = args->queue_percentage; - properties.priority = args->queue_priority; - -- pr_debug("Updating queue id %d for pasid %d\n", -+ pr_debug("kfd: updating queue id %d for PASID %d\n", - args->queue_id, p->pasid); - - mutex_lock(&p->mutex); -@@ -400,7 +400,7 @@ static int kfd_ioctl_set_memory_policy(struct file *filep, - } - - dev = kfd_device_by_id(args->gpu_id); -- if (!dev) -+ if (dev == NULL) - return -EINVAL; - - mutex_lock(&p->mutex); -@@ -443,7 +443,7 @@ static int kfd_ioctl_dbg_register(struct file *filep, - long status = 0; - - dev = kfd_device_by_id(args->gpu_id); -- if (!dev) -+ if (dev == NULL) - return -EINVAL; - - if (dev->device_info->asic_family == CHIP_CARRIZO) { -@@ -460,11 +460,12 @@ static int kfd_ioctl_dbg_register(struct file *filep, - */ - pdd = kfd_bind_process_to_device(dev, p); - if (IS_ERR(pdd)) { -- status = PTR_ERR(pdd); -- goto out; -+ mutex_unlock(&p->mutex); -+ mutex_unlock(kfd_get_dbgmgr_mutex()); -+ return PTR_ERR(pdd); - } - -- if (!dev->dbgmgr) { -+ if (dev->dbgmgr == NULL) { - /* In case of a legal call, we have no dbgmgr yet */ - create_ok = kfd_dbgmgr_create(&dbgmgr_ptr, dev); - if (create_ok) { -@@ -479,7 +480,6 @@ static int kfd_ioctl_dbg_register(struct file *filep, - status = -EINVAL; - } - --out: - mutex_unlock(&p->mutex); - mutex_unlock(kfd_get_dbgmgr_mutex()); - -@@ -494,7 +494,7 @@ static int kfd_ioctl_dbg_unregister(struct file *filep, - long status; - - dev = kfd_device_by_id(args->gpu_id); -- if (!dev) -+ if (dev == NULL) - return -EINVAL; - - if (dev->device_info->asic_family == CHIP_CARRIZO) { -@@ -505,7 +505,7 @@ static int kfd_ioctl_dbg_unregister(struct file *filep, - mutex_lock(kfd_get_dbgmgr_mutex()); - - status = kfd_dbgmgr_unregister(dev->dbgmgr, p); -- if (!status) { -+ if (status == 0) { - kfd_dbgmgr_destroy(dev->dbgmgr); - dev->dbgmgr = NULL; - } -@@ -539,7 +539,7 @@ static int kfd_ioctl_dbg_address_watch(struct file *filep, - memset((void *) &aw_info, 0, sizeof(struct dbg_address_watch_info)); - - dev = kfd_device_by_id(args->gpu_id); -- if (!dev) -+ if (dev == NULL) - return -EINVAL; - - if (dev->device_info->asic_family == CHIP_CARRIZO) { -@@ -580,8 +580,8 @@ static int kfd_ioctl_dbg_address_watch(struct file *filep, - args_idx += sizeof(aw_info.watch_address) * aw_info.num_watch_points; - - if (args_idx >= args->buf_size_in_bytes - sizeof(*args)) { -- status = -EINVAL; -- goto out; -+ kfree(args_buff); -+ return -EINVAL; - } - - watch_mask_value = (uint64_t) args_buff[args_idx]; -@@ -604,8 +604,8 @@ static int kfd_ioctl_dbg_address_watch(struct file *filep, - } - - if (args_idx >= args->buf_size_in_bytes - sizeof(args)) { -- status = -EINVAL; -- goto out; -+ kfree(args_buff); -+ return -EINVAL; - } - - /* Currently HSA Event is not supported for DBG */ -@@ -617,7 +617,6 @@ static int kfd_ioctl_dbg_address_watch(struct file *filep, - - mutex_unlock(kfd_get_dbgmgr_mutex()); - --out: - kfree(args_buff); - - return status; -@@ -647,7 +646,7 @@ static int kfd_ioctl_dbg_wave_control(struct file *filep, - sizeof(wac_info.trapId); - - dev = kfd_device_by_id(args->gpu_id); -- if (!dev) -+ if (dev == NULL) - return -EINVAL; - - if (dev->device_info->asic_family == CHIP_CARRIZO) { -@@ -784,9 +783,8 @@ static int kfd_ioctl_get_process_apertures(struct file *filp, - "scratch_limit %llX\n", pdd->scratch_limit); - - args->num_of_nodes++; -- -- pdd = kfd_get_next_process_device_data(p, pdd); -- } while (pdd && (args->num_of_nodes < NUM_OF_SUPPORTED_GPUS)); -+ } while ((pdd = kfd_get_next_process_device_data(p, pdd)) != NULL && -+ (args->num_of_nodes < NUM_OF_SUPPORTED_GPUS)); - } - - mutex_unlock(&p->mutex); -@@ -849,84 +847,9 @@ static int kfd_ioctl_wait_events(struct file *filp, struct kfd_process *p, - - return err; - } --static int kfd_ioctl_set_scratch_backing_va(struct file *filep, -- struct kfd_process *p, void *data) --{ -- struct kfd_ioctl_set_scratch_backing_va_args *args = data; -- struct kfd_process_device *pdd; -- struct kfd_dev *dev; -- long err; -- -- dev = kfd_device_by_id(args->gpu_id); -- if (!dev) -- return -EINVAL; -- -- mutex_lock(&p->mutex); -- -- pdd = kfd_bind_process_to_device(dev, p); -- if (IS_ERR(pdd)) { -- err = PTR_ERR(pdd); -- goto bind_process_to_device_fail; -- } -- -- pdd->qpd.sh_hidden_private_base = args->va_addr; -- -- mutex_unlock(&p->mutex); -- -- if (sched_policy == KFD_SCHED_POLICY_NO_HWS && pdd->qpd.vmid != 0) -- dev->kfd2kgd->set_scratch_backing_va( -- dev->kgd, args->va_addr, pdd->qpd.vmid); -- -- return 0; -- --bind_process_to_device_fail: -- mutex_unlock(&p->mutex); -- return err; --} -- --static int kfd_ioctl_get_tile_config(struct file *filep, -- struct kfd_process *p, void *data) --{ -- struct kfd_ioctl_get_tile_config_args *args = data; -- struct kfd_dev *dev; -- struct tile_config config; -- int err = 0; -- -- dev = kfd_device_by_id(args->gpu_id); -- -- dev->kfd2kgd->get_tile_config(dev->kgd, &config); -- -- args->gb_addr_config = config.gb_addr_config; -- args->num_banks = config.num_banks; -- args->num_ranks = config.num_ranks; -- -- if (args->num_tile_configs > config.num_tile_configs) -- args->num_tile_configs = config.num_tile_configs; -- err = copy_to_user((void __user *)args->tile_config_ptr, -- config.tile_config_ptr, -- args->num_tile_configs * sizeof(uint32_t)); -- if (err) { -- args->num_tile_configs = 0; -- return -EFAULT; -- } -- -- if (args->num_macro_tile_configs > config.num_macro_tile_configs) -- args->num_macro_tile_configs = -- config.num_macro_tile_configs; -- err = copy_to_user((void __user *)args->macro_tile_config_ptr, -- config.macro_tile_config_ptr, -- args->num_macro_tile_configs * sizeof(uint32_t)); -- if (err) { -- args->num_macro_tile_configs = 0; -- return -EFAULT; -- } -- -- return 0; --} - - #define AMDKFD_IOCTL_DEF(ioctl, _func, _flags) \ -- [_IOC_NR(ioctl)] = {.cmd = ioctl, .func = _func, .flags = _flags, \ -- .cmd_drv = 0, .name = #ioctl} -+ [_IOC_NR(ioctl)] = {.cmd = ioctl, .func = _func, .flags = _flags, .cmd_drv = 0, .name = #ioctl} - - /** Ioctl table */ - static const struct amdkfd_ioctl_desc amdkfd_ioctls[] = { -@@ -977,12 +900,6 @@ static const struct amdkfd_ioctl_desc amdkfd_ioctls[] = { - - AMDKFD_IOCTL_DEF(AMDKFD_IOC_DBG_WAVE_CONTROL, - kfd_ioctl_dbg_wave_control, 0), -- -- AMDKFD_IOCTL_DEF(AMDKFD_IOC_SET_SCRATCH_BACKING_VA, -- kfd_ioctl_set_scratch_backing_va, 0), -- -- AMDKFD_IOCTL_DEF(AMDKFD_IOC_GET_TILE_CONFIG, -- kfd_ioctl_get_tile_config, 0) - }; - - #define AMDKFD_CORE_IOCTL_COUNT ARRAY_SIZE(amdkfd_ioctls) -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c b/drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c -index 0aa021a..d5e19b5 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c -@@ -42,6 +42,8 @@ - - static void dbgdev_address_watch_disable_nodiq(struct kfd_dev *dev) - { -+ BUG_ON(!dev || !dev->kfd2kgd); -+ - dev->kfd2kgd->address_watch_disable(dev->kgd); - } - -@@ -60,8 +62,7 @@ static int dbgdev_diq_submit_ib(struct kfd_dbgdev *dbgdev, - unsigned int *ib_packet_buff; - int status; - -- if (WARN_ON(!size_in_bytes)) -- return -EINVAL; -+ BUG_ON(!dbgdev || !dbgdev->kq || !packet_buff || !size_in_bytes); - - kq = dbgdev->kq; - -@@ -76,8 +77,8 @@ static int dbgdev_diq_submit_ib(struct kfd_dbgdev *dbgdev, - status = kq->ops.acquire_packet_buffer(kq, - pq_packets_size_in_bytes / sizeof(uint32_t), - &ib_packet_buff); -- if (status) { -- pr_err("acquire_packet_buffer failed\n"); -+ if (status != 0) { -+ pr_err("amdkfd: acquire_packet_buffer failed\n"); - return status; - } - -@@ -114,8 +115,8 @@ static int dbgdev_diq_submit_ib(struct kfd_dbgdev *dbgdev, - status = kfd_gtt_sa_allocate(dbgdev->dev, sizeof(uint64_t), - &mem_obj); - -- if (status) { -- pr_err("Failed to allocate GART memory\n"); -+ if (status != 0) { -+ pr_err("amdkfd: Failed to allocate GART memory\n"); - kq->ops.rollback_packet(kq); - return status; - } -@@ -167,6 +168,8 @@ static int dbgdev_diq_submit_ib(struct kfd_dbgdev *dbgdev, - - static int dbgdev_register_nodiq(struct kfd_dbgdev *dbgdev) - { -+ BUG_ON(!dbgdev); -+ - /* - * no action is needed in this case, - * just make sure diq will not be used -@@ -184,12 +187,14 @@ static int dbgdev_register_diq(struct kfd_dbgdev *dbgdev) - struct kernel_queue *kq = NULL; - int status; - -+ BUG_ON(!dbgdev || !dbgdev->pqm || !dbgdev->dev); -+ - status = pqm_create_queue(dbgdev->pqm, dbgdev->dev, NULL, - &properties, 0, KFD_QUEUE_TYPE_DIQ, - &qid); - - if (status) { -- pr_err("Failed to create DIQ\n"); -+ pr_err("amdkfd: Failed to create DIQ\n"); - return status; - } - -@@ -197,8 +202,8 @@ static int dbgdev_register_diq(struct kfd_dbgdev *dbgdev) - - kq = pqm_get_kernel_queue(dbgdev->pqm, qid); - -- if (!kq) { -- pr_err("Error getting DIQ\n"); -+ if (kq == NULL) { -+ pr_err("amdkfd: Error getting DIQ\n"); - pqm_destroy_queue(dbgdev->pqm, qid); - return -EFAULT; - } -@@ -210,6 +215,8 @@ static int dbgdev_register_diq(struct kfd_dbgdev *dbgdev) - - static int dbgdev_unregister_nodiq(struct kfd_dbgdev *dbgdev) - { -+ BUG_ON(!dbgdev || !dbgdev->dev); -+ - /* disable watch address */ - dbgdev_address_watch_disable_nodiq(dbgdev->dev); - return 0; -@@ -220,6 +227,8 @@ static int dbgdev_unregister_diq(struct kfd_dbgdev *dbgdev) - /* todo - disable address watch */ - int status; - -+ BUG_ON(!dbgdev || !dbgdev->pqm || !dbgdev->kq); -+ - status = pqm_destroy_queue(dbgdev->pqm, - dbgdev->kq->queue->properties.queue_id); - dbgdev->kq = NULL; -@@ -236,12 +245,14 @@ static void dbgdev_address_watch_set_registers( - { - union ULARGE_INTEGER addr; - -+ BUG_ON(!adw_info || !addrHi || !addrLo || !cntl); -+ - addr.quad_part = 0; - addrHi->u32All = 0; - addrLo->u32All = 0; - cntl->u32All = 0; - -- if (adw_info->watch_mask) -+ if (adw_info->watch_mask != NULL) - cntl->bitfields.mask = - (uint32_t) (adw_info->watch_mask[index] & - ADDRESS_WATCH_REG_CNTL_DEFAULT_MASK); -@@ -268,7 +279,7 @@ static void dbgdev_address_watch_set_registers( - } - - static int dbgdev_address_watch_nodiq(struct kfd_dbgdev *dbgdev, -- struct dbg_address_watch_info *adw_info) -+ struct dbg_address_watch_info *adw_info) - { - union TCP_WATCH_ADDR_H_BITS addrHi; - union TCP_WATCH_ADDR_L_BITS addrLo; -@@ -276,11 +287,13 @@ static int dbgdev_address_watch_nodiq(struct kfd_dbgdev *dbgdev, - struct kfd_process_device *pdd; - unsigned int i; - -+ BUG_ON(!dbgdev || !dbgdev->dev || !adw_info); -+ - /* taking the vmid for that process on the safe way using pdd */ - pdd = kfd_get_process_device_data(dbgdev->dev, - adw_info->process); - if (!pdd) { -- pr_err("Failed to get pdd for wave control no DIQ\n"); -+ pr_err("amdkfd: Failed to get pdd for wave control no DIQ\n"); - return -EFAULT; - } - -@@ -290,16 +303,17 @@ static int dbgdev_address_watch_nodiq(struct kfd_dbgdev *dbgdev, - - if ((adw_info->num_watch_points > MAX_WATCH_ADDRESSES) || - (adw_info->num_watch_points == 0)) { -- pr_err("num_watch_points is invalid\n"); -+ pr_err("amdkfd: num_watch_points is invalid\n"); - return -EINVAL; - } - -- if (!adw_info->watch_mode || !adw_info->watch_address) { -- pr_err("adw_info fields are not valid\n"); -+ if ((adw_info->watch_mode == NULL) || -+ (adw_info->watch_address == NULL)) { -+ pr_err("amdkfd: adw_info fields are not valid\n"); - return -EINVAL; - } - -- for (i = 0; i < adw_info->num_watch_points; i++) { -+ for (i = 0 ; i < adw_info->num_watch_points ; i++) { - dbgdev_address_watch_set_registers(adw_info, &addrHi, &addrLo, - &cntl, i, pdd->qpd.vmid); - -@@ -334,7 +348,7 @@ static int dbgdev_address_watch_nodiq(struct kfd_dbgdev *dbgdev, - } - - static int dbgdev_address_watch_diq(struct kfd_dbgdev *dbgdev, -- struct dbg_address_watch_info *adw_info) -+ struct dbg_address_watch_info *adw_info) - { - struct pm4__set_config_reg *packets_vec; - union TCP_WATCH_ADDR_H_BITS addrHi; -@@ -349,25 +363,28 @@ static int dbgdev_address_watch_diq(struct kfd_dbgdev *dbgdev, - /* we do not control the vmid in DIQ mode, just a place holder */ - unsigned int vmid = 0; - -+ BUG_ON(!dbgdev || !dbgdev->dev || !adw_info); -+ - addrHi.u32All = 0; - addrLo.u32All = 0; - cntl.u32All = 0; - - if ((adw_info->num_watch_points > MAX_WATCH_ADDRESSES) || - (adw_info->num_watch_points == 0)) { -- pr_err("num_watch_points is invalid\n"); -+ pr_err("amdkfd: num_watch_points is invalid\n"); - return -EINVAL; - } - -- if (!adw_info->watch_mode || !adw_info->watch_address) { -- pr_err("adw_info fields are not valid\n"); -+ if ((NULL == adw_info->watch_mode) || -+ (NULL == adw_info->watch_address)) { -+ pr_err("amdkfd: adw_info fields are not valid\n"); - return -EINVAL; - } - - status = kfd_gtt_sa_allocate(dbgdev->dev, ib_size, &mem_obj); - -- if (status) { -- pr_err("Failed to allocate GART memory\n"); -+ if (status != 0) { -+ pr_err("amdkfd: Failed to allocate GART memory\n"); - return status; - } - -@@ -425,6 +442,8 @@ static int dbgdev_address_watch_diq(struct kfd_dbgdev *dbgdev, - i, - ADDRESS_WATCH_REG_CNTL); - -+ aw_reg_add_dword /= sizeof(uint32_t); -+ - packets_vec[0].bitfields2.reg_offset = - aw_reg_add_dword - AMD_CONFIG_REG_BASE; - -@@ -436,6 +455,8 @@ static int dbgdev_address_watch_diq(struct kfd_dbgdev *dbgdev, - i, - ADDRESS_WATCH_REG_ADDR_HI); - -+ aw_reg_add_dword /= sizeof(uint32_t); -+ - packets_vec[1].bitfields2.reg_offset = - aw_reg_add_dword - AMD_CONFIG_REG_BASE; - packets_vec[1].reg_data[0] = addrHi.u32All; -@@ -446,6 +467,8 @@ static int dbgdev_address_watch_diq(struct kfd_dbgdev *dbgdev, - i, - ADDRESS_WATCH_REG_ADDR_LO); - -+ aw_reg_add_dword /= sizeof(uint32_t); -+ - packets_vec[2].bitfields2.reg_offset = - aw_reg_add_dword - AMD_CONFIG_REG_BASE; - packets_vec[2].reg_data[0] = addrLo.u32All; -@@ -462,6 +485,8 @@ static int dbgdev_address_watch_diq(struct kfd_dbgdev *dbgdev, - i, - ADDRESS_WATCH_REG_CNTL); - -+ aw_reg_add_dword /= sizeof(uint32_t); -+ - packets_vec[3].bitfields2.reg_offset = - aw_reg_add_dword - AMD_CONFIG_REG_BASE; - packets_vec[3].reg_data[0] = cntl.u32All; -@@ -473,8 +498,8 @@ static int dbgdev_address_watch_diq(struct kfd_dbgdev *dbgdev, - packet_buff_uint, - ib_size); - -- if (status) { -- pr_err("Failed to submit IB to DIQ\n"); -+ if (status != 0) { -+ pr_err("amdkfd: Failed to submit IB to DIQ\n"); - break; - } - } -@@ -493,6 +518,8 @@ static int dbgdev_wave_control_set_registers( - union GRBM_GFX_INDEX_BITS reg_gfx_index; - struct HsaDbgWaveMsgAMDGen2 *pMsg; - -+ BUG_ON(!wac_info || !in_reg_sq_cmd || !in_reg_gfx_index); -+ - reg_sq_cmd.u32All = 0; - reg_gfx_index.u32All = 0; - pMsg = &wac_info->dbgWave_msg.DbgWaveMsg.WaveMsgInfoGen2; -@@ -593,16 +620,18 @@ static int dbgdev_wave_control_diq(struct kfd_dbgdev *dbgdev, - struct pm4__set_config_reg *packets_vec; - size_t ib_size = sizeof(struct pm4__set_config_reg) * 3; - -+ BUG_ON(!dbgdev || !wac_info); -+ - reg_sq_cmd.u32All = 0; - - status = dbgdev_wave_control_set_registers(wac_info, ®_sq_cmd, - ®_gfx_index); - if (status) { -- pr_err("Failed to set wave control registers\n"); -+ pr_err("amdkfd: Failed to set wave control registers\n"); - return status; - } - -- /* we do not control the VMID in DIQ, so reset it to a known value */ -+ /* we do not control the VMID in DIQ,so reset it to a known value */ - reg_sq_cmd.bits.vm_id = 0; - - pr_debug("\t\t %30s\n", "* * * * * * * * * * * * * * * * * *"); -@@ -638,7 +667,7 @@ static int dbgdev_wave_control_diq(struct kfd_dbgdev *dbgdev, - status = kfd_gtt_sa_allocate(dbgdev->dev, ib_size, &mem_obj); - - if (status != 0) { -- pr_err("Failed to allocate GART memory\n"); -+ pr_err("amdkfd: Failed to allocate GART memory\n"); - return status; - } - -@@ -690,8 +719,8 @@ static int dbgdev_wave_control_diq(struct kfd_dbgdev *dbgdev, - packet_buff_uint, - ib_size); - -- if (status) -- pr_err("Failed to submit IB to DIQ\n"); -+ if (status != 0) -+ pr_err("amdkfd: Failed to submit IB to DIQ\n"); - - kfd_gtt_sa_free(dbgdev->dev, mem_obj); - -@@ -706,19 +735,21 @@ static int dbgdev_wave_control_nodiq(struct kfd_dbgdev *dbgdev, - union GRBM_GFX_INDEX_BITS reg_gfx_index; - struct kfd_process_device *pdd; - -+ BUG_ON(!dbgdev || !dbgdev->dev || !wac_info); -+ - reg_sq_cmd.u32All = 0; - - /* taking the VMID for that process on the safe way using PDD */ - pdd = kfd_get_process_device_data(dbgdev->dev, wac_info->process); - - if (!pdd) { -- pr_err("Failed to get pdd for wave control no DIQ\n"); -+ pr_err("amdkfd: Failed to get pdd for wave control no DIQ\n"); - return -EFAULT; - } - status = dbgdev_wave_control_set_registers(wac_info, ®_sq_cmd, - ®_gfx_index); - if (status) { -- pr_err("Failed to set wave control registers\n"); -+ pr_err("amdkfd: Failed to set wave control registers\n"); - return status; - } - -@@ -787,13 +818,12 @@ int dbgdev_wave_reset_wavefronts(struct kfd_dev *dev, struct kfd_process *p) - - /* Scan all registers in the range ATC_VMID8_PASID_MAPPING .. - * ATC_VMID15_PASID_MAPPING -- * to check which VMID the current process is mapped to. -- */ -+ * to check which VMID the current process is mapped to. */ - - for (vmid = first_vmid_to_scan; vmid <= last_vmid_to_scan; vmid++) { - if (dev->kfd2kgd->get_atc_vmid_pasid_mapping_valid - (dev->kgd, vmid)) { -- if (dev->kfd2kgd->get_atc_vmid_pasid_mapping_pasid -+ if (dev->kfd2kgd->get_atc_vmid_pasid_mapping_valid - (dev->kgd, vmid) == p->pasid) { - pr_debug("Killing wave fronts of vmid %d and pasid %d\n", - vmid, p->pasid); -@@ -803,7 +833,7 @@ int dbgdev_wave_reset_wavefronts(struct kfd_dev *dev, struct kfd_process *p) - } - - if (vmid > last_vmid_to_scan) { -- pr_err("Didn't find vmid for pasid %d\n", p->pasid); -+ pr_err("amdkfd: didn't found vmid for pasid (%d)\n", p->pasid); - return -EFAULT; - } - -@@ -830,6 +860,8 @@ int dbgdev_wave_reset_wavefronts(struct kfd_dev *dev, struct kfd_process *p) - void kfd_dbgdev_init(struct kfd_dbgdev *pdbgdev, struct kfd_dev *pdev, - enum DBGDEV_TYPE type) - { -+ BUG_ON(!pdbgdev || !pdev); -+ - pdbgdev->dev = pdev; - pdbgdev->kq = NULL; - pdbgdev->type = type; -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_dbgmgr.c b/drivers/gpu/drm/amd/amdkfd/kfd_dbgmgr.c -index 3da25f7..56d6763 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_dbgmgr.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_dbgmgr.c -@@ -44,6 +44,8 @@ struct mutex *kfd_get_dbgmgr_mutex(void) - - static void kfd_dbgmgr_uninitialize(struct kfd_dbgmgr *pmgr) - { -+ BUG_ON(!pmgr); -+ - kfree(pmgr->dbgdev); - - pmgr->dbgdev = NULL; -@@ -53,7 +55,7 @@ static void kfd_dbgmgr_uninitialize(struct kfd_dbgmgr *pmgr) - - void kfd_dbgmgr_destroy(struct kfd_dbgmgr *pmgr) - { -- if (pmgr) { -+ if (pmgr != NULL) { - kfd_dbgmgr_uninitialize(pmgr); - kfree(pmgr); - } -@@ -64,12 +66,12 @@ bool kfd_dbgmgr_create(struct kfd_dbgmgr **ppmgr, struct kfd_dev *pdev) - enum DBGDEV_TYPE type = DBGDEV_TYPE_DIQ; - struct kfd_dbgmgr *new_buff; - -- if (WARN_ON(!pdev->init_complete)) -- return false; -+ BUG_ON(pdev == NULL); -+ BUG_ON(!pdev->init_complete); - - new_buff = kfd_alloc_struct(new_buff); - if (!new_buff) { -- pr_err("Failed to allocate dbgmgr instance\n"); -+ pr_err("amdkfd: Failed to allocate dbgmgr instance\n"); - return false; - } - -@@ -77,7 +79,7 @@ bool kfd_dbgmgr_create(struct kfd_dbgmgr **ppmgr, struct kfd_dev *pdev) - new_buff->dev = pdev; - new_buff->dbgdev = kfd_alloc_struct(new_buff->dbgdev); - if (!new_buff->dbgdev) { -- pr_err("Failed to allocate dbgdev instance\n"); -+ pr_err("amdkfd: Failed to allocate dbgdev instance\n"); - kfree(new_buff); - return false; - } -@@ -94,6 +96,8 @@ bool kfd_dbgmgr_create(struct kfd_dbgmgr **ppmgr, struct kfd_dev *pdev) - - long kfd_dbgmgr_register(struct kfd_dbgmgr *pmgr, struct kfd_process *p) - { -+ BUG_ON(!p || !pmgr || !pmgr->dbgdev); -+ - if (pmgr->pasid != 0) { - pr_debug("H/W debugger is already active using pasid %d\n", - pmgr->pasid); -@@ -114,6 +118,8 @@ long kfd_dbgmgr_register(struct kfd_dbgmgr *pmgr, struct kfd_process *p) - - long kfd_dbgmgr_unregister(struct kfd_dbgmgr *pmgr, struct kfd_process *p) - { -+ BUG_ON(!p || !pmgr || !pmgr->dbgdev); -+ - /* Is the requests coming from the already registered process? */ - if (pmgr->pasid != p->pasid) { - pr_debug("H/W debugger is not registered by calling pasid %d\n", -@@ -131,6 +137,8 @@ long kfd_dbgmgr_unregister(struct kfd_dbgmgr *pmgr, struct kfd_process *p) - long kfd_dbgmgr_wave_control(struct kfd_dbgmgr *pmgr, - struct dbg_wave_control_info *wac_info) - { -+ BUG_ON(!pmgr || !pmgr->dbgdev || !wac_info); -+ - /* Is the requests coming from the already registered process? */ - if (pmgr->pasid != wac_info->process->pasid) { - pr_debug("H/W debugger support was not registered for requester pasid %d\n", -@@ -144,6 +152,9 @@ long kfd_dbgmgr_wave_control(struct kfd_dbgmgr *pmgr, - long kfd_dbgmgr_address_watch(struct kfd_dbgmgr *pmgr, - struct dbg_address_watch_info *adw_info) - { -+ BUG_ON(!pmgr || !pmgr->dbgdev || !adw_info); -+ -+ - /* Is the requests coming from the already registered process? */ - if (pmgr->pasid != adw_info->process->pasid) { - pr_debug("H/W debugger support was not registered for requester pasid %d\n", -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_dbgmgr.h b/drivers/gpu/drm/amd/amdkfd/kfd_dbgmgr.h -index a04a1fe..257a745 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_dbgmgr.h -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_dbgmgr.h -@@ -30,11 +30,13 @@ - #pragma pack(push, 4) - - enum HSA_DBG_WAVEOP { -- HSA_DBG_WAVEOP_HALT = 1, /* Halts a wavefront */ -- HSA_DBG_WAVEOP_RESUME = 2, /* Resumes a wavefront */ -- HSA_DBG_WAVEOP_KILL = 3, /* Kills a wavefront */ -- HSA_DBG_WAVEOP_DEBUG = 4, /* Causes wavefront to enter dbg mode */ -- HSA_DBG_WAVEOP_TRAP = 5, /* Causes wavefront to take a trap */ -+ HSA_DBG_WAVEOP_HALT = 1, /* Halts a wavefront */ -+ HSA_DBG_WAVEOP_RESUME = 2, /* Resumes a wavefront */ -+ HSA_DBG_WAVEOP_KILL = 3, /* Kills a wavefront */ -+ HSA_DBG_WAVEOP_DEBUG = 4, /* Causes wavefront to enter -+ debug mode */ -+ HSA_DBG_WAVEOP_TRAP = 5, /* Causes wavefront to take -+ a trap */ - HSA_DBG_NUM_WAVEOP = 5, - HSA_DBG_MAX_WAVEOP = 0xFFFFFFFF - }; -@@ -79,13 +81,15 @@ struct HsaDbgWaveMsgAMDGen2 { - uint32_t UserData:8; /* user data */ - uint32_t ShaderArray:1; /* Shader array */ - uint32_t Priv:1; /* Privileged */ -- uint32_t Reserved0:4; /* Reserved, should be 0 */ -+ uint32_t Reserved0:4; /* This field is reserved, -+ should be 0 */ - uint32_t WaveId:4; /* wave id */ - uint32_t SIMD:2; /* SIMD id */ - uint32_t HSACU:4; /* Compute unit */ - uint32_t ShaderEngine:2;/* Shader engine */ - uint32_t MessageType:2; /* see HSA_DBG_WAVEMSG_TYPE */ -- uint32_t Reserved1:4; /* Reserved, should be 0 */ -+ uint32_t Reserved1:4; /* This field is reserved, -+ should be 0 */ - } ui32; - uint32_t Value; - }; -@@ -117,23 +121,20 @@ struct HsaDbgWaveMessage { - * in the user mode instruction stream. The OS scheduler event is typically - * associated and signaled by an interrupt issued by the GPU, but other HSA - * system interrupt conditions from other HW (e.g. IOMMUv2) may be surfaced -- * by the KFD by this mechanism, too. -- */ -+ * by the KFD by this mechanism, too. */ - - /* these are the new definitions for events */ - enum HSA_EVENTTYPE { - HSA_EVENTTYPE_SIGNAL = 0, /* user-mode generated GPU signal */ - HSA_EVENTTYPE_NODECHANGE = 1, /* HSA node change (attach/detach) */ - HSA_EVENTTYPE_DEVICESTATECHANGE = 2, /* HSA device state change -- * (start/stop) -- */ -+ (start/stop) */ - HSA_EVENTTYPE_HW_EXCEPTION = 3, /* GPU shader exception event */ - HSA_EVENTTYPE_SYSTEM_EVENT = 4, /* GPU SYSCALL with parameter info */ - HSA_EVENTTYPE_DEBUG_EVENT = 5, /* GPU signal for debugging */ - HSA_EVENTTYPE_PROFILE_EVENT = 6,/* GPU signal for profiling */ - HSA_EVENTTYPE_QUEUE_EVENT = 7, /* GPU signal queue idle state -- * (EOP pm4) -- */ -+ (EOP pm4) */ - /* ... */ - HSA_EVENTTYPE_MAXID, - HSA_EVENTTYPE_TYPE_SIZE = 0xFFFFFFFF -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c -index 61fff25..3f95f7c 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c -@@ -26,7 +26,7 @@ - #include <linux/slab.h> - #include "kfd_priv.h" - #include "kfd_device_queue_manager.h" --#include "kfd_pm4_headers_vi.h" -+#include "kfd_pm4_headers.h" - - #define MQD_SIZE_ALIGNED 768 - -@@ -98,14 +98,11 @@ static const struct kfd_device_info *lookup_device_info(unsigned short did) - - for (i = 0; i < ARRAY_SIZE(supported_devices); i++) { - if (supported_devices[i].did == did) { -- WARN_ON(!supported_devices[i].device_info); -+ BUG_ON(supported_devices[i].device_info == NULL); - return supported_devices[i].device_info; - } - } - -- dev_warn(kfd_device, "DID %04x is missing in supported_devices\n", -- did); -- - return NULL; - } - -@@ -117,10 +114,8 @@ struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd, - const struct kfd_device_info *device_info = - lookup_device_info(pdev->device); - -- if (!device_info) { -- dev_err(kfd_device, "kgd2kfd_probe failed\n"); -+ if (!device_info) - return NULL; -- } - - kfd = kzalloc(sizeof(*kfd), GFP_KERNEL); - if (!kfd) -@@ -157,16 +152,15 @@ static bool device_iommu_pasid_init(struct kfd_dev *kfd) - } - - if ((iommu_info.flags & required_iommu_flags) != required_iommu_flags) { -- dev_err(kfd_device, "error required iommu flags ats %i, pri %i, pasid %i\n", -+ dev_err(kfd_device, "error required iommu flags ats(%i), pri(%i), pasid(%i)\n", - (iommu_info.flags & AMD_IOMMU_DEVICE_FLAG_ATS_SUP) != 0, - (iommu_info.flags & AMD_IOMMU_DEVICE_FLAG_PRI_SUP) != 0, -- (iommu_info.flags & AMD_IOMMU_DEVICE_FLAG_PASID_SUP) -- != 0); -+ (iommu_info.flags & AMD_IOMMU_DEVICE_FLAG_PASID_SUP) != 0); - return false; - } - - pasid_limit = min_t(unsigned int, -- (unsigned int)(1 << kfd->device_info->max_pasid_bits), -+ (unsigned int)1 << kfd->device_info->max_pasid_bits, - iommu_info.max_pasids); - /* - * last pasid is used for kernel queues doorbells -@@ -217,8 +211,9 @@ static int iommu_invalid_ppr_cb(struct pci_dev *pdev, int pasid, - flags); - - dev = kfd_device_by_pci_dev(pdev); -- if (!WARN_ON(!dev)) -- kfd_signal_iommu_event(dev, pasid, address, -+ BUG_ON(dev == NULL); -+ -+ kfd_signal_iommu_event(dev, pasid, address, - flags & PPR_FAULT_WRITE, flags & PPR_FAULT_EXEC); - - return AMD_IOMMU_INV_PRI_RSP_INVALID; -@@ -239,9 +234,9 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd, - * calculate max size of runlist packet. - * There can be only 2 packets at once - */ -- size += (KFD_MAX_NUM_OF_PROCESSES * sizeof(struct pm4_mes_map_process) + -- max_num_of_queues_per_device * sizeof(struct pm4_mes_map_queues) -- + sizeof(struct pm4_mes_runlist)) * 2; -+ size += (KFD_MAX_NUM_OF_PROCESSES * sizeof(struct pm4_map_process) + -+ max_num_of_queues_per_device * -+ sizeof(struct pm4_map_queues) + sizeof(struct pm4_runlist)) * 2; - - /* Add size of HIQ & DIQ */ - size += KFD_KERNEL_QUEUE_SIZE * 2; -@@ -252,37 +247,42 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd, - if (kfd->kfd2kgd->init_gtt_mem_allocation( - kfd->kgd, size, &kfd->gtt_mem, - &kfd->gtt_start_gpu_addr, &kfd->gtt_start_cpu_ptr)){ -- dev_err(kfd_device, "Could not allocate %d bytes\n", size); -+ dev_err(kfd_device, -+ "Could not allocate %d bytes for device (%x:%x)\n", -+ size, kfd->pdev->vendor, kfd->pdev->device); - goto out; - } - -- dev_info(kfd_device, "Allocated %d bytes on gart\n", size); -+ dev_info(kfd_device, -+ "Allocated %d bytes on gart for device(%x:%x)\n", -+ size, kfd->pdev->vendor, kfd->pdev->device); - - /* Initialize GTT sa with 512 byte chunk size */ - if (kfd_gtt_sa_init(kfd, size, 512) != 0) { -- dev_err(kfd_device, "Error initializing gtt sub-allocator\n"); -+ dev_err(kfd_device, -+ "Error initializing gtt sub-allocator\n"); - goto kfd_gtt_sa_init_error; - } - -- if (kfd_doorbell_init(kfd)) { -- dev_err(kfd_device, -- "Error initializing doorbell aperture\n"); -- goto kfd_doorbell_error; -- } -+ kfd_doorbell_init(kfd); - -- if (kfd_topology_add_device(kfd)) { -- dev_err(kfd_device, "Error adding device to topology\n"); -+ if (kfd_topology_add_device(kfd) != 0) { -+ dev_err(kfd_device, -+ "Error adding device (%x:%x) to topology\n", -+ kfd->pdev->vendor, kfd->pdev->device); - goto kfd_topology_add_device_error; - } - - if (kfd_interrupt_init(kfd)) { -- dev_err(kfd_device, "Error initializing interrupts\n"); -+ dev_err(kfd_device, -+ "Error initializing interrupts for device (%x:%x)\n", -+ kfd->pdev->vendor, kfd->pdev->device); - goto kfd_interrupt_error; - } - - if (!device_iommu_pasid_init(kfd)) { - dev_err(kfd_device, -- "Error initializing iommuv2 for device %x:%x\n", -+ "Error initializing iommuv2 for device (%x:%x)\n", - kfd->pdev->vendor, kfd->pdev->device); - goto device_iommu_pasid_error; - } -@@ -292,13 +292,15 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd, - - kfd->dqm = device_queue_manager_init(kfd); - if (!kfd->dqm) { -- dev_err(kfd_device, "Error initializing queue manager\n"); -+ dev_err(kfd_device, -+ "Error initializing queue manager for device (%x:%x)\n", -+ kfd->pdev->vendor, kfd->pdev->device); - goto device_queue_manager_error; - } - -- if (kfd->dqm->ops.start(kfd->dqm)) { -+ if (kfd->dqm->ops.start(kfd->dqm) != 0) { - dev_err(kfd_device, -- "Error starting queue manager for device %x:%x\n", -+ "Error starting queuen manager for device (%x:%x)\n", - kfd->pdev->vendor, kfd->pdev->device); - goto dqm_start_error; - } -@@ -306,10 +308,10 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd, - kfd->dbgmgr = NULL; - - kfd->init_complete = true; -- dev_info(kfd_device, "added device %x:%x\n", kfd->pdev->vendor, -+ dev_info(kfd_device, "added device (%x:%x)\n", kfd->pdev->vendor, - kfd->pdev->device); - -- pr_debug("Starting kfd with the following scheduling policy %d\n", -+ pr_debug("kfd: Starting kfd with the following scheduling policy %d\n", - sched_policy); - - goto out; -@@ -323,13 +325,11 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd, - kfd_interrupt_error: - kfd_topology_remove_device(kfd); - kfd_topology_add_device_error: -- kfd_doorbell_fini(kfd); --kfd_doorbell_error: - kfd_gtt_sa_fini(kfd); - kfd_gtt_sa_init_error: - kfd->kfd2kgd->free_gtt_mem(kfd->kgd, kfd->gtt_mem); - dev_err(kfd_device, -- "device %x:%x NOT added due to errors\n", -+ "device (%x:%x) NOT added due to errors\n", - kfd->pdev->vendor, kfd->pdev->device); - out: - return kfd->init_complete; -@@ -342,7 +342,6 @@ void kgd2kfd_device_exit(struct kfd_dev *kfd) - amd_iommu_free_device(kfd->pdev); - kfd_interrupt_exit(kfd); - kfd_topology_remove_device(kfd); -- kfd_doorbell_fini(kfd); - kfd_gtt_sa_fini(kfd); - kfd->kfd2kgd->free_gtt_mem(kfd->kgd, kfd->gtt_mem); - } -@@ -352,6 +351,8 @@ void kgd2kfd_device_exit(struct kfd_dev *kfd) - - void kgd2kfd_suspend(struct kfd_dev *kfd) - { -+ BUG_ON(kfd == NULL); -+ - if (kfd->init_complete) { - kfd->dqm->ops.stop(kfd->dqm); - amd_iommu_set_invalidate_ctx_cb(kfd->pdev, NULL); -@@ -365,15 +366,14 @@ int kgd2kfd_resume(struct kfd_dev *kfd) - unsigned int pasid_limit; - int err; - -+ BUG_ON(kfd == NULL); -+ - pasid_limit = kfd_get_pasid_limit(); - - if (kfd->init_complete) { - err = amd_iommu_init_device(kfd->pdev, pasid_limit); -- if (err < 0) { -- dev_err(kfd_device, "failed to initialize iommu\n"); -+ if (err < 0) - return -ENXIO; -- } -- - amd_iommu_set_invalidate_ctx_cb(kfd->pdev, - iommu_pasid_shutdown_callback); - amd_iommu_set_invalid_ppr_cb(kfd->pdev, iommu_invalid_ppr_cb); -@@ -402,27 +402,26 @@ void kgd2kfd_interrupt(struct kfd_dev *kfd, const void *ih_ring_entry) - static int kfd_gtt_sa_init(struct kfd_dev *kfd, unsigned int buf_size, - unsigned int chunk_size) - { -- unsigned int num_of_longs; -+ unsigned int num_of_bits; - -- if (WARN_ON(buf_size < chunk_size)) -- return -EINVAL; -- if (WARN_ON(buf_size == 0)) -- return -EINVAL; -- if (WARN_ON(chunk_size == 0)) -- return -EINVAL; -+ BUG_ON(!kfd); -+ BUG_ON(!kfd->gtt_mem); -+ BUG_ON(buf_size < chunk_size); -+ BUG_ON(buf_size == 0); -+ BUG_ON(chunk_size == 0); - - kfd->gtt_sa_chunk_size = chunk_size; - kfd->gtt_sa_num_of_chunks = buf_size / chunk_size; - -- num_of_longs = (kfd->gtt_sa_num_of_chunks + BITS_PER_LONG - 1) / -- BITS_PER_LONG; -+ num_of_bits = kfd->gtt_sa_num_of_chunks / BITS_PER_BYTE; -+ BUG_ON(num_of_bits == 0); - -- kfd->gtt_sa_bitmap = kcalloc(num_of_longs, sizeof(long), GFP_KERNEL); -+ kfd->gtt_sa_bitmap = kzalloc(num_of_bits, GFP_KERNEL); - - if (!kfd->gtt_sa_bitmap) - return -ENOMEM; - -- pr_debug("gtt_sa_num_of_chunks = %d, gtt_sa_bitmap = %p\n", -+ pr_debug("kfd: gtt_sa_num_of_chunks = %d, gtt_sa_bitmap = %p\n", - kfd->gtt_sa_num_of_chunks, kfd->gtt_sa_bitmap); - - mutex_init(&kfd->gtt_sa_lock); -@@ -456,6 +455,8 @@ int kfd_gtt_sa_allocate(struct kfd_dev *kfd, unsigned int size, - { - unsigned int found, start_search, cur_size; - -+ BUG_ON(!kfd); -+ - if (size == 0) - return -EINVAL; - -@@ -466,7 +467,7 @@ int kfd_gtt_sa_allocate(struct kfd_dev *kfd, unsigned int size, - if ((*mem_obj) == NULL) - return -ENOMEM; - -- pr_debug("Allocated mem_obj = %p for size = %d\n", *mem_obj, size); -+ pr_debug("kfd: allocated mem_obj = %p for size = %d\n", *mem_obj, size); - - start_search = 0; - -@@ -478,7 +479,7 @@ int kfd_gtt_sa_allocate(struct kfd_dev *kfd, unsigned int size, - kfd->gtt_sa_num_of_chunks, - start_search); - -- pr_debug("Found = %d\n", found); -+ pr_debug("kfd: found = %d\n", found); - - /* If there wasn't any free chunk, bail out */ - if (found == kfd->gtt_sa_num_of_chunks) -@@ -496,12 +497,12 @@ int kfd_gtt_sa_allocate(struct kfd_dev *kfd, unsigned int size, - found, - kfd->gtt_sa_chunk_size); - -- pr_debug("gpu_addr = %p, cpu_addr = %p\n", -+ pr_debug("kfd: gpu_addr = %p, cpu_addr = %p\n", - (uint64_t *) (*mem_obj)->gpu_addr, (*mem_obj)->cpu_ptr); - - /* If we need only one chunk, mark it as allocated and get out */ - if (size <= kfd->gtt_sa_chunk_size) { -- pr_debug("Single bit\n"); -+ pr_debug("kfd: single bit\n"); - set_bit(found, kfd->gtt_sa_bitmap); - goto kfd_gtt_out; - } -@@ -536,7 +537,7 @@ int kfd_gtt_sa_allocate(struct kfd_dev *kfd, unsigned int size, - - } while (cur_size > 0); - -- pr_debug("range_start = %d, range_end = %d\n", -+ pr_debug("kfd: range_start = %d, range_end = %d\n", - (*mem_obj)->range_start, (*mem_obj)->range_end); - - /* Mark the chunks as allocated */ -@@ -550,7 +551,7 @@ int kfd_gtt_sa_allocate(struct kfd_dev *kfd, unsigned int size, - return 0; - - kfd_gtt_no_free_chunk: -- pr_debug("Allocation failed with mem_obj = %p\n", mem_obj); -+ pr_debug("kfd: allocation failed with mem_obj = %p\n", mem_obj); - mutex_unlock(&kfd->gtt_sa_lock); - kfree(mem_obj); - return -ENOMEM; -@@ -560,11 +561,13 @@ int kfd_gtt_sa_free(struct kfd_dev *kfd, struct kfd_mem_obj *mem_obj) - { - unsigned int bit; - -+ BUG_ON(!kfd); -+ - /* Act like kfree when trying to free a NULL object */ - if (!mem_obj) - return 0; - -- pr_debug("Free mem_obj = %p, range_start = %d, range_end = %d\n", -+ pr_debug("kfd: free mem_obj = %p, range_start = %d, range_end = %d\n", - mem_obj, mem_obj->range_start, mem_obj->range_end); - - mutex_lock(&kfd->gtt_sa_lock); -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 53a66e8..42de22b 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c -@@ -79,17 +79,20 @@ static bool is_pipe_enabled(struct device_queue_manager *dqm, int mec, int pipe) - - unsigned int get_queues_num(struct device_queue_manager *dqm) - { -+ BUG_ON(!dqm || !dqm->dev); - return bitmap_weight(dqm->dev->shared_resources.queue_bitmap, - KGD_MAX_QUEUES); - } - - unsigned int get_queues_per_pipe(struct device_queue_manager *dqm) - { -+ BUG_ON(!dqm || !dqm->dev); - return dqm->dev->shared_resources.num_queue_per_pipe; - } - - unsigned int get_pipes_per_mec(struct device_queue_manager *dqm) - { -+ BUG_ON(!dqm || !dqm->dev); - return dqm->dev->shared_resources.num_pipe_per_mec; - } - -@@ -118,7 +121,7 @@ static int allocate_vmid(struct device_queue_manager *dqm, - - /* Kaveri kfd vmid's starts from vmid 8 */ - allocated_vmid = bit + KFD_VMID_START_OFFSET; -- pr_debug("vmid allocation %d\n", allocated_vmid); -+ pr_debug("kfd: vmid allocation %d\n", allocated_vmid); - qpd->vmid = allocated_vmid; - q->properties.vmid = allocated_vmid; - -@@ -149,38 +152,42 @@ static int create_queue_nocpsch(struct device_queue_manager *dqm, - { - int retval; - -+ BUG_ON(!dqm || !q || !qpd || !allocated_vmid); -+ -+ pr_debug("kfd: In func %s\n", __func__); - print_queue(q); - - mutex_lock(&dqm->lock); - - if (dqm->total_queue_count >= max_num_of_queues_per_device) { -- pr_warn("Can't create new usermode queue because %d queues were already created\n", -+ pr_warn("amdkfd: Can't create new usermode queue because %d queues were already created\n", - dqm->total_queue_count); -- retval = -EPERM; -- goto out_unlock; -+ mutex_unlock(&dqm->lock); -+ return -EPERM; - } - - if (list_empty(&qpd->queues_list)) { - retval = allocate_vmid(dqm, qpd, q); -- if (retval) -- goto out_unlock; -+ if (retval != 0) { -+ mutex_unlock(&dqm->lock); -+ return retval; -+ } - } - *allocated_vmid = qpd->vmid; - q->properties.vmid = qpd->vmid; - - if (q->properties.type == KFD_QUEUE_TYPE_COMPUTE) - retval = create_compute_queue_nocpsch(dqm, q, qpd); -- else if (q->properties.type == KFD_QUEUE_TYPE_SDMA) -+ if (q->properties.type == KFD_QUEUE_TYPE_SDMA) - retval = create_sdma_queue_nocpsch(dqm, q, qpd); -- else -- retval = -EINVAL; - -- if (retval) { -+ if (retval != 0) { - if (list_empty(&qpd->queues_list)) { - deallocate_vmid(dqm, qpd, q); - *allocated_vmid = 0; - } -- goto out_unlock; -+ mutex_unlock(&dqm->lock); -+ return retval; - } - - list_add(&q->list, &qpd->queues_list); -@@ -198,9 +205,8 @@ static int create_queue_nocpsch(struct device_queue_manager *dqm, - pr_debug("Total of %d queues are accountable so far\n", - dqm->total_queue_count); - --out_unlock: - mutex_unlock(&dqm->lock); -- return retval; -+ return 0; - } - - static int allocate_hqd(struct device_queue_manager *dqm, struct queue *q) -@@ -210,8 +216,7 @@ static int allocate_hqd(struct device_queue_manager *dqm, struct queue *q) - - set = false; - -- for (pipe = dqm->next_pipe_to_allocate, i = 0; -- i < get_pipes_per_mec(dqm); -+ for (pipe = dqm->next_pipe_to_allocate, i = 0; i < get_pipes_per_mec(dqm); - pipe = ((pipe + 1) % get_pipes_per_mec(dqm)), ++i) { - - if (!is_pipe_enabled(dqm, 0, pipe)) -@@ -234,7 +239,8 @@ static int allocate_hqd(struct device_queue_manager *dqm, struct queue *q) - if (!set) - return -EBUSY; - -- pr_debug("hqd slot - pipe %d, queue %d\n", q->pipe, q->queue); -+ pr_debug("kfd: DQM %s hqd slot - pipe (%d) queue(%d)\n", -+ __func__, q->pipe, q->queue); - /* horizontal hqd allocation */ - dqm->next_pipe_to_allocate = (pipe + 1) % get_pipes_per_mec(dqm); - -@@ -254,38 +260,36 @@ static int create_compute_queue_nocpsch(struct device_queue_manager *dqm, - int retval; - struct mqd_manager *mqd; - -+ BUG_ON(!dqm || !q || !qpd); -+ - mqd = dqm->ops.get_mqd_manager(dqm, KFD_MQD_TYPE_COMPUTE); -- if (!mqd) -+ if (mqd == NULL) - return -ENOMEM; - - retval = allocate_hqd(dqm, q); -- if (retval) -+ if (retval != 0) - return retval; - - retval = mqd->init_mqd(mqd, &q->mqd, &q->mqd_mem_obj, - &q->gart_mqd_addr, &q->properties); -- if (retval) -- goto out_deallocate_hqd; -- -- pr_debug("Loading mqd to hqd on pipe %d, queue %d\n", -- q->pipe, q->queue); -+ if (retval != 0) { -+ deallocate_hqd(dqm, q); -+ return retval; -+ } - -- dqm->dev->kfd2kgd->set_scratch_backing_va( -- dqm->dev->kgd, qpd->sh_hidden_private_base, qpd->vmid); -+ pr_debug("kfd: loading mqd to hqd on pipe (%d) queue (%d)\n", -+ q->pipe, -+ q->queue); - -- retval = mqd->load_mqd(mqd, q->mqd, q->pipe, q->queue, &q->properties, -- q->process->mm); -- if (retval) -- goto out_uninit_mqd; -+ retval = mqd->load_mqd(mqd, q->mqd, q->pipe, -+ q->queue, (uint32_t __user *) q->properties.write_ptr); -+ if (retval != 0) { -+ deallocate_hqd(dqm, q); -+ mqd->uninit_mqd(mqd, q->mqd, q->mqd_mem_obj); -+ return retval; -+ } - - return 0; -- --out_uninit_mqd: -- mqd->uninit_mqd(mqd, q->mqd, q->mqd_mem_obj); --out_deallocate_hqd: -- deallocate_hqd(dqm, q); -- -- return retval; - } - - static int destroy_queue_nocpsch(struct device_queue_manager *dqm, -@@ -295,8 +299,12 @@ static int destroy_queue_nocpsch(struct device_queue_manager *dqm, - int retval; - struct mqd_manager *mqd; - -+ BUG_ON(!dqm || !q || !q->mqd || !qpd); -+ - retval = 0; - -+ pr_debug("kfd: In Func %s\n", __func__); -+ - mutex_lock(&dqm->lock); - - if (q->properties.type == KFD_QUEUE_TYPE_COMPUTE) { -@@ -315,7 +323,7 @@ static int destroy_queue_nocpsch(struct device_queue_manager *dqm, - dqm->sdma_queue_count--; - deallocate_sdma_queue(dqm, q->sdma_id); - } else { -- pr_debug("q->properties.type %d is invalid\n", -+ pr_debug("q->properties.type is invalid (%d)\n", - q->properties.type); - retval = -EINVAL; - goto out; -@@ -326,7 +334,7 @@ static int destroy_queue_nocpsch(struct device_queue_manager *dqm, - QUEUE_PREEMPT_DEFAULT_TIMEOUT_MS, - q->pipe, q->queue); - -- if (retval) -+ if (retval != 0) - goto out; - - mqd->uninit_mqd(mqd, q->mqd, q->mqd_mem_obj); -@@ -356,12 +364,14 @@ static int update_queue(struct device_queue_manager *dqm, struct queue *q) - struct mqd_manager *mqd; - bool prev_active = false; - -+ BUG_ON(!dqm || !q || !q->mqd); -+ - mutex_lock(&dqm->lock); - mqd = dqm->ops.get_mqd_manager(dqm, - get_mqd_type_from_queue_type(q->properties.type)); -- if (!mqd) { -- retval = -ENOMEM; -- goto out_unlock; -+ if (mqd == NULL) { -+ mutex_unlock(&dqm->lock); -+ return -ENOMEM; - } - - if (q->properties.is_active) -@@ -375,13 +385,12 @@ static int update_queue(struct device_queue_manager *dqm, struct queue *q) - retval = mqd->update_mqd(mqd, q->mqd, &q->properties); - if ((q->properties.is_active) && (!prev_active)) - dqm->queue_count++; -- else if (!q->properties.is_active && prev_active) -+ else if ((!q->properties.is_active) && (prev_active)) - dqm->queue_count--; - - if (sched_policy != KFD_SCHED_POLICY_NO_HWS) - retval = execute_queues_cpsch(dqm, false); - --out_unlock: - mutex_unlock(&dqm->lock); - return retval; - } -@@ -391,16 +400,15 @@ static struct mqd_manager *get_mqd_manager_nocpsch( - { - struct mqd_manager *mqd; - -- if (WARN_ON(type >= KFD_MQD_TYPE_MAX)) -- return NULL; -+ BUG_ON(!dqm || type >= KFD_MQD_TYPE_MAX); - -- pr_debug("mqd type %d\n", type); -+ pr_debug("kfd: In func %s mqd type %d\n", __func__, type); - - mqd = dqm->mqds[type]; - if (!mqd) { - mqd = mqd_manager_init(type, dqm->dev); -- if (!mqd) -- pr_err("mqd manager is NULL"); -+ if (mqd == NULL) -+ pr_err("kfd: mqd manager is NULL"); - dqm->mqds[type] = mqd; - } - -@@ -413,7 +421,11 @@ static int register_process_nocpsch(struct device_queue_manager *dqm, - struct device_process_node *n; - int retval; - -- n = kzalloc(sizeof(*n), GFP_KERNEL); -+ BUG_ON(!dqm || !qpd); -+ -+ pr_debug("kfd: In func %s\n", __func__); -+ -+ n = kzalloc(sizeof(struct device_process_node), GFP_KERNEL); - if (!n) - return -ENOMEM; - -@@ -437,6 +449,10 @@ static int unregister_process_nocpsch(struct device_queue_manager *dqm, - int retval; - struct device_process_node *cur, *next; - -+ BUG_ON(!dqm || !qpd); -+ -+ pr_debug("In func %s\n", __func__); -+ - pr_debug("qpd->queues_list is %s\n", - list_empty(&qpd->queues_list) ? "empty" : "not empty"); - -@@ -477,39 +493,51 @@ static void init_interrupts(struct device_queue_manager *dqm) - { - unsigned int i; - -+ BUG_ON(dqm == NULL); -+ - for (i = 0 ; i < get_pipes_per_mec(dqm) ; i++) - if (is_pipe_enabled(dqm, 0, i)) - dqm->dev->kfd2kgd->init_interrupts(dqm->dev->kgd, i); - } - -+static int init_scheduler(struct device_queue_manager *dqm) -+{ -+ int retval = 0; -+ -+ BUG_ON(!dqm); -+ -+ pr_debug("kfd: In %s\n", __func__); -+ -+ return retval; -+} -+ - static int initialize_nocpsch(struct device_queue_manager *dqm) - { -- int pipe, queue; -+ int i; - -- pr_debug("num of pipes: %d\n", get_pipes_per_mec(dqm)); -+ BUG_ON(!dqm); - -- dqm->allocated_queues = kcalloc(get_pipes_per_mec(dqm), -- sizeof(unsigned int), GFP_KERNEL); -- if (!dqm->allocated_queues) -- return -ENOMEM; -+ pr_debug("kfd: In func %s num of pipes: %d\n", -+ __func__, get_pipes_per_mec(dqm)); - - mutex_init(&dqm->lock); - INIT_LIST_HEAD(&dqm->queues); - dqm->queue_count = dqm->next_pipe_to_allocate = 0; - dqm->sdma_queue_count = 0; -- -- for (pipe = 0; pipe < get_pipes_per_mec(dqm); pipe++) { -- int pipe_offset = pipe * get_queues_per_pipe(dqm); -- -- for (queue = 0; queue < get_queues_per_pipe(dqm); queue++) -- if (test_bit(pipe_offset + queue, -- dqm->dev->shared_resources.queue_bitmap)) -- dqm->allocated_queues[pipe] |= 1 << queue; -+ dqm->allocated_queues = kcalloc(get_pipes_per_mec(dqm), -+ sizeof(unsigned int), GFP_KERNEL); -+ if (!dqm->allocated_queues) { -+ mutex_destroy(&dqm->lock); -+ return -ENOMEM; - } - -+ for (i = 0; i < get_pipes_per_mec(dqm); i++) -+ dqm->allocated_queues[i] = (1 << get_queues_per_pipe(dqm)) - 1; -+ - dqm->vmid_bitmap = (1 << VMID_PER_DEVICE) - 1; - dqm->sdma_bitmap = (1 << CIK_SDMA_QUEUES) - 1; - -+ init_scheduler(dqm); - return 0; - } - -@@ -517,7 +545,9 @@ static void uninitialize_nocpsch(struct device_queue_manager *dqm) - { - int i; - -- WARN_ON(dqm->queue_count > 0 || dqm->processes_count > 0); -+ BUG_ON(!dqm); -+ -+ BUG_ON(dqm->queue_count > 0 || dqm->processes_count > 0); - - kfree(dqm->allocated_queues); - for (i = 0 ; i < KFD_MQD_TYPE_MAX ; i++) -@@ -574,34 +604,33 @@ static int create_sdma_queue_nocpsch(struct device_queue_manager *dqm, - return -ENOMEM; - - retval = allocate_sdma_queue(dqm, &q->sdma_id); -- if (retval) -+ if (retval != 0) - return retval; - - q->properties.sdma_queue_id = q->sdma_id % CIK_SDMA_QUEUES_PER_ENGINE; - q->properties.sdma_engine_id = q->sdma_id / CIK_SDMA_ENGINE_NUM; - -- pr_debug("SDMA id is: %d\n", q->sdma_id); -- pr_debug("SDMA queue id: %d\n", q->properties.sdma_queue_id); -- pr_debug("SDMA engine id: %d\n", q->properties.sdma_engine_id); -+ pr_debug("kfd: sdma id is: %d\n", q->sdma_id); -+ pr_debug(" sdma queue id: %d\n", q->properties.sdma_queue_id); -+ pr_debug(" sdma engine id: %d\n", q->properties.sdma_engine_id); - - dqm->ops_asic_specific.init_sdma_vm(dqm, q, qpd); - retval = mqd->init_mqd(mqd, &q->mqd, &q->mqd_mem_obj, - &q->gart_mqd_addr, &q->properties); -- if (retval) -- goto out_deallocate_sdma_queue; -+ if (retval != 0) { -+ deallocate_sdma_queue(dqm, q->sdma_id); -+ return retval; -+ } - -- retval = mqd->load_mqd(mqd, q->mqd, 0, 0, &q->properties, NULL); -- if (retval) -- goto out_uninit_mqd; -+ retval = mqd->load_mqd(mqd, q->mqd, 0, -+ 0, NULL); -+ if (retval != 0) { -+ deallocate_sdma_queue(dqm, q->sdma_id); -+ mqd->uninit_mqd(mqd, q->mqd, q->mqd_mem_obj); -+ return retval; -+ } - - return 0; -- --out_uninit_mqd: -- mqd->uninit_mqd(mqd, q->mqd, q->mqd_mem_obj); --out_deallocate_sdma_queue: -- deallocate_sdma_queue(dqm, q->sdma_id); -- -- return retval; - } - - /* -@@ -613,6 +642,10 @@ static int set_sched_resources(struct device_queue_manager *dqm) - int i, mec; - struct scheduling_resources res; - -+ BUG_ON(!dqm); -+ -+ pr_debug("kfd: In func %s\n", __func__); -+ - res.vmid_mask = (1 << VMID_PER_DEVICE) - 1; - res.vmid_mask <<= KFD_VMID_START_OFFSET; - -@@ -630,8 +663,7 @@ static int set_sched_resources(struct device_queue_manager *dqm) - - /* This situation may be hit in the future if a new HW - * generation exposes more than 64 queues. If so, the -- * definition of res.queue_mask needs updating -- */ -+ * definition of res.queue_mask needs updating */ - if (WARN_ON(i >= (sizeof(res.queue_mask)*8))) { - pr_err("Invalid queue enabled by amdgpu: %d\n", i); - break; -@@ -642,9 +674,9 @@ static int set_sched_resources(struct device_queue_manager *dqm) - res.gws_mask = res.oac_mask = res.gds_heap_base = - res.gds_heap_size = 0; - -- pr_debug("Scheduling resources:\n" -- "vmid mask: 0x%8X\n" -- "queue mask: 0x%8llX\n", -+ pr_debug("kfd: scheduling resources:\n" -+ " vmid mask: 0x%8X\n" -+ " queue mask: 0x%8llX\n", - res.vmid_mask, res.queue_mask); - - return pm_send_set_resources(&dqm->packets, &res); -@@ -654,7 +686,10 @@ static int initialize_cpsch(struct device_queue_manager *dqm) - { - int retval; - -- pr_debug("num of pipes: %d\n", get_pipes_per_mec(dqm)); -+ BUG_ON(!dqm); -+ -+ pr_debug("kfd: In func %s num of pipes: %d\n", -+ __func__, get_pipes_per_mec(dqm)); - - mutex_init(&dqm->lock); - INIT_LIST_HEAD(&dqm->queues); -@@ -662,9 +697,13 @@ static int initialize_cpsch(struct device_queue_manager *dqm) - dqm->sdma_queue_count = 0; - dqm->active_runlist = false; - retval = dqm->ops_asic_specific.initialize(dqm); -- if (retval) -- mutex_destroy(&dqm->lock); -+ if (retval != 0) -+ goto fail_init_pipelines; - -+ return 0; -+ -+fail_init_pipelines: -+ mutex_destroy(&dqm->lock); - return retval; - } - -@@ -673,23 +712,25 @@ static int start_cpsch(struct device_queue_manager *dqm) - struct device_process_node *node; - int retval; - -+ BUG_ON(!dqm); -+ - retval = 0; - - retval = pm_init(&dqm->packets, dqm); -- if (retval) -+ if (retval != 0) - goto fail_packet_manager_init; - - retval = set_sched_resources(dqm); -- if (retval) -+ if (retval != 0) - goto fail_set_sched_resources; - -- pr_debug("Allocating fence memory\n"); -+ pr_debug("kfd: allocating fence memory\n"); - - /* allocate fence memory on the gart */ - retval = kfd_gtt_sa_allocate(dqm->dev, sizeof(*dqm->fence_addr), - &dqm->fence_mem); - -- if (retval) -+ if (retval != 0) - goto fail_allocate_vidmem; - - dqm->fence_addr = dqm->fence_mem->cpu_ptr; -@@ -717,6 +758,8 @@ static int stop_cpsch(struct device_queue_manager *dqm) - struct device_process_node *node; - struct kfd_process_device *pdd; - -+ BUG_ON(!dqm); -+ - destroy_queues_cpsch(dqm, true, true); - - list_for_each_entry(node, &dqm->queues, list) { -@@ -733,9 +776,13 @@ static int create_kernel_queue_cpsch(struct device_queue_manager *dqm, - struct kernel_queue *kq, - struct qcm_process_device *qpd) - { -+ BUG_ON(!dqm || !kq || !qpd); -+ -+ pr_debug("kfd: In func %s\n", __func__); -+ - mutex_lock(&dqm->lock); - if (dqm->total_queue_count >= max_num_of_queues_per_device) { -- pr_warn("Can't create new kernel queue because %d queues were already created\n", -+ pr_warn("amdkfd: Can't create new kernel queue because %d queues were already created\n", - dqm->total_queue_count); - mutex_unlock(&dqm->lock); - return -EPERM; -@@ -762,6 +809,10 @@ static void destroy_kernel_queue_cpsch(struct device_queue_manager *dqm, - struct kernel_queue *kq, - struct qcm_process_device *qpd) - { -+ BUG_ON(!dqm || !kq); -+ -+ pr_debug("kfd: In %s\n", __func__); -+ - mutex_lock(&dqm->lock); - /* here we actually preempt the DIQ */ - destroy_queues_cpsch(dqm, true, false); -@@ -793,6 +844,8 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q, - int retval; - struct mqd_manager *mqd; - -+ BUG_ON(!dqm || !q || !qpd); -+ - retval = 0; - - if (allocate_vmid) -@@ -801,7 +854,7 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q, - mutex_lock(&dqm->lock); - - if (dqm->total_queue_count >= max_num_of_queues_per_device) { -- pr_warn("Can't create new usermode queue because %d queues were already created\n", -+ pr_warn("amdkfd: Can't create new usermode queue because %d queues were already created\n", - dqm->total_queue_count); - retval = -EPERM; - goto out; -@@ -813,15 +866,15 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q, - mqd = dqm->ops.get_mqd_manager(dqm, - get_mqd_type_from_queue_type(q->properties.type)); - -- if (!mqd) { -- retval = -ENOMEM; -- goto out; -+ if (mqd == NULL) { -+ mutex_unlock(&dqm->lock); -+ return -ENOMEM; - } - - dqm->ops_asic_specific.init_sdma_vm(dqm, q, qpd); - retval = mqd->init_mqd(mqd, &q->mqd, &q->mqd_mem_obj, - &q->gart_mqd_addr, &q->properties); -- if (retval) -+ if (retval != 0) - goto out; - - list_add(&q->list, &qpd->queues_list); -@@ -831,7 +884,7 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q, - } - - if (q->properties.type == KFD_QUEUE_TYPE_SDMA) -- dqm->sdma_queue_count++; -+ dqm->sdma_queue_count++; - /* - * Unconditionally increment this counter, regardless of the queue's - * type or whether the queue is active. -@@ -850,11 +903,12 @@ int amdkfd_fence_wait_timeout(unsigned int *fence_addr, - unsigned int fence_value, - unsigned long timeout) - { -+ BUG_ON(!fence_addr); - timeout += jiffies; - - while (*fence_addr != fence_value) { - if (time_after(jiffies, timeout)) { -- pr_err("qcm fence wait loop timeout expired\n"); -+ pr_err("kfd: qcm fence wait loop timeout expired\n"); - return -ETIME; - } - schedule(); -@@ -878,6 +932,8 @@ static int destroy_queues_cpsch(struct device_queue_manager *dqm, - enum kfd_preempt_type_filter preempt_type; - struct kfd_process_device *pdd; - -+ BUG_ON(!dqm); -+ - retval = 0; - - if (lock) -@@ -885,7 +941,7 @@ static int destroy_queues_cpsch(struct device_queue_manager *dqm, - if (!dqm->active_runlist) - goto out; - -- pr_debug("Before destroying queues, sdma queue count is : %u\n", -+ pr_debug("kfd: Before destroying queues, sdma queue count is : %u\n", - dqm->sdma_queue_count); - - if (dqm->sdma_queue_count > 0) { -@@ -899,7 +955,7 @@ static int destroy_queues_cpsch(struct device_queue_manager *dqm, - - retval = pm_send_unmap_queue(&dqm->packets, KFD_QUEUE_TYPE_COMPUTE, - preempt_type, 0, false, 0); -- if (retval) -+ if (retval != 0) - goto out; - - *dqm->fence_addr = KFD_FENCE_INIT; -@@ -908,7 +964,7 @@ static int destroy_queues_cpsch(struct device_queue_manager *dqm, - /* should be timed out */ - retval = amdkfd_fence_wait_timeout(dqm->fence_addr, KFD_FENCE_COMPLETED, - QUEUE_PREEMPT_DEFAULT_TIMEOUT_MS); -- if (retval) { -+ if (retval != 0) { - pdd = kfd_get_process_device_data(dqm->dev, - kfd_get_process(current)); - pdd->reset_wavefronts = true; -@@ -927,12 +983,14 @@ static int execute_queues_cpsch(struct device_queue_manager *dqm, bool lock) - { - int retval; - -+ BUG_ON(!dqm); -+ - if (lock) - mutex_lock(&dqm->lock); - - retval = destroy_queues_cpsch(dqm, false, false); -- if (retval) { -- pr_err("The cp might be in an unrecoverable state due to an unsuccessful queues preemption"); -+ if (retval != 0) { -+ pr_err("kfd: the cp might be in an unrecoverable state due to an unsuccessful queues preemption"); - goto out; - } - -@@ -947,8 +1005,8 @@ static int execute_queues_cpsch(struct device_queue_manager *dqm, bool lock) - } - - retval = pm_send_runlist(&dqm->packets, &dqm->queues); -- if (retval) { -- pr_err("failed to execute runlist"); -+ if (retval != 0) { -+ pr_err("kfd: failed to execute runlist"); - goto out; - } - dqm->active_runlist = true; -@@ -967,6 +1025,8 @@ static int destroy_queue_cpsch(struct device_queue_manager *dqm, - struct mqd_manager *mqd; - bool preempt_all_queues; - -+ BUG_ON(!dqm || !qpd || !q); -+ - preempt_all_queues = false; - - retval = 0; -@@ -1038,6 +1098,8 @@ static bool set_cache_memory_policy(struct device_queue_manager *dqm, - { - bool retval; - -+ pr_debug("kfd: In func %s\n", __func__); -+ - mutex_lock(&dqm->lock); - - if (alternate_aperture_size == 0) { -@@ -1058,11 +1120,14 @@ static bool set_cache_memory_policy(struct device_queue_manager *dqm, - uint64_t base = (uintptr_t)alternate_aperture_base; - uint64_t limit = base + alternate_aperture_size - 1; - -- if (limit <= base || (base & APE1_FIXED_BITS_MASK) != 0 || -- (limit & APE1_FIXED_BITS_MASK) != APE1_LIMIT_ALIGNMENT) { -- retval = false; -+ if (limit <= base) -+ goto out; -+ -+ if ((base & APE1_FIXED_BITS_MASK) != 0) -+ goto out; -+ -+ if ((limit & APE1_FIXED_BITS_MASK) != APE1_LIMIT_ALIGNMENT) - goto out; -- } - - qpd->sh_mem_ape1_base = base >> 16; - qpd->sh_mem_ape1_limit = limit >> 16; -@@ -1079,22 +1144,27 @@ static bool set_cache_memory_policy(struct device_queue_manager *dqm, - if ((sched_policy == KFD_SCHED_POLICY_NO_HWS) && (qpd->vmid != 0)) - program_sh_mem_settings(dqm, qpd); - -- pr_debug("sh_mem_config: 0x%x, ape1_base: 0x%x, ape1_limit: 0x%x\n", -+ pr_debug("kfd: sh_mem_config: 0x%x, ape1_base: 0x%x, ape1_limit: 0x%x\n", - qpd->sh_mem_config, qpd->sh_mem_ape1_base, - qpd->sh_mem_ape1_limit); - --out: - mutex_unlock(&dqm->lock); - return retval; -+ -+out: -+ mutex_unlock(&dqm->lock); -+ return false; - } - - struct device_queue_manager *device_queue_manager_init(struct kfd_dev *dev) - { - struct device_queue_manager *dqm; - -- pr_debug("Loading device queue manager\n"); -+ BUG_ON(!dev); - -- dqm = kzalloc(sizeof(*dqm), GFP_KERNEL); -+ pr_debug("kfd: loading device queue manager\n"); -+ -+ dqm = kzalloc(sizeof(struct device_queue_manager), GFP_KERNEL); - if (!dqm) - return NULL; - -@@ -1132,8 +1202,8 @@ struct device_queue_manager *device_queue_manager_init(struct kfd_dev *dev) - dqm->ops.set_cache_memory_policy = set_cache_memory_policy; - break; - default: -- pr_err("Invalid scheduling policy %d\n", sched_policy); -- goto out_free; -+ BUG(); -+ break; - } - - switch (dev->device_info->asic_family) { -@@ -1146,16 +1216,18 @@ struct device_queue_manager *device_queue_manager_init(struct kfd_dev *dev) - break; - } - -- if (!dqm->ops.initialize(dqm)) -- return dqm; -+ if (dqm->ops.initialize(dqm) != 0) { -+ kfree(dqm); -+ return NULL; -+ } - --out_free: -- kfree(dqm); -- return NULL; -+ return dqm; - } - - void device_queue_manager_uninit(struct device_queue_manager *dqm) - { -+ BUG_ON(!dqm); -+ - dqm->ops.uninitialize(dqm); - kfree(dqm); - } -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager_cik.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager_cik.c -index 72c3cba..48dc056 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager_cik.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager_cik.c -@@ -24,7 +24,6 @@ - #include "kfd_device_queue_manager.h" - #include "cik_regs.h" - #include "oss/oss_2_4_sh_mask.h" --#include "gca/gfx_7_2_sh_mask.h" - - static bool set_cache_memory_policy_cik(struct device_queue_manager *dqm, - struct qcm_process_device *qpd, -@@ -66,7 +65,7 @@ static uint32_t compute_sh_mem_bases_64bit(unsigned int top_address_nybble) - * for LDS/Scratch and GPUVM. - */ - -- WARN_ON((top_address_nybble & 1) || top_address_nybble > 0xE || -+ BUG_ON((top_address_nybble & 1) || top_address_nybble > 0xE || - top_address_nybble == 0); - - return PRIVATE_BASE(top_address_nybble << 12) | -@@ -105,6 +104,8 @@ static int register_process_cik(struct device_queue_manager *dqm, - struct kfd_process_device *pdd; - unsigned int temp; - -+ BUG_ON(!dqm || !qpd); -+ - pdd = qpd_to_pdd(qpd); - - /* check if sh_mem_config register already configured */ -@@ -124,10 +125,9 @@ static int register_process_cik(struct device_queue_manager *dqm, - } else { - temp = get_sh_mem_bases_nybble_64(pdd); - qpd->sh_mem_bases = compute_sh_mem_bases_64bit(temp); -- qpd->sh_mem_config |= 1 << SH_MEM_CONFIG__PRIVATE_ATC__SHIFT; - } - -- pr_debug("is32bit process: %d sh_mem_bases nybble: 0x%X and register 0x%X\n", -+ pr_debug("kfd: is32bit process: %d sh_mem_bases nybble: 0x%X and register 0x%X\n", - qpd->pqm->process->is_32bit_user_mode, temp, qpd->sh_mem_bases); - - return 0; -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager_vi.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager_vi.c -index 40e9ddd..7e9cae9 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager_vi.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager_vi.c -@@ -67,7 +67,7 @@ static uint32_t compute_sh_mem_bases_64bit(unsigned int top_address_nybble) - * for LDS/Scratch and GPUVM. - */ - -- WARN_ON((top_address_nybble & 1) || top_address_nybble > 0xE || -+ BUG_ON((top_address_nybble & 1) || top_address_nybble > 0xE || - top_address_nybble == 0); - - return top_address_nybble << 12 | -@@ -110,6 +110,8 @@ static int register_process_vi(struct device_queue_manager *dqm, - struct kfd_process_device *pdd; - unsigned int temp; - -+ BUG_ON(!dqm || !qpd); -+ - pdd = qpd_to_pdd(qpd); - - /* check if sh_mem_config register already configured */ -@@ -135,11 +137,9 @@ static int register_process_vi(struct device_queue_manager *dqm, - qpd->sh_mem_bases = compute_sh_mem_bases_64bit(temp); - qpd->sh_mem_config |= SH_MEM_ADDRESS_MODE_HSA64 << - SH_MEM_CONFIG__ADDRESS_MODE__SHIFT; -- qpd->sh_mem_config |= 1 << -- SH_MEM_CONFIG__PRIVATE_ATC__SHIFT; - } - -- pr_debug("is32bit process: %d sh_mem_bases nybble: 0x%X and register 0x%X\n", -+ pr_debug("kfd: is32bit process: %d sh_mem_bases nybble: 0x%X and register 0x%X\n", - qpd->pqm->process->is_32bit_user_mode, temp, qpd->sh_mem_bases); - - return 0; -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c b/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c -index acf4d2a..453c5d6 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c -@@ -59,7 +59,7 @@ static inline size_t doorbell_process_allocation(void) - } - - /* Doorbell calculations for device init. */ --int kfd_doorbell_init(struct kfd_dev *kfd) -+void kfd_doorbell_init(struct kfd_dev *kfd) - { - size_t doorbell_start_offset; - size_t doorbell_aperture_size; -@@ -95,35 +95,26 @@ int kfd_doorbell_init(struct kfd_dev *kfd) - kfd->doorbell_kernel_ptr = ioremap(kfd->doorbell_base, - doorbell_process_allocation()); - -- if (!kfd->doorbell_kernel_ptr) -- return -ENOMEM; -+ BUG_ON(!kfd->doorbell_kernel_ptr); - -- pr_debug("Doorbell initialization:\n"); -- pr_debug("doorbell base == 0x%08lX\n", -+ pr_debug("kfd: doorbell initialization:\n"); -+ pr_debug("kfd: doorbell base == 0x%08lX\n", - (uintptr_t)kfd->doorbell_base); - -- pr_debug("doorbell_id_offset == 0x%08lX\n", -+ pr_debug("kfd: doorbell_id_offset == 0x%08lX\n", - kfd->doorbell_id_offset); - -- pr_debug("doorbell_process_limit == 0x%08lX\n", -+ pr_debug("kfd: doorbell_process_limit == 0x%08lX\n", - doorbell_process_limit); - -- pr_debug("doorbell_kernel_offset == 0x%08lX\n", -+ pr_debug("kfd: doorbell_kernel_offset == 0x%08lX\n", - (uintptr_t)kfd->doorbell_base); - -- pr_debug("doorbell aperture size == 0x%08lX\n", -+ pr_debug("kfd: doorbell aperture size == 0x%08lX\n", - kfd->shared_resources.doorbell_aperture_size); - -- pr_debug("doorbell kernel address == 0x%08lX\n", -+ pr_debug("kfd: doorbell kernel address == 0x%08lX\n", - (uintptr_t)kfd->doorbell_kernel_ptr); -- -- return 0; --} -- --void kfd_doorbell_fini(struct kfd_dev *kfd) --{ -- if (kfd->doorbell_kernel_ptr) -- iounmap(kfd->doorbell_kernel_ptr); - } - - int kfd_doorbell_mmap(struct kfd_process *process, struct vm_area_struct *vma) -@@ -140,7 +131,7 @@ int kfd_doorbell_mmap(struct kfd_process *process, struct vm_area_struct *vma) - - /* Find kfd device according to gpu id */ - dev = kfd_device_by_id(vma->vm_pgoff); -- if (!dev) -+ if (dev == NULL) - return -EINVAL; - - /* Calculate physical address of doorbell */ -@@ -151,11 +142,12 @@ int kfd_doorbell_mmap(struct kfd_process *process, struct vm_area_struct *vma) - - vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); - -- pr_debug("Mapping doorbell page\n" -+ pr_debug("kfd: mapping doorbell page in %s\n" - " target user address == 0x%08llX\n" - " physical address == 0x%08llX\n" - " vm_flags == 0x%04lX\n" - " size == 0x%04lX\n", -+ __func__, - (unsigned long long) vma->vm_start, address, vma->vm_flags, - doorbell_process_allocation()); - -@@ -174,6 +166,8 @@ u32 __iomem *kfd_get_kernel_doorbell(struct kfd_dev *kfd, - { - u32 inx; - -+ BUG_ON(!kfd || !doorbell_off); -+ - mutex_lock(&kfd->doorbell_mutex); - inx = find_first_zero_bit(kfd->doorbell_available_index, - KFD_MAX_NUM_OF_QUEUES_PER_PROCESS); -@@ -191,7 +185,7 @@ u32 __iomem *kfd_get_kernel_doorbell(struct kfd_dev *kfd, - *doorbell_off = KERNEL_DOORBELL_PASID * (doorbell_process_allocation() / - sizeof(u32)) + inx; - -- pr_debug("Get kernel queue doorbell\n" -+ pr_debug("kfd: get kernel queue doorbell\n" - " doorbell offset == 0x%08X\n" - " kernel address == 0x%08lX\n", - *doorbell_off, (uintptr_t)(kfd->doorbell_kernel_ptr + inx)); -@@ -203,6 +197,8 @@ void kfd_release_kernel_doorbell(struct kfd_dev *kfd, u32 __iomem *db_addr) - { - unsigned int inx; - -+ BUG_ON(!kfd || !db_addr); -+ - inx = (unsigned int)(db_addr - kfd->doorbell_kernel_ptr); - - mutex_lock(&kfd->doorbell_mutex); -@@ -214,7 +210,7 @@ inline void write_kernel_doorbell(u32 __iomem *db, u32 value) - { - if (db) { - writel(value, db); -- pr_debug("Writing %d to doorbell address 0x%p\n", value, db); -+ pr_debug("writing %d to doorbell address 0x%p\n", value, db); - } - } - -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.c b/drivers/gpu/drm/amd/amdkfd/kfd_events.c -index 5979158..d1ce83d 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_events.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.c -@@ -110,7 +110,7 @@ static bool allocate_free_slot(struct kfd_process *process, - *out_page = page; - *out_slot_index = slot; - -- pr_debug("Allocated event signal slot in page %p, slot %d\n", -+ pr_debug("allocated event signal slot in page %p, slot %d\n", - page, slot); - - return true; -@@ -155,9 +155,9 @@ static bool allocate_signal_page(struct file *devkfd, struct kfd_process *p) - struct signal_page, - event_pages)->page_index + 1; - -- pr_debug("Allocated new event signal page at %p, for process %p\n", -+ pr_debug("allocated new event signal page at %p, for process %p\n", - page, p); -- pr_debug("Page index is %d\n", page->page_index); -+ pr_debug("page index is %d\n", page->page_index); - - list_add(&page->event_pages, &p->signal_event_pages); - -@@ -194,8 +194,7 @@ static void release_event_notification_slot(struct signal_page *page, - page->free_slots++; - - /* We don't free signal pages, they are retained by the process -- * and reused until it exits. -- */ -+ * and reused until it exits. */ - } - - static struct signal_page *lookup_signal_page_by_index(struct kfd_process *p, -@@ -247,7 +246,7 @@ static u32 make_nonsignal_event_id(struct kfd_process *p) - - for (id = p->next_nonsignal_event_id; - id < KFD_LAST_NONSIGNAL_EVENT_ID && -- lookup_event_by_id(p, id); -+ lookup_event_by_id(p, id) != NULL; - id++) - ; - -@@ -266,7 +265,7 @@ static u32 make_nonsignal_event_id(struct kfd_process *p) - - for (id = KFD_FIRST_NONSIGNAL_EVENT_ID; - id < KFD_LAST_NONSIGNAL_EVENT_ID && -- lookup_event_by_id(p, id); -+ lookup_event_by_id(p, id) != NULL; - id++) - ; - -@@ -292,13 +291,13 @@ static int create_signal_event(struct file *devkfd, - struct kfd_event *ev) - { - if (p->signal_event_count == KFD_SIGNAL_EVENT_LIMIT) { -- pr_warn("Signal event wasn't created because limit was reached\n"); -+ pr_warn("amdkfd: Signal event wasn't created because limit was reached\n"); - return -ENOMEM; - } - - if (!allocate_event_notification_slot(devkfd, p, &ev->signal_page, - &ev->signal_slot_index)) { -- pr_warn("Signal event wasn't created because out of kernel memory\n"); -+ pr_warn("amdkfd: Signal event wasn't created because out of kernel memory\n"); - return -ENOMEM; - } - -@@ -310,7 +309,11 @@ static int create_signal_event(struct file *devkfd, - ev->event_id = make_signal_event_id(ev->signal_page, - ev->signal_slot_index); - -- pr_debug("Signal event number %zu created with id %d, address %p\n", -+ pr_debug("signal event number %zu created with id %d, address %p\n", -+ p->signal_event_count, ev->event_id, -+ ev->user_signal_address); -+ -+ pr_debug("signal event number %zu created with id %d, address %p\n", - p->signal_event_count, ev->event_id, - ev->user_signal_address); - -@@ -342,7 +345,7 @@ void kfd_event_init_process(struct kfd_process *p) - - static void destroy_event(struct kfd_process *p, struct kfd_event *ev) - { -- if (ev->signal_page) { -+ if (ev->signal_page != NULL) { - release_event_notification_slot(ev->signal_page, - ev->signal_slot_index); - p->signal_event_count--; -@@ -581,7 +584,7 @@ void kfd_signal_event_interrupt(unsigned int pasid, uint32_t partial_id, - * search faster. - */ - struct signal_page *page; -- unsigned int i; -+ unsigned i; - - list_for_each_entry(page, &p->signal_event_pages, event_pages) - for (i = 0; i < SLOTS_PER_PAGE; i++) -@@ -813,7 +816,7 @@ int kfd_event_mmap(struct kfd_process *p, struct vm_area_struct *vma) - /* check required size is logical */ - if (get_order(KFD_SIGNAL_EVENT_LIMIT * 8) != - get_order(vma->vm_end - vma->vm_start)) { -- pr_err("Event page mmap requested illegal size\n"); -+ pr_err("amdkfd: event page mmap requested illegal size\n"); - return -EINVAL; - } - -@@ -822,7 +825,7 @@ int kfd_event_mmap(struct kfd_process *p, struct vm_area_struct *vma) - page = lookup_signal_page_by_index(p, page_index); - if (!page) { - /* Probably KFD bug, but mmap is user-accessible. */ -- pr_debug("Signal page could not be found for page_index %u\n", -+ pr_debug("signal page could not be found for page_index %u\n", - page_index); - return -EINVAL; - } -@@ -833,7 +836,7 @@ int kfd_event_mmap(struct kfd_process *p, struct vm_area_struct *vma) - vma->vm_flags |= VM_IO | VM_DONTCOPY | VM_DONTEXPAND | VM_NORESERVE - | VM_DONTDUMP | VM_PFNMAP; - -- pr_debug("Mapping signal page\n"); -+ pr_debug("mapping signal page\n"); - pr_debug(" start user address == 0x%08lx\n", vma->vm_start); - pr_debug(" end user address == 0x%08lx\n", vma->vm_end); - pr_debug(" pfn == 0x%016lX\n", pfn); -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c b/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c -index c59384b..2b65510 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c -@@ -304,7 +304,7 @@ int kfd_init_apertures(struct kfd_process *process) - id < NUM_OF_SUPPORTED_GPUS) { - - pdd = kfd_create_process_device_data(dev, process); -- if (!pdd) { -+ if (pdd == NULL) { - pr_err("Failed to create process device data\n"); - return -1; - } -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_interrupt.c b/drivers/gpu/drm/amd/amdkfd/kfd_interrupt.c -index 70b3a99c..7f134aa 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_interrupt.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_interrupt.c -@@ -179,7 +179,7 @@ static void interrupt_wq(struct work_struct *work) - bool interrupt_is_wanted(struct kfd_dev *dev, const uint32_t *ih_ring_entry) - { - /* integer and bitwise OR so there is no boolean short-circuiting */ -- unsigned int wanted = 0; -+ unsigned wanted = 0; - - wanted |= dev->device_info->event_interrupt_class->interrupt_isr(dev, - ih_ring_entry); -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c -index 681b639..d135cd0 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c -@@ -41,11 +41,11 @@ static bool initialize(struct kernel_queue *kq, struct kfd_dev *dev, - int retval; - union PM4_MES_TYPE_3_HEADER nop; - -- if (WARN_ON(type != KFD_QUEUE_TYPE_DIQ && type != KFD_QUEUE_TYPE_HIQ)) -- return false; -+ BUG_ON(!kq || !dev); -+ BUG_ON(type != KFD_QUEUE_TYPE_DIQ && type != KFD_QUEUE_TYPE_HIQ); - -- pr_debug("Initializing queue type %d size %d\n", KFD_QUEUE_TYPE_HIQ, -- queue_size); -+ pr_debug("amdkfd: In func %s initializing queue type %d size %d\n", -+ __func__, KFD_QUEUE_TYPE_HIQ, queue_size); - - memset(&prop, 0, sizeof(prop)); - memset(&nop, 0, sizeof(nop)); -@@ -63,23 +63,23 @@ static bool initialize(struct kernel_queue *kq, struct kfd_dev *dev, - KFD_MQD_TYPE_HIQ); - break; - default: -- pr_err("Invalid queue type %d\n", type); -- return false; -+ BUG(); -+ break; - } - -- if (!kq->mqd) -+ if (kq->mqd == NULL) - return false; - - prop.doorbell_ptr = kfd_get_kernel_doorbell(dev, &prop.doorbell_off); - -- if (!prop.doorbell_ptr) { -- pr_err("Failed to initialize doorbell"); -+ if (prop.doorbell_ptr == NULL) { -+ pr_err("amdkfd: error init doorbell"); - goto err_get_kernel_doorbell; - } - - retval = kfd_gtt_sa_allocate(dev, queue_size, &kq->pq); - if (retval != 0) { -- pr_err("Failed to init pq queues size %d\n", queue_size); -+ pr_err("amdkfd: error init pq queues size (%d)\n", queue_size); - goto err_pq_allocate_vidmem; - } - -@@ -87,7 +87,7 @@ static bool initialize(struct kernel_queue *kq, struct kfd_dev *dev, - kq->pq_gpu_addr = kq->pq->gpu_addr; - - retval = kq->ops_asic_specific.initialize(kq, dev, type, queue_size); -- if (!retval) -+ if (retval == false) - goto err_eop_allocate_vidmem; - - retval = kfd_gtt_sa_allocate(dev, sizeof(*kq->rptr_kernel), -@@ -139,12 +139,11 @@ static bool initialize(struct kernel_queue *kq, struct kfd_dev *dev, - - /* assign HIQ to HQD */ - if (type == KFD_QUEUE_TYPE_HIQ) { -- pr_debug("Assigning hiq to hqd\n"); -+ pr_debug("assigning hiq to hqd\n"); - kq->queue->pipe = KFD_CIK_HIQ_PIPE; - kq->queue->queue = KFD_CIK_HIQ_QUEUE; - kq->mqd->load_mqd(kq->mqd, kq->queue->mqd, kq->queue->pipe, -- kq->queue->queue, &kq->queue->properties, -- NULL); -+ kq->queue->queue, NULL); - } else { - /* allocate fence for DIQ */ - -@@ -181,6 +180,8 @@ static bool initialize(struct kernel_queue *kq, struct kfd_dev *dev, - - static void uninitialize(struct kernel_queue *kq) - { -+ BUG_ON(!kq); -+ - if (kq->queue->properties.type == KFD_QUEUE_TYPE_HIQ) - kq->mqd->destroy_mqd(kq->mqd, - NULL, -@@ -210,6 +211,8 @@ static int acquire_packet_buffer(struct kernel_queue *kq, - uint32_t wptr, rptr; - unsigned int *queue_address; - -+ BUG_ON(!kq || !buffer_ptr); -+ - rptr = *kq->rptr_kernel; - wptr = *kq->wptr_kernel; - queue_address = (unsigned int *)kq->pq_kernel_addr; -@@ -249,7 +252,11 @@ static void submit_packet(struct kernel_queue *kq) - { - #ifdef DEBUG - int i; -+#endif -+ -+ BUG_ON(!kq); - -+#ifdef DEBUG - for (i = *kq->wptr_kernel; i < kq->pending_wptr; i++) { - pr_debug("0x%2X ", kq->pq_kernel_addr[i]); - if (i % 15 == 0) -@@ -265,6 +272,7 @@ static void submit_packet(struct kernel_queue *kq) - - static void rollback_packet(struct kernel_queue *kq) - { -+ BUG_ON(!kq); - kq->pending_wptr = *kq->queue->properties.write_ptr; - } - -@@ -273,7 +281,9 @@ struct kernel_queue *kernel_queue_init(struct kfd_dev *dev, - { - struct kernel_queue *kq; - -- kq = kzalloc(sizeof(*kq), GFP_KERNEL); -+ BUG_ON(!dev); -+ -+ kq = kzalloc(sizeof(struct kernel_queue), GFP_KERNEL); - if (!kq) - return NULL; - -@@ -294,7 +304,7 @@ struct kernel_queue *kernel_queue_init(struct kfd_dev *dev, - } - - if (!kq->ops.initialize(kq, dev, type, KFD_KERNEL_QUEUE_SIZE)) { -- pr_err("Failed to init kernel queue\n"); -+ pr_err("amdkfd: failed to init kernel queue\n"); - kfree(kq); - return NULL; - } -@@ -303,37 +313,32 @@ struct kernel_queue *kernel_queue_init(struct kfd_dev *dev, - - void kernel_queue_uninit(struct kernel_queue *kq) - { -+ BUG_ON(!kq); -+ - kq->ops.uninitialize(kq); - kfree(kq); - } - --/* FIXME: Can this test be removed? */ - static __attribute__((unused)) void test_kq(struct kfd_dev *dev) - { - struct kernel_queue *kq; - uint32_t *buffer, i; - int retval; - -- pr_err("Starting kernel queue test\n"); -+ BUG_ON(!dev); -+ -+ pr_err("amdkfd: starting kernel queue test\n"); - - kq = kernel_queue_init(dev, KFD_QUEUE_TYPE_HIQ); -- if (unlikely(!kq)) { -- pr_err(" Failed to initialize HIQ\n"); -- pr_err("Kernel queue test failed\n"); -- return; -- } -+ BUG_ON(!kq); - - retval = kq->ops.acquire_packet_buffer(kq, 5, &buffer); -- if (unlikely(retval != 0)) { -- pr_err(" Failed to acquire packet buffer\n"); -- pr_err("Kernel queue test failed\n"); -- return; -- } -+ BUG_ON(retval != 0); - for (i = 0; i < 5; i++) - buffer[i] = kq->nop_packet; - kq->ops.submit_packet(kq); - -- pr_err("Ending kernel queue test\n"); -+ pr_err("amdkfd: ending kernel queue test\n"); - } - - -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_module.c b/drivers/gpu/drm/amd/amdkfd/kfd_module.c -index 0d73bea..850a562 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_module.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_module.c -@@ -61,8 +61,7 @@ MODULE_PARM_DESC(send_sigterm, - - static int amdkfd_init_completed; - --int kgd2kfd_init(unsigned int interface_version, -- const struct kgd2kfd_calls **g2f) -+int kgd2kfd_init(unsigned interface_version, const struct kgd2kfd_calls **g2f) - { - if (!amdkfd_init_completed) - return -EPROBE_DEFER; -@@ -91,7 +90,7 @@ static int __init kfd_module_init(void) - /* Verify module parameters */ - if ((sched_policy < KFD_SCHED_POLICY_HWS) || - (sched_policy > KFD_SCHED_POLICY_NO_HWS)) { -- pr_err("sched_policy has invalid value\n"); -+ pr_err("kfd: sched_policy has invalid value\n"); - return -1; - } - -@@ -99,13 +98,13 @@ static int __init kfd_module_init(void) - if ((max_num_of_queues_per_device < 1) || - (max_num_of_queues_per_device > - KFD_MAX_NUM_OF_QUEUES_PER_DEVICE)) { -- pr_err("max_num_of_queues_per_device must be between 1 to KFD_MAX_NUM_OF_QUEUES_PER_DEVICE\n"); -+ pr_err("kfd: max_num_of_queues_per_device must be between 1 to KFD_MAX_NUM_OF_QUEUES_PER_DEVICE\n"); - return -1; - } - - err = kfd_pasid_init(); - if (err < 0) -- return err; -+ goto err_pasid; - - err = kfd_chardev_init(); - if (err < 0) -@@ -127,6 +126,7 @@ static int __init kfd_module_init(void) - kfd_chardev_exit(); - err_ioctl: - kfd_pasid_exit(); -+err_pasid: - return err; - } - -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h -index 1f3a6ba..213a71e 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h -@@ -67,8 +67,7 @@ struct mqd_manager { - - int (*load_mqd)(struct mqd_manager *mm, void *mqd, - uint32_t pipe_id, uint32_t queue_id, -- struct queue_properties *p, -- struct mm_struct *mms); -+ uint32_t __user *wptr); - - int (*update_mqd)(struct mqd_manager *mm, void *mqd, - struct queue_properties *q); -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 164fa4b..e492692 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c -@@ -44,6 +44,10 @@ 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), - mqd_mem_obj); - -@@ -97,7 +101,7 @@ static int init_mqd(struct mqd_manager *mm, void **mqd, - m->cp_hqd_iq_rptr = AQL_ENABLE; - - *mqd = m; -- if (gart_addr) -+ if (gart_addr != NULL) - *gart_addr = addr; - retval = mm->update_mqd(mm, m, q); - -@@ -111,6 +115,8 @@ static int init_mqd_sdma(struct mqd_manager *mm, void **mqd, - int retval; - struct cik_sdma_rlc_registers *m; - -+ BUG_ON(!mm || !mqd || !mqd_mem_obj); -+ - retval = kfd_gtt_sa_allocate(mm->dev, - sizeof(struct cik_sdma_rlc_registers), - mqd_mem_obj); -@@ -123,7 +129,7 @@ static int init_mqd_sdma(struct mqd_manager *mm, void **mqd, - memset(m, 0, sizeof(struct cik_sdma_rlc_registers)); - - *mqd = m; -- if (gart_addr) -+ if (gart_addr != NULL) - *gart_addr = (*mqd_mem_obj)->gpu_addr; - - retval = mm->update_mqd(mm, m, q); -@@ -134,31 +140,27 @@ static int init_mqd_sdma(struct mqd_manager *mm, void **mqd, - static void uninit_mqd(struct mqd_manager *mm, void *mqd, - struct kfd_mem_obj *mqd_mem_obj) - { -+ BUG_ON(!mm || !mqd); - kfd_gtt_sa_free(mm->dev, mqd_mem_obj); - } - - static void uninit_mqd_sdma(struct mqd_manager *mm, void *mqd, - struct kfd_mem_obj *mqd_mem_obj) - { -+ BUG_ON(!mm || !mqd); - kfd_gtt_sa_free(mm->dev, mqd_mem_obj); - } - - static int load_mqd(struct mqd_manager *mm, void *mqd, uint32_t pipe_id, -- uint32_t queue_id, struct queue_properties *p, -- struct mm_struct *mms) -+ uint32_t queue_id, uint32_t __user *wptr) - { -- /* AQL write pointer counts in 64B packets, PM4/CP counts in dwords. */ -- uint32_t wptr_shift = (p->format == KFD_QUEUE_FORMAT_AQL ? 4 : 0); -- uint32_t wptr_mask = (uint32_t)((p->queue_size / sizeof(uint32_t)) - 1); -- -- return mm->dev->kfd2kgd->hqd_load(mm->dev->kgd, mqd, pipe_id, queue_id, -- (uint32_t __user *)p->write_ptr, -- wptr_shift, wptr_mask, mms); -+ return mm->dev->kfd2kgd->hqd_load -+ (mm->dev->kgd, mqd, pipe_id, queue_id, wptr); - } - - static int load_mqd_sdma(struct mqd_manager *mm, void *mqd, -- uint32_t pipe_id, uint32_t queue_id, -- struct queue_properties *p, struct mm_struct *mms) -+ uint32_t pipe_id, uint32_t queue_id, -+ uint32_t __user *wptr) - { - return mm->dev->kfd2kgd->hqd_sdma_load(mm->dev->kgd, mqd); - } -@@ -168,6 +170,10 @@ static int update_mqd(struct mqd_manager *mm, void *mqd, - { - struct cik_mqd *m; - -+ BUG_ON(!mm || !q || !mqd); -+ -+ pr_debug("kfd: In func %s\n", __func__); -+ - m = get_mqd(mqd); - m->cp_hqd_pq_control = DEFAULT_RPTR_BLOCK_SIZE | - DEFAULT_MIN_AVAIL_SIZE | PQ_ATC_EN; -@@ -182,17 +188,21 @@ static int update_mqd(struct mqd_manager *mm, void *mqd, - m->cp_hqd_pq_base_hi = upper_32_bits((uint64_t)q->queue_address >> 8); - m->cp_hqd_pq_rptr_report_addr_lo = lower_32_bits((uint64_t)q->read_ptr); - m->cp_hqd_pq_rptr_report_addr_hi = upper_32_bits((uint64_t)q->read_ptr); -- m->cp_hqd_pq_doorbell_control = DOORBELL_OFFSET(q->doorbell_off); -+ m->cp_hqd_pq_doorbell_control = DOORBELL_EN | -+ DOORBELL_OFFSET(q->doorbell_off); - - m->cp_hqd_vmid = q->vmid; - -- if (q->format == KFD_QUEUE_FORMAT_AQL) -+ if (q->format == KFD_QUEUE_FORMAT_AQL) { - m->cp_hqd_pq_control |= NO_UPDATE_RPTR; -+ } - -+ m->cp_hqd_active = 0; - q->is_active = false; - if (q->queue_size > 0 && - q->queue_address != 0 && - q->queue_percent > 0) { -+ m->cp_hqd_active = 1; - q->is_active = true; - } - -@@ -204,6 +214,8 @@ static int update_mqd_sdma(struct mqd_manager *mm, void *mqd, - { - struct cik_sdma_rlc_registers *m; - -+ BUG_ON(!mm || !mqd || !q); -+ - m = get_sdma_mqd(mqd); - m->sdma_rlc_rb_cntl = (ffs(q->queue_size / sizeof(unsigned int)) - 1) - << SDMA0_RLC0_RB_CNTL__RB_SIZE__SHIFT | -@@ -242,7 +254,7 @@ static int destroy_mqd(struct mqd_manager *mm, void *mqd, - unsigned int timeout, uint32_t pipe_id, - uint32_t queue_id) - { -- return mm->dev->kfd2kgd->hqd_destroy(mm->dev->kgd, mqd, type, timeout, -+ return mm->dev->kfd2kgd->hqd_destroy(mm->dev->kgd, type, timeout, - pipe_id, queue_id); - } - -@@ -289,6 +301,10 @@ static int init_mqd_hiq(struct mqd_manager *mm, void **mqd, - struct cik_mqd *m; - int retval; - -+ BUG_ON(!mm || !q || !mqd || !mqd_mem_obj); -+ -+ pr_debug("kfd: In func %s\n", __func__); -+ - retval = kfd_gtt_sa_allocate(mm->dev, sizeof(struct cik_mqd), - mqd_mem_obj); - -@@ -343,6 +359,10 @@ static int update_mqd_hiq(struct mqd_manager *mm, void *mqd, - { - struct cik_mqd *m; - -+ BUG_ON(!mm || !q || !mqd); -+ -+ pr_debug("kfd: In func %s\n", __func__); -+ - m = get_mqd(mqd); - m->cp_hqd_pq_control = DEFAULT_RPTR_BLOCK_SIZE | - DEFAULT_MIN_AVAIL_SIZE | -@@ -380,6 +400,8 @@ struct cik_sdma_rlc_registers *get_sdma_mqd(void *mqd) - { - struct cik_sdma_rlc_registers *m; - -+ BUG_ON(!mqd); -+ - m = (struct cik_sdma_rlc_registers *)mqd; - - return m; -@@ -390,10 +412,12 @@ struct mqd_manager *mqd_manager_init_cik(enum KFD_MQD_TYPE type, - { - struct mqd_manager *mqd; - -- if (WARN_ON(type >= KFD_MQD_TYPE_MAX)) -- return NULL; -+ BUG_ON(!dev); -+ BUG_ON(type >= KFD_MQD_TYPE_MAX); -+ -+ pr_debug("kfd: In func %s\n", __func__); - -- mqd = kzalloc(sizeof(*mqd), GFP_KERNEL); -+ mqd = kzalloc(sizeof(struct mqd_manager), GFP_KERNEL); - if (!mqd) - return NULL; - -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 73cbfe1..a9b9882 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c -@@ -85,7 +85,7 @@ static int init_mqd(struct mqd_manager *mm, void **mqd, - m->cp_hqd_iq_rptr = 1; - - *mqd = m; -- if (gart_addr) -+ if (gart_addr != NULL) - *gart_addr = addr; - retval = mm->update_mqd(mm, m, q); - -@@ -94,15 +94,10 @@ static int init_mqd(struct mqd_manager *mm, void **mqd, - - static int load_mqd(struct mqd_manager *mm, void *mqd, - uint32_t pipe_id, uint32_t queue_id, -- struct queue_properties *p, struct mm_struct *mms) -+ uint32_t __user *wptr) - { -- /* AQL write pointer counts in 64B packets, PM4/CP counts in dwords. */ -- uint32_t wptr_shift = (p->format == KFD_QUEUE_FORMAT_AQL ? 4 : 0); -- uint32_t wptr_mask = (uint32_t)((p->queue_size / sizeof(uint32_t)) - 1); -- -- return mm->dev->kfd2kgd->hqd_load(mm->dev->kgd, mqd, pipe_id, queue_id, -- (uint32_t __user *)p->write_ptr, -- wptr_shift, wptr_mask, mms); -+ return mm->dev->kfd2kgd->hqd_load -+ (mm->dev->kgd, mqd, pipe_id, queue_id, wptr); - } - - static int __update_mqd(struct mqd_manager *mm, void *mqd, -@@ -111,6 +106,10 @@ static int __update_mqd(struct mqd_manager *mm, void *mqd, - { - struct vi_mqd *m; - -+ BUG_ON(!mm || !q || !mqd); -+ -+ pr_debug("kfd: In func %s\n", __func__); -+ - m = get_mqd(mqd); - - m->cp_hqd_pq_control = 5 << CP_HQD_PQ_CONTROL__RPTR_BLOCK_SIZE__SHIFT | -@@ -118,7 +117,7 @@ static int __update_mqd(struct mqd_manager *mm, void *mqd, - mtype << CP_HQD_PQ_CONTROL__MTYPE__SHIFT; - m->cp_hqd_pq_control |= - ffs(q->queue_size / sizeof(unsigned int)) - 1 - 1; -- pr_debug("cp_hqd_pq_control 0x%x\n", m->cp_hqd_pq_control); -+ pr_debug("kfd: cp_hqd_pq_control 0x%x\n", m->cp_hqd_pq_control); - - m->cp_hqd_pq_base_lo = lower_32_bits((uint64_t)q->queue_address >> 8); - m->cp_hqd_pq_base_hi = upper_32_bits((uint64_t)q->queue_address >> 8); -@@ -127,9 +126,10 @@ static int __update_mqd(struct mqd_manager *mm, void *mqd, - m->cp_hqd_pq_rptr_report_addr_hi = upper_32_bits((uint64_t)q->read_ptr); - - m->cp_hqd_pq_doorbell_control = -+ 1 << CP_HQD_PQ_DOORBELL_CONTROL__DOORBELL_EN__SHIFT | - q->doorbell_off << - CP_HQD_PQ_DOORBELL_CONTROL__DOORBELL_OFFSET__SHIFT; -- pr_debug("cp_hqd_pq_doorbell_control 0x%x\n", -+ pr_debug("kfd: cp_hqd_pq_doorbell_control 0x%x\n", - m->cp_hqd_pq_doorbell_control); - - m->cp_hqd_eop_control = atc_bit << CP_HQD_EOP_CONTROL__EOP_ATC__SHIFT | -@@ -139,15 +139,8 @@ static int __update_mqd(struct mqd_manager *mm, void *mqd, - 3 << CP_HQD_IB_CONTROL__MIN_IB_AVAIL_SIZE__SHIFT | - mtype << CP_HQD_IB_CONTROL__MTYPE__SHIFT; - -- /* -- * HW does not clamp this field correctly. Maximum EOP queue size -- * is constrained by per-SE EOP done signal count, which is 8-bit. -- * Limit is 0xFF EOP entries (= 0x7F8 dwords). CP will not submit -- * more than (EOP entry count - 1) so a queue size of 0x800 dwords -- * is safe, giving a maximum field value of 0xA. -- */ -- m->cp_hqd_eop_control |= min(0xA, -- ffs(q->eop_ring_buffer_size / sizeof(unsigned int)) - 1 - 1); -+ m->cp_hqd_eop_control |= -+ ffs(q->eop_ring_buffer_size / sizeof(unsigned int)) - 1 - 1; - m->cp_hqd_eop_base_addr_lo = - lower_32_bits(q->eop_ring_buffer_address >> 8); - m->cp_hqd_eop_base_addr_hi = -@@ -163,10 +156,12 @@ static int __update_mqd(struct mqd_manager *mm, void *mqd, - 2 << CP_HQD_PQ_CONTROL__SLOT_BASED_WPTR__SHIFT; - } - -+ m->cp_hqd_active = 0; - q->is_active = false; - if (q->queue_size > 0 && - q->queue_address != 0 && - q->queue_percent > 0) { -+ m->cp_hqd_active = 1; - q->is_active = true; - } - -@@ -186,13 +181,14 @@ static int destroy_mqd(struct mqd_manager *mm, void *mqd, - uint32_t queue_id) - { - return mm->dev->kfd2kgd->hqd_destroy -- (mm->dev->kgd, mqd, type, timeout, -+ (mm->dev->kgd, type, timeout, - pipe_id, queue_id); - } - - static void uninit_mqd(struct mqd_manager *mm, void *mqd, - struct kfd_mem_obj *mqd_mem_obj) - { -+ BUG_ON(!mm || !mqd); - kfd_gtt_sa_free(mm->dev, mqd_mem_obj); - } - -@@ -242,10 +238,12 @@ struct mqd_manager *mqd_manager_init_vi(enum KFD_MQD_TYPE type, - { - struct mqd_manager *mqd; - -- if (WARN_ON(type >= KFD_MQD_TYPE_MAX)) -- return NULL; -+ BUG_ON(!dev); -+ BUG_ON(type >= KFD_MQD_TYPE_MAX); -+ -+ pr_debug("kfd: In func %s\n", __func__); - -- mqd = kzalloc(sizeof(*mqd), GFP_KERNEL); -+ mqd = kzalloc(sizeof(struct mqd_manager), GFP_KERNEL); - if (!mqd) - return NULL; - -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c -index 308571b..a470019 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c -@@ -26,6 +26,7 @@ - #include "kfd_device_queue_manager.h" - #include "kfd_kernel_queue.h" - #include "kfd_priv.h" -+#include "kfd_pm4_headers.h" - #include "kfd_pm4_headers_vi.h" - #include "kfd_pm4_opcodes.h" - -@@ -34,8 +35,7 @@ static inline void inc_wptr(unsigned int *wptr, unsigned int increment_bytes, - { - unsigned int temp = *wptr + increment_bytes / sizeof(uint32_t); - -- WARN((temp * sizeof(uint32_t)) > buffer_size_bytes, -- "Runlist IB overflow"); -+ BUG_ON((temp * sizeof(uint32_t)) > buffer_size_bytes); - *wptr = temp; - } - -@@ -43,12 +43,12 @@ static unsigned int build_pm4_header(unsigned int opcode, size_t packet_size) - { - union PM4_MES_TYPE_3_HEADER header; - -- header.u32All = 0; -+ header.u32all = 0; - header.opcode = opcode; - header.count = packet_size/sizeof(uint32_t) - 2; - header.type = PM4_TYPE_3; - -- return header.u32All; -+ return header.u32all; - } - - static void pm_calc_rlib_size(struct packet_manager *pm, -@@ -58,6 +58,8 @@ static void pm_calc_rlib_size(struct packet_manager *pm, - unsigned int process_count, queue_count; - unsigned int map_queue_size; - -+ BUG_ON(!pm || !rlib_size || !over_subscription); -+ - process_count = pm->dqm->processes_count; - queue_count = pm->dqm->queue_count; - -@@ -65,12 +67,15 @@ static void pm_calc_rlib_size(struct packet_manager *pm, - *over_subscription = false; - if ((process_count > 1) || queue_count > get_queues_num(pm->dqm)) { - *over_subscription = true; -- pr_debug("Over subscribed runlist\n"); -+ pr_debug("kfd: over subscribed runlist\n"); - } - -- map_queue_size = sizeof(struct pm4_mes_map_queues); -+ map_queue_size = -+ (pm->dqm->dev->device_info->asic_family == CHIP_CARRIZO) ? -+ sizeof(struct pm4_mes_map_queues) : -+ sizeof(struct pm4_map_queues); - /* calculate run list ib allocation size */ -- *rlib_size = process_count * sizeof(struct pm4_mes_map_process) + -+ *rlib_size = process_count * sizeof(struct pm4_map_process) + - queue_count * map_queue_size; - - /* -@@ -78,9 +83,9 @@ static void pm_calc_rlib_size(struct packet_manager *pm, - * when over subscription - */ - if (*over_subscription) -- *rlib_size += sizeof(struct pm4_mes_runlist); -+ *rlib_size += sizeof(struct pm4_runlist); - -- pr_debug("runlist ib size %d\n", *rlib_size); -+ pr_debug("kfd: runlist ib size %d\n", *rlib_size); - } - - static int pm_allocate_runlist_ib(struct packet_manager *pm, -@@ -91,16 +96,17 @@ static int pm_allocate_runlist_ib(struct packet_manager *pm, - { - int retval; - -- if (WARN_ON(pm->allocated)) -- return -EINVAL; -+ BUG_ON(!pm); -+ BUG_ON(pm->allocated); -+ BUG_ON(is_over_subscription == NULL); - - pm_calc_rlib_size(pm, rl_buffer_size, is_over_subscription); - - retval = kfd_gtt_sa_allocate(pm->dqm->dev, *rl_buffer_size, - &pm->ib_buffer_obj); - -- if (retval) { -- pr_err("Failed to allocate runlist IB\n"); -+ if (retval != 0) { -+ pr_err("kfd: failed to allocate runlist IB\n"); - return retval; - } - -@@ -115,16 +121,15 @@ static int pm_allocate_runlist_ib(struct packet_manager *pm, - static int pm_create_runlist(struct packet_manager *pm, uint32_t *buffer, - uint64_t ib, size_t ib_size_in_dwords, bool chain) - { -- struct pm4_mes_runlist *packet; -+ struct pm4_runlist *packet; - -- if (WARN_ON(!ib)) -- return -EFAULT; -+ BUG_ON(!pm || !buffer || !ib); - -- packet = (struct pm4_mes_runlist *)buffer; -+ packet = (struct pm4_runlist *)buffer; - -- memset(buffer, 0, sizeof(struct pm4_mes_runlist)); -- packet->header.u32All = build_pm4_header(IT_RUN_LIST, -- sizeof(struct pm4_mes_runlist)); -+ memset(buffer, 0, sizeof(struct pm4_runlist)); -+ packet->header.u32all = build_pm4_header(IT_RUN_LIST, -+ sizeof(struct pm4_runlist)); - - packet->bitfields4.ib_size = ib_size_in_dwords; - packet->bitfields4.chain = chain ? 1 : 0; -@@ -139,16 +144,20 @@ static int pm_create_runlist(struct packet_manager *pm, uint32_t *buffer, - static int pm_create_map_process(struct packet_manager *pm, uint32_t *buffer, - struct qcm_process_device *qpd) - { -- struct pm4_mes_map_process *packet; -+ struct pm4_map_process *packet; - struct queue *cur; - uint32_t num_queues; - -- packet = (struct pm4_mes_map_process *)buffer; -+ BUG_ON(!pm || !buffer || !qpd); -+ -+ packet = (struct pm4_map_process *)buffer; -+ -+ pr_debug("kfd: In func %s\n", __func__); - -- memset(buffer, 0, sizeof(struct pm4_mes_map_process)); -+ memset(buffer, 0, sizeof(struct pm4_map_process)); - -- packet->header.u32All = build_pm4_header(IT_MAP_PROCESS, -- sizeof(struct pm4_mes_map_process)); -+ packet->header.u32all = 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; -@@ -174,17 +183,21 @@ static int pm_create_map_process(struct packet_manager *pm, uint32_t *buffer, - return 0; - } - --static int pm_create_map_queue(struct packet_manager *pm, uint32_t *buffer, -+static int pm_create_map_queue_vi(struct packet_manager *pm, uint32_t *buffer, - struct queue *q, bool is_static) - { - struct pm4_mes_map_queues *packet; - bool use_static = is_static; - -+ BUG_ON(!pm || !buffer || !q); -+ -+ pr_debug("kfd: In func %s\n", __func__); -+ - packet = (struct pm4_mes_map_queues *)buffer; -- memset(buffer, 0, sizeof(struct pm4_mes_map_queues)); -+ memset(buffer, 0, sizeof(struct pm4_map_queues)); - - packet->header.u32All = build_pm4_header(IT_MAP_QUEUES, -- sizeof(struct pm4_mes_map_queues)); -+ sizeof(struct pm4_map_queues)); - packet->bitfields2.alloc_format = - alloc_format__mes_map_queues__one_per_pipe_vi; - packet->bitfields2.num_queues = 1; -@@ -212,8 +225,10 @@ static int pm_create_map_queue(struct packet_manager *pm, uint32_t *buffer, - use_static = false; /* no static queues under SDMA */ - break; - default: -- WARN(1, "queue type %d", q->properties.type); -- return -EINVAL; -+ pr_err("kfd: in %s queue type %d\n", __func__, -+ q->properties.type); -+ BUG(); -+ break; - } - packet->bitfields3.doorbell_offset = - q->properties.doorbell_off; -@@ -233,6 +248,68 @@ static int pm_create_map_queue(struct packet_manager *pm, uint32_t *buffer, - return 0; - } - -+static int pm_create_map_queue(struct packet_manager *pm, uint32_t *buffer, -+ struct queue *q, bool is_static) -+{ -+ struct pm4_map_queues *packet; -+ bool use_static = is_static; -+ -+ BUG_ON(!pm || !buffer || !q); -+ -+ pr_debug("kfd: In func %s\n", __func__); -+ -+ packet = (struct pm4_map_queues *)buffer; -+ memset(buffer, 0, sizeof(struct pm4_map_queues)); -+ -+ packet->header.u32all = build_pm4_header(IT_MAP_QUEUES, -+ sizeof(struct pm4_map_queues)); -+ packet->bitfields2.alloc_format = -+ alloc_format__mes_map_queues__one_per_pipe; -+ packet->bitfields2.num_queues = 1; -+ packet->bitfields2.queue_sel = -+ queue_sel__mes_map_queues__map_to_hws_determined_queue_slots; -+ -+ packet->bitfields2.vidmem = (q->properties.is_interop) ? -+ vidmem__mes_map_queues__uses_video_memory : -+ vidmem__mes_map_queues__uses_no_video_memory; -+ -+ switch (q->properties.type) { -+ case KFD_QUEUE_TYPE_COMPUTE: -+ case KFD_QUEUE_TYPE_DIQ: -+ packet->bitfields2.engine_sel = -+ engine_sel__mes_map_queues__compute; -+ break; -+ case KFD_QUEUE_TYPE_SDMA: -+ packet->bitfields2.engine_sel = -+ engine_sel__mes_map_queues__sdma0; -+ use_static = false; /* no static queues under SDMA */ -+ break; -+ default: -+ BUG(); -+ break; -+ } -+ -+ packet->mes_map_queues_ordinals[0].bitfields3.doorbell_offset = -+ q->properties.doorbell_off; -+ -+ packet->mes_map_queues_ordinals[0].bitfields3.is_static = -+ (use_static) ? 1 : 0; -+ -+ packet->mes_map_queues_ordinals[0].mqd_addr_lo = -+ lower_32_bits(q->gart_mqd_addr); -+ -+ packet->mes_map_queues_ordinals[0].mqd_addr_hi = -+ upper_32_bits(q->gart_mqd_addr); -+ -+ packet->mes_map_queues_ordinals[0].wptr_addr_lo = -+ lower_32_bits((uint64_t)q->properties.write_ptr); -+ -+ packet->mes_map_queues_ordinals[0].wptr_addr_hi = -+ upper_32_bits((uint64_t)q->properties.write_ptr); -+ -+ return 0; -+} -+ - static int pm_create_runlist_ib(struct packet_manager *pm, - struct list_head *queues, - uint64_t *rl_gpu_addr, -@@ -247,16 +324,19 @@ static int pm_create_runlist_ib(struct packet_manager *pm, - struct kernel_queue *kq; - bool is_over_subscription; - -+ BUG_ON(!pm || !queues || !rl_size_bytes || !rl_gpu_addr); -+ - rl_wptr = retval = proccesses_mapped = 0; - - retval = pm_allocate_runlist_ib(pm, &rl_buffer, rl_gpu_addr, - &alloc_size_bytes, &is_over_subscription); -- if (retval) -+ if (retval != 0) - return retval; - - *rl_size_bytes = alloc_size_bytes; - -- pr_debug("Building runlist ib process count: %d queues count %d\n", -+ pr_debug("kfd: In func %s\n", __func__); -+ pr_debug("kfd: building runlist ib process count: %d queues count %d\n", - pm->dqm->processes_count, pm->dqm->queue_count); - - /* build the run list ib packet */ -@@ -264,35 +344,42 @@ static int pm_create_runlist_ib(struct packet_manager *pm, - qpd = cur->qpd; - /* build map process packet */ - if (proccesses_mapped >= pm->dqm->processes_count) { -- pr_debug("Not enough space left in runlist IB\n"); -+ pr_debug("kfd: not enough space left in runlist IB\n"); - pm_release_ib(pm); - return -ENOMEM; - } - - retval = pm_create_map_process(pm, &rl_buffer[rl_wptr], qpd); -- if (retval) -+ if (retval != 0) - return retval; - - proccesses_mapped++; -- inc_wptr(&rl_wptr, sizeof(struct pm4_mes_map_process), -+ inc_wptr(&rl_wptr, sizeof(struct pm4_map_process), - alloc_size_bytes); - - list_for_each_entry(kq, &qpd->priv_queue_list, list) { - if (!kq->queue->properties.is_active) - continue; - -- pr_debug("static_queue, mapping kernel q %d, is debug status %d\n", -+ pr_debug("kfd: static_queue, mapping kernel q %d, is debug status %d\n", - kq->queue->queue, qpd->is_debug); - -- retval = pm_create_map_queue(pm, -+ if (pm->dqm->dev->device_info->asic_family == -+ CHIP_CARRIZO) -+ retval = pm_create_map_queue_vi(pm, -+ &rl_buffer[rl_wptr], -+ kq->queue, -+ qpd->is_debug); -+ else -+ retval = pm_create_map_queue(pm, - &rl_buffer[rl_wptr], - kq->queue, - qpd->is_debug); -- if (retval) -+ if (retval != 0) - return retval; - - inc_wptr(&rl_wptr, -- sizeof(struct pm4_mes_map_queues), -+ sizeof(struct pm4_map_queues), - alloc_size_bytes); - } - -@@ -300,44 +387,51 @@ static int pm_create_runlist_ib(struct packet_manager *pm, - if (!q->properties.is_active) - continue; - -- pr_debug("static_queue, mapping user queue %d, is debug status %d\n", -+ pr_debug("kfd: static_queue, mapping user queue %d, is debug status %d\n", - q->queue, qpd->is_debug); - -- retval = pm_create_map_queue(pm, -+ if (pm->dqm->dev->device_info->asic_family == -+ CHIP_CARRIZO) -+ retval = pm_create_map_queue_vi(pm, -+ &rl_buffer[rl_wptr], -+ q, -+ qpd->is_debug); -+ else -+ retval = pm_create_map_queue(pm, - &rl_buffer[rl_wptr], - q, - qpd->is_debug); - -- if (retval) -+ if (retval != 0) - return retval; - - inc_wptr(&rl_wptr, -- sizeof(struct pm4_mes_map_queues), -+ sizeof(struct pm4_map_queues), - alloc_size_bytes); - } - } - -- pr_debug("Finished map process and queues to runlist\n"); -+ pr_debug("kfd: finished map process and queues to runlist\n"); - - if (is_over_subscription) -- retval = pm_create_runlist(pm, &rl_buffer[rl_wptr], -- *rl_gpu_addr, -- alloc_size_bytes / sizeof(uint32_t), -- true); -+ pm_create_runlist(pm, &rl_buffer[rl_wptr], *rl_gpu_addr, -+ alloc_size_bytes / sizeof(uint32_t), true); - - for (i = 0; i < alloc_size_bytes / sizeof(uint32_t); i++) - pr_debug("0x%2X ", rl_buffer[i]); - pr_debug("\n"); - -- return retval; -+ return 0; - } - - int pm_init(struct packet_manager *pm, struct device_queue_manager *dqm) - { -+ BUG_ON(!dqm); -+ - pm->dqm = dqm; - mutex_init(&pm->lock); - pm->priv_queue = kernel_queue_init(dqm->dev, KFD_QUEUE_TYPE_HIQ); -- if (!pm->priv_queue) { -+ if (pm->priv_queue == NULL) { - mutex_destroy(&pm->lock); - return -ENOMEM; - } -@@ -348,6 +442,8 @@ int pm_init(struct packet_manager *pm, struct device_queue_manager *dqm) - - void pm_uninit(struct packet_manager *pm) - { -+ BUG_ON(!pm); -+ - mutex_destroy(&pm->lock); - kernel_queue_uninit(pm->priv_queue); - } -@@ -355,22 +451,25 @@ void pm_uninit(struct packet_manager *pm) - int pm_send_set_resources(struct packet_manager *pm, - struct scheduling_resources *res) - { -- struct pm4_mes_set_resources *packet; -- int retval = 0; -+ struct pm4_set_resources *packet; -+ -+ BUG_ON(!pm || !res); -+ -+ pr_debug("kfd: In func %s\n", __func__); - - mutex_lock(&pm->lock); - pm->priv_queue->ops.acquire_packet_buffer(pm->priv_queue, - sizeof(*packet) / sizeof(uint32_t), -- (unsigned int **)&packet); -- if (!packet) { -- pr_err("Failed to allocate buffer on kernel queue\n"); -- retval = -ENOMEM; -- goto out; -+ (unsigned int **)&packet); -+ if (packet == NULL) { -+ mutex_unlock(&pm->lock); -+ pr_err("kfd: failed to allocate buffer on kernel queue\n"); -+ return -ENOMEM; - } - -- memset(packet, 0, sizeof(struct pm4_mes_set_resources)); -- packet->header.u32All = build_pm4_header(IT_SET_RESOURCES, -- sizeof(struct pm4_mes_set_resources)); -+ memset(packet, 0, sizeof(struct pm4_set_resources)); -+ packet->header.u32all = build_pm4_header(IT_SET_RESOURCES, -+ sizeof(struct pm4_set_resources)); - - packet->bitfields2.queue_type = - queue_type__mes_set_resources__hsa_interface_queue_hiq; -@@ -388,10 +487,9 @@ int pm_send_set_resources(struct packet_manager *pm, - - pm->priv_queue->ops.submit_packet(pm->priv_queue); - --out: - mutex_unlock(&pm->lock); - -- return retval; -+ return 0; - } - - int pm_send_runlist(struct packet_manager *pm, struct list_head *dqm_queues) -@@ -401,24 +499,26 @@ int pm_send_runlist(struct packet_manager *pm, struct list_head *dqm_queues) - size_t rl_ib_size, packet_size_dwords; - int retval; - -+ BUG_ON(!pm || !dqm_queues); -+ - retval = pm_create_runlist_ib(pm, dqm_queues, &rl_gpu_ib_addr, - &rl_ib_size); -- if (retval) -+ if (retval != 0) - goto fail_create_runlist_ib; - -- pr_debug("runlist IB address: 0x%llX\n", rl_gpu_ib_addr); -+ pr_debug("kfd: runlist IB address: 0x%llX\n", rl_gpu_ib_addr); - -- packet_size_dwords = sizeof(struct pm4_mes_runlist) / sizeof(uint32_t); -+ packet_size_dwords = sizeof(struct pm4_runlist) / sizeof(uint32_t); - mutex_lock(&pm->lock); - - retval = pm->priv_queue->ops.acquire_packet_buffer(pm->priv_queue, - packet_size_dwords, &rl_buffer); -- if (retval) -+ if (retval != 0) - goto fail_acquire_packet_buffer; - - retval = pm_create_runlist(pm, rl_buffer, rl_gpu_ib_addr, - rl_ib_size / sizeof(uint32_t), false); -- if (retval) -+ if (retval != 0) - goto fail_create_runlist; - - pm->priv_queue->ops.submit_packet(pm->priv_queue); -@@ -432,7 +532,8 @@ int pm_send_runlist(struct packet_manager *pm, struct list_head *dqm_queues) - fail_acquire_packet_buffer: - mutex_unlock(&pm->lock); - fail_create_runlist_ib: -- pm_release_ib(pm); -+ if (pm->allocated) -+ pm_release_ib(pm); - return retval; - } - -@@ -440,21 +541,20 @@ int pm_send_query_status(struct packet_manager *pm, uint64_t fence_address, - uint32_t fence_value) - { - int retval; -- struct pm4_mes_query_status *packet; -+ struct pm4_query_status *packet; - -- if (WARN_ON(!fence_address)) -- return -EFAULT; -+ BUG_ON(!pm || !fence_address); - - mutex_lock(&pm->lock); - retval = pm->priv_queue->ops.acquire_packet_buffer( - pm->priv_queue, -- sizeof(struct pm4_mes_query_status) / sizeof(uint32_t), -+ sizeof(struct pm4_query_status) / sizeof(uint32_t), - (unsigned int **)&packet); -- if (retval) -+ if (retval != 0) - goto fail_acquire_packet_buffer; - -- packet->header.u32All = build_pm4_header(IT_QUERY_STATUS, -- sizeof(struct pm4_mes_query_status)); -+ packet->header.u32all = build_pm4_header(IT_QUERY_STATUS, -+ sizeof(struct pm4_query_status)); - - packet->bitfields2.context_id = 0; - packet->bitfields2.interrupt_sel = -@@ -468,6 +568,9 @@ int pm_send_query_status(struct packet_manager *pm, uint64_t fence_address, - packet->data_lo = lower_32_bits((uint64_t)fence_value); - - pm->priv_queue->ops.submit_packet(pm->priv_queue); -+ mutex_unlock(&pm->lock); -+ -+ return 0; - - fail_acquire_packet_buffer: - mutex_unlock(&pm->lock); -@@ -481,22 +584,24 @@ int pm_send_unmap_queue(struct packet_manager *pm, enum kfd_queue_type type, - { - int retval; - uint32_t *buffer; -- struct pm4_mes_unmap_queues *packet; -+ struct pm4_unmap_queues *packet; -+ -+ BUG_ON(!pm); - - mutex_lock(&pm->lock); - retval = pm->priv_queue->ops.acquire_packet_buffer( - pm->priv_queue, -- sizeof(struct pm4_mes_unmap_queues) / sizeof(uint32_t), -+ sizeof(struct pm4_unmap_queues) / sizeof(uint32_t), - &buffer); -- if (retval) -+ if (retval != 0) - goto err_acquire_packet_buffer; - -- packet = (struct pm4_mes_unmap_queues *)buffer; -- memset(buffer, 0, sizeof(struct pm4_mes_unmap_queues)); -- pr_debug("static_queue: unmapping queues: mode is %d , reset is %d , type is %d\n", -+ packet = (struct pm4_unmap_queues *)buffer; -+ memset(buffer, 0, sizeof(struct pm4_unmap_queues)); -+ pr_debug("kfd: static_queue: unmapping queues: mode is %d , reset is %d , type is %d\n", - mode, reset, type); -- packet->header.u32All = build_pm4_header(IT_UNMAP_QUEUES, -- sizeof(struct pm4_mes_unmap_queues)); -+ packet->header.u32all = build_pm4_header(IT_UNMAP_QUEUES, -+ sizeof(struct pm4_unmap_queues)); - switch (type) { - case KFD_QUEUE_TYPE_COMPUTE: - case KFD_QUEUE_TYPE_DIQ: -@@ -508,9 +613,8 @@ int pm_send_unmap_queue(struct packet_manager *pm, enum kfd_queue_type type, - engine_sel__mes_unmap_queues__sdma0 + sdma_engine; - break; - default: -- WARN(1, "queue type %d", type); -- retval = -EINVAL; -- goto err_invalid; -+ BUG(); -+ break; - } - - if (reset) -@@ -534,17 +638,16 @@ int pm_send_unmap_queue(struct packet_manager *pm, enum kfd_queue_type type, - break; - case KFD_PREEMPT_TYPE_FILTER_ALL_QUEUES: - packet->bitfields2.queue_sel = -- queue_sel__mes_unmap_queues__unmap_all_queues; -+ queue_sel__mes_unmap_queues__perform_request_on_all_active_queues; - break; - case KFD_PREEMPT_TYPE_FILTER_DYNAMIC_QUEUES: - /* in this case, we do not preempt static queues */ - packet->bitfields2.queue_sel = -- queue_sel__mes_unmap_queues__unmap_all_non_static_queues; -+ queue_sel__mes_unmap_queues__perform_request_on_dynamic_queues_only; - break; - default: -- WARN(1, "filter %d", mode); -- retval = -EINVAL; -- goto err_invalid; -+ BUG(); -+ break; - } - - pm->priv_queue->ops.submit_packet(pm->priv_queue); -@@ -552,8 +655,6 @@ int pm_send_unmap_queue(struct packet_manager *pm, enum kfd_queue_type type, - mutex_unlock(&pm->lock); - return 0; - --err_invalid: -- pm->priv_queue->ops.rollback_packet(pm->priv_queue); - err_acquire_packet_buffer: - mutex_unlock(&pm->lock); - return retval; -@@ -561,6 +662,8 @@ int pm_send_unmap_queue(struct packet_manager *pm, enum kfd_queue_type type, - - void pm_release_ib(struct packet_manager *pm) - { -+ BUG_ON(!pm); -+ - mutex_lock(&pm->lock); - if (pm->allocated) { - kfd_gtt_sa_free(pm->dqm->dev, pm->ib_buffer_obj); -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_pasid.c b/drivers/gpu/drm/amd/amdkfd/kfd_pasid.c -index 1e06de0..6cfe7f1 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_pasid.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_pasid.c -@@ -32,8 +32,7 @@ int kfd_pasid_init(void) - { - pasid_limit = KFD_MAX_NUM_OF_PROCESSES; - -- pasid_bitmap = kcalloc(BITS_TO_LONGS(pasid_limit), sizeof(long), -- GFP_KERNEL); -+ pasid_bitmap = kcalloc(BITS_TO_LONGS(pasid_limit), sizeof(long), GFP_KERNEL); - if (!pasid_bitmap) - return -ENOMEM; - -@@ -92,6 +91,6 @@ unsigned int kfd_pasid_alloc(void) - - void kfd_pasid_free(unsigned int pasid) - { -- if (!WARN_ON(pasid == 0 || pasid >= pasid_limit)) -- clear_bit(pasid, pasid_bitmap); -+ BUG_ON(pasid == 0 || pasid >= pasid_limit); -+ clear_bit(pasid, pasid_bitmap); - } -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_pm4_headers.h b/drivers/gpu/drm/amd/amdkfd/kfd_pm4_headers.h -index e50f73d..5b393f3 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_pm4_headers.h -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_pm4_headers.h -@@ -28,19 +28,112 @@ - #define PM4_MES_HEADER_DEFINED - union PM4_MES_TYPE_3_HEADER { - struct { -- /* reserved */ -- uint32_t reserved1:8; -- /* IT opcode */ -- uint32_t opcode:8; -- /* number of DWORDs - 1 in the information body */ -- uint32_t count:14; -- /* packet identifier. It should be 3 for type 3 packets */ -- uint32_t type:2; -+ uint32_t reserved1:8; /* < reserved */ -+ uint32_t opcode:8; /* < IT opcode */ -+ uint32_t count:14; /* < number of DWORDs - 1 -+ * in the information body. -+ */ -+ uint32_t type:2; /* < packet identifier. -+ * It should be 3 for type 3 packets -+ */ - }; - uint32_t u32all; - }; - #endif /* PM4_MES_HEADER_DEFINED */ - -+/* --------------------MES_SET_RESOURCES-------------------- */ -+ -+#ifndef PM4_MES_SET_RESOURCES_DEFINED -+#define PM4_MES_SET_RESOURCES_DEFINED -+enum set_resources_queue_type_enum { -+ queue_type__mes_set_resources__kernel_interface_queue_kiq = 0, -+ queue_type__mes_set_resources__hsa_interface_queue_hiq = 1, -+ queue_type__mes_set_resources__hsa_debug_interface_queue = 4 -+}; -+ -+struct pm4_set_resources { -+ union { -+ union PM4_MES_TYPE_3_HEADER header; /* header */ -+ uint32_t ordinal1; -+ }; -+ -+ union { -+ struct { -+ uint32_t vmid_mask:16; -+ uint32_t unmap_latency:8; -+ uint32_t reserved1:5; -+ enum set_resources_queue_type_enum queue_type:3; -+ } bitfields2; -+ uint32_t ordinal2; -+ }; -+ -+ uint32_t queue_mask_lo; -+ uint32_t queue_mask_hi; -+ uint32_t gws_mask_lo; -+ uint32_t gws_mask_hi; -+ -+ union { -+ struct { -+ uint32_t oac_mask:16; -+ uint32_t reserved2:16; -+ } bitfields7; -+ uint32_t ordinal7; -+ }; -+ -+ union { -+ struct { -+ uint32_t gds_heap_base:6; -+ uint32_t reserved3:5; -+ uint32_t gds_heap_size:6; -+ uint32_t reserved4:15; -+ } bitfields8; -+ uint32_t ordinal8; -+ }; -+ -+}; -+#endif -+ -+/*--------------------MES_RUN_LIST-------------------- */ -+ -+#ifndef PM4_MES_RUN_LIST_DEFINED -+#define PM4_MES_RUN_LIST_DEFINED -+ -+struct pm4_runlist { -+ union { -+ union PM4_MES_TYPE_3_HEADER header; /* header */ -+ uint32_t ordinal1; -+ }; -+ -+ union { -+ struct { -+ uint32_t reserved1:2; -+ uint32_t ib_base_lo:30; -+ } bitfields2; -+ uint32_t ordinal2; -+ }; -+ -+ union { -+ struct { -+ uint32_t ib_base_hi:16; -+ uint32_t reserved2:16; -+ } bitfields3; -+ uint32_t ordinal3; -+ }; -+ -+ union { -+ struct { -+ uint32_t ib_size:20; -+ uint32_t chain:1; -+ uint32_t offload_polling:1; -+ uint32_t reserved3:1; -+ uint32_t valid:1; -+ uint32_t reserved4:8; -+ } bitfields4; -+ uint32_t ordinal4; -+ }; -+ -+}; -+#endif - - /*--------------------MES_MAP_PROCESS-------------------- */ - -@@ -93,58 +186,217 @@ struct pm4_map_process { - }; - #endif - --#ifndef PM4_MES_MAP_PROCESS_DEFINED_KV_SCRATCH --#define PM4_MES_MAP_PROCESS_DEFINED_KV_SCRATCH -+/*--------------------MES_MAP_QUEUES--------------------*/ -+ -+#ifndef PM4_MES_MAP_QUEUES_DEFINED -+#define PM4_MES_MAP_QUEUES_DEFINED -+enum map_queues_queue_sel_enum { -+ queue_sel__mes_map_queues__map_to_specified_queue_slots = 0, -+ queue_sel__mes_map_queues__map_to_hws_determined_queue_slots = 1, -+ queue_sel__mes_map_queues__enable_process_queues = 2 -+}; - --struct pm4_map_process_scratch_kv { -+enum map_queues_vidmem_enum { -+ vidmem__mes_map_queues__uses_no_video_memory = 0, -+ vidmem__mes_map_queues__uses_video_memory = 1 -+}; -+ -+enum map_queues_alloc_format_enum { -+ alloc_format__mes_map_queues__one_per_pipe = 0, -+ alloc_format__mes_map_queues__all_on_one_pipe = 1 -+}; -+ -+enum map_queues_engine_sel_enum { -+ engine_sel__mes_map_queues__compute = 0, -+ engine_sel__mes_map_queues__sdma0 = 2, -+ engine_sel__mes_map_queues__sdma1 = 3 -+}; -+ -+struct pm4_map_queues { - union { -- union PM4_MES_TYPE_3_HEADER header; /* header */ -- uint32_t ordinal1; -+ union PM4_MES_TYPE_3_HEADER header; /* header */ -+ uint32_t ordinal1; - }; - - union { - struct { -- uint32_t pasid:16; -- uint32_t reserved1:8; -- uint32_t diq_enable:1; -- uint32_t process_quantum:7; -+ uint32_t reserved1:4; -+ enum map_queues_queue_sel_enum queue_sel:2; -+ uint32_t reserved2:2; -+ uint32_t vmid:4; -+ uint32_t reserved3:4; -+ enum map_queues_vidmem_enum vidmem:2; -+ uint32_t reserved4:6; -+ enum map_queues_alloc_format_enum alloc_format:2; -+ enum map_queues_engine_sel_enum engine_sel:3; -+ uint32_t num_queues:3; - } bitfields2; - uint32_t ordinal2; - }; - -+ struct { -+ union { -+ struct { -+ uint32_t is_static:1; -+ uint32_t reserved5:1; -+ uint32_t doorbell_offset:21; -+ uint32_t reserved6:3; -+ uint32_t queue:6; -+ } bitfields3; -+ uint32_t ordinal3; -+ }; -+ -+ uint32_t mqd_addr_lo; -+ uint32_t mqd_addr_hi; -+ uint32_t wptr_addr_lo; -+ uint32_t wptr_addr_hi; -+ -+ } mes_map_queues_ordinals[1]; /* 1..N of these ordinal groups */ -+ -+}; -+#endif -+ -+/*--------------------MES_QUERY_STATUS--------------------*/ -+ -+#ifndef PM4_MES_QUERY_STATUS_DEFINED -+#define PM4_MES_QUERY_STATUS_DEFINED -+enum query_status_interrupt_sel_enum { -+ interrupt_sel__mes_query_status__completion_status = 0, -+ interrupt_sel__mes_query_status__process_status = 1, -+ interrupt_sel__mes_query_status__queue_status = 2 -+}; -+ -+enum query_status_command_enum { -+ command__mes_query_status__interrupt_only = 0, -+ command__mes_query_status__fence_only_immediate = 1, -+ command__mes_query_status__fence_only_after_write_ack = 2, -+ command__mes_query_status__fence_wait_for_write_ack_send_interrupt = 3 -+}; -+ -+enum query_status_engine_sel_enum { -+ engine_sel__mes_query_status__compute = 0, -+ engine_sel__mes_query_status__sdma0_queue = 2, -+ engine_sel__mes_query_status__sdma1_queue = 3 -+}; -+ -+struct pm4_query_status { -+ union { -+ union PM4_MES_TYPE_3_HEADER header; /* header */ -+ uint32_t ordinal1; -+ }; -+ - union { - struct { -- uint32_t page_table_base:28; -- uint32_t reserved2:4; -- } bitfields3; -+ uint32_t context_id:28; -+ enum query_status_interrupt_sel_enum interrupt_sel:2; -+ enum query_status_command_enum command:2; -+ } bitfields2; -+ uint32_t ordinal2; -+ }; -+ -+ union { -+ struct { -+ uint32_t pasid:16; -+ uint32_t reserved1:16; -+ } bitfields3a; -+ struct { -+ uint32_t reserved2:2; -+ uint32_t doorbell_offset:21; -+ uint32_t reserved3:3; -+ enum query_status_engine_sel_enum engine_sel:3; -+ uint32_t reserved4:3; -+ } bitfields3b; - uint32_t ordinal3; - }; - -- uint32_t reserved3; -- uint32_t sh_mem_bases; -- uint32_t sh_mem_config; -- uint32_t sh_mem_ape1_base; -- uint32_t sh_mem_ape1_limit; -- uint32_t sh_hidden_private_base_vmid; -- uint32_t reserved4; -- uint32_t reserved5; -- uint32_t gds_addr_lo; -- uint32_t gds_addr_hi; -+ uint32_t addr_lo; -+ uint32_t addr_hi; -+ uint32_t data_lo; -+ uint32_t data_hi; -+}; -+#endif -+ -+/*--------------------MES_UNMAP_QUEUES--------------------*/ -+ -+#ifndef PM4_MES_UNMAP_QUEUES_DEFINED -+#define PM4_MES_UNMAP_QUEUES_DEFINED -+enum unmap_queues_action_enum { -+ action__mes_unmap_queues__preempt_queues = 0, -+ action__mes_unmap_queues__reset_queues = 1, -+ action__mes_unmap_queues__disable_process_queues = 2 -+}; -+ -+enum unmap_queues_queue_sel_enum { -+ queue_sel__mes_unmap_queues__perform_request_on_specified_queues = 0, -+ queue_sel__mes_unmap_queues__perform_request_on_pasid_queues = 1, -+ queue_sel__mes_unmap_queues__perform_request_on_all_active_queues = 2, -+ queue_sel__mes_unmap_queues__perform_request_on_dynamic_queues_only = 3 -+}; -+ -+enum unmap_queues_engine_sel_enum { -+ engine_sel__mes_unmap_queues__compute = 0, -+ engine_sel__mes_unmap_queues__sdma0 = 2, -+ engine_sel__mes_unmap_queues__sdma1 = 3 -+}; -+ -+struct pm4_unmap_queues { -+ union { -+ union PM4_MES_TYPE_3_HEADER header; /* header */ -+ uint32_t ordinal1; -+ }; -+ -+ union { -+ struct { -+ enum unmap_queues_action_enum action:2; -+ uint32_t reserved1:2; -+ enum unmap_queues_queue_sel_enum queue_sel:2; -+ uint32_t reserved2:20; -+ enum unmap_queues_engine_sel_enum engine_sel:3; -+ uint32_t num_queues:3; -+ } bitfields2; -+ uint32_t ordinal2; -+ }; -+ -+ union { -+ struct { -+ uint32_t pasid:16; -+ uint32_t reserved3:16; -+ } bitfields3a; -+ struct { -+ uint32_t reserved4:2; -+ uint32_t doorbell_offset0:21; -+ uint32_t reserved5:9; -+ } bitfields3b; -+ uint32_t ordinal3; -+ }; - - union { - struct { -- uint32_t num_gws:6; - uint32_t reserved6:2; -- uint32_t num_oac:4; -- uint32_t reserved7:4; -- uint32_t gds_size:6; -- uint32_t num_queues:10; -- } bitfields14; -- uint32_t ordinal14; -+ uint32_t doorbell_offset1:21; -+ uint32_t reserved7:9; -+ } bitfields4; -+ uint32_t ordinal4; -+ }; -+ -+ union { -+ struct { -+ uint32_t reserved8:2; -+ uint32_t doorbell_offset2:21; -+ uint32_t reserved9:9; -+ } bitfields5; -+ uint32_t ordinal5; -+ }; -+ -+ union { -+ struct { -+ uint32_t reserved10:2; -+ uint32_t doorbell_offset3:21; -+ uint32_t reserved11:9; -+ } bitfields6; -+ uint32_t ordinal6; - }; - -- uint32_t completion_signal_lo32; --uint32_t completion_signal_hi32; - }; - #endif - -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_pm4_headers_vi.h b/drivers/gpu/drm/amd/amdkfd/kfd_pm4_headers_vi.h -index 7c8d9b3..08c7219 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_pm4_headers_vi.h -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_pm4_headers_vi.h -@@ -30,12 +30,10 @@ union PM4_MES_TYPE_3_HEADER { - struct { - uint32_t reserved1 : 8; /* < reserved */ - uint32_t opcode : 8; /* < IT opcode */ -- uint32_t count : 14;/* < Number of DWORDS - 1 in the -- * information body -- */ -- uint32_t type : 2; /* < packet identifier -- * It should be 3 for type 3 packets -- */ -+ uint32_t count : 14;/* < number of DWORDs - 1 in the -+ information body. */ -+ uint32_t type : 2; /* < packet identifier. -+ It should be 3 for type 3 packets */ - }; - uint32_t u32All; - }; -@@ -126,10 +124,9 @@ struct pm4_mes_runlist { - uint32_t ib_size:20; - uint32_t chain:1; - uint32_t offload_polling:1; -- uint32_t reserved2:1; -+ uint32_t reserved3:1; - uint32_t valid:1; -- uint32_t process_cnt:4; -- uint32_t reserved3:4; -+ uint32_t reserved4:8; - } bitfields4; - uint32_t ordinal4; - }; -@@ -144,8 +141,8 @@ struct pm4_mes_runlist { - - struct pm4_mes_map_process { - union { -- union PM4_MES_TYPE_3_HEADER header; /* header */ -- uint32_t ordinal1; -+ union PM4_MES_TYPE_3_HEADER header; /* header */ -+ uint32_t ordinal1; - }; - - union { -@@ -156,48 +153,36 @@ struct pm4_mes_map_process { - uint32_t process_quantum:7; - } bitfields2; - uint32_t ordinal2; -- }; -+}; - - union { - struct { - uint32_t page_table_base:28; -- uint32_t reserved3:4; -+ uint32_t reserved2:4; - } bitfields3; - uint32_t ordinal3; - }; - -- uint32_t reserved; -- - uint32_t sh_mem_bases; -- uint32_t sh_mem_config; - uint32_t sh_mem_ape1_base; - uint32_t sh_mem_ape1_limit; -- -- uint32_t sh_hidden_private_base_vmid; -- -- uint32_t reserved2; -- uint32_t reserved3; -- -+ uint32_t sh_mem_config; - uint32_t gds_addr_lo; - uint32_t gds_addr_hi; - - union { - struct { - uint32_t num_gws:6; -- uint32_t reserved4:2; -+ uint32_t reserved3:2; - uint32_t num_oac:4; -- uint32_t reserved5:4; -+ uint32_t reserved4:4; - uint32_t gds_size:6; - uint32_t num_queues:10; - } bitfields10; - uint32_t ordinal10; - }; - -- uint32_t completion_signal_lo; -- uint32_t completion_signal_hi; -- - }; -- - #endif - - /*--------------------MES_MAP_QUEUES--------------------*/ -@@ -350,7 +335,7 @@ enum mes_unmap_queues_engine_sel_enum { - engine_sel__mes_unmap_queues__sdmal = 3 - }; - --struct pm4_mes_unmap_queues { -+struct PM4_MES_UNMAP_QUEUES { - union { - union PM4_MES_TYPE_3_HEADER header; /* header */ - uint32_t ordinal1; -@@ -410,101 +395,4 @@ struct pm4_mes_unmap_queues { - }; - #endif - --#ifndef PM4_MEC_RELEASE_MEM_DEFINED --#define PM4_MEC_RELEASE_MEM_DEFINED --enum RELEASE_MEM_event_index_enum { -- event_index___release_mem__end_of_pipe = 5, -- event_index___release_mem__shader_done = 6 --}; -- --enum RELEASE_MEM_cache_policy_enum { -- cache_policy___release_mem__lru = 0, -- cache_policy___release_mem__stream = 1, -- cache_policy___release_mem__bypass = 2 --}; -- --enum RELEASE_MEM_dst_sel_enum { -- dst_sel___release_mem__memory_controller = 0, -- dst_sel___release_mem__tc_l2 = 1, -- dst_sel___release_mem__queue_write_pointer_register = 2, -- dst_sel___release_mem__queue_write_pointer_poll_mask_bit = 3 --}; -- --enum RELEASE_MEM_int_sel_enum { -- int_sel___release_mem__none = 0, -- int_sel___release_mem__send_interrupt_only = 1, -- int_sel___release_mem__send_interrupt_after_write_confirm = 2, -- int_sel___release_mem__send_data_after_write_confirm = 3 --}; -- --enum RELEASE_MEM_data_sel_enum { -- data_sel___release_mem__none = 0, -- data_sel___release_mem__send_32_bit_low = 1, -- data_sel___release_mem__send_64_bit_data = 2, -- data_sel___release_mem__send_gpu_clock_counter = 3, -- data_sel___release_mem__send_cp_perfcounter_hi_lo = 4, -- data_sel___release_mem__store_gds_data_to_memory = 5 --}; -- --struct pm4_mec_release_mem { -- union { -- union PM4_MES_TYPE_3_HEADER header; /*header */ -- unsigned int ordinal1; -- }; -- -- union { -- struct { -- unsigned int event_type:6; -- unsigned int reserved1:2; -- enum RELEASE_MEM_event_index_enum event_index:4; -- unsigned int tcl1_vol_action_ena:1; -- unsigned int tc_vol_action_ena:1; -- unsigned int reserved2:1; -- unsigned int tc_wb_action_ena:1; -- unsigned int tcl1_action_ena:1; -- unsigned int tc_action_ena:1; -- unsigned int reserved3:6; -- unsigned int atc:1; -- enum RELEASE_MEM_cache_policy_enum cache_policy:2; -- unsigned int reserved4:5; -- } bitfields2; -- unsigned int ordinal2; -- }; -- -- union { -- struct { -- unsigned int reserved5:16; -- enum RELEASE_MEM_dst_sel_enum dst_sel:2; -- unsigned int reserved6:6; -- enum RELEASE_MEM_int_sel_enum int_sel:3; -- unsigned int reserved7:2; -- enum RELEASE_MEM_data_sel_enum data_sel:3; -- } bitfields3; -- unsigned int ordinal3; -- }; -- -- union { -- struct { -- unsigned int reserved8:2; -- unsigned int address_lo_32b:30; -- } bitfields4; -- struct { -- unsigned int reserved9:3; -- unsigned int address_lo_64b:29; -- } bitfields5; -- unsigned int ordinal4; -- }; -- -- unsigned int address_hi; -- -- unsigned int data_lo; -- -- unsigned int data_hi; --}; --#endif -- --enum { -- CACHE_FLUSH_AND_INV_TS_EVENT = 0x00000014 --}; -- - #endif -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h -index b397ec7..4750cab 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h -@@ -239,6 +239,11 @@ enum kfd_preempt_type_filter { - KFD_PREEMPT_TYPE_FILTER_BY_PASID - }; - -+enum kfd_preempt_type { -+ KFD_PREEMPT_TYPE_WAVEFRONT, -+ KFD_PREEMPT_TYPE_WAVEFRONT_RESET -+}; -+ - /** - * enum kfd_queue_type - * -@@ -289,13 +294,13 @@ enum kfd_queue_format { - * @write_ptr: Defines the number of dwords written to the ring buffer. - * - * @doorbell_ptr: This field aim is to notify the H/W of new packet written to -- * the queue ring buffer. This field should be similar to write_ptr and the -- * user should update this field after he updated the write_ptr. -+ * the queue ring buffer. This field should be similar to write_ptr and the user -+ * should update this field after he updated the write_ptr. - * - * @doorbell_off: The doorbell offset in the doorbell pci-bar. - * -- * @is_interop: Defines if this is a interop queue. Interop queue means that -- * the queue can access both graphics and compute resources. -+ * @is_interop: Defines if this is a interop queue. Interop queue means that the -+ * queue can access both graphics and compute resources. - * - * @is_active: Defines if the queue is active or not. - * -@@ -347,10 +352,9 @@ struct queue_properties { - * @properties: The queue properties. - * - * @mec: Used only in no cp scheduling mode and identifies to micro engine id -- * that the queue should be execute on. -+ * that the queue should be execute on. - * -- * @pipe: Used only in no cp scheduling mode and identifies the queue's pipe -- * id. -+ * @pipe: Used only in no cp scheduling mode and identifies the queue's pipe id. - * - * @queue: Used only in no cp scheduliong mode and identifies the queue's slot. - * -@@ -432,7 +436,6 @@ struct qcm_process_device { - uint32_t gds_size; - uint32_t num_gws; - uint32_t num_oac; -- uint32_t sh_hidden_private_base; - }; - - /* Data that is per-process-per device. */ -@@ -517,8 +520,8 @@ struct kfd_process { - struct mutex event_mutex; - /* All events in process hashed by ID, linked on kfd_event.events. */ - DECLARE_HASHTABLE(events, 4); -- /* struct slot_page_header.event_pages */ -- struct list_head signal_event_pages; -+ struct list_head signal_event_pages; /* struct slot_page_header. -+ event_pages */ - u32 next_nonsignal_event_id; - size_t signal_event_count; - }; -@@ -556,10 +559,8 @@ struct kfd_process_device *kfd_create_process_device_data(struct kfd_dev *dev, - struct kfd_process *p); - - /* Process device data iterator */ --struct kfd_process_device *kfd_get_first_process_device_data( -- struct kfd_process *p); --struct kfd_process_device *kfd_get_next_process_device_data( -- struct kfd_process *p, -+struct kfd_process_device *kfd_get_first_process_device_data(struct kfd_process *p); -+struct kfd_process_device *kfd_get_next_process_device_data(struct kfd_process *p, - struct kfd_process_device *pdd); - bool kfd_has_process_device_data(struct kfd_process *p); - -@@ -572,8 +573,7 @@ unsigned int kfd_pasid_alloc(void); - void kfd_pasid_free(unsigned int pasid); - - /* Doorbells */ --int kfd_doorbell_init(struct kfd_dev *kfd); --void kfd_doorbell_fini(struct kfd_dev *kfd); -+void kfd_doorbell_init(struct kfd_dev *kfd); - int kfd_doorbell_mmap(struct kfd_process *process, struct vm_area_struct *vma); - u32 __iomem *kfd_get_kernel_doorbell(struct kfd_dev *kfd, - unsigned int *doorbell_off); -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c -index c74cf22..035bbc9 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c -@@ -79,7 +79,9 @@ struct kfd_process *kfd_create_process(const struct task_struct *thread) - { - struct kfd_process *process; - -- if (!thread->mm) -+ BUG_ON(!kfd_process_wq); -+ -+ if (thread->mm == NULL) - return ERR_PTR(-EINVAL); - - /* Only the pthreads threading model is supported. */ -@@ -99,7 +101,7 @@ struct kfd_process *kfd_create_process(const struct task_struct *thread) - /* A prior open of /dev/kfd could have already created the process. */ - process = find_process(thread); - if (process) -- pr_debug("Process already found\n"); -+ pr_debug("kfd: process already found\n"); - - if (!process) - process = create_process(thread); -@@ -115,7 +117,7 @@ struct kfd_process *kfd_get_process(const struct task_struct *thread) - { - struct kfd_process *process; - -- if (!thread->mm) -+ if (thread->mm == NULL) - return ERR_PTR(-EINVAL); - - /* Only the pthreads threading model is supported. */ -@@ -200,8 +202,10 @@ static void kfd_process_destroy_delayed(struct rcu_head *rcu) - struct kfd_process_release_work *work; - struct kfd_process *p; - -+ BUG_ON(!kfd_process_wq); -+ - p = container_of(rcu, struct kfd_process, rcu); -- WARN_ON(atomic_read(&p->mm->mm_count) <= 0); -+ BUG_ON(atomic_read(&p->mm->mm_count) <= 0); - - mmdrop(p->mm); - -@@ -225,8 +229,7 @@ static void kfd_process_notifier_release(struct mmu_notifier *mn, - * mmu_notifier srcu is read locked - */ - p = container_of(mn, struct kfd_process, mmu_notifier); -- if (WARN_ON(p->mm != mm)) -- return; -+ BUG_ON(p->mm != mm); - - mutex_lock(&kfd_processes_mutex); - hash_del_rcu(&p->kfd_processes); -@@ -247,7 +250,7 @@ static void kfd_process_notifier_release(struct mmu_notifier *mn, - kfd_dbgmgr_destroy(pdd->dev->dbgmgr); - - if (pdd->reset_wavefronts) { -- pr_warn("Resetting all wave fronts\n"); -+ pr_warn("amdkfd: Resetting all wave fronts\n"); - dbgdev_wave_reset_wavefronts(pdd->dev, p); - pdd->reset_wavefronts = false; - } -@@ -404,6 +407,8 @@ void kfd_unbind_process_from_device(struct kfd_dev *dev, unsigned int pasid) - struct kfd_process *p; - struct kfd_process_device *pdd; - -+ BUG_ON(dev == NULL); -+ - /* - * Look for the process that matches the pasid. If there is no such - * process, we either released it in amdkfd's own notifier, or there -@@ -444,16 +449,14 @@ void kfd_unbind_process_from_device(struct kfd_dev *dev, unsigned int pasid) - mutex_unlock(&p->mutex); - } - --struct kfd_process_device *kfd_get_first_process_device_data( -- struct kfd_process *p) -+struct kfd_process_device *kfd_get_first_process_device_data(struct kfd_process *p) - { - return list_first_entry(&p->per_device_data, - struct kfd_process_device, - per_device_list); - } - --struct kfd_process_device *kfd_get_next_process_device_data( -- struct kfd_process *p, -+struct kfd_process_device *kfd_get_next_process_device_data(struct kfd_process *p, - struct kfd_process_device *pdd) - { - if (list_is_last(&pdd->per_device_list, &p->per_device_data)) -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c -index 4142d63..97f7f7e 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c -@@ -32,9 +32,12 @@ static inline struct process_queue_node *get_queue_by_qid( - { - struct process_queue_node *pqn; - -+ BUG_ON(!pqm); -+ - list_for_each_entry(pqn, &pqm->queues, process_queue_list) { -- if ((pqn->q && pqn->q->properties.queue_id == qid) || -- (pqn->kq && pqn->kq->queue->properties.queue_id == qid)) -+ if (pqn->q && pqn->q->properties.queue_id == qid) -+ return pqn; -+ if (pqn->kq && pqn->kq->queue->properties.queue_id == qid) - return pqn; - } - -@@ -46,13 +49,17 @@ static int find_available_queue_slot(struct process_queue_manager *pqm, - { - unsigned long found; - -+ BUG_ON(!pqm || !qid); -+ -+ pr_debug("kfd: in %s\n", __func__); -+ - found = find_first_zero_bit(pqm->queue_slot_bitmap, - KFD_MAX_NUM_OF_QUEUES_PER_PROCESS); - -- pr_debug("The new slot id %lu\n", found); -+ pr_debug("kfd: the new slot id %lu\n", found); - - if (found >= KFD_MAX_NUM_OF_QUEUES_PER_PROCESS) { -- pr_info("Cannot open more queues for process with pasid %d\n", -+ pr_info("amdkfd: Can not open more queues for process with pasid %d\n", - pqm->process->pasid); - return -ENOMEM; - } -@@ -65,11 +72,13 @@ static int find_available_queue_slot(struct process_queue_manager *pqm, - - int pqm_init(struct process_queue_manager *pqm, struct kfd_process *p) - { -+ BUG_ON(!pqm); -+ - INIT_LIST_HEAD(&pqm->queues); - pqm->queue_slot_bitmap = - kzalloc(DIV_ROUND_UP(KFD_MAX_NUM_OF_QUEUES_PER_PROCESS, - BITS_PER_BYTE), GFP_KERNEL); -- if (!pqm->queue_slot_bitmap) -+ if (pqm->queue_slot_bitmap == NULL) - return -ENOMEM; - pqm->process = p; - -@@ -81,6 +90,10 @@ void pqm_uninit(struct process_queue_manager *pqm) - int retval; - struct process_queue_node *pqn, *next; - -+ BUG_ON(!pqm); -+ -+ pr_debug("In func %s\n", __func__); -+ - list_for_each_entry_safe(pqn, next, &pqm->queues, process_queue_list) { - retval = pqm_destroy_queue( - pqm, -@@ -89,7 +102,7 @@ void pqm_uninit(struct process_queue_manager *pqm) - pqn->kq->queue->properties.queue_id); - - if (retval != 0) { -- pr_err("failed to destroy queue\n"); -+ pr_err("kfd: failed to destroy queue\n"); - return; - } - } -@@ -104,6 +117,8 @@ static int create_cp_queue(struct process_queue_manager *pqm, - { - int retval; - -+ retval = 0; -+ - /* Doorbell initialized in user space*/ - q_properties->doorbell_ptr = NULL; - -@@ -116,13 +131,16 @@ static int create_cp_queue(struct process_queue_manager *pqm, - - retval = init_queue(q, q_properties); - if (retval != 0) -- return retval; -+ goto err_init_queue; - - (*q)->device = dev; - (*q)->process = pqm->process; - -- pr_debug("PQM After init queue"); -+ pr_debug("kfd: PQM After init queue"); -+ -+ return retval; - -+err_init_queue: - return retval; - } - -@@ -143,6 +161,8 @@ int pqm_create_queue(struct process_queue_manager *pqm, - int num_queues = 0; - struct queue *cur; - -+ BUG_ON(!pqm || !dev || !properties || !qid); -+ - memset(&q_properties, 0, sizeof(struct queue_properties)); - memcpy(&q_properties, properties, sizeof(struct queue_properties)); - q = NULL; -@@ -165,7 +185,7 @@ int pqm_create_queue(struct process_queue_manager *pqm, - list_for_each_entry(cur, &pdd->qpd.queues_list, list) - num_queues++; - if (num_queues >= dev->device_info->max_no_of_hqd/2) -- return -ENOSPC; -+ return (-ENOSPC); - } - - retval = find_available_queue_slot(pqm, qid); -@@ -177,7 +197,7 @@ int pqm_create_queue(struct process_queue_manager *pqm, - dev->dqm->ops.register_process(dev->dqm, &pdd->qpd); - } - -- pqn = kzalloc(sizeof(*pqn), GFP_KERNEL); -+ pqn = kzalloc(sizeof(struct process_queue_node), GFP_KERNEL); - if (!pqn) { - retval = -ENOMEM; - goto err_allocate_pqn; -@@ -208,7 +228,7 @@ int pqm_create_queue(struct process_queue_manager *pqm, - if ((sched_policy == KFD_SCHED_POLICY_HWS_NO_OVERSUBSCRIPTION) && - ((dev->dqm->processes_count >= VMID_PER_DEVICE) || - (dev->dqm->queue_count >= get_queues_num(dev->dqm)))) { -- pr_err("Over-subscription is not allowed in radeon_kfd.sched_policy == 1\n"); -+ pr_err("kfd: over-subscription is not allowed in radeon_kfd.sched_policy == 1\n"); - retval = -EPERM; - goto err_create_queue; - } -@@ -225,7 +245,7 @@ int pqm_create_queue(struct process_queue_manager *pqm, - break; - case KFD_QUEUE_TYPE_DIQ: - kq = kernel_queue_init(dev, KFD_QUEUE_TYPE_DIQ); -- if (!kq) { -+ if (kq == NULL) { - retval = -ENOMEM; - goto err_create_queue; - } -@@ -236,22 +256,22 @@ int pqm_create_queue(struct process_queue_manager *pqm, - kq, &pdd->qpd); - break; - default: -- WARN(1, "Invalid queue type %d", type); -- retval = -EINVAL; -+ BUG(); -+ break; - } - - if (retval != 0) { -- pr_err("DQM create queue failed\n"); -+ pr_debug("Error dqm create queue\n"); - goto err_create_queue; - } - -- pr_debug("PQM After DQM create queue\n"); -+ pr_debug("kfd: PQM After DQM create queue\n"); - - list_add(&pqn->process_queue_list, &pqm->queues); - - if (q) { - *properties = q->properties; -- pr_debug("PQM done creating queue\n"); -+ pr_debug("kfd: PQM done creating queue\n"); - print_queue_properties(properties); - } - -@@ -277,11 +297,14 @@ int pqm_destroy_queue(struct process_queue_manager *pqm, unsigned int qid) - - dqm = NULL; - -+ BUG_ON(!pqm); - retval = 0; - -+ pr_debug("kfd: In Func %s\n", __func__); -+ - pqn = get_queue_by_qid(pqm, qid); -- if (!pqn) { -- pr_err("Queue id does not match any known queue\n"); -+ if (pqn == NULL) { -+ pr_err("kfd: queue id does not match any known queue\n"); - return -EINVAL; - } - -@@ -290,8 +313,7 @@ int pqm_destroy_queue(struct process_queue_manager *pqm, unsigned int qid) - dev = pqn->kq->dev; - if (pqn->q) - dev = pqn->q->device; -- if (WARN_ON(!dev)) -- return -ENODEV; -+ BUG_ON(!dev); - - pdd = kfd_get_process_device_data(dev, pqm->process); - if (!pdd) { -@@ -331,9 +353,12 @@ int pqm_update_queue(struct process_queue_manager *pqm, unsigned int qid, - int retval; - struct process_queue_node *pqn; - -+ BUG_ON(!pqm); -+ - pqn = get_queue_by_qid(pqm, qid); - if (!pqn) { -- pr_debug("No queue %d exists for update operation\n", qid); -+ pr_debug("amdkfd: No queue %d exists for update operation\n", -+ qid); - return -EFAULT; - } - -@@ -356,6 +381,8 @@ struct kernel_queue *pqm_get_kernel_queue( - { - struct process_queue_node *pqn; - -+ BUG_ON(!pqm); -+ - pqn = get_queue_by_qid(pqm, qid); - if (pqn && pqn->kq) - return pqn->kq; -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_queue.c b/drivers/gpu/drm/amd/amdkfd/kfd_queue.c -index a5315d4..0ab1970 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_queue.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_queue.c -@@ -65,15 +65,17 @@ void print_queue(struct queue *q) - - int init_queue(struct queue **q, const struct queue_properties *properties) - { -- struct queue *tmp_q; -+ struct queue *tmp; - -- tmp_q = kzalloc(sizeof(*tmp_q), GFP_KERNEL); -- if (!tmp_q) -+ BUG_ON(!q); -+ -+ tmp = kzalloc(sizeof(struct queue), GFP_KERNEL); -+ if (!tmp) - return -ENOMEM; - -- memcpy(&tmp_q->properties, properties, sizeof(*properties)); -+ memcpy(&tmp->properties, properties, sizeof(struct queue_properties)); - -- *q = tmp_q; -+ *q = tmp; - return 0; - } - -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c -index e0b78fd..8c6e47c 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c -@@ -108,6 +108,9 @@ static int kfd_topology_get_crat_acpi(void *crat_image, size_t *size) - static void kfd_populated_cu_info_cpu(struct kfd_topology_device *dev, - struct crat_subtype_computeunit *cu) - { -+ BUG_ON(!dev); -+ BUG_ON(!cu); -+ - dev->node_props.cpu_cores_count = cu->num_cpu_cores; - dev->node_props.cpu_core_id_base = cu->processor_id_low; - if (cu->hsa_capability & CRAT_CU_FLAGS_IOMMU_PRESENT) -@@ -120,6 +123,9 @@ static void kfd_populated_cu_info_cpu(struct kfd_topology_device *dev, - static void kfd_populated_cu_info_gpu(struct kfd_topology_device *dev, - struct crat_subtype_computeunit *cu) - { -+ BUG_ON(!dev); -+ BUG_ON(!cu); -+ - dev->node_props.simd_id_base = cu->processor_id_low; - dev->node_props.simd_count = cu->num_simd_cores; - dev->node_props.lds_size_in_kb = cu->lds_size_in_kb; -@@ -142,6 +148,8 @@ static int kfd_parse_subtype_cu(struct crat_subtype_computeunit *cu) - struct kfd_topology_device *dev; - int i = 0; - -+ BUG_ON(!cu); -+ - pr_info("Found CU entry in CRAT table with proximity_domain=%d caps=%x\n", - cu->proximity_domain, cu->hsa_capability); - list_for_each_entry(dev, &topology_device_list, list) { -@@ -169,6 +177,8 @@ static int kfd_parse_subtype_mem(struct crat_subtype_memory *mem) - struct kfd_topology_device *dev; - int i = 0; - -+ BUG_ON(!mem); -+ - pr_info("Found memory entry in CRAT table with proximity_domain=%d\n", - mem->promixity_domain); - list_for_each_entry(dev, &topology_device_list, list) { -@@ -213,6 +223,8 @@ static int kfd_parse_subtype_cache(struct crat_subtype_cache *cache) - struct kfd_topology_device *dev; - uint32_t id; - -+ BUG_ON(!cache); -+ - id = cache->processor_id_low; - - pr_info("Found cache entry in CRAT table with processor_id=%d\n", id); -@@ -262,6 +274,8 @@ static int kfd_parse_subtype_iolink(struct crat_subtype_iolink *iolink) - uint32_t id_from; - uint32_t id_to; - -+ BUG_ON(!iolink); -+ - id_from = iolink->proximity_domain_from; - id_to = iolink->proximity_domain_to; - -@@ -309,6 +323,8 @@ static int kfd_parse_subtype(struct crat_subtype_generic *sub_type_hdr) - struct crat_subtype_iolink *iolink; - int ret = 0; - -+ BUG_ON(!sub_type_hdr); -+ - switch (sub_type_hdr->type) { - case CRAT_SUBTYPE_COMPUTEUNIT_AFFINITY: - cu = (struct crat_subtype_computeunit *)sub_type_hdr; -@@ -352,6 +368,8 @@ static void kfd_release_topology_device(struct kfd_topology_device *dev) - struct kfd_cache_properties *cache; - struct kfd_iolink_properties *iolink; - -+ BUG_ON(!dev); -+ - list_del(&dev->list); - - while (dev->mem_props.next != &dev->mem_props) { -@@ -398,7 +416,7 @@ static struct kfd_topology_device *kfd_create_topology_device(void) - struct kfd_topology_device *dev; - - dev = kfd_alloc_struct(dev); -- if (!dev) { -+ if (dev == NULL) { - pr_err("No memory to allocate a topology device"); - return NULL; - } -@@ -657,7 +675,7 @@ static ssize_t node_show(struct kobject *kobj, struct attribute *attr, - dev->node_props.simd_count); - - if (dev->mem_bank_count < dev->node_props.mem_banks_count) { -- pr_info_once("mem_banks_count truncated from %d to %d\n", -+ pr_info_once("kfd: mem_banks_count truncated from %d to %d\n", - dev->node_props.mem_banks_count, - dev->mem_bank_count); - sysfs_show_32bit_prop(buffer, "mem_banks_count", -@@ -755,6 +773,8 @@ static void kfd_remove_sysfs_node_entry(struct kfd_topology_device *dev) - struct kfd_cache_properties *cache; - struct kfd_mem_properties *mem; - -+ BUG_ON(!dev); -+ - if (dev->kobj_iolink) { - list_for_each_entry(iolink, &dev->io_link_props, list) - if (iolink->kobj) { -@@ -809,12 +829,12 @@ static int kfd_build_sysfs_node_entry(struct kfd_topology_device *dev, - int ret; - uint32_t i; - -- if (WARN_ON(dev->kobj_node)) -- return -EEXIST; -+ BUG_ON(!dev); - - /* - * Creating the sysfs folders - */ -+ BUG_ON(dev->kobj_node); - dev->kobj_node = kfd_alloc_struct(dev->kobj_node); - if (!dev->kobj_node) - return -ENOMEM; -@@ -947,7 +967,7 @@ static int kfd_topology_update_sysfs(void) - int ret; - - pr_info("Creating topology SYSFS entries\n"); -- if (!sys_props.kobj_topology) { -+ if (sys_props.kobj_topology == NULL) { - sys_props.kobj_topology = - kfd_alloc_struct(sys_props.kobj_topology); - if (!sys_props.kobj_topology) -@@ -1107,8 +1127,10 @@ static struct kfd_topology_device *kfd_assign_gpu(struct kfd_dev *gpu) - struct kfd_topology_device *dev; - struct kfd_topology_device *out_dev = NULL; - -+ BUG_ON(!gpu); -+ - list_for_each_entry(dev, &topology_device_list, list) -- if (!dev->gpu && (dev->node_props.simd_count > 0)) { -+ if (dev->gpu == NULL && dev->node_props.simd_count > 0) { - dev->gpu = gpu; - out_dev = dev; - break; -@@ -1131,9 +1153,11 @@ int kfd_topology_add_device(struct kfd_dev *gpu) - struct kfd_topology_device *dev; - int res; - -+ BUG_ON(!gpu); -+ - gpu_id = kfd_generate_gpu_id(gpu); - -- pr_debug("Adding new GPU (ID: 0x%x) to topology\n", gpu_id); -+ pr_debug("kfd: Adding new GPU (ID: 0x%x) to topology\n", gpu_id); - - down_write(&topology_lock); - /* -@@ -1156,8 +1180,8 @@ int kfd_topology_add_device(struct kfd_dev *gpu) - * GPU vBIOS - */ - -- /* Update the SYSFS tree, since we added another topology -- * device -+ /* -+ * Update the SYSFS tree, since we added another topology device - */ - if (kfd_topology_update_sysfs() < 0) - kfd_topology_release_sysfs(); -@@ -1176,7 +1200,7 @@ int kfd_topology_add_device(struct kfd_dev *gpu) - - if (dev->gpu->device_info->asic_family == CHIP_CARRIZO) { - dev->node_props.capability |= HSA_CAP_DOORBELL_PACKET_TYPE; -- pr_info("Adding doorbell packet type capability\n"); -+ pr_info("amdkfd: adding doorbell packet type capability\n"); - } - - res = 0; -@@ -1196,6 +1220,8 @@ int kfd_topology_remove_device(struct kfd_dev *gpu) - uint32_t gpu_id; - int res = -ENODEV; - -+ BUG_ON(!gpu); -+ - down_write(&topology_lock); - - list_for_each_entry(dev, &topology_device_list, list) -diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h -index 94277cb..36f3766 100644 ---- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h -+++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h -@@ -41,11 +41,6 @@ struct kgd_dev; - - struct kgd_mem; - --enum kfd_preempt_type { -- KFD_PREEMPT_TYPE_WAVEFRONT_DRAIN = 0, -- KFD_PREEMPT_TYPE_WAVEFRONT_RESET, --}; -- - enum kgd_memory_pool { - KGD_POOL_SYSTEM_CACHEABLE = 1, - KGD_POOL_SYSTEM_WRITECOMBINE = 2, -@@ -87,17 +82,6 @@ struct kgd2kfd_shared_resources { - size_t doorbell_start_offset; - }; - --struct tile_config { -- uint32_t *tile_config_ptr; -- uint32_t *macro_tile_config_ptr; -- uint32_t num_tile_configs; -- uint32_t num_macro_tile_configs; -- -- uint32_t gb_addr_config; -- uint32_t num_banks; -- uint32_t num_ranks; --}; -- - /** - * struct kfd2kgd_calls - * -@@ -139,11 +123,6 @@ struct tile_config { - * - * @get_fw_version: Returns FW versions from the header - * -- * @set_scratch_backing_va: Sets VA for scratch backing memory of a VMID. -- * Only used for no cp scheduling mode -- * -- * @get_tile_config: Returns GPU-specific tiling mode information -- * - * This structure contains function pointers to services that the kgd driver - * provides to amdkfd driver. - * -@@ -174,16 +153,14 @@ struct kfd2kgd_calls { - int (*init_interrupts)(struct kgd_dev *kgd, uint32_t pipe_id); - - int (*hqd_load)(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id, -- uint32_t queue_id, uint32_t __user *wptr, -- uint32_t wptr_shift, uint32_t wptr_mask, -- struct mm_struct *mm); -+ uint32_t queue_id, uint32_t __user *wptr); - - int (*hqd_sdma_load)(struct kgd_dev *kgd, void *mqd); - - bool (*hqd_is_occupied)(struct kgd_dev *kgd, uint64_t queue_address, - uint32_t pipe_id, uint32_t queue_id); - -- int (*hqd_destroy)(struct kgd_dev *kgd, void *mqd, uint32_t reset_type, -+ int (*hqd_destroy)(struct kgd_dev *kgd, uint32_t reset_type, - unsigned int timeout, uint32_t pipe_id, - uint32_t queue_id); - -@@ -215,9 +192,6 @@ struct kfd2kgd_calls { - - uint16_t (*get_fw_version)(struct kgd_dev *kgd, - enum kgd_engine_type type); -- void (*set_scratch_backing_va)(struct kgd_dev *kgd, -- uint64_t va, uint32_t vmid); -- int (*get_tile_config)(struct kgd_dev *kgd, struct tile_config *config); - }; - - /** -diff --git a/drivers/gpu/drm/radeon/radeon_kfd.c b/drivers/gpu/drm/radeon/radeon_kfd.c -index f6578c9..a2ab6dc 100644 ---- a/drivers/gpu/drm/radeon/radeon_kfd.c -+++ b/drivers/gpu/drm/radeon/radeon_kfd.c -@@ -75,14 +75,12 @@ static int kgd_init_pipeline(struct kgd_dev *kgd, uint32_t pipe_id, - uint32_t hpd_size, uint64_t hpd_gpu_addr); - static int kgd_init_interrupts(struct kgd_dev *kgd, uint32_t pipe_id); - static int kgd_hqd_load(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id, -- uint32_t queue_id, uint32_t __user *wptr, -- uint32_t wptr_shift, uint32_t wptr_mask, -- struct mm_struct *mm); -+ uint32_t queue_id, uint32_t __user *wptr); - static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd); - static bool kgd_hqd_is_occupied(struct kgd_dev *kgd, uint64_t queue_address, - uint32_t pipe_id, uint32_t queue_id); - --static int kgd_hqd_destroy(struct kgd_dev *kgd, void *mqd, uint32_t reset_type, -+static int kgd_hqd_destroy(struct kgd_dev *kgd, uint32_t reset_type, - unsigned int timeout, uint32_t pipe_id, - uint32_t queue_id); - static bool kgd_hqd_sdma_is_occupied(struct kgd_dev *kgd, void *mqd); -@@ -484,9 +482,7 @@ static inline struct cik_sdma_rlc_registers *get_sdma_mqd(void *mqd) - } - - static int kgd_hqd_load(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id, -- uint32_t queue_id, uint32_t __user *wptr, -- uint32_t wptr_shift, uint32_t wptr_mask, -- struct mm_struct *mm) -+ uint32_t queue_id, uint32_t __user *wptr) - { - uint32_t wptr_shadow, is_wptr_shadow_valid; - struct cik_mqd *m; -@@ -640,7 +636,7 @@ static bool kgd_hqd_sdma_is_occupied(struct kgd_dev *kgd, void *mqd) - return false; - } - --static int kgd_hqd_destroy(struct kgd_dev *kgd, void *mqd, uint32_t reset_type, -+static int kgd_hqd_destroy(struct kgd_dev *kgd, uint32_t reset_type, - unsigned int timeout, uint32_t pipe_id, - uint32_t queue_id) - { -@@ -789,8 +785,7 @@ static uint32_t kgd_address_watch_get_offset(struct kgd_dev *kgd, - unsigned int watch_point_id, - unsigned int reg_offset) - { -- return watchRegs[watch_point_id * ADDRESS_WATCH_REG_MAX + reg_offset] -- / 4; -+ return watchRegs[watch_point_id * ADDRESS_WATCH_REG_MAX + reg_offset]; - } - - static bool get_atc_vmid_pasid_mapping_valid(struct kgd_dev *kgd, uint8_t vmid) -diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h -index f7015aa..5bb2b45 100644 ---- a/include/uapi/linux/kfd_ioctl.h -+++ b/include/uapi/linux/kfd_ioctl.h -@@ -232,34 +232,6 @@ struct kfd_ioctl_wait_events_args { - __u32 wait_result; /* from KFD */ - }; - --struct kfd_ioctl_set_scratch_backing_va_args { -- __u64 va_addr; /* to KFD */ -- __u32 gpu_id; /* to KFD */ -- __u32 pad; --}; -- --struct kfd_ioctl_get_tile_config_args { -- /* to KFD: pointer to tile array */ -- __u64 tile_config_ptr; -- /* to KFD: pointer to macro tile array */ -- __u64 macro_tile_config_ptr; -- /* to KFD: array size allocated by user mode -- * from KFD: array size filled by kernel -- */ -- __u32 num_tile_configs; -- /* to KFD: array size allocated by user mode -- * from KFD: array size filled by kernel -- */ -- __u32 num_macro_tile_configs; -- -- __u32 gpu_id; /* to KFD */ -- __u32 gb_addr_config; /* from KFD */ -- __u32 num_banks; /* from KFD */ -- __u32 num_ranks; /* from KFD */ -- /* struct size can be extended later if needed -- * without breaking ABI compatibility -- */ --}; - - #define AMDKFD_IOCTL_BASE 'K' - #define AMDKFD_IO(nr) _IO(AMDKFD_IOCTL_BASE, nr) -@@ -315,13 +287,7 @@ struct kfd_ioctl_get_tile_config_args { - #define AMDKFD_IOC_DBG_WAVE_CONTROL \ - AMDKFD_IOW(0x10, struct kfd_ioctl_dbg_wave_control_args) - --#define AMDKFD_IOC_SET_SCRATCH_BACKING_VA \ -- AMDKFD_IOWR(0x11, struct kfd_ioctl_set_scratch_backing_va_args) -- --#define AMDKFD_IOC_GET_TILE_CONFIG \ -- AMDKFD_IOWR(0x12, struct kfd_ioctl_get_tile_config_args) -- - #define AMDKFD_COMMAND_START 0x01 --#define AMDKFD_COMMAND_END 0x13 -+#define AMDKFD_COMMAND_END 0x11 - - #endif --- -2.7.4 - |