<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    Hi Zongmin,<br>
    <br>
    well what seems to happen here is that the ASIC is not correctly
    initialized.<br>
    <br>
    Alex knows that better than me, but I think the issue on SI was just
    that the BIOS was somehow buggy didn't correctly initialized the
    register.<br>
    <br>
    What you have here is most likely something completely different and
    you are just working around the symptoms.<br>
    <br>
    Regards,<br>
    Christian.<br>
    <br>
    <div class="moz-cite-prefix">Am 16.12.21 um 10:35 schrieb 周宗敏:<br>
    </div>
    <blockquote type="cite" cite="mid:10btoflyx2v-10buydfdywo@nsmail6.0">
      
      <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://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.kernel.org%2Fpub%2Fscm%2Flinux%2Fkernel%2Fgit%2Ftorvalds%2Flinux.git%2Fcommit%2F%3Fid%3D0ca223b029a261e82fb2f50c52eb85d510f4260e&data=04%7C01%7Cchristian.koenig%40amd.com%7C4101c805880a478e13d308d9c0777e78%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637752441782176211%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=s%2B1S%2B9HwwZMV9jvitYCGufFpd2Dqjplo9lGOK4xJI3c%3D&reserved=0" originalsrc="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0ca223b029a261e82fb2f50c52eb85d510f4260e" shash="Uw6H+SfHbLGDTfEYbmDncPmGhABuG7ZOWnZ/ODDtNFOSh0YS1SyvpSvq4OxipuBIdu2euBKZFiOuTmbzoiZmwb6wE0FoAvZfrgEkJotb/FnfiSBF5KMeQZKApezqezbfxgmCLNnFmdlxsWf6fScDCYiN3Ifk2S4p82jpXyUYJbY=" _src="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0ca223b029a261e82fb2f50c52eb85d510f4260e" moz-do-not-send="true">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" moz-do-not-send="true"></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>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>
    </blockquote>
    <br>
  </body>
</html>