ARM fixes for 5.8-rc1:
- fix for "hex" Kconfig default to use 0x0 rather than 0 to allow these to be removed from defconfigs - fix from Ard Biesheuvel for EFI HYP mode booting -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEuNNh8scc2k/wOAE+9OeQG+StrGQFAl7kpvgACgkQ9OeQG+St rGSqng/7BEIr/StfctasCBHEBp4AZYMzuf6b4bJA21ejRRO53JhE1TaGVjIi0vhU 4iaDGmtnxWQYN0Tin4PLFlvJBapK4/xmyjFOM6qRPXTpSXxoLaCgyaTT5icuo0LD CUcMwcU5JegpGq7ZW0ZgjH/WQqk/w1mDEfGJ/CPweXjkuurb/sr53evHo9ChdaX5 TJ9ypcjwuAKqO6F0q9gqr4gA9ifV/eMte+zPQz8mPioEp0AsRdM8RduuJDh3TlcH epvfHw7sSk94w8nKyqRjd4Y/HRY3h9Ga8E6KmS656R7q5fVa4BAa7waDX8RSgvQl qFQuX/Un8srCYherfuTwwRNu02ijbSWGh0gMHZCcnSK4z83MMhaTIv8T9lqHjYAe +b5Dt12h58h/wDXGsFPXd/lCY4EkAGeOVfjkhekhTBjk7FWIhFsg6vN7dBXfgU8c VHp0+uk2UEj6IaZKMm/7kDr1glaKhWa+PhEjnsx4kDdfZC2wuIcKB7m0RskVJo9y ruG59Ep8BZ8uVdszZgUZk0D80USXm5bq+E9GvCuEFMwH0scJHhytJMRcM4hHBUi8 iikRAzFTDp52fL2MkNkbIiCIaMm6r3XX+D9spRzzdPojNB9pR5sN6W3okdl6c+T7 i2FD6d1HFfBv3u2lnxs2i9ea2HyyJ/z9mA4arO/PbMVeAUkrlxg= =cTpy -----END PGP SIGNATURE----- Merge tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm Pull ARM fixes from Russell King: - fix for "hex" Kconfig default to use 0x0 rather than 0 to allow these to be removed from defconfigs - fix from Ard Biesheuvel for EFI HYP mode booting * tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm: ARM: 8985/1: efi/decompressor: deal with HYP mode boot gracefully ARM: 8984/1: Kconfig: set default ZBOOT_ROM_TEXT/BSS value to 0x0
This commit is contained in:
commit
cfd230b3cf
@ -1749,7 +1749,7 @@ config DEPRECATED_PARAM_STRUCT
|
|||||||
# TEXT and BSS so we preserve their values in the config files.
|
# TEXT and BSS so we preserve their values in the config files.
|
||||||
config ZBOOT_ROM_TEXT
|
config ZBOOT_ROM_TEXT
|
||||||
hex "Compressed ROM boot loader base address"
|
hex "Compressed ROM boot loader base address"
|
||||||
default "0"
|
default 0x0
|
||||||
help
|
help
|
||||||
The physical address at which the ROM-able zImage is to be
|
The physical address at which the ROM-able zImage is to be
|
||||||
placed in the target. Platforms which normally make use of
|
placed in the target. Platforms which normally make use of
|
||||||
@ -1760,7 +1760,7 @@ config ZBOOT_ROM_TEXT
|
|||||||
|
|
||||||
config ZBOOT_ROM_BSS
|
config ZBOOT_ROM_BSS
|
||||||
hex "Compressed ROM boot loader BSS address"
|
hex "Compressed ROM boot loader BSS address"
|
||||||
default "0"
|
default 0x0
|
||||||
help
|
help
|
||||||
The base address of an area of read/write memory in the target
|
The base address of an area of read/write memory in the target
|
||||||
for the ROM-able zImage which must be available while the
|
for the ROM-able zImage which must be available while the
|
||||||
|
@ -1410,7 +1410,11 @@ memdump: mov r12, r0
|
|||||||
__hyp_reentry_vectors:
|
__hyp_reentry_vectors:
|
||||||
W(b) . @ reset
|
W(b) . @ reset
|
||||||
W(b) . @ undef
|
W(b) . @ undef
|
||||||
|
#ifdef CONFIG_EFI_STUB
|
||||||
|
W(b) __enter_kernel_from_hyp @ hvc from HYP
|
||||||
|
#else
|
||||||
W(b) . @ svc
|
W(b) . @ svc
|
||||||
|
#endif
|
||||||
W(b) . @ pabort
|
W(b) . @ pabort
|
||||||
W(b) . @ dabort
|
W(b) . @ dabort
|
||||||
W(b) __enter_kernel @ hyp
|
W(b) __enter_kernel @ hyp
|
||||||
@ -1429,14 +1433,72 @@ __enter_kernel:
|
|||||||
reloc_code_end:
|
reloc_code_end:
|
||||||
|
|
||||||
#ifdef CONFIG_EFI_STUB
|
#ifdef CONFIG_EFI_STUB
|
||||||
|
__enter_kernel_from_hyp:
|
||||||
|
mrc p15, 4, r0, c1, c0, 0 @ read HSCTLR
|
||||||
|
bic r0, r0, #0x5 @ disable MMU and caches
|
||||||
|
mcr p15, 4, r0, c1, c0, 0 @ write HSCTLR
|
||||||
|
isb
|
||||||
|
b __enter_kernel
|
||||||
|
|
||||||
ENTRY(efi_enter_kernel)
|
ENTRY(efi_enter_kernel)
|
||||||
mov r4, r0 @ preserve image base
|
mov r4, r0 @ preserve image base
|
||||||
mov r8, r1 @ preserve DT pointer
|
mov r8, r1 @ preserve DT pointer
|
||||||
|
|
||||||
|
ARM( adrl r0, call_cache_fn )
|
||||||
|
THUMB( adr r0, call_cache_fn )
|
||||||
|
adr r1, 0f @ clean the region of code we
|
||||||
|
bl cache_clean_flush @ may run with the MMU off
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARM_VIRT_EXT
|
||||||
|
@
|
||||||
|
@ The EFI spec does not support booting on ARM in HYP mode,
|
||||||
|
@ since it mandates that the MMU and caches are on, with all
|
||||||
|
@ 32-bit addressable DRAM mapped 1:1 using short descriptors.
|
||||||
|
@
|
||||||
|
@ While the EDK2 reference implementation adheres to this,
|
||||||
|
@ U-Boot might decide to enter the EFI stub in HYP mode
|
||||||
|
@ anyway, with the MMU and caches either on or off.
|
||||||
|
@
|
||||||
|
mrs r0, cpsr @ get the current mode
|
||||||
|
msr spsr_cxsf, r0 @ record boot mode
|
||||||
|
and r0, r0, #MODE_MASK @ are we running in HYP mode?
|
||||||
|
cmp r0, #HYP_MODE
|
||||||
|
bne .Lefi_svc
|
||||||
|
|
||||||
|
mrc p15, 4, r1, c1, c0, 0 @ read HSCTLR
|
||||||
|
tst r1, #0x1 @ MMU enabled at HYP?
|
||||||
|
beq 1f
|
||||||
|
|
||||||
|
@
|
||||||
|
@ When running in HYP mode with the caches on, we're better
|
||||||
|
@ off just carrying on using the cached 1:1 mapping that the
|
||||||
|
@ firmware provided. Set up the HYP vectors so HVC instructions
|
||||||
|
@ issued from HYP mode take us to the correct handler code. We
|
||||||
|
@ will disable the MMU before jumping to the kernel proper.
|
||||||
|
@
|
||||||
|
adr r0, __hyp_reentry_vectors
|
||||||
|
mcr p15, 4, r0, c12, c0, 0 @ set HYP vector base (HVBAR)
|
||||||
|
isb
|
||||||
|
b .Lefi_hyp
|
||||||
|
|
||||||
|
@
|
||||||
|
@ When running in HYP mode with the caches off, we need to drop
|
||||||
|
@ into SVC mode now, and let the decompressor set up its cached
|
||||||
|
@ 1:1 mapping as usual.
|
||||||
|
@
|
||||||
|
1: mov r9, r4 @ preserve image base
|
||||||
|
bl __hyp_stub_install @ install HYP stub vectors
|
||||||
|
safe_svcmode_maskall r1 @ drop to SVC mode
|
||||||
|
msr spsr_cxsf, r0 @ record boot mode
|
||||||
|
orr r4, r9, #1 @ restore image base and set LSB
|
||||||
|
b .Lefi_hyp
|
||||||
|
.Lefi_svc:
|
||||||
|
#endif
|
||||||
mrc p15, 0, r0, c1, c0, 0 @ read SCTLR
|
mrc p15, 0, r0, c1, c0, 0 @ read SCTLR
|
||||||
tst r0, #0x1 @ MMU enabled?
|
tst r0, #0x1 @ MMU enabled?
|
||||||
orreq r4, r4, #1 @ set LSB if not
|
orreq r4, r4, #1 @ set LSB if not
|
||||||
|
|
||||||
|
.Lefi_hyp:
|
||||||
mov r0, r8 @ DT start
|
mov r0, r8 @ DT start
|
||||||
add r1, r8, r2 @ DT end
|
add r1, r8, r2 @ DT end
|
||||||
bl cache_clean_flush
|
bl cache_clean_flush
|
||||||
|
Loading…
Reference in New Issue
Block a user