31 #include "_Reg/IfxMc_bf.h"
41 mc->ECCD.U |= (1 << IFX_MC_ECCD_TRC_OFF);
68 uint32 memSize = dataSize + eccSize;
77 for (mem = 0; mem < numBlocks; ++mem)
81 for (i = 0; i < memSize; ++i)
83 if ((i == eccInvPos0) || (i == eccInvPos1))
85 data |= (1 << bitPos);
92 mc->RDBFL[wordIx++].U = data;
102 mc->RDBFL[wordIx++].U = data;
109 uint16 mcontrolMask = 0x4000;
110 mc->MCONTROL.U = mcontrolMask | (1 << IFX_MC_MCONTROL_DINIT_OFF) | (1 << IFX_MC_MCONTROL_START_OFF);
111 mc->MCONTROL.U = mcontrolMask | (0 << IFX_MC_MCONTROL_DINIT_OFF) | (1 << IFX_MC_MCONTROL_DINIT_OFF);
114 while (!mc->MSTATUS.B.DONE)
128 volatile uint32 *mtuMemtest = (
volatile uint32 *)((
uint32)&MTU_MEMTEST0 + 4 * (mbistSel >> 5));
129 uint32 mask = 1 << (mbistSel & 0x1f);
130 *mtuMemtest &= ~mask;
140 mc->ECCS.U &= ~(1 << IFX_MC_ECCS_TRE_OFF);
144 mc->ECCS.U |= (1 << IFX_MC_ECCS_TRE_OFF);
151 volatile uint32 *mtuMemtest = (
volatile uint32 *)((
uint32)&MTU_MEMTEST0 + 4 * (mbistSel >> 5));
152 uint32 mask = 1 << (mbistSel & 0x1f);
159 uint32 sramAddress = trackedSramAddress.B.ADDR;
160 uint32 mbi = trackedSramAddress.B.MBI;
166 systemAddress = 0x70100000 | ((sramAddress << 3) | ((mbi & 1) << 2));
170 systemAddress = 0x70000000 | ((sramAddress << 4) | ((mbi & 3) << 2));
174 systemAddress = 0x60100000 | ((sramAddress << 4) | ((mbi & 1) << 3));
178 systemAddress = 0x60000000 | ((sramAddress << 4) | ((mbi & 3) << 2));
182 systemAddress = 0x50100000 | ((sramAddress << 4) | ((mbi & 1) << 3));
186 systemAddress = 0x50000000 | ((sramAddress << 4) | ((mbi & 3) << 2));
190 systemAddress = 0xb0000000 | (sramAddress << 3);
194 systemAddress = 0xf0012000 | ((sramAddress << 5) | ((mbi & 3) << 3));
201 return systemAddress;
208 uint8 validFlags = (mc->ECCD.U >> IFX_MC_ECCD_VAL_OFF) & IFX_MC_ECCD_VAL_MSK;
209 uint8 numTrackedAddresses = 0;
212 #if IFX_MC_ECCD_VAL_LEN > IFXMTU_MAX_TRACKED_ADDRESSES
213 # error "Unexpected size of VAL mask"
218 if (validFlags & (1 << i))
220 trackedSramAddresses[numTrackedAddresses].U = mc->ETRR[i].U;
221 ++numTrackedAddresses;
225 return numTrackedAddresses;
231 volatile uint32 *mtuMemstat = (
volatile uint32 *)((
uint32)&MTU_MEMSTAT0 + 4 * (mbistSel >> 5));
232 uint32 mask = 1 << (mbistSel & 0x1f);
233 return (*mtuMemstat & mask) != 0;
256 uint16 mcontrolMask = 0x4000;
257 mc->MCONTROL.U = mcontrolMask | (1 << IFX_MC_MCONTROL_DIR_OFF);
258 mc->CONFIG0.U = (1 << IFX_MC_CONFIG0_NUMACCS_OFF) | (1 << IFX_MC_CONFIG0_ACCSTYPE_OFF);
262 mc->RANGE.U = sramAddress;
265 mc->MCONTROL.U = mcontrolMask | (1 << IFX_MC_MCONTROL_DIR_OFF) | (1 << IFX_MC_MCONTROL_START_OFF);
266 mc->MCONTROL.U = mcontrolMask | (1 << IFX_MC_MCONTROL_DIR_OFF);
269 while (!mc->MSTATUS.B.DONE)
279 uint16 mcontrolMask = 0x4000;
280 mc->MCONTROL.U = mcontrolMask | (1 << IFX_MC_MCONTROL_DIR_OFF);
281 mc->CONFIG0.U = (1 << IFX_MC_CONFIG0_NUMACCS_OFF) | (0 << IFX_MC_CONFIG0_ACCSTYPE_OFF);
285 mc->RANGE.U = sramAddress;
288 mc->MCONTROL.U = mcontrolMask | (1 << IFX_MC_MCONTROL_DIR_OFF) | (1 << IFX_MC_MCONTROL_START_OFF);
289 mc->MCONTROL.U = mcontrolMask | (1 << IFX_MC_MCONTROL_DIR_OFF);
292 while (!mc->MSTATUS.B.DONE)