X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=ArmPkg%2FLibrary%2FArmCacheMaintenanceLib%2FArmCacheMaintenanceLib.c;fp=ArmPkg%2FLibrary%2FArmCacheMaintenanceLib%2FArmCacheMaintenanceLib.c;h=bad5d244cbbadc8a96938f48c048dcb13143e26e;hp=db9290f275db59cd0097d9a07f5845376d322caf;hb=429309e0c6b74792d679681a8edd0d5ae0ff850c;hpb=7c2a6033c149625482a18cd51b65513c8fb8fe15 diff --git a/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.c b/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.c index db9290f275..bad5d244cb 100644 --- a/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.c +++ b/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.c @@ -20,20 +20,21 @@ CacheRangeOperation ( IN UINTN LineLength ) { - UINTN ArmCacheLineAlignmentMask; + UINTN ArmCacheLineAlignmentMask; // Align address (rounding down) - UINTN AlignedAddress; - UINTN EndAddress; + UINTN AlignedAddress; + UINTN EndAddress; ArmCacheLineAlignmentMask = LineLength - 1; - AlignedAddress = (UINTN)Start - ((UINTN)Start & ArmCacheLineAlignmentMask); - EndAddress = (UINTN)Start + Length; + AlignedAddress = (UINTN)Start - ((UINTN)Start & ArmCacheLineAlignmentMask); + EndAddress = (UINTN)Start + Length; // Perform the line operation on an address in each cache line while (AlignedAddress < EndAddress) { - LineOperation(AlignedAddress); + LineOperation (AlignedAddress); AlignedAddress += LineLength; } + ArmDataSynchronizationBarrier (); } @@ -58,15 +59,22 @@ InvalidateDataCache ( VOID * EFIAPI InvalidateInstructionCacheRange ( - IN VOID *Address, - IN UINTN Length + IN VOID *Address, + IN UINTN Length ) { - CacheRangeOperation (Address, Length, ArmCleanDataCacheEntryToPoUByMVA, - ArmDataCacheLineLength ()); - CacheRangeOperation (Address, Length, + CacheRangeOperation ( + Address, + Length, + ArmCleanDataCacheEntryToPoUByMVA, + ArmDataCacheLineLength () + ); + CacheRangeOperation ( + Address, + Length, ArmInvalidateInstructionCacheEntryToPoUByMVA, - ArmInstructionCacheLineLength ()); + ArmInstructionCacheLineLength () + ); ArmInstructionSynchronizationBarrier (); @@ -85,12 +93,16 @@ WriteBackInvalidateDataCache ( VOID * EFIAPI WriteBackInvalidateDataCacheRange ( - IN VOID *Address, - IN UINTN Length + IN VOID *Address, + IN UINTN Length ) { - CacheRangeOperation(Address, Length, ArmCleanInvalidateDataCacheEntryByMVA, - ArmDataCacheLineLength ()); + CacheRangeOperation ( + Address, + Length, + ArmCleanInvalidateDataCacheEntryByMVA, + ArmDataCacheLineLength () + ); return Address; } @@ -106,23 +118,31 @@ WriteBackDataCache ( VOID * EFIAPI WriteBackDataCacheRange ( - IN VOID *Address, - IN UINTN Length + IN VOID *Address, + IN UINTN Length ) { - CacheRangeOperation(Address, Length, ArmCleanDataCacheEntryByMVA, - ArmDataCacheLineLength ()); + CacheRangeOperation ( + Address, + Length, + ArmCleanDataCacheEntryByMVA, + ArmDataCacheLineLength () + ); return Address; } VOID * EFIAPI InvalidateDataCacheRange ( - IN VOID *Address, - IN UINTN Length + IN VOID *Address, + IN UINTN Length ) { - CacheRangeOperation(Address, Length, ArmInvalidateDataCacheEntryByMVA, - ArmDataCacheLineLength ()); + CacheRangeOperation ( + Address, + Length, + ArmInvalidateDataCacheEntryByMVA, + ArmDataCacheLineLength () + ); return Address; }