在big.LITTLE的情况下,opcode2在MRC指令中的含义是什么

时间:2013-04-03 13:14:52

标签: assembly kernel arm

我正在使用Cortex-A15-Cortex-A7 big.LITTLE arch soc。

对于big.LITTLE处理器的bL_head.S(如果是LITTLE初始化),MRC指令使用如下: -

mrc     p15, 0, r0, c0, c0, 5

现在,根据MRC指令细节,

MRC{cond} coproc, opcode1, Rd, CRn, CRm{, opcode2}

opcode2
is an optional coprocessor-specific opcode.
  1. 我无法理解5的含义。在这里,根据我的理解,CP只不过是LITTLE处理器集群。
  2. 另一个疑问是,根据上面的说明,r0内容被复制到c0中。为什么有两个c0?另一个c0用于什么?

2 个答案:

答案 0 :(得分:2)

有关如何解码cp15系统控制寄存器功能的信息,请参阅this page

根据前面提到的页面Op1 = 0,CRn = c0,CRm = c0,Op2 = 5给出:

MPIDR   Multiprocessor Affinity Register

您可以在MPDIR here找到更多信息。

答案 1 :(得分:1)

在基本上所有ARM处理器中,协处理器15用于控制当前核心的各种system functions。它不涉及多处理器群集中的其他处理器。您可以在特定于内核的技术参考手册(TRM)

中找到CP15寄存器的实际定义

例如,查看您在Cortex-A7 TRM的summary table中提到的组合,我们可以看到它是MPIDR(多处理器亲和性寄存器)。事实上,如果您按照the link进行详细说明,您将会看到完整的说明:

To access the MPIDR, read the CP15 registers with:
MRC p15, 0, <Rt>, c0, c0, 5; Read Multiprocessor Affinity Register

在您的情况下,<Rt>R0。它被设置为从隐藏核心寄存器读取的MPIDR的值,然后您可以按照TRM中的描述对其进行解释。

BTW,Opcode1,CRm,CRn和Opcode2的特定组合是特定于处理器的,但其中许多是在相关核心之间共享的。所以一般来说,你不一定要咨询你所拥有的核心的TRM,当然它最有效。