This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Zynq ARMv7 SMP 模式下2个CPU模式不一致告警问题

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