1 /** @file sys_selftest.h
\r
2 * @brief System Memory Header File
\r
6 * This file contains:
\r
7 * - Efuse Self Test Functions
\r
9 * which are relevant for the System driver.
\r
12 /* (c) Texas Instruments 2009-2012, All rights reserved. */
\r
14 #ifndef __sys_selftest_H__
\r
15 #define __sys_selftest_H__
\r
17 #include "sys_common.h"
\r
18 #include "sys_core.h"
\r
20 #include "sys_vim.h"
\r
28 /* USER CODE BEGIN (0) */
\r
31 #define flash1bitError (*(unsigned int *) 0xF00803F0)
\r
32 #define flash2bitError (*(unsigned int *) 0xF00803F8)
\r
34 #define tcramA1bitError (*(unsigned int *)(0x08400000))
\r
35 #define tcramA2bitError (*(unsigned int *)(0x08400010))
\r
37 #define tcramB1bitError (*(unsigned int *)(0x08400008))
\r
38 #define tcramB2bitError (*(unsigned int *)(0x08400018))
\r
40 #define tcramA1bit (*(unsigned int *)0x08000000)
\r
41 #define tcramA2bit (*(unsigned int *)0x08000010)
\r
43 #define tcramB1bit (*(unsigned int *)0x08000008)
\r
44 #define tcramB2bit (*(unsigned int *)0x08000018)
\r
46 #define flashBadECC (*(unsigned int *)0x20080000)
\r
48 #define CCMSR (*(unsigned int *)0xFFFFF600U)
\r
49 #define CCMKEYR (*(unsigned int *)0xFFFFF604U)
\r
51 #define DMA_PARCR (*(unsigned int *)0xFFFFF1A8U)
\r
52 #define DMA_PARADDR (*(unsigned int *)0xFFFFF1ACU)
\r
54 #define DMARAMLOC (*(unsigned int *)0xFFF80000U)
\r
55 #define DMARAMPARLOC (*(unsigned int *)0xFFF80A00U)
\r
61 * @brief Alias names for pbist Port number
\r
63 * This enumeration is used to provide alias names for the pbist Port number
\r
69 PBIST_PORT0 = 0, /**< Alias for PBIST Port 0 */
\r
70 PBIST_PORT1 = 1 /**< Alias for PBIST Port 1 */
\r
73 * @brief Alias names for pbist Algorithm
\r
75 * This enumeration is used to provide alias names for the pbist Algorithm
\r
76 * - PBIST_TripleReadSlow
\r
77 * - PBIST_TripleReadFast
\r
78 * - PBIST_March13N_DP
\r
79 * - PBIST_March13N_SP
\r
80 * - PBIST_DOWN1a_DP
\r
81 * - PBIST_DOWN1a_SP
\r
82 * - PBIST_MapColumn_DP
\r
83 * - PBIST_MapColumn_SP
\r
84 * - PBIST_Precharge_DP
\r
85 * - PBIST_Precharge_SP
\r
86 * - PBIST_DTXN2a_DP
\r
87 * - PBIST_DTXN2a_SP
\r
88 * - PBIST_PMOSOpen_DP
\r
89 * - PBIST_PMOSOpen_SP
\r
90 * - PBIST_PPMOSOpenSlice1_DP
\r
91 * - PBIST_PPMOSOpenSlice1_SP
\r
92 * - PBIST_PPMOSOpenSlice2_DP
\r
93 * - PBIST_PPMOSOpenSlice2_SP
\r
98 PBIST_TripleReadSlow = 0x00000001,
\r
99 PBIST_TripleReadFast = 0x00000002,
\r
100 PBIST_March13N_DP = 0x00000004,
\r
101 PBIST_March13N_SP = 0x00000008,
\r
102 PBIST_DOWN1a_DP = 0x00000010,
\r
103 PBIST_DOWN1a_SP = 0x00000020,
\r
104 PBIST_MapColumn_DP = 0x00000040,
\r
105 PBIST_MapColumn_SP = 0x00000080,
\r
106 PBIST_Precharge_DP = 0x00000100,
\r
107 PBIST_Precharge_SP = 0x00000200,
\r
108 PBIST_DTXN2a_DP = 0x00000400,
\r
109 PBIST_DTXN2a_SP = 0x00000800,
\r
110 PBIST_PMOSOpen_DP = 0x00001000,
\r
111 PBIST_PMOSOpen_SP = 0x00002000,
\r
112 PBIST_PPMOSOpenSlice1_DP = 0x00004000,
\r
113 PBIST_PPMOSOpenSlice1_SP = 0x00008000,
\r
114 PBIST_PPMOSOpenSlice2_DP = 0x00010000,
\r
115 PBIST_PPMOSOpenSlice2_SP = 0x00020000
\r
118 /* PBIST General Definitions */
\r
120 /** @struct pbistBase
\r
121 * @brief PBIST Base Register Definition
\r
123 * This structure is used to access the PBIST module egisters.
\r
125 /** @typedef pbistBASE_t
\r
126 * @brief PBIST Register Frame Type Definition
\r
128 * This type is used to access the PBIST Registers.
\r
130 typedef volatile struct pbistBase
\r
132 #if ((__little_endian__ == 1) || (__LITTLE_ENDIAN__ == 1)) /* 0x0160: RAM Configuration Register */
\r
133 uint32_t RLS : 2U; /* 0x0160: RAM Latency Select */
\r
134 uint32_t PLS : 4U; /* 0x0160: Pipeline Latency Select */
\r
135 uint32_t SMS : 2U; /* 0x0160: Sense Margin Select Register */
\r
136 uint32_t DWR : 8U; /* 0x0160: Data Width Register */
\r
137 uint32_t RDS : 8U; /* 0x0160: Return Data Select */
\r
138 uint32_t RGS : 8U; /* 0x0160: RAM Group Select */
\r
140 uint32_t RGS : 8U; /* 0x0160: RAM Group Select */
\r
141 uint32_t RDS : 8U; /* 0x0160: Return Data Select */
\r
142 uint32_t DWR : 8U; /* 0x0160: Data Width Register */
\r
143 uint32_t SMS : 2U; /* 0x0160: Sense Margin Select Register */
\r
144 uint32_t PLS : 4U; /* 0x0160: Pipeline Latency Select */
\r
145 uint32_t RLS : 2U; /* 0x0160: RAM Latency Select */
\r
148 uint32_t DLR; /* 0x0164: Datalogger Register */
\r
149 uint32_t : 32U; /* 0x0168 */
\r
150 uint32_t : 32U; /* 0x016C */
\r
151 uint32_t : 32U; /* 0x0170 */
\r
152 uint32_t : 32U; /* 0x0174 */
\r
153 uint32_t : 32U; /* 0x0178 */
\r
154 uint32_t : 32U; /* 0x017C */
\r
155 uint32_t PACT; /* 0x0180: PBIST Activate Register */
\r
156 uint32_t PBISTID; /* 0x0184: PBIST ID Register */
\r
157 uint32_t OVER; /* 0x0188: Override Register */
\r
158 uint32_t : 32U; /* 0x018C */
\r
159 uint32_t FSRF0; /* 0x0190: Fail Status Fail Register 0 */
\r
160 uint32_t FSRF1; /* 0x0194: Fail Status Fail Register 1 */
\r
161 uint32_t FSRC0; /* 0x0198: Fail Status Count Register 0 */
\r
162 uint32_t FSRC1; /* 0x019C: Fail Status Count Register 1 */
\r
163 uint32_t FSRA0; /* 0x01A0: Fail Status Address 0 Register */
\r
164 uint32_t FSRA1; /* 0x01A4: Fail Status Address 1 Register */
\r
165 uint32_t FSRDL0; /* 0x01A8: Fail Status Data Register 0 */
\r
166 uint32_t : 32U; /* 0x01AC */
\r
167 uint32_t FSRDL1; /* 0x01B0: Fail Status Data Register 1 */
\r
168 uint32_t : 32U; /* 0x01B4 */
\r
169 uint32_t : 32U; /* 0x01B8 */
\r
170 uint32_t : 32U; /* 0x01BC */
\r
171 uint32_t ROM; /* 0x01C0: ROM Mask Register */
\r
172 uint32_t ALGO; /* 0x01C4: Algorithm Mask Register */
\r
173 uint32_t RINFOL; /* 0x01C8: RAM Info Mask Lower Register */
\r
174 uint32_t RINFOU; /* 0x01CC: RAM Info Mask Upper Register */
\r
177 #define pbistREG ((pbistBASE_t *)0xFFFFE560U)
\r
179 /* USER CODE BEGIN (1) */
\r
180 /* USER CODE END */
\r
182 /** @fn void memoryPort0TestFailNotification(uint32_t groupSelect, uint32_t dataSelect, uint32_t address, uint32_t data)
\r
183 * @brief Memory Port 0 test fail notification
\r
184 * @param[in] groupSelect Failing Ram group select:
\r
185 * @param[in] dataSelect Failing Ram data select:
\r
186 * @param[in] address Failing Ram offset:
\r
187 * @param[in] data Failing data at address:
\r
189 * @note This function has to be provide by the user.
\r
191 void memoryPort0TestFailNotification(uint32_t groupSelect, uint32_t dataSelect, uint32_t address, uint32_t data);
\r
193 /** @fn void memoryPort1TestFailNotification(uint32_t groupSelect, uint32_t dataSelect, uint32_t address, uint32_t data)
\r
194 * @brief Memory Port 1 test fail notification
\r
195 * @param[in] groupSelect Failing Ram group select:
\r
196 * @param[in] dataSelect Failing Ram data select:
\r
197 * @param[in] address Failing Ram offset:
\r
198 * @param[in] data Failing data at address:
\r
200 * @note This function has to be provide by the user.
\r
202 void memoryPort1TestFailNotification(uint32_t groupSelect, uint32_t dataSelect, uint32_t address, uint32_t data);
\r
209 /* STC General Definitions */
\r
211 /* STC Test Intervals supported in the Device */
\r
212 #define STC_INTERVAL 24
\r
213 #define STC_MAX_TIMEOUT 0xFFFFFFFF
\r
215 /** @struct stcBase
\r
216 * @brief STC Base Register Definition
\r
218 * This structure is used to access the STC module egisters.
\r
220 /** @typedef stcBASE_t
\r
221 * @brief STC Register Frame Type Definition
\r
223 * This type is used to access the STC Registers.
\r
225 typedef volatile struct stcBase
\r
227 uint32_t STCGCR0; /**< 0x0000: STC Control Register 0 */
\r
228 uint32_t STCGCR1; /**< 0x0004: STC Control Register 1 */
\r
229 uint32_t STCTPR; /**< 0x0008: STC Self-Test Run Timeout Counter Preload Register */
\r
230 uint32_t STCCADDR; /**< 0x000C: STC Self-Test Current ROM Address Register */
\r
231 uint32_t STCCICR; /**< 0x0010: STC Self-Test Current Interval Count Register */
\r
232 uint32_t STCGSTAT; /**< 0x0014: STC Self-Test Global Status Register */
\r
233 uint32_t STCFSTAT; /**< 0x0018: STC Self-Test Fail Status Register */
\r
234 uint32_t CPU1_CURMISR3; /**< 0x001C: STC CPU1 Current MISR Register */
\r
235 uint32_t CPU1_CURMISR2; /**< 0x0020: STC CPU1 Current MISR Register */
\r
236 uint32_t CPU1_CURMISR1; /**< 0x0024: STC CPU1 Current MISR Register */
\r
237 uint32_t CPU1_CURMISR0; /**< 0x0028: STC CPU1 Current MISR Register */
\r
238 uint32_t CPU2_CURMISR3; /**< 0x002C: STC CPU1 Current MISR Register */
\r
239 uint32_t CPU2_CURMISR2; /**< 0x0030: STC CPU1 Current MISR Register */
\r
240 uint32_t CPU2_CURMISR1; /**< 0x0034: STC CPU1 Current MISR Register */
\r
241 uint32_t CPU2_CURMISR0; /**< 0x0038: STC CPU1 Current MISR Register */
\r
242 uint32_t STCSCSCR; /**< 0x003C: STC Signature Compare Self-Check Register */
\r
245 #define stcREG ((stcBASE_t *)0xFFFFE600U)
\r
252 typedef volatile struct efcBase
\r
254 unsigned int INSTRUCTION; /* 0x0 INSTRUCTION AN DUMPWORD REGISTER */
\r
255 unsigned int ADDRESS; /* 0x4 ADDRESS REGISTER */
\r
256 unsigned int DATA_UPPER; /* 0x8 DATA UPPER REGISTER */
\r
257 unsigned int DATA_LOWER; /* 0xc DATA LOWER REGISTER */
\r
258 unsigned int SYSTEM_CONFIG; /* 0x10 SYSTEM CONFIG REGISTER */
\r
259 unsigned int SYSTEM_STATUS; /* 0x14 SYSTEM STATUS REGISTER */
\r
260 unsigned int ACCUMULATOR; /* 0x18 ACCUMULATOR REGISTER */
\r
261 unsigned int BOUNDARY; /* 0x1C BOUNDARY REGISTER */
\r
262 unsigned int KEY_FLAG; /* 0x20 KEY FLAG REGISTER */
\r
263 unsigned int KEY; /* 0x24 KEY REGISTER */
\r
264 unsigned int : 32; /* 0x28 RESERVED */
\r
265 unsigned int PINS; /* 0x2C PINS REGISTER */
\r
266 unsigned int CRA; /* 0x30 CRA */
\r
267 unsigned int READ; /* 0x34 READ REGISTER */
\r
268 unsigned int PROGRAMME; /* 0x38 PROGRAMME REGISTER */
\r
269 unsigned int ERROR; /* 0x3C ERROR STATUS REGISTER */
\r
270 unsigned int SINGLE_BIT; /* 0x40 SINGLE BIT ERROR */
\r
271 unsigned int TWO_BIT_ERROR; /* 0x44 DOUBLE BIT ERROR */
\r
272 unsigned int SELF_TEST_CYCLES; /* 0x48 SELF TEST CYCLEX */
\r
273 unsigned int SELF_TEST_SIGN; /* 0x4C SELF TEST SIGNATURE */
\r
276 #define efcREG ((efcBASE_t *)0xFFF8C000U)
\r
278 #define INPUT_ENABLE 0x0000000F
\r
279 #define INPUT_DISABLE 0x00000000
\r
281 #define SYS_WS_READ_STATES 0x00000000
\r
284 #define SYS_REPAIR_EN_0 0x00000000
\r
285 #define SYS_REPAIR_EN_3 0x00000100
\r
286 #define SYS_REPAIR_EN_5 0x00000200
\r
288 #define SYS_DEID_AUTOLOAD_EN 0x00000400
\r
289 #define SYS_DEID_AUTOLOAD_EN 0x00000400
\r
291 #define EFC_FDI_EN 0x00000800
\r
292 #define EFC_FDI_DIS 0x00000000
\r
294 #define SYS_ECC_OVERRIDE_EN 0x00001000
\r
295 #define SYS_ECC_OVERRIDE_DIS 0x00000000
\r
297 #define SYS_ECC_SELF_TEST_EN 0x00002000
\r
298 #define SYS_ECC_SELF_TEST_DIS 0x00000000
\r
300 #define OUTPUT_ENABLE 0x0003C000
\r
301 #define OUTPUT_DISABLE 0x00000000
\r
303 /*********** OUTPUT **************/
\r
305 #define EFC_AUTOLOAD_ERROR_EN 0x00040000
\r
306 #define EFC_INSTRUCTION_ERROR_EN 0x00080000
\r
307 #define EFC_INSTRUCTION_INFO_EN 0x00100000
\r
308 #define EFC_SELF_TEST_ERROR_EN 0x00200000
\r
311 #define EFC_AUTOLOAD_ERROR_DIS 0x00000000
\r
312 #define EFC_INSTRUCTION_ERROR_DIS 0x00000000
\r
313 #define EFC_INSTRUCTION_INFO_DIS 0x00000000
\r
314 #define EFC_SELF_TEST_ERROR_DIS 0x00000000
\r
316 #define DISABLE_READ_ROW0 0x00800000
\r
318 /********************************************************************/
\r
320 #define SYS_REPAIR_0 0x00000010
\r
321 #define SYS_REPAIR_3 0x00000010
\r
322 #define SYS_REPAIR_5 0x00000020
\r
324 #define SYS_DEID_AUTOLOAD 0x00000040
\r
325 #define SYS_FCLRZ 0x00000080
\r
326 #define EFC_READY 0x00000100
\r
327 #define SYS_ECC_OVERRIDE 0x00000200
\r
328 #define EFC_AUTOLOAD_ERROR 0x00000400
\r
329 #define EFC_INSTRUCTION_ERROR 0x00000800
\r
330 #define EFC_INSTRUCTION_INFO 0x00001000
\r
331 #define SYS_ECC_SELF_TEST 0x00002000
\r
332 #define EFC_SELF_TEST_ERROR 0x00004000
\r
333 #define EFC_SELF_TEST_DONE 0x00008000
\r
335 /************** 0x3C error status register ******************************************************/
\r
337 #define TIME_OUT 0x01
\r
338 #define AUTOLOAD_NO_FUSEROM_DATA 0x02
\r
339 #define AUTOLOAD_SIGN_FAIL 0x03
\r
340 #define AUTOLOAD_PROG_INTERRUPT 0x04
\r
341 #define AUTOLOAD_TWO_BIT_ERR 0x05
\r
342 #define PROGRAME_WR_P_SET 0x06
\r
343 #define PROGRAME_MNY_DATA_ITERTN 0x07
\r
344 #define PROGRAME_MNY_CNTR_ITERTN 0x08
\r
345 #define UN_PROGRAME_BIT_SET 0x09
\r
346 #define REDUNDANT_REPAIR_ROW 0x0A
\r
347 #define PROGRAME_MNY_CRA_ITERTN 0x0B
\r
348 #define PROGRAME_SAME_DATA 0x0C
\r
349 #define PROGRAME_CMP_SKIP 0x0D
\r
350 #define PROGRAME_ABORT 0x0E
\r
351 #define PROGRAME_INCORRECT_KEY 0x0F
\r
352 #define FUSEROM_LASTROW_STUCK 0x10
\r
353 #define AUTOLOAD_SINGLE_BIT_ERR 0x15
\r
354 #define DUMPWORD_TWO_BIT_ERR 0x16
\r
355 #define DUMPWORD_ONE_BIT_ERR 0x17
\r
356 #define SELF_TEST_ERROR 0x18
\r
358 #define INSTRUCTION_DONE 0x20
\r
360 /************** Efuse Instruction set ******************************************************/
\r
362 #define TEST_UNPROGRAME_ROM 0x01000000
\r
363 #define PROGRAME_CRA 0x02000000
\r
364 #define DUMP_WORD 0x04000000
\r
365 #define LOAD_FUSE_SCAN_CHAIN 0x05000000
\r
366 #define PROGRAME_DATA 0x07000000
\r
367 #define RUN_AUTOLOAD_8 0x08000000
\r
368 #define RUN_AUTOLOAD_A 0x0A000000
\r
372 /* safety Init Interface Functions */
\r
373 void ccmSelfCheck(void);
\r
374 void ccmFail(unsigned int);
\r
376 void stcSelfCheck(void);
\r
377 void stcSelfCheckFail(void);
\r
378 void cpuSelfTest(unsigned int no_of_intervals, unsigned int max_timeout, boolean_t restart_test);
\r
379 void cpuSelfTestFail(void);
\r
381 void _memoryInit_(uint32_t);
\r
383 void pbistSelfCheck(void);
\r
384 void pbistRun(unsigned int, unsigned int);
\r
385 void pbistStop(void);
\r
386 void pbistSelfCheckFail(void);
\r
387 boolean_t pbistIsTestCompleted(void);
\r
388 boolean_t pbistIsTestPassed(void);
\r
389 boolean_t pbistPortTestStatus(uint32_t port);
\r
391 void efcCheck(void);
\r
392 void efcSelfTest(void);
\r
393 boolean_t efcStuckZeroTest(void);
\r
394 boolean_t checkefcSelfTest(void);
\r
395 void efcClass1Error(void);
\r
396 void efcClass2Error(void);
\r
398 void fmcBus2Check(void);
\r
399 void fmcECCcheck(void);
\r
400 void fmcClass1Error(void);
\r
401 void fmcClass2Error(void);
\r
403 void checkB0RAMECC(void);
\r
404 void checkB1RAMECC(void);
\r
405 void tcramClass1Error(void);
\r
406 void tcramClass2Error(void);
\r
408 void checkFlashECC(void);
\r
409 void flashClass1Error(void);
\r
410 void flashClass2Error(void);
\r
412 void vimParityCheck(void);
\r
413 void dmaParityCheck(void);
\r
414 void adc1ParityCheck(void);
\r
415 void adc2ParityCheck(void);
\r
416 void het1ParityCheck(void);
\r
417 void htu1ParityCheck(void);
\r
418 void het2ParityCheck(void);
\r
419 void htu2ParityCheck(void);
\r
420 void can1ParityCheck(void);
\r
421 void can2ParityCheck(void);
\r
422 void can3ParityCheck(void);
\r
423 void mibspi1ParityCheck(void);
\r
424 void mibspi3ParityCheck(void);
\r
425 void mibspi5ParityCheck(void);
\r
427 /* USER CODE BEGIN (2) */
\r
428 /* USER CODE END */
\r