diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 11 | 
1 files changed, 10 insertions, 1 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c index 833fc4b68940..9ef312428231 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c @@ -447,6 +447,7 @@ static int amdgpu_ucode_init_single_fw(struct amdgpu_device *adev,  	const struct common_firmware_header *header = NULL;  	const struct gfx_firmware_header_v1_0 *cp_hdr = NULL;  	const struct dmcu_firmware_header_v1_0 *dmcu_hdr = NULL; +	const struct dmcub_firmware_header_v1_0 *dmcub_hdr = NULL;  	if (NULL == ucode->fw)  		return 0; @@ -460,6 +461,7 @@ static int amdgpu_ucode_init_single_fw(struct amdgpu_device *adev,  	header = (const struct common_firmware_header *)ucode->fw->data;  	cp_hdr = (const struct gfx_firmware_header_v1_0 *)ucode->fw->data;  	dmcu_hdr = (const struct dmcu_firmware_header_v1_0 *)ucode->fw->data; +	dmcub_hdr = (const struct dmcub_firmware_header_v1_0 *)ucode->fw->data;  	if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP ||  	    (ucode->ucode_id != AMDGPU_UCODE_ID_CP_MEC1 && @@ -470,7 +472,8 @@ static int amdgpu_ucode_init_single_fw(struct amdgpu_device *adev,  	     ucode->ucode_id != AMDGPU_UCODE_ID_RLC_RESTORE_LIST_GPM_MEM &&  	     ucode->ucode_id != AMDGPU_UCODE_ID_RLC_RESTORE_LIST_SRM_MEM &&  		 ucode->ucode_id != AMDGPU_UCODE_ID_DMCU_ERAM && -		 ucode->ucode_id != AMDGPU_UCODE_ID_DMCU_INTV)) { +		 ucode->ucode_id != AMDGPU_UCODE_ID_DMCU_INTV && +		 ucode->ucode_id != AMDGPU_UCODE_ID_DMCUB)) {  		ucode->ucode_size = le32_to_cpu(header->ucode_size_bytes);  		memcpy(ucode->kaddr, (void *)((uint8_t *)ucode->fw->data + @@ -506,6 +509,12 @@ static int amdgpu_ucode_init_single_fw(struct amdgpu_device *adev,  					      le32_to_cpu(header->ucode_array_offset_bytes) +  					      le32_to_cpu(dmcu_hdr->intv_offset_bytes)),  		       ucode->ucode_size); +	} else if (ucode->ucode_id == AMDGPU_UCODE_ID_DMCUB) { +		ucode->ucode_size = le32_to_cpu(dmcub_hdr->inst_const_bytes); +		memcpy(ucode->kaddr, +		       (void *)((uint8_t *)ucode->fw->data + +				le32_to_cpu(header->ucode_array_offset_bytes)), +		       ucode->ucode_size);  	} else if (ucode->ucode_id == AMDGPU_UCODE_ID_RLC_RESTORE_LIST_CNTL) {  		ucode->ucode_size = adev->gfx.rlc.save_restore_list_cntl_size_bytes;  		memcpy(ucode->kaddr, adev->gfx.rlc.save_restore_list_cntl, | 
