From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2607:f8b0:4001:c06::243; helo=mail-io0-x243.google.com; envelope-from=ard.biesheuvel@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-io0-x243.google.com (mail-io0-x243.google.com [IPv6:2607:f8b0:4001:c06::243]) (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 046E32115488E for ; Wed, 6 Jun 2018 21:50:14 -0700 (PDT) Received: by mail-io0-x243.google.com with SMTP id u4-v6so10322126iof.2 for ; Wed, 06 Jun 2018 21:50:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=CQHXrfACxdliUxabM1IjpBzkexY6RNDLPAlKdz06SJ0=; b=ZJGyBbJl3prgIrHhe7iQTqJ0dOZB+TtrG7v/indIHNoP9r7cQYML2kUGH5H2YnKra/ EsAdUBNy2D+8OuqWDT358hrU+3zWr/wXZBlRkvaUWR0Iw6BoW0SmwYb3lXeCMBmb3xBE PbGxAyqEkUlII7kzUkeRWUZNjJWxLBCIf4VlQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=CQHXrfACxdliUxabM1IjpBzkexY6RNDLPAlKdz06SJ0=; b=BKASxorcpP2vHS0zVOzEh69UDbTNCbrI4BBnoWjpO9c4FHGvMB4Javj3jkm8BCupJ7 cMuOjutNptmqbXem+MI8JY6BGA3MORiTTrc+wW3SVOPTlF9vurGXmHG7AC9GIr1idBp3 oxo5kFCbNVJ2mb5TkMrW08kjHwiv95sCLOvfQUmEUTDGB4/K6F367o73fKJJ0V6eF2cx LTvwb7UzpwFaF5cg0G+NNzu7ImOhM6sN0jrLQE3ZISgJZl5LR6zMsKxrKnnN6Kywo47z 2JxbNuocImhLIhUZ14iIxlDiLOfVbv0lu6foRN7sSVvse0+N1jGmAGKUH5eK9BXcg8YX dmRw== X-Gm-Message-State: APt69E3UUQUsnq7usa4jvCEglh9YWGe6Rv/I/kNjj2VGMKt/bSFkx/We VM54xZ7SHZCVz5h+mIs44/qPb6nK0gPRE4mMTwydJQ== X-Google-Smtp-Source: ADUXVKKChBZHwnDGb/cYxPBEhr7xXAAWc6FvjVqCGUAKRZWQDwYuGfaxe5mThqeLsoPUWbeoyehOpl57DVhWuCmHBbw= X-Received: by 2002:a6b:32d4:: with SMTP id y203-v6mr245965ioy.107.1528347013851; Wed, 06 Jun 2018 21:50:13 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a6b:bb86:0:0:0:0:0 with HTTP; Wed, 6 Jun 2018 21:50:13 -0700 (PDT) In-Reply-To: <0C09AFA07DD0434D9E2A0C6AEB0483103BB542D7@shsmsx102.ccr.corp.intel.com> References: <20180606095235.20822-1-ard.biesheuvel@linaro.org> <0C09AFA07DD0434D9E2A0C6AEB0483103BB542D7@shsmsx102.ccr.corp.intel.com> From: Ard Biesheuvel Date: Thu, 7 Jun 2018 06:50:13 +0200 Message-ID: To: "Zeng, Star" Cc: "edk2-devel@lists.01.org" , "Ni, Ruiyu" , "Gao, Liming" , "Yao, Jiewen" , Leif Lindholm , "Kinney, Michael D" Subject: Re: [PATCH] MdeModulePkg/CapsulePei: clean Dcache before consuming capsule data X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Jun 2018 04:50:15 -0000 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On 7 June 2018 at 03:37, Zeng, Star wrote: > Hi Ard, > > The input parameter CapsuleHeaderArray of UpdateCapsule has the virtual a= ddress. > It has the virtual address of the capsules yes. But how about the data structures passed as the ScatterGatherList? > CapsuleHeaderArray > Virtual pointer to an array of virtual pointers to the capsules being pas= sed into update capsule. Each capsules is assumed to stored in contiguous v= irtual memory. The capsules in the CapsuleHeaderArray must be the same caps= ules as the ScatterGatherList. The CapsuleHeaderArray must have the > > > Thanks, > Star > -----Original Message----- > From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Ar= d Biesheuvel > Sent: Wednesday, June 6, 2018 8:10 PM > To: edk2-devel@lists.01.org > Cc: Ni, Ruiyu ; Ard Biesheuvel ; Gao, Liming ; Yao, Jiewen ; Leif Lindholm ; Kinney, Michael D ; Zeng, Star > Subject: Re: [edk2] [PATCH] MdeModulePkg/CapsulePei: clean Dcache before = consuming capsule data > > On 6 June 2018 at 11:52, Ard Biesheuvel wrote= : >> When capsule updates are staged for processing after a warm reboot, >> they are copied into memory with the MMU and caches enabled. When the >> capsule PEI gets around to coalescing the capsule, the MMU and caches >> may still be disabled, and so on architectures where uncached accesses >> are incoherent with the caches (such as ARM and AARCH64), we may read >> stale data if we don't clean the caches to memory first. >> >> Contributed-under: TianoCore Contribution Agreement 1.1 >> Signed-off-by: Ard Biesheuvel > > Leif asked me to include a note why this cannot be done when > UpdateCapsule() is called. > > > """ > Note that this cache maintenance cannot be done during the invocation of = UpdateCapsule(), since the ScatterGatherList structures are only identified= by physical address, and at runtime, the firmware doesn't know whether and= where this memory is mapped, and cache maintenance requires a virtual addr= ess. > """ > >> --- >> MdeModulePkg/Universal/CapsulePei/CapsulePei.inf | 1 + >> MdeModulePkg/Universal/CapsulePei/Common/CapsuleCoalesce.c | 4 ++++ >> 2 files changed, 5 insertions(+) >> >> diff --git a/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf >> b/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf >> index c54bc21a95a8..594e110d1f8a 100644 >> --- a/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf >> +++ b/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf >> @@ -48,6 +48,7 @@ [Packages] >> >> [LibraryClasses] >> BaseLib >> + CacheMaintenanceLib >> HobLib >> BaseMemoryLib >> PeiServicesLib >> diff --git >> a/MdeModulePkg/Universal/CapsulePei/Common/CapsuleCoalesce.c >> b/MdeModulePkg/Universal/CapsulePei/Common/CapsuleCoalesce.c >> index 3e7054cd38a9..1730f925adc5 100644 >> --- a/MdeModulePkg/Universal/CapsulePei/Common/CapsuleCoalesce.c >> +++ b/MdeModulePkg/Universal/CapsulePei/Common/CapsuleCoalesce.c >> @@ -27,6 +27,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EIT= HER EXPRESS OR IMPLIED. >> #include >> >> #include >> +#include >> #include >> #include >> #include >> @@ -283,6 +284,9 @@ ValidateCapsuleByMemoryResource ( >> DEBUG ((EFI_D_INFO, "Address(0x%lx) Size(0x%lx) in MemoryResource= [0x%x] - Start(0x%lx) Length(0x%lx)\n", >> Address, Size, >> Index, MemoryResource[Index].PhysicalStart, >> MemoryResource[Index].ResourceLength)); >> + >> + WriteBackDataCacheRange ((VOID *)(UINTN)Address, Size); >> + >> return TRUE; >> } >> } >> -- >> 2.17.0 >> > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel