drm/amdgpu: adjust register address calculation
authorStanley.Yang <Stanley.Yang@amd.com>
Fri, 11 Feb 2022 09:35:18 +0000 (17:35 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 11 Feb 2022 21:19:59 +0000 (16:19 -0500)
the UMC_STATUS register is not linear, adjust offset
calculation formula to get correct address

Signed-off-by: Stanley.Yang <Stanley.Yang@amd.com>
Reviewed-by: Tao Zhou <tao.zhou1@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/umc_v6_7.c

index e613511..87e4ef1 100644 (file)
@@ -47,6 +47,13 @@ static inline uint32_t get_umc_v6_7_reg_offset(struct amdgpu_device *adev,
                                              uint32_t umc_inst,
                                              uint32_t ch_inst)
 {
+       uint32_t index = umc_inst * adev->umc.channel_inst_num + ch_inst;
+
+       /* adjust umc and channel index offset,
+        * the register address is not linear on each umc instace */
+       umc_inst = index / 4;
+       ch_inst = index % 4;
+
        return adev->umc.channel_offs * ch_inst + UMC_V6_7_INST_DIST * umc_inst;
 }