从程序集或C中的协处理器获取注册地址

我使用的是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文档中都没有描述协处理器的寄存器地址。是否可以通过某种方式获得物理地址?还是我误解了协处理器的工作方式?

评论