aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1115-drm-amdgpu-check-PSP-support-before-adding-the-ip-bl.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1115-drm-amdgpu-check-PSP-support-before-adding-the-ip-bl.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/1115-drm-amdgpu-check-PSP-support-before-adding-the-ip-bl.patch127
1 files changed, 127 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1115-drm-amdgpu-check-PSP-support-before-adding-the-ip-bl.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1115-drm-amdgpu-check-PSP-support-before-adding-the-ip-bl.patch
new file mode 100644
index 00000000..6ef2bba2
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1115-drm-amdgpu-check-PSP-support-before-adding-the-ip-bl.patch
@@ -0,0 +1,127 @@
+From 051ce1c69e00fc7d73dc1040a54a46f1d266e474 Mon Sep 17 00:00:00 2001
+From: Evan Quan <evan.quan@amd.com>
+Date: Tue, 8 Jan 2019 13:57:29 +0800
+Subject: [PATCH 1115/2940] drm/amdgpu: check PSP support before adding the ip
+ block
+
+So that we do not need to check this in every internal function.
+
+Signed-off-by: Evan Quan <evan.quan@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 24 ------------------------
+ drivers/gpu/drm/amd/amdgpu/soc15.c | 13 ++++++++-----
+ 2 files changed, 8 insertions(+), 29 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+index 624308d788a0..b2a48a32fa27 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+@@ -68,9 +68,6 @@ static int psp_sw_init(void *handle)
+
+ psp->adev = adev;
+
+- if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP)
+- return 0;
+-
+ ret = psp_init_microcode(psp);
+ if (ret) {
+ DRM_ERROR("Failed to load psp firmware!\n");
+@@ -84,9 +81,6 @@ static int psp_sw_fini(void *handle)
+ {
+ struct amdgpu_device *adev = (struct amdgpu_device *)handle;
+
+- if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP)
+- return 0;
+-
+ release_firmware(adev->psp.sos_fw);
+ adev->psp.sos_fw = NULL;
+ release_firmware(adev->psp.asd_fw);
+@@ -725,10 +719,6 @@ static int psp_hw_init(void *handle)
+ int ret;
+ struct amdgpu_device *adev = (struct amdgpu_device *)handle;
+
+-
+- if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP)
+- return 0;
+-
+ mutex_lock(&adev->firmware.mutex);
+ /*
+ * This sequence is just used on hw_init only once, no need on
+@@ -758,9 +748,6 @@ static int psp_hw_fini(void *handle)
+ struct amdgpu_device *adev = (struct amdgpu_device *)handle;
+ struct psp_context *psp = &adev->psp;
+
+- if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP)
+- return 0;
+-
+ if (adev->gmc.xgmi.num_physical_nodes > 1 &&
+ psp->xgmi_context.initialized == 1)
+ psp_xgmi_terminate(psp);
+@@ -789,9 +776,6 @@ static int psp_suspend(void *handle)
+ struct amdgpu_device *adev = (struct amdgpu_device *)handle;
+ struct psp_context *psp = &adev->psp;
+
+- if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP)
+- return 0;
+-
+ if (adev->gmc.xgmi.num_physical_nodes > 1 &&
+ psp->xgmi_context.initialized == 1) {
+ ret = psp_xgmi_terminate(psp);
+@@ -816,9 +800,6 @@ static int psp_resume(void *handle)
+ struct amdgpu_device *adev = (struct amdgpu_device *)handle;
+ struct psp_context *psp = &adev->psp;
+
+- if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP)
+- return 0;
+-
+ DRM_INFO("PSP is resuming...\n");
+
+ mutex_lock(&adev->firmware.mutex);
+@@ -854,11 +835,6 @@ static bool psp_check_fw_loading_status(struct amdgpu_device *adev,
+ {
+ struct amdgpu_firmware_info *ucode = NULL;
+
+- if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP) {
+- DRM_INFO("firmware is not loaded by PSP\n");
+- return true;
+- }
+-
+ if (!adev->firmware.fw_size)
+ return false;
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c
+index 4b4dcadc2a5d..9b3b6bba8476 100644
+--- a/drivers/gpu/drm/amd/amdgpu/soc15.c
++++ b/drivers/gpu/drm/amd/amdgpu/soc15.c
+@@ -595,10 +595,12 @@ int soc15_set_ip_blocks(struct amdgpu_device *adev)
+ amdgpu_device_ip_block_add(adev, &vega10_common_ip_block);
+ amdgpu_device_ip_block_add(adev, &gmc_v9_0_ip_block);
+ amdgpu_device_ip_block_add(adev, &vega10_ih_ip_block);
+- if (adev->asic_type == CHIP_VEGA20)
+- amdgpu_device_ip_block_add(adev, &psp_v11_0_ip_block);
+- else
+- amdgpu_device_ip_block_add(adev, &psp_v3_1_ip_block);
++ if (likely(adev->firmware.load_type == AMDGPU_FW_LOAD_PSP)) {
++ if (adev->asic_type == CHIP_VEGA20)
++ amdgpu_device_ip_block_add(adev, &psp_v11_0_ip_block);
++ else
++ amdgpu_device_ip_block_add(adev, &psp_v3_1_ip_block);
++ }
+ amdgpu_device_ip_block_add(adev, &gfx_v9_0_ip_block);
+ amdgpu_device_ip_block_add(adev, &sdma_v4_0_ip_block);
+ if (!amdgpu_sriov_vf(adev))
+@@ -620,7 +622,8 @@ int soc15_set_ip_blocks(struct amdgpu_device *adev)
+ amdgpu_device_ip_block_add(adev, &vega10_common_ip_block);
+ amdgpu_device_ip_block_add(adev, &gmc_v9_0_ip_block);
+ amdgpu_device_ip_block_add(adev, &vega10_ih_ip_block);
+- amdgpu_device_ip_block_add(adev, &psp_v10_0_ip_block);
++ if (likely(adev->firmware.load_type == AMDGPU_FW_LOAD_PSP))
++ amdgpu_device_ip_block_add(adev, &psp_v10_0_ip_block);
+ amdgpu_device_ip_block_add(adev, &gfx_v9_0_ip_block);
+ amdgpu_device_ip_block_add(adev, &sdma_v4_0_ip_block);
+ amdgpu_device_ip_block_add(adev, &pp_smu_ip_block);
+--
+2.17.1
+