tree:   git://people.freedesktop.org/~agd5f/linux.git amd-staging-drm-next
head:   a0c072e23e6f2543a12009d312387356c870f14f
commit: ace1073bfa90b6ccc9c2d9959c3603008d656b3d [226/251] drm/amdgpu: add save 
restore list cntl gpm and srm firmware support
reproduce:
        # apt-get install sparse
        git checkout ace1073bfa90b6ccc9c2d9959c3603008d656b3d
        make ARCH=x86_64 allmodconfig
        make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

   drivers/gpu/drm/amd/amdgpu/clearstate_gfx9.h:937:7: sparse: Using plain 
integer as NULL pointer
   drivers/gpu/drm/amd/amdgpu/clearstate_gfx9.h:941:7: sparse: Using plain 
integer as NULL pointer
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:339:28: sparse: incorrect type in 
assignment (different base types) @@    expected unsigned int volatile 
[unsigned] [usertype] <noident> @@    got latile [unsigned] [usertype] 
<noident> @@
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:339:28:    expected unsigned int 
volatile [unsigned] [usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:339:28:    got restricted __le32 
[usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:408:41: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:409:46: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:410:59: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:411:64: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:412:41: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:413:46: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:414:58: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:415:63: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:416:41: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:417:46: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:418:58: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:419:63: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:421:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:462:36: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:463:41: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:473:35: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:474:40: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:484:35: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:485:40: sparse: cast to restricted 
__le32
>> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:494:25: sparse: cast to restricted 
>> __le16
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:495:25: sparse: cast to restricted 
__le16
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:499:36: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:500:41: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:502:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:504:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:506:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:508:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:510:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:512:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:514:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:516:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:518:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:528:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:530:57: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:535:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:537:53: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:550:36: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:551:41: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:563:17: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:565:17: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:577:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:577:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:577:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:584:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:584:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:584:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:591:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:591:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:591:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:598:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:598:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:598:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:626:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:626:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:626:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:626:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:626:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:626:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:632:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:632:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:632:25: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:641:33: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:641:33: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:641:33: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:641:33: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:641:33: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:641:33: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:646:33: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:646:33: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:646:33: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:712:25: sparse: incorrect type in 
assignment (different base types) @@    expected unsigned int volatile 
[unsigned] [usertype] <noident> @@    got latile [unsigned] [usertype] 
<noident> @@
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:712:25:    expected unsigned int 
volatile [unsigned] [usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:712:25:    got restricted __le32 
[usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:713:25: sparse: incorrect type in 
assignment (different base types) @@    expected unsigned int volatile 
[unsigned] [usertype] <noident> @@    got latile [unsigned] [usertype] 
<noident> @@
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:713:25:    expected unsigned int 
volatile [unsigned] [usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:713:25:    got restricted __le32 
[usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:715:25: sparse: incorrect type in 
assignment (different base types) @@    expected unsigned int volatile 
[unsigned] [usertype] <noident> @@    got latile [unsigned] [usertype] 
<noident> @@
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:715:25:    expected unsigned int 
volatile [unsigned] [usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:715:25:    got restricted __le32 
[usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:716:25: sparse: incorrect type in 
assignment (different base types) @@    expected unsigned int volatile 
[unsigned] [usertype] <noident> @@    got latile [unsigned] [usertype] 
<noident> @@
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:716:25:    expected unsigned int 
volatile [unsigned] [usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:716:25:    got restricted __le32 
[usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:717:25: sparse: incorrect type in 
assignment (different base types) @@    expected unsigned int volatile 
[unsigned] [usertype] <noident> @@    got latile [unsigned] [usertype] 
<noident> @@
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:717:25:    expected unsigned int 
volatile [unsigned] [usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:717:25:    got restricted __le32 
[usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:722:49: sparse: incorrect type in 
assignment (different base types) @@    expected unsigned int volatile 
[unsigned] [usertype] <noident> @@    got latile [unsigned] [usertype] 
<noident> @@
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:722:49:    expected unsigned int 
volatile [unsigned] [usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:722:49:    got restricted __le32 
[usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:724:49: sparse: incorrect type in 
assignment (different base types) @@    expected unsigned int volatile 
[unsigned] [usertype] <noident> @@    got latile [unsigned] [usertype] 
<noident> @@
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:724:49:    expected unsigned int 
volatile [unsigned] [usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:724:49:    got restricted __le32 
[usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:727:57: sparse: incorrect type in 
assignment (different base types) @@    expected unsigned int volatile 
[unsigned] [usertype] <noident> @@    got latile [unsigned] [usertype] 
<noident> @@
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:727:57:    expected unsigned int 
volatile [unsigned] [usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:727:57:    got restricted __le32 
[usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:734:25: sparse: incorrect type in 
assignment (different base types) @@    expected unsigned int volatile 
[unsigned] [usertype] <noident> @@    got latile [unsigned] [usertype] 
<noident> @@
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:734:25:    expected unsigned int 
volatile [unsigned] [usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:734:25:    got restricted __le32 
[usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:735:25: sparse: incorrect type in 
assignment (different base types) @@    expected unsigned int volatile 
[unsigned] [usertype] <noident> @@    got latile [unsigned] [usertype] 
<noident> @@
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:735:25:    expected unsigned int 
volatile [unsigned] [usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:735:25:    got restricted __le32 
[usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:737:25: sparse: incorrect type in 
assignment (different base types) @@    expected unsigned int volatile 
[unsigned] [usertype] <noident> @@    got latile [unsigned] [usertype] 
<noident> @@
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:737:25:    expected unsigned int 
volatile [unsigned] [usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:737:25:    got restricted __le32 
[usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:738:25: sparse: incorrect type in 
assignment (different base types) @@    expected unsigned int volatile 
[unsigned] [usertype] <noident> @@    got latile [unsigned] [usertype] 
<noident> @@
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:738:25:    expected unsigned int 
volatile [unsigned] [usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:738:25:    got restricted __le32 
[usertype] <noident>
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:807:34: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:808:40: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:809:38: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:815:34: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:816:40: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:817:38: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:823:34: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:824:40: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:825:38: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:831:34: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:832:40: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:833:38: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:839:34: sparse: cast to restricted 
__le32
   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:840:40: sparse: cast to restricted 
__le32
>> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:841:38: sparse: too many warnings

vim +494 drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c

   402  
   403  static void gfx_v9_0_init_rlc_ext_microcode(struct amdgpu_device *adev)
   404  {
   405          const struct rlc_firmware_header_v2_1 *rlc_hdr;
   406  
   407          rlc_hdr = (const struct rlc_firmware_header_v2_1 
*)adev->gfx.rlc_fw->data;
   408          adev->gfx.rlc_srlc_fw_version = 
le32_to_cpu(rlc_hdr->save_restore_list_cntl_ucode_ver);
   409          adev->gfx.rlc_srlc_feature_version = 
le32_to_cpu(rlc_hdr->save_restore_list_cntl_feature_ver);
   410          adev->gfx.rlc.save_restore_list_cntl_size_bytes = 
le32_to_cpu(rlc_hdr->save_restore_list_cntl_size_bytes);
   411          adev->gfx.rlc.save_restore_list_cntl = (u8 *)rlc_hdr + 
le32_to_cpu(rlc_hdr->save_restore_list_cntl_offset_bytes);
   412          adev->gfx.rlc_srlg_fw_version = 
le32_to_cpu(rlc_hdr->save_restore_list_gpm_ucode_ver);
   413          adev->gfx.rlc_srlg_feature_version = 
le32_to_cpu(rlc_hdr->save_restore_list_gpm_feature_ver);
   414          adev->gfx.rlc.save_restore_list_gpm_size_bytes = 
le32_to_cpu(rlc_hdr->save_restore_list_gpm_size_bytes);
   415          adev->gfx.rlc.save_restore_list_gpm = (u8 *)rlc_hdr + 
le32_to_cpu(rlc_hdr->save_restore_list_gpm_offset_bytes);
   416          adev->gfx.rlc_srls_fw_version = 
le32_to_cpu(rlc_hdr->save_restore_list_srm_ucode_ver);
   417          adev->gfx.rlc_srls_feature_version = 
le32_to_cpu(rlc_hdr->save_restore_list_srm_feature_ver);
 > 418          adev->gfx.rlc.save_restore_list_srm_size_bytes = 
 > le32_to_cpu(rlc_hdr->save_restore_list_srm_size_bytes);
   419          adev->gfx.rlc.save_restore_list_srm = (u8 *)rlc_hdr + 
le32_to_cpu(rlc_hdr->save_restore_list_srm_offset_bytes);
   420          adev->gfx.rlc.reg_list_format_direct_reg_list_length =
   421                          
le32_to_cpu(rlc_hdr->reg_list_format_direct_reg_list_length);
   422  }
   423  
   424  static int gfx_v9_0_init_microcode(struct amdgpu_device *adev)
   425  {
   426          const char *chip_name;
   427          char fw_name[30];
   428          int err;
   429          struct amdgpu_firmware_info *info = NULL;
   430          const struct common_firmware_header *header = NULL;
   431          const struct gfx_firmware_header_v1_0 *cp_hdr;
   432          const struct rlc_firmware_header_v2_0 *rlc_hdr;
   433          unsigned int *tmp = NULL;
   434          unsigned int i = 0;
   435          uint16_t version_major;
   436          uint16_t version_minor;
   437  
   438          DRM_DEBUG("\n");
   439  
   440          switch (adev->asic_type) {
   441          case CHIP_VEGA10:
   442                  chip_name = "vega10";
   443                  break;
   444          case CHIP_VEGA12:
   445                  chip_name = "vega12";
   446                  break;
   447          case CHIP_RAVEN:
   448                  chip_name = "raven";
   449                  break;
   450          default:
   451                  BUG();
   452          }
   453  
   454          snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", 
chip_name);
   455          err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev);
   456          if (err)
   457                  goto out;
   458          err = amdgpu_ucode_validate(adev->gfx.pfp_fw);
   459          if (err)
   460                  goto out;
   461          cp_hdr = (const struct gfx_firmware_header_v1_0 
*)adev->gfx.pfp_fw->data;
   462          adev->gfx.pfp_fw_version = 
le32_to_cpu(cp_hdr->header.ucode_version);
   463          adev->gfx.pfp_feature_version = 
le32_to_cpu(cp_hdr->ucode_feature_version);
   464  
   465          snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", 
chip_name);
   466          err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev);
   467          if (err)
   468                  goto out;
   469          err = amdgpu_ucode_validate(adev->gfx.me_fw);
   470          if (err)
   471                  goto out;
   472          cp_hdr = (const struct gfx_firmware_header_v1_0 
*)adev->gfx.me_fw->data;
   473          adev->gfx.me_fw_version = 
le32_to_cpu(cp_hdr->header.ucode_version);
   474          adev->gfx.me_feature_version = 
le32_to_cpu(cp_hdr->ucode_feature_version);
   475  
   476          snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", 
chip_name);
   477          err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev);
   478          if (err)
   479                  goto out;
   480          err = amdgpu_ucode_validate(adev->gfx.ce_fw);
   481          if (err)
   482                  goto out;
   483          cp_hdr = (const struct gfx_firmware_header_v1_0 
*)adev->gfx.ce_fw->data;
   484          adev->gfx.ce_fw_version = 
le32_to_cpu(cp_hdr->header.ucode_version);
   485          adev->gfx.ce_feature_version = 
le32_to_cpu(cp_hdr->ucode_feature_version);
   486  
   487          snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", 
chip_name);
   488          err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev);
   489          if (err)
   490                  goto out;
   491          err = amdgpu_ucode_validate(adev->gfx.rlc_fw);
   492          rlc_hdr = (const struct rlc_firmware_header_v2_0 
*)adev->gfx.rlc_fw->data;
   493  
 > 494          version_major = 
 > le16_to_cpu(rlc_hdr->header.header_version_major);
   495          version_minor = 
le16_to_cpu(rlc_hdr->header.header_version_minor);
   496          if (version_major == 2 && version_minor == 1)
   497                  adev->gfx.rlc.is_rlc_v2_1 = true;
   498  
   499          adev->gfx.rlc_fw_version = 
le32_to_cpu(rlc_hdr->header.ucode_version);
   500          adev->gfx.rlc_feature_version = 
le32_to_cpu(rlc_hdr->ucode_feature_version);
   501          adev->gfx.rlc.save_and_restore_offset =
   502                          le32_to_cpu(rlc_hdr->save_and_restore_offset);
   503          adev->gfx.rlc.clear_state_descriptor_offset =
   504                          
le32_to_cpu(rlc_hdr->clear_state_descriptor_offset);
   505          adev->gfx.rlc.avail_scratch_ram_locations =
   506                          
le32_to_cpu(rlc_hdr->avail_scratch_ram_locations);
   507          adev->gfx.rlc.reg_restore_list_size =
   508                          le32_to_cpu(rlc_hdr->reg_restore_list_size);
   509          adev->gfx.rlc.reg_list_format_start =
   510                          le32_to_cpu(rlc_hdr->reg_list_format_start);
   511          adev->gfx.rlc.reg_list_format_separate_start =
   512                          
le32_to_cpu(rlc_hdr->reg_list_format_separate_start);
   513          adev->gfx.rlc.starting_offsets_start =
   514                          le32_to_cpu(rlc_hdr->starting_offsets_start);
   515          adev->gfx.rlc.reg_list_format_size_bytes =
   516                          
le32_to_cpu(rlc_hdr->reg_list_format_size_bytes);
   517          adev->gfx.rlc.reg_list_size_bytes =
   518                          le32_to_cpu(rlc_hdr->reg_list_size_bytes);
   519          adev->gfx.rlc.register_list_format =
   520                          
kmalloc(adev->gfx.rlc.reg_list_format_size_bytes +
   521                                  adev->gfx.rlc.reg_list_size_bytes, 
GFP_KERNEL);
   522          if (!adev->gfx.rlc.register_list_format) {
   523                  err = -ENOMEM;
   524                  goto out;
   525          }
   526  
   527          tmp = (unsigned int *)((uintptr_t)rlc_hdr +
   528                          
le32_to_cpu(rlc_hdr->reg_list_format_array_offset_bytes));
   529          for (i = 0 ; i < (rlc_hdr->reg_list_format_size_bytes >> 2); 
i++)
   530                  adev->gfx.rlc.register_list_format[i] = 
le32_to_cpu(tmp[i]);
   531  
   532          adev->gfx.rlc.register_restore = 
adev->gfx.rlc.register_list_format + i;
   533  
   534          tmp = (unsigned int *)((uintptr_t)rlc_hdr +
   535                          
le32_to_cpu(rlc_hdr->reg_list_array_offset_bytes));
   536          for (i = 0 ; i < (rlc_hdr->reg_list_size_bytes >> 2); i++)
   537                  adev->gfx.rlc.register_restore[i] = le32_to_cpu(tmp[i]);
   538  
   539          if (adev->gfx.rlc.is_rlc_v2_1)
   540                  gfx_v9_0_init_rlc_ext_microcode(adev);
   541  
   542          snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", 
chip_name);
   543          err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev);
   544          if (err)
   545                  goto out;
   546          err = amdgpu_ucode_validate(adev->gfx.mec_fw);
   547          if (err)
   548                  goto out;
   549          cp_hdr = (const struct gfx_firmware_header_v1_0 
*)adev->gfx.mec_fw->data;
   550          adev->gfx.mec_fw_version = 
le32_to_cpu(cp_hdr->header.ucode_version);
   551          adev->gfx.mec_feature_version = 
le32_to_cpu(cp_hdr->ucode_feature_version);
   552  
   553  
   554          snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2.bin", 
chip_name);
   555          err = request_firmware(&adev->gfx.mec2_fw, fw_name, adev->dev);
   556          if (!err) {
   557                  err = amdgpu_ucode_validate(adev->gfx.mec2_fw);
   558                  if (err)
   559                          goto out;
   560                  cp_hdr = (const struct gfx_firmware_header_v1_0 *)
   561                  adev->gfx.mec2_fw->data;
   562                  adev->gfx.mec2_fw_version =
   563                  le32_to_cpu(cp_hdr->header.ucode_version);
   564                  adev->gfx.mec2_feature_version =
   565                  le32_to_cpu(cp_hdr->ucode_feature_version);
   566          } else {
   567                  err = 0;
   568                  adev->gfx.mec2_fw = NULL;
   569          }
   570  
   571          if (adev->firmware.load_type == AMDGPU_FW_LOAD_PSP) {
   572                  info = &adev->firmware.ucode[AMDGPU_UCODE_ID_CP_PFP];
   573                  info->ucode_id = AMDGPU_UCODE_ID_CP_PFP;
   574                  info->fw = adev->gfx.pfp_fw;
   575                  header = (const struct common_firmware_header 
*)info->fw->data;
   576                  adev->firmware.fw_size +=
   577                          ALIGN(le32_to_cpu(header->ucode_size_bytes), 
PAGE_SIZE);
   578  
   579                  info = &adev->firmware.ucode[AMDGPU_UCODE_ID_CP_ME];
   580                  info->ucode_id = AMDGPU_UCODE_ID_CP_ME;
   581                  info->fw = adev->gfx.me_fw;
   582                  header = (const struct common_firmware_header 
*)info->fw->data;
   583                  adev->firmware.fw_size +=
   584                          ALIGN(le32_to_cpu(header->ucode_size_bytes), 
PAGE_SIZE);
   585  
   586                  info = &adev->firmware.ucode[AMDGPU_UCODE_ID_CP_CE];
   587                  info->ucode_id = AMDGPU_UCODE_ID_CP_CE;
   588                  info->fw = adev->gfx.ce_fw;
   589                  header = (const struct common_firmware_header 
*)info->fw->data;
   590                  adev->firmware.fw_size +=
   591                          ALIGN(le32_to_cpu(header->ucode_size_bytes), 
PAGE_SIZE);
   592  
   593                  info = &adev->firmware.ucode[AMDGPU_UCODE_ID_RLC_G];
   594                  info->ucode_id = AMDGPU_UCODE_ID_RLC_G;
   595                  info->fw = adev->gfx.rlc_fw;
   596                  header = (const struct common_firmware_header 
*)info->fw->data;
   597                  adev->firmware.fw_size +=
   598                          ALIGN(le32_to_cpu(header->ucode_size_bytes), 
PAGE_SIZE);
   599  
   600                  if (adev->gfx.rlc.is_rlc_v2_1) {
   601                          info = 
&adev->firmware.ucode[AMDGPU_UCODE_ID_RLC_RESTORE_LIST_CNTL];
   602                          info->ucode_id = 
AMDGPU_UCODE_ID_RLC_RESTORE_LIST_CNTL;
   603                          info->fw = adev->gfx.rlc_fw;
   604                          adev->firmware.fw_size +=
   605                                  
ALIGN(adev->gfx.rlc.save_restore_list_cntl_size_bytes, PAGE_SIZE);
   606  
   607                          info = 
&adev->firmware.ucode[AMDGPU_UCODE_ID_RLC_RESTORE_LIST_GPM_MEM];
   608                          info->ucode_id = 
AMDGPU_UCODE_ID_RLC_RESTORE_LIST_GPM_MEM;
   609                          info->fw = adev->gfx.rlc_fw;
   610                          adev->firmware.fw_size +=
   611                                  
ALIGN(adev->gfx.rlc.save_restore_list_gpm_size_bytes, PAGE_SIZE);
   612  
   613                          info = 
&adev->firmware.ucode[AMDGPU_UCODE_ID_RLC_RESTORE_LIST_SRM_MEM];
   614                          info->ucode_id = 
AMDGPU_UCODE_ID_RLC_RESTORE_LIST_SRM_MEM;
   615                          info->fw = adev->gfx.rlc_fw;
   616                          adev->firmware.fw_size +=
   617                                  
ALIGN(adev->gfx.rlc.save_restore_list_srm_size_bytes, PAGE_SIZE);
   618                  }
   619  
   620                  info = &adev->firmware.ucode[AMDGPU_UCODE_ID_CP_MEC1];
   621                  info->ucode_id = AMDGPU_UCODE_ID_CP_MEC1;
   622                  info->fw = adev->gfx.mec_fw;
   623                  header = (const struct common_firmware_header 
*)info->fw->data;
   624                  cp_hdr = (const struct gfx_firmware_header_v1_0 
*)info->fw->data;
   625                  adev->firmware.fw_size +=
   626                          ALIGN(le32_to_cpu(header->ucode_size_bytes) - 
le32_to_cpu(cp_hdr->jt_size) * 4, PAGE_SIZE);
   627  
   628                  info = 
&adev->firmware.ucode[AMDGPU_UCODE_ID_CP_MEC1_JT];
   629                  info->ucode_id = AMDGPU_UCODE_ID_CP_MEC1_JT;
   630                  info->fw = adev->gfx.mec_fw;
   631                  adev->firmware.fw_size +=
   632                          ALIGN(le32_to_cpu(cp_hdr->jt_size) * 4, 
PAGE_SIZE);
   633  
   634                  if (adev->gfx.mec2_fw) {
   635                          info = 
&adev->firmware.ucode[AMDGPU_UCODE_ID_CP_MEC2];
   636                          info->ucode_id = AMDGPU_UCODE_ID_CP_MEC2;
   637                          info->fw = adev->gfx.mec2_fw;
   638                          header = (const struct common_firmware_header 
*)info->fw->data;
   639                          cp_hdr = (const struct gfx_firmware_header_v1_0 
*)info->fw->data;
   640                          adev->firmware.fw_size +=
   641                                  
ALIGN(le32_to_cpu(header->ucode_size_bytes) - le32_to_cpu(cp_hdr->jt_size) * 4, 
PAGE_SIZE);
   642                          info = 
&adev->firmware.ucode[AMDGPU_UCODE_ID_CP_MEC2_JT];
   643                          info->ucode_id = AMDGPU_UCODE_ID_CP_MEC2_JT;
   644                          info->fw = adev->gfx.mec2_fw;
   645                          adev->firmware.fw_size +=
   646                                  ALIGN(le32_to_cpu(cp_hdr->jt_size) * 4, 
PAGE_SIZE);
   647                  }
   648  
   649          }
   650  
   651  out:
   652          if (err) {
   653                  dev_err(adev->dev,
   654                          "gfx9: Failed to load firmware \"%s\"\n",
   655                          fw_name);
   656                  release_firmware(adev->gfx.pfp_fw);
   657                  adev->gfx.pfp_fw = NULL;
   658                  release_firmware(adev->gfx.me_fw);
   659                  adev->gfx.me_fw = NULL;
   660                  release_firmware(adev->gfx.ce_fw);
   661                  adev->gfx.ce_fw = NULL;
   662                  release_firmware(adev->gfx.rlc_fw);
   663                  adev->gfx.rlc_fw = NULL;
   664                  release_firmware(adev->gfx.mec_fw);
   665                  adev->gfx.mec_fw = NULL;
   666                  release_firmware(adev->gfx.mec2_fw);
   667                  adev->gfx.mec2_fw = NULL;
   668          }
   669          return err;
   670  }
   671  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to