由于默认的 Linux BSP 不支持高速缓存和 TLB 维护广播(寄存器 ACTLR 的位0 将“0”)留在 SMP 模式中,可能会看到高速缓存一致性问题。
有关上述情况的描述,请参阅 ARM A9 MPCore 技术参考手册[2]中关于 ARM A9 MPCore 技术维护操作的第 1.7.3 节维护操作
所有在同一一连贯域上以 SMP 模式工作的处理器都可以发送并接收 TLB 和高速缓存维护操作。ARM 架构参考手册提供广播操作的详细信息。A9-MP 群集广播中可广播维护操作中的 Cortex-A9 处理器在 SMP 模式 (ACTLR) 下运行。SMP=1)以及启用维护操作广播时 (ACTLR)。FW=1)。Cortex-A9 处理器在 SMP 模式下操作 ACTLR 时可以接收并执行广播维护操作。SMP=1。
建议同时设置 ACTLR。FW 和 ACTLR。SMP 至 1。我们可以通过修改 proc-v7 中的 linux 代码来设置位。S 文件如下:
#ifdef CONFIG_SMP
ALT_SMP(mrc p15、0、r0、c1、c0、1)
ALT_UP(mov r0, #(1 << 6))@ 伪造它以支持 UP
启用 tst r0、#(1 << 6) @ SMP/nAMP 模式?
orreq r0, r0, #(1 << 6) @ 启用 SMP/nAMP 模式
orreq r0, r0, r10 @ 启用特定于 CPU 的 SMP 位
orr r0、r0、#(1) @ 添加此行可支持 ACTLR[0]
mcreq p15, 0, r0, c1, c0, 1
#endif