aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4579-drm-amdgpu-add-checking-for-sos-version.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4579-drm-amdgpu-add-checking-for-sos-version.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4579-drm-amdgpu-add-checking-for-sos-version.patch77
1 files changed, 77 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4579-drm-amdgpu-add-checking-for-sos-version.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4579-drm-amdgpu-add-checking-for-sos-version.patch
new file mode 100644
index 00000000..94fc4e9c
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4579-drm-amdgpu-add-checking-for-sos-version.patch
@@ -0,0 +1,77 @@
+From ee9289575e95570caeefc6ffe2c9ef084c27e9b4 Mon Sep 17 00:00:00 2001
+From: Huang Rui <ray.huang@amd.com>
+Date: Sat, 12 May 2018 12:31:12 +0800
+Subject: [PATCH 4579/5725] drm/amdgpu: add checking for sos version
+
+The sos ucode version will be changed to align with the value of
+mmMP0_SMN_C2PMSG_58. Then we add a checking for this. Meanwhile, we have to be
+compatibility backwards. So it adds serveral recent legacy versions as the white
+list for the version checking.
+
+Signed-off-by: Huang Rui <ray.huang@amd.com>
+Acked-by: Alex Deucher <alexander.deucher@amd.com>
+Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/psp_v3_1.c | 27 ++++++++++++++++++++++++++-
+ 1 file changed, 26 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
+index 0c768e3..727071f 100644
+--- a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
++++ b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
+@@ -47,6 +47,8 @@ MODULE_FIRMWARE("amdgpu/vega20_asd.bin");
+
+ #define smnMP1_FIRMWARE_FLAGS 0x3010028
+
++static uint32_t sos_old_versions[] = {1517616, 1510592, 1448594, 1446554};
++
+ static int
+ psp_v3_1_get_fw_type(struct amdgpu_firmware_info *ucode, enum psp_gfx_fw_type *type)
+ {
+@@ -210,12 +212,31 @@ static int psp_v3_1_bootloader_load_sysdrv(struct psp_context *psp)
+ return ret;
+ }
+
++static bool psp_v3_1_match_version(struct amdgpu_device *adev, uint32_t ver)
++{
++ int i;
++
++ if (ver == adev->psp.sos_fw_version)
++ return true;
++
++ /*
++ * Double check if the latest four legacy versions.
++ * If yes, it is still the right version.
++ */
++ for (i = 0; i < sizeof(sos_old_versions) / sizeof(uint32_t); i++) {
++ if (sos_old_versions[i] == adev->psp.sos_fw_version)
++ return true;
++ }
++
++ return false;
++}
++
+ static int psp_v3_1_bootloader_load_sos(struct psp_context *psp)
+ {
+ int ret;
+ unsigned int psp_gfxdrv_command_reg = 0;
+ struct amdgpu_device *adev = psp->adev;
+- uint32_t sol_reg;
++ uint32_t sol_reg, ver;
+
+ /* Check sOS sign of life register to confirm sys driver and sOS
+ * are already been loaded.
+@@ -248,6 +269,10 @@ static int psp_v3_1_bootloader_load_sos(struct psp_context *psp)
+ RREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_81),
+ 0, true);
+
++ ver = RREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_58);
++ if (!psp_v3_1_match_version(adev, ver))
++ DRM_WARN("SOS version doesn't match\n");
++
+ return ret;
+ }
+
+--
+2.7.4
+