<p>Hi  Christian,</p><p><br></p><p>I'm  testing for GPU passthrough feature, so I pass through this GPU to  virtual machine to use. It  based on arm64 system.</p><br><p>As far as i know, Alex had dealt with a similar problems on dri/radeon/si.c .  Maybe they have a same reason to cause it?</p><p>the history commit message is below:</p><p><a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0ca223b029a261e82fb2f50c52eb85d510f4260e" _src="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0ca223b029a261e82fb2f50c52eb85d510f4260e">https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0ca223b029a261e82fb2f50c52eb85d510f4260e</a></p><p><img src="/nsmail/js/ueditor/php/upload/image/20211216/1639647221165090.png" title="1639647221165090.png" alt="image.png"></p><p><br></p><p>Thanks very much.</p><p>   <br></p><p>----</p><p>    </p><p><strong>主 题:</strong><span id="subject">Re: 回复: Re: [PATCH] drm/amdgpu: fixup bad vram size on gmc v8</span>
            <br><strong>日 期:</strong><span id="date">2021-12-16 16:15</span>
            <br><strong>发件人:</strong><span id="from">Christian König</span>
            <br><strong>收件人:</strong><span id="to">周宗敏Alex Deucher</span>
            
        </p><p><br>
        </p><p><meta http-equiv="Content-Type" content="text/html; charset=utf-8">Hi Zongmin,<br>
    <br>
    that strongly sounds like the ASIC is not correctly initialized when
    trying to read the register.<br>
    <br>
    What board and environment are you using this GPU with? Is that a
    normal x86 system?<br>
    <br>
    Regards,<br>
    Christian.<br>
    <br>
    </p><p>Am 16.12.21 um 04:11 schrieb 周宗敏:<br>
    </p><blockquote type="cite" cite="mid:q0npc15ith-q0npc15iti@nsmail6.0"><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" moz-do-not-send="true"><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></blockquote><p><br>
  </p>