[libcpu][aarch64] fix boot failure when dropping from EL2 in entry_point.S - #11671
[libcpu][aarch64] fix boot failure when dropping from EL2 in entry_point.S#11671Xenithya wants to merge 3 commits into
Conversation
…int.S When booting RT-Thread directly from U-Boot at EL2 mode (without prior ATF context sanitization), cold boot fails due to invalid EL1 register access and residual EL2 hardware states. Key fixes: 1. Reorder init_cpu_el in _start: Ensure CPU drops to EL1 before executing any _el1 system register instructions (e.g., msr tpidr_el1, xzr). 2. Re-read CurrentEL in .init_cpu_hyp: Fix logic issue when dropping from EL3 to EL2 where x0 held stale register values. 3. Clean up EL2 hardware context in .init_cpu_hyp: - Disable EL2 MMU and Caches (sctlr_el2). - Untrap FP/SIMD instructions by clearing cptr_el2. - Invalidate stale EL2 and Stage-2 TLBs (tlbi alle2is, tlbi vmalle1is) to prevent HPFAR_EL2 translation faults.
|
👋 感谢您对 RT-Thread 的贡献!Thank you for your contribution to RT-Thread! 为确保代码符合 RT-Thread 的编码规范,请在你的仓库中执行以下步骤运行代码格式化工作流(如果格式化CI运行失败)。 🛠 操作步骤 | Steps
完成后,提交将自动更新至 如有问题欢迎联系我们,再次感谢您的贡献!💐 |
|
|
关于 QEMU -smp 4 环境下 CI 测试失败的原因说明:
|
拉取/合并请求描述:(PR description)
[
为什么提交这份PR (why to submit this PR)
Fix AArch64 cold boot failure (
HPFAR_EL2Stage-2 fault / panic) when booted directly from U-Boot in EL2 mode.你的解决方案是什么 (what is your solution)
init_cpu_elbefore accessing any_el1system registers (e.g.tpidr_el1) in_start.CurrentELlogic: Re-evaluatedCurrentELafter dropping from EL3 to EL2 in.init_cpu_hyp.sctlr_el2).cptr_el2).tlbi alle2is,tlbi vmalle1is) to resolve hardware fault traps.如何测试 / How to test?
mshprompt every time without hanging or throwingHPFAR_EL2exceptions.请提供验证的bsp和config (provide the config and bsp)
]
当前拉取/合并请求的状态 Intent for your PR
必须选择一项 Choose one (Mandatory):
代码质量 Code Quality:
我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:
#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up