aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3261-drm-amdgpu-add-PSP-KDB-loading-support-for-Arcturus.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3261-drm-amdgpu-add-PSP-KDB-loading-support-for-Arcturus.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3261-drm-amdgpu-add-PSP-KDB-loading-support-for-Arcturus.patch98
1 files changed, 98 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3261-drm-amdgpu-add-PSP-KDB-loading-support-for-Arcturus.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3261-drm-amdgpu-add-PSP-KDB-loading-support-for-Arcturus.patch
new file mode 100644
index 00000000..227c8816
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3261-drm-amdgpu-add-PSP-KDB-loading-support-for-Arcturus.patch
@@ -0,0 +1,98 @@
+From 07530f9e865478bef78a04343d62b18d9732608a Mon Sep 17 00:00:00 2001
+From: John Clements <John.Clements@amd.com>
+Date: Mon, 22 Jul 2019 18:06:58 +0800
+Subject: [PATCH 3261/4256] 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.
+
+Change-Id: I3dc6cfc869db9e6f4e25c8918332edb8d80d4f83
+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>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 10 ++++++++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 9 +++++++++
+ drivers/gpu/drm/amd/amdgpu/psp_v11_0.c | 10 ++++++++++
+ 3 files changed, 29 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
+index 1ec696858d78..21fe00eef30e 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
+@@ -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);
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
+index 2be106e81eda..4f1b167a9394 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
+@@ -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;
+diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c
+index 6e50c7bcf06d..246cb9b75c05 100644
+--- a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c
+@@ -65,6 +65,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;
+ uint32_t bl_version;
+@@ -81,6 +82,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();
+ }
+@@ -122,6 +126,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,
+--
+2.17.1
+