HI ALL
在使用Xliinx 的ZYNQ平台中启动SMP模式,在linux的启动log中有下面这个warning。
[ 0.023227] SMP: Total of 2 processors activated.
[ 0.023235] CPU: WARNING: CPU(s) started in wrong/inconsistent modes (primary CPU mode 0x0)
[ 0.023241] CPU: This may indicate a broken bootloader or firmware.
这个warning的理解是2个CPU的模式不一致,这条信息是/arch/arm/kernel/setup.c里的hyp_mode_check函数打印的
916 void __init hyp_mode_check(void)
917 {
918 #ifdef CONFIG_ARM_VIRT_EXT
919 sync_boot_mode();
920
921 if (is_hyp_mode_available()) {
922 pr_info("CPU: All CPU(s) started in HYP mode.\n");
923 pr_info("CPU: Virtualization extensions available.\n");
924 } else if (is_hyp_mode_mismatched()) {
925 pr_warn("CPU: WARNING: CPU(s) started in wrong/inconsistent modes (primary CPU mode 0x%x)\n",
926 __boot_cpu_mode & MODE_MASK);
927 pr_warn("CPU: This may indicate a broken bootloader or firmware.\n");
928 } else
929 pr_info("CPU: All CPU(s) started in SVC mode.\n");
930 #endif
931 }
我试过将linux配置成不用SMP,只使用CPU0,显示CPU在SVC模式下。
[ 0.000000] CPU: All CPU(s) started in SVC mode.
我理解在双核模式下,是不是CPU0位SVC模式,但是CPU1事在HYP模式?
我请教一下这个warning是否对linux运行有影响?我查看/proc/cpuinfo信息,2个cpu都是在跑的。
在我们这个平台上应该是不需要HYP模式,那如何将2个CPU设置在SVC模式呢?我觉得这个应该是在UBOOT里做,但很遗憾我在网上没有找到很对症的文章
U-Boot - [PATCH 0/6] ARMv7: Add HYP mode switching support
[U-Boot,v4,6/8] ARM: add SMP support for non-secure switch - Patchwork
这几个文章都是补丁文章,我尝试在uboot的添加#define CONFIG_ARMV7_NONSEC将cpu配置成非安全模式,需要自己实现smp_set_boot_cpu_addr()这个接口,对这个接口的作用uboot的doc和网上都没找到帮助。
希望大家能提点思路或者指点一下,现在有点迷糊了。
ps:平台
Xilinx ZYNQ +UBOOT-2014-08 +linux 3.14
Hi kevin,
没太看懂问题,另外你们平台需要实现secure os吗?如果不需要secure os,是不需要进行config secure state,可以让linux运行在secure state下
Hi ethanzhang
问题就是linux配置成SMP模式后出现这个告警
我不用secure OS,我在uboot里是想把2个CPU都配置成SVC模式。
不用secure OS,是不需要切换Secure state.
我对Linux不太熟悉,建议加log跟踪一下,second cpu power on应该不走uboot的吧?
Hi kevinxiang,
如果你不需要HYP, 请检查你的kernel configuration.
不要enable CONFIG_ARM_VIRT_EXT,就不会出现这个warning.