Debido a que el linux BSP predeterminado no habilita la transmisión de mantenimiento de la memoria caché y TLB (se deja "0" de BIT0 del registro ACTLR) en el modo SMP, se puede ver un problema de coherencia de la caché.
Para obtener una descripción de este bit, consulte la transmisión de las operaciones de mantenimiento de la sección 1.7.3 en el Manual de referencia técnico de ARM A9 MPCore[2]:
Todos los procesadores que funcionan en modo SMP en el mismo dominio coherente pueden enviar y recibir operaciones de mantenimiento de caché y TLB. El Manual de referencia de la arquitectura de ARM proporciona información detallada sobre las operaciones de difusión. Un procesador Cortex-A9 en el clúster A9-MP transmite el funcionamiento de mantenimiento broadcastable cuando opera en modo SMP (ACTLR. SMP =1) y cuando se habilita la difusión de la operación de mantenimiento (ACTLR. FW =1). Un procesador Cortex-A9 puede recibir y ejecutar operaciones de mantenimiento de difusión cuando opera en modo SMP, ACTLR. SMP =1.
Se recomienda establecer tanto ACTLR. FW y ACTLR. SMP a 1. Podemos establecer el bit modificando el código de Linux en proc-v7. Archivos S como se indica a continuación:
#ifdef CONFIG_SMP
ALT_SMP (mrc p15, 0, r0, c1, c0, 1)
ALT_UP(mov r0, #(1 << 6)) @ 0000 para UP
tst r0, #(1 << 6) a modo SMP/nAMP habilitado?
orreq r0, r0, #(1 << 6) @ Habilitar modo SMP/nAMP
orreq r0, r0, r10 @ Habilitar bits SMP específicos de CPU
orr r0, r0, #(1) @Add esta línea habilite ACTLR[0]
mcreq p15, 0, r0, c1, c0, 1
#endif