From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 8E4617803CD for ; Tue, 13 Feb 2024 08:30:38 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=VitOFzZo1YYrGI1sj8S9kDT7ilQq3o8AQiwvqsa5w8E=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1707813036; v=1; b=qBIxvogACQ/RKyh/kpYWIJvjLWhc91MRcqPnXuRsptJVTchmhPzZZytBFHpVBvDpw1sok07W qfpVtZw2SDiFukZz3wvu1W3MUWCAwYVhwIzSsUh60vPJzdBDl5L3E2P8nlfh0UWOwm9GfglfeAU FbQfH8C3WeKygQ/XoXy5jXvw= X-Received: by 127.0.0.2 with SMTP id 8D4rYY7687511xedzzIpOSuj; Tue, 13 Feb 2024 00:30:36 -0800 X-Received: from smtp.joursoir.net (smtp.joursoir.net [91.192.102.115]) by mx.groups.io with SMTP id smtpd.web10.7086.1707813035894228451 for ; Tue, 13 Feb 2024 00:30:36 -0800 X-Received: from reeva.ad.3l.ru (unknown [91.222.228.66]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp.joursoir.net (Postfix) with ESMTPSA id 5DC5D4007D; Tue, 13 Feb 2024 11:30:29 +0300 (MSK) From: "Joursoir" To: devel@edk2.groups.io Cc: ray.ni@intel.com, guo.dong@intel.com, benjamin.you@intel.com, maurice.ma@intel.com, sean@starlabs.systems, james.lu@intel.com, gua.guo@intel.com Subject: [edk2-devel] [PATCH RESEND 1/1] UefiPayloadPkg: Add SMM variable related HOBs support for SBL Date: Tue, 13 Feb 2024 11:30:28 +0300 Message-ID: <20240213083028.15880-1-chat@joursoir.net> MIME-Version: 1.0 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,chat@joursoir.net List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: PdJQKvr2KnIsV3yohfeaZvdVx7686176AA= Content-Transfer-Encoding: quoted-printable X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=qBIxvogA; dmarc=none; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io When UefiPayloadPkg is compiled with SMM_SUPPORT enabled and=0D VARIABLE_SUPPORT set to SPI, the following HOBs must be=0D available:=0D =0D * gSmmRegisterInfoGuid=0D * gEfiSmmSmramMemoryGuid=0D * gSpiFlashInfoGuid=0D * gNvVariableInfoGuid=0D * gS3CommunicationGuid=0D =0D Migrate these HOBs information from the bootloader HOB space to the=0D UEFI payload HOB space. Parse them in misc function, so it won't fail=0D if there would be no HOBs.=0D =0D This patch was tested on Slim Bootloader with latest UEFI payload, and=0D it worked as expected.=0D =0D Signed-off-by: Alexander Goncharov =0D ---=0D .../Library/SblParseLib/SblParseLib.c | 109 ++++++++++++++++--=0D .../Library/SblParseLib/SblParseLib.inf | 5 +=0D 2 files changed, 107 insertions(+), 7 deletions(-)=0D =0D diff --git a/UefiPayloadPkg/Library/SblParseLib/SblParseLib.c b/UefiPayload= Pkg/Library/SblParseLib/SblParseLib.c=0D index d88238bfdc..a4cf90618b 100644=0D --- a/UefiPayloadPkg/Library/SblParseLib/SblParseLib.c=0D +++ b/UefiPayloadPkg/Library/SblParseLib/SblParseLib.c=0D @@ -16,6 +16,11 @@=0D #include =0D #include =0D #include =0D +#include =0D +#include =0D +#include =0D +#include =0D +#include =0D =0D /**=0D This function retrieves the parameter base address from boot loader.=0D @@ -264,6 +269,17 @@ ParseMiscInfo (=0D RETURN_STATUS Status;=0D UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGES *BlRootBridgesHob;=0D UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGES *PldRootBridgesHob;=0D + PLD_SMM_REGISTERS *BlSmmRegisterHob;=0D + PLD_SMM_REGISTERS *PldSmmRegisterHob;=0D + EFI_SMRAM_HOB_DESCRIPTOR_BLOCK *BlSmmMemoryHob;=0D + EFI_SMRAM_HOB_DESCRIPTOR_BLOCK *PldSmmMemoryHob;=0D + SPI_FLASH_INFO *BlSpiFlashInfoHob;=0D + SPI_FLASH_INFO *PldSpiFlashInfoHob;=0D + NV_VARIABLE_INFO *BlNvVariableHob;=0D + NV_VARIABLE_INFO *PldNvVariableHob;=0D + PLD_S3_COMMUNICATION *BlS3CommunicationHob;=0D + PLD_S3_COMMUNICATION *PldS3CommunicationHob;=0D + UINT32 Length;=0D =0D Status =3D RETURN_NOT_FOUND;=0D BlRootBridgesHob =3D (UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGES *)GetGuidHobDat= aFromSbl (=0D @@ -278,13 +294,92 @@ ParseMiscInfo (=0D BlRootBridgesHob->Header.Length=0D );=0D ASSERT (PldRootBridgesHob !=3D NULL);=0D - if (PldRootBridgesHob !=3D NULL) {=0D - CopyMem (PldRootBridgesHob, BlRootBridgesHob, BlRootBridgesHob->Head= er.Length);=0D - DEBUG ((DEBUG_INFO, "Create PCI root bridge info guid hob\n"));=0D - Status =3D RETURN_SUCCESS;=0D - } else {=0D - Status =3D RETURN_OUT_OF_RESOURCES;=0D - }=0D + if (PldRootBridgesHob =3D=3D NULL)=0D + return RETURN_OUT_OF_RESOURCES;=0D +=0D + CopyMem (PldRootBridgesHob, BlRootBridgesHob, BlRootBridgesHob->Header= .Length);=0D + DEBUG ((DEBUG_INFO, "Create PCI root bridge info guid hob\n"));=0D + Status =3D RETURN_SUCCESS;=0D + }=0D +=0D + //=0D + // Create SMM info hob.=0D + //=0D + BlSmmRegisterHob =3D (PLD_SMM_REGISTERS *)GetGuidHobDataFromSbl (&gSmmRe= gisterInfoGuid);=0D + if (BlSmmRegisterHob !=3D NULL) {=0D + Length =3D sizeof (PLD_SMM_REGISTERS) + 5 * sizeof (PLD_GENERIC_REGIST= ER);=0D + PldSmmRegisterHob =3D BuildGuidHob (&gSmmRegisterInfoGuid, Length);=0D + ASSERT (PldSmmRegisterHob !=3D NULL);=0D + if (PldSmmRegisterHob =3D=3D NULL)=0D + return RETURN_OUT_OF_RESOURCES;=0D +=0D + CopyMem (PldSmmRegisterHob, BlSmmRegisterHob, Length);=0D + DEBUG ((DEBUG_INFO, "Created SMM info hob\n"));=0D + Status =3D RETURN_SUCCESS;=0D + }=0D +=0D + //=0D + // Create SMM memory hob.=0D + //=0D + BlSmmMemoryHob =3D (EFI_SMRAM_HOB_DESCRIPTOR_BLOCK *)GetGuidHobDataFromS= bl (&gEfiSmmSmramMemoryGuid);=0D + if (BlSmmMemoryHob !=3D NULL) {=0D + Length =3D sizeof (EFI_SMRAM_HOB_DESCRIPTOR_BLOCK) + sizeof (EFI_SMRAM= _DESCRIPTOR);=0D + PldSmmMemoryHob =3D BuildGuidHob (&gEfiSmmSmramMemoryGuid, Length);=0D + ASSERT (PldSmmMemoryHob !=3D NULL);=0D + if (PldSmmMemoryHob =3D=3D NULL)=0D + return RETURN_OUT_OF_RESOURCES;=0D +=0D + CopyMem (PldSmmMemoryHob, BlSmmMemoryHob, Length);=0D + DEBUG ((DEBUG_INFO, "Created SMM memory hob\n"));=0D + Status =3D RETURN_SUCCESS;=0D + }=0D +=0D + //=0D + // Create SPI flash info hob.=0D + //=0D + BlSpiFlashInfoHob =3D (SPI_FLASH_INFO *)GetGuidHobDataFromSbl (&gSpiFlas= hInfoGuid);=0D + if (BlSpiFlashInfoHob !=3D NULL) {=0D + Length =3D sizeof (SPI_FLASH_INFO);=0D + PldSpiFlashInfoHob =3D BuildGuidHob (&gSpiFlashInfoGuid, Length);=0D + ASSERT (PldSpiFlashInfoHob !=3D NULL);=0D + if (PldSpiFlashInfoHob =3D=3D NULL)=0D + return RETURN_OUT_OF_RESOURCES;=0D +=0D + CopyMem (PldSpiFlashInfoHob, BlSpiFlashInfoHob, Length);=0D + DEBUG ((DEBUG_INFO, "Created SPI flash info hob\n"));=0D + Status =3D RETURN_SUCCESS;=0D + }=0D +=0D + //=0D + // Create SPI flash variable info hob.=0D + //=0D + BlNvVariableHob =3D (NV_VARIABLE_INFO *)GetGuidHobDataFromSbl (&gNvVaria= bleInfoGuid);=0D + if (BlNvVariableHob !=3D NULL) {=0D + Length =3D sizeof (NV_VARIABLE_INFO);=0D + PldNvVariableHob =3D BuildGuidHob (&gNvVariableInfoGuid, Length);=0D + ASSERT (PldNvVariableHob !=3D NULL);=0D + if (PldNvVariableHob =3D=3D NULL)=0D + return RETURN_OUT_OF_RESOURCES;=0D +=0D + CopyMem (PldNvVariableHob, BlNvVariableHob, Length);=0D + DEBUG ((DEBUG_INFO, "Created SPI flash variable info hob\n"));=0D + Status =3D RETURN_SUCCESS;=0D + }=0D +=0D + //=0D + // Create SMM S3 communication hob.=0D + //=0D + BlS3CommunicationHob =3D (PLD_S3_COMMUNICATION *)GetGuidHobDataFromSbl (= &gS3CommunicationGuid);=0D + if (BlS3CommunicationHob !=3D NULL) {=0D + Length =3D sizeof (PLD_S3_COMMUNICATION);=0D + PldS3CommunicationHob =3D BuildGuidHob (&gS3CommunicationGuid, Length)= ;=0D + ASSERT (PldS3CommunicationHob !=3D NULL);=0D + if (PldS3CommunicationHob =3D=3D NULL)=0D + return RETURN_OUT_OF_RESOURCES;=0D +=0D + CopyMem (PldS3CommunicationHob, BlS3CommunicationHob, Length);=0D + DEBUG ((DEBUG_INFO, "Created SMM S3 communication hob\n"));=0D + Status =3D RETURN_SUCCESS;=0D }=0D =0D return Status;=0D diff --git a/UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf b/UefiPaylo= adPkg/Library/SblParseLib/SblParseLib.inf=0D index f83a10ccd8..1c77d86a86 100644=0D --- a/UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf=0D +++ b/UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf=0D @@ -41,6 +41,11 @@=0D gEfiGraphicsInfoHobGuid=0D gEfiGraphicsDeviceInfoHobGuid=0D gUniversalPayloadPciRootBridgeInfoGuid=0D + gSmmRegisterInfoGuid=0D + gEfiSmmSmramMemoryGuid=0D + gSpiFlashInfoGuid=0D + gNvVariableInfoGuid=0D + gS3CommunicationGuid=0D =0D [Pcd]=0D gUefiPayloadPkgTokenSpaceGuid.PcdBootloaderParameter=0D -- =0D 2.43.1=0D =0D -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#115376): https://edk2.groups.io/g/devel/message/115376 Mute This Topic: https://groups.io/mt/104328919/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-