From cde38d3f75d95ae4cfe6c162c477ce558d6c0dd4 Mon Sep 17 00:00:00 2001 From: chacha Date: Mon, 9 Mar 2026 01:10:56 +0100 Subject: [PATCH] integration on real hardware --- Draw.c | 137 +++++----- Draw.h | 18 +- FaultSources.c | 266 +++++++++++++------ FaultSources.h | 663 ++++++++++++++++++++++++----------------------- Test_Address.c | 341 +++++++++++++----------- Test_Address.h | 3 +- Test_Data.c | 600 ++++++++++++++++++++++-------------------- Test_Data.h | 3 +- Test_Data_Huge.c | 430 +++++++++++++++++++++++++----- Test_Data_Huge.h | 3 +- Utils.c | 18 +- Utils.h | 42 ++- V2MemTest.h | 50 +++- main.c | 306 ++++++++++++++-------- 14 files changed, 1771 insertions(+), 1109 deletions(-) diff --git a/Draw.c b/Draw.c index 0a26bbd..543d87e 100644 --- a/Draw.c +++ b/Draw.c @@ -21,89 +21,72 @@ #include "Draw.h" -#define XY_ONE (1 << SST_XY_FRACBITS) -#define ST_ONE (1 << SST_ST_FRACBITS) -#define W_ONE (1 << SST_W_FRACBITS) - -typedef struct _def_sPoint +static inline uint32_t f32u(const float f) { - int16_t x; - int16_t y; -}def_sPoint; - -typedef struct _def_sTriangle -{ - def_sPoint vA; - def_sPoint vB; - def_sPoint vC; - int32_t s; - int32_t t; - int32_t w; - int32_t dsdx; - int32_t dtdx; - int32_t dwdx; - int32_t dsdy; - int32_t dtdy; - int32_t dwdy; -}def_sTriangle; - -static inline uint32_t v2_triangle_cmd_from_abc(const def_sPoint A, - const def_sPoint B, - const def_sPoint C) -{ - const int32_t abx = (int32_t)B.x - (int32_t)A.x; - const int32_t aby = (int32_t)B.y - (int32_t)A.y; - const int32_t acx = (int32_t)C.x - (int32_t)A.x; - const int32_t acy = (int32_t)C.y - (int32_t)A.y; - const int64_t s = (int64_t )abx * (int64_t )acy - (int64_t )aby * (int64_t )acx; - return (s < 0) ? 0x80000000u : 0u; -} -static void inline drawTriangle(const SstRegs * const sst, const def_sTriangle * const sTri) -{ - ISET(sst->vA.x, sTri->vA.x*XY_ONE); ISET(sst->vA.y, sTri->vA.y*XY_ONE); - ISET(sst->vB.x, sTri->vB.x*XY_ONE); ISET(sst->vB.y, sTri->vB.y*XY_ONE); - ISET(sst->vC.x, sTri->vC.x*XY_ONE); ISET(sst->vC.y, sTri->vC.y*XY_ONE); - ISET(sst->s, sTri->s*ST_ONE); - ISET(sst->t, sTri->t*ST_ONE); - ISET(sst->w, sTri->w*W_ONE); - ISET(sst->dsdx, sTri->dsdx*ST_ONE); - ISET(sst->dtdx, sTri->dtdx*ST_ONE); - ISET(sst->dwdx, sTri->dwdx*W_ONE); - ISET(sst->dsdy, sTri->dsdy*ST_ONE); - ISET(sst->dtdy, sTri->dtdy*ST_ONE); - ISET(sst->dwdy, sTri->dwdy*W_ONE); - ISET(sst->triangleCMD,v2_triangle_cmd_from_abc(sTri->vA, sTri->vB, sTri->vC)); + const union { float f; uint32_t u;} v = {.f = f}; + return v.u; } void -drawSquare( const SstRegs * const sst, +drawRect( const SstRegs * const sst, const int16_t x, const int16_t y, - const int16_t tSize) + const int16_t tSizeX, + const int16_t tSizeY) { - const def_sTriangle tri1 = { - .vA = {.x= (x+0), .y = (y+0)}, - .vB = {.x= (x+tSize), .y = (y+0)}, - .vC = {.x= (x+0), .y = (y+tSize)}, - .s = 0, - .t = 0, - .w = 1, - .dsdx = 1, .dtdx = 0, - .dwdx = 0, - .dsdy = 0, .dtdy = 1, - .dwdy = 0}; - drawTriangle(sst, &tri1); + ISET(sst->sARGB,0xFFFFFFFF); + ISET(sst->sOowfbi,f32u(1.0f)); + ISET(sst->sVx, f32u((float)x)); + ISET(sst->sVy, f32u((float)y)); + ISET(sst->sSow0,f32u(0.0f)); + ISET(sst->sTow0,f32u(0.0f)); + /* 0b10 0000 (Update only S0/T0), doc page 76 */ + ISET(sst->sSetupMode, 0x0020); + ISET(sst->sBeginTriCMD, 1); - const def_sTriangle tri2 = { - .vA = {.x= (x+0), .y = (y+tSize)}, - .vB = {.x= (x+tSize), .y = (y+0)}, - .vC = {.x= (x+tSize), .y = (y+tSize)}, - .s = 0, - .t = tSize, - .w = 1, - .dsdx = 1, .dtdx = 0, - .dwdx = 0, - .dsdy = 0, .dtdy = 1, - .dwdy = 0 }; - drawTriangle(sst, &tri2); + ISET(sst->sVx, f32u((float)(x+tSizeX))); + ISET(sst->sVy, f32u((float)y)); + ISET(sst->sSow0,f32u((float)tSizeX)); + ISET(sst->sTow0,f32u(0.0f)); + ISET(sst->sDrawTriCMD, 1); + + ISET(sst->sVx, f32u((float)x)); + ISET(sst->sVy, f32u((float)y+tSizeY)); + ISET(sst->sSow0,f32u(0.0f)); + ISET(sst->sTow0,f32u((float)tSizeY)); + ISET(sst->sDrawTriCMD, 1); + + ISET(sst->sVx, f32u((float)x+tSizeX)); + ISET(sst->sVy, f32u((float)y+tSizeY)); + ISET(sst->sSow0,f32u((float)tSizeX)); + ISET(sst->sTow0,f32u((float)tSizeY)); + ISET(sst->sDrawTriCMD, 1); + + ISET(sst->nopCMD, 0x1); } + + + +void +clearScreen( const SstRegs * const sst, + const uint32_t u32Color, + const int16_t u16SizeX, + const int16_t u16SizeY) +{ + ISET(sst->clipLeftRight, u16SizeX); + ISET(sst->clipBottomTop, u16SizeY); + ISET(sst->zaColor, u32Color); + //ISET(sst->zaColor, 0x0000); + + const uint32_t fbz_saved = IGET(sst->fbzMode); + ISET(sst->c1,u32Color); + ISET(sst->c0,0x0); + ISET(sst->zaColor,0x0); + ISET(sst->fbzMode, SST_RGBWRMASK | SST_ZAWRMASK); + ISET(sst->fastfillCMD, 0); + ISET(sst->nopCMD, 0x1); + ISET(sst->fbzMode, fbz_saved); +} + + + diff --git a/Draw.h b/Draw.h index 993b334..a20eb2a 100644 --- a/Draw.h +++ b/Draw.h @@ -21,9 +21,25 @@ #include void +drawRect( const SstRegs * const sst, + const int16_t x, + const int16_t y, + const int16_t tSizeX, + const int16_t tSizeY); + +static inline void drawSquare( const SstRegs * const sst, const int16_t x, const int16_t y, - const int16_t tSize); + const int16_t tSize) +{ + drawRect(sst, x, y, tSize, tSize); +} +void +clearScreen( const SstRegs * const sst, + const uint32_t u32Color, + const int16_t u16SizeX, + const int16_t u16SizeY); + #endif //_DEF_DRAW_H_ diff --git a/FaultSources.c b/FaultSources.c index 79e4f3d..f88a092 100644 --- a/FaultSources.c +++ b/FaultSources.c @@ -21,7 +21,8 @@ #include "FaultSources.h" #include "Utils.h" -def_sFaultSourceScoreRec ar_dFaultScores[NB_FAULT_SOURCE] = +const def_sFaultSourceScoreRec +_ar_dFaultScores[NB_FAULT_SOURCE] = { { .eThisFaultSource = VOODOO_BOARD, @@ -34,97 +35,126 @@ def_sFaultSourceScoreRec ar_dFaultScores[NB_FAULT_SOURCE] = FAULT_SOURCES(GEN_FAULT_SOURCES_ARRAY) }; -def_sFaultSourceScoreRec ar_dFaultScores_sorted[NB_FAULT_SOURCE]; - void -FaultSource_Reset() +FaultSource_reset(def_sFaultSourceScoreRec* const pCtx) { - for(def_eFaultSource idx = 0; idx < NB_FAULT_SOURCE; idx++ ) - ar_dFaultScores[idx].dScore = 0.0; + memcpy( pCtx, + _ar_dFaultScores, + sizeof(_ar_dFaultScores)); } static unsigned long -FaultSource_getNbDeps(const def_eFaultSource eFaultSource) +FaultSource_getNbDeps( const def_sFaultSourceScoreRec* const pCtx, + const def_eFaultSource eFaultSource) { unsigned long res = 0; for(unsigned long idx = 0; idx < NB_FAULT_SOURCE; idx++ ) - if(ar_dFaultScores[idx].eParrentFaultSource == eFaultSource) + if(pCtx[idx].eParrentFaultSource == eFaultSource) res++; return res; } void -FaultSource_AddScore( def_eFaultSource eFaultSource, +FaultSource_addScore( def_sFaultSourceScoreRec* const pCtx, + def_eFaultSource eFaultSource, double dScore) { double dDivider = 1.0; do { dScore /= dDivider; - ar_dFaultScores[eFaultSource].dScore += dScore; - eFaultSource = ar_dFaultScores[eFaultSource].eParrentFaultSource; - dDivider = FaultSource_getNbDeps(eFaultSource); - if(dDivider <= 0) - dDivider = 1.0; + pCtx[eFaultSource].dScore += dScore; + /* + if(dDivider==1.0) + printf("Add score to %s : %02.3f\n", + pCtx[eFaultSource].szName, + dScore); + */ + eFaultSource = pCtx[eFaultSource].eParrentFaultSource; + dDivider *= 5; }while(eFaultSource != _INVALID_FAULT_SOURCE_); } -static unsigned long -FaultSource_Sort_GetIdx(const def_eFaultSource eFaultSource) +void +FaultSource_divideAll( def_sFaultSourceScoreRec* const pCtx, + const double dDivider) { for(unsigned long idx = 0; idx < NB_FAULT_SOURCE; idx++ ) - if(ar_dFaultScores_sorted[idx].eThisFaultSource == eFaultSource) + pCtx[idx].dScore /= dDivider; +} + +static unsigned long +FaultSource_GetIdx( const def_sFaultSourceScoreRec* const pCtx, + const def_eFaultSource eFaultSource) +{ + for(unsigned long idx = 0; idx < NB_FAULT_SOURCE; idx++ ) + if(pCtx[idx].eThisFaultSource == eFaultSource) return idx; return _INVALID_FAULT_SOURCE_; } static inline void -FaultSource_Sort_Swap( const def_eFaultSource eFaultSourceCurrentA, - const def_eFaultSource eFaultSourceCurrentB) +FaultSource_Swap( def_sFaultSourceScoreRec* const pCtx, + const def_eFaultSource A, + const def_eFaultSource B) { - static def_sFaultSourceScoreRec tmp; - memcpy(&tmp, &ar_dFaultScores_sorted[eFaultSourceCurrentA], sizeof(def_sFaultSourceScoreRec)); - memcpy(&ar_dFaultScores_sorted[eFaultSourceCurrentA], &ar_dFaultScores_sorted[eFaultSourceCurrentB], sizeof(def_sFaultSourceScoreRec)); - memcpy(&ar_dFaultScores_sorted[eFaultSourceCurrentB], &tmp, sizeof(def_sFaultSourceScoreRec)); + def_sFaultSourceScoreRec tmp; + memcpy( &tmp, + &pCtx[A], + sizeof(def_sFaultSourceScoreRec)); + memcpy( &pCtx[A], + &pCtx[B], + sizeof(def_sFaultSourceScoreRec)); + memcpy( &pCtx[B], + &tmp, + sizeof(def_sFaultSourceScoreRec)); } void -FaultSource_Sort() +FaultSource_getSorted( def_sFaultSourceScoreRec* const pDst, + const def_sFaultSourceScoreRec* const pCtx) { unsigned char bSwapped = 1; - - memcpy(ar_dFaultScores_sorted,ar_dFaultScores,sizeof(ar_dFaultScores_sorted)); - for(long eFaultSourceCurrentComp=0; - eFaultSourceCurrentComp < (NB_FAULT_SOURCE - 1); - eFaultSourceCurrentComp++ ) - ar_dFaultScores_sorted[eFaultSourceCurrentComp].dScore *= ar_dFaultScores_sorted[eFaultSourceCurrentComp].dWeight; + + memcpy( pDst, + pCtx, + sizeof(_ar_dFaultScores)); + + for(unsigned long idx = 0; + idx < (NB_FAULT_SOURCE - 1); + ++idx ) + pDst[idx].dScore *= pDst[idx].dWeight; // shaker sort while(bSwapped) { bSwapped = 0; - for(long eFaultSourceCurrentComp=0; - eFaultSourceCurrentComp < (NB_FAULT_SOURCE - 1); - eFaultSourceCurrentComp++ ) + for(unsigned long idx=0; + idx < (NB_FAULT_SOURCE - 1); + ++idx ) { - if( ar_dFaultScores_sorted[eFaultSourceCurrentComp].dScore - < ar_dFaultScores_sorted[eFaultSourceCurrentComp + 1].dScore) + if( pDst[idx].dScore + < pDst[idx + 1].dScore) { - FaultSource_Sort_Swap(eFaultSourceCurrentComp, eFaultSourceCurrentComp + 1); + FaultSource_Swap( pDst, + idx, + idx + 1); bSwapped = 1; break; } } - for(long eFaultSourceCurrentComp = (NB_FAULT_SOURCE-2); - eFaultSourceCurrentComp >= 0; - eFaultSourceCurrentComp-- ) + for(long idx = (NB_FAULT_SOURCE-2); + idx >= 0; + --idx ) { - if( ar_dFaultScores_sorted[eFaultSourceCurrentComp].dScore - < ar_dFaultScores_sorted[eFaultSourceCurrentComp + 1].dScore) + if( pDst[idx].dScore + < pDst[idx + 1].dScore) { - FaultSource_Sort_Swap(eFaultSourceCurrentComp, eFaultSourceCurrentComp + 1); + FaultSource_Swap( pDst, + idx, + idx + 1); bSwapped = 1; break; } @@ -132,59 +162,147 @@ FaultSource_Sort() } // updating refs - for(long eFaultSourceIdx = 0; - eFaultSourceIdx < NB_FAULT_SOURCE; - eFaultSourceIdx++ ) - { - unsigned long idx = FaultSource_Sort_GetIdx(ar_dFaultScores_sorted[eFaultSourceIdx].eParrentFaultSource); - ar_dFaultScores_sorted[eFaultSourceIdx].eParrentFaultSource = idx; - } - for(long eFaultSourceIdx = 0; - eFaultSourceIdx < NB_FAULT_SOURCE; - eFaultSourceIdx++ ) - ar_dFaultScores_sorted[eFaultSourceIdx].eThisFaultSource = eFaultSourceIdx; + for(unsigned long idx = 0; + idx < NB_FAULT_SOURCE; + ++idx ) + pDst[idx].eParrentFaultSource = + FaultSource_GetIdx( + pDst, + pDst[idx].eParrentFaultSource); + + for(unsigned long idx = 0; + idx < NB_FAULT_SOURCE; + ++idx ) + pDst[idx].eThisFaultSource = idx; } + void -FaultSource_GetLoc(def_eFaultSource eFaultSource, char* loc) +FaultSource_getLoc( const def_sFaultSourceScoreRec* const pCtx, + def_eFaultSource eFaultSource, + char* const loc) { loc[0]='\0'; - strcpy(loc, ar_dFaultScores_sorted[eFaultSource].szLoc); - eFaultSource = ar_dFaultScores_sorted[eFaultSource].eParrentFaultSource; + strcpy(loc, pCtx[eFaultSource].szLoc); + eFaultSource = pCtx[eFaultSource].eParrentFaultSource; while(eFaultSource != _INVALID_FAULT_SOURCE_) { static char buff[1024]; - sprintf(buff, "%s->%s", ar_dFaultScores_sorted[eFaultSource].szLoc, loc); + sprintf(buff, "%s->%s", pCtx[eFaultSource].szLoc, loc); strcpy(loc, buff); - eFaultSource = ar_dFaultScores_sorted[eFaultSource].eParrentFaultSource; + eFaultSource = pCtx[eFaultSource].eParrentFaultSource; } } void -FaultSource_Display() +FaultSource_display(const def_sFaultSourceScoreRec* const pCtx) { - double dScoreSum = 0; + double dScoreSum = 1; - for(def_eFaultSource eFaultSourceCurrent = 0; - eFaultSourceCurrent < NB_FAULT_SOURCE && ar_dFaultScores_sorted[eFaultSourceCurrent].dScore > 0; - eFaultSourceCurrent++ ) - dScoreSum += ar_dFaultScores_sorted[eFaultSourceCurrent].dScore; + for(unsigned long idx = 0; + idx < NB_FAULT_SOURCE + && pCtx[idx].dScore > 0; + ++idx ) + dScoreSum += pCtx[idx].dScore; printf("------------------------------------------------\n"); printf("\nDefects list:\n\n"); printf("Score\tElement [Loc]\n"); printf("------------------------------------------------\n"); - for(def_eFaultSource eFaultSourceCurrent = 0; - eFaultSourceCurrent < NB_FAULT_SOURCE - && (ar_dFaultScores_sorted[eFaultSourceCurrent].dScore > 0); - eFaultSourceCurrent++ ) + for(unsigned long idx = 0; + (idx < NB_FAULT_SOURCE) + && (pCtx[idx].dScore > 0); + ++idx ) { - static char buff[1024]; - FaultSource_GetLoc(eFaultSourceCurrent, buff); - printf("%02.3f\t%s [%s]\n", - 100 * ar_dFaultScores_sorted[eFaultSourceCurrent].dScore / dScoreSum, - ar_dFaultScores_sorted[eFaultSourceCurrent].szName, + static char buff[1024] = {0}; + buff[0]='\0'; + FaultSource_getLoc(pCtx,idx, buff); + printf("%02.5f\t%s [%s]\n", + 100 * pCtx[idx].dScore / dScoreSum, + pCtx[idx].szName, buff ); } -} \ No newline at end of file +} + + +void +WordBitFaultSet( def_sFaultSourceScoreRec* const pCtx, + const uint32_t ErrorMark, + const double dScore, + const def_eFaultSource eFaultSourceL, + const def_eFaultSource eFaultSourceH) +{ + /* + for(unsigned char bitPos = 0; bitPos <= 31 ; bitPos++) + if(ErrorMark & (1u << bitPos)) + { + if(bitPos < 16) + FaultSource_addScore(pCtx,eFaultSourceL + bitPos, dScore); + else + FaultSource_addScore(pCtx,eFaultSourceH + bitPos - 16, dScore); + } + */ + + if(ErrorMark & 0x000000FFu) + { + if(ErrorMark & 0x00000001u) FaultSource_addScore(pCtx,eFaultSourceL + 0, dScore); + if(ErrorMark & 0x00000002u) FaultSource_addScore(pCtx,eFaultSourceL + 1, dScore); + if(ErrorMark & 0x00000004u) FaultSource_addScore(pCtx,eFaultSourceL + 2, dScore); + if(ErrorMark & 0x00000008u) FaultSource_addScore(pCtx,eFaultSourceL + 3, dScore); + if(ErrorMark & 0x00000010u) FaultSource_addScore(pCtx,eFaultSourceL + 4, dScore); + if(ErrorMark & 0x00000020u) FaultSource_addScore(pCtx,eFaultSourceL + 5, dScore); + if(ErrorMark & 0x00000040u) FaultSource_addScore(pCtx,eFaultSourceL + 6, dScore); + if(ErrorMark & 0x00000080u) FaultSource_addScore(pCtx,eFaultSourceL + 7, dScore); + } + if(ErrorMark & 0x0000FF00u) + { + if(ErrorMark & 0x00000100u) FaultSource_addScore(pCtx,eFaultSourceL + 8, dScore); + if(ErrorMark & 0x00000200u) FaultSource_addScore(pCtx,eFaultSourceL + 9, dScore); + if(ErrorMark & 0x00000400u) FaultSource_addScore(pCtx,eFaultSourceL + 10, dScore); + if(ErrorMark & 0x00000800u) FaultSource_addScore(pCtx,eFaultSourceL + 11, dScore); + if(ErrorMark & 0x00001000u) FaultSource_addScore(pCtx,eFaultSourceL + 12, dScore); + if(ErrorMark & 0x00002000u) FaultSource_addScore(pCtx,eFaultSourceL + 13, dScore); + if(ErrorMark & 0x00004000u) FaultSource_addScore(pCtx,eFaultSourceL + 14, dScore); + if(ErrorMark & 0x00008000u) FaultSource_addScore(pCtx,eFaultSourceL + 15, dScore); + } + if(ErrorMark & 0x00FF0000u) + { + if(ErrorMark & 0x00010000u) FaultSource_addScore(pCtx,eFaultSourceH + 0, dScore); + if(ErrorMark & 0x00020000u) FaultSource_addScore(pCtx,eFaultSourceH + 1, dScore); + if(ErrorMark & 0x00040000u) FaultSource_addScore(pCtx,eFaultSourceH + 2, dScore); + if(ErrorMark & 0x00080000u) FaultSource_addScore(pCtx,eFaultSourceH + 3, dScore); + if(ErrorMark & 0x00100000u) FaultSource_addScore(pCtx,eFaultSourceH + 4, dScore); + if(ErrorMark & 0x00200000u) FaultSource_addScore(pCtx,eFaultSourceH + 5, dScore); + if(ErrorMark & 0x00400000u) FaultSource_addScore(pCtx,eFaultSourceH + 6, dScore); + if(ErrorMark & 0x00800000u) FaultSource_addScore(pCtx,eFaultSourceH + 7, dScore); + } + if(ErrorMark & 0xFF000000u) + { + if(ErrorMark & 0x01000000u) FaultSource_addScore(pCtx,eFaultSourceH + 8, dScore); + if(ErrorMark & 0x02000000u) FaultSource_addScore(pCtx,eFaultSourceH + 9, dScore); + if(ErrorMark & 0x04000000u) FaultSource_addScore(pCtx,eFaultSourceH + 10, dScore); + if(ErrorMark & 0x08000000u) FaultSource_addScore(pCtx,eFaultSourceH + 11, dScore); + if(ErrorMark & 0x10000000u) FaultSource_addScore(pCtx,eFaultSourceH + 12, dScore); + if(ErrorMark & 0x20000000u) FaultSource_addScore(pCtx,eFaultSourceH + 13, dScore); + if(ErrorMark & 0x40000000u) FaultSource_addScore(pCtx,eFaultSourceH + 14, dScore); + if(ErrorMark & 0x80000000u) FaultSource_addScore(pCtx,eFaultSourceH + 15, dScore); + } +} + +void +QuartetBitFaultSet( def_sFaultSourceScoreRec* const pCtx, + const uint8_t ErrorMark, + const double dScore, + const def_eFaultSource eFaultSource) +{ + /* + for(uint8_t bitPos = 0; bitPos < 4 ; bitPos++) + if(ErrorMark & (1u << bitPos)) + FaultSource_addScore(pCtx,eFaultSource + bitPos, dScore); + */ + if(ErrorMark & 0x01u) FaultSource_addScore(pCtx,eFaultSource + 0, dScore); + if(ErrorMark & 0x02u) FaultSource_addScore(pCtx,eFaultSource + 1, dScore); + if(ErrorMark & 0x04u) FaultSource_addScore(pCtx,eFaultSource + 2, dScore); + if(ErrorMark & 0x08u) FaultSource_addScore(pCtx,eFaultSource + 3, dScore); +} diff --git a/FaultSources.h b/FaultSources.h index 885eab6..c55a749 100644 --- a/FaultSources.h +++ b/FaultSources.h @@ -25,7 +25,7 @@ ACTION(U3_FBI, "U3/FBI (front middle big Chip)" ,VOODOO_BOARD, 1.0)\ ACTION(U9_TMU0, "U9/TMU0 (front right big Chip)" ,VOODOO_BOARD, 1.0)\ /* /!\ Keep in-order, only appEND new fields */ \ - ACTION(U9_TMU0_TEXDATA_0_0, "pin 52" ,U9_TMU0, 1.0)\ + ACTION(U9_TMU0_TEXDATA_0_0, "pin 52" ,U9_TMU0, 1.0)/*Offset: 1*/\ ACTION(U9_TMU0_TEXDATA_0_1, "pin 53" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEXDATA_0_2, "pin 54" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEXDATA_0_3, "pin 55" ,U9_TMU0, 1.0)\ @@ -41,7 +41,7 @@ ACTION(U9_TMU0_TEXDATA_0_13, "pin 67" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEXDATA_0_14, "pin 69" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEXDATA_0_15, "pin 70" ,U9_TMU0, 1.0)\ - ACTION(U9_TMU0_TEXDATA_1_0, "pin 90" ,U9_TMU0, 1.0)\ + ACTION(U9_TMU0_TEXDATA_1_0, "pin 90" ,U9_TMU0, 1.0)/*Offset: 17*/\ ACTION(U9_TMU0_TEXDATA_1_1, "pin 91" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEXDATA_1_2, "pin 92" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEXDATA_1_3, "pin 93" ,U9_TMU0, 1.0)\ @@ -57,7 +57,7 @@ ACTION(U9_TMU0_TEXDATA_1_13, "pin 106" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEXDATA_1_14, "pin 107" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEXDATA_1_15, "pin 108" ,U9_TMU0, 1.0)\ - ACTION(U9_TMU0_TEXDATA_2_0, "pin 71" ,U9_TMU0, 1.0)\ + ACTION(U9_TMU0_TEXDATA_2_0, "pin 71" ,U9_TMU0, 1.0)/*Offset: 33*/\ ACTION(U9_TMU0_TEXDATA_2_1, "pin 72" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEXDATA_2_2, "pin 74" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEXDATA_2_3, "pin 75" ,U9_TMU0, 1.0)\ @@ -73,7 +73,7 @@ ACTION(U9_TMU0_TEXDATA_2_13, "pin 87" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEXDATA_2_14, "pin 88" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEXDATA_2_15, "pin 89" ,U9_TMU0, 1.0)\ - ACTION(U9_TMU0_TEXDATA_3_0, "pin 110" ,U9_TMU0, 1.0)\ + ACTION(U9_TMU0_TEXDATA_3_0, "pin 110" ,U9_TMU0, 1.0)/*Offset: 49*/\ ACTION(U9_TMU0_TEXDATA_3_1, "pin 111" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEXDATA_3_2, "pin 112" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEXDATA_3_3, "pin 113" ,U9_TMU0, 1.0)\ @@ -89,7 +89,7 @@ ACTION(U9_TMU0_TEXDATA_3_13, "pin 125" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEXDATA_3_14, "pin 126" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEXDATA_3_15, "pin 127" ,U9_TMU0, 1.0)\ - ACTION(U9_TMU0_TT_DATA_0, "pin 188" ,U9_TMU0, 1.0)\ + ACTION(U9_TMU0_TT_DATA_0, "pin 188" ,U9_TMU0, 1.0)/*Offset: 65*/\ ACTION(U9_TMU0_TT_DATA_1, "pin 189" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TT_DATA_2, "pin 190" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TT_DATA_3, "pin 191" ,U9_TMU0, 1.0)\ @@ -105,7 +105,7 @@ ACTION(U9_TMU0_TT_DATA_13, "pin 205" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TT_DATA_14, "pin 206" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TT_DATA_15, "pin 207" ,U9_TMU0, 1.0)\ - ACTION(U9_TMU0_FT_DATA_0, "pin 6" ,U9_TMU0, 1.0)\ + ACTION(U9_TMU0_FT_DATA_0, "pin 6" ,U9_TMU0, 1.0)/*Offset: 81*/\ ACTION(U9_TMU0_FT_DATA_1, "pin 7" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_FT_DATA_2, "pin 8" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_FT_DATA_3, "pin 9" ,U9_TMU0, 1.0)\ @@ -121,7 +121,7 @@ ACTION(U9_TMU0_FT_DATA_13, "pin 23" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_FT_DATA_14, "pin 24" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_FT_DATA_15, "pin 25" ,U9_TMU0, 1.0)\ - ACTION(U9_TMU0_TF_DATA_0, "pin 30" ,U9_TMU0, 1.0)\ + ACTION(U9_TMU0_TF_DATA_0, "pin 30" ,U9_TMU0, 1.0)/*Offset: 97*/\ ACTION(U9_TMU0_TF_DATA_1, "pin 32" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TF_DATA_2, "pin 33" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TF_DATA_3, "pin 34" ,U9_TMU0, 1.0)\ @@ -137,14 +137,14 @@ ACTION(U9_TMU0_TF_DATA_13, "pin 48" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TF_DATA_14, "pin 49" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TF_DATA_15, "pin 80" ,U9_TMU0, 1.0)\ - ACTION(U9_TMU0_TEX_RAS0, "pin 129" ,U9_TMU0, 1.0)\ + ACTION(U9_TMU0_TEX_RAS0, "pin 129" ,U9_TMU0, 1.0)/*Offset: 113*/\ ACTION(U9_TMU0_TEX_RAS1, "pin 130" ,U9_TMU0, 1.0)\ - ACTION(U9_TMU0_TEX_CAS0, "pin 131" ,U9_TMU0, 1.0)\ + ACTION(U9_TMU0_TEX_CAS0, "pin 131" ,U9_TMU0, 1.0)/*Offset: 115*/\ ACTION(U9_TMU0_TEX_CAS1, "pin 132" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEX_CAS2, "pin 134" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEX_CAS3, "pin 135" ,U9_TMU0, 1.0)\ - ACTION(U9_TMU0_TEX_WE, "pin 136" ,U9_TMU0, 1.0)\ - ACTION(U9_TMU0_TEX_ADDR_0_0, "pin 138" ,U9_TMU0, 1.0)\ + ACTION(U9_TMU0_TEX_WE, "pin 136" ,U9_TMU0, 1.0)/*Offset: 119*/\ + ACTION(U9_TMU0_TEX_ADDR_0_0, "pin 138" ,U9_TMU0, 1.0)/*Offset: 120*/\ ACTION(U9_TMU0_TEX_ADDR_0_1, "pin 139" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEX_ADDR_0_2, "pin 141" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEX_ADDR_0_3, "pin 142" ,U9_TMU0, 1.0)\ @@ -153,7 +153,7 @@ ACTION(U9_TMU0_TEX_ADDR_0_6, "pin 146" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEX_ADDR_0_7, "pin 147" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEX_ADDR_0_8, "pin 149" ,U9_TMU0, 1.0)\ - ACTION(U9_TMU0_TEX_ADDR_1_0, "pin 161" ,U9_TMU0, 1.0)\ + ACTION(U9_TMU0_TEX_ADDR_1_0, "pin 161" ,U9_TMU0, 1.0)/*Offset: 129*/\ ACTION(U9_TMU0_TEX_ADDR_1_1, "pin 162" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEX_ADDR_1_2, "pin 164" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEX_ADDR_1_3, "pin 165" ,U9_TMU0, 1.0)\ @@ -162,7 +162,7 @@ ACTION(U9_TMU0_TEX_ADDR_1_6, "pin 168" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEX_ADDR_1_7, "pin 169" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEX_ADDR_1_8, "pin 171" ,U9_TMU0, 1.0)\ - ACTION(U9_TMU0_TEX_ADDR_2_0, "pin 150" ,U9_TMU0, 1.0)\ + ACTION(U9_TMU0_TEX_ADDR_2_0, "pin 150" ,U9_TMU0, 1.0)/*Offset: 138*/\ ACTION(U9_TMU0_TEX_ADDR_2_1, "pin 151" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEX_ADDR_2_2, "pin 152" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEX_ADDR_2_3, "pin 154" ,U9_TMU0, 1.0)\ @@ -171,7 +171,7 @@ ACTION(U9_TMU0_TEX_ADDR_2_6, "pin 157" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEX_ADDR_2_7, "pin 158" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEX_ADDR_2_8, "pin 160" ,U9_TMU0, 1.0)\ - ACTION(U9_TMU0_TEX_ADDR_3_0, "pin 172" ,U9_TMU0, 1.0)\ + ACTION(U9_TMU0_TEX_ADDR_3_0, "pin 172" ,U9_TMU0, 1.0)/*Offset: 147*/\ ACTION(U9_TMU0_TEX_ADDR_3_1, "pin 174" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEX_ADDR_3_2, "pin 175" ,U9_TMU0, 1.0)\ ACTION(U9_TMU0_TEX_ADDR_3_3, "pin 176" ,U9_TMU0, 1.0)\ @@ -323,22 +323,22 @@ ACTION(U8_TMU1_TEX_ADDR_3_8, "pin 182" ,U8_TMU1, 1.0)\ ACTION(U11, "U11/RAM (front left)" ,VOODOO_BOARD, 1.0)\ /* /!\ Keep in-order, only appEND new fields */ \ - ACTION(U11_DQ0, "pin 2" ,U11, 1.0)\ - ACTION(U11_DQ1, "pin 3" ,U11, 1.0)\ - ACTION(U11_DQ2, "pin 4" ,U11, 1.0)\ - ACTION(U11_DQ3, "pin 5" ,U11, 1.0)\ - ACTION(U11_DQ4, "pin 7" ,U11, 1.0)\ - ACTION(U11_DQ5, "pin 8" ,U11, 1.0)\ - ACTION(U11_DQ6, "pin 9" ,U11, 1.0)\ - ACTION(U11_DQ7, "pin 10" ,U11, 1.0)\ - ACTION(U11_DQ8, "pin 31" ,U11, 1.0)\ - ACTION(U11_DQ9, "pin 32" ,U11, 1.0)\ - ACTION(U11_DQ10, "pin 33" ,U11, 1.0)\ - ACTION(U11_DQ11, "pin 34" ,U11, 1.0)\ - ACTION(U11_DQ12, "pin 36" ,U11, 1.0)\ - ACTION(U11_DQ13, "pin 37" ,U11, 1.0)\ - ACTION(U11_DQ14, "pin 38" ,U11, 1.0)\ - ACTION(U11_DQ15, "pin 39" ,U11, 1.0)\ + ACTION(U11_DQ1, "pin 2" ,U11, 1.0)\ + ACTION(U11_DQ2, "pin 3" ,U11, 1.0)\ + ACTION(U11_DQ3, "pin 4" ,U11, 1.0)\ + ACTION(U11_DQ4, "pin 5" ,U11, 1.0)\ + ACTION(U11_DQ5, "pin 7" ,U11, 1.0)\ + ACTION(U11_DQ6, "pin 8" ,U11, 1.0)\ + ACTION(U11_DQ7, "pin 9" ,U11, 1.0)\ + ACTION(U11_DQ8, "pin 10" ,U11, 1.0)\ + ACTION(U11_DQ9, "pin 31" ,U11, 1.0)\ + ACTION(U11_DQ10, "pin 32" ,U11, 1.0)\ + ACTION(U11_DQ11, "pin 33" ,U11, 1.0)\ + ACTION(U11_DQ12, "pin 34" ,U11, 1.0)\ + ACTION(U11_DQ13, "pin 36" ,U11, 1.0)\ + ACTION(U11_DQ14, "pin 37" ,U11, 1.0)\ + ACTION(U11_DQ15, "pin 38" ,U11, 1.0)\ + ACTION(U11_DQ16, "pin 39" ,U11, 1.0)\ ACTION(U11_A0, "pin 16" ,U11, 1.0)\ ACTION(U11_A1, "pin 17" ,U11, 1.0)\ ACTION(U11_A2, "pin 18" ,U11, 1.0)\ @@ -354,22 +354,22 @@ ACTION(U11_WE, "pin 13" ,U11, 1.0)\ ACTION(U12, "U12/RAM (front right)" ,VOODOO_BOARD, 1.0)\ /* /!\ Keep in-order, only appEND new fields */ \ - ACTION(U12_DQ0, "pin 2" ,U12, 1.0)\ - ACTION(U12_DQ1, "pin 3" ,U12, 1.0)\ - ACTION(U12_DQ2, "pin 4" ,U12, 1.0)\ - ACTION(U12_DQ3, "pin 5" ,U12, 1.0)\ - ACTION(U12_DQ4, "pin 7" ,U12, 1.0)\ - ACTION(U12_DQ5, "pin 8" ,U12, 1.0)\ - ACTION(U12_DQ6, "pin 9" ,U12, 1.0)\ - ACTION(U12_DQ7, "pin 10" ,U12, 1.0)\ - ACTION(U12_DQ8, "pin 31" ,U12, 1.0)\ - ACTION(U12_DQ9, "pin 32" ,U12, 1.0)\ - ACTION(U12_DQ10, "pin 33" ,U12, 1.0)\ - ACTION(U12_DQ11, "pin 34" ,U12, 1.0)\ - ACTION(U12_DQ12, "pin 36" ,U12, 1.0)\ - ACTION(U12_DQ13, "pin 37" ,U12, 1.0)\ - ACTION(U12_DQ14, "pin 38" ,U12, 1.0)\ - ACTION(U12_DQ15, "pin 39" ,U12, 1.0)\ + ACTION(U12_DQ1, "pin 2" ,U12, 1.0)\ + ACTION(U12_DQ2, "pin 3" ,U12, 1.0)\ + ACTION(U12_DQ3, "pin 4" ,U12, 1.0)\ + ACTION(U12_DQ4, "pin 5" ,U12, 1.0)\ + ACTION(U12_DQ5, "pin 7" ,U12, 1.0)\ + ACTION(U12_DQ6, "pin 8" ,U12, 1.0)\ + ACTION(U12_DQ7, "pin 9" ,U12, 1.0)\ + ACTION(U12_DQ8, "pin 10" ,U12, 1.0)\ + ACTION(U12_DQ9, "pin 31" ,U12, 1.0)\ + ACTION(U12_DQ10, "pin 32" ,U12, 1.0)\ + ACTION(U12_DQ11, "pin 33" ,U12, 1.0)\ + ACTION(U12_DQ12, "pin 34" ,U12, 1.0)\ + ACTION(U12_DQ13, "pin 36" ,U12, 1.0)\ + ACTION(U12_DQ14, "pin 37" ,U12, 1.0)\ + ACTION(U12_DQ15, "pin 38" ,U12, 1.0)\ + ACTION(U12_DQ16, "pin 39" ,U12, 1.0)\ ACTION(U12_A0, "pin 16" ,U12, 1.0)\ ACTION(U12_A1, "pin 17" ,U12, 1.0)\ ACTION(U12_A2, "pin 18" ,U12, 1.0)\ @@ -385,22 +385,22 @@ ACTION(U12_WE, "pin 13" ,U12, 1.0)\ ACTION(U13, "U13/RAM (front left)" ,VOODOO_BOARD, 1.0)\ /* /!\ Keep in-order, only appEND new fields */ \ - ACTION(U13_DQ0, "pin 2" ,U13, 1.0)\ - ACTION(U13_DQ1, "pin 3" ,U13, 1.0)\ - ACTION(U13_DQ2, "pin 4" ,U13, 1.0)\ - ACTION(U13_DQ3, "pin 5" ,U13, 1.0)\ - ACTION(U13_DQ4, "pin 7" ,U13, 1.0)\ - ACTION(U13_DQ5, "pin 8" ,U13, 1.0)\ - ACTION(U13_DQ6, "pin 9" ,U13, 1.0)\ - ACTION(U13_DQ7, "pin 10" ,U13, 1.0)\ - ACTION(U13_DQ8, "pin 31" ,U13, 1.0)\ - ACTION(U13_DQ9, "pin 32" ,U13, 1.0)\ - ACTION(U13_DQ10, "pin 33" ,U13, 1.0)\ - ACTION(U13_DQ11, "pin 34" ,U13, 1.0)\ - ACTION(U13_DQ12, "pin 36" ,U13, 1.0)\ - ACTION(U13_DQ13, "pin 37" ,U13, 1.0)\ - ACTION(U13_DQ14, "pin 38" ,U13, 1.0)\ - ACTION(U13_DQ15, "pin 39" ,U13, 1.0)\ + ACTION(U13_DQ1, "pin 2" ,U13, 1.0)\ + ACTION(U13_DQ2, "pin 3" ,U13, 1.0)\ + ACTION(U13_DQ3, "pin 4" ,U13, 1.0)\ + ACTION(U13_DQ4, "pin 5" ,U13, 1.0)\ + ACTION(U13_DQ5, "pin 7" ,U13, 1.0)\ + ACTION(U13_DQ6, "pin 8" ,U13, 1.0)\ + ACTION(U13_DQ7, "pin 9" ,U13, 1.0)\ + ACTION(U13_DQ8, "pin 10" ,U13, 1.0)\ + ACTION(U13_DQ9, "pin 31" ,U13, 1.0)\ + ACTION(U13_DQ10, "pin 32" ,U13, 1.0)\ + ACTION(U13_DQ11, "pin 33" ,U13, 1.0)\ + ACTION(U13_DQ12, "pin 34" ,U13, 1.0)\ + ACTION(U13_DQ13, "pin 36" ,U13, 1.0)\ + ACTION(U13_DQ14, "pin 37" ,U13, 1.0)\ + ACTION(U13_DQ15, "pin 38" ,U13, 1.0)\ + ACTION(U13_DQ16, "pin 39" ,U13, 1.0)\ ACTION(U13_A0, "pin 16" ,U13, 1.0)\ ACTION(U13_A1, "pin 17" ,U13, 1.0)\ ACTION(U13_A2, "pin 18" ,U13, 1.0)\ @@ -416,22 +416,22 @@ ACTION(U13_WE, "pin 13" ,U13, 1.0)\ ACTION(U14, "U14/RAM (front right)" ,VOODOO_BOARD, 1.0)\ /* /!\ Keep in-order, only appEND new fields */ \ - ACTION(U14_DQ0, "pin 2" ,U14, 1.0)\ - ACTION(U14_DQ1, "pin 3" ,U14, 1.0)\ - ACTION(U14_DQ2, "pin 4" ,U14, 1.0)\ - ACTION(U14_DQ3, "pin 5" ,U14, 1.0)\ - ACTION(U14_DQ4, "pin 7" ,U14, 1.0)\ - ACTION(U14_DQ5, "pin 8" ,U14, 1.0)\ - ACTION(U14_DQ6, "pin 9" ,U14, 1.0)\ - ACTION(U14_DQ7, "pin 10" ,U14, 1.0)\ - ACTION(U14_DQ8, "pin 31" ,U14, 1.0)\ - ACTION(U14_DQ9, "pin 32" ,U14, 1.0)\ - ACTION(U14_DQ10, "pin 33" ,U14, 1.0)\ - ACTION(U14_DQ11, "pin 34" ,U14, 1.0)\ - ACTION(U14_DQ12, "pin 36" ,U14, 1.0)\ - ACTION(U14_DQ13, "pin 37" ,U14, 1.0)\ - ACTION(U14_DQ14, "pin 38" ,U14, 1.0)\ - ACTION(U14_DQ15, "pin 39" ,U14, 1.0)\ + ACTION(U14_DQ1, "pin 2" ,U14, 1.0)\ + ACTION(U14_DQ2, "pin 3" ,U14, 1.0)\ + ACTION(U14_DQ3, "pin 4" ,U14, 1.0)\ + ACTION(U14_DQ4, "pin 5" ,U14, 1.0)\ + ACTION(U14_DQ5, "pin 7" ,U14, 1.0)\ + ACTION(U14_DQ6, "pin 8" ,U14, 1.0)\ + ACTION(U14_DQ7, "pin 9" ,U14, 1.0)\ + ACTION(U14_DQ8, "pin 10" ,U14, 1.0)\ + ACTION(U14_DQ9, "pin 31" ,U14, 1.0)\ + ACTION(U14_DQ10, "pin 32" ,U14, 1.0)\ + ACTION(U14_DQ11, "pin 33" ,U14, 1.0)\ + ACTION(U14_DQ12, "pin 34" ,U14, 1.0)\ + ACTION(U14_DQ13, "pin 36" ,U14, 1.0)\ + ACTION(U14_DQ14, "pin 37" ,U14, 1.0)\ + ACTION(U14_DQ15, "pin 38" ,U14, 1.0)\ + ACTION(U14_DQ16, "pin 39" ,U14, 1.0)\ ACTION(U14_A0, "pin 16" ,U14, 1.0)\ ACTION(U14_A1, "pin 17" ,U14, 1.0)\ ACTION(U14_A2, "pin 18" ,U14, 1.0)\ @@ -447,22 +447,22 @@ ACTION(U14_WE, "pin 13" ,U14, 1.0)\ ACTION(U15, "U15/RAM (front left)" ,VOODOO_BOARD, 1.0)\ /* /!\ Keep in-order, only appEND new fields */ \ - ACTION(U15_DQ0, "pin 2" ,U15, 1.0)\ - ACTION(U15_DQ1, "pin 3" ,U15, 1.0)\ - ACTION(U15_DQ2, "pin 4" ,U15, 1.0)\ - ACTION(U15_DQ3, "pin 5" ,U15, 1.0)\ - ACTION(U15_DQ4, "pin 7" ,U15, 1.0)\ - ACTION(U15_DQ5, "pin 8" ,U15, 1.0)\ - ACTION(U15_DQ6, "pin 9" ,U15, 1.0)\ - ACTION(U15_DQ7, "pin 10" ,U15, 1.0)\ - ACTION(U15_DQ8, "pin 31" ,U15, 1.0)\ - ACTION(U15_DQ9, "pin 32" ,U15, 1.0)\ - ACTION(U15_DQ10, "pin 33" ,U15, 1.0)\ - ACTION(U15_DQ11, "pin 34" ,U15, 1.0)\ - ACTION(U15_DQ12, "pin 36" ,U15, 1.0)\ - ACTION(U15_DQ13, "pin 37" ,U15, 1.0)\ - ACTION(U15_DQ14, "pin 38" ,U15, 1.0)\ - ACTION(U15_DQ15, "pin 39" ,U15, 1.0)\ + ACTION(U15_DQ1, "pin 2" ,U15, 1.0)\ + ACTION(U15_DQ2, "pin 3" ,U15, 1.0)\ + ACTION(U15_DQ3, "pin 4" ,U15, 1.0)\ + ACTION(U15_DQ4, "pin 5" ,U15, 1.0)\ + ACTION(U15_DQ5, "pin 7" ,U15, 1.0)\ + ACTION(U15_DQ6, "pin 8" ,U15, 1.0)\ + ACTION(U15_DQ7, "pin 9" ,U15, 1.0)\ + ACTION(U15_DQ8, "pin 10" ,U15, 1.0)\ + ACTION(U15_DQ9, "pin 31" ,U15, 1.0)\ + ACTION(U15_DQ10, "pin 32" ,U15, 1.0)\ + ACTION(U15_DQ11, "pin 33" ,U15, 1.0)\ + ACTION(U15_DQ12, "pin 34" ,U15, 1.0)\ + ACTION(U15_DQ13, "pin 36" ,U15, 1.0)\ + ACTION(U15_DQ14, "pin 37" ,U15, 1.0)\ + ACTION(U15_DQ15, "pin 38" ,U15, 1.0)\ + ACTION(U15_DQ16, "pin 39" ,U15, 1.0)\ ACTION(U15_A0, "pin 16" ,U15, 1.0)\ ACTION(U15_A1, "pin 17" ,U15, 1.0)\ ACTION(U15_A2, "pin 18" ,U15, 1.0)\ @@ -478,22 +478,22 @@ ACTION(U15_WE, "pin 13" ,U15, 1.0)\ ACTION(U16, "U16/RAM (front left)" ,VOODOO_BOARD, 1.0)\ /* /!\ Keep in-order, only appEND new fields */ \ - ACTION(U16_DQ0, "pin 2" ,U16, 1.0)\ - ACTION(U16_DQ1, "pin 3" ,U16, 1.0)\ - ACTION(U16_DQ2, "pin 4" ,U16, 1.0)\ - ACTION(U16_DQ3, "pin 5" ,U16, 1.0)\ - ACTION(U16_DQ4, "pin 7" ,U16, 1.0)\ - ACTION(U16_DQ5, "pin 8" ,U16, 1.0)\ - ACTION(U16_DQ6, "pin 9" ,U16, 1.0)\ - ACTION(U16_DQ7, "pin 10" ,U16, 1.0)\ - ACTION(U16_DQ8, "pin 31" ,U16, 1.0)\ - ACTION(U16_DQ9, "pin 32" ,U16, 1.0)\ - ACTION(U16_DQ10, "pin 33" ,U16, 1.0)\ - ACTION(U16_DQ11, "pin 34" ,U16, 1.0)\ - ACTION(U16_DQ12, "pin 36" ,U16, 1.0)\ - ACTION(U16_DQ13, "pin 37" ,U16, 1.0)\ - ACTION(U16_DQ14, "pin 38" ,U16, 1.0)\ - ACTION(U16_DQ15, "pin 39" ,U16, 1.0)\ + ACTION(U16_DQ1, "pin 2" ,U16, 1.0)\ + ACTION(U16_DQ2, "pin 3" ,U16, 1.0)\ + ACTION(U16_DQ3, "pin 4" ,U16, 1.0)\ + ACTION(U16_DQ4, "pin 5" ,U16, 1.0)\ + ACTION(U16_DQ5, "pin 7" ,U16, 1.0)\ + ACTION(U16_DQ6, "pin 8" ,U16, 1.0)\ + ACTION(U16_DQ7, "pin 9" ,U16, 1.0)\ + ACTION(U16_DQ8, "pin 10" ,U16, 1.0)\ + ACTION(U16_DQ9, "pin 31" ,U16, 1.0)\ + ACTION(U16_DQ10, "pin 32" ,U16, 1.0)\ + ACTION(U16_DQ11, "pin 33" ,U16, 1.0)\ + ACTION(U16_DQ12, "pin 34" ,U16, 1.0)\ + ACTION(U16_DQ13, "pin 36" ,U16, 1.0)\ + ACTION(U16_DQ14, "pin 37" ,U16, 1.0)\ + ACTION(U16_DQ15, "pin 38" ,U16, 1.0)\ + ACTION(U16_DQ16, "pin 39" ,U16, 1.0)\ ACTION(U16_A0, "pin 16" ,U16, 1.0)\ ACTION(U16_A1, "pin 17" ,U16, 1.0)\ ACTION(U16_A2, "pin 18" ,U16, 1.0)\ @@ -509,22 +509,22 @@ ACTION(U16_WE, "pin 13" ,U16, 1.0)\ ACTION(U17, "U17/RAM (front right)" ,VOODOO_BOARD, 1.0)\ /* /!\ Keep in-order, only appEND new fields */ \ - ACTION(U17_DQ0, "pin 2" ,U17, 1.0)\ - ACTION(U17_DQ1, "pin 3" ,U17, 1.0)\ - ACTION(U17_DQ2, "pin 4" ,U17, 1.0)\ - ACTION(U17_DQ3, "pin 5" ,U17, 1.0)\ - ACTION(U17_DQ4, "pin 7" ,U17, 1.0)\ - ACTION(U17_DQ5, "pin 8" ,U17, 1.0)\ - ACTION(U17_DQ6, "pin 9" ,U17, 1.0)\ - ACTION(U17_DQ7, "pin 10" ,U17, 1.0)\ - ACTION(U17_DQ8, "pin 31" ,U17, 1.0)\ - ACTION(U17_DQ9, "pin 32" ,U17, 1.0)\ - ACTION(U17_DQ10, "pin 33" ,U17, 1.0)\ - ACTION(U17_DQ11, "pin 34" ,U17, 1.0)\ - ACTION(U17_DQ12, "pin 36" ,U17, 1.0)\ - ACTION(U17_DQ13, "pin 37" ,U17, 1.0)\ - ACTION(U17_DQ14, "pin 38" ,U17, 1.0)\ - ACTION(U17_DQ15, "pin 39" ,U17, 1.0)\ + ACTION(U17_DQ1, "pin 2" ,U17, 1.0)\ + ACTION(U17_DQ2, "pin 3" ,U17, 1.0)\ + ACTION(U17_DQ3, "pin 4" ,U17, 1.0)\ + ACTION(U17_DQ4, "pin 5" ,U17, 1.0)\ + ACTION(U17_DQ5, "pin 7" ,U17, 1.0)\ + ACTION(U17_DQ6, "pin 8" ,U17, 1.0)\ + ACTION(U17_DQ7, "pin 9" ,U17, 1.0)\ + ACTION(U17_DQ8, "pin 10" ,U17, 1.0)\ + ACTION(U17_DQ9, "pin 31" ,U17, 1.0)\ + ACTION(U17_DQ10, "pin 32" ,U17, 1.0)\ + ACTION(U17_DQ11, "pin 33" ,U17, 1.0)\ + ACTION(U17_DQ12, "pin 34" ,U17, 1.0)\ + ACTION(U17_DQ13, "pin 36" ,U17, 1.0)\ + ACTION(U17_DQ14, "pin 37" ,U17, 1.0)\ + ACTION(U17_DQ15, "pin 38" ,U17, 1.0)\ + ACTION(U17_DQ16, "pin 39" ,U17, 1.0)\ ACTION(U17_A0, "pin 16" ,U17, 1.0)\ ACTION(U17_A1, "pin 17" ,U17, 1.0)\ ACTION(U17_A2, "pin 18" ,U17, 1.0)\ @@ -540,22 +540,22 @@ ACTION(U17_WE, "pin 13" ,U17, 1.0)\ ACTION(U18, "U18/RAM (front right)" ,VOODOO_BOARD, 1.0)\ /* /!\ Keep in-order, only appEND new fields */ \ - ACTION(U18_DQ0, "pin 2" ,U18, 1.0)\ - ACTION(U18_DQ1, "pin 3" ,U18, 1.0)\ - ACTION(U18_DQ2, "pin 4" ,U18, 1.0)\ - ACTION(U18_DQ3, "pin 5" ,U18, 1.0)\ - ACTION(U18_DQ4, "pin 7" ,U18, 1.0)\ - ACTION(U18_DQ5, "pin 8" ,U18, 1.0)\ - ACTION(U18_DQ6, "pin 9" ,U18, 1.0)\ - ACTION(U18_DQ7, "pin 10" ,U18, 1.0)\ - ACTION(U18_DQ8, "pin 31" ,U18, 1.0)\ - ACTION(U18_DQ9, "pin 32" ,U18, 1.0)\ - ACTION(U18_DQ10, "pin 33" ,U18, 1.0)\ - ACTION(U18_DQ11, "pin 34" ,U18, 1.0)\ - ACTION(U18_DQ12, "pin 36" ,U18, 1.0)\ - ACTION(U18_DQ13, "pin 37" ,U18, 1.0)\ - ACTION(U18_DQ14, "pin 38" ,U18, 1.0)\ - ACTION(U18_DQ15, "pin 39" ,U18, 1.0)\ + ACTION(U18_DQ1, "pin 2" ,U18, 1.0)\ + ACTION(U18_DQ2, "pin 3" ,U18, 1.0)\ + ACTION(U18_DQ3, "pin 4" ,U18, 1.0)\ + ACTION(U18_DQ4, "pin 5" ,U18, 1.0)\ + ACTION(U18_DQ5, "pin 7" ,U18, 1.0)\ + ACTION(U18_DQ6, "pin 8" ,U18, 1.0)\ + ACTION(U18_DQ7, "pin 9" ,U18, 1.0)\ + ACTION(U18_DQ8, "pin 10" ,U18, 1.0)\ + ACTION(U18_DQ9, "pin 31" ,U18, 1.0)\ + ACTION(U18_DQ10, "pin 32" ,U18, 1.0)\ + ACTION(U18_DQ11, "pin 33" ,U18, 1.0)\ + ACTION(U18_DQ12, "pin 34" ,U18, 1.0)\ + ACTION(U18_DQ13, "pin 36" ,U18, 1.0)\ + ACTION(U18_DQ14, "pin 37" ,U18, 1.0)\ + ACTION(U18_DQ15, "pin 38" ,U18, 1.0)\ + ACTION(U18_DQ16, "pin 39" ,U18, 1.0)\ ACTION(U18_A0, "pin 16" ,U18, 1.0)\ ACTION(U18_A1, "pin 17" ,U18, 1.0)\ ACTION(U18_A2, "pin 18" ,U18, 1.0)\ @@ -571,22 +571,22 @@ ACTION(U18_WE, "pin 13" ,U18, 1.0)\ ACTION(U23, "U23/RAM (back left)" ,VOODOO_BOARD, 1.0)\ /* /!\ Keep in-order, only appEND new fields */ \ - ACTION(U23_DQ0, "pin 2" ,U23, 1.0)\ - ACTION(U23_DQ1, "pin 3" ,U23, 1.0)\ - ACTION(U23_DQ2, "pin 4" ,U23, 1.0)\ - ACTION(U23_DQ3, "pin 5" ,U23, 1.0)\ - ACTION(U23_DQ4, "pin 7" ,U23, 1.0)\ - ACTION(U23_DQ5, "pin 8" ,U23, 1.0)\ - ACTION(U23_DQ6, "pin 9" ,U23, 1.0)\ - ACTION(U23_DQ7, "pin 10" ,U23, 1.0)\ - ACTION(U23_DQ8, "pin 31" ,U23, 1.0)\ - ACTION(U23_DQ9, "pin 32" ,U23, 1.0)\ - ACTION(U23_DQ10, "pin 33" ,U23, 1.0)\ - ACTION(U23_DQ11, "pin 34" ,U23, 1.0)\ - ACTION(U23_DQ12, "pin 36" ,U23, 1.0)\ - ACTION(U23_DQ13, "pin 37" ,U23, 1.0)\ - ACTION(U23_DQ14, "pin 38" ,U23, 1.0)\ - ACTION(U23_DQ15, "pin 39" ,U23, 1.0)\ + ACTION(U23_DQ1, "pin 2" ,U23, 1.0)\ + ACTION(U23_DQ2, "pin 3" ,U23, 1.0)\ + ACTION(U23_DQ3, "pin 4" ,U23, 1.0)\ + ACTION(U23_DQ4, "pin 5" ,U23, 1.0)\ + ACTION(U23_DQ5, "pin 7" ,U23, 1.0)\ + ACTION(U23_DQ6, "pin 8" ,U23, 1.0)\ + ACTION(U23_DQ7, "pin 9" ,U23, 1.0)\ + ACTION(U23_DQ8, "pin 10" ,U23, 1.0)\ + ACTION(U23_DQ9, "pin 31" ,U23, 1.0)\ + ACTION(U23_DQ10, "pin 32" ,U23, 1.0)\ + ACTION(U23_DQ11, "pin 33" ,U23, 1.0)\ + ACTION(U23_DQ12, "pin 34" ,U23, 1.0)\ + ACTION(U23_DQ13, "pin 36" ,U23, 1.0)\ + ACTION(U23_DQ14, "pin 37" ,U23, 1.0)\ + ACTION(U23_DQ15, "pin 38" ,U23, 1.0)\ + ACTION(U23_DQ16, "pin 39" ,U23, 1.0)\ ACTION(U23_A0, "pin 16" ,U23, 1.0)\ ACTION(U23_A1, "pin 17" ,U23, 1.0)\ ACTION(U23_A2, "pin 18" ,U23, 1.0)\ @@ -602,22 +602,22 @@ ACTION(U23_WE, "pin 13" ,U23, 1.0)\ ACTION(U24, "U24/RAM (back left)" ,VOODOO_BOARD, 1.0)\ /* /!\ Keep in-order, only appEND new fields */ \ - ACTION(U24_DQ0, "pin 2" ,U24, 1.0)\ - ACTION(U24_DQ1, "pin 3" ,U24, 1.0)\ - ACTION(U24_DQ2, "pin 4" ,U24, 1.0)\ - ACTION(U24_DQ3, "pin 5" ,U24, 1.0)\ - ACTION(U24_DQ4, "pin 7" ,U24, 1.0)\ - ACTION(U24_DQ5, "pin 8" ,U24, 1.0)\ - ACTION(U24_DQ6, "pin 9" ,U24, 1.0)\ - ACTION(U24_DQ7, "pin 10" ,U24, 1.0)\ - ACTION(U24_DQ8, "pin 31" ,U24, 1.0)\ - ACTION(U24_DQ9, "pin 32" ,U24, 1.0)\ - ACTION(U24_DQ10, "pin 33" ,U24, 1.0)\ - ACTION(U24_DQ11, "pin 34" ,U24, 1.0)\ - ACTION(U24_DQ12, "pin 36" ,U24, 1.0)\ - ACTION(U24_DQ13, "pin 37" ,U24, 1.0)\ - ACTION(U24_DQ14, "pin 38" ,U24, 1.0)\ - ACTION(U24_DQ15, "pin 39" ,U24, 1.0)\ + ACTION(U24_DQ1, "pin 2" ,U24, 1.0)\ + ACTION(U24_DQ2, "pin 3" ,U24, 1.0)\ + ACTION(U24_DQ3, "pin 4" ,U24, 1.0)\ + ACTION(U24_DQ4, "pin 5" ,U24, 1.0)\ + ACTION(U24_DQ5, "pin 7" ,U24, 1.0)\ + ACTION(U24_DQ6, "pin 8" ,U24, 1.0)\ + ACTION(U24_DQ7, "pin 9" ,U24, 1.0)\ + ACTION(U24_DQ8, "pin 10" ,U24, 1.0)\ + ACTION(U24_DQ9, "pin 31" ,U24, 1.0)\ + ACTION(U24_DQ10, "pin 32" ,U24, 1.0)\ + ACTION(U24_DQ11, "pin 33" ,U24, 1.0)\ + ACTION(U24_DQ12, "pin 34" ,U24, 1.0)\ + ACTION(U24_DQ13, "pin 36" ,U24, 1.0)\ + ACTION(U24_DQ14, "pin 37" ,U24, 1.0)\ + ACTION(U24_DQ15, "pin 38" ,U24, 1.0)\ + ACTION(U24_DQ16, "pin 39" ,U24, 1.0)\ ACTION(U24_A0, "pin 16" ,U24, 1.0)\ ACTION(U24_A1, "pin 17" ,U24, 1.0)\ ACTION(U24_A2, "pin 18" ,U24, 1.0)\ @@ -633,22 +633,22 @@ ACTION(U24_WE, "pin 13" ,U24, 1.0)\ ACTION(U25, "U25/RAM (back left)" ,VOODOO_BOARD, 1.0)\ /* /!\ Keep in-order, only appEND new fields */ \ - ACTION(U25_DQ0, "pin 2" ,U25, 1.0)\ - ACTION(U25_DQ1, "pin 3" ,U25, 1.0)\ - ACTION(U25_DQ2, "pin 4" ,U25, 1.0)\ - ACTION(U25_DQ3, "pin 5" ,U25, 1.0)\ - ACTION(U25_DQ4, "pin 7" ,U25, 1.0)\ - ACTION(U25_DQ5, "pin 8" ,U25, 1.0)\ - ACTION(U25_DQ6, "pin 9" ,U25, 1.0)\ - ACTION(U25_DQ7, "pin 10" ,U25, 1.0)\ - ACTION(U25_DQ8, "pin 31" ,U25, 1.0)\ - ACTION(U25_DQ9, "pin 32" ,U25, 1.0)\ - ACTION(U25_DQ10, "pin 33" ,U25, 1.0)\ - ACTION(U25_DQ11, "pin 34" ,U25, 1.0)\ - ACTION(U25_DQ12, "pin 36" ,U25, 1.0)\ - ACTION(U25_DQ13, "pin 37" ,U25, 1.0)\ - ACTION(U25_DQ14, "pin 38" ,U25, 1.0)\ - ACTION(U25_DQ15, "pin 39" ,U25, 1.0)\ + ACTION(U25_DQ1, "pin 2" ,U25, 1.0)\ + ACTION(U25_DQ2, "pin 3" ,U25, 1.0)\ + ACTION(U25_DQ3, "pin 4" ,U25, 1.0)\ + ACTION(U25_DQ4, "pin 5" ,U25, 1.0)\ + ACTION(U25_DQ5, "pin 7" ,U25, 1.0)\ + ACTION(U25_DQ6, "pin 8" ,U25, 1.0)\ + ACTION(U25_DQ7, "pin 9" ,U25, 1.0)\ + ACTION(U25_DQ8, "pin 10" ,U25, 1.0)\ + ACTION(U25_DQ9, "pin 31" ,U25, 1.0)\ + ACTION(U25_DQ10, "pin 32" ,U25, 1.0)\ + ACTION(U25_DQ11, "pin 33" ,U25, 1.0)\ + ACTION(U25_DQ12, "pin 34" ,U25, 1.0)\ + ACTION(U25_DQ13, "pin 36" ,U25, 1.0)\ + ACTION(U25_DQ14, "pin 37" ,U25, 1.0)\ + ACTION(U25_DQ15, "pin 38" ,U25, 1.0)\ + ACTION(U25_DQ16, "pin 39" ,U25, 1.0)\ ACTION(U25_A0, "pin 16" ,U25, 1.0)\ ACTION(U25_A1, "pin 17" ,U25, 1.0)\ ACTION(U25_A2, "pin 18" ,U25, 1.0)\ @@ -664,22 +664,22 @@ ACTION(U25_WE, "pin 13" ,U25, 1.0)\ ACTION(U26, "U26/RAM (back left)" ,VOODOO_BOARD, 1.0)\ /* /!\ Keep in-order, only appEND new fields */ \ - ACTION(U26_DQ0, "pin 2" ,U26, 1.0)\ - ACTION(U26_DQ1, "pin 3" ,U26, 1.0)\ - ACTION(U26_DQ2, "pin 4" ,U26, 1.0)\ - ACTION(U26_DQ3, "pin 5" ,U26, 1.0)\ - ACTION(U26_DQ4, "pin 7" ,U26, 1.0)\ - ACTION(U26_DQ5, "pin 8" ,U26, 1.0)\ - ACTION(U26_DQ6, "pin 9" ,U26, 1.0)\ - ACTION(U26_DQ7, "pin 10" ,U26, 1.0)\ - ACTION(U26_DQ8, "pin 31" ,U26, 1.0)\ - ACTION(U26_DQ9, "pin 32" ,U26, 1.0)\ - ACTION(U26_DQ10, "pin 33" ,U26, 1.0)\ - ACTION(U26_DQ11, "pin 34" ,U26, 1.0)\ - ACTION(U26_DQ12, "pin 36" ,U26, 1.0)\ - ACTION(U26_DQ13, "pin 37" ,U26, 1.0)\ - ACTION(U26_DQ14, "pin 38" ,U26, 1.0)\ - ACTION(U26_DQ15, "pin 39" ,U26, 1.0)\ + ACTION(U26_DQ1, "pin 2" ,U26, 1.0)\ + ACTION(U26_DQ2, "pin 3" ,U26, 1.0)\ + ACTION(U26_DQ3, "pin 4" ,U26, 1.0)\ + ACTION(U26_DQ4, "pin 5" ,U26, 1.0)\ + ACTION(U26_DQ5, "pin 7" ,U26, 1.0)\ + ACTION(U26_DQ6, "pin 8" ,U26, 1.0)\ + ACTION(U26_DQ7, "pin 9" ,U26, 1.0)\ + ACTION(U26_DQ8, "pin 10" ,U26, 1.0)\ + ACTION(U26_DQ9, "pin 31" ,U26, 1.0)\ + ACTION(U26_DQ10, "pin 32" ,U26, 1.0)\ + ACTION(U26_DQ11, "pin 33" ,U26, 1.0)\ + ACTION(U26_DQ12, "pin 34" ,U26, 1.0)\ + ACTION(U26_DQ13, "pin 36" ,U26, 1.0)\ + ACTION(U26_DQ14, "pin 37" ,U26, 1.0)\ + ACTION(U26_DQ15, "pin 38" ,U26, 1.0)\ + ACTION(U26_DQ16, "pin 39" ,U26, 1.0)\ ACTION(U26_A0, "pin 16" ,U26, 1.0)\ ACTION(U26_A1, "pin 17" ,U26, 1.0)\ ACTION(U26_A2, "pin 18" ,U26, 1.0)\ @@ -695,22 +695,22 @@ ACTION(U26_WE, "pin 13" ,U26, 1.0)\ ACTION(U27, "U27/RAM (back right)" ,VOODOO_BOARD, 1.0)\ /* /!\ Keep in-order, only appEND new fields */ \ - ACTION(U27_DQ0, "pin 2" ,U27, 1.0)\ - ACTION(U27_DQ1, "pin 3" ,U27, 1.0)\ - ACTION(U27_DQ2, "pin 4" ,U27, 1.0)\ - ACTION(U27_DQ3, "pin 5" ,U27, 1.0)\ - ACTION(U27_DQ4, "pin 7" ,U27, 1.0)\ - ACTION(U27_DQ5, "pin 8" ,U27, 1.0)\ - ACTION(U27_DQ6, "pin 9" ,U27, 1.0)\ - ACTION(U27_DQ7, "pin 10" ,U27, 1.0)\ - ACTION(U27_DQ8, "pin 31" ,U27, 1.0)\ - ACTION(U27_DQ9, "pin 32" ,U27, 1.0)\ - ACTION(U27_DQ10, "pin 33" ,U27, 1.0)\ - ACTION(U27_DQ11, "pin 34" ,U27, 1.0)\ - ACTION(U27_DQ12, "pin 36" ,U27, 1.0)\ - ACTION(U27_DQ13, "pin 37" ,U27, 1.0)\ - ACTION(U27_DQ14, "pin 38" ,U27, 1.0)\ - ACTION(U27_DQ15, "pin 39" ,U27, 1.0)\ + ACTION(U27_DQ1, "pin 2" ,U27, 1.0)\ + ACTION(U27_DQ2, "pin 3" ,U27, 1.0)\ + ACTION(U27_DQ3, "pin 4" ,U27, 1.0)\ + ACTION(U27_DQ4, "pin 5" ,U27, 1.0)\ + ACTION(U27_DQ5, "pin 7" ,U27, 1.0)\ + ACTION(U27_DQ6, "pin 8" ,U27, 1.0)\ + ACTION(U27_DQ7, "pin 9" ,U27, 1.0)\ + ACTION(U27_DQ8, "pin 10" ,U27, 1.0)\ + ACTION(U27_DQ9, "pin 31" ,U27, 1.0)\ + ACTION(U27_DQ10, "pin 32" ,U27, 1.0)\ + ACTION(U27_DQ11, "pin 33" ,U27, 1.0)\ + ACTION(U27_DQ12, "pin 34" ,U27, 1.0)\ + ACTION(U27_DQ13, "pin 36" ,U27, 1.0)\ + ACTION(U27_DQ14, "pin 37" ,U27, 1.0)\ + ACTION(U27_DQ15, "pin 38" ,U27, 1.0)\ + ACTION(U27_DQ16, "pin 39" ,U27, 1.0)\ ACTION(U27_A0, "pin 16" ,U27, 1.0)\ ACTION(U27_A1, "pin 17" ,U27, 1.0)\ ACTION(U27_A2, "pin 18" ,U27, 1.0)\ @@ -724,24 +724,24 @@ ACTION(U27_CASL, "pin 29" ,U27, 1.0)\ ACTION(U27_RAS, "pin 14" ,U27, 1.0)\ ACTION(U27_WE, "pin 13" ,U27, 1.0)\ - ACTION(U28, "U28/RAM (back left)" ,VOODOO_BOARD, 1.0)\ + ACTION(U28, "U28/RAM (back right)" ,VOODOO_BOARD, 1.0)\ /* /!\ Keep in-order, only appEND new fields */ \ - ACTION(U28_DQ0, "pin 2" ,U28, 1.0)\ - ACTION(U28_DQ1, "pin 3" ,U28, 1.0)\ - ACTION(U28_DQ2, "pin 4" ,U28, 1.0)\ - ACTION(U28_DQ3, "pin 5" ,U28, 1.0)\ - ACTION(U28_DQ4, "pin 7" ,U28, 1.0)\ - ACTION(U28_DQ5, "pin 8" ,U28, 1.0)\ - ACTION(U28_DQ6, "pin 9" ,U28, 1.0)\ - ACTION(U28_DQ7, "pin 10" ,U28, 1.0)\ - ACTION(U28_DQ8, "pin 31" ,U28, 1.0)\ - ACTION(U28_DQ9, "pin 32" ,U28, 1.0)\ - ACTION(U28_DQ10, "pin 33" ,U28, 1.0)\ - ACTION(U28_DQ11, "pin 34" ,U28, 1.0)\ - ACTION(U28_DQ12, "pin 36" ,U28, 1.0)\ - ACTION(U28_DQ13, "pin 37" ,U28, 1.0)\ - ACTION(U28_DQ14, "pin 38" ,U28, 1.0)\ - ACTION(U28_DQ15, "pin 39" ,U28, 1.0)\ + ACTION(U28_DQ1, "pin 2" ,U28, 1.0)\ + ACTION(U28_DQ2, "pin 3" ,U28, 1.0)\ + ACTION(U28_DQ3, "pin 4" ,U28, 1.0)\ + ACTION(U28_DQ4, "pin 5" ,U28, 1.0)\ + ACTION(U28_DQ5, "pin 7" ,U28, 1.0)\ + ACTION(U28_DQ6, "pin 8" ,U28, 1.0)\ + ACTION(U28_DQ7, "pin 9" ,U28, 1.0)\ + ACTION(U28_DQ8, "pin 10" ,U28, 1.0)\ + ACTION(U28_DQ9, "pin 31" ,U28, 1.0)\ + ACTION(U28_DQ10, "pin 32" ,U28, 1.0)\ + ACTION(U28_DQ11, "pin 33" ,U28, 1.0)\ + ACTION(U28_DQ12, "pin 34" ,U28, 1.0)\ + ACTION(U28_DQ13, "pin 36" ,U28, 1.0)\ + ACTION(U28_DQ14, "pin 37" ,U28, 1.0)\ + ACTION(U28_DQ15, "pin 38" ,U28, 1.0)\ + ACTION(U28_DQ16, "pin 39" ,U28, 1.0)\ ACTION(U28_A0, "pin 16" ,U28, 1.0)\ ACTION(U28_A1, "pin 17" ,U28, 1.0)\ ACTION(U28_A2, "pin 18" ,U28, 1.0)\ @@ -755,24 +755,24 @@ ACTION(U28_CASL, "pin 29" ,U28, 1.0)\ ACTION(U28_RAS, "pin 14" ,U28, 1.0)\ ACTION(U28_WE, "pin 13" ,U28, 1.0)\ - ACTION(U29, "U29/RAM (back left)" ,VOODOO_BOARD, 1.0)\ + ACTION(U29, "U29/RAM (back right)" ,VOODOO_BOARD, 1.0)\ /* /!\ Keep in-order, only appEND new fields */ \ - ACTION(U29_DQ0, "pin 2" ,U29, 1.0)\ - ACTION(U29_DQ1, "pin 3" ,U29, 1.0)\ - ACTION(U29_DQ2, "pin 4" ,U29, 1.0)\ - ACTION(U29_DQ3, "pin 5" ,U29, 1.0)\ - ACTION(U29_DQ4, "pin 7" ,U29, 1.0)\ - ACTION(U29_DQ5, "pin 8" ,U29, 1.0)\ - ACTION(U29_DQ6, "pin 9" ,U29, 1.0)\ - ACTION(U29_DQ7, "pin 10" ,U29, 1.0)\ - ACTION(U29_DQ8, "pin 31" ,U29, 1.0)\ - ACTION(U29_DQ9, "pin 32" ,U29, 1.0)\ - ACTION(U29_DQ10, "pin 33" ,U29, 1.0)\ - ACTION(U29_DQ11, "pin 34" ,U29, 1.0)\ - ACTION(U29_DQ12, "pin 36" ,U29, 1.0)\ - ACTION(U29_DQ13, "pin 37" ,U29, 1.0)\ - ACTION(U29_DQ14, "pin 38" ,U29, 1.0)\ - ACTION(U29_DQ15, "pin 39" ,U29, 1.0)\ + ACTION(U29_DQ1, "pin 2" ,U29, 1.0)\ + ACTION(U29_DQ2, "pin 3" ,U29, 1.0)\ + ACTION(U29_DQ3, "pin 4" ,U29, 1.0)\ + ACTION(U29_DQ4, "pin 5" ,U29, 1.0)\ + ACTION(U29_DQ5, "pin 7" ,U29, 1.0)\ + ACTION(U29_DQ6, "pin 8" ,U29, 1.0)\ + ACTION(U29_DQ7, "pin 9" ,U29, 1.0)\ + ACTION(U29_DQ8, "pin 10" ,U29, 1.0)\ + ACTION(U29_DQ9, "pin 31" ,U29, 1.0)\ + ACTION(U29_DQ10, "pin 32" ,U29, 1.0)\ + ACTION(U29_DQ11, "pin 33" ,U29, 1.0)\ + ACTION(U29_DQ12, "pin 34" ,U29, 1.0)\ + ACTION(U29_DQ13, "pin 36" ,U29, 1.0)\ + ACTION(U29_DQ14, "pin 37" ,U29, 1.0)\ + ACTION(U29_DQ15, "pin 38" ,U29, 1.0)\ + ACTION(U29_DQ16, "pin 39" ,U29, 1.0)\ ACTION(U29_A0, "pin 16" ,U29, 1.0)\ ACTION(U29_A1, "pin 17" ,U29, 1.0)\ ACTION(U29_A2, "pin 18" ,U29, 1.0)\ @@ -786,24 +786,24 @@ ACTION(U29_CASL, "pin 29" ,U29, 1.0)\ ACTION(U29_RAS, "pin 14" ,U29, 1.0)\ ACTION(U29_WE, "pin 13" ,U29, 1.0)\ - ACTION(U30, "U30/RAM (back left)" ,VOODOO_BOARD, 1.0)\ + ACTION(U30, "U30/RAM (back right)" ,VOODOO_BOARD, 1.0)\ /* /!\ Keep in-order, only appEND new fields */ \ - ACTION(U30_DQ0, "pin 2" ,U30, 1.0)\ - ACTION(U30_DQ1, "pin 3" ,U30, 1.0)\ - ACTION(U30_DQ2, "pin 4" ,U30, 1.0)\ - ACTION(U30_DQ3, "pin 5" ,U30, 1.0)\ - ACTION(U30_DQ4, "pin 7" ,U30, 1.0)\ - ACTION(U30_DQ5, "pin 8" ,U30, 1.0)\ - ACTION(U30_DQ6, "pin 9" ,U30, 1.0)\ - ACTION(U30_DQ7, "pin 10" ,U30, 1.0)\ - ACTION(U30_DQ8, "pin 31" ,U30, 1.0)\ - ACTION(U30_DQ9, "pin 32" ,U30, 1.0)\ - ACTION(U30_DQ10, "pin 33" ,U30, 1.0)\ - ACTION(U30_DQ11, "pin 34" ,U30, 1.0)\ - ACTION(U30_DQ12, "pin 36" ,U30, 1.0)\ - ACTION(U30_DQ13, "pin 37" ,U30, 1.0)\ - ACTION(U30_DQ14, "pin 38" ,U30, 1.0)\ - ACTION(U30_DQ15, "pin 39" ,U30, 1.0)\ + ACTION(U30_DQ1, "pin 2" ,U30, 1.0)\ + ACTION(U30_DQ2, "pin 3" ,U30, 1.0)\ + ACTION(U30_DQ3, "pin 4" ,U30, 1.0)\ + ACTION(U30_DQ4, "pin 5" ,U30, 1.0)\ + ACTION(U30_DQ5, "pin 7" ,U30, 1.0)\ + ACTION(U30_DQ6, "pin 8" ,U30, 1.0)\ + ACTION(U30_DQ7, "pin 9" ,U30, 1.0)\ + ACTION(U30_DQ8, "pin 10" ,U30, 1.0)\ + ACTION(U30_DQ9, "pin 31" ,U30, 1.0)\ + ACTION(U30_DQ10, "pin 32" ,U30, 1.0)\ + ACTION(U30_DQ11, "pin 33" ,U30, 1.0)\ + ACTION(U30_DQ12, "pin 34" ,U30, 1.0)\ + ACTION(U30_DQ13, "pin 36" ,U30, 1.0)\ + ACTION(U30_DQ14, "pin 37" ,U30, 1.0)\ + ACTION(U30_DQ15, "pin 38" ,U30, 1.0)\ + ACTION(U30_DQ16, "pin 39" ,U30, 1.0)\ ACTION(U30_A0, "pin 16" ,U30, 1.0)\ ACTION(U30_A1, "pin 17" ,U30, 1.0)\ ACTION(U30_A2, "pin 18" ,U30, 1.0)\ @@ -982,92 +982,97 @@ ACTION(R117, "R117" ,VOODOO_BOARD, 1.0)\ #define GEN_FAULT_SOURCES_ENUMS(_NAME_,_LOC_,_PARRENT_,_WEIGHT_) _NAME_, -#define GEN_FAULT_SOURCES_ARRAY(_NAME_,_LOC_,_PARRENT_,_WEIGHT_) { .eThisFaultSource=_NAME_ ,.szName=#_NAME_,.szLoc=_LOC_,.eParrentFaultSource=_PARRENT_, .dScore=0.0,.dWeight=_WEIGHT_}, + +#define GEN_FAULT_SOURCES_ARRAY(_NAME_,_LOC_,_PARRENT_,_WEIGHT_) \ + { .eThisFaultSource=_NAME_ , \ + .szName=#_NAME_, \ + .szLoc=_LOC_, \ + .eParrentFaultSource=_PARRENT_, \ + .dScore=0.0, \ + .dWeight=_WEIGHT_ \ + }, typedef enum _def_eFaultSource{ VOODOO_BOARD = 0, FAULT_SOURCES(GEN_FAULT_SOURCES_ENUMS) _INVALID_FAULT_SOURCE_ }def_eFaultSource; + #define NB_FAULT_SOURCE _INVALID_FAULT_SOURCE_ typedef struct _def_sFaultSourceScoreRec{ def_eFaultSource eThisFaultSource; - char *szName; - char *szLoc; def_eFaultSource eParrentFaultSource; double dScore; double dWeight; + const char* szName; + const char* szLoc; }def_sFaultSourceScoreRec; -extern def_sFaultSourceScoreRec ar_dFaultScores[NB_FAULT_SOURCE]; -extern def_sFaultSourceScoreRec ar_dFaultScores_sorted[NB_FAULT_SOURCE]; +void +FaultSource_reset(def_sFaultSourceScoreRec* const pCtx); void -FaultSource_Reset(); +FaultSource_addScore( def_sFaultSourceScoreRec* const pCtx, + def_eFaultSource eFaultSource, + double dScore); + +void +FaultSource_getSorted( def_sFaultSourceScoreRec* const pDst, + const def_sFaultSourceScoreRec* const pCtx); + +void +FaultSource_getLoc( const def_sFaultSourceScoreRec* const pCtx, + def_eFaultSource eFaultSource, + char* const loc); +void +FaultSource_display(const def_sFaultSourceScoreRec* const pCtx); + + +void +FaultSource_divideAll( def_sFaultSourceScoreRec* const pCtx, + const double dDivider); void -FaultSource_AddScore(def_eFaultSource eFaultSource, double dScore); - -void -FaultSource_Sort(); - -void -FaultSource_GetLoc(def_eFaultSource eFaultSource, char* loc); - -void -FaultSource_Display(); - - -static inline void -WordBitFaultSet( const uint32_t ErrorMark, +WordBitFaultSet( def_sFaultSourceScoreRec* const pCtx, + const uint32_t ErrorMark, const double dScore, const def_eFaultSource eFaultSourceL, - const def_eFaultSource eFaultSourceH) -{ - for(unsigned char bitPos = 0; bitPos <= 31 ; bitPos++) - if(ErrorMark & (1u << bitPos)) - { - if(bitPos < 16) - FaultSource_AddScore(eFaultSourceL + bitPos, dScore); - else - FaultSource_AddScore(eFaultSourceH + bitPos - 16, dScore); - } - -} + const def_eFaultSource eFaultSourceH); -static inline void -QuartetBitFaultSet( const uint8_t ErrorMark, +void +QuartetBitFaultSet( def_sFaultSourceScoreRec* const pCtx, + const uint8_t ErrorMark, const double dScore, - const def_eFaultSource eFaultSource) -{ - for(uint8_t bitPos = 0; bitPos <= 4 ; bitPos++) - if(ErrorMark & (1u << bitPos)) - FaultSource_AddScore(eFaultSource + bitPos, dScore); -} + const def_eFaultSource eFaultSource); + static inline void -MemChipDQFaultSet( const uint32_t ErrorMark, +MemChipDQFaultSet( def_sFaultSourceScoreRec* const pCtx, + const uint32_t ErrorMark, const double dScore, const def_eFaultSource eFaultSourceL, const def_eFaultSource eFaultSourceH) { - WordBitFaultSet(ErrorMark, dScore, eFaultSourceL + 1, eFaultSourceH + 1); + + WordBitFaultSet(pCtx,ErrorMark, dScore, eFaultSourceL + 1, eFaultSourceH + 1); } static inline void -TMUTexDataFaultSet( const uint32_t ErrorMark_w0w1, +TMUTexDataFaultSet( def_sFaultSourceScoreRec* const pCtx, + const uint32_t ErrorMark_w0w1, const uint32_t ErrorMark_w2w3, const double dScore, const def_eFaultSource eTMUFaultSource) { - WordBitFaultSet(ErrorMark_w0w1, dScore, eTMUFaultSource + 0 + 1, eTMUFaultSource + 16 + 1); - WordBitFaultSet(ErrorMark_w2w3, dScore, eTMUFaultSource + 32 + 1, eTMUFaultSource + 48 + 1); + WordBitFaultSet(pCtx,ErrorMark_w0w1, dScore, eTMUFaultSource + 0 + 1, eTMUFaultSource + 16 + 1); + WordBitFaultSet(pCtx,ErrorMark_w2w3, dScore, eTMUFaultSource + 32 + 1, eTMUFaultSource + 48 + 1); } static inline void -TMUTexDataCtrlFaultSet( const uint32_t ErrorMark, +TMUTexDataCtrlFaultSet( def_sFaultSourceScoreRec* const pCtx, + const uint32_t ErrorMark, double dScore, const def_eFaultSource eFaultSourceCASL, const def_eFaultSource eFaultSourceCASH, @@ -1077,17 +1082,17 @@ TMUTexDataCtrlFaultSet( const uint32_t ErrorMark, { if( count_bit32(ErrorMark) > 16 ) { - if(ErrorMark & 0x000000FF) - FaultSource_AddScore(eFaultSourceCASL,dScore); - if(ErrorMark & 0x0000FF00) - FaultSource_AddScore(eFaultSourceCASH,dScore); - if(ErrorMark & 0x00FF0000) - FaultSource_AddScore(eFaultSourceCASL,dScore); - if(ErrorMark & 0xFF000000) - FaultSource_AddScore(eFaultSourceCASH,dScore); + if(ErrorMark & 0x000000FFu) + FaultSource_addScore(pCtx,eFaultSourceCASL,dScore); + if(ErrorMark & 0x0000FF00u) + FaultSource_addScore(pCtx,eFaultSourceCASH,dScore); + if(ErrorMark & 0x00FF0000u) + FaultSource_addScore(pCtx,eFaultSourceCASL,dScore); + if(ErrorMark & 0xFF000000u) + FaultSource_addScore(pCtx,eFaultSourceCASH,dScore); - FaultSource_AddScore(eFaultSourceRAS,dScore / 2); - FaultSource_AddScore(eFaultSourceWE,dScore / 2); + FaultSource_addScore(pCtx,eFaultSourceRAS,dScore / 2); + FaultSource_addScore(pCtx,eFaultSourceWE,dScore / 2); } } diff --git a/Test_Address.c b/Test_Address.c index f6926ed..f5497ca 100644 --- a/Test_Address.c +++ b/Test_Address.c @@ -29,7 +29,7 @@ typedef struct _def_sTestAddress { FxU32 u32Addr; - unsigned char nBank; // RAS0 and RAS1 (Front/Back) + unsigned char nBank; /* RAS0 and RAS1 (Front/Back) */ unsigned char nColBit; unsigned char nRowBit; }def_sTestAddress; @@ -39,32 +39,24 @@ RenderTestAddress( sst1DeviceInfoStruct* devInfo, FxU32* sst, SstRegs *sstregs, const char ucNumTMU, - const unsigned char RamSizeMB) + const unsigned char RamSizeMB, + def_sFaultSourceScoreRec* const pFaultSrcCtx) { - devInfo->tmuInit0[(int)ucNumTMU] = SST_TREXINIT0_DEFAULT ; - + unsigned long NbErr=0; + sst1InitIdle(sst); + unsigned long _trexInit0 = IGET(SST_TREX(sstregs,ucNumTMU)->trexInit0); + devInfo->tmuInit0[(int)ucNumTMU] = SST_TREXINIT0_DEFAULT ; ISET(SST_TREX(sstregs,ucNumTMU)->trexInit0, devInfo->tmuInit0[(int)ucNumTMU]); sst1InitIdle(sst); - /* - sst1InitIdle(sst); - ISET(SST_TREX(sstregs,ucNumTMU)->trexInit0, 0x5000 | (devInfo->tmuInit0[(int)ucNumTMU] & ~0x7000)); - sst1InitIdle(sst); - */ - // set downstream TMUs to passthrough + /* set downstream TMUs to passthrough */ for (int i=0; itextureMode, SST_TC_PASS | SST_TCA_PASS); - unsigned long NbErr=0; - //long TestVal1; - //long TestVal2; - //long TestValBlank1; - //long TestValBlank2; - const def_sTestAddress add_list[] = { - // Bank0 + /* Bank0 */ {0x000000,0,0,0}, /* not addressable because its a 64bit bus {0x000001,0,0,0,0} @@ -72,15 +64,16 @@ RenderTestAddress( sst1DeviceInfoStruct* devInfo, {0x000004,0,0,0,0} */ {0x000008,0,1,0}, - {0x000010,0,2,0}, {0x000018,0,2,0}, // target + adjacent pin + /* {target pin}, { + previous adjacent pin} */ + {0x000010,0,2,0}, {0x000018,0,2,0}, {0x000020,0,3,0}, {0x000030,0,3,0}, {0x000040,0,4,0}, {0x000060,0,4,0}, {0x000080,0,5,0}, {0x0000C0,0,5,0}, {0x000100,0,6,0}, {0x000180,0,6,0}, {0x000200,0,7,0}, {0x000300,0,7,0}, {0x000400,0,8,0}, {0x000600,0,8,0}, - {0x000800,0,9,0}, {0x000C00,0,9,0}, // => Ignoring adjacent for now - {0x001000,0,0,1}, {0x001800,0,0,1}, // It seems useless + {0x000800,0,9,0}, {0x000C00,0,9,0}, + {0x001000,0,0,1}, {0x001800,0,0,1}, {0x002000,0,0,2}, {0x003000,0,0,2}, {0x004000,0,0,3}, {0x006000,0,0,3}, {0x008000,0,0,4}, {0x00C000,0,0,4}, @@ -89,15 +82,16 @@ RenderTestAddress( sst1DeviceInfoStruct* devInfo, {0x040000,0,0,7}, {0x060000,0,0,7}, {0x080000,0,0,8}, {0x0C0000,0,0,8}, {0x100000,0,0,9}, {0x180000,0,0,9}, - - // Bank1 + + /* Bank1 */ {0x200000,1,0,0}, /* not addressable because its a 64bit bus - {0x200001,0,0,0,0} - {0x200002,0,0,0,0} - {0x200004,0,0,0,0} + {0x200001,1,0,0,0} + {0x200002,1,0,0,0} + {0x200004,1,0,0,0} */ {0x200008,1,1,0}, + /* {target pin}, { + previous adjacent pin} */ {0x200010,1,2,0}, {0x200018,1,2,0}, {0x200020,1,3,0}, {0x200030,1,3,0}, {0x200040,1,4,0}, {0x200060,1,4,0}, @@ -118,47 +112,71 @@ RenderTestAddress( sst1DeviceInfoStruct* devInfo, }; for(unsigned char idx=0; - idx < sizeof(add_list)/sizeof(def_sTestAddress); + idx < (sizeof(add_list)/sizeof(def_sTestAddress)); idx++) { + /* Skipping unsupported addresses */ if(RamSizeMB<4 && add_list[idx].u32Addr >= 0x300000) continue; if(RamSizeMB<3 && add_list[idx].u32Addr >= 0x200000) continue; if(RamSizeMB<2 && add_list[idx].u32Addr >= 0x100000) continue; - const uint32_t TestVal1 = get_notnull_random_balanced_mByte(); - const uint32_t TestVal2 = get_notnull_random_balanced_mByte(); + const uint32_t TestVal1 = get_notnull_random_balanced_mByte(); + const uint32_t TestVal2 = get_notnull_random_balanced_mByte(); const uint32_t TestValBlank1 = get_notnull_random_balanced_mByte(); const uint32_t TestValBlank2 = get_notnull_random_balanced_mByte(); - // Clearing memory targets + /* Clearing memory targets */ for(unsigned char idxclr=0; idxclr < sizeof(add_list)/sizeof(def_sTestAddress); idxclr++) { + /* Skipping unsupported addresses */ if(RamSizeMB<4 && add_list[idxclr].u32Addr >= 0x300000) continue; if(RamSizeMB<3 && add_list[idxclr].u32Addr >= 0x200000) continue; if(RamSizeMB<2 && add_list[idxclr].u32Addr >= 0x100000) continue; - /* set to mem addr */ + /* set base mem @ */ ISET(sstregs->texBaseAddr, (add_list[idxclr].u32Addr>>3)); - /* First line, using bits 00..31*/ - volatile const FxU32 *texAddrBlank = (ucNumTMU<<(21-2)) + (((FxU32)0/*LOD0*/)<<(17-2)) + (FxU32 *)SST_TEX_ADDRESS(sst); - ISET(texAddrBlank[0], TestValBlank1); /* write a value */ - /* Second line, to use bits 32..63*/ - volatile const FxU32 *texAddrBlank2 = (ucNumTMU<<(21-2)) + (((FxU32)0/*LOD0*/)<<(17-2)) + (1<<(9-2))+ (FxU32 *)SST_TEX_ADDRESS(sst); - ISET(texAddrBlank2[0], TestValBlank2); /* write a value */ + + /* set @ to first line, using bits 00..31*/ + volatile const FxU32 *texAddrBlank + = (ucNumTMU<<(21-2)) + + (((FxU32)0)<<(17-2)) /*LOD0*/ + + (FxU32 *)SST_TEX_ADDRESS(sst); + /* write the value */ + ISET(texAddrBlank[0], TestValBlank1); + + /* set @ to second line, to use bits 32..63*/ + volatile const FxU32 *texAddrBlank2 + = (ucNumTMU<<(21-2)) + + (((FxU32)0)<<(17-2)) /*LOD0*/ + + (1<<(9-2)) + + (FxU32 *)SST_TEX_ADDRESS(sst); + /* write the value */ + ISET(texAddrBlank2[0], TestValBlank2); } - /* set to mem addr */ + /* set base mem @ */ ISET(sstregs->texBaseAddr, (add_list[idx].u32Addr>>3)); - /* First line, using bits 00..31*/ - volatile const FxU32 *texAddr = (ucNumTMU<<(21-2)) + (((FxU32)0/*LOD0*/)<<(17-2)) + (FxU32 *)SST_TEX_ADDRESS(sst); - ISET(texAddr[0], TestVal1); /* write a value */ - /* Second line, to use bits 32..63*/ - volatile const FxU32 *texAddr2 = (ucNumTMU<<(21-2)) + (((FxU32)0/*LOD0*/)<<(17-2)) + (1<<(9-2))+ (FxU32 *)SST_TEX_ADDRESS(sst); - ISET(texAddr2[0], TestVal2); /* write a value */ + + /* set @ to first line, using bits 00..31*/ + volatile const FxU32 *texAddr + = (ucNumTMU<<(21-2)) + + (((FxU32)0)<<(17-2)) /*LOD0*/ + + (FxU32 *)SST_TEX_ADDRESS(sst); + /* write the value */ + ISET(texAddr[0], TestVal1); + + /* set @ to second line, to use bits 32..63*/ + volatile const FxU32 *texAddr2 + = (ucNumTMU<<(21-2)) + + (((FxU32)0)<<(17-2)) /*LOD0*/ + + (1<<(9-2)) + + (FxU32 *)SST_TEX_ADDRESS(sst); + /* write the value */ + ISET(texAddr2[0], TestVal2); - // Checking expected memory map is there + /* Checking expected memory map is there */ for(unsigned char idxdraw=0; idxdraw < sizeof(add_list) / sizeof(def_sTestAddress); idxdraw++) @@ -167,19 +185,22 @@ RenderTestAddress( sst1DeviceInfoStruct* devInfo, if(RamSizeMB<3 && add_list[idxdraw].u32Addr >= 0x200000) continue; if(RamSizeMB<2 && add_list[idxdraw].u32Addr >= 0x100000) continue; - // testing copy beyond tested bit is useless & can raise - // false positive + /* testing copy beyond tested bit is useless & can raise + false positive */ if(idxdraw > idx) break; - /* set to mem addr */ //TODO: 4x2 + clearScreen(sstregs,0x00000000,2,2); + + /* set to mem addr */ ISET(sstregs->texBaseAddr, (add_list[idxdraw].u32Addr >> 3)); - /* draw a 4x4 triangle */ - drawSquare(sstregs, 0, 0, 4); + + /* draw a 2x2 square */ + drawSquare(sstregs, 0, 0, 2); sst1InitIdle(sst); - - // First line, to use bits 00..31 + + /* first line, to use bits 00..31 */ const uint32_t L1 = IGET(sst[(SST_LFB_ADDR>>2) + 0]); - // Second line,to use bits 32..63 + /* second line, to use bits 32..63 */ const uint32_t L2 = IGET(sst[(SST_LFB_ADDR>>2) + (2048>>2) + 0]); const uint32_t ErrorMark_L1 = (idxdraw == idx) ? (L1 ^ TestVal1) : (L1 ^ TestValBlank1); @@ -214,7 +235,7 @@ RenderTestAddress( sst1DeviceInfoStruct* devInfo, const def_eFaultSource MEMChip_1_A0 = (add_list[idxdraw].nBank == 0) ? _MEMChip_B0_1_A0 : _MEMChip_B1_1_A0; const def_eFaultSource MEMChip_2_A0 = (add_list[idxdraw].nBank == 0) ? _MEMChip_B0_2_A0 : _MEMChip_B1_2_A0; const def_eFaultSource MEMChip_3_A0 = (add_list[idxdraw].nBank == 0) ? _MEMChip_B0_3_A0 : _MEMChip_B1_3_A0; - + const def_eFaultSource _MEMChip_B0_0_CASL = (ucNumTMU == 0) ? U14_CASL : U13_CASL; const def_eFaultSource _MEMChip_B0_1_CASL = (ucNumTMU == 0) ? U12_CASL : U11_CASL; const def_eFaultSource _MEMChip_B0_2_CASL = (ucNumTMU == 0) ? U18_CASL : U16_CASL; @@ -240,7 +261,7 @@ RenderTestAddress( sst1DeviceInfoStruct* devInfo, const def_eFaultSource MEMChip_1_CASH = (add_list[idxdraw].nBank == 0) ? _MEMChip_B0_1_CASH : _MEMChip_B1_1_CASH; const def_eFaultSource MEMChip_2_CASH = (add_list[idxdraw].nBank == 0) ? _MEMChip_B0_2_CASH : _MEMChip_B1_2_CASH; const def_eFaultSource MEMChip_3_CASH = (add_list[idxdraw].nBank == 0) ? _MEMChip_B0_3_CASH : _MEMChip_B1_3_CASH; - + const def_eFaultSource _MEMChip_B0_0_RAS = (ucNumTMU == 0) ? U14_RAS : U13_RAS; const def_eFaultSource _MEMChip_B0_1_RAS = (ucNumTMU == 0) ? U12_RAS : U11_RAS; const def_eFaultSource _MEMChip_B0_2_RAS = (ucNumTMU == 0) ? U18_RAS : U16_RAS; @@ -253,7 +274,7 @@ RenderTestAddress( sst1DeviceInfoStruct* devInfo, const def_eFaultSource MEMChip_1_RAS = (add_list[idxdraw].nBank == 0) ? _MEMChip_B0_1_RAS : _MEMChip_B1_1_RAS; const def_eFaultSource MEMChip_2_RAS = (add_list[idxdraw].nBank == 0) ? _MEMChip_B0_2_RAS : _MEMChip_B1_2_RAS; const def_eFaultSource MEMChip_3_RAS = (add_list[idxdraw].nBank == 0) ? _MEMChip_B0_3_RAS : _MEMChip_B1_3_RAS; - + const def_eFaultSource _MEMChip_B0_0_WE = (ucNumTMU == 0) ? U14_WE : U13_WE; const def_eFaultSource _MEMChip_B0_1_WE = (ucNumTMU == 0) ? U12_WE : U11_WE; const def_eFaultSource _MEMChip_B0_2_WE = (ucNumTMU == 0) ? U18_WE : U16_WE; @@ -266,7 +287,7 @@ RenderTestAddress( sst1DeviceInfoStruct* devInfo, const def_eFaultSource MEMChip_1_WE = (add_list[idxdraw].nBank == 0) ? _MEMChip_B0_1_WE : _MEMChip_B1_1_WE; const def_eFaultSource MEMChip_2_WE = (add_list[idxdraw].nBank == 0) ? _MEMChip_B0_2_WE : _MEMChip_B1_2_WE; const def_eFaultSource MEMChip_3_WE = (add_list[idxdraw].nBank == 0) ? _MEMChip_B0_3_WE : _MEMChip_B1_3_WE; - + const def_eFaultSource _RES_RAS0 = (ucNumTMU == 0) ? R118 : R115; const def_eFaultSource _RES_RAS1 = (ucNumTMU == 0) ? R149 : R150; const def_eFaultSource RES_RAS = (add_list[idxdraw].nBank == 0) ? _RES_RAS0 : _RES_RAS1; @@ -286,248 +307,257 @@ RenderTestAddress( sst1DeviceInfoStruct* devInfo, const def_eFaultSource RES_TEXADDR_3_H = (ucNumTMU == 0) ? RA21 : RA19; const def_eFaultSource RES_TEXADDR_3_8 = (ucNumTMU == 0) ? R98 : R97; - + if(count_bit32(ErrorMark_L1 & 0x0000FFFF) > 2) { NbErr++; /* printf("1: %08x %d\n", ErrorMark_L1 & 0x0000FFFF, - count_bit32(ErrorMark_L1 & 0x0000FFFF));*/ + count_bit32(ErrorMark_L1 & 0x0000FFFF)); + */ if((idxdraw == idx) && count_bit32(ErrorMark_L1 & 0x0000FFFF) > 6) { - FaultSource_AddScore( TMUTexWE, 1.0/4); - FaultSource_AddScore( RES_WE, 1.0/4); - FaultSource_AddScore( MEMChip_0_WE, 1.0/1); + FaultSource_addScore(pFaultSrcCtx, TMUTexWE, 1.0/4); + FaultSource_addScore(pFaultSrcCtx, RES_WE, 1.0/4); + FaultSource_addScore(pFaultSrcCtx, MEMChip_0_WE, 1.0/1); } if(count_bit32(ErrorMarkBlank_L1 & 0x0000FFFF) < 3) { if(add_list[idx].nColBit!=0) { - FaultSource_AddScore( MEMChip_0_A0 + add_list[idx].nColBit, 1.0/1); - FaultSource_AddScore( TMUTexADDR_0_0 + add_list[idx].nColBit, 1.0/1); + FaultSource_addScore(pFaultSrcCtx, MEMChip_0_A0 + add_list[idx].nColBit, 1.0/1); + FaultSource_addScore(pFaultSrcCtx, TMUTexADDR_0_0 + add_list[idx].nColBit, 1.0/1); if(add_list[idx].nColBit < 4) - FaultSource_AddScore( RES_TEXADDR_0_L + add_list[idx].nColBit + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_0_L + add_list[idx].nColBit + 1, 1.0/2); else if(add_list[idx].nColBit < 8) - FaultSource_AddScore( RES_TEXADDR_0_H + add_list[idx].nColBit + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_0_H + add_list[idx].nColBit + 1, 1.0/2); else - FaultSource_AddScore( RES_TEXADDR_0_8 + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_0_8 + 1, 1.0/2); } if(add_list[idx].nRowBit!=0) { - FaultSource_AddScore( MEMChip_0_A0 + add_list[idx].nRowBit, 1.0/1); - FaultSource_AddScore( TMUTexADDR_0_0 + add_list[idx].nRowBit, 1.0/1); + FaultSource_addScore(pFaultSrcCtx, MEMChip_0_A0 + add_list[idx].nRowBit, 1.0/1); + FaultSource_addScore(pFaultSrcCtx, TMUTexADDR_0_0 + add_list[idx].nRowBit, 1.0/1); if(add_list[idx].nRowBit < 4) - FaultSource_AddScore( RES_TEXADDR_0_L + add_list[idx].nRowBit + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_0_L + add_list[idx].nRowBit + 1, 1.0/2); else if(add_list[idx].nRowBit < 8) - FaultSource_AddScore( RES_TEXADDR_0_H + add_list[idx].nRowBit + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_0_H + add_list[idx].nRowBit + 1, 1.0/2); else - FaultSource_AddScore( RES_TEXADDR_0_8 + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_0_8 + 1, 1.0/2); } } else { - FaultSource_AddScore( TMUTexRASCurrent, 1.0/8); - FaultSource_AddScore( RES_RAS, 1.0/8); - FaultSource_AddScore( MEMChip_0_RAS, 1.0/4); + FaultSource_addScore(pFaultSrcCtx, TMUTexRASCurrent, 1.0/8); + FaultSource_addScore(pFaultSrcCtx, RES_RAS, 1.0/8); + FaultSource_addScore(pFaultSrcCtx, MEMChip_0_RAS, 1.0/4); if(ErrorMark_L1 & 0x000000FF) { - FaultSource_AddScore( TMUTexCAS0, 1.0/16); - FaultSource_AddScore( RES_CAS+1, 1.0/16); - FaultSource_AddScore( MEMChip_0_CASL, 1.0/8); + FaultSource_addScore(pFaultSrcCtx, TMUTexCAS0, 1.0/16); + FaultSource_addScore(pFaultSrcCtx, RES_CAS+1, 1.0/16); + FaultSource_addScore(pFaultSrcCtx, MEMChip_0_CASL, 1.0/8); } if(ErrorMark_L1 & 0x0000FF00) { - FaultSource_AddScore( TMUTexCAS1, 1.0/16);; - FaultSource_AddScore( RES_CAS+2, 1.0/16); - FaultSource_AddScore( MEMChip_0_CASH, 1.0/8); + FaultSource_addScore(pFaultSrcCtx, TMUTexCAS1, 1.0/16);; + FaultSource_addScore(pFaultSrcCtx, RES_CAS+2, 1.0/16); + FaultSource_addScore(pFaultSrcCtx, MEMChip_0_CASH, 1.0/8); } } } - // Error only if more than 6/16 bits are in error + /* considering error only if more than 6 over 16 bits + * are wrong, because we are only testing addresses + * lines here */ if(count_bit32(ErrorMark_L1 & 0xFFFF0000) > 2) { - NbErr++;/* + NbErr++; + /* printf("2: %08x %d\n", ErrorMark_L1 & 0xFFFF0000, - count_bit32(ErrorMark_L1 & 0xFFFF0000));*/ + count_bit32(ErrorMark_L1 & 0xFFFF0000)); + */ if((idxdraw == idx) && count_bit32(ErrorMark_L1 & 0xFFFF0000) > 6) { - FaultSource_AddScore( TMUTexWE, 1.0/4); - FaultSource_AddScore( RES_WE, 1.0/4); - FaultSource_AddScore( MEMChip_1_WE, 1.0/1); + FaultSource_addScore(pFaultSrcCtx, TMUTexWE, 1.0/4); + FaultSource_addScore(pFaultSrcCtx, RES_WE, 1.0/4); + FaultSource_addScore(pFaultSrcCtx, MEMChip_1_WE, 1.0/1); } if(count_bit32(ErrorMarkBlank_L1 & 0xFFFF0000) < 3) { if(add_list[idx].nColBit!=0) { - FaultSource_AddScore( MEMChip_1_A0 + add_list[idx].nColBit, 1.0/1); - FaultSource_AddScore( TMUTexADDR_1_0 + add_list[idx].nColBit, 1.0/1); + FaultSource_addScore(pFaultSrcCtx, MEMChip_1_A0 + add_list[idx].nColBit, 1.0/1); + FaultSource_addScore(pFaultSrcCtx, TMUTexADDR_1_0 + add_list[idx].nColBit, 1.0/1); if(add_list[idx].nColBit < 4) - FaultSource_AddScore( RES_TEXADDR_1_L + add_list[idx].nColBit + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_1_L + add_list[idx].nColBit + 1, 1.0/2); else if(add_list[idx].nColBit < 8) - FaultSource_AddScore( RES_TEXADDR_1_H + add_list[idx].nColBit + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_1_H + add_list[idx].nColBit + 1, 1.0/2); else - FaultSource_AddScore( RES_TEXADDR_1_8 + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_1_8 + 1, 1.0/2); } if(add_list[idx].nRowBit!=0) { - FaultSource_AddScore( MEMChip_1_A0 + add_list[idx].nRowBit, 1.0/1); - FaultSource_AddScore( TMUTexADDR_1_0 + add_list[idx].nRowBit, 1.0/1); + FaultSource_addScore(pFaultSrcCtx, MEMChip_1_A0 + add_list[idx].nRowBit, 1.0/1); + FaultSource_addScore(pFaultSrcCtx, TMUTexADDR_1_0 + add_list[idx].nRowBit, 1.0/1); if(add_list[idx].nRowBit < 4) - FaultSource_AddScore( RES_TEXADDR_1_L + add_list[idx].nRowBit + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_1_L + add_list[idx].nRowBit + 1, 1.0/2); else if(add_list[idx].nRowBit < 8) - FaultSource_AddScore( RES_TEXADDR_1_H + add_list[idx].nRowBit + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_1_H + add_list[idx].nRowBit + 1, 1.0/2); else - FaultSource_AddScore( RES_TEXADDR_1_8 + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_1_8 + 1, 1.0/2); } } else { - FaultSource_AddScore( TMUTexRASCurrent, 1.0/8); - FaultSource_AddScore( RES_RAS, 1.0/8); - FaultSource_AddScore( MEMChip_1_RAS, 1.0/4); + FaultSource_addScore(pFaultSrcCtx, TMUTexRASCurrent, 1.0/8); + FaultSource_addScore(pFaultSrcCtx, RES_RAS, 1.0/8); + FaultSource_addScore(pFaultSrcCtx, MEMChip_1_RAS, 1.0/4); if(ErrorMark_L1 & 0x00FF0000) { - FaultSource_AddScore( TMUTexCAS0, 1.0/16); - FaultSource_AddScore( RES_CAS+1, 1.0/16); - FaultSource_AddScore( MEMChip_1_CASL, 1.0/8); + FaultSource_addScore(pFaultSrcCtx, TMUTexCAS0, 1.0/16); + FaultSource_addScore(pFaultSrcCtx, RES_CAS+1, 1.0/16); + FaultSource_addScore(pFaultSrcCtx, MEMChip_1_CASL, 1.0/8); } if(ErrorMark_L1 & 0xFF000000) { - FaultSource_AddScore( TMUTexCAS1, 1.0/16); - FaultSource_AddScore( RES_CAS+2, 1.0/16); - FaultSource_AddScore( MEMChip_1_CASH, 1.0/8); + FaultSource_addScore(pFaultSrcCtx, TMUTexCAS1, 1.0/16); + FaultSource_addScore(pFaultSrcCtx, RES_CAS+2, 1.0/16); + FaultSource_addScore(pFaultSrcCtx, MEMChip_1_CASH, 1.0/8); } } } if(count_bit32(ErrorMark_L2 & 0x0000FFFF) > 2) { - NbErr++;/* + NbErr++; + /* printf("3: %08x %d\n", ErrorMark_L2 & 0x0000FFFF, - count_bit32(ErrorMark_L2 & 0x0000FFFF));*/ + count_bit32(ErrorMark_L2 & 0x0000FFFF)); + */ if((idxdraw == idx) && count_bit32(ErrorMark_L2 & 0x0000FFFF) > 6) { - FaultSource_AddScore( TMUTexWE, 1.0/4); - FaultSource_AddScore( RES_WE, 1.0/4); - FaultSource_AddScore( MEMChip_2_WE, 1.0); + FaultSource_addScore(pFaultSrcCtx, TMUTexWE, 1.0/4); + FaultSource_addScore(pFaultSrcCtx, RES_WE, 1.0/4); + FaultSource_addScore(pFaultSrcCtx, MEMChip_2_WE, 1.0); } if(count_bit32(ErrorMarkBlank_L2 & 0x0000FFFF) < 3) { if(add_list[idx].nColBit!=0) { - FaultSource_AddScore( MEMChip_2_A0 + add_list[idx].nColBit, 1.0/1); - FaultSource_AddScore( TMUTexADDR_2_0 + add_list[idx].nColBit, 1.0/1); + FaultSource_addScore(pFaultSrcCtx, MEMChip_2_A0 + add_list[idx].nColBit, 1.0/1); + FaultSource_addScore(pFaultSrcCtx, TMUTexADDR_2_0 + add_list[idx].nColBit, 1.0/1); if(add_list[idx].nColBit < 4) - FaultSource_AddScore( RES_TEXADDR_2_L + add_list[idx].nColBit + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_2_L + add_list[idx].nColBit + 1, 1.0/2); else if(add_list[idx].nColBit < 8) - FaultSource_AddScore( RES_TEXADDR_2_H + add_list[idx].nColBit + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_2_H + add_list[idx].nColBit + 1, 1.0/2); else - FaultSource_AddScore( RES_TEXADDR_2_8 + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_2_8 + 1, 1.0/2); } if(add_list[idx].nRowBit!=0) { - FaultSource_AddScore( MEMChip_2_A0 + add_list[idx].nRowBit, 1.0/1); - FaultSource_AddScore( TMUTexADDR_2_0 + add_list[idx].nRowBit, 1.0/1); + FaultSource_addScore(pFaultSrcCtx, MEMChip_2_A0 + add_list[idx].nRowBit, 1.0/1); + FaultSource_addScore(pFaultSrcCtx, TMUTexADDR_2_0 + add_list[idx].nRowBit, 1.0/1); if(add_list[idx].nRowBit < 4) - FaultSource_AddScore( RES_TEXADDR_2_L + add_list[idx].nRowBit + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_2_L + add_list[idx].nRowBit + 1, 1.0/2); else if(add_list[idx].nRowBit < 8) - FaultSource_AddScore( RES_TEXADDR_2_H + add_list[idx].nRowBit + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_2_H + add_list[idx].nRowBit + 1, 1.0/2); else - FaultSource_AddScore( RES_TEXADDR_2_8 + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_2_8 + 1, 1.0/2); } } else { - FaultSource_AddScore( TMUTexRASCurrent, 1.0/8); - FaultSource_AddScore( RES_RAS, 1.0/8); - FaultSource_AddScore( MEMChip_2_RAS, 1.0/4); + FaultSource_addScore(pFaultSrcCtx, TMUTexRASCurrent, 1.0/8); + FaultSource_addScore(pFaultSrcCtx, RES_RAS, 1.0/8); + FaultSource_addScore(pFaultSrcCtx, MEMChip_2_RAS, 1.0/4); if(ErrorMark_L2 & 0x000000FF) { - FaultSource_AddScore( TMUTexCAS2, 1.0/16); - FaultSource_AddScore( RES_CAS+3, 1.0/16); - FaultSource_AddScore( MEMChip_2_CASL, 1.0/8); + FaultSource_addScore(pFaultSrcCtx, TMUTexCAS2, 1.0/16); + FaultSource_addScore(pFaultSrcCtx, RES_CAS+3, 1.0/16); + FaultSource_addScore(pFaultSrcCtx, MEMChip_2_CASL, 1.0/8); } if(ErrorMark_L2 & 0x0000FF00) { - FaultSource_AddScore( TMUTexCAS3, 1.0/16); - FaultSource_AddScore( RES_CAS+4, 1.0/16); - FaultSource_AddScore( MEMChip_2_CASH, 1.0/8); + FaultSource_addScore(pFaultSrcCtx, TMUTexCAS3, 1.0/16); + FaultSource_addScore(pFaultSrcCtx, RES_CAS+4, 1.0/16); + FaultSource_addScore(pFaultSrcCtx, MEMChip_2_CASH, 1.0/8); } } } if(count_bit32(ErrorMark_L2 & 0xFFFF0000) > 2) { - NbErr++;/* + NbErr++; + /* printf("4: %08x %d\n", ErrorMark_L2 & 0xFFFF0000, - count_bit32(ErrorMark_L2 & 0xFFFF0000));*/ + count_bit32(ErrorMark_L2 & 0xFFFF0000)); + */ if((idxdraw == idx) && count_bit32(ErrorMark_L2 & 0xFFFF0000) > 6) { - FaultSource_AddScore( TMUTexWE, 1.0/4); - FaultSource_AddScore( RES_WE, 1.0/4); - FaultSource_AddScore( MEMChip_3_WE, 1.0); + FaultSource_addScore(pFaultSrcCtx, TMUTexWE, 1.0/4); + FaultSource_addScore(pFaultSrcCtx, RES_WE, 1.0/4); + FaultSource_addScore(pFaultSrcCtx, MEMChip_3_WE, 1.0); } if(count_bit32(ErrorMarkBlank_L2 & 0xFFFF0000) < 3) { if(add_list[idx].nColBit!=0) { - FaultSource_AddScore( MEMChip_3_A0 + add_list[idx].nColBit, 1.0/1); - FaultSource_AddScore( TMUTexADDR_3_0 + add_list[idx].nColBit, 1.0/1); + FaultSource_addScore(pFaultSrcCtx, MEMChip_3_A0 + add_list[idx].nColBit, 1.0/1); + FaultSource_addScore(pFaultSrcCtx, TMUTexADDR_3_0 + add_list[idx].nColBit, 1.0/1); if(add_list[idx].nColBit < 4) - FaultSource_AddScore( RES_TEXADDR_3_L + add_list[idx].nColBit + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_3_L + add_list[idx].nColBit + 1, 1.0/2); else if(add_list[idx].nColBit < 8) - FaultSource_AddScore( RES_TEXADDR_3_H + add_list[idx].nColBit + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_3_H + add_list[idx].nColBit + 1, 1.0/2); else - FaultSource_AddScore( RES_TEXADDR_3_8 + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_3_8 + 1, 1.0/2); } if(add_list[idx].nRowBit!=0) { - FaultSource_AddScore( MEMChip_3_A0 + add_list[idx].nRowBit, 1.0/1); - FaultSource_AddScore( TMUTexADDR_3_0 + add_list[idx].nRowBit, 1.0/1); + FaultSource_addScore(pFaultSrcCtx, MEMChip_3_A0 + add_list[idx].nRowBit, 1.0/1); + FaultSource_addScore(pFaultSrcCtx, TMUTexADDR_3_0 + add_list[idx].nRowBit, 1.0/1); if(add_list[idx].nRowBit < 4) - FaultSource_AddScore( RES_TEXADDR_3_L + add_list[idx].nRowBit + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_3_L + add_list[idx].nRowBit + 1, 1.0/2); else if(add_list[idx].nRowBit < 8) - FaultSource_AddScore( RES_TEXADDR_3_H + add_list[idx].nRowBit + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_3_H + add_list[idx].nRowBit + 1, 1.0/2); else - FaultSource_AddScore( RES_TEXADDR_3_8 + 1, 1.0/2); + FaultSource_addScore(pFaultSrcCtx, RES_TEXADDR_3_8 + 1, 1.0/2); } } else { - FaultSource_AddScore( TMUTexRASCurrent, 1.0/8); - FaultSource_AddScore( RES_RAS, 1.0/8); - FaultSource_AddScore( MEMChip_3_RAS, 1.0/4); + FaultSource_addScore(pFaultSrcCtx, TMUTexRASCurrent, 1.0/8); + FaultSource_addScore(pFaultSrcCtx, RES_RAS, 1.0/8); + FaultSource_addScore(pFaultSrcCtx, MEMChip_3_RAS, 1.0/4); if(ErrorMark_L2 & 0x00FF0000) { - FaultSource_AddScore( TMUTexCAS2, 1.0/16); - FaultSource_AddScore( RES_CAS+3, 1.0/16); - FaultSource_AddScore( MEMChip_3_CASL, 1.0/8); + FaultSource_addScore(pFaultSrcCtx, TMUTexCAS2, 1.0/16); + FaultSource_addScore(pFaultSrcCtx, RES_CAS+3, 1.0/16); + FaultSource_addScore(pFaultSrcCtx, MEMChip_3_CASL, 1.0/8); } if(ErrorMark_L2 & 0xFF000000) { - FaultSource_AddScore( TMUTexCAS3, 1.0/16); - FaultSource_AddScore( RES_CAS+4, 1.0/16); - FaultSource_AddScore( MEMChip_3_CASH, 1.0/8); + FaultSource_addScore(pFaultSrcCtx, TMUTexCAS3, 1.0/16); + FaultSource_addScore(pFaultSrcCtx, RES_CAS+4, 1.0/16); + FaultSource_addScore(pFaultSrcCtx, MEMChip_3_CASH, 1.0/8); } } @@ -580,8 +610,13 @@ RenderTestAddress( sst1DeviceInfoStruct* devInfo, } } + + clearScreen(sstregs,0x00000000,2,2); + sst1InitIdle(sst); + devInfo->tmuInit0[(int)ucNumTMU] = _trexInit0; ISET(SST_TREX(sst,ucNumTMU)->trexInit0, devInfo->tmuInit0[(int)ucNumTMU]); sst1InitIdle(sst); + return NbErr; } diff --git a/Test_Address.h b/Test_Address.h index 64163e8..c24f66c 100644 --- a/Test_Address.h +++ b/Test_Address.h @@ -23,6 +23,7 @@ RenderTestAddress( sst1DeviceInfoStruct* devInfo, FxU32* sst, SstRegs *sstregs, const char ucNumTMU, - const unsigned char RamSizeMB); + const unsigned char RamSizeMB, + def_sFaultSourceScoreRec* const pFaultSrcCtx); #endif //_DEF_TEST_ADDRESS_H_ diff --git a/Test_Data.c b/Test_Data.c index 3f920b1..1412a99 100644 --- a/Test_Data.c +++ b/Test_Data.c @@ -15,6 +15,7 @@ * along with this program. If not, see . */ #include +#include #include "cvg.h" #include @@ -34,9 +35,13 @@ RenderTest( sst1DeviceInfoStruct* devInfo, const char ucNumTMU, const FxU32 mem, const FxU32 value1, - const FxU32 value2) + const FxU32 value2, + def_sFaultSourceScoreRec* const pFaultSrcCtx) { + unsigned long long NbErr = 0; + sst1InitIdle(sst); + unsigned long _trexInit0 = IGET(SST_TREX(sstregs,ucNumTMU)->trexInit0); devInfo->tmuInit0[(int)ucNumTMU] = SST_TREXINIT0_DEFAULT ; ISET(SST_TREX(sstregs,ucNumTMU)->trexInit0, devInfo->tmuInit0[(int)ucNumTMU]); sst1InitIdle(sst); @@ -44,9 +49,10 @@ RenderTest( sst1DeviceInfoStruct* devInfo, ISET(sstregs->texBaseAddr, mem>>3); /* Writing to first texture line, to use RAM bits 0..31 */ - volatile FxU32 *texAddr = (ucNumTMU<<(21-2)) /* NUM_TMU */ - + (((FxU32)0)<<(17-2)) /* LOD_0 */ - + (FxU32 *)SST_TEX_ADDRESS(sst); /* tex base address */ + volatile FxU32 *texAddr + = (ucNumTMU<<(21-2)) /* NUM_TMU */ + + (((FxU32)0)<<(17-2)) /* LOD_0 */ + + (FxU32 *)SST_TEX_ADDRESS(sst); /* tex base address */ ISET(texAddr[0], value1); ISET(texAddr[1], value1 + 1); ISET(texAddr[2], value1 + 2); ISET(texAddr[3], value1 + 3); @@ -55,8 +61,10 @@ RenderTest( sst1DeviceInfoStruct* devInfo, ISET(texAddr[0], value2); ISET(texAddr[1], value2 + 1); ISET(texAddr[2], value2 + 2); ISET(texAddr[3], value2 + 3); - /* draw a 8x8 square */ //TODO: 4x2 - drawSquare(sstregs,0,0,8); + clearScreen(sstregs,0x00000000,8,2); + + /* draw a 8x2 rectangle */ + drawRect(sstregs,0,0,8,2); sst1InitIdle(sst); /* reading back first line pixels addresses */ @@ -71,8 +79,6 @@ RenderTest( sst1DeviceInfoStruct* devInfo, const uint32_t L2_3 = IGET(sst[(SST_LFB_ADDR >> 2) + (2048 >> 2) + 2]); const uint32_t L2_4 = IGET(sst[(SST_LFB_ADDR >> 2) + (2048 >> 2) + 3]); - unsigned long long NbErr = 0; - const uint32_t ErrorMark_L1_1 = L1_1 ^ ( value1 + 0 ); const uint32_t ErrorMark_L1_2 = L1_2 ^ ( value1 + 1 ); const uint32_t ErrorMark_L1_3 = L1_3 ^ ( value1 + 2 ); @@ -86,366 +92,383 @@ RenderTest( sst1DeviceInfoStruct* devInfo, || ErrorMark_L2_1 || ErrorMark_L2_2 || ErrorMark_L2_3 || ErrorMark_L2_4) { NbErr++; - - WordBitFaultSet(ErrorMark_L1_1, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0); - WordBitFaultSet(ErrorMark_L1_2, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0); - WordBitFaultSet(ErrorMark_L1_3, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0); - WordBitFaultSet(ErrorMark_L1_4, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0); - WordBitFaultSet(ErrorMark_L2_1, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0); - WordBitFaultSet(ErrorMark_L2_2, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0); - WordBitFaultSet(ErrorMark_L2_3, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0); - WordBitFaultSet(ErrorMark_L2_4, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0); - WordBitFaultSet(ErrorMark_L1_1, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131); - WordBitFaultSet(ErrorMark_L1_2, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131); - WordBitFaultSet(ErrorMark_L1_3, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131); - WordBitFaultSet(ErrorMark_L1_4, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131); - WordBitFaultSet(ErrorMark_L2_1, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131); - WordBitFaultSet(ErrorMark_L2_2, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131); - WordBitFaultSet(ErrorMark_L2_3, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131); - WordBitFaultSet(ErrorMark_L2_4, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_1, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_2, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_3, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_4, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_1, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_2, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_3, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_4, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0); - QuartetBitFaultSet(ErrorMark_L1_1 >> 0, 1.0 / 16, RA10_1); - QuartetBitFaultSet(ErrorMark_L1_1 >> 4, 1.0 / 16, RA11_1); - QuartetBitFaultSet(ErrorMark_L1_1 >> 8, 1.0 / 16, RA12_1); - QuartetBitFaultSet(ErrorMark_L1_1 >> 12, 1.0 / 16, RA13_1); - QuartetBitFaultSet(ErrorMark_L1_1 >> 16, 1.0 / 16, RA10_1); - QuartetBitFaultSet(ErrorMark_L1_1 >> 20, 1.0 / 16, RA11_1); - QuartetBitFaultSet(ErrorMark_L1_1 >> 24, 1.0 / 16, RA12_1); - QuartetBitFaultSet(ErrorMark_L1_1 >> 28, 1.0 / 16, RA13_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_1 >> 0, 1.0 / 16, RA10_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_1 >> 4, 1.0 / 16, RA11_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_1 >> 8, 1.0 / 16, RA12_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_1 >> 12, 1.0 / 16, RA13_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_1 >> 16, 1.0 / 16, RA10_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_1 >> 20, 1.0 / 16, RA11_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_1 >> 24, 1.0 / 16, RA12_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_1 >> 28, 1.0 / 16, RA13_1); - QuartetBitFaultSet(ErrorMark_L1_2 >> 0, 1.0 / 16, RA10_1); - QuartetBitFaultSet(ErrorMark_L1_2 >> 4, 1.0 / 16, RA11_1); - QuartetBitFaultSet(ErrorMark_L1_2 >> 8, 1.0 / 16, RA12_1); - QuartetBitFaultSet(ErrorMark_L1_2 >> 12, 1.0 / 16, RA13_1); - QuartetBitFaultSet(ErrorMark_L1_2 >> 16, 1.0 / 16, RA10_1); - QuartetBitFaultSet(ErrorMark_L1_2 >> 20, 1.0 / 16, RA11_1); - QuartetBitFaultSet(ErrorMark_L1_2 >> 24, 1.0 / 16, RA12_1); - QuartetBitFaultSet(ErrorMark_L1_2 >> 28, 1.0 / 16, RA13_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_2 >> 0, 1.0 / 16, RA10_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_2 >> 4, 1.0 / 16, RA11_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_2 >> 8, 1.0 / 16, RA12_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_2 >> 12, 1.0 / 16, RA13_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_2 >> 16, 1.0 / 16, RA10_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_2 >> 20, 1.0 / 16, RA11_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_2 >> 24, 1.0 / 16, RA12_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_2 >> 28, 1.0 / 16, RA13_1); - QuartetBitFaultSet(ErrorMark_L1_3 >> 0, 1.0 / 16, RA10_1); - QuartetBitFaultSet(ErrorMark_L1_3 >> 4, 1.0 / 16, RA11_1); - QuartetBitFaultSet(ErrorMark_L1_3 >> 8, 1.0 / 16, RA12_1); - QuartetBitFaultSet(ErrorMark_L1_3 >> 12, 1.0 / 16, RA13_1); - QuartetBitFaultSet(ErrorMark_L1_3 >> 16, 1.0 / 16, RA10_1); - QuartetBitFaultSet(ErrorMark_L1_3 >> 20, 1.0 / 16, RA11_1); - QuartetBitFaultSet(ErrorMark_L1_3 >> 24, 1.0 / 16, RA12_1); - QuartetBitFaultSet(ErrorMark_L1_3 >> 28, 1.0 / 16, RA13_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_3 >> 0, 1.0 / 16, RA10_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_3 >> 4, 1.0 / 16, RA11_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_3 >> 8, 1.0 / 16, RA12_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_3 >> 12, 1.0 / 16, RA13_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_3 >> 16, 1.0 / 16, RA10_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_3 >> 20, 1.0 / 16, RA11_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_3 >> 24, 1.0 / 16, RA12_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_3 >> 28, 1.0 / 16, RA13_1); - QuartetBitFaultSet(ErrorMark_L1_4 >> 0, 1.0 / 16, RA10_1); - QuartetBitFaultSet(ErrorMark_L1_4 >> 4, 1.0 / 16, RA11_1); - QuartetBitFaultSet(ErrorMark_L1_4 >> 8, 1.0 / 16, RA12_1); - QuartetBitFaultSet(ErrorMark_L1_4 >> 12, 1.0 / 16, RA13_1); - QuartetBitFaultSet(ErrorMark_L1_4 >> 16, 1.0 / 16, RA10_1); - QuartetBitFaultSet(ErrorMark_L1_4 >> 20, 1.0 / 16, RA11_1); - QuartetBitFaultSet(ErrorMark_L1_4 >> 24, 1.0 / 16, RA12_1); - QuartetBitFaultSet(ErrorMark_L1_4 >> 28, 1.0 / 16, RA13_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_4 >> 0, 1.0 / 16, RA10_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_4 >> 4, 1.0 / 16, RA11_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_4 >> 8, 1.0 / 16, RA12_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_4 >> 12, 1.0 / 16, RA13_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_4 >> 16, 1.0 / 16, RA10_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_4 >> 20, 1.0 / 16, RA11_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_4 >> 24, 1.0 / 16, RA12_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1_4 >> 28, 1.0 / 16, RA13_1); - QuartetBitFaultSet(ErrorMark_L2_1 >> 0, 1.0 / 16, RA10_1); - QuartetBitFaultSet(ErrorMark_L2_1 >> 4, 1.0 / 16, RA11_1); - QuartetBitFaultSet(ErrorMark_L2_1 >> 8, 1.0 / 16, RA12_1); - QuartetBitFaultSet(ErrorMark_L2_1 >> 12, 1.0 / 16, RA13_1); - QuartetBitFaultSet(ErrorMark_L2_1 >> 16, 1.0 / 16, RA10_1); - QuartetBitFaultSet(ErrorMark_L2_1 >> 20, 1.0 / 16, RA11_1); - QuartetBitFaultSet(ErrorMark_L2_1 >> 24, 1.0 / 16, RA12_1); - QuartetBitFaultSet(ErrorMark_L2_1 >> 28, 1.0 / 16, RA13_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_1 >> 0, 1.0 / 16, RA10_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_1 >> 4, 1.0 / 16, RA11_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_1 >> 8, 1.0 / 16, RA12_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_1 >> 12, 1.0 / 16, RA13_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_1 >> 16, 1.0 / 16, RA10_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_1 >> 20, 1.0 / 16, RA11_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_1 >> 24, 1.0 / 16, RA12_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_1 >> 28, 1.0 / 16, RA13_1); - QuartetBitFaultSet(ErrorMark_L2_2 >> 0, 1.0 / 16, RA10_1); - QuartetBitFaultSet(ErrorMark_L2_2 >> 4, 1.0 / 16, RA11_1); - QuartetBitFaultSet(ErrorMark_L2_2 >> 8, 1.0 / 16, RA12_1); - QuartetBitFaultSet(ErrorMark_L2_2 >> 12, 1.0 / 16, RA13_1); - QuartetBitFaultSet(ErrorMark_L2_2 >> 16, 1.0 / 16, RA10_1); - QuartetBitFaultSet(ErrorMark_L2_2 >> 20, 1.0 / 16, RA11_1); - QuartetBitFaultSet(ErrorMark_L2_2 >> 24, 1.0 / 16, RA12_1); - QuartetBitFaultSet(ErrorMark_L2_2 >> 28, 1.0 / 16, RA13_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_2 >> 0, 1.0 / 16, RA10_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_2 >> 4, 1.0 / 16, RA11_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_2 >> 8, 1.0 / 16, RA12_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_2 >> 12, 1.0 / 16, RA13_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_2 >> 16, 1.0 / 16, RA10_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_2 >> 20, 1.0 / 16, RA11_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_2 >> 24, 1.0 / 16, RA12_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_2 >> 28, 1.0 / 16, RA13_1); - QuartetBitFaultSet(ErrorMark_L2_3 >> 0, 1.0 / 16, RA10_1); - QuartetBitFaultSet(ErrorMark_L2_3 >> 4, 1.0 / 16, RA11_1); - QuartetBitFaultSet(ErrorMark_L2_3 >> 8, 1.0 / 16, RA12_1); - QuartetBitFaultSet(ErrorMark_L2_3 >> 12, 1.0 / 16, RA13_1); - QuartetBitFaultSet(ErrorMark_L2_3 >> 16, 1.0 / 16, RA10_1); - QuartetBitFaultSet(ErrorMark_L2_3 >> 20, 1.0 / 16, RA11_1); - QuartetBitFaultSet(ErrorMark_L2_3 >> 24, 1.0 / 16, RA12_1); - QuartetBitFaultSet(ErrorMark_L2_3 >> 28, 1.0 / 16, RA13_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_3 >> 0, 1.0 / 16, RA10_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_3 >> 4, 1.0 / 16, RA11_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_3 >> 8, 1.0 / 16, RA12_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_3 >> 12, 1.0 / 16, RA13_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_3 >> 16, 1.0 / 16, RA10_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_3 >> 20, 1.0 / 16, RA11_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_3 >> 24, 1.0 / 16, RA12_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_3 >> 28, 1.0 / 16, RA13_1); + + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_4 >> 0, 1.0 / 16, RA10_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_4 >> 4, 1.0 / 16, RA11_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_4 >> 8, 1.0 / 16, RA12_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_4 >> 12, 1.0 / 16, RA13_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_4 >> 16, 1.0 / 16, RA10_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_4 >> 20, 1.0 / 16, RA11_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_4 >> 24, 1.0 / 16, RA12_1); + QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2_4 >> 28, 1.0 / 16, RA13_1); - QuartetBitFaultSet(ErrorMark_L2_4 >> 0, 1.0 / 16, RA10_1); - QuartetBitFaultSet(ErrorMark_L2_4 >> 4, 1.0 / 16, RA11_1); - QuartetBitFaultSet(ErrorMark_L2_4 >> 8, 1.0 / 16, RA12_1); - QuartetBitFaultSet(ErrorMark_L2_4 >> 12, 1.0 / 16, RA13_1); - QuartetBitFaultSet(ErrorMark_L2_4 >> 16, 1.0 / 16, RA10_1); - QuartetBitFaultSet(ErrorMark_L2_4 >> 20, 1.0 / 16, RA11_1); - QuartetBitFaultSet(ErrorMark_L2_4 >> 24, 1.0 / 16, RA12_1); - QuartetBitFaultSet(ErrorMark_L2_4 >> 28, 1.0 / 16, RA13_1); - const double dScoreFront = (mem >= 0x200000) ? 1.0 / 8 : 1.0 / 4; const double dScoreBack = (mem >= 0x200000) ? 1.0 / 4 : 1.0 / 8; if(ucNumTMU == 0) { - WordBitFaultSet(ErrorMark_L1_1, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); - WordBitFaultSet(ErrorMark_L1_2, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); - WordBitFaultSet(ErrorMark_L1_3, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); - WordBitFaultSet(ErrorMark_L1_4, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); - WordBitFaultSet(ErrorMark_L2_1, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); - WordBitFaultSet(ErrorMark_L2_2, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); - WordBitFaultSet(ErrorMark_L2_3, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); - WordBitFaultSet(ErrorMark_L2_4, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_1, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_2, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_3, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_4, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_1, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_2, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_3, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_4, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); - MemChipDQFaultSet(ErrorMark_L1_1, dScoreFront, U14, U12); - MemChipDQFaultSet(ErrorMark_L1_2, dScoreFront, U14, U12); - MemChipDQFaultSet(ErrorMark_L1_3, dScoreFront, U14, U12); - MemChipDQFaultSet(ErrorMark_L1_4, dScoreFront, U14, U12); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1_1, dScoreFront, U14, U12); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1_2, dScoreFront, U14, U12); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1_3, dScoreFront, U14, U12); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1_4, dScoreFront, U14, U12); - MemChipDQFaultSet(ErrorMark_L2_1, dScoreFront, U18, U17); - MemChipDQFaultSet(ErrorMark_L2_2, dScoreFront, U18, U17); - MemChipDQFaultSet(ErrorMark_L2_3, dScoreFront, U18, U17); - MemChipDQFaultSet(ErrorMark_L2_4, dScoreFront, U18, U17); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2_1, dScoreFront, U18, U17); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2_2, dScoreFront, U18, U17); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2_3, dScoreFront, U18, U17); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2_4, dScoreFront, U18, U17); - MemChipDQFaultSet(ErrorMark_L1_1, dScoreBack, U23, U24); - MemChipDQFaultSet(ErrorMark_L1_2, dScoreBack, U23, U24); - MemChipDQFaultSet(ErrorMark_L1_3, dScoreBack, U23, U24); - MemChipDQFaultSet(ErrorMark_L1_4, dScoreBack, U23, U24); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1_1, dScoreBack, U23, U24); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1_2, dScoreBack, U23, U24); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1_3, dScoreBack, U23, U24); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1_4, dScoreBack, U23, U24); - MemChipDQFaultSet(ErrorMark_L2_1, dScoreBack, U25, U26); - MemChipDQFaultSet(ErrorMark_L2_2, dScoreBack, U25, U26); - MemChipDQFaultSet(ErrorMark_L2_3, dScoreBack, U25, U26); - MemChipDQFaultSet(ErrorMark_L2_4, dScoreBack, U25, U26); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2_1, dScoreBack, U25, U26); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2_2, dScoreBack, U25, U26); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2_3, dScoreBack, U25, U26); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2_4, dScoreBack, U25, U26); - TMUTexDataFaultSet(ErrorMark_L1_1, ErrorMark_L2_1, 1.0 / 4, U9_TMU0); - TMUTexDataFaultSet(ErrorMark_L1_2, ErrorMark_L2_2, 1.0 / 4, U9_TMU0); - TMUTexDataFaultSet(ErrorMark_L1_3, ErrorMark_L2_3, 1.0 / 4, U9_TMU0); - TMUTexDataFaultSet(ErrorMark_L1_4, ErrorMark_L2_4, 1.0 / 4, U9_TMU0); + TMUTexDataFaultSet(pFaultSrcCtx, ErrorMark_L1_1, ErrorMark_L2_1, 1.0 / 4, U9_TMU0); + TMUTexDataFaultSet(pFaultSrcCtx, ErrorMark_L1_2, ErrorMark_L2_2, 1.0 / 4, U9_TMU0); + TMUTexDataFaultSet(pFaultSrcCtx, ErrorMark_L1_3, ErrorMark_L2_3, 1.0 / 4, U9_TMU0); + TMUTexDataFaultSet(pFaultSrcCtx, ErrorMark_L1_4, ErrorMark_L2_4, 1.0 / 4, U9_TMU0); - TMUTexDataCtrlFaultSet( ErrorMark_L1_1, + TMUTexDataCtrlFaultSet( pFaultSrcCtx, + ErrorMark_L1_1, 1.0 / 8, U9_TMU0_TEX_CAS0, U9_TMU0_TEX_CAS1, mem < 0x200000 ? U9_TMU0_TEX_RAS0 : U9_TMU0_TEX_RAS1, U9_TMU0_TEX_WE); - TMUTexDataCtrlFaultSet( ErrorMark_L1_2, + TMUTexDataCtrlFaultSet( pFaultSrcCtx, + ErrorMark_L1_2, 1.0 / 8, U9_TMU0_TEX_CAS0, U9_TMU0_TEX_CAS1, mem < 0x200000 ? U9_TMU0_TEX_RAS0 : U9_TMU0_TEX_RAS1, U9_TMU0_TEX_WE); - TMUTexDataCtrlFaultSet( ErrorMark_L1_3, + TMUTexDataCtrlFaultSet( pFaultSrcCtx, + ErrorMark_L1_3, 1.0 / 8, U9_TMU0_TEX_CAS0, U9_TMU0_TEX_CAS1, mem < 0x200000 ? U9_TMU0_TEX_RAS0 : U9_TMU0_TEX_RAS1, U9_TMU0_TEX_WE); - TMUTexDataCtrlFaultSet( ErrorMark_L1_4, + TMUTexDataCtrlFaultSet( pFaultSrcCtx, + ErrorMark_L1_4, 1.0 / 8, U9_TMU0_TEX_CAS0, U9_TMU0_TEX_CAS1, mem < 0x200000 ? U9_TMU0_TEX_RAS0 : U9_TMU0_TEX_RAS1, U9_TMU0_TEX_WE); - TMUTexDataCtrlFaultSet( ErrorMark_L2_1, + TMUTexDataCtrlFaultSet( pFaultSrcCtx, + ErrorMark_L2_1, 1.0 / 8, U9_TMU0_TEX_CAS2, U9_TMU0_TEX_CAS3, mem < 0x200000 ? U9_TMU0_TEX_RAS0 : U9_TMU0_TEX_RAS1, U9_TMU0_TEX_WE); - TMUTexDataCtrlFaultSet( ErrorMark_L2_2, + TMUTexDataCtrlFaultSet( pFaultSrcCtx, + ErrorMark_L2_2, 1.0 / 8, U9_TMU0_TEX_CAS2, U9_TMU0_TEX_CAS3, mem < 0x200000 ? U9_TMU0_TEX_RAS0 : U9_TMU0_TEX_RAS1, U9_TMU0_TEX_WE); - TMUTexDataCtrlFaultSet( ErrorMark_L2_3, + TMUTexDataCtrlFaultSet( pFaultSrcCtx, + ErrorMark_L2_3, 1.0 / 8, U9_TMU0_TEX_CAS2, U9_TMU0_TEX_CAS3, mem < 0x200000 ? U9_TMU0_TEX_RAS0 : U9_TMU0_TEX_RAS1, U9_TMU0_TEX_WE); - TMUTexDataCtrlFaultSet( ErrorMark_L2_4, + TMUTexDataCtrlFaultSet( pFaultSrcCtx, + ErrorMark_L2_4, 1.0 / 8, U9_TMU0_TEX_CAS2, U9_TMU0_TEX_CAS3, mem < 0x200000 ? U9_TMU0_TEX_RAS0 : U9_TMU0_TEX_RAS1, U9_TMU0_TEX_WE); - } else if(ucNumTMU == 1) { /* during TMU1 test, TMU0 doesnt receive any textures => ignoring these - WordBitFaultSet(ErrorMark_L1_1, 1.0 / 2, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); - WordBitFaultSet(ErrorMark_L1_2, 1.0 / 2, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); - WordBitFaultSet(ErrorMark_L1_3, 1.0 / 2, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); - WordBitFaultSet(ErrorMark_L1_4, 1.0 / 2, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); - WordBitFaultSet(ErrorMark_L2_1, 1.0 / 2, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); - WordBitFaultSet(ErrorMark_L2_2, 1.0 / 2, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); - WordBitFaultSet(ErrorMark_L2_3, 1.0 / 2, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); - WordBitFaultSet(ErrorMark_L2_4, 1.0 / 2, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_1, 1.0 / 2, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_2, 1.0 / 2, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_3, 1.0 / 2, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_4, 1.0 / 2, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_1, 1.0 / 2, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_2, 1.0 / 2, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_3, 1.0 / 2, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_4, 1.0 / 2, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0); */ /* U9_TMU0_TT_DATA_x is only tested when using TMU1 */ - WordBitFaultSet(ErrorMark_L1_1, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0); - WordBitFaultSet(ErrorMark_L1_2, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0); - WordBitFaultSet(ErrorMark_L1_3, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0); - WordBitFaultSet(ErrorMark_L1_4, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0); - WordBitFaultSet(ErrorMark_L2_1, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0); - WordBitFaultSet(ErrorMark_L2_2, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0); - WordBitFaultSet(ErrorMark_L2_3, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0); - WordBitFaultSet(ErrorMark_L2_4, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_1, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_2, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_3, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_4, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_1, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_2, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_3, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_4, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0); - WordBitFaultSet(ErrorMark_L1_1, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0); - WordBitFaultSet(ErrorMark_L1_2, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0); - WordBitFaultSet(ErrorMark_L1_3, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0); - WordBitFaultSet(ErrorMark_L1_4, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0); - WordBitFaultSet(ErrorMark_L2_1, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0); - WordBitFaultSet(ErrorMark_L2_2, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0); - WordBitFaultSet(ErrorMark_L2_3, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0); - WordBitFaultSet(ErrorMark_L2_4, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_1, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_2, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_3, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_4, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_1, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_2, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_3, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_4, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131); - WordBitFaultSet(ErrorMark_L1_1, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0); - WordBitFaultSet(ErrorMark_L1_2, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0); - WordBitFaultSet(ErrorMark_L1_3, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0); - WordBitFaultSet(ErrorMark_L1_4, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0); - WordBitFaultSet(ErrorMark_L2_1, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0); - WordBitFaultSet(ErrorMark_L2_2, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0); - WordBitFaultSet(ErrorMark_L2_3, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0); - WordBitFaultSet(ErrorMark_L2_4, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_1, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_2, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_3, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_4, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_1, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_2, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_3, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_4, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0); - MemChipDQFaultSet(ErrorMark_L1_1, dScoreFront, U13, U11); - MemChipDQFaultSet(ErrorMark_L1_2, dScoreFront, U13, U11); - MemChipDQFaultSet(ErrorMark_L1_3, dScoreFront, U13, U11); - MemChipDQFaultSet(ErrorMark_L1_4, dScoreFront, U13, U11); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_1, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_2, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_3, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1_4, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_1, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_2, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_3, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0); + WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2_4, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0); - MemChipDQFaultSet(ErrorMark_L2_1, dScoreFront, U16, U15); - MemChipDQFaultSet(ErrorMark_L2_2, dScoreFront, U16, U15); - MemChipDQFaultSet(ErrorMark_L2_3, dScoreFront, U16, U15); - MemChipDQFaultSet(ErrorMark_L2_4, dScoreFront, U16, U15); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1_1, dScoreFront, U13, U11); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1_2, dScoreFront, U13, U11); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1_3, dScoreFront, U13, U11); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1_4, dScoreFront, U13, U11); - MemChipDQFaultSet(ErrorMark_L1_1, dScoreBack, U27, U28); - MemChipDQFaultSet(ErrorMark_L1_2, dScoreBack, U27, U28); - MemChipDQFaultSet(ErrorMark_L1_3, dScoreBack, U27, U28); - MemChipDQFaultSet(ErrorMark_L1_4, dScoreBack, U27, U28); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2_1, dScoreFront, U16, U15); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2_2, dScoreFront, U16, U15); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2_3, dScoreFront, U16, U15); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2_4, dScoreFront, U16, U15); - MemChipDQFaultSet(ErrorMark_L2_1, dScoreBack, U29, U30); - MemChipDQFaultSet(ErrorMark_L2_2, dScoreBack, U29, U30); - MemChipDQFaultSet(ErrorMark_L2_3, dScoreBack, U29, U30); - MemChipDQFaultSet(ErrorMark_L2_4, dScoreBack, U29, U30); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1_1, dScoreBack, U27, U28); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1_2, dScoreBack, U27, U28); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1_3, dScoreBack, U27, U28); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1_4, dScoreBack, U27, U28); - TMUTexDataFaultSet(ErrorMark_L1_1, ErrorMark_L2_1, 1.0 / 4, U8_TMU1); - TMUTexDataFaultSet(ErrorMark_L1_2, ErrorMark_L2_2, 1.0 / 4, U8_TMU1); - TMUTexDataFaultSet(ErrorMark_L1_3, ErrorMark_L2_3, 1.0 / 4, U8_TMU1); - TMUTexDataFaultSet(ErrorMark_L1_4, ErrorMark_L2_4, 1.0 / 4, U8_TMU1); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2_1, dScoreBack, U29, U30); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2_2, dScoreBack, U29, U30); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2_3, dScoreBack, U29, U30); + MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2_4, dScoreBack, U29, U30); - TMUTexDataCtrlFaultSet( ErrorMark_L1_1, + TMUTexDataFaultSet(pFaultSrcCtx, ErrorMark_L1_1, ErrorMark_L2_1, 1.0 / 4, U8_TMU1); + TMUTexDataFaultSet(pFaultSrcCtx, ErrorMark_L1_2, ErrorMark_L2_2, 1.0 / 4, U8_TMU1); + TMUTexDataFaultSet(pFaultSrcCtx, ErrorMark_L1_3, ErrorMark_L2_3, 1.0 / 4, U8_TMU1); + TMUTexDataFaultSet(pFaultSrcCtx, ErrorMark_L1_4, ErrorMark_L2_4, 1.0 / 4, U8_TMU1); + + TMUTexDataCtrlFaultSet( pFaultSrcCtx, + ErrorMark_L1_1, 1.0 / 8, - U8_TMU1_TEX_CAS0, - U8_TMU1_TEX_CAS1, - mem < 0x200000 ? U8_TMU1_TEX_RAS0 : U8_TMU1_TEX_RAS1, - U8_TMU1_TEX_WE); - TMUTexDataCtrlFaultSet( ErrorMark_L1_2, + U8_TMU1_TEX_CAS0, + U8_TMU1_TEX_CAS1, + mem < 0x200000 ? U8_TMU1_TEX_RAS0 : U8_TMU1_TEX_RAS1, + U8_TMU1_TEX_WE); + TMUTexDataCtrlFaultSet( pFaultSrcCtx, + ErrorMark_L1_2, 1.0 / 8, - U8_TMU1_TEX_CAS0, - U8_TMU1_TEX_CAS1, - mem < 0x200000 ? U8_TMU1_TEX_RAS0 : U8_TMU1_TEX_RAS1, - U8_TMU1_TEX_WE); - TMUTexDataCtrlFaultSet( ErrorMark_L1_3, + U8_TMU1_TEX_CAS0, + U8_TMU1_TEX_CAS1, + mem < 0x200000 ? U8_TMU1_TEX_RAS0 : U8_TMU1_TEX_RAS1, + U8_TMU1_TEX_WE); + TMUTexDataCtrlFaultSet( pFaultSrcCtx, + ErrorMark_L1_3, 1.0 / 8, - U8_TMU1_TEX_CAS0, - U8_TMU1_TEX_CAS1, - mem < 0x200000 ? U8_TMU1_TEX_RAS0 : U8_TMU1_TEX_RAS1, - U8_TMU1_TEX_WE); - TMUTexDataCtrlFaultSet( ErrorMark_L1_4, + U8_TMU1_TEX_CAS0, + U8_TMU1_TEX_CAS1, + mem < 0x200000 ? U8_TMU1_TEX_RAS0 : U8_TMU1_TEX_RAS1, + U8_TMU1_TEX_WE); + TMUTexDataCtrlFaultSet( pFaultSrcCtx, + ErrorMark_L1_4, 1.0 / 8, - U8_TMU1_TEX_CAS0, - U8_TMU1_TEX_CAS1, - mem < 0x200000 ? U8_TMU1_TEX_RAS0 : U8_TMU1_TEX_RAS1, - U8_TMU1_TEX_WE); - TMUTexDataCtrlFaultSet( ErrorMark_L2_1, + U8_TMU1_TEX_CAS0, + U8_TMU1_TEX_CAS1, + mem < 0x200000 ? U8_TMU1_TEX_RAS0 : U8_TMU1_TEX_RAS1, + U8_TMU1_TEX_WE); + TMUTexDataCtrlFaultSet( pFaultSrcCtx, + ErrorMark_L2_1, 1.0 / 8, - U8_TMU1_TEX_CAS2, - U8_TMU1_TEX_CAS3, - mem < 0x200000 ? U8_TMU1_TEX_RAS0 : U8_TMU1_TEX_RAS1, - U8_TMU1_TEX_WE); - TMUTexDataCtrlFaultSet( ErrorMark_L2_2, + U8_TMU1_TEX_CAS2, + U8_TMU1_TEX_CAS3, + mem < 0x200000 ? U8_TMU1_TEX_RAS0 : U8_TMU1_TEX_RAS1, + U8_TMU1_TEX_WE); + TMUTexDataCtrlFaultSet( pFaultSrcCtx, + ErrorMark_L2_2, 1.0 / 8, - U8_TMU1_TEX_CAS2, - U8_TMU1_TEX_CAS3, - mem < 0x200000 ? U8_TMU1_TEX_RAS0 : U8_TMU1_TEX_RAS1, - U8_TMU1_TEX_WE); - TMUTexDataCtrlFaultSet( ErrorMark_L2_3, + U8_TMU1_TEX_CAS2, + U8_TMU1_TEX_CAS3, + mem < 0x200000 ? U8_TMU1_TEX_RAS0 : U8_TMU1_TEX_RAS1, + U8_TMU1_TEX_WE); + TMUTexDataCtrlFaultSet( pFaultSrcCtx, + ErrorMark_L2_3, 1.0 / 8, - U8_TMU1_TEX_CAS2, - U8_TMU1_TEX_CAS3, - mem < 0x200000 ? U8_TMU1_TEX_RAS0 : U8_TMU1_TEX_RAS1, - U8_TMU1_TEX_WE); - TMUTexDataCtrlFaultSet( ErrorMark_L2_4, + U8_TMU1_TEX_CAS2, + U8_TMU1_TEX_CAS3, + mem < 0x200000 ? U8_TMU1_TEX_RAS0 : U8_TMU1_TEX_RAS1, + U8_TMU1_TEX_WE); + TMUTexDataCtrlFaultSet( pFaultSrcCtx, + ErrorMark_L2_4, 1.0 / 8, - U8_TMU1_TEX_CAS2, - U8_TMU1_TEX_CAS3, - mem < 0x200000 ? U8_TMU1_TEX_RAS0 : U8_TMU1_TEX_RAS1, - U8_TMU1_TEX_WE ); - } - - /* - printf("== Quick Report ==\n"); - if(ErrorMark_L1_1) - { - printf( "LFB[0][0] is 0x%08x [expected 0x%08x] !\n", L1_1, value1+0); - printf( "Faulty bits :\n"); - printbin32Info(ErrorMark_L1_1, 31, 0); - printf( "\n"); - } - if(ErrorMark_L1_2) - { - printf( "LFB[0][1] is 0x%08x [expected 0x%08x] !\n", L1_2, value1+1); - printf( "Faulty bits :\n"); - printbin32Info(ErrorMark_L1_2, 31, 0); - printf( "\n"); - } - if(ErrorMark_L1_3) - { - printf( "LFB[0][2] is 0x%08x [expected 0x%08x] !\n", L1_3, value1+2); - printf( "Faulty bits :\n"); - printbin32Info(ErrorMark_L1_3, 31, 0); - printf( "\n"); - } - if(ErrorMark_L1_4) - { - printf( "LFB[0][3] is 0x%08x [expected 0x%08x] !\n", L1_4, value1+3); - printf( "Faulty bits :\n"); - printbin32Info(ErrorMark_L1_4, 31, 0); - printf( "\n"); + U8_TMU1_TEX_CAS2, + U8_TMU1_TEX_CAS3, + mem < 0x200000 ? U8_TMU1_TEX_RAS0 : U8_TMU1_TEX_RAS1, + U8_TMU1_TEX_WE ); } - if(ErrorMark_L2_1) + if(sOptions.eLogLevel >= E_LOGLEVEL__DEBUG) { - printf( "LFB[1][0] is 0x%08x [expected 0x%08x] !\n", L2_1, value2+0); - printf( "Faulty bits :\n"); - printbin32Info(ErrorMark_L2_1, 63, 21); - printf( "\n"); + if(ErrorMark_L1_1) + { + printf( "LFB[0][0] is 0x%08x [expected 0x%08x] !\n", L1_1, value1+0); + printf( "Faulty bits :\n"); + printbin32Info(ErrorMark_L1_1, 31, 0); + printf( "\n"); + } + if(ErrorMark_L1_2) + { + printf( "LFB[0][1] is 0x%08x [expected 0x%08x] !\n", L1_2, value1+1); + printf( "Faulty bits :\n"); + printbin32Info(ErrorMark_L1_2, 31, 0); + printf( "\n"); + } + if(ErrorMark_L1_3) + { + printf( "LFB[0][2] is 0x%08x [expected 0x%08x] !\n", L1_3, value1+2); + printf( "Faulty bits :\n"); + printbin32Info(ErrorMark_L1_3, 31, 0); + printf( "\n"); + } + if(ErrorMark_L1_4) + { + printf( "LFB[0][3] is 0x%08x [expected 0x%08x] !\n", L1_4, value1+3); + printf( "Faulty bits :\n"); + printbin32Info(ErrorMark_L1_4, 31, 0); + printf( "\n"); + } + if(ErrorMark_L2_1) + { + printf( "LFB[1][0] is 0x%08x [expected 0x%08x] !\n", L2_1, value2+0); + printf( "Faulty bits :\n"); + printbin32Info(ErrorMark_L2_1, 63, 21); + printf( "\n"); + } + if(ErrorMark_L2_2) + { + printf( "LFB[1][1] is 0x%08x [expected 0x%08x] !\n", L2_2, value2+1); + printf( "Faulty bits :\n"); + printbin32Info(ErrorMark_L2_2, 63, 21); + printf( "\n"); + } + if(ErrorMark_L2_3) + { + printf( "LFB[1][2] is 0x%08x [expected 0x%08x] !\n", L2_3, value2+2); + printf( "Faulty bits :\n"); + printbin32Info(ErrorMark_L2_3, 63, 21); + printf( "\n"); + } + if(ErrorMark_L2_4) + { + printf( "LFB[1][3] is 0x%08x [expected 0x%08x] !\n", L2_4, value2+3); + printf( "Faulty bits :\n"); + printbin32Info(ErrorMark_L2_4, 63, 21); + printf( "\n"); + } } - if(ErrorMark_L2_2) - { - printf( "LFB[1][1] is 0x%08x [expected 0x%08x] !\n", L2_2, value2+1); - printf( "Faulty bits :\n"); - printbin32Info(ErrorMark_L2_2, 63, 21); - printf( "\n"); - } - if(ErrorMark_L2_3) - { - printf( "LFB[1][2] is 0x%08x [expected 0x%08x] !\n", L2_3, value2+2); - printf( "Faulty bits :\n"); - printbin32Info(ErrorMark_L2_3, 63, 21); - printf( "\n"); - } - if(ErrorMark_L2_4) - { - printf( "LFB[1][3] is 0x%08x [expected 0x%08x] !\n", L2_4, value2+3); - printf( "Faulty bits :\n"); - printbin32Info(ErrorMark_L2_4, 63, 21); - printf( "\n"); - } - */ } + clearScreen(sstregs,0x00000000,8,2); + /* reset the Init0 register back to its previous value */ sst1InitIdle(sst); + devInfo->tmuInit0[(int)ucNumTMU] = _trexInit0; ISET(SST_TREX(sst,ucNumTMU)->trexInit0, devInfo->tmuInit0[(int)ucNumTMU]); sst1InitIdle(sst); @@ -458,7 +481,8 @@ test_TMU_datalines( sst1DeviceInfoStruct* devInfo, SstRegs *sstregs, const unsigned char ucNumTMU, const unsigned char bRandom, - const unsigned char RamSizeMB) + const unsigned char RamSizeMB, + def_sFaultSourceScoreRec* const pFaultSrcCtx) { typedef struct _def_sMemBlock{ uint32_t ulAddStart; @@ -488,7 +512,7 @@ test_TMU_datalines( sst1DeviceInfoStruct* devInfo, ISET(SST_TREX(sstregs,i)->textureMode, SST_TC_PASS | SST_TCA_PASS); for( int iMemBlock = 0; - iMemBlock <= sizeof(ar_memBlocks)/sizeof(def_sMemBlock); + iMemBlock < sizeof(ar_memBlocks)/sizeof(def_sMemBlock); iMemBlock++) { const def_sMemBlock* pMemBlk = &ar_memBlocks[iMemBlock]; @@ -496,11 +520,13 @@ test_TMU_datalines( sst1DeviceInfoStruct* devInfo, if(RamSizeMB < 4 && pMemBlk->ulAddStart >= 0x300000) continue; if(RamSizeMB < 3 && pMemBlk->ulAddStart >= 0x200000) continue; if(RamSizeMB < 2 && pMemBlk->ulAddStart >= 0x100000) continue; - /* - printf("Testing memory block 0x%08x to 0x%08x ...\n", - pMemBlk->ulAddStart, - pMemBlk->ulAddStart + pMemBlk->ulAddLength -4); - */ + + if(sOptions.eLogLevel >= E_LOGLEVEL__DEBUG) + { + printf("Testing @ 0x%08x to 0x%08x ...\n", + pMemBlk->ulAddStart, + pMemBlk->ulAddStart + pMemBlk->ulAddLength -4); + } unsigned char ucAddMovingBit = 0; for( FxU32 addrTest = pMemBlk->ulAddStart ; addrTest < (pMemBlk->ulAddStart + pMemBlk->ulAddLength); @@ -517,7 +543,8 @@ test_TMU_datalines( sst1DeviceInfoStruct* devInfo, ucNumTMU, addrTest, bitTest, - bitTest2); + bitTest2, + pFaultSrcCtx); ullNbErrorAll += ulNbError; if((bRandom && (nloop > 32)) || bitTest == 0) @@ -528,7 +555,8 @@ test_TMU_datalines( sst1DeviceInfoStruct* devInfo, bitTest2 = bRandom ? get_notnull_random_balanced_mByte() : (bitTest2 >> 1); } - //printf("Done @ 0x%08x\n",dataTest); + if(sOptions.eLogLevel >= E_LOGLEVEL__TRACE) + printf("Done @ 0x%08x\n",addrTest); const FxU32 new_addrTest = pMemBlk->ulAddStart | (1u << ucAddMovingBit); if(new_addrTest == pMemBlk->ulAddStart) break; diff --git a/Test_Data.h b/Test_Data.h index 9b6a1ec..af8b960 100644 --- a/Test_Data.h +++ b/Test_Data.h @@ -24,6 +24,7 @@ test_TMU_datalines( sst1DeviceInfoStruct* devInfo, SstRegs *sstregs, const unsigned char ucNumTMU, const unsigned char bRandom, - const unsigned char RamSizeMB); + const unsigned char RamSizeMB, + def_sFaultSourceScoreRec* const pFaultSrcCtx); #endif //_DEF_TEST_DATA_H_ diff --git a/Test_Data_Huge.c b/Test_Data_Huge.c index 1694e07..c4ee4e5 100644 --- a/Test_Data_Huge.c +++ b/Test_Data_Huge.c @@ -14,8 +14,9 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include +#define _BSD_SOURCE 1 +#include #include #include #include @@ -38,31 +39,35 @@ //#define _PROFILING -#define _DEF_PREHEAT_TIME_S 10 +#define _DEF_PREHEAT_TIME_S 5 + static void HeatMemAndTMU( sst1DeviceInfoStruct* devInfo, - FxU32* sst, - SstRegs *sstregs, - const char ucNumTMU, - const FxU32 mem) + FxU32* sst, + SstRegs *sstregs, + const char ucNumTMU, + const FxU32 mem) { - - ISET(sstregs->texBaseAddr, (mem>>3)); /* set to mem addr */ + /* set base mem @ */ + ISET(sstregs->texBaseAddr, (mem>>3)); volatile FxU32 *texRowAddr - = (ucNumTMU<<(21-2)) + (((FxU32)0/*LOD0*/)<<(17-2)) + = (ucNumTMU<<(21-2)) + + (((FxU32)0)<<(17-2)) /*LOD0*/ + (FxU32 *)SST_TEX_ADDRESS(sst); for(unsigned short iter_row = 0; iter_row < _DEF_NB_PIXEL_ROW; iter_row++) { for(unsigned short iter_col = 0; iter_col < _DEF_NB_PIXEL_COL; iter_col+=2) { - ISET(texRowAddr[iter_col/2], get_notnull_random_balanced_mByte()); + ISET(texRowAddr[iter_col/2], 0x55AA); } - texRowAddr += (1<<(9-2)); //jump to next line + /* move to next line */ + texRowAddr += (1<<(9-2)); } clock_t begin = clock(); + //printf("PREHEATING TMU/RAM\n"); do { if(((sst1InitReturnStatus(sst) & SST_FIFOLEVEL)) >= 0x20) @@ -72,27 +77,215 @@ HeatMemAndTMU( sst1DeviceInfoStruct* devInfo, } } while(((double)(clock() - begin)/CLOCKS_PER_SEC) < _DEF_PREHEAT_TIME_S ); + //printf("PREHEATING Done\n"); sst1InitIdle(sst); } +typedef struct _def_sFaultSheet{ + unsigned char ucNumTMU; + unsigned char bEvenRow; + def_eFaultSource Ux_MEMChip_MainMSB; + def_eFaultSource Ux_MEMChip_MainLSB; + def_eFaultSource Ux_MEMChip_AltMSB; + def_eFaultSource Ux_MEMChip_AltLSB; + def_eFaultSource Ux_MEMChip_CAS02; + def_eFaultSource Ux_MEMChip_CAS13; + def_eFaultSource Ux_MEMChip_RAS0; + def_eFaultSource Ux_MEMChip_RAS1; + def_eFaultSource Ux_MEMChip_WE; + def_eFaultSource Ux_TMU; + }def_sFaultSheet; + +static const def_sFaultSheet sFaultSheet[MAX_TMU][2] = +{ + { /*TMU0*/ + { /*ODD row*/ + .ucNumTMU = 0, + .bEvenRow = 0, + .Ux_MEMChip_MainMSB = U14, + .Ux_MEMChip_MainLSB = U12, + .Ux_MEMChip_AltMSB = U23, + .Ux_MEMChip_AltLSB = U24, + .Ux_MEMChip_CAS02 = U9_TMU0_TEX_CAS0, + .Ux_MEMChip_CAS13 = U9_TMU0_TEX_CAS1, + .Ux_MEMChip_RAS0 = U9_TMU0_TEX_RAS0, + .Ux_MEMChip_RAS1 = U9_TMU0_TEX_RAS1, + .Ux_MEMChip_WE = U9_TMU0_TEX_WE, + .Ux_TMU = U9_TMU0, + }, + { /*EVEN row*/ + .ucNumTMU = 0, + .bEvenRow = 1, + .Ux_MEMChip_MainMSB = U18, + .Ux_MEMChip_MainLSB = U17, + .Ux_MEMChip_AltMSB = U25, + .Ux_MEMChip_AltLSB = U26, + .Ux_MEMChip_CAS02 = U9_TMU0_TEX_CAS2, + .Ux_MEMChip_CAS13 = U9_TMU0_TEX_CAS3, + .Ux_MEMChip_RAS0 = U9_TMU0_TEX_RAS0, + .Ux_MEMChip_RAS1 = U9_TMU0_TEX_RAS1, + .Ux_MEMChip_WE = U9_TMU0_TEX_WE, + .Ux_TMU = U9_TMU0, + }, + }, + { /*TMU1*/ + { /*ODD row*/ + .ucNumTMU = 1, + .bEvenRow = 0, + .Ux_MEMChip_MainMSB = U13, + .Ux_MEMChip_MainLSB = U11, + .Ux_MEMChip_AltMSB = U27, + .Ux_MEMChip_AltLSB = U28, + .Ux_MEMChip_CAS02 = U8_TMU1_TEX_CAS0, + .Ux_MEMChip_CAS13 = U8_TMU1_TEX_CAS1, + .Ux_MEMChip_RAS0 = U8_TMU1_TEX_RAS0, + .Ux_MEMChip_RAS1 = U8_TMU1_TEX_RAS1, + .Ux_MEMChip_WE = U8_TMU1_TEX_WE, + .Ux_TMU = U8_TMU1, + }, + { /*EVEN row*/ + .ucNumTMU = 2, + .bEvenRow = 1, + .Ux_MEMChip_MainMSB = U16, + .Ux_MEMChip_MainLSB = U15, + .Ux_MEMChip_AltMSB = U29, + .Ux_MEMChip_AltLSB = U30, + .Ux_MEMChip_CAS02 = U8_TMU1_TEX_CAS2, + .Ux_MEMChip_CAS13 = U8_TMU1_TEX_CAS3, + .Ux_MEMChip_RAS0 = U8_TMU1_TEX_RAS0, + .Ux_MEMChip_RAS1 = U8_TMU1_TEX_RAS1, + .Ux_MEMChip_WE = U8_TMU1_TEX_WE, + .Ux_TMU = U8_TMU1, + }, + } +}; + +static void +AssignFault(const def_sFaultSheet* psCurFaultSheet, + const FxU32 mem, + const unsigned char bitIdx, + const unsigned char _relbitIdx, + const unsigned char _relbitIdxWord, + const unsigned char _relbitIdxQuartet, + const unsigned char WordIdx, + def_sFaultSourceScoreRec* const pFaultSrcCtx) +{ + //const unsigned char relbitIdxQuartet= bitIdx%4; + const unsigned char relbitIdxQuartet = _relbitIdxQuartet; + //const unsigned char relbitIdx = bitIdx%8; + const unsigned char relbitIdx = _relbitIdx; + //const unsigned char relbitIdxWord = bitIdx%16; + const unsigned char relbitIdxWord = _relbitIdxWord; + + static unsigned char nbErrLWord = 0; + static unsigned char nbErrWord = 0; + + if(bitIdx==0) + nbErrLWord = 1; + else + nbErrLWord++; + + if(relbitIdxWord==0) + nbErrWord = 1; + else + nbErrWord++; + + /* Texture Source path, FBI to TMUx*/ + FaultSource_addScore(pFaultSrcCtx, psCurFaultSheet->Ux_TMU+81+relbitIdxWord, 1.0/4); //Ux_TMUx_FT_DATA_x + + /* Output path, TMU0 to FBI*/ + FaultSource_addScore(pFaultSrcCtx, U9_TMU0+97+relbitIdxWord, 1.0/4); //U9_TMU0_TF_DATA_x + switch(WordIdx) + { + case 0: + case 2: + if(relbitIdx<=3) + FaultSource_addScore(pFaultSrcCtx, RA10_1+relbitIdxQuartet,1.0/8); + else + FaultSource_addScore(pFaultSrcCtx, RA11_1+relbitIdxQuartet,1.0/8); + break; + case 1: + case 3: + if(relbitIdx<=3) + FaultSource_addScore(pFaultSrcCtx, RA12_1+relbitIdxQuartet,1.0/8); + else + FaultSource_addScore(pFaultSrcCtx, RA13_1+relbitIdxQuartet,1.0/8); + break; + } + + /* Transfert path, TMU1 to TMU0*/ + if(psCurFaultSheet->ucNumTMU == 1) + { + /* TMU1 output */ + FaultSource_addScore(pFaultSrcCtx, U8_TMU1+97+relbitIdxWord, 1.0/4); //U8_TMU1_TF_DATA_x + /* line adaptation resistors */ + FaultSource_addScore(pFaultSrcCtx, TT_TDATA_R131+relbitIdxWord, 1.0/4); //TT_TDATA_R131++ + /* TMU0 input */ + /* Note: U9_TMU0_TT_DATA_x is only tested when using TMU1 */ + FaultSource_addScore(pFaultSrcCtx, U9_TMU0+65+relbitIdxWord, 1.0/4); //U9_TMU0_TT_DATA_x + } + + if(WordIdx>=2) + { + FaultSource_addScore(pFaultSrcCtx, psCurFaultSheet->Ux_MEMChip_MainLSB+1+relbitIdxWord, 1.0/2); //ok + FaultSource_addScore(pFaultSrcCtx, psCurFaultSheet->Ux_MEMChip_AltLSB+1+relbitIdxWord, 1.0/4); + } + else + { + FaultSource_addScore(pFaultSrcCtx, psCurFaultSheet->Ux_MEMChip_MainMSB+1+relbitIdxWord, 1.0/2); //ok + FaultSource_addScore(pFaultSrcCtx, psCurFaultSheet->Ux_MEMChip_AltMSB+1+relbitIdxWord, 1.0/4); + } + + if(!psCurFaultSheet->bEvenRow) + { + FaultSource_addScore(pFaultSrcCtx, psCurFaultSheet->Ux_TMU+1+0+bitIdx, 1.0/2); //Ux_TMUx_TEXDATA_0_0 + } + else + { + FaultSource_addScore(pFaultSrcCtx, psCurFaultSheet->Ux_TMU+1+32+bitIdx, 1.0/2); //Ux_TMUx_TEXDATA_2_0 + } + + if((relbitIdxWord==15) && (nbErrWord>16)) + { + switch(WordIdx) + { + case 0: + case 2: + FaultSource_addScore(pFaultSrcCtx, psCurFaultSheet->Ux_MEMChip_CAS02, 1.0); + break; + case 1: + case 3: + FaultSource_addScore(pFaultSrcCtx, psCurFaultSheet->Ux_MEMChip_CAS13, 1.0); + break; + } + FaultSource_addScore(pFaultSrcCtx, + mem < 0x200000 ? + psCurFaultSheet->Ux_MEMChip_RAS0 + : psCurFaultSheet->Ux_MEMChip_RAS1, + 1.0/2); + FaultSource_addScore(pFaultSrcCtx, psCurFaultSheet->Ux_MEMChip_WE, 1.0/2); + } +} + static unsigned long long RenderTest( sst1DeviceInfoStruct* devInfo, FxU32* sst, SstRegs *sstregs, const char ucNumTMU, - const FxU32 mem) + const FxU32 mem, + def_sFaultSourceScoreRec* const pFaultSrcCtx) { - unsigned long NbErr = 0; + unsigned long long NbErr = 0; #ifdef _PROFILING clock_t begin = clock(); #endif - ISET(sstregs->texBaseAddr, (mem>>3)); /* set to mem addr */ + + /* set base mem @ */ + ISET(sstregs->texBaseAddr, (mem>>3)); static uint16_t ar_u16Pixels[_DEF_NB_PIXEL_ROW][_DEF_NB_PIXEL_COL]; - static uint32_t - ar_u16PixelsRaw[_DEF_NB_PIXEL_ROW][_DEF_NB_PIXEL_COL/2]; static uint16_t ar_u16PixelsReRead[_DEF_NB_PIXEL_ROW][_DEF_NB_PIXEL_COL]; @@ -101,7 +294,6 @@ RenderTest( sst1DeviceInfoStruct* devInfo, for(unsigned short iter_col = 0; iter_col < _DEF_NB_PIXEL_COL; iter_col+=2) { const uint32_t NewData = get_notnull_random_balanced_mByte(); - ar_u16PixelsRaw[iter_row][iter_col/2] = NewData; ar_u16Pixels[iter_row][iter_col] = NewData >>16; ar_u16Pixels[iter_row][iter_col+1] = NewData & 0xFFFF; } @@ -112,17 +304,17 @@ RenderTest( sst1DeviceInfoStruct* devInfo, #endif volatile FxU32 *texRowAddr - = (ucNumTMU<<(21-2)) + (((FxU32)0/*LOD0*/)<<(17-2)) + = (ucNumTMU<<(21-2)) + + (((FxU32)0)<<(17-2)) /*LOD0*/ + (FxU32 *)SST_TEX_ADDRESS(sst); for(unsigned short iter_row = 0; iter_row < _DEF_NB_PIXEL_ROW; iter_row++) { - for(unsigned short iter_col = 0; iter_col < _DEF_NB_PIXEL_COL/2; iter_col++) - { - //printf("writing %d\n",ar_u16PixelsRaw[iter_row][iter_col]); - ISET(texRowAddr[iter_col], ar_u16PixelsRaw[iter_row][iter_col]); - } - texRowAddr += (1<<(9-2)); //jump to next line + mmio_fastwrite32( texRowAddr, + (uint32_t*)ar_u16Pixels[iter_row], + _DEF_NB_PIXEL_COL/2); + /* move to next line */ + texRowAddr += (1<<(9-2)); } #ifdef _PROFILING @@ -133,12 +325,14 @@ RenderTest( sst1DeviceInfoStruct* devInfo, clock_t after_check[_NB_CHECK_LOOP]; #endif + clearScreen(sstregs,0x00000000,256,256); + for(unsigned int i = 0; i<_NB_CHECK_LOOP; i++) { - //printf("draw/checking\n"); #ifdef _PROFILING before_draw[i] = clock(); #endif + /* draw a 256x256 square */ drawSquare(sstregs, 0, 0, 256); sst1InitIdle(sst); @@ -147,47 +341,143 @@ RenderTest( sst1DeviceInfoStruct* devInfo, after_draw[i] = clock(); #endif volatile FxU32* pLFB = sst + (SST_LFB_ADDR>>2); - for(unsigned short iter_row = 0; iter_row < _DEF_NB_PIXEL_ROW; iter_row++) + + for(unsigned short iter_row = 0; iter_row < _DEF_NB_PIXEL_ROW; ++iter_row) { //printf("reading row %d\n",iter_row); - for(unsigned short iter_col = 0; iter_col < _DEF_NB_PIXEL_COL; iter_col+=2) - { - const uint32_t u32Data = *pLFB++; - ar_u16PixelsReRead[iter_row][iter_col] = u32Data >> 16; - ar_u16PixelsReRead[iter_row][iter_col+1] = u32Data & 0xFFFF; - - //printf("read: %d\n",u32Data); - } - - pLFB += ((2048)>>2) - ((_DEF_NB_PIXEL_COL*2) >>2) ; - + mmio_fastread32((uint32_t*)&ar_u16PixelsReRead[iter_row], + pLFB, + _DEF_NB_PIXEL_COL/2); + //printf("copy done\n"); + pLFB += ((2048)>>2) ; } + #ifdef _PROFILING after_read[i] = clock(); #endif - for(unsigned short iter_row = 0; iter_row < _DEF_NB_PIXEL_ROW; iter_row++) + + //logI("Pre-Analysing...\n"); + static uint32_t + ar_u32ErrorMark_Lx[_DEF_NB_PIXEL_ROW*_DEF_NB_PIXEL_COL/2]; + for(unsigned int iter = 0; iter < _DEF_NB_PIXEL_ROW*_DEF_NB_PIXEL_COL/2; iter+=2) + { + ar_u32ErrorMark_Lx[iter] + = (*((uint32_t*)ar_u16PixelsReRead+iter)) + ^ (*((uint32_t*)ar_u16Pixels+iter)); + ar_u32ErrorMark_Lx[iter+1] + = (*((uint32_t*)ar_u16PixelsReRead+iter+1)) + ^ (*((uint32_t*)ar_u16Pixels+iter+1)); + } + //logI("Analysing...\n"); + for(unsigned short iter_row = 0; iter_row < _DEF_NB_PIXEL_ROW; ++iter_row) { //printf("checking row %d\n",iter_row); for(unsigned short iter_col = 0; iter_col < _DEF_NB_PIXEL_COL; iter_col+=2) { - if(ar_u16PixelsReRead[iter_row][iter_col] != ar_u16Pixels[iter_row][iter_col]) - {/* - printf("Error pix1 on row %d, col %d: expected %04x, got %04x\n", - iter_row, iter_col, - ar_u16Pixels[iter_row][iter_col], - ar_u16PixelsReRead[iter_row][iter_col]);*/ + //printf("walk\n"); + const uint32_t ErrorMark_Lx = ar_u32ErrorMark_Lx[(iter_row*_DEF_NB_PIXEL_COL+iter_col)/2]; + + if(!ErrorMark_Lx) continue; + + const uint16_t ErrorMark_Lx_n1 = ErrorMark_Lx & 0xFFFF; + const uint16_t ErrorMark_Lx_n2 = ErrorMark_Lx >> 16; + + const def_sFaultSheet* psCurFaultSheet = &sFaultSheet[(int)ucNumTMU][iter_row%2]; + //unsigned char nbBitError = 0; + + if(ErrorMark_Lx & 0x000000FFu) + { + if(ErrorMark_Lx & 0x00000001u) AssignFault(psCurFaultSheet,mem,0,0,0,0,0,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00000002u) AssignFault(psCurFaultSheet,mem,1,1,1,1,0,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00000004u) AssignFault(psCurFaultSheet,mem,2,2,2,2,0,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00000008u) AssignFault(psCurFaultSheet,mem,3,3,3,3,0,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00000010u) AssignFault(psCurFaultSheet,mem,4,4,4,0,0,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00000020u) AssignFault(psCurFaultSheet,mem,5,5,5,1,0,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00000040u) AssignFault(psCurFaultSheet,mem,6,6,6,2,0,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00000080u) AssignFault(psCurFaultSheet,mem,7,7,7,3,0,pFaultSrcCtx); + } + + if(ErrorMark_Lx & 0x0000FF00u) + { + if(ErrorMark_Lx & 0x00000100u) AssignFault(psCurFaultSheet,mem,8,0, 8, 0,1,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00000200u) AssignFault(psCurFaultSheet,mem,9,1, 9, 1,1,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00000400u) AssignFault(psCurFaultSheet,mem,10,2,10,2,1,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00000800u) AssignFault(psCurFaultSheet,mem,11,3,11,3,1,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00001000u) AssignFault(psCurFaultSheet,mem,12,4,12,0,1,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00002000u) AssignFault(psCurFaultSheet,mem,13,5,13,1,1,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00004000u) AssignFault(psCurFaultSheet,mem,14,6,14,2,1,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00008000u) AssignFault(psCurFaultSheet,mem,15,7,15,3,1,pFaultSrcCtx); + } + + if(ErrorMark_Lx & 0x00FF0000u) + { + if(ErrorMark_Lx & 0x00010000u) AssignFault(psCurFaultSheet,mem,16,0,0,0,2,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00020000u) AssignFault(psCurFaultSheet,mem,17,1,1,1,2,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00040000u) AssignFault(psCurFaultSheet,mem,18,2,2,2,2,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00080000u) AssignFault(psCurFaultSheet,mem,19,3,3,3,2,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00100000u) AssignFault(psCurFaultSheet,mem,20,4,4,0,2,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00200000u) AssignFault(psCurFaultSheet,mem,21,5,5,1,2,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00400000u) AssignFault(psCurFaultSheet,mem,22,6,6,2,2,pFaultSrcCtx); + if(ErrorMark_Lx & 0x00800000u) AssignFault(psCurFaultSheet,mem,23,7,7,3,2,pFaultSrcCtx); + } + + if(ErrorMark_Lx & 0xFF000000u) + { + if(ErrorMark_Lx & 0x01000000u) AssignFault(psCurFaultSheet,mem,24,0,8, 0,3,pFaultSrcCtx); + if(ErrorMark_Lx & 0x02000000u) AssignFault(psCurFaultSheet,mem,25,1,9, 1,3,pFaultSrcCtx); + if(ErrorMark_Lx & 0x04000000u) AssignFault(psCurFaultSheet,mem,26,2,10,2,3,pFaultSrcCtx); + if(ErrorMark_Lx & 0x08000000u) AssignFault(psCurFaultSheet,mem,27,3,11,3,3,pFaultSrcCtx); + if(ErrorMark_Lx & 0x10000000u) AssignFault(psCurFaultSheet,mem,28,4,12,0,3,pFaultSrcCtx); + if(ErrorMark_Lx & 0x20000000u) AssignFault(psCurFaultSheet,mem,29,5,13,1,3,pFaultSrcCtx); + if(ErrorMark_Lx & 0x40000000u) AssignFault(psCurFaultSheet,mem,30,6,14,2,3,pFaultSrcCtx); + if(ErrorMark_Lx & 0x80000000u) AssignFault(psCurFaultSheet,mem,31,7,15,3,3,pFaultSrcCtx); + } + + if(ErrorMark_Lx_n1) + { + if(sOptions.eLogLevel >= E_LOGLEVEL__DEBUG) + { + printf("Error pix1 on row %d, col %d: expected %04x, got %04x\n", + iter_row, iter_col, + ar_u16Pixels[iter_row][iter_col], + ar_u16PixelsReRead[iter_row][iter_col]); + } NbErr++; } - if(ar_u16PixelsReRead[iter_row][iter_col+1] != ar_u16Pixels[iter_row][iter_col+1]) - {/* - printf("Error pix2 on row %d, col %d: expected %04x, got %04x\n", - iter_row, iter_col, - ar_u16Pixels[iter_row][iter_col+1], - ar_u16PixelsReRead[iter_row][iter_col+1]);*/ + else + { + if(sOptions.eLogLevel >= E_LOGLEVEL__TRACE) + { + printf("Ok pix1 on row %d, col %d: value %04x\n", + iter_row, iter_col, + ar_u16Pixels[iter_row][iter_col]); + } + } + + if(ErrorMark_Lx_n2) + { + if(sOptions.eLogLevel >= E_LOGLEVEL__DEBUG) + { + printf("Error pix2 on row %d, col %d: expected %04x, got %04x\n", + iter_row, iter_col+1, + ar_u16Pixels[iter_row][iter_col+1], + ar_u16PixelsReRead[iter_row][iter_col+1]); + } NbErr++; } + else + { + if(sOptions.eLogLevel >= E_LOGLEVEL__TRACE) + { + printf("Ok pix2 on row %d, col %d: value %04x\n", + iter_row, iter_col+1, + ar_u16Pixels[iter_row][iter_col+1]); + } + } + } } + //logI("Analysing Done\n"); #ifdef _PROFILING after_check[i] = clock(); #endif @@ -213,7 +503,8 @@ test_TMU_datalines_Huge( sst1DeviceInfoStruct* devInfo, FxU32* sst, SstRegs *sstregs, const unsigned char ucNumTMU, - const unsigned char RamSizeMB) + const unsigned char RamSizeMB, + def_sFaultSourceScoreRec* const pFaultSrcCtx) { typedef struct _def_sMemBlock{ uint32_t ulAddStart; @@ -237,19 +528,19 @@ test_TMU_datalines_Huge( sst1DeviceInfoStruct* devInfo, }; unsigned long long ullNbErrorAll = 0; - - devInfo->tmuInit0[(int)ucNumTMU] = SST_TREXINIT0_DEFAULT ; - + sst1InitIdle(sst); + unsigned long _trexInit0 = IGET(SST_TREX(sstregs,ucNumTMU)->trexInit0); + devInfo->tmuInit0[(int)ucNumTMU] = SST_TREXINIT0_DEFAULT ; ISET(SST_TREX(sstregs,ucNumTMU)->trexInit0, devInfo->tmuInit0[(int)ucNumTMU]); sst1InitIdle(sst); - // set downstream TMUs to passthrough + /* set downstream TMUs to passthrough */ for (int i=0; itextureMode, SST_TC_PASS | SST_TCA_PASS); - + for( int iMemBlock = 0; - iMemBlock <= sizeof(ar_memBlocks)/sizeof(def_sMemBlock); + iMemBlock < sizeof(ar_memBlocks)/sizeof(def_sMemBlock); iMemBlock++) { const def_sMemBlock* pMemBlk = &ar_memBlocks[iMemBlock]; @@ -258,21 +549,40 @@ test_TMU_datalines_Huge( sst1DeviceInfoStruct* devInfo, if(RamSizeMB<2 && pMemBlk->ulAddStart >= 0x100000) continue; //printf("RamSizeMB= %d, ulAddStart=%08x\n", RamSizeMB,pMemBlk->ulAddStart); + putchar('-'); + fflush(stdout); + + //HeatMemAndTMU(devInfo,sst,sstregs,ucNumTMU,pMemBlk->ulAddStart); + + putchar('-'); + fflush(stdout); + for( FxU32 addrTest = pMemBlk->ulAddStart ; addrTest < (pMemBlk->ulAddStart + pMemBlk->ulAddLength); - addrTest += 65536) //256x256x2 (16bit pixels texture) + addrTest += 131072) /* 256x256x2 (16bit pixels texture) */ { //printf("Testing memory block 0x%08x ...\n", addrTest); - ullNbErrorAll += RenderTest( devInfo, + const unsigned long long + ullNbError = RenderTest( devInfo, sst, sstregs, ucNumTMU, - addrTest); + addrTest, + pFaultSrcCtx); + ullNbErrorAll += ullNbError; + if(ullNbError) + putchar('E'); + else + putchar('-'); + fflush(stdout); } } + clearScreen(sstregs,0x00000000,256,256); + /* reset the Init0 register back to its previous value */ sst1InitIdle(sst); + devInfo->tmuInit0[(int)ucNumTMU] = _trexInit0; ISET(SST_TREX(sst,ucNumTMU)->trexInit0, devInfo->tmuInit0[(int)ucNumTMU]); sst1InitIdle(sst); diff --git a/Test_Data_Huge.h b/Test_Data_Huge.h index 1bca16d..0d5f6f4 100644 --- a/Test_Data_Huge.h +++ b/Test_Data_Huge.h @@ -23,6 +23,7 @@ test_TMU_datalines_Huge( sst1DeviceInfoStruct* devInfo, FxU32* sst, SstRegs *sstregs, const unsigned char ucNumTMU, - const unsigned char RamSizeMB); + const unsigned char RamSizeMB, + def_sFaultSourceScoreRec* const pFaultSrcCtx); #endif //_DEF_TEST_DATA_HUGE_H_ diff --git a/Utils.c b/Utils.c index a59b8ec..e01e541 100644 --- a/Utils.c +++ b/Utils.c @@ -54,37 +54,41 @@ printbin32Info( const uint32_t ulVal, ulb); } -uint32_t get_notnull_random() +uint32_t +get_notnull_random() { uint32_t val; do - val = (random() << 1) ^ random(); + val = ((uint32_t)random() << 1) ^ (uint32_t)random(); while(!val); return val; } -uint32_t get_notnull_random_balanced() +uint32_t +get_notnull_random_balanced() { uint32_t val; do - val = (random() << 1) ^ random(); + val = ((uint32_t)random() << 1) ^ (uint32_t)random(); while(count_bit32(val) != 16); return val; } -uint8_t get_notnull8_random_balanced() +uint8_t +get_notnull8_random_balanced() { uint8_t val; static uint8_t prev = 0; do - val = (random() << 1) ^ random(); + val = (uint8_t)random(); while((count_bit8(val) != 4) || (val == prev)); prev = val; return val; } -uint32_t get_notnull_random_balanced_mByte() +uint32_t +get_notnull_random_balanced_mByte() { uint32_t val; static uint32_t prev = 0; diff --git a/Utils.h b/Utils.h index 3e0a6b4..f95acb2 100644 --- a/Utils.h +++ b/Utils.h @@ -56,7 +56,7 @@ static inline unsigned char count_bit32(const uint32_t ulVal) { unsigned char cpt = 0; - for(uint32_t idxBit = 1<<31;idxBit>0;idxBit>>=1) + for(uint32_t idxBit = 0x8000000u; idxBit != 0; idxBit >>= 1) if(ulVal & idxBit) cpt++; return cpt; @@ -66,7 +66,7 @@ static inline unsigned char count_bit8(const uint8_t ulVal) { unsigned char cpt = 0; - for(uint8_t idxBit = 1<<7;idxBit>0;idxBit>>=1) + for(uint8_t idxBit = 0x80u; idxBit != 0; idxBit >>= 1) if(ulVal & idxBit) cpt++; return cpt; @@ -93,4 +93,42 @@ get_notnull8_random_balanced(); uint32_t get_notnull_random_balanced_mByte(); +static inline void +mmio_fastread32(uint32_t * dst, + volatile const uint32_t * src, + size_t words) +{ + while(words>=4) { + dst[0] = src[0]; + dst[1] = src[1]; + dst[2] = src[2]; + dst[3] = src[3]; + words-=4; + src+=4; + dst+=4; + } + while(words--) { + *dst++ = *src++; + } +} + +static inline void +mmio_fastwrite32( volatile uint32_t * dst, + const uint32_t * src, + size_t words) +{ + while(words>=4) { + dst[0] = src[0]; + dst[1] = src[1]; + dst[2] = src[2]; + dst[3] = src[3]; + words-=4; + src+=4; + dst+=4; + } + while(words--) { + *dst++ = *src++; + } +} + #endif //_DEF_UTILS_H_ diff --git a/V2MemTest.h b/V2MemTest.h index b544691..a445d98 100644 --- a/V2MemTest.h +++ b/V2MemTest.h @@ -6,15 +6,18 @@ #define V2MEMTEST__VERSION__PATCH 0 #include +#include typedef enum _def_eTMURamLimit { - E_TMU_RAMSIZE__1MB, - E_TMU_RAMSIZE__2MB, - E_TMU_RAMSIZE__3MB, - E_TMU_RAMSIZE__4MB, - E_TMU_RAMSIZE__AUTO, + E_TMU_RAMSIZE__1MB = 1, + E_TMU_RAMSIZE__2MB = 2, + E_TMU_RAMSIZE__3MB = 3, + E_TMU_RAMSIZE__4MB = 4, + E_TMU_RAMSIZE__AUTO = -1, }def_eTMURamLimit; +#define MAX_TMU 2 + typedef enum _def_eLogLevel { E_LOGLEVEL__ERROR = 0, E_LOGLEVEL__WARNING = 1, @@ -36,10 +39,11 @@ typedef enum _def_eErrorCode { E_ERROR__SST1_INIT, E_ERROR__SST1_GET_INFO, E_ERROR__NOT_ENOUGH_FBI_RAM, + E_ERROR__TMU_NOT_FOUND, + E_ERROR__NO_TMU_SELECTED, E_INVALID_ERROR_CODE, }def_eErrorCode; - extern const char* szErrorMsg[]; typedef struct _def_sOptions @@ -48,16 +52,38 @@ typedef struct _def_sOptions int bSilent; char szLogFileName[2048]; char szTSVFile[2048]; - unsigned short usNumLoops; - unsigned long bTestTMU0; + long lNumLoops; + int bTestTMU0; def_eTMURamLimit eTMU0RamLimit; - unsigned long bTestTMU1; + int bTestTMU1; def_eTMURamLimit eTMU1RamLimit; - unsigned long bTestTMUAddress; - unsigned long bTestTMUData; - unsigned long bTestTMUDataHuge; + int bTestTMUAddress; + int bTestTMUData; + int bTestTMUDataHuge; } def_sOptions; extern def_sOptions sOptions; + +#define logE(...) _log(E_LOGLEVEL__ERROR, __VA_ARGS__) +#define logW(...) _log(E_LOGLEVEL__WARNING, __VA_ARGS__) +#define logI(...) _log(E_LOGLEVEL__INFO, __VA_ARGS__) +#define logD(...) _log(E_LOGLEVEL__DEBUG, __VA_ARGS__) +#define logT(...) _log(E_LOGLEVEL__TRACE, __VA_ARGS__) + + +#define _log(_E_LOGLEVEL,...) \ +do { \ + if( (sOptions.eLogLevel >= _E_LOGLEVEL) \ + && !sOptions.bSilent) {\ + if(_E_LOGLEVEL==E_LOGLEVEL__ERROR) \ + fprintf(stderr,__VA_ARGS__); \ + else \ + printf(__VA_ARGS__); \ + } \ +} \ +while(0) + + + #endif //_DEF_V2MEMTEST_H_ diff --git a/main.c b/main.c index 508f3f4..dfe72f8 100644 --- a/main.c +++ b/main.c @@ -40,17 +40,19 @@ const char* szErrorMsg[] = { - "No Error", // E_ERROR__NO_ERROR - "Unknown Error", // E_ERROR__UNKNOWN_ERROR - "Unknown argument found in command line", // E_ERROR__UNKNOWN_ARGUMENT - "Wrong argument value", // E_ERROR__BAD_ARGUMENT_VALUE - "Error initializing Voodoo² Board", // E_ERROR__SST1_INIT, - "Error getting Voodoo² Board informations.", // E_ERROR__SST1_GET_INFO, - "Not enough FBI RAM to process TMU tests", // E_ERROR__NOT_ENOUGH_FBI_RAM, + "no error.", // E_ERROR__NO_ERROR + "unknown error.", // E_ERROR__UNKNOWN_ERROR + "unknown argument found in command line.", // E_ERROR__UNKNOWN_ARGUMENT + "wrong argument value.", // E_ERROR__BAD_ARGUMENT_VALUE + "error initializing Voodoo² board.", // E_ERROR__SST1_INIT, + "error getting Voodoo² board informations.", // E_ERROR__SST1_GET_INFO, + "not enough FBI RAM to process TMU tests.", // E_ERROR__NOT_ENOUGH_FBI_RAM, + "TMU not found.", // E_ERROR__TMU_NOT_FOUND, + "no TMU selected.", // E_ERROR__NO_TMU_SELECTED, }; const char szTitle[] = - "v2-tmu-memtester-%d.%d.%d - A CLI Tool to test & fix Voodoo² TMU System\n" + "v2-tmu-memtester-%d.%d.%d - A CLI Tool to test & fix Voodoo² TMU System\n" "Copyright (C) 2026 ChaCha\n"; const char szLicence[] = @@ -60,6 +62,13 @@ const char szLicence[] = "This program is distributed in the hope that it will be useful, but WITHOUT ANY\n" "WARRANTY !\n"; +const char szKool[] = + "Oh nooo.... Have fun fixing your Holy Voodoo² !\n" + "Note: Do not forget to sleep though :) !\n"; + +const char szKool2[] = + "Did it just worked ?!\n"; + const char szHelp[] = "Usage: ./v2-tmu-memtester [options]\n" "\n" @@ -73,8 +82,8 @@ const char szHelp[] = "\n" "Verbosity:\n" " -v Increase log level by one step (repeatable).\n" - " Levels: 0=ERR, 1=INFO, 2=WARN, 3=DEBUG, 4=TRACE\n" - " Default: 0 (ERR). Example: -vvv -> DEBUG.\n" + " Levels: 0=ERR, 1=WARN, 2=INFO, 3=DEBUG, 4=TRACE\n" + " Default: 2 (INFO). Example: -v -> DEBUG.\n" "\n" "Target selection:\n" " --tmu0 Enable only tests for TMU0.\n" @@ -94,11 +103,11 @@ const char szHelp[] = " ./v2memtest --tmu0 --tmu1 --data --tmu0-ram 2 --tmu1-ram -1 -n 10\n"; def_sOptions sOptions = { - .eLogLevel = E_LOGLEVEL__ERROR, + .eLogLevel = E_LOGLEVEL__INFO, .bSilent = false, .szLogFileName = {0}, .szTSVFile = {0}, - .usNumLoops = 1, + .lNumLoops = 1, .bTestTMU0 = false, .eTMU0RamLimit = E_TMU_RAMSIZE__AUTO, .bTestTMU1 = false, @@ -120,11 +129,18 @@ static struct option long_args[] = { {"address", no_argument, &sOptions.bTestTMUAddress, true}, {"data", no_argument, &sOptions.bTestTMUData, true}, {"data-huge", no_argument, &sOptions.bTestTMUDataHuge, true}, - {"tmu0-ram", required_argument, NULL, 0}, + {"tmu0-ram", required_argument, NULL, 3}, {"tmu1-ram", required_argument, NULL, 1}, {"version", no_argument, NULL, 2}, }; + +def_sFaultSourceScoreRec +ar_dFaultScores[NB_FAULT_SOURCE]; + +def_sFaultSourceScoreRec +ar_dFaultScores_sorted[NB_FAULT_SOURCE]; + int main(int argc, char **argv) { int Status = 0; @@ -135,18 +151,25 @@ int main(int argc, char **argv) bool bQuit = false; FxU32* sst = NULL; - while((opt=getopt_long(argc,argv,"hvn:e:l:",long_args,&option_index)) != -1) + while((opt=getopt_long(argc,argv,"hvn:t:l:",long_args,&option_index)) != -1) { + //printf("Parse Arg %d, %d\n",option_index,opt); switch(opt) { - case 2: // Version + /* other long options ? */ + case 0: + break; + /* Version */ + case 2: printf("%d.%d.%d", V2MEMTEST__VERSION__MAJOR, V2MEMTEST__VERSION__MINOR, V2MEMTEST__VERSION__PATCH); bQuit = true; break; - case 0: // TMU0 long options - case 1: // TMU1 long options + /* TMU0 long options */ + case 3: + /* TMU1 long options */ + case 1: { def_eTMURamLimit newRAMLimit; switch(strtol(optarg, NULL, 10)) @@ -161,7 +184,7 @@ int main(int argc, char **argv) ErrorCheck_gotoCleanUp(); break; } - if(opt==0) sOptions.eTMU0RamLimit = newRAMLimit; + if(opt==3) sOptions.eTMU0RamLimit = newRAMLimit; else sOptions.eTMU1RamLimit = newRAMLimit; } break; @@ -173,11 +196,11 @@ int main(int argc, char **argv) break; case 'l': - strcpy(sOptions.szLogFileName, optarg); + strncpy(sOptions.szLogFileName, optarg, 2048); break; case 't': - strcpy(sOptions.szTSVFile, optarg); + strncpy(sOptions.szTSVFile, optarg, 2048); break; case 'h': @@ -186,7 +209,12 @@ int main(int argc, char **argv) break; case 'n': - sOptions.usNumLoops = strtol(optarg, NULL, 10); + sOptions.lNumLoops = strtol(optarg, NULL, 10); + if( sOptions.lNumLoops < 0 ) + { + Status = E_ERROR__BAD_ARGUMENT_VALUE; + ErrorCheck_gotoCleanUp(); + } break; case 'v': @@ -224,24 +252,23 @@ int main(int argc, char **argv) SstRegs *sstregs = NULL; - if(!sOptions.bSilent) - { - printf(szTitle, V2MEMTEST__VERSION__MAJOR, - V2MEMTEST__VERSION__MINOR, - V2MEMTEST__VERSION__PATCH); - putchar('\n'); - puts(szLicence); - putchar('\n'); - } + logI(szTitle, V2MEMTEST__VERSION__MAJOR, + V2MEMTEST__VERSION__MINOR, + V2MEMTEST__VERSION__PATCH); + logI("\n"); + logI(szLicence); + logI("\n"); srandom(time(NULL)); - FaultSource_Reset(); - for(int j=0; j<100; j++) + FaultSource_reset(ar_dFaultScores); + + for(long j=0; j < sOptions.lNumLoops; j++) { + logI("# processing loop %ld of %ld\n",j+1,sOptions.lNumLoops); if ((sst = sst1InitMapBoard(boardNum)) == NULL) { - fprintf(stderr, "No Voodoo boards found\n"); + logE("no Voodoo boards found\n"); Status = E_ERROR__SST1_INIT; ErrorCheck_gotoCleanUp(); } @@ -251,28 +278,50 @@ int main(int argc, char **argv) if (sst1InitGetDeviceInfo(sst, &devInfo) == FXFALSE) { - fprintf(stderr, "Couldn't get info for Voodoo # %d\n", boardNum); + logE("couldn't get info for Voodoo # %d\n", boardNum); Status = E_ERROR__SST1_GET_INFO; ErrorCheck_gotoCleanUp(); } - printf("FBI detected Memory: %lu MB\n", devInfo.fbiMemSize); + /* Enabling video output so the Board will + * be configured automatically (FIFO, GRXCLK...)*/ + sst1InitVideo(sst,GR_RESOLUTION_800x600,GR_REFRESH_60Hz,0); + + logI("FBI detected memory:\t%ld MB\n", (unsigned long)devInfo.fbiMemSize); if(devInfo.fbiMemSize < 2) { - fprintf(stderr, "Couldn't test Voodoo2 TMUs without minimum 2MB of FBI memory\n"); + logE("couldn't test Voodoo2 TMUs without minimum 2MB of FBI memory\n"); Status = E_ERROR__NOT_ENOUGH_FBI_RAM; ErrorCheck_gotoCleanUp(); } for (int tmu = 0; tmu < devInfo.numberTmus; tmu++) - { - printf("TMU%d detected Memory: %lu MB\n", tmu, devInfo.tmuMemSize[tmu]); - } + logI("TMU%d detected memory:\t%ld MB\n", tmu, (unsigned long)devInfo.tmuMemSize[tmu]); + + if((sOptions.eTMU0RamLimit >= 0) && (devInfo.numberTmus>=1)) + devInfo.tmuMemSize[0] = sOptions.eTMU0RamLimit; + if((sOptions.eTMU1RamLimit >= 0) && (devInfo.numberTmus==2)) + devInfo.tmuMemSize[1] = sOptions.eTMU1RamLimit; + + for (int tmu = 0; tmu < devInfo.numberTmus; tmu++) + logI("TMU%d tested memory:\t%ld MB\n", tmu, (unsigned long)devInfo.tmuMemSize[tmu]); + putchar('\n'); - /* - bTestTMU0 = true; - bTestTMU1 = true; - */ + + if(sOptions.bTestTMU0 && devInfo.numberTmus<1) + { + logE("TMU0 not Found\n"); + Status = E_ERROR__TMU_NOT_FOUND; + ErrorCheck_gotoCleanUp(); + } + + if(sOptions.bTestTMU1 && devInfo.numberTmus<2) + { + logE("TMU1 not Found\n"); + Status = E_ERROR__TMU_NOT_FOUND; + ErrorCheck_gotoCleanUp(); + } + const bool bTestTMU0 = (devInfo.numberTmus > 0) && (devInfo.tmuMemSize[0] > 0) && sOptions.bTestTMU0; @@ -283,12 +332,13 @@ int main(int argc, char **argv) if(!bTestTMU0 && !bTestTMU1) { - printf("no testable TMU\n"); - goto CleanUp; + logE("no TMU selected.\n"); + Status = E_ERROR__NO_TMU_SELECTED; + ErrorCheck_gotoCleanUp(); } if(bTestTMU1 && !bTestTMU0) { - printf("Warning, testing TMU1 without TMU0 is not recommended !\n"); + logW("/!\\ testing TMU1 without TMU0 is not recommended !\n\n"); } ISET(sstregs->lfbMode, SST_LFB_RGBALANES_ARGB | SST_LFB_READFRONTBUFFER); @@ -299,76 +349,122 @@ int main(int argc, char **argv) for (int tmu = 0; tmu < devInfo.numberTmus; tmu++) { - printf("Testing Board %d, TMU %d, %luMB \n\n",boardNum,tmu,devInfo.tmuMemSize[tmu]); + if((tmu == 0) && !bTestTMU0) continue; + if((tmu == 1) && !bTestTMU1) continue; - puts("# address & control lines test - cumulated"); - for(int j=0;j<100;j++) - { - const unsigned long long err - = RenderTestAddress(&devInfo, - sst, - sstregs, - tmu, - devInfo.tmuMemSize[tmu]); - ullNbErrorAll += err; - putchar( err ? 'E' : '-'); - fflush(stdout); - } - putchar('\n'); + logI("## Testing Board %d, TMU %d, %ldMB \n",boardNum,tmu,(unsigned long)devInfo.tmuMemSize[tmu]); - puts("# data test - single bit move"); - for(int j=0;j<100;j++) - { - const unsigned long long err - = test_TMU_datalines(&devInfo, - sst, - sstregs, - tmu , - 0, //bit shift - devInfo.tmuMemSize[tmu]); - ullNbErrorAll += err; - putchar( err ? 'E' : '-'); - fflush(stdout); + if(sOptions.bTestTMUAddress) + { + unsigned long long err=0; + logI("### address & control lines test - cumulated\n"); + for(int j=0;j<100;j++) + { + err = RenderTestAddress(&devInfo, + sst, + sstregs, + tmu, + devInfo.tmuMemSize[tmu], + ar_dFaultScores); + ullNbErrorAll += err; + logI( err ? "E" : "-"); + fflush(stdout); + } + logI("\n"); + if(err) + { + logW("error detected on address line !\n"); + logW("skiping next tests.\n\n"); + continue; + } } - putchar('\n'); - puts("# data test - random pattern"); - for(int j=0;j<100;j++) - { - const unsigned long long err - = test_TMU_datalines(&devInfo, - sst, - sstregs, - tmu , - 1, // random - devInfo.tmuMemSize[tmu]); - ullNbErrorAll += err; - putchar( err ? 'E' : '-'); - fflush(stdout); + if(sOptions.bTestTMUData) + { + unsigned long long err=0; + logI("### data test - single bit move\n"); + for(int j=0;j<100;j++) + { + err = test_TMU_datalines(&devInfo, + sst, + sstregs, + tmu , + 0, /* bit shift mode */ + devInfo.tmuMemSize[tmu], + ar_dFaultScores); + ullNbErrorAll += err; + logI( err ? "E" : "-"); + fflush(stdout); + } + logI("\n"); + if(err) + { + logW("error detected on data line (single bit move) !\n"); + logW("skiping next tests.\n\n"); + continue; + } + err=0; + logI("### data test - random patterns\n"); + for(int j=0;j<100;j++) + { + err = test_TMU_datalines(&devInfo, + sst, + sstregs, + tmu , + 1, /* random mode */ + devInfo.tmuMemSize[tmu], + ar_dFaultScores); + ullNbErrorAll += err; + logI( err ? "E" : "-"); + fflush(stdout); + } + logI("\n"); + if(err) + { + logW("error detected on data line (random patterns) !\n"); + logW("skiping next tests.\n\n"); + continue; + } } - putchar('\n'); - puts("# data test - huge data"); - for(int j=0;j<10;j++) - { - const unsigned long long err - = test_TMU_datalines_Huge( &devInfo, - sst, - sstregs, - tmu , - devInfo.tmuMemSize[tmu]); - ullNbErrorAll += err; - putchar( err ? 'E' : '-'); - fflush(stdout); + if(sOptions.bTestTMUDataHuge) + { + unsigned long long err=0; + logI("### data test - huge data set\n"); + for(int j=0;j<1;j++) + { + err = test_TMU_datalines_Huge( &devInfo, + sst, + sstregs, + tmu , + devInfo.tmuMemSize[tmu], + ar_dFaultScores); + ullNbErrorAll += err; + logI( err ? "E" : "-"); + fflush(stdout); + } + logI("\n"); + if(err) + { + logW("error detected on data line (huge data set) !\n"); + /*logW("skiping next tests.\n\n"); + continue;*/ + } } - putchar('\n'); + logI("\n"); } } - FaultSource_Sort(); - FaultSource_Display(); + FaultSource_getSorted(ar_dFaultScores_sorted,ar_dFaultScores); + FaultSource_display(ar_dFaultScores_sorted); - printf("Test Complete, ullNbErrorAll = %lld\n",ullNbErrorAll); + logI("Test Complete, ullNbErrorAll = %lld\n",ullNbErrorAll); + logI("\n"); + if(ullNbErrorAll) + logI(szKool); + else + logI(szKool2); + logI("\n"); CleanUp: if(sst)