]> rtime.felk.cvut.cz Git - pes-rpp/rpp-test-sw.git/blob - include/sys_selftest.h
a471eee69c07e09330fd7925d023e6bd576c0c5f
[pes-rpp/rpp-test-sw.git] / include / sys_selftest.h
1 /** @file sys_selftest.h\r
2 *   @brief System Memory Header File\r
3 *   @date 15.Mar.2012\r
4 *   @version 03.01.00\r
5 *   \r
6 *   This file contains:\r
7 *   - Efuse Self Test Functions\r
8 *   .\r
9 *   which are relevant for the System driver.\r
10 */\r
11 \r
12 /* (c) Texas Instruments 2009-2012, All rights reserved. */\r
13 \r
14 #ifndef __sys_selftest_H__\r
15 #define __sys_selftest_H__\r
16 \r
17 #include "sys_common.h"\r
18 #include "sys_core.h"\r
19 #include "system.h"\r
20 #include "sys_vim.h"\r
21 #include "adc.h"\r
22 #include "can.h"\r
23 #include "mibspi.h"\r
24 #include "het.h"\r
25 #include "htu.h"\r
26 #include "esm.h"\r
27 \r
28 /* USER CODE BEGIN (0) */\r
29 /* USER CODE END */\r
30 \r
31 #define flash1bitError  (*(unsigned int *) 0xF00803F0)\r
32 #define flash2bitError  (*(unsigned int *) 0xF00803F8)\r
33 \r
34 #define tcramA1bitError (*(unsigned int *)(0x08400000))\r
35 #define tcramA2bitError (*(unsigned int *)(0x08400010))\r
36 \r
37 #define tcramB1bitError (*(unsigned int *)(0x08400008))\r
38 #define tcramB2bitError (*(unsigned int *)(0x08400018))\r
39 \r
40 #define tcramA1bit              (*(unsigned int *)0x08000000)\r
41 #define tcramA2bit              (*(unsigned int *)0x08000010)\r
42 \r
43 #define tcramB1bit              (*(unsigned int *)0x08000008)\r
44 #define tcramB2bit              (*(unsigned int *)0x08000018)\r
45 \r
46 #define flashBadECC             (*(unsigned int *)0x20080000)\r
47 \r
48 #define CCMSR                   (*(unsigned int *)0xFFFFF600U)\r
49 #define CCMKEYR                 (*(unsigned int *)0xFFFFF604U)\r
50 \r
51 #define DMA_PARCR               (*(unsigned int *)0xFFFFF1A8U)\r
52 #define DMA_PARADDR             (*(unsigned int *)0xFFFFF1ACU)\r
53 \r
54 #define DMARAMLOC               (*(unsigned int *)0xFFF80000U)\r
55 #define DMARAMPARLOC    (*(unsigned int *)0xFFF80A00U)\r
56 \r
57 #ifndef __PBIST_H__\r
58 #define __PBIST_H__\r
59 \r
60 /** @enum pbistPort\r
61 *   @brief Alias names for pbist Port number\r
62 *\r
63 *   This enumeration is used to provide alias names for the pbist Port number\r
64 *     - PBIST_PORT0\r
65 *     - PBIST_PORT1\r
66 */\r
67 enum pbistPort\r
68 {\r
69     PBIST_PORT0 = 0, /**< Alias for PBIST Port 0 */\r
70     PBIST_PORT1 = 1  /**< Alias for PBIST Port 1 */\r
71 };\r
72 /** @enum pbistAlgo\r
73 *   @brief Alias names for pbist Algorithm\r
74 *\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
94 \r
95 */\r
96 enum pbistAlgo\r
97 {\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
116 };\r
117 \r
118 /* PBIST General Definitions */\r
119 \r
120 /** @struct pbistBase\r
121 *   @brief PBIST Base Register Definition\r
122 *\r
123 *   This structure is used to access the PBIST module egisters.\r
124 */\r
125 /** @typedef pbistBASE_t\r
126 *   @brief PBIST Register Frame Type Definition\r
127 *\r
128 *   This type is used to access the PBIST Registers.\r
129 */\r
130 typedef volatile struct pbistBase\r
131 {\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
139 #else\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
146 #endif\r
147 \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
175 } pbistBASE_t;\r
176 \r
177 #define pbistREG   ((pbistBASE_t *)0xFFFFE560U)\r
178 \r
179 /* USER CODE BEGIN (1) */\r
180 /* USER CODE END */\r
181 \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
188 *\r
189 *   @note This function has to be provide by the user.\r
190 */\r
191 void memoryPort0TestFailNotification(uint32_t groupSelect, uint32_t dataSelect, uint32_t address, uint32_t data);\r
192 \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
199 *\r
200 *   @note This function has to be provide by the user.\r
201 */\r
202 void memoryPort1TestFailNotification(uint32_t groupSelect, uint32_t dataSelect, uint32_t address, uint32_t data);\r
203 \r
204 #endif\r
205 \r
206 #ifndef __STC_H__\r
207 #define __STC_H__\r
208 \r
209 /* STC General Definitions */\r
210 \r
211 /* STC Test Intervals supported in the Device */\r
212 #define STC_INTERVAL 24\r
213 #define STC_MAX_TIMEOUT 0xFFFFFFFF\r
214 \r
215 /** @struct stcBase\r
216 *   @brief STC Base Register Definition\r
217 *\r
218 *   This structure is used to access the STC module egisters.\r
219 */\r
220 /** @typedef stcBASE_t\r
221 *   @brief STC Register Frame Type Definition\r
222 *\r
223 *   This type is used to access the STC Registers.\r
224 */\r
225 typedef volatile struct stcBase\r
226 {\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
243 } stcBASE_t;\r
244 \r
245 #define stcREG   ((stcBASE_t *)0xFFFFE600U)\r
246 \r
247 #endif\r
248 \r
249 #ifndef __EFC_H__\r
250 #define __EFC_H__\r
251 \r
252 typedef volatile struct efcBase\r
253 {\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
274 } efcBASE_t;\r
275 \r
276 #define efcREG   ((efcBASE_t *)0xFFF8C000U)\r
277 \r
278 #define INPUT_ENABLE         0x0000000F\r
279 #define INPUT_DISABLE        0x00000000\r
280 \r
281 #define SYS_WS_READ_STATES   0x00000000\r
282 \r
283 \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
287 \r
288 #define SYS_DEID_AUTOLOAD_EN 0x00000400\r
289 #define SYS_DEID_AUTOLOAD_EN 0x00000400\r
290 \r
291 #define EFC_FDI_EN            0x00000800\r
292 #define EFC_FDI_DIS           0x00000000\r
293 \r
294 #define SYS_ECC_OVERRIDE_EN   0x00001000\r
295 #define SYS_ECC_OVERRIDE_DIS  0x00000000\r
296 \r
297 #define SYS_ECC_SELF_TEST_EN  0x00002000\r
298 #define SYS_ECC_SELF_TEST_DIS 0x00000000\r
299 \r
300 #define OUTPUT_ENABLE         0x0003C000\r
301 #define OUTPUT_DISABLE        0x00000000\r
302 \r
303 /*********** OUTPUT **************/\r
304 \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
309 \r
310 \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
315 \r
316 #define DISABLE_READ_ROW0         0x00800000\r
317 \r
318 /********************************************************************/\r
319 \r
320 #define SYS_REPAIR_0         0x00000010\r
321 #define SYS_REPAIR_3         0x00000010\r
322 #define SYS_REPAIR_5         0x00000020\r
323 \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
334 \r
335 /**************   0x3C error status register ******************************************************/\r
336 \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
357 \r
358 #define INSTRUCTION_DONE              0x20\r
359 \r
360 /**************   Efuse Instruction set ******************************************************/\r
361 \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
369 \r
370 #endif\r
371 \r
372 /* safety Init Interface Functions */\r
373 void ccmSelfCheck(void);\r
374 void ccmFail(unsigned int);\r
375 \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
380 \r
381 void _memoryInit_(uint32_t);\r
382 \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
390 \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
397 \r
398 void fmcBus2Check(void);\r
399 void fmcECCcheck(void);\r
400 void fmcClass1Error(void);\r
401 void fmcClass2Error(void);\r
402 \r
403 void checkB0RAMECC(void);\r
404 void checkB1RAMECC(void);\r
405 void tcramClass1Error(void);\r
406 void tcramClass2Error(void);\r
407 \r
408 void checkFlashECC(void);\r
409 void flashClass1Error(void);\r
410 void flashClass2Error(void);\r
411 \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
426 \r
427 /* USER CODE BEGIN (2) */\r
428 /* USER CODE END */\r
429 \r
430 #endif\r