[radeon-alex:amd-staging-drm-next 226/251] drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:494:25: sparse: cast to restricted __le16

kbuild test robot lkp at intel.com
Sun Apr 22 16:03:45 UTC 2018


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


More information about the dri-devel mailing list