Précisions demandées à Paul
1- Tu as ecrit
J'ai ajouté au logiciel des possibilités de remonter les statistiques d'erreurs EDAC liées au cache et aux register files (integer unit et floating point unit). Il semblerait qu'il y ait des moyen de test pour les register files (se référer à Leon3FT_fault_tolerance <https://hephaistos.lpp.polytechnique.fr/redmine/projects/lfr-fsw/wiki/Leon3FT_fault_tolerance>).
Ok, tu as ajouté la possibilité mais est ce que tu les remontes dans les HK.
Les champs décrits dans la SRS (en partie le SSS-
SEU counters (counter of the correctable errors and a counter of the not correctable
errors detected by the EDAC)
J ai donc regardé dans les hk et j ai trouvé
les erreurs EDAC semblent correspondre à AHB (IDB du DPU c est ecrit dans ce doc)
--> LE_CNT erreur si memory corruption detected
--> ME_CNT
il faut egalement renseigner LAST_FAIL_ADDR
Hors il me semble que tu as dit que tu ne renseignais pas ces champs.
--> peux tu m'éclairer
La réponse de Paul
Deux fonctions permettent de relever les compteurs et de les remettres à zéros:
void CCR_getInstructionAndDataErrorCounters( unsigned int* instructionErrorCounter, unsigned int* dataErrorCounter )
void ASR16_get_FPRF_IURF_ErrorCounters( unsigned int* fprfErrorCounter, unsigned int* iurfErrorCounter)
Les deux fonctions sont appelées par:
void set_hk_lfr_ahb_correctable()
{
/** This function builds the error counter hk_lfr_ahb_correctable using the statistics provided
* by the Cache Control Register (ASI 2, offset 0) and in the Register Protection Control Register (ASR16) on the
* detected errors in the cache, in the integer unit and in the floating point unit.
*
* @param void
*
* @return void
*
* All errors are summed to set the value of the hk_lfr_ahb_correctable counter.
*
*/
unsigned int ahb_correctable;
unsigned int instructionErrorCounter;
unsigned int dataErrorCounter;
unsigned int fprfErrorCounter;
unsigned int iurfErrorCounter;
CCR_getInstructionAndDataErrorCounters( &instructionErrorCounter, &dataErrorCounter);
ASR16_get_FPRF_IURF_ErrorCounters( &fprfErrorCounter, &iurfErrorCounter);
ahb_correctable = instructionErrorCounter
+ dataErrorCounter
+ fprfErrorCounter
+ iurfErrorCounter
+ housekeeping_packet.hk_lfr_ahb_correctable;
if (ahb_correctable > 255)
{
housekeeping_packet.hk_lfr_ahb_correctable = 255;
}
else
{
housekeeping_packet.hk_lfr_ahb_correctable = ahb_correctable;
}
}
Je ne relève pas l'adresse de la dernière adresse fausse. En fait, le champ hk_lfr_ahb_correctable est le champ qui me paraissait approprié pour remonter les erreurs EDAC (provenant des register files ou du cache) mais je ne remonte aucune erreur liées aux transmissions sur le bus AHB.