diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0023-drm-amdgpu-add-more-debugging-output-for-driver-fail.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0023-drm-amdgpu-add-more-debugging-output-for-driver-fail.patch | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0023-drm-amdgpu-add-more-debugging-output-for-driver-fail.patch b/common/recipes-kernel/linux/files/0023-drm-amdgpu-add-more-debugging-output-for-driver-fail.patch new file mode 100644 index 00000000..50c39836 --- /dev/null +++ b/common/recipes-kernel/linux/files/0023-drm-amdgpu-add-more-debugging-output-for-driver-fail.patch @@ -0,0 +1,211 @@ +From 0273b5fac28b3b13111b978c7c27c908ba9d28c2 Mon Sep 17 00:00:00 2001 +From: Alex Deucher <alexander.deucher@amd.com> +Date: Mon, 7 Dec 2015 17:02:53 -0500 +Subject: [PATCH 0023/1110] drm/amdgpu: add more debugging output for driver + failures + +Add more fine grained debugging output for init/fini/suspend/ +resume failures. + +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 73 +++++++++++++++++++++++------- + 1 file changed, 57 insertions(+), 16 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +index c5206fd..991884a 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +@@ -1214,12 +1214,14 @@ static int amdgpu_early_init(struct amdgpu_device *adev) + } else { + if (adev->ip_blocks[i].funcs->early_init) { + r = adev->ip_blocks[i].funcs->early_init((void *)adev); +- if (r == -ENOENT) ++ if (r == -ENOENT) { + adev->ip_block_status[i].valid = false; +- else if (r) ++ } else if (r) { ++ DRM_ERROR("early_init %d failed %d\n", i, r); + return r; +- else ++ } else { + adev->ip_block_status[i].valid = true; ++ } + } else { + adev->ip_block_status[i].valid = true; + } +@@ -1237,20 +1239,28 @@ static int amdgpu_init(struct amdgpu_device *adev) + if (!adev->ip_block_status[i].valid) + continue; + r = adev->ip_blocks[i].funcs->sw_init((void *)adev); +- if (r) ++ if (r) { ++ DRM_ERROR("sw_init %d failed %d\n", i, r); + return r; ++ } + adev->ip_block_status[i].sw = true; + /* need to do gmc hw init early so we can allocate gpu mem */ + if (adev->ip_blocks[i].type == AMD_IP_BLOCK_TYPE_GMC) { + r = amdgpu_vram_scratch_init(adev); +- if (r) ++ if (r) { ++ DRM_ERROR("amdgpu_vram_scratch_init failed %d\n", r); + return r; ++ } + r = adev->ip_blocks[i].funcs->hw_init((void *)adev); +- if (r) ++ if (r) { ++ DRM_ERROR("hw_init %d failed %d\n", i, r); + return r; ++ } + r = amdgpu_wb_init(adev); +- if (r) ++ if (r) { ++ DRM_ERROR("amdgpu_wb_init failed %d\n", r); + return r; ++ } + adev->ip_block_status[i].hw = true; + } + } +@@ -1262,8 +1272,10 @@ static int amdgpu_init(struct amdgpu_device *adev) + if (adev->ip_blocks[i].type == AMD_IP_BLOCK_TYPE_GMC) + continue; + r = adev->ip_blocks[i].funcs->hw_init((void *)adev); +- if (r) ++ if (r) { ++ DRM_ERROR("hw_init %d failed %d\n", i, r); + return r; ++ } + adev->ip_block_status[i].hw = true; + } + +@@ -1280,12 +1292,16 @@ static int amdgpu_late_init(struct amdgpu_device *adev) + /* enable clockgating to save power */ + r = adev->ip_blocks[i].funcs->set_clockgating_state((void *)adev, + AMD_CG_STATE_GATE); +- if (r) ++ if (r) { ++ DRM_ERROR("set_clockgating_state(gate) %d failed %d\n", i, r); + return r; ++ } + if (adev->ip_blocks[i].funcs->late_init) { + r = adev->ip_blocks[i].funcs->late_init((void *)adev); +- if (r) ++ if (r) { ++ DRM_ERROR("late_init %d failed %d\n", i, r); + return r; ++ } + } + } + +@@ -1306,10 +1322,15 @@ static int amdgpu_fini(struct amdgpu_device *adev) + /* ungate blocks before hw fini so that we can shutdown the blocks safely */ + r = adev->ip_blocks[i].funcs->set_clockgating_state((void *)adev, + AMD_CG_STATE_UNGATE); +- if (r) ++ if (r) { ++ DRM_ERROR("set_clockgating_state(ungate) %d failed %d\n", i, r); + return r; ++ } + r = adev->ip_blocks[i].funcs->hw_fini((void *)adev); + /* XXX handle errors */ ++ if (r) { ++ DRM_DEBUG("hw_fini %d failed %d\n", i, r); ++ } + adev->ip_block_status[i].hw = false; + } + +@@ -1318,6 +1339,9 @@ static int amdgpu_fini(struct amdgpu_device *adev) + continue; + r = adev->ip_blocks[i].funcs->sw_fini((void *)adev); + /* XXX handle errors */ ++ if (r) { ++ DRM_DEBUG("sw_fini %d failed %d\n", i, r); ++ } + adev->ip_block_status[i].sw = false; + adev->ip_block_status[i].valid = false; + } +@@ -1335,9 +1359,15 @@ static int amdgpu_suspend(struct amdgpu_device *adev) + /* ungate blocks so that suspend can properly shut them down */ + r = adev->ip_blocks[i].funcs->set_clockgating_state((void *)adev, + AMD_CG_STATE_UNGATE); ++ if (r) { ++ DRM_ERROR("set_clockgating_state(ungate) %d failed %d\n", i, r); ++ } + /* XXX handle errors */ + r = adev->ip_blocks[i].funcs->suspend(adev); + /* XXX handle errors */ ++ if (r) { ++ DRM_ERROR("suspend %d failed %d\n", i, r); ++ } + } + + return 0; +@@ -1351,8 +1381,10 @@ static int amdgpu_resume(struct amdgpu_device *adev) + if (!adev->ip_block_status[i].valid) + continue; + r = adev->ip_blocks[i].funcs->resume(adev); +- if (r) ++ if (r) { ++ DRM_ERROR("resume %d failed %d\n", i, r); + return r; ++ } + } + + return 0; +@@ -1484,8 +1516,10 @@ int amdgpu_device_init(struct amdgpu_device *adev, + return -EINVAL; + } + r = amdgpu_atombios_init(adev); +- if (r) ++ if (r) { ++ dev_err(adev->dev, "amdgpu_atombios_init failed\n"); + return r; ++ } + + /* Post card if necessary */ + if (!amdgpu_card_posted(adev)) { +@@ -1499,21 +1533,26 @@ int amdgpu_device_init(struct amdgpu_device *adev, + + /* Initialize clocks */ + r = amdgpu_atombios_get_clock_info(adev); +- if (r) ++ if (r) { ++ dev_err(adev->dev, "amdgpu_atombios_get_clock_info failed\n"); + return r; ++ } + /* init i2c buses */ + amdgpu_atombios_i2c_init(adev); + + /* Fence driver */ + r = amdgpu_fence_driver_init(adev); +- if (r) ++ if (r) { ++ dev_err(adev->dev, "amdgpu_fence_driver_init failed\n"); + return r; ++ } + + /* init the mode config */ + drm_mode_config_init(adev->ddev); + + r = amdgpu_init(adev); + if (r) { ++ dev_err(adev->dev, "amdgpu_init failed\n"); + amdgpu_fini(adev); + return r; + } +@@ -1570,8 +1609,10 @@ int amdgpu_device_init(struct amdgpu_device *adev, + * explicit gating rather than handling it automatically. + */ + r = amdgpu_late_init(adev); +- if (r) ++ if (r) { ++ dev_err(adev->dev, "amdgpu_late_init failed\n"); + return r; ++ } + + return 0; + } +-- +2.7.4 + |