source: rtems/c/src/lib/libbsp/arm/tms570/hwinit/tms570_selftest_parity.c @ 29430a3

5
Last change on this file since 29430a3 was 29430a3, checked in by Pavel Pisa <pisa@…>, on 09/22/16 at 07:50:59

arm/tms570: include hardware initialization and selftest based on Ti HalCoGen? generated files.

The configuration is specific for TMS570LS3137 based HDK.
Pins configuration can be easily changed in

rtems/c/src/lib/libbsp/arm/tms570/hwinit/init_pinmux.c

file.

The list tms570_selftest_par_list in the file

rtems/c/src/lib/libbsp/arm/tms570/hwinit/bspstarthooks-hwinit.c

specifies peripherals which health status is examined
by parity self-test at BSP start-up. It can be easily
modified for other TMS570 family members variants same
as the selection of other tests in bspstarthooks-hwinit.c.

  • Property mode set to 100644
File size: 8.4 KB
Line 
1/**
2 * @file tms570_selftest_parity.c
3 *
4 * @ingroup tms570
5 *
6 * @brief Check of module parity based protection logic to work.
7 */
8/*
9 * Copyright (c) 2016 Pavel Pisa <pisa@cmp.felk.cvut.cz>
10 *
11 * Czech Technical University in Prague
12 * Zikova 1903/4
13 * 166 36 Praha 6
14 * Czech Republic
15 *
16 * The license and distribution terms for this file may be
17 * found in the file LICENSE in this distribution or at
18 * http://www.rtems.org/license/LICENSE.
19 */
20
21#include <stdint.h>
22#include <stddef.h>
23#include <bsp/tms570.h>
24#include <rtems.h>
25#include "tms570_selftest.h"
26#include "tms570_selftest_parity.h"
27
28/* HCG:het1ParityCheck */
29const tms570_selftest_par_desc_t
30  tms570_selftest_par_het1_desc = {
31  .esm_prim_grp  = 1,
32  .esm_prim_chan = 7,
33  .esm_sec_grp   = 0,
34  .esm_sec_chan  = 0,
35  .fail_code     = HET1PARITYCHECK_FAIL1,
36  .ram_loc       = &NHET1RAMLOC,
37  .par_loc       = &NHET1RAMPARLOC,
38  .par_xor       = 0x00000001,
39  .par_cr_reg    = &TMS570_NHET1.PCR,
40  .par_cr_test   = TMS570_NHET_PCR_TEST,
41  .par_st_reg    = NULL,
42  .par_st_clear  = 0,
43  .partest_fnc   = tms570_selftest_par_check_std,
44  .fnc_data      = NULL
45};
46
47/* HCG:htu1ParityCheck */
48const tms570_selftest_par_desc_t
49  tms570_selftest_par_htu1_desc = {
50  .esm_prim_grp  = 1,
51  .esm_prim_chan = 8,
52  .esm_sec_grp   = 0,
53  .esm_sec_chan  = 0,
54  .fail_code     = HTU1PARITYCHECK_FAIL1,
55  .ram_loc       = &HTU1RAMLOC,
56  .par_loc       = &HTU1PARLOC,
57  .par_xor       = 0x00000001,
58  .par_cr_reg    = &TMS570_HTU1.PCR,
59  .par_cr_test   = TMS570_HTU_PCR_TEST,
60  .par_st_reg    = &TMS570_HTU1.PAR,
61  .par_st_clear  = TMS570_HTU_PAR_PEFT,
62  .partest_fnc   = tms570_selftest_par_check_std,
63  .fnc_data      = NULL
64};
65
66/* HCG:het2ParityCheck */
67const tms570_selftest_par_desc_t
68  tms570_selftest_par_het2_desc = {
69  .esm_prim_grp  = 1,
70  .esm_prim_chan = 7,
71  .esm_sec_grp   = 1,
72  .esm_sec_chan  = 34,
73  .fail_code     = HET2PARITYCHECK_FAIL1,
74  .ram_loc       = &NHET2RAMLOC,
75  .par_loc       = &NHET2RAMPARLOC,
76  .par_xor       = 0x00000001,
77  .par_cr_reg    = &TMS570_NHET2.PCR,
78  .par_cr_test   = TMS570_NHET_PCR_TEST,
79  .par_st_reg    = NULL,
80  .par_st_clear  = 0,
81  .partest_fnc   = tms570_selftest_par_check_std,
82  .fnc_data      = NULL
83};
84
85/* HCG:htu2ParityCheck */
86const tms570_selftest_par_desc_t
87  tms570_selftest_par_htu2_desc = {
88  .esm_prim_grp  = 1,
89  .esm_prim_chan = 8,
90  .esm_sec_grp   = 0,
91  .esm_sec_chan  = 0,
92  .fail_code     = HTU2PARITYCHECK_FAIL1,
93  .ram_loc       = &HTU2RAMLOC,
94  .par_loc       = &HTU2PARLOC,
95  .par_xor       = 0x00000001,
96  .par_cr_reg    = &TMS570_HTU2.PCR,
97  .par_cr_test   = TMS570_HTU_PCR_TEST,
98  .par_st_reg    = &TMS570_HTU2.PAR,
99  .par_st_clear  = TMS570_HTU_PAR_PEFT,
100  .partest_fnc   = tms570_selftest_par_check_std,
101  .fnc_data      = NULL
102};
103
104/* HCG:adc1ParityCheck */
105const tms570_selftest_par_desc_t
106  tms570_selftest_par_adc1_desc = {
107  .esm_prim_grp  = 1,
108  .esm_prim_chan = 19,
109  .esm_sec_grp   = 0,
110  .esm_sec_chan  = 0,
111  .fail_code     = ADC1PARITYCHECK_FAIL1,
112  .ram_loc       = &adcRAM1,
113  .par_loc       = &adcPARRAM1,
114  .par_xor       = 0xffffffff,
115  .par_cr_reg    = &TMS570_ADC1.PARCR,
116  .par_cr_test   = TMS570_ADC_PARCR_TEST,
117  .par_st_reg    = NULL,
118  .par_st_clear  = 0,
119  .partest_fnc   = tms570_selftest_par_check_std,
120  .fnc_data      = NULL
121};
122
123/* HCG:adc2ParityCheck */
124const tms570_selftest_par_desc_t
125  tms570_selftest_par_adc2_desc = {
126  .esm_prim_grp  = 1,
127  .esm_prim_chan = 1,
128  .esm_sec_grp   = 0,
129  .esm_sec_chan  = 0,
130  .fail_code     = ADC2PARITYCHECK_FAIL1,
131  .ram_loc       = &adcRAM2,
132  .par_loc       = &adcPARRAM2,
133  .par_xor       = 0xffffffff,
134  .par_cr_reg    = &TMS570_ADC2.PARCR,
135  .par_cr_test   = TMS570_ADC_PARCR_TEST,
136  .par_st_reg    = NULL,
137  .par_st_clear  = 0,
138  .partest_fnc   = tms570_selftest_par_check_std,
139  .fnc_data      = NULL
140};
141
142/* HCG:can1ParityCheck */
143const tms570_selftest_par_desc_t
144  tms570_selftest_par_can1_desc = {
145  .esm_prim_grp  = 1,
146  .esm_prim_chan = 21,
147  .esm_sec_grp   = 0,
148  .esm_sec_chan  = 0,
149  .fail_code     = CAN1PARITYCHECK_FAIL1,
150  .ram_loc       = &canRAM1,
151  .par_loc       = &canPARRAM1,
152  .par_xor       = 0x00001000,
153  .par_cr_reg    = NULL,
154  .par_cr_test   = 0,
155  .par_st_reg    = NULL,
156  .par_st_clear  = 0,
157  .partest_fnc   = tms570_selftest_par_check_can,
158  .fnc_data      = &TMS570_DCAN1
159};
160
161/* HCG:can2ParityCheck */
162const tms570_selftest_par_desc_t
163  tms570_selftest_par_can2_desc = {
164  .esm_prim_grp  = 1,
165  .esm_prim_chan = 23,
166  .esm_sec_grp   = 0,
167  .esm_sec_chan  = 0,
168  .fail_code     = CAN2PARITYCHECK_FAIL1,
169  .ram_loc       = &canRAM2,
170  .par_loc       = &canPARRAM2,
171  .par_xor       = 0x00001000,
172  .par_cr_reg    = NULL,
173  .par_cr_test   = 0,
174  .par_st_reg    = NULL,
175  .par_st_clear  = 0,
176  .partest_fnc   = tms570_selftest_par_check_can,
177  .fnc_data      = &TMS570_DCAN2
178};
179
180/* HCG:can3ParityCheck */
181const tms570_selftest_par_desc_t
182  tms570_selftest_par_can3_desc = {
183  .esm_prim_grp  = 1,
184  .esm_prim_chan = 22,
185  .esm_sec_grp   = 0,
186  .esm_sec_chan  = 0,
187  .fail_code     = CAN3PARITYCHECK_FAIL1,
188  .ram_loc       = &canRAM3,
189  .par_loc       = &canPARRAM3,
190  .par_xor       = 0x00001000,
191  .par_cr_reg    = NULL,
192  .par_cr_test   = 0,
193  .par_st_reg    = NULL,
194  .par_st_clear  = 0,
195  .partest_fnc   = tms570_selftest_par_check_can,
196  .fnc_data      = &TMS570_DCAN3
197};
198
199/* HCG:vimParityCheck */
200const tms570_selftest_par_desc_t
201  tms570_selftest_par_vim_desc = {
202  .esm_prim_grp  = 1,
203  .esm_prim_chan = 15,
204  .esm_sec_grp   = 0,
205  .esm_sec_chan  = 0,
206  .fail_code     = VIMPARITYCHECK_FAIL1,
207  .ram_loc       = &VIMRAMLOC,
208  .par_loc       = &VIMRAMPARLOC,
209  .par_xor       = 0x00000001,
210  .par_cr_reg    = &TMS570_VIM.PARCTL,
211  .par_cr_test   = TMS570_VIM_PARCTL_TEST,
212  .par_st_reg    = &TMS570_VIM.PARFLG,
213  .par_st_clear  = TMS570_VIM_PARFLG_PARFLG,
214  .partest_fnc   = tms570_selftest_par_check_std,
215  .fnc_data      = NULL
216};
217
218/* HCG:dmaParityCheck */
219const tms570_selftest_par_desc_t
220  tms570_selftest_par_dma_desc = {
221  .esm_prim_grp  = 1,
222  .esm_prim_chan = 3,
223  .esm_sec_grp   = 0,
224  .esm_sec_chan  = 0,
225  .fail_code     = DMAPARITYCHECK_FAIL1,
226  .ram_loc       = &DMARAMLOC,
227  .par_loc       = &DMARAMPARLOC,
228  .par_xor       = 0x00000001,
229  .par_cr_reg    = &TMS570_DMA.DMAPCR,
230  .par_cr_test   = TMS570_DMA_DMAPCR_TEST,
231  .par_st_reg    = &TMS570_DMA.DMAPAR,
232  .par_st_clear  = TMS570_DMA_DMAPAR_EDFLAG,
233  .partest_fnc   = tms570_selftest_par_check_std,
234  .fnc_data      = NULL
235};
236
237/* HCG:mibspi1ParityCheck */
238const tms570_selftest_par_desc_t
239  tms570_selftest_par_spi1_desc = {
240  .esm_prim_grp  = 1,
241  .esm_prim_chan = 17,
242  .esm_sec_grp   = 0,
243  .esm_sec_chan  = 0,
244  .fail_code     = MIBSPI1PARITYCHECK_FAIL1,
245  .ram_loc       = &MIBSPI1RAMLOC,
246  .par_loc       = &mibspiPARRAM1,
247  .par_xor       = 0x00000001,
248  .par_cr_reg    = NULL,
249  .par_cr_test   = 0,
250  .par_st_reg    = NULL,
251  .par_st_clear  = 0,
252  .partest_fnc   = tms570_selftest_par_check_mibspi,
253  .fnc_data      = &TMS570_SPI1
254};
255
256/* HCG:mibspi3ParityCheck */
257const tms570_selftest_par_desc_t
258  tms570_selftest_par_spi3_desc = {
259  .esm_prim_grp  = 1,
260  .esm_prim_chan = 18,
261  .esm_sec_grp   = 0,
262  .esm_sec_chan  = 0,
263  .fail_code     = MIBSPI3PARITYCHECK_FAIL1,
264  .ram_loc       = &MIBSPI3RAMLOC,
265  .par_loc       = &mibspiPARRAM3,
266  .par_xor       = 0x00000001,
267  .par_cr_reg    = NULL,
268  .par_cr_test   = 0,
269  .par_st_reg    = NULL,
270  .par_st_clear  = 0,
271  .partest_fnc   = tms570_selftest_par_check_mibspi,
272  .fnc_data      = &TMS570_SPI3
273};
274
275/* HCG:mibspi5ParityCheck */
276const tms570_selftest_par_desc_t
277  tms570_selftest_par_spi5_desc = {
278  .esm_prim_grp  = 1,
279  .esm_prim_chan = 24,
280  .esm_sec_grp   = 0,
281  .esm_sec_chan  = 0,
282  .fail_code     = MIBSPI5PARITYCHECK_FAIL1,
283  .ram_loc       = &MIBSPI5RAMLOC,
284  .par_loc       = &mibspiPARRAM5,
285  .par_xor       = 0x00000001,
286  .par_cr_reg    = NULL,
287  .par_cr_test   = 0,
288  .par_st_reg    = NULL,
289  .par_st_clear  = 0,
290  .partest_fnc   = tms570_selftest_par_check_mibspi,
291  .fnc_data      = &TMS570_SPI5
292};
293
294/**
295 * @brief run parity protection mechanism check for set of modules described by list.
296 *
297 * @param[in] desc_arr array of pointers to descriptors providing addresses
298 *                     and ESM channels for individual peripherals.
299 * @param[in] desc_cnt count of pointers in the array
300 *
301 * @return Void, in the case of error invokes bsp_selftest_fail_notification()
302 */
303void tms570_selftest_par_run(
304  const tms570_selftest_par_desc_t *
305  const *desc_arr,
306  int    desc_cnt
307)
308{
309  int                              i;
310  const tms570_selftest_par_desc_t *desc;
311
312  for ( i = 0; i < desc_cnt; i++ ) {
313    desc = desc_arr[ i ];
314    desc->partest_fnc( desc );
315  }
316}
Note: See TracBrowser for help on using the repository browser.