En raison de la fonctionnalité par défaut linux BSP n’active pas la diffusion de maintenance du cache et du TLB (le bit0 du registre ACTLR reste « 0 ») en mode SMP, le problème de coherency du cache peut être constaté.
Pour en savoir plus sur ce bit, reportez-vous à la diffusion des opérations de maintenance à la section 1.7.3 dans le manuel de référence technique ARM A9 MPCore[2] :
Tous les processeurs travaillant en mode SMP sur le même domaine cohérent peuvent envoyer et recevoir des opérations de maintenance TLB et de cache. Le manuel de référence de l’architecture ARM fournit des informations détaillées sur les opérations de diffusion. Un processeur Cortex-A9 dans le cluster A9-MP diffuse des opérations de maintenance diffusion lorsqu’il fonctionne en mode SMP (ACTLR. SMP=1) et lorsque la diffusion du fonctionnement de maintenance est activée (ACTLR. FW=1). Un processeur Cortex-A9 peut recevoir et exécuter des opérations de maintenance de diffusion lorsqu’il fonctionne en mode SMP, ACTLR. SMP=1.
Il est recommandé de définir les deux ACTLR. FW et ACTLR. SMP à 1. Nous pouvons définir le bit en modifiant le code Linux dans proc-v7. Fichiers S comme ci-dessous :
#ifdef CONFIG_SMP
ALT_SMP (mrc p15, 0, r0, c1, c0, 1)
ALT_UP (mov r0, #(1 << 6)) @ faux pour UP
tst r0, #(1 << 6) @ Mode SMP/nAMP activé ?
orreq r0, r0, #(1 << 6) @ Activer le mode SMP/nAMP
orreq r0, r0, r10 @ Activer les bits SMP spécifiques au processeur
orr r0, r0, #(1) @Add cette ligne activer l’ACTLR[0]
mcreq p15, 0, r0, c1, c0, 1
#endif