From nobody Sat Nov 2 14:42:14 2024 Delivered-To: importer@patchew.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Authentication-Results: mx.zoho.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org; Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1488471325250656.1915595566255; Thu, 2 Mar 2017 08:15:25 -0800 (PST) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 4EF00821F5; Thu, 2 Mar 2017 08:15:21 -0800 (PST) Received: from mail-wm0-x22c.google.com (mail-wm0-x22c.google.com [IPv6:2a00:1450:400c:c09::22c]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 27B37821F3 for ; Thu, 2 Mar 2017 08:15:20 -0800 (PST) Received: by mail-wm0-x22c.google.com with SMTP id n11so28648014wma.1 for ; Thu, 02 Mar 2017 08:15:20 -0800 (PST) Received: from localhost.localdomain ([105.147.1.203]) by smtp.gmail.com with ESMTPSA id n13sm11412650wra.17.2017.03.02.08.15.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 02 Mar 2017 08:15:18 -0800 (PST) X-Original-To: edk2-devel@lists.01.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=A8Xw0cURSFXmebgSJtoXTj3rOm2Y3DFwoF0Z4LmK2lY=; b=XbMJdf9lzocX/Gps3E/mqq/kVWBfuEWRgpNzJ+vFZitwiESRGpoUT9O/pnd0kKjl0y oWWWYnRquCsfKkWNnwd7BygggjoTJcMn3JG/ZCPTehreGBCb8/EqyvnZzFowK5r4kCGg 5gXnOE/D+QIeT4xNIdq8cS4hSFKh4ExucqebA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=A8Xw0cURSFXmebgSJtoXTj3rOm2Y3DFwoF0Z4LmK2lY=; b=cxFOORAbWZPh4TuVCHFlz8db5Xvyyz86wMIUlT809KRDvfKGekXqztymEj+NUvUELu hc92I03qNCAckoHWEvbqt2q2Qnktv2tuD6qMCOCoYeR+uUEnW+CGl7rORK0M2g8oaDBL mT0DmyiR6iSU2ITgkbJGIo09WU3uq6k0D3tOuClygtiL4Yznk/0m4QBM1rl+Mk3tS7yF X16BTMw1MwoYmjGz/0nfNxmypVn3RawavBxs9rAAKnVAlm9s/VE8xhBC5v1Bx4PB9yHO u5aOIK2x+N5+uOGBZrGb1oaGj5m8U1N9KixmXehQAv5aCgmO7LKsgEkCKLpRAFBDSqm7 MKrw== X-Gm-Message-State: AMke39lTOwswFyg5KK8T9WKXabUspYD5QEJuJzx4eXfbaEvLHcLQg6ZZGa70aL7er1lNRyaw X-Received: by 10.28.31.139 with SMTP id f133mr8883151wmf.25.1488471318723; Thu, 02 Mar 2017 08:15:18 -0800 (PST) From: Ard Biesheuvel To: edk2-devel@lists.01.org, lersek@redhat.com, leif.lindholm@linaro.org Date: Thu, 2 Mar 2017 16:15:03 +0000 Message-Id: <1488471305-23752-3-git-send-email-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1488471305-23752-1-git-send-email-ard.biesheuvel@linaro.org> References: <1488471305-23752-1-git-send-email-ard.biesheuvel@linaro.org> Subject: [edk2] [PATCH 2/4] ArmVirtPkg/ArmVirtMemoryInitPeiLib: check for capsules before memory init X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jiewen.yao@intel.com, Ard Biesheuvel MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Look for any capsules left in memory by the OS across reset before releasing the memory for normal use, so that they can be preserved and processed later. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel --- ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c | 6= 0 +++++++++++++++++++- ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.inf | = 9 ++- 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPe= iLib.c b/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib= .c index 6f3e54b7afcb..7f55f634e4e5 100644 --- a/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c +++ b/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c @@ -17,11 +17,15 @@ =20 #include #include +#include #include #include #include #include -#include +#include +#include + +#include =20 VOID BuildMemoryTypeInformationHob ( @@ -49,6 +53,58 @@ InitMmu ( } } =20 +STATIC +VOID +CheckCapsule ( + IN EFI_PHYSICAL_ADDRESS UefiMemoryBase, + IN UINT64 UefiMemorySize + ) +{ + EFI_STATUS Status; + EFI_PEI_SERVICES **PeiServices; + PEI_CAPSULE_PPI *Capsule; + VOID *CapsuleBuffer; + UINTN CapsuleBufferLength; + + PeiServices =3D (EFI_PEI_SERVICES **) GetPeiServicesTablePointer (); + ASSERT (PeiServices !=3D NULL); + + // + // Check for persistent capsules + // + Status =3D PeiServicesLocatePpi (&gPeiCapsulePpiGuid, 0, NULL, + (VOID **)&Capsule); + if (Status =3D=3D EFI_SUCCESS) { + Status =3D Capsule->CheckCapsuleUpdate (PeiServices); + if (Status =3D=3D EFI_SUCCESS) { + + CapsuleBuffer =3D (VOID *)((UINTN)FixedPcdGet32 (PcdCPUCoresStackBas= e) + + FixedPcdGet32 (PcdCPUCorePrimaryStackSize)); + CapsuleBufferLength =3D (UINTN)UefiMemoryBase - (UINTN)CapsuleBuffer; + + PeiServicesSetBootMode (BOOT_ON_FLASH_UPDATE); + Status =3D Capsule->Coalesce (PeiServices, &CapsuleBuffer, + &CapsuleBufferLength); + if (!EFI_ERROR (Status)) { + DEBUG ((DEBUG_INFO, "%a: Coalesced capsule @ %p (0x%lx) capsule\n", + __FUNCTION__, CapsuleBuffer, CapsuleBufferLength)); + } else { + DEBUG ((DEBUG_WARN, "%a: failed to coalesce() capsule (Status =3D= =3D %r)\n", + __FUNCTION__, Status)); + return; + } + + Status =3D Capsule->CreateState (PeiServices, CapsuleBuffer, + CapsuleBufferLength); + + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_WARN, "%a: Capsule->CreateState failed (Status =3D= =3D %r)\n", + __FUNCTION__, Status)); + } + } + } +} + EFI_STATUS EFIAPI MemoryPeim ( @@ -109,6 +165,8 @@ MemoryPeim ( // Build Memory Allocation Hob InitMmu (); =20 + CheckCapsule (UefiMemoryBase, UefiMemorySize); + if (FeaturePcdGet (PcdPrePiProduceMemoryTypeInformationHob)) { // Optional feature that helps prevent EFI memory map fragmentation. BuildMemoryTypeInformationHob (); diff --git a/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPe= iLib.inf b/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiL= ib.inf index 028d6fb5ac28..4524afd2c7ed 100644 --- a/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.inf +++ b/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.inf @@ -37,6 +37,8 @@ [LibraryClasses] ArmMmuLib ArmPlatformLib CacheMaintenanceLib + PeiServicesLib + PeiServicesTablePointerLib =20 [Guids] gEfiMemoryTypeInformationGuid @@ -48,6 +50,8 @@ [FixedPcd] gArmTokenSpaceGuid.PcdFdSize =20 gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize + gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase + gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize =20 gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIReclaimMemory gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIMemoryNVS @@ -64,5 +68,8 @@ [Pcd] gArmTokenSpaceGuid.PcdSystemMemorySize gArmTokenSpaceGuid.PcdFdBaseAddress =20 +[Ppis] + gPeiCapsulePpiGuid + [Depex] - TRUE + gPeiCapsulePpiGuid --=20 2.7.4 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel