mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 22:02:02 +00:00
drm/amdgpu: add PSP KDB loading support for Arcturus
Add support for the arcturus specific psp metadata to the amdgpu firmware and properly parse it when loading it. Signed-off-by: John Clements <john.clements@amd.com> Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
f36d9ab95f
commit
dc0d962297
3 changed files with 29 additions and 0 deletions
|
@ -269,6 +269,16 @@ void amdgpu_ucode_print_psp_hdr(const struct common_firmware_header *hdr)
|
|||
DRM_DEBUG("kdb_size_bytes: %u\n",
|
||||
le32_to_cpu(psp_hdr_v1_1->kdb_size_bytes));
|
||||
}
|
||||
if (version_minor == 2) {
|
||||
const struct psp_firmware_header_v1_2 *psp_hdr_v1_2 =
|
||||
container_of(psp_hdr, struct psp_firmware_header_v1_2, v1_0);
|
||||
DRM_DEBUG("kdb_header_version: %u\n",
|
||||
le32_to_cpu(psp_hdr_v1_2->kdb_header_version));
|
||||
DRM_DEBUG("kdb_offset_bytes: %u\n",
|
||||
le32_to_cpu(psp_hdr_v1_2->kdb_offset_bytes));
|
||||
DRM_DEBUG("kdb_size_bytes: %u\n",
|
||||
le32_to_cpu(psp_hdr_v1_2->kdb_size_bytes));
|
||||
}
|
||||
} else {
|
||||
DRM_ERROR("Unknown PSP ucode version: %u.%u\n",
|
||||
version_major, version_minor);
|
||||
|
|
|
@ -90,6 +90,15 @@ struct psp_firmware_header_v1_1 {
|
|||
uint32_t kdb_size_bytes;
|
||||
};
|
||||
|
||||
/* version_major=1, version_minor=2 */
|
||||
struct psp_firmware_header_v1_2 {
|
||||
struct psp_firmware_header_v1_0 v1_0;
|
||||
uint32_t reserve[3];
|
||||
uint32_t kdb_header_version;
|
||||
uint32_t kdb_offset_bytes;
|
||||
uint32_t kdb_size_bytes;
|
||||
};
|
||||
|
||||
/* version_major=1, version_minor=0 */
|
||||
struct ta_firmware_header_v1_0 {
|
||||
struct common_firmware_header header;
|
||||
|
|
|
@ -64,6 +64,7 @@ static int psp_v11_0_init_microcode(struct psp_context *psp)
|
|||
int err = 0;
|
||||
const struct psp_firmware_header_v1_0 *sos_hdr;
|
||||
const struct psp_firmware_header_v1_1 *sos_hdr_v1_1;
|
||||
const struct psp_firmware_header_v1_2 *sos_hdr_v1_2;
|
||||
const struct psp_firmware_header_v1_0 *asd_hdr;
|
||||
const struct ta_firmware_header_v1_0 *ta_hdr;
|
||||
|
||||
|
@ -79,6 +80,9 @@ static int psp_v11_0_init_microcode(struct psp_context *psp)
|
|||
case CHIP_NAVI14:
|
||||
chip_name = "navi14";
|
||||
break;
|
||||
case CHIP_ARCTURUS:
|
||||
chip_name = "arcturus";
|
||||
break;
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
|
@ -114,6 +118,12 @@ static int psp_v11_0_init_microcode(struct psp_context *psp)
|
|||
adev->psp.kdb_start_addr = (uint8_t *)adev->psp.sys_start_addr +
|
||||
le32_to_cpu(sos_hdr_v1_1->kdb_offset_bytes);
|
||||
}
|
||||
if (sos_hdr->header.header_version_minor == 2) {
|
||||
sos_hdr_v1_2 = (const struct psp_firmware_header_v1_2 *)adev->psp.sos_fw->data;
|
||||
adev->psp.kdb_bin_size = le32_to_cpu(sos_hdr_v1_2->kdb_size_bytes);
|
||||
adev->psp.kdb_start_addr = (uint8_t *)adev->psp.sys_start_addr +
|
||||
le32_to_cpu(sos_hdr_v1_2->kdb_offset_bytes);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
dev_err(adev->dev,
|
||||
|
|
Loading…
Reference in a new issue