diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/2212-drm-amdgpu-psp11-skip-ta-firmware-for-navi10.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/2212-drm-amdgpu-psp11-skip-ta-firmware-for-navi10.patch | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/2212-drm-amdgpu-psp11-skip-ta-firmware-for-navi10.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/2212-drm-amdgpu-psp11-skip-ta-firmware-for-navi10.patch new file mode 100644 index 00000000..22f5c0b1 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/2212-drm-amdgpu-psp11-skip-ta-firmware-for-navi10.patch @@ -0,0 +1,79 @@ +From 40edf5b00e5f56a5af0b4ab7278810763d5ec454 Mon Sep 17 00:00:00 2001 +From: Hawking Zhang <Hawking.Zhang@amd.com> +Date: Sat, 16 Feb 2019 22:22:46 +0800 +Subject: [PATCH 2212/2940] drm/amdgpu/psp11: skip ta firmware for navi10 + +Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/psp_v11_0.c | 54 ++++++++++++++------------ + 1 file changed, 30 insertions(+), 24 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c +index 02c326790455..345a57a49365 100644 +--- a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c ++++ b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c +@@ -136,30 +136,36 @@ static int psp_v11_0_init_microcode(struct psp_context *psp) + adev->psp.asd_start_addr = (uint8_t *)asd_hdr + + le32_to_cpu(asd_hdr->header.ucode_array_offset_bytes); + +- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ta.bin", chip_name); +- err = request_firmware(&adev->psp.ta_fw, fw_name, adev->dev); +- if (err) { +- release_firmware(adev->psp.ta_fw); +- adev->psp.ta_fw = NULL; +- dev_info(adev->dev, +- "psp v11.0: Failed to load firmware \"%s\"\n", fw_name); +- } else { +- err = amdgpu_ucode_validate(adev->psp.ta_fw); +- if (err) +- goto out2; +- +- ta_hdr = (const struct ta_firmware_header_v1_0 *)adev->psp.ta_fw->data; +- adev->psp.ta_xgmi_ucode_version = le32_to_cpu(ta_hdr->ta_xgmi_ucode_version); +- adev->psp.ta_xgmi_ucode_size = le32_to_cpu(ta_hdr->ta_xgmi_size_bytes); +- adev->psp.ta_xgmi_start_addr = (uint8_t *)ta_hdr + +- le32_to_cpu(ta_hdr->header.ucode_array_offset_bytes); +- +- adev->psp.ta_fw_version = le32_to_cpu(ta_hdr->header.ucode_version); +- +- adev->psp.ta_ras_ucode_version = le32_to_cpu(ta_hdr->ta_ras_ucode_version); +- adev->psp.ta_ras_ucode_size = le32_to_cpu(ta_hdr->ta_ras_size_bytes); +- adev->psp.ta_ras_start_addr = (uint8_t *)adev->psp.ta_xgmi_start_addr + +- le32_to_cpu(ta_hdr->ta_ras_offset_bytes); ++ switch (adev->asic_type) { ++ case CHIP_VEGA20: ++ snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ta.bin", chip_name); ++ err = request_firmware(&adev->psp.ta_fw, fw_name, adev->dev); ++ if (err) { ++ release_firmware(adev->psp.ta_fw); ++ adev->psp.ta_fw = NULL; ++ dev_info(adev->dev, ++ "psp v11.0: Failed to load firmware \"%s\"\n", fw_name); ++ } else { ++ err = amdgpu_ucode_validate(adev->psp.ta_fw); ++ if (err) ++ goto out2; ++ ++ ta_hdr = (const struct ta_firmware_header_v1_0 *)adev->psp.ta_fw->data; ++ adev->psp.ta_xgmi_ucode_version = le32_to_cpu(ta_hdr->ta_xgmi_ucode_version); ++ adev->psp.ta_xgmi_ucode_size = le32_to_cpu(ta_hdr->ta_xgmi_size_bytes); ++ adev->psp.ta_xgmi_start_addr = (uint8_t *)ta_hdr + ++ le32_to_cpu(ta_hdr->header.ucode_array_offset_bytes); ++ adev->psp.ta_fw_version = le32_to_cpu(ta_hdr->header.ucode_version); ++ adev->psp.ta_ras_ucode_version = le32_to_cpu(ta_hdr->ta_ras_ucode_version); ++ adev->psp.ta_ras_ucode_size = le32_to_cpu(ta_hdr->ta_ras_size_bytes); ++ adev->psp.ta_ras_start_addr = (uint8_t *)adev->psp.ta_xgmi_start_addr + ++ le32_to_cpu(ta_hdr->ta_ras_offset_bytes); ++ } ++ break; ++ case CHIP_NAVI10: ++ break; ++ default: ++ BUG(); + } + + return 0; +-- +2.17.1 + |