Changeset View
Changeset View
Standalone View
Standalone View
sys/arm/arm/locore-v6.S
Show First 20 Lines • Show All 50 Lines • ▼ Show 20 Lines | |||||
/* A small statically-allocated stack used only during initarm() and AP startup. */ | /* A small statically-allocated stack used only during initarm() and AP startup. */ | ||||
#define INIT_ARM_STACK_SIZE 2048 | #define INIT_ARM_STACK_SIZE 2048 | ||||
.text | .text | ||||
.align 2 | .align 2 | ||||
#if __ARM_ARCH >= 7 | #if __ARM_ARCH >= 7 | ||||
#define HANDLE_HYP \ | #define HANDLE_HYP \ | ||||
/* Leave HYP mode */ ;\ | |||||
mrs r0, cpsr ;\ | |||||
and r0, r0, #(PSR_MODE) /* Mode is in the low 5 bits of CPSR */ ;\ | |||||
teq r0, #(PSR_HYP32_MODE) /* Hyp Mode? */ ;\ | |||||
bne 1f ;\ | |||||
/* Install Hypervisor Stub Exception Vector */ ;\ | /* Install Hypervisor Stub Exception Vector */ ;\ | ||||
bl hypervisor_stub_vect_install ;\ | bl hypervisor_stub_vect_install ;\ | ||||
mov r0, 0 ;\ | |||||
adr r1, hypmode_enabled ;\ | adr r1, hypmode_enabled ;\ | ||||
str r0, [r1] ;\ | str r0, [r1] | ||||
/* Ensure that IRQ, FIQ and Aborts will be disabled after eret */ ;\ | |||||
mrs r0, cpsr ;\ | |||||
bic r0, r0, #(PSR_MODE) ;\ | |||||
orr r0, r0, #(PSR_SVC32_MODE) ;\ | |||||
orr r0, r0, #(PSR_I | PSR_F | PSR_A) ;\ | |||||
msr spsr_cxsf, r0 ;\ | |||||
/* Exit hypervisor mode */ ;\ | |||||
adr lr, 2f ;\ | |||||
MSR_ELR_HYP(14) ;\ | |||||
ERET ;\ | |||||
1: ;\ | |||||
mov r0, -1 ;\ | |||||
adr r1, hypmode_enabled ;\ | |||||
str r0, [r1] ;\ | |||||
2: | |||||
#else | #else | ||||
#define HANDLE_HYP | #define HANDLE_HYP | ||||
#endif /* __ARM_ARCH >= 7 */ | #endif /* __ARM_ARCH >= 7 */ | ||||
/* | /* | ||||
* On entry for FreeBSD boot ABI: | * On entry for FreeBSD boot ABI: | ||||
* r0 - metadata pointer or 0 (boothowto on AT91's boot2) | * r0 - metadata pointer or 0 (boothowto on AT91's boot2) | ||||
* r1 - if (r0 == 0) then metadata pointer | * r1 - if (r0 == 0) then metadata pointer | ||||
▲ Show 20 Lines • Show All 498 Lines • Show Last 20 Lines |