mirror of https://github.com/acidanthera/audk.git
ArmPkg/ArmLib: add support for reading the max physical address space size
Add a helper function that returns the maximum physical address space size as supported by the current CPU. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Acked-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
This commit is contained in:
parent
82379bf660
commit
95d04ebca8
|
@ -733,4 +733,10 @@ ArmWriteCntvOff (
|
||||||
UINT64 Val
|
UINT64 Val
|
||||||
);
|
);
|
||||||
|
|
||||||
|
UINTN
|
||||||
|
EFIAPI
|
||||||
|
ArmGetPhysicalAddressBits (
|
||||||
|
VOID
|
||||||
|
);
|
||||||
|
|
||||||
#endif // __ARM_LIB__
|
#endif // __ARM_LIB__
|
||||||
|
|
|
@ -196,4 +196,21 @@ ASM_FUNC(ArmWriteSctlr)
|
||||||
3:msr sctlr_el3, x0
|
3:msr sctlr_el3, x0
|
||||||
4:ret
|
4:ret
|
||||||
|
|
||||||
|
ASM_FUNC(ArmGetPhysicalAddressBits)
|
||||||
|
mrs x0, id_aa64mmfr0_el1
|
||||||
|
adr x1, .LPARanges
|
||||||
|
and x0, x0, #0xf
|
||||||
|
ldrb w0, [x1, x0]
|
||||||
|
ret
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits 0..3 of the AA64MFR0_EL1 system register encode the size of the
|
||||||
|
// physical address space support on this CPU:
|
||||||
|
// 0 == 32 bits, 1 == 36 bits, etc etc
|
||||||
|
// 7 and up are reserved
|
||||||
|
//
|
||||||
|
.LPARanges:
|
||||||
|
.byte 32, 36, 40, 42, 44, 48, 52, 0
|
||||||
|
.byte 0, 0, 0, 0, 0, 0, 0, 0
|
||||||
|
|
||||||
ASM_FUNCTION_REMOVE_IF_UNREFERENCED
|
ASM_FUNCTION_REMOVE_IF_UNREFERENCED
|
||||||
|
|
|
@ -165,4 +165,12 @@ ASM_FUNC(ArmWriteCpuActlr)
|
||||||
isb
|
isb
|
||||||
bx lr
|
bx lr
|
||||||
|
|
||||||
|
ASM_FUNC (ArmGetPhysicalAddressBits)
|
||||||
|
mrc p15, 0, r0, c0, c1, 4 // MMFR0
|
||||||
|
and r0, r0, #0xf // VMSA [3:0]
|
||||||
|
cmp r0, #5 // >= 5 implies LPAE support
|
||||||
|
movlt r0, #32 // 32 bits if no LPAE
|
||||||
|
movge r0, #40 // 40 bits if LPAE
|
||||||
|
bx lr
|
||||||
|
|
||||||
ASM_FUNCTION_REMOVE_IF_UNREFERENCED
|
ASM_FUNCTION_REMOVE_IF_UNREFERENCED
|
||||||
|
|
|
@ -169,4 +169,12 @@
|
||||||
isb
|
isb
|
||||||
bx lr
|
bx lr
|
||||||
|
|
||||||
|
RVCT_ASM_EXPORT ArmGetPhysicalAddressBits
|
||||||
|
mrc p15, 0, r0, c0, c1, 4 ; MMFR0
|
||||||
|
and r0, r0, #0xf ; VMSA [3:0]
|
||||||
|
cmp r0, #5 ; >= 5 implies LPAE support
|
||||||
|
movlt r0, #32 ; 32 bits if no LPAE
|
||||||
|
movge r0, #40 ; 40 bits if LPAE
|
||||||
|
bx lr
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
Loading…
Reference in New Issue