56 mc->ECCD.U |= (1 << IFX_MC_ECCD_TRC_OFF);
62 uint8 isEndInitEnabled = 0;
95 if (isEndInitEnabled == 1)
140 uint32 memSize = dataSize + eccSize;
148 for (mem = 0; mem < numBlocks; ++mem)
152 for (i = 0; i < memSize; ++i)
154 if ((i == eccInvPos0) || (i == eccInvPos1))
156 data |= (1 << bitPos);
163 mc->RDBFL[wordIx++].U = data;
173 mc->RDBFL[wordIx].U = data;
178 uint16 mcontrolMask = 0x4000;
179 mc->MCONTROL.U = mcontrolMask | (1 << IFX_MC_MCONTROL_DINIT_OFF) | (1 << IFX_MC_MCONTROL_START_OFF);
180 mc->MCONTROL.U = mcontrolMask | (0 << IFX_MC_MCONTROL_DINIT_OFF) | (1 << IFX_MC_MCONTROL_DINIT_OFF);
186 volatile uint32 *mtuMemtest = (
volatile uint32 *)((
uint32)&MTU_MEMTEST0 + 4 * (mbistSel >> 5));
187 uint32 mask = 1 << (mbistSel & 0x1f);
188 *mtuMemtest &= ~mask;
198 mc->ECCS.U &= ~(1 << IFX_MC_ECCS_TRE_OFF);
202 mc->ECCS.U |= (1 << IFX_MC_ECCS_TRE_OFF);
209 volatile uint32 *mtuMemtest = (
volatile uint32 *)((
uint32)&MTU_MEMTEST0 + 4 * (mbistSel >> 5));
210 uint32 mask = 1 << (mbistSel & 0x1f);
217 uint32 sramAddress = trackedSramAddress.B.ADDR;
218 uint32 mbi = trackedSramAddress.B.MBI;
224 systemAddress = 0x70100000 | ((sramAddress << 3) | ((mbi & 1) << 2));
228 systemAddress = 0x70000000 | ((sramAddress << 4) | ((mbi & 3) << 2));
232 systemAddress = 0x60100000 | ((sramAddress << 4) | ((mbi & 1) << 3));
236 systemAddress = 0x60000000 | ((sramAddress << 4) | ((mbi & 3) << 2));
240 systemAddress = 0xf0012000 | ((sramAddress << 5) | ((mbi & 3) << 3));
247 return systemAddress;
254 uint8 validFlags = (mc->ECCD.U >> IFX_MC_ECCD_VAL_OFF) & IFX_MC_ECCD_VAL_MSK;
255 uint8 numTrackedAddresses = 0;
258 #if IFX_MC_ECCD_VAL_LEN > IFXMTU_MAX_TRACKED_ADDRESSES
259 # error "Unexpected size of VAL mask"
264 if (validFlags & (1 << i))
266 trackedSramAddresses[numTrackedAddresses].U = mc->ETRR[i].U;
267 ++numTrackedAddresses;
271 return numTrackedAddresses;
277 volatile uint32 *mtuMemstat = (
volatile uint32 *)((
uint32)&MTU_MEMSTAT0 + 4 * (mbistSel >> 5));
278 uint32 mask = 1 << (mbistSel & 0x1f);
279 return (*mtuMemstat & mask) != 0;
302 status = mc->MSTATUS.U;
303 return (
boolean)(status & 0x01);
312 uint16 mcontrolMask = 0x4000;
313 mc->MCONTROL.U = mcontrolMask | (1 << IFX_MC_MCONTROL_DIR_OFF);
314 mc->CONFIG0.U = (1 << IFX_MC_CONFIG0_NUMACCS_OFF) | (1 << IFX_MC_CONFIG0_ACCSTYPE_OFF);
318 mc->RANGE.U = sramAddress;
321 mc->MCONTROL.U = mcontrolMask | (1 << IFX_MC_MCONTROL_DIR_OFF) | (1 << IFX_MC_MCONTROL_START_OFF);
322 mc->MCONTROL.U = mcontrolMask | (1 << IFX_MC_MCONTROL_DIR_OFF);
325 IfxMtu_waitForMbistDone(256, 1, mbistSel);
340 uint32 configCheckerBoardSequence[4] = {
349 uint8 isEndInitEnabled = 0;
357 isEndInitEnabled = 1;
368 mc->RANGE.U = (rangeSel << 15) | (rangeAddrUp << 7) | (rangeAddrLow << 0);
371 for (testStep = 0; testStep < 4; ++testStep)
373 mc->CONFIG0.U = configCheckerBoardSequence[testStep] & 0x0000FFFF;
374 mc->CONFIG1.U = (configCheckerBoardSequence[testStep] & 0xFFFF0000) >> 16;
375 mc->MCONTROL.U = numberRedundancyLines ? 0x30c9 : 0x00c9;
376 mc->MCONTROL.U = numberRedundancyLines ? 0x30c8 : 0x00c8;
382 IfxMtu_waitForMbistDone(
IfxMtu_sramTable[mbistSel].mbistDelay, 4, mbistSel);
394 if (mc->MSTATUS.B.FAIL)
400 *errorAddr = mc->ETRR[0].U;
414 if (isEndInitEnabled == 1)
430 uint32 configMarchUSequence[6] = {
441 uint8 isEndInitEnabled = 0;
449 isEndInitEnabled = 1;
460 mc->RANGE.U = (rangeSel << 15) | (rangeAddrUp << 7) | (rangeAddrLow << 0);
463 for (testStep = 0; testStep < 6; ++testStep)
465 mc->CONFIG0.U = configMarchUSequence[testStep] & 0x0000FFFF;
466 mc->CONFIG1.U = (configMarchUSequence[testStep] & 0xFFFF0000) >> 16;
467 mc->MCONTROL.U = 0x0209;
468 mc->MCONTROL.B.START = 0;
474 IfxMtu_waitForMbistDone(
IfxMtu_sramTable[mbistSel].mbistDelay, 4, mbistSel);
486 if (mc->MSTATUS.B.FAIL)
492 *errorAddr = mc->ETRR[0].U;
507 if (isEndInitEnabled == 1)
525 uint8 isEndInitEnabled = 0;
533 isEndInitEnabled = 1;
544 mc->CONFIG0.U = 0x4005;
545 mc->CONFIG1.U = 0x5000;
547 mc->RANGE.U = (rangeSel << 15) | (rangeAddrUp << 7) | (rangeAddrLow << 0);
549 mc->MCONTROL.U = 0xF201;
550 mc->MCONTROL.B.START = 0;
555 IfxMtu_waitForMbistDone(
IfxMtu_sramTable[mbistSel].mbistDelay, 4, mbistSel);
567 if (mc->MSTATUS.B.FAIL)
573 *errorAddr = mc->ETRR[0].U;
586 if (isEndInitEnabled == 1)
598 uint32 waitFact = (SCU_CCUCON0.B.SPBDIV / SCU_CCUCON0.B.SRIDIV) * numInstructions;
609 waitFact = waitFact * SCU_CCUCON1.B.GTMDIV;
612 waitFact = waitFact * SCU_CCUCON1.B.GTMDIV;
617 waitFact = waitFact * SCU_CCUCON0.B.BAUD1DIV;
645 waitFact = waitFact * SCU_CCUCON2.B.BBBDIV;
651 if (numInstructions == 4)
653 waitTime = (towerDepth * waitFact) + 30;
657 waitTime = ((towerDepth / 4) * waitFact) + 30;
660 waitTime = waitTime / 3;
672 uint8 isEndInitEnabled = 0;
681 isEndInitEnabled = 1;
685 uint16 mcontrolMask = 0x4000;
686 mc->MCONTROL.U = mcontrolMask | (1 << IFX_MC_MCONTROL_DIR_OFF);
687 mc->CONFIG0.U = (1 << IFX_MC_CONFIG0_NUMACCS_OFF) | (0 << IFX_MC_CONFIG0_ACCSTYPE_OFF);
691 mc->RANGE.U = sramAddress;
694 mc->MCONTROL.U = mcontrolMask | (1 << IFX_MC_MCONTROL_DIR_OFF) | (1 << IFX_MC_MCONTROL_START_OFF);
695 mc->MCONTROL.U = mcontrolMask | (1 << IFX_MC_MCONTROL_DIR_OFF);
697 if (isEndInitEnabled == 1)
704 IfxMtu_waitForMbistDone(
IfxMtu_sramTable[mbistSel].mbistDelay, 1, mbistSel);