This information is already available in adev.

Reviewed-by: Edward O'Callaghan <funfunc...@folklore1984.net>
Reviewed-by: Felix Kuehling <felix.kuehl...@amd.com>
Acked-by: Christian König <christian.koe...@amd.com>
Signed-off-by: Andres Rodriguez <andre...@gmail.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c | 12 ++++++------
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c | 12 ++++++------
 2 files changed, 12 insertions(+), 12 deletions(-)

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 910f9d3..5254562 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
@@ -22,42 +22,40 @@
 
 #include <linux/fdtable.h>
 #include <linux/uaccess.h>
 #include <linux/firmware.h>
 #include <drm/drmP.h>
 #include "amdgpu.h"
 #include "amdgpu_amdkfd.h"
 #include "cikd.h"
 #include "cik_sdma.h"
 #include "amdgpu_ucode.h"
 #include "gfx_v7_0.h"
 #include "gca/gfx_7_2_d.h"
 #include "gca/gfx_7_2_enum.h"
 #include "gca/gfx_7_2_sh_mask.h"
 #include "oss/oss_2_0_d.h"
 #include "oss/oss_2_0_sh_mask.h"
 #include "gmc/gmc_7_1_d.h"
 #include "gmc/gmc_7_1_sh_mask.h"
 #include "cik_structs.h"
 
-#define CIK_PIPE_PER_MEC       (4)
-
 enum {
        MAX_TRAPID = 8,         /* 3 bits in the bitfield. */
        MAX_WATCH_ADDRESSES = 4
 };
 
 enum {
        ADDRESS_WATCH_REG_ADDR_HI = 0,
        ADDRESS_WATCH_REG_ADDR_LO,
        ADDRESS_WATCH_REG_CNTL,
        ADDRESS_WATCH_REG_MAX
 };
 
 /*  not defined in the CI/KV reg file  */
 enum {
        ADDRESS_WATCH_REG_CNTL_ATC_BIT = 0x10000000UL,
        ADDRESS_WATCH_REG_CNTL_DEFAULT_MASK = 0x00FFFFFF,
        ADDRESS_WATCH_REG_ADDLOW_MASK_EXTENSION = 0x03000000,
        /* extend the mask to 26 bits to match the low address field */
        ADDRESS_WATCH_REG_ADDLOW_SHIFT = 6,
        ADDRESS_WATCH_REG_ADDHIGH_MASK = 0xFFFF
@@ -169,42 +167,44 @@ static void lock_srbm(struct kgd_dev *kgd, uint32_t mec, 
uint32_t pipe,
                        uint32_t queue, uint32_t vmid)
 {
        struct amdgpu_device *adev = get_amdgpu_device(kgd);
        uint32_t value = PIPEID(pipe) | MEID(mec) | VMID(vmid) | QUEUEID(queue);
 
        mutex_lock(&adev->srbm_mutex);
        WREG32(mmSRBM_GFX_CNTL, value);
 }
 
 static void unlock_srbm(struct kgd_dev *kgd)
 {
        struct amdgpu_device *adev = get_amdgpu_device(kgd);
 
        WREG32(mmSRBM_GFX_CNTL, 0);
        mutex_unlock(&adev->srbm_mutex);
 }
 
 static void acquire_queue(struct kgd_dev *kgd, uint32_t pipe_id,
                                uint32_t queue_id)
 {
-       uint32_t mec = (++pipe_id / CIK_PIPE_PER_MEC) + 1;
-       uint32_t pipe = (pipe_id % CIK_PIPE_PER_MEC);
+       struct amdgpu_device *adev = get_amdgpu_device(kgd);
+
+       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);
 }
 
 static void release_queue(struct kgd_dev *kgd)
 {
        unlock_srbm(kgd);
 }
 
 static void kgd_program_sh_mem_settings(struct kgd_dev *kgd, uint32_t vmid,
                                        uint32_t sh_mem_config,
                                        uint32_t sh_mem_ape1_base,
                                        uint32_t sh_mem_ape1_limit,
                                        uint32_t sh_mem_bases)
 {
        struct amdgpu_device *adev = get_amdgpu_device(kgd);
 
        lock_srbm(kgd, 0, 0, 0, vmid);
 
        WREG32(mmSH_MEM_CONFIG, sh_mem_config);
@@ -237,42 +237,42 @@ static int kgd_set_pasid_vmid_mapping(struct kgd_dev 
*kgd, unsigned int pasid,
 
        /* Mapping vmid to pasid also for IH block */
        WREG32(mmIH_VMID_0_LUT + vmid, pasid_mapping);
 
        return 0;
 }
 
 static int kgd_init_pipeline(struct kgd_dev *kgd, uint32_t pipe_id,
                                uint32_t hpd_size, uint64_t hpd_gpu_addr)
 {
        /* amdgpu owns the per-pipe state */
        return 0;
 }
 
 static int kgd_init_interrupts(struct kgd_dev *kgd, uint32_t pipe_id)
 {
        struct amdgpu_device *adev = get_amdgpu_device(kgd);
        uint32_t mec;
        uint32_t pipe;
 
-       mec = (pipe_id / CIK_PIPE_PER_MEC) + 1;
-       pipe = (pipe_id % CIK_PIPE_PER_MEC);
+       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);
 
        WREG32(mmCPC_INT_CNTL, CP_INT_CNTL_RING0__TIME_STAMP_INT_ENABLE_MASK |
                        CP_INT_CNTL_RING0__OPCODE_ERROR_INT_ENABLE_MASK);
 
        unlock_srbm(kgd);
 
        return 0;
 }
 
 static inline uint32_t get_sdma_base_addr(struct cik_sdma_rlc_registers *m)
 {
        uint32_t retval;
 
        retval = m->sdma_engine_id * SDMA1_REGISTER_OFFSET +
                        m->sdma_queue_id * KFD_CIK_SDMA_QUEUE_OFFSET;
 
        pr_debug("kfd: sdma base address: 0x%x\n", retval);
 
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 6ba94e9..133d066 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
@@ -22,42 +22,40 @@
 
 #include <linux/module.h>
 #include <linux/fdtable.h>
 #include <linux/uaccess.h>
 #include <linux/firmware.h>
 #include <drm/drmP.h>
 #include "amdgpu.h"
 #include "amdgpu_amdkfd.h"
 #include "amdgpu_ucode.h"
 #include "gfx_v8_0.h"
 #include "gca/gfx_8_0_sh_mask.h"
 #include "gca/gfx_8_0_d.h"
 #include "gca/gfx_8_0_enum.h"
 #include "oss/oss_3_0_sh_mask.h"
 #include "oss/oss_3_0_d.h"
 #include "gmc/gmc_8_1_sh_mask.h"
 #include "gmc/gmc_8_1_d.h"
 #include "vi_structs.h"
 #include "vid.h"
 
-#define VI_PIPE_PER_MEC        (4)
-
 struct cik_sdma_rlc_registers;
 
 /*
  * Register access functions
  */
 
 static void kgd_program_sh_mem_settings(struct kgd_dev *kgd, uint32_t vmid,
                uint32_t sh_mem_config,
                uint32_t sh_mem_ape1_base, uint32_t sh_mem_ape1_limit,
                uint32_t sh_mem_bases);
 static int kgd_set_pasid_vmid_mapping(struct kgd_dev *kgd, unsigned int pasid,
                unsigned int vmid);
 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);
 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);
@@ -130,42 +128,44 @@ static void lock_srbm(struct kgd_dev *kgd, uint32_t mec, 
uint32_t pipe,
                        uint32_t queue, uint32_t vmid)
 {
        struct amdgpu_device *adev = get_amdgpu_device(kgd);
        uint32_t value = PIPEID(pipe) | MEID(mec) | VMID(vmid) | QUEUEID(queue);
 
        mutex_lock(&adev->srbm_mutex);
        WREG32(mmSRBM_GFX_CNTL, value);
 }
 
 static void unlock_srbm(struct kgd_dev *kgd)
 {
        struct amdgpu_device *adev = get_amdgpu_device(kgd);
 
        WREG32(mmSRBM_GFX_CNTL, 0);
        mutex_unlock(&adev->srbm_mutex);
 }
 
 static void acquire_queue(struct kgd_dev *kgd, uint32_t pipe_id,
                                uint32_t queue_id)
 {
-       uint32_t mec = (++pipe_id / VI_PIPE_PER_MEC) + 1;
-       uint32_t pipe = (pipe_id % VI_PIPE_PER_MEC);
+       struct amdgpu_device *adev = get_amdgpu_device(kgd);
+
+       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);
 }
 
 static void release_queue(struct kgd_dev *kgd)
 {
        unlock_srbm(kgd);
 }
 
 static void kgd_program_sh_mem_settings(struct kgd_dev *kgd, uint32_t vmid,
                                        uint32_t sh_mem_config,
                                        uint32_t sh_mem_ape1_base,
                                        uint32_t sh_mem_ape1_limit,
                                        uint32_t sh_mem_bases)
 {
        struct amdgpu_device *adev = get_amdgpu_device(kgd);
 
        lock_srbm(kgd, 0, 0, 0, vmid);
 
        WREG32(mmSH_MEM_CONFIG, sh_mem_config);
@@ -199,42 +199,42 @@ static int kgd_set_pasid_vmid_mapping(struct kgd_dev 
*kgd, unsigned int pasid,
 
        /* Mapping vmid to pasid also for IH block */
        WREG32(mmIH_VMID_0_LUT + vmid, pasid_mapping);
 
        return 0;
 }
 
 static int kgd_init_pipeline(struct kgd_dev *kgd, uint32_t pipe_id,
                                uint32_t hpd_size, uint64_t hpd_gpu_addr)
 {
        /* amdgpu owns the per-pipe state */
        return 0;
 }
 
 static int kgd_init_interrupts(struct kgd_dev *kgd, uint32_t pipe_id)
 {
        struct amdgpu_device *adev = get_amdgpu_device(kgd);
        uint32_t mec;
        uint32_t pipe;
 
-       mec = (++pipe_id / VI_PIPE_PER_MEC) + 1;
-       pipe = (pipe_id % VI_PIPE_PER_MEC);
+       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);
 
        WREG32(mmCPC_INT_CNTL, CP_INT_CNTL_RING0__TIME_STAMP_INT_ENABLE_MASK);
 
        unlock_srbm(kgd);
 
        return 0;
 }
 
 static inline uint32_t get_sdma_base_addr(struct cik_sdma_rlc_registers *m)
 {
        return 0;
 }
 
 static inline struct vi_mqd *get_mqd(void *mqd)
 {
        return (struct vi_mqd *)mqd;
 }
 
-- 
2.9.3

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to