drm/amdgpu: add checking for sos version

Submitted by Huang, Ray on May 23, 2018, 5:45 a.m.

Details

Message ID 1527054349-30329-1-git-send-email-ray.huang@amd.com
State New
Headers show
Series "drm/amdgpu: add checking for sos version" ( rev: 1 ) in AMD X.Org drivers

Not browsing as part of any series.

Commit Message

Huang, Ray May 23, 2018, 5:45 a.m.
Signed-off-by: Huang Rui <ray.huang@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/psp_v3_1.c | 27 ++++++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

Patch hide | download patch | download mbox

diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
index 196e75d..efe5c1f 100644
--- a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
+++ b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
@@ -44,6 +44,8 @@  MODULE_FIRMWARE("amdgpu/vega12_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)
 {
@@ -207,12 +209,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 three 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.
@@ -245,6 +266,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;
 }
 

Comments

On 05/23/2018 01:45 PM, Huang Rui wrote:
> 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 196e75d..efe5c1f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
> @@ -44,6 +44,8 @@ MODULE_FIRMWARE("amdgpu/vega12_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)
>   {
> @@ -207,12 +209,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 three 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.
> @@ -245,6 +266,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;
>   }
>
>
Please add a commit message.

We recently got pinged by Linus that this is missing on to many of our 
patches.

Christian.

Am 23.05.2018 um 07:45 schrieb Huang Rui:
> Signed-off-by: Huang Rui <ray.huang@amd.com>
> Acked-by: Alex Deucher <alexander.deucher@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 196e75d..efe5c1f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
> @@ -44,6 +44,8 @@ MODULE_FIRMWARE("amdgpu/vega12_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)
>   {
> @@ -207,12 +209,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 three 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.
> @@ -245,6 +266,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;
>   }
>