@@ -441,3 +441,63 @@ static void amdgpu_gfx_rlc_init_microcode_v2_3(struct amdgpu_device *adev)
441
441
}
442
442
}
443
443
}
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