DDR5 channels are 32 bit rather than 64, report the width properly
in the log.

Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2468
Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>
---
 .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c  | 20 +++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
index ef4b9a41f20a..6b3bdc27f778 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
@@ -327,10 +327,14 @@ amdgpu_atomfirmware_get_vram_info(struct amdgpu_device 
*adev,
                                        mem_channel_number = 
igp_info->v11.umachannelnumber;
                                        if (!mem_channel_number)
                                                mem_channel_number = 1;
-                                       /* channel width is 64 */
-                                       if (vram_width)
-                                               *vram_width = 
mem_channel_number * 64;
                                        mem_type = igp_info->v11.memorytype;
+                                       if ((mem_type == Ddr5MemType) ||
+                                           (mem_type == LpDdr5MemType))
+                                               mem_channel_width = 32;
+                                       else
+                                               mem_channel_width = 64;
+                                       if (vram_width)
+                                               *vram_width = 
mem_channel_number * mem_channel_width;
                                        if (vram_type)
                                                *vram_type = 
convert_atom_mem_type_to_vram_type(adev, mem_type);
                                        break;
@@ -345,10 +349,14 @@ amdgpu_atomfirmware_get_vram_info(struct amdgpu_device 
*adev,
                                        mem_channel_number = 
igp_info->v21.umachannelnumber;
                                        if (!mem_channel_number)
                                                mem_channel_number = 1;
-                                       /* channel width is 64 */
-                                       if (vram_width)
-                                               *vram_width = 
mem_channel_number * 64;
                                        mem_type = igp_info->v21.memorytype;
+                                       if ((mem_type == Ddr5MemType) ||
+                                           (mem_type == LpDdr5MemType))
+                                               mem_channel_width = 32;
+                                       else
+                                               mem_channel_width = 64;
+                                       if (vram_width)
+                                               *vram_width = 
mem_channel_number * mem_channel_width;
                                        if (vram_type)
                                                *vram_type = 
convert_atom_mem_type_to_vram_type(adev, mem_type);
                                        break;
-- 
2.40.1

Reply via email to