Skip to content

[libcpu][aarch64] fix boot failure when dropping from EL2 in entry_point.S - #11671

Open
Xenithya wants to merge 1 commit into
RT-Thread:masterfrom
Xenithya:fix/aarch64-el2-boot
Open

[libcpu][aarch64] fix boot failure when dropping from EL2 in entry_point.S#11671
Xenithya wants to merge 1 commit into
RT-Thread:masterfrom
Xenithya:fix/aarch64-el2-boot

Conversation

@Xenithya

Copy link
Copy Markdown

拉取/合并请求描述:(PR description)

[

为什么提交这份PR (why to submit this PR)

Fix AArch64 cold boot failure (HPFAR_EL2 Stage-2 fault / panic) when booted directly from U-Boot in EL2 mode.

你的解决方案是什么 (what is your solution)

  1. Reordered startup sequence: Executed init_cpu_el before accessing any _el1 system registers (e.g. tpidr_el1) in _start.
  2. Fixed CurrentEL logic: Re-evaluated CurrentEL after dropping from EL3 to EL2 in .init_cpu_hyp.
  3. Cleaned up EL2 hardware context:
    • Disabled EL2 MMU and Caches (sctlr_el2).
    • Cleared FP/SIMD traps (cptr_el2).
    • Invalidated stale EL2/Stage-2 TLBs (tlbi alle2is, tlbi vmalle1is) to resolve hardware fault traps.

如何测试 / How to test?

  • Hardware Platform: AArch64 board (Cortex-A CPU)
  • Bootloader: U-Boot (running in EL2 mode, without prior ATF cleanup)
  • Test Result: Cold boot successfully enters the msh prompt every time without hanging or throwing HPFAR_EL2 exceptions.

请提供验证的bsp和config (provide the config and bsp)

  • BSP:
  • .config:
  • action:

]

当前拉取/合并请求的状态 Intent for your PR

必须选择一项 Choose one (Mandatory):

  • 本拉取/合并请求是一个草稿版本 This PR is for a code-review and is intended to get feedback
  • 本拉取/合并请求是一个成熟版本 This PR is mature, and ready to be integrated into the repo

代码质量 Code Quality:

我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:

  • 已经仔细查看过代码改动的对比 Already check the difference between PR and old code
  • 代码风格正确,包括缩进空格,命名及其他风格 Style guide is adhered to, including spacing, naming and other styles
  • 没有垃圾代码,代码尽量精简,不包含#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up
  • 所有变更均有原因及合理的,并且不会影响到其他软件组件代码或BSP All modifications are justified and not affect other components or BSP
  • 对难懂代码均提供对应的注释 I've commented appropriately where code is tricky
  • 代码是高质量的 Code in this PR is of high quality
  • 已经使用clang-format 源码格式化工具确保格式符合RT-Thread代码规范 This PR has been formatted with clang-format and complies with RT-Thread code specification
  • 如果是新增bsp, 已经添加ci检查到.github/ALL_BSP_COMPILE.json 详细请参考链接BSP自查

…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.
@github-actions

Copy link
Copy Markdown

👋 感谢您对 RT-Thread 的贡献!Thank you for your contribution to RT-Thread!

为确保代码符合 RT-Thread 的编码规范,请在你的仓库中执行以下步骤运行代码格式化工作流(如果格式化CI运行失败)。
To ensure your code complies with RT-Thread's coding style, please run the code formatting workflow by following the steps below (If the formatting of CI fails to run).


🛠 操作步骤 | Steps

  1. 前往 Actions 页面 | Go to the Actions page
    点击进入工作流 → | Click to open workflow →

  2. 点击 Run workflow | Click Run workflow

  • 设置需排除的文件/目录(目录请以"/"结尾)
    Set files/directories to exclude (directories should end with "/")
  • 将目标分支设置为 \ Set the target branch to:fix/aarch64-el2-boot
  • 设置PR number为 \ Set the PR number to:11671
  1. 等待工作流完成 | Wait for the workflow to complete
    格式化后的代码将自动推送至你的分支。
    The formatted code will be automatically pushed to your branch.

完成后,提交将自动更新至 fix/aarch64-el2-boot 分支,关联的 Pull Request 也会同步更新。
Once completed, commits will be pushed to the fix/aarch64-el2-boot branch automatically, and the related Pull Request will be updated.

如有问题欢迎联系我们,再次感谢您的贡献!💐
If you have any questions, feel free to reach out. Thanks again for your contribution!

@github-actions github-actions Bot added Arch: ARM/AArch64 BSP related with arm libcpu labels Jul 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Arch: ARM/AArch64 BSP related with arm libcpu

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant