我使用的是i.MX6 Quad,为了解决ARM体系结构中的问题,我启用了erratum,如NXP的一些文档中所述。多数勘误表似乎都针对诊断寄存器中的某些位。这样的例子是:
/* from ./arch/arm/mm/proc-v7.S */
#ifdef CONFIG_ARM_ERRATA_743622
teq r3, #0x00200000 @ only present in r2p*
mrceq p15, 0, r0, c15, c0, 1 @ read diagnostic register
orreq r0, r0, #1 << 6 @ set bit #6
mcreq p15, 0, r0, c15, c0, 1 @ write diagnostic register
#endif
由于内核代码以特权模式运行,因此我可以在驱动程序中将其打开:
unsigned int cp = 0, result = 0;
asm volatile ("mrc p15, 0, %0, c15, c0, 1" : "=r" (cp));
cp |= 1 << 6;
asm volatile ("mcr p15, 0, %1, c15, c0, 1" : "=r" (result)
: "r" (cp));
在任何ARM或NXP文档中都没有描述协处理器的寄存器地址。是否可以通过某种方式获得物理地址?还是我误解了协处理器的工作方式?