littlekernel / lk

LK embedded kernel
MIT License
3.11k stars 613 forks source link

[arch][arm64] disable EL1 FPU traps even when starting at EL1 #320

Closed pcc closed 2 years ago

pcc commented 2 years ago

It is possible for early initialization functions such as lk_main() to contain NEON instructions because we don't build the kernel with -mgeneral-regs-only. As a result we can end up taking an FPU exception before we are ready to handle it.

We didn't have this problem when starting at a higher exception level than EL1 because we turned off FPU traps in arm64_elX_to_el1(). But we neglected to do so when starting at EL1. Fix the problem by moving the CPACR_EL1 manipulation out of arm64_elX_to_el1() and into arm_reset().