HI Olivier,
ArmPkg\Drivers\CpuDxe\AArch64\Mmu.c has the code to find the memory type
programmed for the given region.
Equates are defined in AARch64mmu.h
#define TT_TYPE_MASK 0x3
#define TT_TYPE_TABLE_ENTRY 0x3
#define TT_TYPE_BLOCK_ENTRY 0x1
#define TT_TYPE_BLOCK_ENTRY_LEVEL3 0x3
In the below code, If level 3 table, Blockentrytype = 3. Since this entry
type satisfies (EntryType == TT_TYPE_TABLE_ENTRY) condition, It will try to
call the GetMemoryRegionRec() again instead . Do we need another condition
to make it reach the else part?
In other words, How to handle the situation (EntryType == TT_TYPE_TABLE_ENTRY)
= TRUE and (EntryType == BlockEntryType) = TRUE
Thanks
Siva
ArmPkg\Drivers\CpuDxe\AArch64\Mmu.c code snippet
if (TableLevel != 3) {
BlockEntryType = TT_TYPE_BLOCK_ENTRY;
} else {
BlockEntryType = TT_TYPE_BLOCK_ENTRY_LEVEL3;
}
// Find the block entry linked to the Base Address
BlockEntry = (UINT64*)TT_GET_ENTRY_FOR_ADDRESS (TranslationTable, TableLevel,
*BaseAddress);
EntryType = *BlockEntry & TT_TYPE_MASK;
if (EntryType == TT_TYPE_TABLE_ENTRY) {
NextTranslationTable = (UINT64*)(*BlockEntry &
TT_ADDRESS_MASK_DESCRIPTION_TABLE);
// The entry is a page table, so we go to the next level
Status = GetMemoryRegionRec (
NextTranslationTable, // Address of the next level page table
TableLevel + 1, // Next Page Table level
(UINTN*)TT_LAST_BLOCK_ADDRESS(NextTranslationTable, TT_ENTRY_COUNT),
BaseAddress, RegionLength, RegionAttributes);
// In case of 'Success', it means the end of the block region has been
found into the upper
// level translation table
if (!EFI_ERROR(Status)) {
return EFI_SUCCESS;
}
} else if (EntryType == BlockEntryType) {
// We have found the BlockEntry attached to the address. We save its start
address (the start
// address might be before the 'BaseAdress') and attributes
*BaseAddress = *BaseAddress & ~(TT_ADDRESS_AT_LEVEL(TableLevel) - 1);
*RegionLength = 0;
*RegionAttributes = *BlockEntry & TT_ATTRIBUTES_MASK;
} else {
// We have an 'Invalid' entry
return EFI_UNSUPPORTED;
}
The information contained in this message may be confidential and proprietary
to American Megatrends, Inc. This communication is intended to be read only by
the individual or entity to whom it is addressed or by their designee. If the
reader of this message is not the intended recipient, you are on notice that
any distribution of this message, in any form, is strictly prohibited. Please
promptly notify the sender by reply e-mail or by telephone at 770-246-8600, and
then delete or destroy all copies of the transmission.
------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60134071&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel