如何在 Allwinner H5 上启动额外的内核?
How do you startup the additional cores on an Allwinner H5?
我想弄清楚如何为四核 allwinner h5 启动 core0 以外的核心。 C_RST_CTRL 寄存器(a.k.a CPU2 复位控制寄存器)底部有四位,表示它们是四个复位控制。 lsbit 是其他三个零之一,暗示在其他内核上设置这些版本重置,但我没有看到这种情况发生(我在地址零处留下的 运行 代码什么都没有),同时将 lsbit 归零确实停止core0 暗示它是一个复位控制。所以我假设某处有时钟门,但我找不到它们。
prcm 寄存器在 H5 文档中没有记录,但在 sunxi wiki 页面上为老的 allwinners 显示了似乎是真实的 PLL 设置,但 cpu 使能寄存器仅标记为 A31 并且cpu0 寄存器未设置,这意味着这不是您为该芯片启用任何 cpu 包括 0 的方式。
我错过了什么?
C_CPU_STATUS STANDBY_WFI=0x0E 是否表明次要核心位于 WFI 中?
不是答案,我没有足够的代表发表评论,但我自己刚开始做同样的练习。
顺便说一句,你是怎么把代码放在地址 0 的?不是BROM吗?我打算玩 RVBARADDR 寄存器。
对于纯裸机解决方案,请查看 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。
我想弄清楚如何为四核 allwinner h5 启动 core0 以外的核心。 C_RST_CTRL 寄存器(a.k.a CPU2 复位控制寄存器)底部有四位,表示它们是四个复位控制。 lsbit 是其他三个零之一,暗示在其他内核上设置这些版本重置,但我没有看到这种情况发生(我在地址零处留下的 运行 代码什么都没有),同时将 lsbit 归零确实停止core0 暗示它是一个复位控制。所以我假设某处有时钟门,但我找不到它们。
prcm 寄存器在 H5 文档中没有记录,但在 sunxi wiki 页面上为老的 allwinners 显示了似乎是真实的 PLL 设置,但 cpu 使能寄存器仅标记为 A31 并且cpu0 寄存器未设置,这意味着这不是您为该芯片启用任何 cpu 包括 0 的方式。
我错过了什么?
C_CPU_STATUS STANDBY_WFI=0x0E 是否表明次要核心位于 WFI 中?
不是答案,我没有足够的代表发表评论,但我自己刚开始做同样的练习。
顺便说一句,你是怎么把代码放在地址 0 的?不是BROM吗?我打算玩 RVBARADDR 寄存器。
对于纯裸机解决方案,请查看 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。