// K466 isolated two-CPU allocator experiment. The boot CPU publishes one // identity-map root before PSCI CPU_ON; the secondary enables Normal/cacheable // EL1 translation before entering Rust or any exclusive atomic operation. .section .text.smp_allocator_boot,"ax" .align 2 .global __smp_allocator_secondary_entry __smp_allocator_secondary_entry: msr daifset, #0xf msr spsel, #1 adrp x1, __smp_allocator_secondary_stack_top add x1, x1, :lo12:__smp_allocator_secondary_stack_top mov sp, x1 adrp x1, __smp_allocator_vectors_start add x1, x1, :lo12:__smp_allocator_vectors_start msr vbar_el1, x1 isb mrs x1, cpacr_el1 orr x1, x1, #(3 << 20) msr cpacr_el1, x1 isb adrp x2, __smp_allocator_mair add x2, x2, :lo12:__smp_allocator_mair ldr x3, [x2] msr mair_el1, x3 adrp x2, __smp_allocator_tcr add x2, x2, :lo12:__smp_allocator_tcr ldr x3, [x2] msr tcr_el1, x3 adrp x2, __smp_allocator_root add x2, x2, :lo12:__smp_allocator_root ldr x3, [x2] msr ttbr0_el1, x3 dsb sy isb tlbi vmalle1 dsb sy isb mrs x1, sctlr_el1 mov x2, #0x1005 orr x1, x1, x2 msr sctlr_el1, x1 isb bl __smp_allocator_secondary_rust .Lallocator_secondary_park: wfe b .Lallocator_secondary_park __smp_allocator_secondary_fault: mrs x0, esr_el1 mrs x1, elr_el1 mrs x2, far_el1 mrs x3, mpidr_el1 adrp x4, __smp_allocator_fault_esr add x4, x4, :lo12:__smp_allocator_fault_esr stp x0, x1, [x4] stp x2, x3, [x4, #16] mov x0, #2 str x0, [x4, #32] dsb sy sev b .Lallocator_secondary_park .section .text.smp_allocator_vectors,"ax" .balign 2048 .global __smp_allocator_vectors_start __smp_allocator_vectors_start: .rept 16 b __smp_allocator_secondary_fault .space 124 .endr .global __smp_allocator_vectors_end __smp_allocator_vectors_end: .section .bss.smp_allocator_boot,"aw",%nobits .align 3 .global __smp_allocator_root __smp_allocator_root: .skip 8 .global __smp_allocator_tcr __smp_allocator_tcr: .skip 8 .global __smp_allocator_mair __smp_allocator_mair: .skip 8 .global __smp_allocator_fault_esr __smp_allocator_fault_esr: .skip 8 .global __smp_allocator_fault_elr __smp_allocator_fault_elr: .skip 8 .global __smp_allocator_fault_far __smp_allocator_fault_far: .skip 8 .global __smp_allocator_fault_mpidr __smp_allocator_fault_mpidr: .skip 8 .global __smp_allocator_fault_seen __smp_allocator_fault_seen: .skip 8 .align 12 .global __smp_allocator_secondary_stack_start __smp_allocator_secondary_stack_start: .skip 16384 .global __smp_allocator_secondary_stack_top __smp_allocator_secondary_stack_top: