sys_selftest.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387
  1. /** @file sys_selftest.h
  2. * @brief System Memory Header File
  3. * @date 29.May.2013
  4. * @version 03.05.02
  5. *
  6. * This file contains:
  7. * - Efuse Self Test Functions
  8. * .
  9. * which are relevant for the System driver.
  10. */
  11. /* (c) Texas Instruments 2009-2013, All rights reserved. */
  12. #ifndef __sys_selftest_H__
  13. #define __sys_selftest_H__
  14. #include "reg_pbist.h"
  15. #include "reg_stc.h"
  16. #include "reg_efc.h"
  17. #include "sys_core.h"
  18. #include "system.h"
  19. #include "sys_vim.h"
  20. #include "adc.h"
  21. #include "can.h"
  22. #include "mibspi.h"
  23. #include "het.h"
  24. #include "htu.h"
  25. #include "esm.h"
  26. /* USER CODE BEGIN (0) */
  27. /* USER CODE END */
  28. #define flash1bitError (*(volatile uint32 *)(0xF00803F0U))
  29. #define flash2bitError (*(volatile uint32 *)(0xF00803F8U))
  30. #define tcramA1bitError (*(volatile uint32 *)(0x08400000U))
  31. #define tcramA2bitError (*(volatile uint32 *)(0x08400010U))
  32. #define tcramB1bitError (*(volatile uint32 *)(0x08400008U))
  33. #define tcramB2bitError (*(volatile uint32 *)(0x08400018U))
  34. #define tcramA1bit (*(volatile uint32 *)(0x08000000U))
  35. #define tcramA2bit (*(volatile uint32 *)(0x08000010U))
  36. #define tcramB1bit (*(volatile uint32 *)(0x08000008U))
  37. #define tcramB2bit (*(volatile uint32 *)(0x08000018U))
  38. #define flashBadECC (*(volatile uint32 *)(0x20040000U))
  39. #define CCMSR (*(volatile uint32 *)(0xFFFFF600U))
  40. #define CCMKEYR (*(volatile uint32 *)(0xFFFFF604U))
  41. #define DMA_PARCR (*(volatile uint32 *)(0xFFFFF1A8U))
  42. #define DMA_PARADDR (*(volatile uint32 *)(0xFFFFF1ACU))
  43. #define DMARAMLOC (*(volatile uint32 *)(0xFFF80000U))
  44. #define DMARAMPARLOC (*(volatile uint32 *)(0xFFF80A00U))
  45. #ifndef __PBIST_H__
  46. #define __PBIST_H__
  47. /** @enum pbistPort
  48. * @brief Alias names for pbist Port number
  49. *
  50. * This enumeration is used to provide alias names for the pbist Port number
  51. * - PBIST_PORT0
  52. * - PBIST_PORT1
  53. */
  54. enum pbistPort
  55. {
  56. PBIST_PORT0 = 0U, /**< Alias for PBIST Port 0 */
  57. PBIST_PORT1 = 1U /**< Alias for PBIST Port 1 */
  58. };
  59. /** @enum pbistAlgo
  60. * @brief Alias names for pbist Algorithm
  61. *
  62. * This enumeration is used to provide alias names for the pbist Algorithm
  63. * - PBIST_TripleReadSlow
  64. * - PBIST_TripleReadFast
  65. * - PBIST_March13N_DP
  66. * - PBIST_March13N_SP
  67. * - PBIST_DOWN1a_DP
  68. * - PBIST_DOWN1a_SP
  69. * - PBIST_MapColumn_DP
  70. * - PBIST_MapColumn_SP
  71. * - PBIST_Precharge_DP
  72. * - PBIST_Precharge_SP
  73. * - PBIST_DTXN2a_DP
  74. * - PBIST_DTXN2a_SP
  75. * - PBIST_PMOSOpen_DP
  76. * - PBIST_PMOSOpen_SP
  77. * - PBIST_PPMOSOpenSlice1_DP
  78. * - PBIST_PPMOSOpenSlice1_SP
  79. * - PBIST_PPMOSOpenSlice2_DP
  80. * - PBIST_PPMOSOpenSlice2_SP
  81. */
  82. enum pbistAlgo
  83. {
  84. PBIST_TripleReadSlow = 0x00000001U,
  85. PBIST_TripleReadFast = 0x00000002U,
  86. PBIST_March13N_DP = 0x00000004U,
  87. PBIST_March13N_SP = 0x00000008U,
  88. PBIST_DOWN1a_DP = 0x00000010U,
  89. PBIST_DOWN1a_SP = 0x00000020U,
  90. PBIST_MapColumn_DP = 0x00000040U,
  91. PBIST_MapColumn_SP = 0x00000080U,
  92. PBIST_Precharge_DP = 0x00000100U,
  93. PBIST_Precharge_SP = 0x00000200U,
  94. PBIST_DTXN2a_DP = 0x00000400U,
  95. PBIST_DTXN2a_SP = 0x00000800U,
  96. PBIST_PMOSOpen_DP = 0x00001000U,
  97. PBIST_PMOSOpen_SP = 0x00002000U,
  98. PBIST_PPMOSOpenSlice1_DP = 0x00004000U,
  99. PBIST_PPMOSOpenSlice1_SP = 0x00008000U,
  100. PBIST_PPMOSOpenSlice2_DP = 0x00010000U,
  101. PBIST_PPMOSOpenSlice2_SP = 0x00020000U
  102. };
  103. /* PBIST configuration registers */
  104. typedef struct pbist_config_reg
  105. {
  106. uint32 CONFIG_RAMT;
  107. uint32 CONFIG_DLR;
  108. uint32 CONFIG_PACT;
  109. uint32 CONFIG_PBISTID;
  110. uint32 CONFIG_OVER;
  111. uint32 CONFIG_FSRDL1;
  112. uint32 CONFIG_ROM;
  113. uint32 CONFIG_ALGO;
  114. uint32 CONFIG_RINFOL;
  115. uint32 CONFIG_RINFOU;
  116. } pbist_config_reg_t;
  117. /* PBIST congiruration registers initial value */
  118. #define PBIST_RAMT_CONFIGVALUE 0U
  119. #define PBIST_DLR_CONFIGVALUE 0U
  120. #define PBIST_PACT_CONFIGVALUE 0U
  121. #define PBIST_PBISTID_CONFIGVALUE 0U
  122. #define PBIST_OVER_CONFIGVALUE 0U
  123. #define PBIST_FSRDL1_CONFIGVALUE 0U
  124. #define PBIST_ROM_CONFIGVALUE 0U
  125. #define PBIST_ALGO_CONFIGVALUE 0U
  126. #define PBIST_RINFOL_CONFIGVALUE 0U
  127. #define PBIST_RINFOU_CONFIGVALUE 0U
  128. /* USER CODE BEGIN (1) */
  129. /* USER CODE END */
  130. /** @fn void memoryPort0TestFailNotification(uint32 groupSelect, uint32 dataSelect, uint32 address, uint32 data)
  131. * @brief Memory Port 0 test fail notification
  132. * @param[in] groupSelect Failing Ram group select:
  133. * @param[in] dataSelect Failing Ram data select:
  134. * @param[in] address Failing Ram offset:
  135. * @param[in] data Failing data at address:
  136. *
  137. * @note This function has to be provide by the user.
  138. */
  139. void memoryPort0TestFailNotification(uint32 groupSelect, uint32 dataSelect, uint32 address, uint32 data);
  140. /** @fn void memoryPort1TestFailNotification(uint32 groupSelect, uint32 dataSelect, uint32 address, uint32 data)
  141. * @brief Memory Port 1 test fail notification
  142. * @param[in] groupSelect Failing Ram group select:
  143. * @param[in] dataSelect Failing Ram data select:
  144. * @param[in] address Failing Ram offset:
  145. * @param[in] data Failing data at address:
  146. *
  147. * @note This function has to be provide by the user.
  148. */
  149. void memoryPort1TestFailNotification(uint32 groupSelect, uint32 dataSelect, uint32 address, uint32 data);
  150. void pbistGetConfigValue(pbist_config_reg_t *config_reg, config_value_type_t type);
  151. #endif
  152. #ifndef __STC_H__
  153. #define __STC_H__
  154. /* STC General Definitions */
  155. /* STC Test Intervals supported in the Device */
  156. #define STC_INTERVAL 24U
  157. #define STC_MAX_TIMEOUT 0xFFFFFFFFU
  158. /* Configuration registers */
  159. typedef struct stc_config_reg
  160. {
  161. uint32 CONFIG_STCGCR0;
  162. uint32 CONFIG_STCGCR1;
  163. uint32 CONFIG_STCTPR;
  164. uint32 CONFIG_STCSCSCR;
  165. } stc_config_reg_t;
  166. /* Configuration registers initial value */
  167. #define STC_STCGCR0_CONFIGVALUE 0xFFFF0000U
  168. #define STC_STCGCR1_CONFIGVALUE 0x5U
  169. #define STC_STCTPR_CONFIGVALUE 0xFFFFFFFFU
  170. #define STC_STCSCSCR_CONFIGVALUE 0x5U
  171. void stcGetConfigValue(stc_config_reg_t *config_reg, config_value_type_t type);
  172. #endif
  173. #ifndef __EFC_H__
  174. #define __EFC_H__
  175. #define INPUT_ENABLE 0x0000000FU
  176. #define INPUT_DISABLE 0x00000000U
  177. #define SYS_WS_READ_STATES 0x00000000U
  178. #define SYS_REPAIR_EN_0 0x00000000U
  179. #define SYS_REPAIR_EN_3 0x00000100U
  180. #define SYS_REPAIR_EN_5 0x00000200U
  181. #define SYS_DEID_AUTOLOAD_EN 0x00000400U
  182. #define EFC_FDI_EN 0x00000800U
  183. #define EFC_FDI_DIS 0x00000000U
  184. #define SYS_ECC_OVERRIDE_EN 0x00001000U
  185. #define SYS_ECC_OVERRIDE_DIS 0x00000000U
  186. #define SYS_ECC_SELF_TEST_EN 0x00002000U
  187. #define SYS_ECC_SELF_TEST_DIS 0x00000000U
  188. #define OUTPUT_ENABLE 0x0003C000U
  189. #define OUTPUT_DISABLE 0x00000000U
  190. /*********** OUTPUT **************/
  191. #define EFC_AUTOLOAD_ERROR_EN 0x00040000U
  192. #define EFC_INSTRUCTION_ERROR_EN 0x00080000U
  193. #define EFC_INSTRUCTION_INFO_EN 0x00100000U
  194. #define EFC_SELF_TEST_ERROR_EN 0x00200000U
  195. #define EFC_AUTOLOAD_ERROR_DIS 0x00000000U
  196. #define EFC_INSTRUCTION_ERROR_DIS 0x00000000U
  197. #define EFC_INSTRUCTION_INFO_DIS 0x00000000U
  198. #define EFC_SELF_TEST_ERROR_DIS 0x00000000U
  199. #define DISABLE_READ_ROW0 0x00800000U
  200. /********************************************************************/
  201. #define SYS_REPAIR_0 0x00000010U
  202. #define SYS_REPAIR_3 0x00000010U
  203. #define SYS_REPAIR_5 0x00000020U
  204. #define SYS_DEID_AUTOLOAD 0x00000040U
  205. #define SYS_FCLRZ 0x00000080U
  206. #define EFC_READY 0x00000100U
  207. #define SYS_ECC_OVERRIDE 0x00000200U
  208. #define EFC_AUTOLOAD_ERROR 0x00000400U
  209. #define EFC_INSTRUCTION_ERROR 0x00000800U
  210. #define EFC_INSTRUCTION_INFO 0x00001000U
  211. #define SYS_ECC_SELF_TEST 0x00002000U
  212. #define EFC_SELF_TEST_ERROR 0x00004000U
  213. #define EFC_SELF_TEST_DONE 0x00008000U
  214. /************** 0x3C error status register ******************************************************/
  215. #define TIME_OUT 0x01
  216. #define AUTOLOAD_NO_FUSEROM_DATA 0x02U
  217. #define AUTOLOAD_SIGN_FAIL 0x03U
  218. #define AUTOLOAD_PROG_INTERRUPT 0x04U
  219. #define AUTOLOAD_TWO_BIT_ERR 0x05U
  220. #define PROGRAME_WR_P_SET 0x06U
  221. #define PROGRAME_MNY_DATA_ITERTN 0x07U
  222. #define PROGRAME_MNY_CNTR_ITERTN 0x08U
  223. #define UN_PROGRAME_BIT_SET 0x09U
  224. #define REDUNDANT_REPAIR_ROW 0x0AU
  225. #define PROGRAME_MNY_CRA_ITERTN 0x0BU
  226. #define PROGRAME_SAME_DATA 0x0CU
  227. #define PROGRAME_CMP_SKIP 0x0DU
  228. #define PROGRAME_ABORT 0x0EU
  229. #define PROGRAME_INCORRECT_KEY 0x0FU
  230. #define FUSEROM_LASTROW_STUCK 0x10U
  231. #define AUTOLOAD_SINGLE_BIT_ERR 0x15U
  232. #define DUMPWORD_TWO_BIT_ERR 0x16U
  233. #define DUMPWORD_ONE_BIT_ERR 0x17U
  234. #define SELF_TEST_ERROR 0x18U
  235. #define INSTRUCTION_DONE 0x20U
  236. /************** Efuse Instruction set ******************************************************/
  237. #define TEST_UNPROGRAME_ROM 0x01000000U
  238. #define PROGRAME_CRA 0x02000000U
  239. #define DUMP_WORD 0x04000000U
  240. #define LOAD_FUSE_SCAN_CHAIN 0x05000000U
  241. #define PROGRAME_DATA 0x07000000U
  242. #define RUN_AUTOLOAD_8 0x08000000U
  243. #define RUN_AUTOLOAD_A 0x0A000000U
  244. /* Configuration registers */
  245. typedef struct efc_config_reg
  246. {
  247. uint32 CONFIG_BOUNDARY;
  248. uint32 CONFIG_PINS;
  249. uint32 CONFIG_SELFTESTCYCLES;
  250. uint32 CONFIG_SELFTESTSIGN;
  251. }efc_config_reg_t;
  252. /* Configuration registers initial value */
  253. #define EFC_BOUNDARY_CONFIGVALUE 0x0000200FU
  254. #define EFC_PINS_CONFIGVALUE 0x000082E0U
  255. #define EFC_SELFTESTCYCLES_CONFIGVALUE 0x00000258U
  256. #define EFC_SELFTESTSIGN_CONFIGVALUE 0x5362F97FU
  257. void efcGetConfigValue(efc_config_reg_t *config_reg, config_value_type_t type);
  258. #endif
  259. /* safety Init Interface Functions */
  260. void ccmSelfCheck(void);
  261. void ccmFail(uint32 x);
  262. void stcSelfCheck(void);
  263. void stcSelfCheckFail(void);
  264. void cpuSelfTest(uint32 no_of_intervals, uint32 max_timeout, boolean restart_test);
  265. void cpuSelfTestFail(void);
  266. void memoryInit(uint32 ram);
  267. void pbistSelfCheck(void);
  268. void pbistRun(uint32 raminfoL, uint32 algomask);
  269. void pbistStop(void);
  270. void pbistSelfCheckFail(void);
  271. boolean pbistIsTestCompleted(void);
  272. boolean pbistIsTestPassed(void);
  273. boolean pbistPortTestStatus(uint32 port);
  274. void efcCheck(void);
  275. void efcSelfTest(void);
  276. boolean efcStuckZeroTest(void);
  277. boolean checkefcSelfTest(void);
  278. void efcClass1Error(void);
  279. void efcClass2Error(void);
  280. void fmcBus2Check(void);
  281. void fmcECCcheck(void);
  282. void fmcClass1Error(void);
  283. void fmcClass2Error(void);
  284. void checkB0RAMECC(void);
  285. void checkB1RAMECC(void);
  286. void tcramClass1Error(void);
  287. void tcramClass2Error(void);
  288. void checkFlashECC(void);
  289. void flashClass1Error(void);
  290. void flashClass2Error(void);
  291. void vimParityCheck(void);
  292. void dmaParityCheck(void);
  293. void adc1ParityCheck(void);
  294. void adc2ParityCheck(void);
  295. void het1ParityCheck(void);
  296. void htu1ParityCheck(void);
  297. void het2ParityCheck(void);
  298. void htu2ParityCheck(void);
  299. void can1ParityCheck(void);
  300. void can2ParityCheck(void);
  301. void can3ParityCheck(void);
  302. void mibspi1ParityCheck(void);
  303. void mibspi3ParityCheck(void);
  304. void mibspi5ParityCheck(void);
  305. /* USER CODE BEGIN (2) */
  306. /* USER CODE END */
  307. /* Configuration registers */
  308. typedef struct ccmr4_config_reg
  309. {
  310. uint32 CONFIG_CCMKEYR;
  311. }ccmr4_config_reg_t;
  312. /* Configuration registers initial value */
  313. #define CCMR4_CCMKEYR_CONFIGVALUE 0U
  314. void ccmr4GetConfigValue(ccmr4_config_reg_t *config_reg, config_value_type_t type);
  315. #endif