【问题标题】:How do you startup the additional cores on an Allwinner H5?如何在 Allwinner H5 上启动额外的内核?
【发布时间】:2017-07-13 13:57:12
【问题描述】:

我正在尝试弄清楚如何为四核全胜 h5 启动 core0 以外的内核。 C_RST_CTRL 寄存器(又名 CPU2 复位控制寄存器)底部有四个位,表示它们是四个复位控件。 lsbit 是其他三个零之一,这意味着将这些版本重置在其他内核上,但我没有看到这种情况发生(我没有在地址零处留下运行代码),同时归零 lsbit 确实停止 core0 暗示它是一个复位控件。所以我假设某处有时钟门,但我找不到它们。

未在 H5 文档中记录但在 sunxi wiki 页面上为较老的全胜者提供的 prcm 寄存器确实显示了似乎是真实的 PLL 设置,但 cpu 启用寄存器仅标记为 A31,cpu0 寄存器没有设置,这意味着这不是您为该芯片启用任何 cpu 包括 0 的方式。

我错过了什么?

【问题讨论】:

  • github.com/OrangePiLibra/OrangePi_H5SDK/tree/master/… 是用户手册,是带有寄存器规格的真正手册。
  • 太棒了。非常感谢
  • 典型的 arm 设计是让内核边缘具有单独的时钟启用和复位,这些时钟启用和复位是供应商特定的,它们是如何实现的。 arm 通常不会也不应该控制这些,没有意义。
  • @PeterJ 我现在正在阅读它,虽然它们看起来在 arm 的域中,但它们看起来像信号名称。但我没有看到与这些名称有任何注册联系,因此目前存在信息差距。
  • @PeterJ 我正在查看的 TRM 中的 A.3 节(附录 A 信号描述)例如 nCORERESET 是芯片供应商提供的,因此假设是上面的 C_RST_CTRL 引脚,但打赌还有其他东西....但例如电源管理信号与您找到的信号或粗体字面寄存器/引脚/位不匹配。所以关于谁拥有你发现的这些信号以及它们在哪里仍然存在差距。

标签: arm embedded cortex-a8 cortex-a


【解决方案1】:

对于纯裸机解决方案,请查看https://github.com/apritzel/arm-trusted-firmware.git 的 plat/sun50iw1p1 目录中的 sunxi_cpu_ops.c

您需要停用各种电源钳以及时钟门。

或者,包括 Arm Trusted Firmware 代码并通过 SMC 调用启用内核:

ldr x2,=entry_point
mov x1,#corenumber
mov x0,#0x03
movk x0,#0x8400,lsl #16
smc #0

我现在已经确认这适用于 H5。

【讨论】:

    【解决方案2】:

    C_CPU_STATUS STANDBY_WFI=0x0E 是否表明辅助核心位于 WFI 中?

    不是答案,我没有足够的代表发表评论,但我自己也开始了同样的练习。

    顺便说一句,您是如何将代码放在地址 0 的?不是布鲁姆吗?我打算玩一下 RVBARADDR 寄存器。

    【讨论】:

    • 我正在使用 u-boot 启动并在 0x42000000 加载,还没有替换 u-boot。
    • 我只是使用 u-boot 中的 SPL 并从那里加载可执行文件。您是否设置了 RVBARADDR?
    • 01700030 000E0000 是 STANDBY_WFI=0xE
    • 在内核中注入中断会不会那么“简单”?
    • 017000A0 00010060 017000A4 00000000
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 2012-08-23
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 2019-01-26
    • 2020-06-22
    相关资源
    最近更新 更多