audk/ArmPkg/Library
Heyi Guo edff645fe4 ArmPkg/Mmu: Increase PageLevel when table found at the targeted level
Below code has bug since *BlockEntrySize and *TableLevel are not
updated accordingly:

if (IndexLevel == PageLevel) {
  // And get the appropriate BlockEntry at the next level
  BlockEntry = (UINT64*)TT_GET_ENTRY_FOR_ADDRESS (TranslationTable, \
      IndexLevel + 1, RegionStart);

  // Set the last block for this new table
  *LastBlockEntry = TT_LAST_BLOCK_ADDRESS(TranslationTable, \
      TT_ENTRY_COUNT);
}

Also it doesn't check recursively to get the last level, e.g. the
initial PageLevel is 1 and we already have level 2 and 3 tables at
this address.

What's more, *LastBlockEntry was not updated when we get a table and
IndexLevel != PageLevel.

So we reorganize the sequence, only updating TranslationTable,
PageLevel and BlockEntry in the loop, and setting the other output
parameters with the final PageLevel before returning.

And LastBlockEntry is only an OUT parameter.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Heyi Guo <heyi.guo@linaro.org>
Cc: Leif Lindholm <leif.lindholm@linaro.org>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18424 6f19259b-4bc3-4df7-8a09-765794883524
2015-09-09 13:37:41 +00:00
..
ArmArchTimerLib ArmPkg: ArmArchTimerLib: conditionally rebase to actual timer frequency 2015-02-02 12:01:48 +00:00
ArmCacheMaintenanceLib ArmPkg: remove cache maintenance by VA operation range size threshold 2015-04-14 11:54:40 +00:00
ArmDisassemblerLib ArmPkg/ArmDisassemblerLib: ARMThumb and AArch64 fixes 2014-09-09 15:57:18 +00:00
ArmDmaLib ARM Packages: Removed trailing spaces 2014-08-19 13:29:52 +00:00
ArmGenericTimerPhyCounterLib ArmPkg: add ArmGenericTimerCounterLib implementation using physical timer 2014-09-09 16:06:10 +00:00
ArmGenericTimerVirtCounterLib ArmPkg: add ArmGenericTimerCounterLib implementation using virtual timer 2014-09-09 16:07:43 +00:00
ArmGicArchLib ArmPkg: cache detected revision in ArmGicArchLib 2015-07-28 20:45:10 +00:00
ArmGicArchSecLib ArmPkg: copy ArmGicArchLib to ArmGicArchSecLib 2015-07-28 20:44:58 +00:00
ArmHvcLib ArmPkg: Ensured the stack is always quad-word aligned 2014-11-11 00:51:11 +00:00
ArmLib ArmPkg/Mmu: Increase PageLevel when table found at the targeted level 2015-09-09 13:37:41 +00:00
ArmPsciResetSystemLib Renamed ArmPlatformPkg/ArmVirtualizationPkg into ArmVirtPkg 2015-05-29 13:50:43 +00:00
ArmSmcLib ArmPkg: Ensured the stack is always quad-word aligned 2014-11-11 00:51:11 +00:00
ArmSmcLibNull ARM Packages: Removed trailing spaces 2014-08-19 13:29:52 +00:00
BaseMemoryLibStm ArmPkg/BaseMemoryLib(Sym|Vstm): Do not post increment returned pointer 2015-04-02 13:51:28 +00:00
BaseMemoryLibVstm ArmPkg/BaseMemoryLib(Sym|Vstm): Do not post increment returned pointer 2015-04-02 13:51:28 +00:00
BdsLib ArmPkg/BdsLib: Remove Linux loader from BdsLib 2015-07-14 14:35:20 +00:00
CompilerIntrinsicsLib ArmPkg/CompilerIntrinsicesLib: Fixed memmove() and memset() 2014-11-11 00:52:11 +00:00
DebugAgentSymbolsBaseLib ArmPlatformPkg: Increase more ARM address Pcd entries to 64-bit. 2014-11-11 00:43:03 +00:00
DebugPeCoffExtraActionLib ArmPkg: DebugPeCoffExtraActionLib: debugger commands are not errors 2015-03-02 16:19:26 +00:00
DebugUncachedMemoryAllocationLib ARM Packages: Removed trailing spaces 2014-08-19 13:29:52 +00:00
DefaultExceptionHandlerLib ARM Packages: Replace tabs by spaces for indentation 2014-08-26 10:14:17 +00:00
PeiServicesTablePointerLib ARM Packages: Removed trailing spaces 2014-08-19 13:29:52 +00:00
RvdPeCoffExtraActionLib ArmPkg/Semihostlib: Rename semi-hosting open option 2014-10-27 10:37:20 +00:00
SemiHostingDebugLib ARM Packages: Removed trailing spaces 2014-08-19 13:29:52 +00:00
SemiHostingSerialPortLib ARM Packages: Removed trailing spaces 2014-08-19 13:29:52 +00:00
SemihostLib ArmPkg/SemihostLib: Add library functions 2014-10-27 10:38:18 +00:00
UncachedMemoryAllocationLib ArmPkg: Bug fix for UncachedMemoryAllocationLib 2015-09-02 16:29:31 +00:00