Skip to content

Commit b33139e

Browse files
Hawking Zhangalexdeucher
authored andcommitted
drm/amdgpu: add helper to init rlc fw in header v2_4
To initialize rlc firmware in header v2_4 Signed-off-by: Hawking Zhang <[email protected]> Acked-by: Christian König <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent c1c3f41 commit b33139e

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

drivers/gpu/drm/amd/amdgpu/amdgpu_rlc.c

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)