Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e5ebeec8 authored by Ard Biesheuvel's avatar Ard Biesheuvel Committed by Will Deacon
Browse files

arm64: kernel: use literal for relocated address of __secondary_switched



We can simply use a relocated 64-bit literal to store the address of
__secondary_switched(), and the relocation code will ensure that it
holds the correct value at secondary entry time, as long as we make sure
that the literal is not dereferenced until after we have enabled the MMU.

So jump via a small __secondary_switch() function covered by the ID map
that performs the literal load and branch-to-register.

Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Acked-by: default avatarMark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
parent 190c056f
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -468,9 +468,7 @@ __mmap_switched:
	str	x15, [x11, x23]
	b	0b

2:	adr_l	x8, kimage_vaddr		// make relocated kimage_vaddr
	dc	cvac, x8			// value visible to secondaries
	dsb	sy				// with MMU off
2:
#endif

	adr_l	sp, initial_sp, x4
@@ -699,12 +697,9 @@ secondary_startup:
	adrp	x26, swapper_pg_dir
	bl	__cpu_setup			// initialise processor

	ldr	x8, kimage_vaddr
	ldr	w9, 0f
	sub	x27, x8, w9, sxtw		// address to jump to after enabling the MMU
	adr_l	x27, __secondary_switch		// address to jump to after enabling the MMU
	b	__enable_mmu
ENDPROC(secondary_startup)
0:	.long	(_text - TEXT_OFFSET) - __secondary_switched

__secondary_switched:
	adr_l	x5, vectors
@@ -806,3 +801,8 @@ __no_granule_support:
	wfi
	b 1b
ENDPROC(__no_granule_support)

__secondary_switch:
	ldr	x8, =__secondary_switched
	br	x8
ENDPROC(__secondary_switch)