| From 4c0387dfcce908341cb3d453e19c5137d40b384b Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 19 Nov 2021 04:27:55 -0500 |
| Subject: drm/amd/display: add connector type check for CRC source set |
| |
| From: Perry Yuan <Perry.Yuan@amd.com> |
| |
| [ Upstream commit 2da34b7bb59e1caa9a336e0e20a76b8b6a4abea2 ] |
| |
| [Why] |
| IGT bypass test will set crc source as DPRX,and display DM didn`t check |
| connection type, it run the test on the HDMI connector ,then the kernel |
| will be crashed because aux->transfer is set null for HDMI connection. |
| This patch will skip the invalid connection test and fix kernel crash issue. |
| |
| [How] |
| Check the connector type while setting the pipe crc source as DPRX or |
| auto,if the type is not DP or eDP, the crtc crc source will not be set |
| and report error code to IGT test,IGT will show the this subtest as no |
| valid crtc/connector combinations found. |
| |
| 116.779714] [IGT] amd_bypass: starting subtest 8bpc-bypass-mode |
| [ 117.730996] BUG: kernel NULL pointer dereference, address: 0000000000000000 |
| [ 117.731001] #PF: supervisor instruction fetch in kernel mode |
| [ 117.731003] #PF: error_code(0x0010) - not-present page |
| [ 117.731004] PGD 0 P4D 0 |
| [ 117.731006] Oops: 0010 [#1] SMP NOPTI |
| [ 117.731009] CPU: 11 PID: 2428 Comm: amd_bypass Tainted: G OE 5.11.0-34-generic #36~20.04.1-Ubuntu |
| [ 117.731011] Hardware name: AMD CZN/, BIOS AB.FD 09/07/2021 |
| [ 117.731012] RIP: 0010:0x0 |
| [ 117.731015] Code: Unable to access opcode bytes at RIP 0xffffffffffffffd6. |
| [ 117.731016] RSP: 0018:ffffa8d64225bab8 EFLAGS: 00010246 |
| [ 117.731017] RAX: 0000000000000000 RBX: 0000000000000020 RCX: ffffa8d64225bb5e |
| [ 117.731018] RDX: ffff93151d921880 RSI: ffffa8d64225bac8 RDI: ffff931511a1a9d8 |
| [ 117.731022] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 |
| [ 117.731023] CR2: ffffffffffffffd6 CR3: 000000010d5a4000 CR4: 0000000000750ee0 |
| [ 117.731023] PKRU: 55555554 |
| [ 117.731024] Call Trace: |
| [ 117.731027] drm_dp_dpcd_access+0x72/0x110 [drm_kms_helper] |
| [ 117.731036] drm_dp_dpcd_read+0xb7/0xf0 [drm_kms_helper] |
| [ 117.731040] drm_dp_start_crc+0x38/0xb0 [drm_kms_helper] |
| [ 117.731047] amdgpu_dm_crtc_set_crc_source+0x1ae/0x3e0 [amdgpu] |
| [ 117.731149] crtc_crc_open+0x174/0x220 [drm] |
| [ 117.731162] full_proxy_open+0x168/0x1f0 |
| [ 117.731165] ? open_proxy_open+0x100/0x100 |
| |
| BugLink: https://gitlab.freedesktop.org/drm/amd/-/issues/1546 |
| Reviewed-by: Harry Wentland <harry.wentland@amd.com> |
| Reviewed-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com> |
| Signed-off-by: Perry Yuan <Perry.Yuan@amd.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c | 8 ++++++++ |
| 1 file changed, 8 insertions(+) |
| |
| diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c |
| index cce062adc4391..8a441a22c46ec 100644 |
| --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c |
| +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c |
| @@ -314,6 +314,14 @@ int amdgpu_dm_crtc_set_crc_source(struct drm_crtc *crtc, const char *src_name) |
| ret = -EINVAL; |
| goto cleanup; |
| } |
| + |
| + if ((aconn->base.connector_type != DRM_MODE_CONNECTOR_DisplayPort) && |
| + (aconn->base.connector_type != DRM_MODE_CONNECTOR_eDP)) { |
| + DRM_DEBUG_DRIVER("No DP connector available for CRC source\n"); |
| + ret = -EINVAL; |
| + goto cleanup; |
| + } |
| + |
| } |
| |
| #if defined(CONFIG_DRM_AMD_SECURE_DISPLAY) |
| -- |
| 2.33.0 |
| |