From patchwork Fri Jan 26 18:46:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mario Limonciello X-Patchwork-Id: 192759 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:2395:b0:106:343:edcb with SMTP id gw21csp81902dyb; Fri, 26 Jan 2024 10:56:40 -0800 (PST) X-Google-Smtp-Source: AGHT+IEYHldNR67lVsw9IU9OoAOoo5Rae2mF6zbjMWlQEe6FgIjuZItnRgjPewnhBFHnJdhvWl8+ X-Received: by 2002:a2e:b818:0:b0:2cf:2d82:a5f1 with SMTP id u24-20020a2eb818000000b002cf2d82a5f1mr85285ljo.164.1706295399813; Fri, 26 Jan 2024 10:56:39 -0800 (PST) Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id v8-20020aa7d808000000b00559e2778dabsi968733edq.453.2024.01.26.10.56.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Jan 2024 10:56:39 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-40533-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=rA6qjoK8; arc=fail (signature failed); spf=pass (google.com: domain of linux-kernel+bounces-40533-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-40533-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id EA8501F222F6 for ; Fri, 26 Jan 2024 18:56:08 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DBC0F225D6; Fri, 26 Jan 2024 18:55:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="rA6qjoK8" Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2079.outbound.protection.outlook.com [40.107.243.79]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AFAE92232B; Fri, 26 Jan 2024 18:55:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.243.79 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706295321; cv=fail; b=KUmX52NooaryR31eDBqG7UNjVYka/2EeTSSATKhkoXDN4D/cZodu30ZOiHbLRrK18YPx6KX+FlufGho2f4T4/UkTYjPVWsPIJ5Mk/n5oQZIpI/T3kYKnKCyaI+bptPcblQs/9GAvWzLnHpu7I27tquI0GIJZPgh2U9oQzKoNY3s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706295321; c=relaxed/simple; bh=C91UcQEh4Agd4/sArZTa0X7SH3zMFQ2oenaxwehvShQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=iqJhqr9Z9t0LuZE9JbZw5yn02S5yekMNoAIdXbJEOlhOsBaaszFnXgTNl/eFVnVqN4U+Y5031qdIGwj1fye8Xu6ehJ042X+OCzN7bCo49jdZO2kktFLZ5VyUXJfD93ku2avFK0MgT8HYoTSgbYQHAsPYemiBYYx4uSrhOxt484M= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=rA6qjoK8; arc=fail smtp.client-ip=40.107.243.79 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TuRdQDnhRAahkfVcrcE6B8AIYDJp095v1lm6hcqCmkyDqQEU2Fj+Fg1okWnbJJSGSEUuEEzRFQzTFUkvsRAjQqgMpQL3xL//i4dD2fqybWrkc3VNamIt1XI1iB1kSUxgiNmRNpu09kKXzfPmnvNlGQFydbsDTCGodSan+VYFxTYEfar7FFGRL+BehNwQ4q3+oqQ2Y3jXAbuai7CKj74LcxGSkds8JkDlSYj1KNTVM6y0suce7/WejfyDwTMgXrCdWq37/h8Zfb5Gra+apwyvYp5b+L86inM6z+XqkIu8Ad9ZYTTd2N4iTruqUnhSFrMCc6q8uz8v9IgA8dMY6KTd5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=RMCuH9mZs7slE8wzx6pXth3rWgnD5dQQOLmhWG9Wv/8=; b=b0NgBT2cJtJxjpeTf2Veq1PJtQjveU+7Drb9tKNDzbsI4gA09NIH41FTA0Q5kMaFsyCX3oNfNyHnxR0FESR/lcDSScvFeE1v0pLurp6Dcay5ji6snAARG10SLwS94fpp1LDmaqATv/SrjyWQB+Ycqo4cUpCfGbTEP1j6sTOfBBCy91SJLMn7l2a5kLytHjkOY1/cfJOHFl4AJuA1Q1iS3U4QrxGE1znPVIdgjKHnooPeRhdIUnhfUtRvwH8Vs3+jFaAeDeyORpUA6cYlVKbz8FnJH9zORmi6tdzVFjGwF/+696rUvBnYkdD2qKua+ir/hAFs/JWlMCoZFkN82FHK/g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.freedesktop.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RMCuH9mZs7slE8wzx6pXth3rWgnD5dQQOLmhWG9Wv/8=; b=rA6qjoK8k6NIUwyfJs25MxOf9kXkaFgq8oRywMJpVK85xEt9+YbQuH2xvi+vZrGQFB6r3T3dnp5Jvo/1qk/iGk3XBETgc62eB0fnxeSm6tkkLENOt0ARlP0ZpUm/6F6GBo6K+Q9LLYPvVVcowdb0sTmK1vX+LqJcKdC8cl9ubwg= Received: from BN9PR03CA0582.namprd03.prod.outlook.com (2603:10b6:408:10d::17) by DM4PR12MB6399.namprd12.prod.outlook.com (2603:10b6:8:b7::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7228.22; Fri, 26 Jan 2024 18:55:14 +0000 Received: from BN2PEPF0000449E.namprd02.prod.outlook.com (2603:10b6:408:10d:cafe::73) by BN9PR03CA0582.outlook.office365.com (2603:10b6:408:10d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7228.27 via Frontend Transport; Fri, 26 Jan 2024 18:55:13 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BN2PEPF0000449E.mail.protection.outlook.com (10.167.243.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.7228.16 via Frontend Transport; Fri, 26 Jan 2024 18:55:13 +0000 Received: from AUS-P9-MLIMONCI.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.34; Fri, 26 Jan 2024 12:55:11 -0600 From: Mario Limonciello To: , Alex Deucher , Harry Wentland , "Rafael J . Wysocki" , Hans de Goede CC: "open list:ACPI" , open list , "open list:DRM DRIVERS" , Melissa Wen , "Mark Pearson" , Mario Limonciello Subject: [PATCH 1/2] ACPI: video: Handle fetching EDID that is longer than 256 bytes Date: Fri, 26 Jan 2024 12:46:38 -0600 Message-ID: <20240126184639.8187-2-mario.limonciello@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240126184639.8187-1-mario.limonciello@amd.com> References: <20240126184639.8187-1-mario.limonciello@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN2PEPF0000449E:EE_|DM4PR12MB6399:EE_ X-MS-Office365-Filtering-Correlation-Id: 532a03b3-f739-407b-10be-08dc1ea053f3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DmKRLI0LVgR2+zLXC5D73BiuqB5jNYNBq5vxPpIsDEn9C0hv3ZOZe3s2RoOzlyVuSbbixp+iByXzCBsmIPXjMbOEsXcmJLXZpgdaUABaRGyQoUWLkb3NMqYkQPic8MKqQlj2NoAtlddX/TF3lOVh52jXExlXZr5TURaWbVagidO/Fq/e0FjzAAJMt7YjBpMsUYOFWca1VwePtwhEA2+uZKnjfT7MQWwGfyasJ5tZwAiRCg+d2JJ7jiXyOvwRmKSWn0nVwp+o+ehlSIbUY/4ooKh1pQdW+aLqh8E0uvhlr9a0WsV7Jd59qk8ye5k5zmKiy/S5LjzagcjapAT/x9kcnsw/TwhAhq10nsAO3/nhDl8mA2J1mJkbYICXoQalhiwSdhiVGs1nCR65xociZZlBh/oe1SILiIdw26WmCoGEAoaeNrvyQjypCo8lNV4AajI7U6ExgWjw7lhvbl6z7xH/nCCKrMC+U0LoCzVFRVF7c8rBsz7TLGyF1VIoM9+DEd8KUvBVzH/Y8vbvxv7S3kebaitsHL5qkaYIKWYiYGSRstRg+Uiegjc0d9C3/9nxROkfyFETOtREWlau1YRQyYiCJCD4lYAcQ5bRsAWWYtLf1jncLNfOQv+pjphTrIQnAXXCWRe/g711zKi9CAyzhqHboE4GpskJxUGxDlQibOb36gx0W2eZpKJ8HPr62zpEL/a5/X0Zzh7FMqUHmaZI1Gq/HW1+IOX+4t8AwDg3jCy9+qldAJLcZq4bC/PEBOG4sMY26P6x3tAc7cj17HaFn2ZrlbC7zdUeZkIZGzP6gS3g/0g= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(4636009)(346002)(39860400002)(376002)(396003)(136003)(230922051799003)(1800799012)(451199024)(64100799003)(186009)(82310400011)(36840700001)(40470700004)(46966006)(2906002)(16526019)(81166007)(86362001)(26005)(2616005)(478600001)(426003)(336012)(36860700001)(8676002)(8936002)(41300700001)(36756003)(70586007)(82740400003)(47076005)(83380400001)(1076003)(4326008)(54906003)(110136005)(70206006)(356005)(44832011)(7696005)(6666004)(316002)(5660300002)(966005)(40460700003)(40480700001)(148743002)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jan 2024 18:55:13.1494 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 532a03b3-f739-407b-10be-08dc1ea053f3 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN2PEPF0000449E.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB6399 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789180405039561341 X-GMAIL-MSGID: 1789180405039561341 The ACPI specification allows for an EDID to be up to 512 bytes but the _DDC EDID fetching code will only try up to 256 bytes. Modify the code to instead start at 512 bytes and work it's way down instead. Link: https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/Apx_B_Video_Extensions/output-device-specific-methods.html#ddc-return-the-edid-for-this-device Signed-off-by: Mario Limonciello --- drivers/acpi/acpi_video.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c index 62f4364e4460..b3b15dd4755d 100644 --- a/drivers/acpi/acpi_video.c +++ b/drivers/acpi/acpi_video.c @@ -624,6 +624,10 @@ acpi_video_device_EDID(struct acpi_video_device *device, arg0.integer.value = 1; else if (length == 256) arg0.integer.value = 2; + else if (length == 384) + arg0.integer.value = 3; + else if (length == 512) + arg0.integer.value = 4; else return -EINVAL; @@ -1443,7 +1447,7 @@ int acpi_video_get_edid(struct acpi_device *device, int type, int device_id, for (i = 0; i < video->attached_count; i++) { video_device = video->attached_array[i].bind_info; - length = 256; + length = 512; if (!video_device) continue; @@ -1478,13 +1482,18 @@ int acpi_video_get_edid(struct acpi_device *device, int type, int device_id, if (ACPI_FAILURE(status) || !buffer || buffer->type != ACPI_TYPE_BUFFER) { - length = 128; - status = acpi_video_device_EDID(video_device, &buffer, - length); - if (ACPI_FAILURE(status) || !buffer || - buffer->type != ACPI_TYPE_BUFFER) { - continue; + while (length) { + length -= 128; + status = acpi_video_device_EDID(video_device, &buffer, + length); + if (ACPI_FAILURE(status) || !buffer || + buffer->type != ACPI_TYPE_BUFFER) { + continue; + } + break; } + if (!length) + continue; } *edid = buffer->buffer.pointer; From patchwork Fri Jan 26 18:46:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mario Limonciello X-Patchwork-Id: 192758 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:2395:b0:106:343:edcb with SMTP id gw21csp81637dyb; Fri, 26 Jan 2024 10:56:06 -0800 (PST) X-Google-Smtp-Source: AGHT+IG5KArZx2sXy26Rcjxwbil+qmJB015QUQ/pgWDr2B4UV6kkfPRc3yJRQcIo+vqLRUJobPD/ X-Received: by 2002:a17:90a:b393:b0:292:bc8b:65da with SMTP id e19-20020a17090ab39300b00292bc8b65damr365616pjr.0.1706295366217; Fri, 26 Jan 2024 10:56:06 -0800 (PST) Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id h4-20020a17090aa88400b002905abc80c2si1557312pjq.174.2024.01.26.10.56.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Jan 2024 10:56:06 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-40532-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=GZPP7lFv; arc=fail (signature failed); spf=pass (google.com: domain of linux-kernel+bounces-40532-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-40532-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id EF6B8285040 for ; Fri, 26 Jan 2024 18:56:05 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 90DFE225D2; Fri, 26 Jan 2024 18:55:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="GZPP7lFv" Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2061.outbound.protection.outlook.com [40.107.101.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AF3AD22309; Fri, 26 Jan 2024 18:55:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.101.61 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706295320; cv=fail; b=Fntqfspl28ixjcRrJL75kOUOR86RoLlQOT0En4Z5Yi3pUUDMpdyM/4UFuuVX/KA9bIQUHkeNl6TU2R7FKP1TW+jm7Jwg/pmlHDRTaK+mB+VUrtfWPxRXQsyLqawMwGONTMKdqL+5cD5hbjqh1lkpL7MqPcwEiEKfLUf4iTUT8NU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706295320; c=relaxed/simple; bh=y9vXwiPRhjDK5LIG1HjWnDXOXe2AuFCrRdsVX4inWOs=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=H40ousakgWsOxOV/wXVZhVSvXhNYjXOM+HEC+AXUghzkOoyg2xrkLNiXS3qsEN50ezmXsf6NZHN90c/zx3kTdakNGITizRvQOsA3We2HCCsrpeP7Wb6X2nRytG8ckUdikSPeyAPYj40gA1Cbj8bA3QIK52QTZiH/8VWe3EweDIw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=GZPP7lFv; arc=fail smtp.client-ip=40.107.101.61 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Gt+0+2AfmNBHuvzaS/lsgqIUa2Ozuwkiz0HeEN0YPyJ19ggW5p5Ids6aFlyJc7Gv9nt2alxRIYk/0EHiZmL+A6ukHq+cx0hFLF+9vawc0KGHJ6GPZAXqigCKpx0jJVOoP47hX9nGuv522B1u6WeyzPmFIymG56XfoDiBpVw7CpkOz4Lun0B6gMiz+ALCgrgpR1caXw2kCVxyV3hcZIGs9UD75IFXer9JbnAIRHYDMq15pw8HOimUS/sj0qrNoTIBsaMTF9iKplcMCwPjDNdtSqm+wIbstICoLdXQGPBFaoCdqnTUezVbkYMbwNjOafATiR3I4sNl6JRKC4AW8CL7Pg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=66Vx4GHD7Q38xoFwa1pZit4wSgj+IvKLEQn562SH+5g=; b=gUSMhu6Xdfs5L3PbHUHITNOQfFuDfYIJeu3DaMuJpo51KZEg4MqgGJhczs/UDXRNNhpVjEzH52C5DfzOmfyfhlL9qyXWm9fcF35siAa95ZMWkOJlYUNDSoPGk9HemweIgmDK6GyINxLrgJNLywtfylCrTxqYsUvgr386F4rBU44/51BhEi4jI8/ec/XtK8M14hpZM17InEr+dGd9b5xbvAg/o0/dZSDYE5CR486l078h2YIxUoQsFueMRBehPptmeswIeGvdgb73Kb965LD9WKTyh3nYoWW34FLkAE0SrPcIzSqEvawzTC9tSQVd0DkTTgzdPgl9JqXP13d6WAgdyQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.freedesktop.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=66Vx4GHD7Q38xoFwa1pZit4wSgj+IvKLEQn562SH+5g=; b=GZPP7lFvK2WqPniINP1gt0I43PeIy4EowItLM5K/7fkPJfftF8ojGIRiPRBFX02ssH4LXtDJmkOEUUKJ0AgRAi8cljjREybmd7kIQ9k7r8aofACtBHoZurUf4sX2ORVakKe6SQNLhLCaHhmhWFkjGdmNuQN1mAJCj90rdjPTo2g= Received: from BN9PR03CA0573.namprd03.prod.outlook.com (2603:10b6:408:10d::8) by DS0PR12MB7993.namprd12.prod.outlook.com (2603:10b6:8:14b::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7202.24; Fri, 26 Jan 2024 18:55:15 +0000 Received: from BN2PEPF0000449E.namprd02.prod.outlook.com (2603:10b6:408:10d:cafe::77) by BN9PR03CA0573.outlook.office365.com (2603:10b6:408:10d::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7228.27 via Frontend Transport; Fri, 26 Jan 2024 18:55:15 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BN2PEPF0000449E.mail.protection.outlook.com (10.167.243.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.7228.16 via Frontend Transport; Fri, 26 Jan 2024 18:55:15 +0000 Received: from AUS-P9-MLIMONCI.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.34; Fri, 26 Jan 2024 12:55:12 -0600 From: Mario Limonciello To: , Alex Deucher , Harry Wentland , "Rafael J . Wysocki" , Hans de Goede CC: "open list:ACPI" , open list , "open list:DRM DRIVERS" , Melissa Wen , "Mark Pearson" , Mario Limonciello Subject: [PATCH 2/2] drm/amd: Fetch the EDID from _DDC if available for eDP Date: Fri, 26 Jan 2024 12:46:39 -0600 Message-ID: <20240126184639.8187-3-mario.limonciello@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240126184639.8187-1-mario.limonciello@amd.com> References: <20240126184639.8187-1-mario.limonciello@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN2PEPF0000449E:EE_|DS0PR12MB7993:EE_ X-MS-Office365-Filtering-Correlation-Id: 35326c83-62f1-4d08-ee3e-08dc1ea05534 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: fxm+QCg9zNsDOdotC7Y5GMTySPho2jP5qKbIfiXVdlcAU2iChPy/ZpO/2IEtivhWKvkGuj/U9cUD4qpt/pn13Dvc3/2ZceOnYltjVzM8aVg2Oz61NimOA+c6T713wVQ3Dmb073VzV/HdSQoMtq4w/GYzZ2Uj8/R/5MKLsnY0MgM7e1cEtKZ1PNEYWSrMu2SMDvGm5Wl3fsKXcnbCJ3wnTM29cpEYqsY/a34x8Ru2DGM1r3sh+R8cKDgP9ozRwVv8aIf0xNF1L+uvZB7JGTVO7A8bTNSgnEvT2GAgw49QVJExH4AlEgMq25MesowYVPFa8+DHi6kGR7KGHL/6vXkJnlh6ahMfkNkKIYG2L57iCb/+czaAH5oY2MzDCo6gSTEPC0MYLdp3uX19aC8SjnOlFgC/54jT5YE4PSTdbrX6+9Z/Q+Lm+2lRuHdxi3IGi5bCfRfGi2Y/YlOC0P1mbwAKf5bLwUttHS9fcTiLZXIGLB8qV+2QqZZzZNrEpflXC7+OtyLrwkrM21ZIg0SaVPqcHzXEG0LYpIYfJ/OjdqQVDLe/rXpIQmfbscTSXGZ76CUPDwIQ//soRo4bYxLGPQRuHVxLww3EEV9r0VFCBV6K9H8E2M3fCyBMtCFLNdkin96qn1JjN+4xWjvehMGlbcu4iQ+ToIRPuTMj5alV6olRPd8SYP4s9NLjPPJL+ETbvOMLsEHLc+0z+VfcFFraJaZ4UP2sBuxYA7snEVEY7xqymUAWS2bEF6KF9m0AooXLPq1VPXAHLPNNB45vuzplXlei5w== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(4636009)(136003)(346002)(39860400002)(396003)(376002)(230922051799003)(451199024)(1800799012)(82310400011)(64100799003)(186009)(36840700001)(40470700004)(46966006)(36860700001)(8676002)(4326008)(8936002)(47076005)(44832011)(7696005)(316002)(2616005)(1076003)(478600001)(41300700001)(336012)(426003)(40480700001)(2906002)(26005)(81166007)(16526019)(36756003)(86362001)(110136005)(356005)(6666004)(40460700003)(70206006)(83380400001)(82740400003)(54906003)(70586007)(5660300002)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jan 2024 18:55:15.2431 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 35326c83-62f1-4d08-ee3e-08dc1ea05534 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN2PEPF0000449E.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB7993 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789180370371883886 X-GMAIL-MSGID: 1789180370371883886 Some manufacturers have intentionally put an EDID that differs from the EDID on the internal panel on laptops. Attempt to fetch this EDID if it exists and prefer it over the EDID that is provided by the panel. Signed-off-by: Mario Limonciello --- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 ++ drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c | 30 +++++++++++++++++++ .../gpu/drm/amd/amdgpu/amdgpu_connectors.c | 5 ++++ .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 8 ++++- .../amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 7 +++-- 5 files changed, 49 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index c5f3859fd682..99abe12567a4 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -1520,6 +1520,7 @@ int amdgpu_acpi_get_mem_info(struct amdgpu_device *adev, int xcc_id, void amdgpu_acpi_get_backlight_caps(struct amdgpu_dm_backlight_caps *caps); bool amdgpu_acpi_should_gpu_reset(struct amdgpu_device *adev); +void *amdgpu_acpi_edid(struct amdgpu_device *adev, struct drm_connector *connector); void amdgpu_acpi_detect(void); void amdgpu_acpi_release(void); #else @@ -1537,6 +1538,7 @@ static inline int amdgpu_acpi_get_mem_info(struct amdgpu_device *adev, } static inline void amdgpu_acpi_fini(struct amdgpu_device *adev) { } static inline bool amdgpu_acpi_should_gpu_reset(struct amdgpu_device *adev) { return false; } +static inline void *amdgpu_acpi_edid(struct amdgpu_device *adev, struct drm_connector *connector) { return NULL; } static inline void amdgpu_acpi_detect(void) { } static inline void amdgpu_acpi_release(void) { } static inline bool amdgpu_acpi_is_power_shift_control_supported(void) { return false; } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c index e550067e5c5d..c106335f1f22 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c @@ -1380,6 +1380,36 @@ bool amdgpu_acpi_should_gpu_reset(struct amdgpu_device *adev) #endif } +/** + * amdgpu_acpi_edid + * @adev: amdgpu_device pointer + * @connector: drm_connector pointer + * + * Returns the EDID used for the internal panel if present, NULL otherwise. + */ +void * +amdgpu_acpi_edid(struct amdgpu_device *adev, struct drm_connector *connector) +{ + struct drm_device *ddev = adev_to_drm(adev); + struct acpi_device *acpidev = ACPI_COMPANION(ddev->dev); + void *edid; + int r; + + if (!acpidev) + return NULL; + + if (connector->connector_type != DRM_MODE_CONNECTOR_eDP) + return NULL; + + r = acpi_video_get_edid(acpidev, ACPI_VIDEO_DISPLAY_LCD, -1, &edid); + if (r < 0) { + DRM_DEBUG_DRIVER("Failed to get EDID from ACPI: %d\n", r); + return NULL; + } + + return kmemdup(edid, r, GFP_KERNEL); +} + /* * amdgpu_acpi_detect - detect ACPI ATIF/ATCS methods * diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c index 9caba10315a8..c7e1563a46d3 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c @@ -278,6 +278,11 @@ static void amdgpu_connector_get_edid(struct drm_connector *connector) struct amdgpu_device *adev = drm_to_adev(dev); struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector); + if (amdgpu_connector->edid) + return; + + /* if the BIOS specifies the EDID via _DDC, prefer this */ + amdgpu_connector->edid = amdgpu_acpi_edid(adev, connector); if (amdgpu_connector->edid) return; diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index cd98b3565178..1faa21f542bd 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -6562,17 +6562,23 @@ static void amdgpu_dm_connector_funcs_force(struct drm_connector *connector) { struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector); + struct amdgpu_device *adev = drm_to_adev(connector->dev); struct dc_link *dc_link = aconnector->dc_link; struct dc_sink *dc_em_sink = aconnector->dc_em_sink; struct edid *edid; + /* prefer ACPI over panel for eDP */ + edid = amdgpu_acpi_edid(adev, connector); + /* * Note: drm_get_edid gets edid in the following order: * 1) override EDID if set via edid_override debugfs, * 2) firmware EDID if set via edid_firmware module parameter * 3) regular DDC read. */ - edid = drm_get_edid(connector, &amdgpu_connector->ddc_bus->aux.ddc); + if (!edid) + edid = drm_get_edid(connector, &amdgpu_connector->ddc_bus->aux.ddc); + if (!edid) { DRM_ERROR("No EDID found on connector: %s.\n", connector->name); return; diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c index e3915c4f8566..6bf2a8867e76 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c @@ -895,6 +895,7 @@ enum dc_edid_status dm_helpers_read_local_edid( { struct amdgpu_dm_connector *aconnector = link->priv; struct drm_connector *connector = &aconnector->base; + struct amdgpu_device *adev = drm_to_adev(connector->dev); struct i2c_adapter *ddc; int retry = 3; enum dc_edid_status edid_status; @@ -909,8 +910,10 @@ enum dc_edid_status dm_helpers_read_local_edid( * do check sum and retry to make sure read correct edid. */ do { - - edid = drm_get_edid(&aconnector->base, ddc); + /* prefer ACPI over panel for eDP */ + edid = amdgpu_acpi_edid(adev, connector); + if (!edid) + edid = drm_get_edid(&aconnector->base, ddc); /* DP Compliance Test 4.2.2.6 */ if (link->aux_mode && connector->edid_corrupt)