<ol class=" list-paddingleft-2" style="list-style-type: decimal;"><li><p>the problematic boards that I have tested is [AMD/ATI] Lexa PRO [Radeon RX 550/550X] ; and the vbios version : 113-RXF9310-C09-BT</p></li><li><p>When an exception occurs I can see the following changes in the values of vram size get from RREG32(mmCONFIG_MEMSIZE) ,</p><p>it seems to have garbage in the upper 16 bits </p><p><img src="/nsmail/js/ueditor/php/upload/image/20211216/1639623655693645.png" title="1639623655693645.png" alt="image.png"><br></p><p><br></p></li><li><p>and then I can also see some dmesg like below:</p><p>when vram size register have garbage,we may see error message like below:</p><p>amdgpu 0000:09:00.0: VRAM: 4286582784M 0x000000F400000000 - 0x000FF8F4FFFFFFFF (4286582784M used)</p><p>the correct message should like below:</p><p>amdgpu 0000:09:00.0: VRAM: 4096M 0x000000F400000000 - 0x000000F4FFFFFFFF (4096M used)</p><p><br></p><p>if you have any problems,please send me mail.</p><p>thanks very much.</p><p><br></p></li></ol><p>---- </p><p><strong>主 题:</strong><span id="subject">Re: [PATCH] drm/amdgpu: fixup bad vram size on gmc v8</span>
<br><strong>日 期:</strong><span id="date">2021-12-16 04:23</span>
<br><strong>发件人:</strong><span id="from">Alex Deucher</span>
<br><strong>收件人:</strong><span id="to">Zongmin Zhou</span>
</p><p><br>
</p><p>On Wed, Dec 15, 2021 at 10:31 AM Zongmin Zhou<zhouzongmin@kylinos.cn>wrote:<br>><br>> Some boards(like RX550) seem to have garbage in the upper<br>> 16 bits of the vram size register. Check for<br>> this and clamp the size properly. Fixes<br>> boards reporting bogus amounts of vram.<br>><br>> after add this patch,the maximum GPU VRAM size is 64GB,<br>> otherwise only 64GB vram size will be used.<br><br>Can you provide some examples of problematic boards and possibly a<br>vbios image from the problematic board? What values are you seeing?<br>It would be nice to see what the boards are reporting and whether the<br>lower 16 bits are actually correct or if it is some other issue. This<br>register is undefined until the asic has been initialized. The vbios<br>programs it as part of it's asic init sequence (either via vesa/gop or<br>the OS driver).<br><br>Alex<br><br><br>><br>> Signed-off-by: Zongmin Zhou<zhouzongmin@kylinos.cn><br>> ---<br>> drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 13 ++++++++++---<br>> 1 file changed, 10 insertions(+), 3 deletions(-)<br>><br>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c<br>> index 492ebed2915b..63b890f1e8af 100644<br>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c<br>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c<br>> @@ -515,10 +515,10 @@ static void gmc_v8_0_mc_program(struct amdgpu_device *adev)<br>> static int gmc_v8_0_mc_init(struct amdgpu_device *adev)<br>> {<br>> int r;<br>> + u32 tmp;<br>><br>> adev->gmc.vram_width = amdgpu_atombios_get_vram_width(adev);<br>> if (!adev->gmc.vram_width) {<br>> - u32 tmp;<br>> int chansize, numchan;<br>><br>> /* Get VRAM informations */<br>> @@ -562,8 +562,15 @@ static int gmc_v8_0_mc_init(struct amdgpu_device *adev)<br>> adev->gmc.vram_width = numchan * chansize;<br>> }<br>> /* size in MB on si */<br>> - adev->gmc.mc_vram_size = RREG32(mmCONFIG_MEMSIZE) * 1024ULL * 1024ULL;<br>> - adev->gmc.real_vram_size = RREG32(mmCONFIG_MEMSIZE) * 1024ULL * 1024ULL;<br>> + tmp = RREG32(mmCONFIG_MEMSIZE);<br>> + /* some boards may have garbage in the upper 16 bits */<br>> + if (tmp & 0xffff0000) {<br>> + DRM_INFO("Probable bad vram size: 0x%08x\n", tmp);<br>> + if (tmp & 0xffff)<br>> + tmp &= 0xffff;<br>> + }<br>> + adev->gmc.mc_vram_size = tmp * 1024ULL * 1024ULL;<br>> + adev->gmc.real_vram_size = adev->gmc.mc_vram_size;<br>><br>> if (!(adev->flags & AMD_IS_APU)) {<br>> r = amdgpu_device_resize_fb_bar(adev);<br>> --<br>> 2.25.1<br>><br>><br>> No virus found<br>> Checked by Hillstone Network AntiVirus<br></zhouzongmin@kylinos.cn></zhouzongmin@kylinos.cn></p>