implement no-mem test and start validating / tuning with real hardware
This commit is contained in:
116
Test_Data.c
116
Test_Data.c
@@ -14,6 +14,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#define _BSD_SOURCE 1
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
@@ -33,13 +34,14 @@
|
||||
#include "Test_Data.h"
|
||||
|
||||
static unsigned long long
|
||||
RenderTest( sst1DeviceInfoStruct* devInfo,
|
||||
FxU32* sst,
|
||||
SstRegs *sstregs,
|
||||
RenderTest( sst1DeviceInfoStruct * const devInfo,
|
||||
FxU32 * const sst,
|
||||
SstRegs * const sstregs,
|
||||
const char ucNumTMU,
|
||||
const FxU32 mem,
|
||||
const FxU32 value1,
|
||||
const FxU32 value2,
|
||||
const unsigned char RamSizeMB,
|
||||
def_sFaultSourceScoreRec* const pFaultSrcCtx)
|
||||
{
|
||||
unsigned long long NbErr = 0;
|
||||
@@ -51,7 +53,7 @@ RenderTest( sst1DeviceInfoStruct* devInfo,
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->trexInit0, devInfo->tmuInit0[(int)ucNumTMU]);
|
||||
sst1InitIdle(sst);
|
||||
|
||||
ISET(sstregs->texBaseAddr, mem>>3);
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->texBaseAddr, mem>>3);
|
||||
|
||||
/* Writing to first texture line, to use RAM bits 0..31 */
|
||||
volatile FxU32 *texAddr
|
||||
@@ -68,7 +70,7 @@ RenderTest( sst1DeviceInfoStruct* devInfo,
|
||||
clearScreen(sstregs,0x00000000,8,2);
|
||||
|
||||
/* draw a 2x2 rectangle */
|
||||
drawRect(sstregs,0,0,2,2);
|
||||
drawRect(sstregs, ucNumTMU, 0, 0, 2, 2);
|
||||
sst1InitIdle(sst);
|
||||
|
||||
/* reading back first line pixels addresses */
|
||||
@@ -89,8 +91,9 @@ RenderTest( sst1DeviceInfoStruct* devInfo,
|
||||
logD("===========================================================\n");
|
||||
logD( "# fault on 1st line, value : 0x%04X [expected 0x%04X] !\n",
|
||||
value1, L1_1);
|
||||
|
||||
WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0);
|
||||
|
||||
LWordBitFaultSet(pFaultSrcCtx, ErrorMark_L1, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0);
|
||||
LWordBitFaultSet(pFaultSrcCtx, ErrorMark_L1, 1.0 / 16, U3_FBI_TF_DATA_0, U3_FBI_TF_DATA_0);
|
||||
QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1 >> 0, 1.0 / 16, RA10_1);
|
||||
QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1 >> 4, 1.0 / 16, RA11_1);
|
||||
QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L1 >> 8, 1.0 / 16, RA12_1);
|
||||
@@ -102,50 +105,29 @@ RenderTest( sst1DeviceInfoStruct* devInfo,
|
||||
|
||||
if(ucNumTMU == 0)
|
||||
{
|
||||
WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0);
|
||||
LWordBitFaultSet(pFaultSrcCtx, ErrorMark_L1, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0);
|
||||
MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1, dScoreFront, U14, U12);
|
||||
MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1, dScoreBack, U23, U24);
|
||||
WordBitFaultSet(pFaultSrcCtx,ErrorMark_L1, 1.0 / 4, U9_TMU0 + 1, U9_TMU0 + 16 + 1);
|
||||
|
||||
TMUTexDataCtrlFaultSet( pFaultSrcCtx,
|
||||
ErrorMark_L1,
|
||||
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);
|
||||
if(RamSizeMB>2)
|
||||
MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1, dScoreBack, U23, U24);
|
||||
LWordBitFaultSet(pFaultSrcCtx,ErrorMark_L1, 1.0 / 4, U9_TMU0 + 1, U9_TMU0 + 16 + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* during TMU1 test, TMU0 doesnt receive any textures => ignoring these
|
||||
WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1, 1.0 / 2, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0);
|
||||
LWordBitFaultSet(pFaultSrcCtx, ErrorMark_L1, 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(pFaultSrcCtx, ErrorMark_L1, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0);
|
||||
WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131);
|
||||
WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0);
|
||||
WordBitFaultSet(pFaultSrcCtx, ErrorMark_L1, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0);
|
||||
LWordBitFaultSet(pFaultSrcCtx, ErrorMark_L1, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0);
|
||||
LWordBitFaultSet(pFaultSrcCtx, ErrorMark_L1, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131);
|
||||
LWordBitFaultSet(pFaultSrcCtx, ErrorMark_L1, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0);
|
||||
LWordBitFaultSet(pFaultSrcCtx, ErrorMark_L1, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0);
|
||||
MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1, dScoreFront, U13, U11);
|
||||
MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1, dScoreBack, U27, U28);
|
||||
WordBitFaultSet(pFaultSrcCtx,ErrorMark_L1, 1.0 / 4, U8_TMU1 + 1, U8_TMU1 + 16 + 1);
|
||||
|
||||
|
||||
TMUTexDataCtrlFaultSet( pFaultSrcCtx,
|
||||
ErrorMark_L1,
|
||||
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);
|
||||
if(RamSizeMB>2)
|
||||
MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L1, dScoreBack, U27, U28);
|
||||
LWordBitFaultSet(pFaultSrcCtx,ErrorMark_L1, 1.0 / 4, U8_TMU1 + 1, U8_TMU1 + 16 + 1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
logD("## overall fault LW bit-map : \n");
|
||||
if(sOptions.eLogLevel >= E_LOGLEVEL__DEBUG)
|
||||
{
|
||||
@@ -160,8 +142,9 @@ RenderTest( sst1DeviceInfoStruct* devInfo,
|
||||
logD("===========================================================\n");
|
||||
logD( "# fault on 2nd line, value : 0x%04X [expected 0x%04X] !\n",
|
||||
value2, L2_1);
|
||||
|
||||
WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0);
|
||||
|
||||
LWordBitFaultSet(pFaultSrcCtx, ErrorMark_L2, 1.0 / 16, U9_TMU0_TF_DATA_0, U9_TMU0_TF_DATA_0);
|
||||
LWordBitFaultSet(pFaultSrcCtx, ErrorMark_L1, 1.0 / 16, U3_FBI_TF_DATA_0, U3_FBI_TF_DATA_0);
|
||||
QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2 >> 0, 1.0 / 16, RA10_1);
|
||||
QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2 >> 4, 1.0 / 16, RA11_1);
|
||||
QuartetBitFaultSet(pFaultSrcCtx, ErrorMark_L2 >> 8, 1.0 / 16, RA12_1);
|
||||
@@ -173,43 +156,27 @@ RenderTest( sst1DeviceInfoStruct* devInfo,
|
||||
|
||||
if(ucNumTMU == 0)
|
||||
{
|
||||
WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0);
|
||||
LWordBitFaultSet(pFaultSrcCtx, ErrorMark_L2, 1.0 / 16, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0);
|
||||
MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2, dScoreFront, U18, U17);
|
||||
MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2, dScoreBack, U25, U26);
|
||||
WordBitFaultSet(pFaultSrcCtx,ErrorMark_L2, 1.0 / 4, U9_TMU0 + 32 + 1, U9_TMU0 + 48 + 1);
|
||||
|
||||
TMUTexDataCtrlFaultSet( pFaultSrcCtx,
|
||||
ErrorMark_L2,
|
||||
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);
|
||||
if(RamSizeMB>2)
|
||||
MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2, dScoreBack, U25, U26);
|
||||
LWordBitFaultSet(pFaultSrcCtx,ErrorMark_L2, 1.0 / 4, U9_TMU0 + 32 + 1, U9_TMU0 + 48 + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* during TMU1 test, TMU0 doesnt receive any textures => ignoring these
|
||||
WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2, 1.0 / 2, U9_TMU0_FT_DATA_0, U9_TMU0_FT_DATA_0);
|
||||
LWordBitFaultSet(pFaultSrcCtx, ErrorMark_L2, 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(pFaultSrcCtx, ErrorMark_L2, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0);
|
||||
WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131);
|
||||
WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0);
|
||||
WordBitFaultSet(pFaultSrcCtx, ErrorMark_L2, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0);
|
||||
LWordBitFaultSet(pFaultSrcCtx, ErrorMark_L2, 1.0 / 16, U9_TMU0_TT_DATA_0, U9_TMU0_TT_DATA_0);
|
||||
LWordBitFaultSet(pFaultSrcCtx, ErrorMark_L2, 1.0 / 16, TT_TDATA_R131, TT_TDATA_R131);
|
||||
LWordBitFaultSet(pFaultSrcCtx, ErrorMark_L2, 1.0 / 16, U8_TMU1_TF_DATA_0, U8_TMU1_TF_DATA_0);
|
||||
LWordBitFaultSet(pFaultSrcCtx, ErrorMark_L2, 1.0 / 16, U8_TMU1_FT_DATA_0, U8_TMU1_FT_DATA_0);
|
||||
MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2, dScoreFront, U16, U15);
|
||||
MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2, dScoreBack, U29, U30);
|
||||
WordBitFaultSet(pFaultSrcCtx,ErrorMark_L2, 1.0 / 4, U8_TMU1 + 32 + 1, U8_TMU1 + 48 + 1);
|
||||
|
||||
TMUTexDataCtrlFaultSet( pFaultSrcCtx,
|
||||
ErrorMark_L2,
|
||||
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);
|
||||
if(RamSizeMB>2)
|
||||
MemChipDQFaultSet(pFaultSrcCtx, ErrorMark_L2, dScoreBack, U29, U30);
|
||||
LWordBitFaultSet(pFaultSrcCtx,ErrorMark_L2, 1.0 / 4, U8_TMU1 + 32 + 1, U8_TMU1 + 48 + 1);
|
||||
}
|
||||
logD("## overall fault LW bit-map : \n");
|
||||
if(sOptions.eLogLevel >= E_LOGLEVEL__DEBUG)
|
||||
@@ -231,9 +198,9 @@ RenderTest( sst1DeviceInfoStruct* devInfo,
|
||||
}
|
||||
|
||||
unsigned long long
|
||||
test_TMU_datalines( sst1DeviceInfoStruct* devInfo,
|
||||
FxU32* sst,
|
||||
SstRegs *sstregs,
|
||||
test_TMU_datalines( sst1DeviceInfoStruct * const devInfo,
|
||||
FxU32 * const sst,
|
||||
SstRegs * const sstregs,
|
||||
const unsigned char ucNumTMU,
|
||||
const unsigned char bRandom,
|
||||
const unsigned char RamSizeMB,
|
||||
@@ -298,12 +265,13 @@ test_TMU_datalines( sst1DeviceInfoStruct* devInfo,
|
||||
addrTest,
|
||||
bitTest,
|
||||
bitTest2,
|
||||
RamSizeMB,
|
||||
pFaultSrcCtx);
|
||||
ullNbErrorAll += ulNbError;
|
||||
|
||||
if((bRandom && (nloop > 64)) || bitTest == 0)
|
||||
break;
|
||||
|
||||
|
||||
bitTest = bRandom ?
|
||||
get_notnull_random_balanced_mByte()
|
||||
: (bitTest << 1);
|
||||
|
||||
Reference in New Issue
Block a user