Thanks, got the point.

It seems vague that who to ensure the cache coherency. MMU? Caller of 
UpdateCapsule? UpdateCapsule? Consumer of capsule data?


Thanks,
Star
-----Original Message-----
From: edk2-devel [mailto:[email protected]] On Behalf Of Ard 
Biesheuvel
Sent: Thursday, June 7, 2018 12:50 PM
To: Zeng, Star <[email protected]>
Cc: Ni, Ruiyu <[email protected]>; [email protected]; Leif Lindholm 
<[email protected]>; Yao, Jiewen <[email protected]>; Gao, Liming 
<[email protected]>; Kinney, Michael D <[email protected]>
Subject: Re: [edk2] [PATCH] MdeModulePkg/CapsulePei: clean Dcache before 
consuming capsule data

On 7 June 2018 at 03:37, Zeng, Star <[email protected]> wrote:
> Hi Ard,
>
> The input parameter CapsuleHeaderArray of UpdateCapsule has the virtual 
> address.
>

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 
> passed into update capsule. Each capsules is assumed to stored in 
> contiguous virtual memory. The capsules in the CapsuleHeaderArray must 
> be the same capsules as the ScatterGatherList. The CapsuleHeaderArray 
> must have the
>
>
> Thanks,
> Star
> -----Original Message-----
> From: edk2-devel [mailto:[email protected]] On Behalf Of 
> Ard Biesheuvel
> Sent: Wednesday, June 6, 2018 8:10 PM
> To: [email protected]
> Cc: Ni, Ruiyu <[email protected]>; Ard Biesheuvel 
> <[email protected]>; Gao, Liming <[email protected]>; Yao, 
> Jiewen <[email protected]>; Leif Lindholm 
> <[email protected]>; Kinney, Michael D 
> <[email protected]>; Zeng, Star <[email protected]>
> Subject: Re: [edk2] [PATCH] MdeModulePkg/CapsulePei: clean Dcache 
> before consuming capsule data
>
> On 6 June 2018 at 11:52, Ard Biesheuvel <[email protected]> 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 <[email protected]>
>
> 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 address.
> """
>
>> ---
>>  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, EITHER 
>> EXPRESS OR IMPLIED.
>>  #include <Guid/CapsuleVendor.h>
>>
>>  #include <Library/BaseMemoryLib.h>
>> +#include <Library/CacheMaintenanceLib.h>
>>  #include <Library/DebugLib.h>
>>  #include <Library/PrintLib.h>
>>  #include <Library/BaseLib.h>
>> @@ -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
> [email protected]
> https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to