Da der Linux BSP standardmäßig den Cache und die TLB-Wartungsübertragung nicht aktiviert hat (Bit0 des Registers ACTLR ist links '0') im SMP-Modus, kann ein Cache-Problem auftreten.
Eine Beschreibung dieses Bits finden Sie in Abschnitt 1.7.3 Wartungsbetriebsübertragung im technischen Referenzhandbuch ARM A9 MPCore[2]:
Alle Prozessoren, die im SMP-Modus auf der gleichen kohärenten Domain arbeiten, können TLB- und Cache-Wartungsoperationen senden und empfangen. Im ARM Architecture Reference Manual finden Sie detaillierte Informationen zum Broadcast-Betrieb. Ein Cortex-A9-Prozessor im A9-MP-Cluster sendet broadcastable Maintenance Operation, wenn er im SMP-Modus (ACTLR. SMP=1) und wenn der Wartungsbetrieb aktiviert ist (ACTLR. FW=1). Ein Cortex-A9 Prozessor kann Broadcast-Wartungsoperationen empfangen und ausführen, wenn er im SMP-Modus, ACTLR, betrieben wird. SMP=1.
Es wird empfohlen, sowohl den ACTLR einzustellen. FW und ACTLR. SMP zu 1. Wir können das Bit festlegen, indem wir den Linux-Code in proc-v7 ändern. S-Dateien wie unten:
#ifdef CONFIG_SMP
ALT_SMP (mrc p15, 0, r0, c1, c0, 1)
ALT_UP (mov r0, #(1 << 6)) @ fake it for UP
tst r0, #(1 << 6) @ SMP/nAMP-Modus aktiviert?
orreq r0, r0, #(1 << 6) @ Enable SMP/nAMP mode
orreq r0, r0, r10 @ Enable CPU-spezifische SMP-Bits
Orr r0, r0, #(1) @Add diese Zeile aktiviert ACTLR[0]
MCREQ P15, 0, R0, C1, C0, 1
#endif