Skip to content

Commit 04fa38c

Browse files
Hawking Zhangalexdeucher
authored andcommitted
drm/amdgpu: add helper to init rlc firmware
To initialzie rlc firmware according to rlc firmware header version v2: squash in backwards compat fix Signed-off-by: Hawking Zhang <[email protected]> Acked-by: Christian König <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent b33139e commit 04fa38c

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,3 +501,38 @@ static void amdgpu_gfx_rlc_init_microcode_v2_4(struct amdgpu_device *adev)
501501
}
502502
}
503503
}
504+
505+
int amdgpu_gfx_rlc_init_microcode(struct amdgpu_device *adev,
506+
uint16_t version_major,
507+
uint16_t version_minor)
508+
{
509+
int err;
510+
511+
if (version_major < 2) {
512+
/* only support rlc_hdr v2.x and onwards */
513+
dev_err(adev->dev, "unsupported rlc fw hdr\n");
514+
return -EINVAL;
515+
}
516+
517+
/* is_rlc_v2_1 is still used in APU code path */
518+
if (version_major == 2 && version_minor == 1)
519+
adev->gfx.rlc.is_rlc_v2_1 = true;
520+
521+
if (version_minor >= 0) {
522+
err = amdgpu_gfx_rlc_init_microcode_v2_0(adev);
523+
if (err) {
524+
dev_err(adev->dev, "fail to init rlc v2_0 microcode\n");
525+
return err;
526+
}
527+
}
528+
if (version_minor >= 1)
529+
amdgpu_gfx_rlc_init_microcode_v2_1(adev);
530+
if (version_minor >= 2)
531+
amdgpu_gfx_rlc_init_microcode_v2_2(adev);
532+
if (version_minor == 3)
533+
amdgpu_gfx_rlc_init_microcode_v2_3(adev);
534+
if (version_minor == 4)
535+
amdgpu_gfx_rlc_init_microcode_v2_4(adev);
536+
537+
return 0;
538+
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,5 +267,7 @@ int amdgpu_gfx_rlc_init_csb(struct amdgpu_device *adev);
267267
int amdgpu_gfx_rlc_init_cpt(struct amdgpu_device *adev);
268268
void amdgpu_gfx_rlc_setup_cp_table(struct amdgpu_device *adev);
269269
void amdgpu_gfx_rlc_fini(struct amdgpu_device *adev);
270-
270+
int amdgpu_gfx_rlc_init_microcode(struct amdgpu_device *adev,
271+
uint16_t version_major,
272+
uint16_t version_minor);
271273
#endif

0 commit comments

Comments
 (0)