From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: redhat.com, ip: 209.132.183.28, mailfrom: lersek@redhat.com) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by groups.io with SMTP; Tue, 17 Sep 2019 12:50:31 -0700 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C6C7A8980E0; Tue, 17 Sep 2019 19:50:30 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-120-37.rdu2.redhat.com [10.10.120.37]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8BE79600C4; Tue, 17 Sep 2019 19:50:29 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Ard Biesheuvel , David Woodhouse , Jordan Justen Subject: [PATCH 25/35] OvmfPkg/VideoDxe: document EFI_EDID_OVERRIDE_PROTOCOL.GetEdid() call Date: Tue, 17 Sep 2019 21:49:25 +0200 Message-Id: <20190917194935.24322-26-lersek@redhat.com> In-Reply-To: <20190917194935.24322-1-lersek@redhat.com> References: <20190917194935.24322-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.6.2 (mx1.redhat.com [10.5.110.67]); Tue, 17 Sep 2019 19:50:30 +0000 (UTC) Content-Transfer-Encoding: quoted-printable According to the UEFI spec -- and to the edk2 header "MdePkg/Include/Protocol/EdidOverride.h" too --, EFI_EDID_OVERRIDE_PROTOCOL_GET_EDID takes an (EFI_HANDLE*), and not an EFI_HANDLE, as second parameter ("ChildHandle"). This is probably [*] a bug in the UEFI spec. Given that this CSM module (VideoDxe) had been used for a long time on physical platforms before it was moved to OvmfPkg, keep the current "ChildHandle" argument, just cast it explicitly. [*] The edk2 tree contains no other GetEdid() call, and also no GetEdid() implementation. The edk2-platforms tree contains two GetEdid() calls, at commit 022c212167e0, in files - "Drivers/DisplayLink/DisplayLinkPkg/DisplayLinkGop/Edid.c", - "Drivers/OptionRomPkg/CirrusLogic5430Dxe/Edid.c". From these, the first passes an (EFI_HANDLE*) as "ChildHandle", the second passes an EFI_HANDLE. It's difficult to draw a conclusion. :/ No functional changes. (I've also requested a non-normative (informative) clarification for the UEFI spec: , in the direction that matches this patch.) Cc: Ard Biesheuvel Cc: David Woodhouse Cc: Jordan Justen Signed-off-by: Laszlo Ersek --- Notes: build-tested only OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.c b/OvmfPkg/Csm/Bio= sThunk/VideoDxe/BiosVideo.c index 0640656dba14..995136adee27 100644 --- a/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.c +++ b/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.c @@ -1402,9 +1402,13 @@ BiosVideoCheckForVbe ( goto Done; } =20 + // + // Cast "ChildHandle" to (EFI_HANDLE*) in order to work around the s= pec bug + // in UEFI v2.8, reported as Mantis#2018. + // Status =3D EdidOverride->GetEdid ( EdidOverride, - BiosVideoPrivate->Handle, + (EFI_HANDLE *) BiosVideoPrivate->Handle, &EdidAttributes, &EdidOverrideDataSize, (UINT8 **) &EdidOverrideDataBlock --=20 2.19.1.3.g30247aa5d201