@@ -441,3 +441,63 @@ static void amdgpu_gfx_rlc_init_microcode_v2_3(struct amdgpu_device *adev)
441441 }
442442 }
443443}
444+
445+ static void amdgpu_gfx_rlc_init_microcode_v2_4 (struct amdgpu_device * adev )
446+ {
447+ const struct rlc_firmware_header_v2_4 * rlc_hdr ;
448+ struct amdgpu_firmware_info * info ;
449+
450+ rlc_hdr = (const struct rlc_firmware_header_v2_4 * )adev -> gfx .rlc_fw -> data ;
451+ adev -> gfx .rlc .global_tap_delays_ucode_size_bytes = le32_to_cpu (rlc_hdr -> global_tap_delays_ucode_size_bytes );
452+ adev -> gfx .rlc .global_tap_delays_ucode = (u8 * )rlc_hdr + le32_to_cpu (rlc_hdr -> global_tap_delays_ucode_offset_bytes );
453+ adev -> gfx .rlc .se0_tap_delays_ucode_size_bytes = le32_to_cpu (rlc_hdr -> se0_tap_delays_ucode_size_bytes );
454+ adev -> gfx .rlc .se0_tap_delays_ucode = (u8 * )rlc_hdr + le32_to_cpu (rlc_hdr -> se0_tap_delays_ucode_offset_bytes );
455+ adev -> gfx .rlc .se1_tap_delays_ucode_size_bytes = le32_to_cpu (rlc_hdr -> se1_tap_delays_ucode_size_bytes );
456+ adev -> gfx .rlc .se1_tap_delays_ucode = (u8 * )rlc_hdr + le32_to_cpu (rlc_hdr -> se1_tap_delays_ucode_offset_bytes );
457+ adev -> gfx .rlc .se2_tap_delays_ucode_size_bytes = le32_to_cpu (rlc_hdr -> se2_tap_delays_ucode_size_bytes );
458+ adev -> gfx .rlc .se2_tap_delays_ucode = (u8 * )rlc_hdr + le32_to_cpu (rlc_hdr -> se2_tap_delays_ucode_offset_bytes );
459+ adev -> gfx .rlc .se3_tap_delays_ucode_size_bytes = le32_to_cpu (rlc_hdr -> se3_tap_delays_ucode_size_bytes );
460+ adev -> gfx .rlc .se3_tap_delays_ucode = (u8 * )rlc_hdr + le32_to_cpu (rlc_hdr -> se3_tap_delays_ucode_offset_bytes );
461+
462+ if (adev -> firmware .load_type == AMDGPU_FW_LOAD_PSP ) {
463+ if (adev -> gfx .rlc .global_tap_delays_ucode_size_bytes ) {
464+ info = & adev -> firmware .ucode [AMDGPU_UCODE_ID_GLOBAL_TAP_DELAYS ];
465+ info -> ucode_id = AMDGPU_UCODE_ID_GLOBAL_TAP_DELAYS ;
466+ info -> fw = adev -> gfx .rlc_fw ;
467+ adev -> firmware .fw_size +=
468+ ALIGN (adev -> gfx .rlc .global_tap_delays_ucode_size_bytes , PAGE_SIZE );
469+ }
470+
471+ if (adev -> gfx .rlc .se0_tap_delays_ucode_size_bytes ) {
472+ info = & adev -> firmware .ucode [AMDGPU_UCODE_ID_SE0_TAP_DELAYS ];
473+ info -> ucode_id = AMDGPU_UCODE_ID_SE0_TAP_DELAYS ;
474+ info -> fw = adev -> gfx .rlc_fw ;
475+ adev -> firmware .fw_size +=
476+ ALIGN (adev -> gfx .rlc .se0_tap_delays_ucode_size_bytes , PAGE_SIZE );
477+ }
478+
479+ if (adev -> gfx .rlc .se1_tap_delays_ucode_size_bytes ) {
480+ info = & adev -> firmware .ucode [AMDGPU_UCODE_ID_SE1_TAP_DELAYS ];
481+ info -> ucode_id = AMDGPU_UCODE_ID_SE1_TAP_DELAYS ;
482+ info -> fw = adev -> gfx .rlc_fw ;
483+ adev -> firmware .fw_size +=
484+ ALIGN (adev -> gfx .rlc .se1_tap_delays_ucode_size_bytes , PAGE_SIZE );
485+ }
486+
487+ if (adev -> gfx .rlc .se2_tap_delays_ucode_size_bytes ) {
488+ info = & adev -> firmware .ucode [AMDGPU_UCODE_ID_SE2_TAP_DELAYS ];
489+ info -> ucode_id = AMDGPU_UCODE_ID_SE2_TAP_DELAYS ;
490+ info -> fw = adev -> gfx .rlc_fw ;
491+ adev -> firmware .fw_size +=
492+ ALIGN (adev -> gfx .rlc .se2_tap_delays_ucode_size_bytes , PAGE_SIZE );
493+ }
494+
495+ if (adev -> gfx .rlc .se3_tap_delays_ucode_size_bytes ) {
496+ info = & adev -> firmware .ucode [AMDGPU_UCODE_ID_SE3_TAP_DELAYS ];
497+ info -> ucode_id = AMDGPU_UCODE_ID_SE3_TAP_DELAYS ;
498+ info -> fw = adev -> gfx .rlc_fw ;
499+ adev -> firmware .fw_size +=
500+ ALIGN (adev -> gfx .rlc .se3_tap_delays_ucode_size_bytes , PAGE_SIZE );
501+ }
502+ }
503+ }
0 commit comments