Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu: use correct register mask to extract field

Aldebaran has different register mask definitions for
regiter MC_VM_XGMI_LFB_CNTL. Use the correct masks
to interpret fields of this register.

Signed-off-by: Oak Zeng <Oak.Zeng@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Oak Zeng and committed by
Alex Deucher
72c148d7 38d4e463

+13 -5
+13 -5
drivers/gpu/drm/amd/amdgpu/gfxhub_v1_1.c
··· 54 54 seg_size = REG_GET_FIELD( 55 55 RREG32_SOC15(GC, 0, mmMC_VM_XGMI_LFB_SIZE_ALDE), 56 56 MC_VM_XGMI_LFB_SIZE, PF_LFB_SIZE) << 24; 57 + max_region = 58 + REG_GET_FIELD(xgmi_lfb_cntl, MC_VM_XGMI_LFB_CNTL_ALDE, PF_MAX_REGION); 57 59 } else { 58 60 xgmi_lfb_cntl = RREG32_SOC15(GC, 0, mmMC_VM_XGMI_LFB_CNTL); 59 61 seg_size = REG_GET_FIELD( 60 62 RREG32_SOC15(GC, 0, mmMC_VM_XGMI_LFB_SIZE), 61 63 MC_VM_XGMI_LFB_SIZE, PF_LFB_SIZE) << 24; 64 + max_region = 65 + REG_GET_FIELD(xgmi_lfb_cntl, MC_VM_XGMI_LFB_CNTL, PF_MAX_REGION); 62 66 } 63 67 64 - max_region = 65 - REG_GET_FIELD(xgmi_lfb_cntl, MC_VM_XGMI_LFB_CNTL, PF_MAX_REGION); 66 68 67 69 68 70 switch (adev->asic_type) { ··· 91 89 if (adev->gmc.xgmi.num_physical_nodes > max_num_physical_nodes) 92 90 return -EINVAL; 93 91 94 - adev->gmc.xgmi.physical_node_id = 95 - REG_GET_FIELD(xgmi_lfb_cntl, MC_VM_XGMI_LFB_CNTL, 96 - PF_LFB_REGION); 92 + if (adev->asic_type == CHIP_ALDEBARAN) { 93 + adev->gmc.xgmi.physical_node_id = 94 + REG_GET_FIELD(xgmi_lfb_cntl, MC_VM_XGMI_LFB_CNTL_ALDE, 95 + PF_LFB_REGION); 96 + } else { 97 + adev->gmc.xgmi.physical_node_id = 98 + REG_GET_FIELD(xgmi_lfb_cntl, MC_VM_XGMI_LFB_CNTL, 99 + PF_LFB_REGION); 100 + } 97 101 98 102 if (adev->gmc.xgmi.physical_node_id > max_physical_node_id) 99 103 return -EINVAL;