diff options
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.patch | 77 |
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 + |