1 /******************************************************************************
2 * Copyright (c) 2018-2020 Texas Instruments Incorporated - http://www.ti.com
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the
14 * distribution.
15 *
16 * Neither the name of Texas Instruments Incorporated nor the names of
17 * its contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 *****************************************************************************/
34 /**
35 *
36 * \file mcan_test.h
37 *
38 * \brief This is the header file for mcan diagnostic test.
39 *
40 */
42 #ifndef _MCAN_TEST_H_
43 #define _MCAN_TEST_H_
45 /* ========================================================================== */
46 /* Include Files */
47 /* ========================================================================== */
49 #include <stdint.h>
50 #include <stdio.h>
51 #include <ti/csl/csl_types.h>
52 #include <ti/csl/soc.h>
53 #include <ti/csl/hw_types.h>
54 #include <ti/csl/cslr_mcan.h>
55 #include <ti/csl/arch/csl_arch.h>
56 #include <ti/drv/uart/UART_stdio.h>
57 #include <ti/csl/csl_mcan.h>
58 #if !defined(SOC_AM64X)
59 #include <ti/drv/gpio/GPIO.h>
60 #include <ti/drv/gpio/soc/GPIO_soc.h>
61 #endif
63 #include "board.h"
65 #if defined(SOC_AM64X)
66 #include "board_cfg.h"
67 #endif
68 #include "diag_common_cfg.h"
70 #if defined(SOC_J721E) || defined(SOC_J7200)
71 #include "board_pinmux.h"
72 #include "board_control.h"
73 #endif
74 #if !defined(am65xx_idk) && !defined(SOC_TPR12)
75 #include "board_i2c_io_exp.h"
76 #endif
78 #ifdef __cplusplus
79 extern "C" {
80 #endif
82 /* ========================================================================== */
83 /* Macros */
84 /* ========================================================================== */
85 #if defined(DIAG_STRESS_TEST) && ((defined(am65xx_idk)) || defined(SOC_J721E) || defined(SOC_J7200))
86 #define PKT_SEND_COUNT (10240U)
87 #else
88 #define PKT_SEND_COUNT (5U)
89 #endif
91 #define APP_MCAN_STD_ID_FILT_START_ADDR (0U)
92 #define APP_MCAN_STD_ID_FILTER_NUM (1U)
93 #define APP_MCAN_EXT_ID_FILT_START_ADDR (48U)
94 #define APP_MCAN_EXT_ID_FILTER_NUM (1U)
95 #define APP_MCAN_TX_EVENT_START_ADDR (100U)
96 #define APP_MCAN_TX_EVENT_SIZE (5U)
97 #define APP_MCAN_TX_BUFF_START_ADDR (148U)
98 #define APP_MCAN_TX_BUFF_SIZE (5U)
99 #define APP_MCAN_TX_FIFO_SIZE (5U)
100 #define APP_MCAN_FIFO_0_START_ADDR (548U)
101 #define APP_MCAN_FIFO_0_NUM (5U)
102 #define APP_MCAN_FIFO_1_START_ADDR (748U)
103 #define APP_MCAN_FIFO_1_NUM (5U)
104 #define APP_MCAN_RX_BUFF_START_ADDR (948U)
106 #define APP_MCAN_TX_BUF_NUM (1U)
108 #define APP_MCAN_EXT_ID_AND_MASK (0x1FFFFFFFU)
109 #define MCAN_MAX_PAYLOAD_BYTES (64U)
111 #if defined(am65xx_idk)
112 #if defined (__aarch64__)
113 #define MCAN_DIAG_INTR_ENABLE (1)
114 #endif
115 #endif
117 #if defined(j721e_evm) || defined(j7200_evm)
118 #define MCAN_MAX_PORTS_EXP (10U)
119 #define MCAN_MAX_PORTS_CP (4U)
120 #define BOARD_NAME_LENGTH (12U)
122 /* Interrupt configurations */
123 #define MCU_MCAN0_TX_INT_NUM (CSLR_MCU_R5FSS0_CORE0_INTR_MCU_MCAN0_MCANSS_MCAN_LVL_INT_0)
124 #define MCU_MCAN0_RX_INT_NUM (CSLR_MCU_R5FSS0_CORE0_INTR_MCU_MCAN0_MCANSS_MCAN_LVL_INT_1)
125 #define MCU_MCAN0_TS_INT_NUM (CSLR_MCU_R5FSS0_CORE0_INTR_MCU_MCAN0_MCANSS_EXT_TS_ROLLOVER_LVL_INT_0)
127 #define MCU_MCAN1_TX_INT_NUM (CSLR_MCU_R5FSS0_CORE0_INTR_MCU_MCAN1_MCANSS_MCAN_LVL_INT_0)
128 #define MCU_MCAN1_RX_INT_NUM (CSLR_MCU_R5FSS0_CORE0_INTR_MCU_MCAN1_MCANSS_MCAN_LVL_INT_1)
129 #define MCU_MCAN1_TS_INT_NUM (CSLR_MCU_R5FSS0_CORE0_INTR_MCU_MCAN1_MCANSS_EXT_TS_ROLLOVER_LVL_INT_0)
131 #define MAIN_MCAN0_TX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN0_MCANSS_MCAN_LVL_INT_0)
132 #define MAIN_MCAN0_RX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN0_MCANSS_MCAN_LVL_INT_1)
133 #define MAIN_MCAN0_TS_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN0_MCANSS_EXT_TS_ROLLOVER_LVL_INT_0)
135 #if defined(j721e_evm)
136 #define MAIN_MCAN2_TX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN2_MCANSS_MCAN_LVL_INT_0)
137 #define MAIN_MCAN2_RX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN2_MCANSS_MCAN_LVL_INT_1)
138 #define MAIN_MCAN2_TS_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN2_MCANSS_EXT_TS_ROLLOVER_LVL_INT_0)
139 #endif
141 #if defined(j7200_evm)
142 #define MAIN_MCAN3_TX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN3_MCANSS_MCAN_LVL_INT_0)
143 #define MAIN_MCAN3_RX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN3_MCANSS_MCAN_LVL_INT_1)
144 #define MAIN_MCAN3_TS_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN3_MCANSS_EXT_TS_ROLLOVER_LVL_INT_0)
145 #endif
147 #define MAIN_MCAN4_TX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN4_MCANSS_MCAN_LVL_INT_0)
148 #define MAIN_MCAN4_RX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN4_MCANSS_MCAN_LVL_INT_1)
149 #define MAIN_MCAN4_TS_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN4_MCANSS_EXT_TS_ROLLOVER_LVL_INT_0)
151 #define MAIN_MCAN5_TX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN5_MCANSS_MCAN_LVL_INT_0)
152 #define MAIN_MCAN5_RX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN5_MCANSS_MCAN_LVL_INT_1)
153 #define MAIN_MCAN5_TS_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN5_MCANSS_EXT_TS_ROLLOVER_LVL_INT_0)
155 #define MAIN_MCAN6_TX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN6_MCANSS_MCAN_LVL_INT_0)
156 #define MAIN_MCAN6_RX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN6_MCANSS_MCAN_LVL_INT_1)
157 #define MAIN_MCAN6_TS_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN6_MCANSS_EXT_TS_ROLLOVER_LVL_INT_0)
159 #define MAIN_MCAN7_TX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN7_MCANSS_MCAN_LVL_INT_0)
160 #define MAIN_MCAN7_RX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN7_MCANSS_MCAN_LVL_INT_1)
161 #define MAIN_MCAN7_TS_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN7_MCANSS_EXT_TS_ROLLOVER_LVL_INT_0)
163 #if defined(j7200_evm)
164 #define MAIN_MCAN8_TX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN8_MCANSS_MCAN_LVL_INT_0)
165 #define MAIN_MCAN8_RX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN8_MCANSS_MCAN_LVL_INT_1)
166 #define MAIN_MCAN8_TS_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN8_MCANSS_EXT_TS_ROLLOVER_LVL_INT_0)
167 #endif
169 #if defined(j721e_evm)
170 #define MAIN_MCAN9_TX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN9_MCANSS_MCAN_LVL_INT_0)
171 #define MAIN_MCAN9_RX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN9_MCANSS_MCAN_LVL_INT_1)
172 #define MAIN_MCAN9_TS_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN9_MCANSS_EXT_TS_ROLLOVER_LVL_INT_0)
173 #endif
175 #if defined(j7200_evm)
176 #define MAIN_MCAN10_TX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN10_MCANSS_MCAN_LVL_INT_0)
177 #define MAIN_MCAN10_RX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN10_MCANSS_MCAN_LVL_INT_1)
178 #define MAIN_MCAN10_TS_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN10_MCANSS_EXT_TS_ROLLOVER_LVL_INT_0)
179 #endif
181 #if defined(j721e_evm)
182 #define MAIN_MCAN11_TX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN11_MCANSS_MCAN_LVL_INT_0)
183 #define MAIN_MCAN11_RX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN11_MCANSS_MCAN_LVL_INT_1)
184 #define MAIN_MCAN11_TS_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN11_MCANSS_EXT_TS_ROLLOVER_LVL_INT_0)
185 #endif
186 #elif defined(SOC_AM64X)
187 #define MCAN_MAX_PORTS (2U)
189 /* Interrupt configurations */
191 #define MAIN_MCAN0_TX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN0_MCANSS_MCAN_LVL_INT_0)
192 #define MAIN_MCAN0_RX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN0_MCANSS_MCAN_LVL_INT_1)
193 #define MAIN_MCAN0_TS_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN0_MCANSS_EXT_TS_ROLLOVER_LVL_INT_0)
195 #define MAIN_MCAN1_TX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN1_MCANSS_MCAN_LVL_INT_0)
196 #define MAIN_MCAN1_RX_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN1_MCANSS_MCAN_LVL_INT_1)
197 #define MAIN_MCAN1_TS_INT_NUM (CSLR_R5FSS0_CORE0_INTR_MCAN1_MCANSS_EXT_TS_ROLLOVER_LVL_INT_0)
199 #elif defined(SOC_TPR12)
200 #define MCAN_MAX_PORTS (2U)
202 /* Interrupt configurations */
204 #define MAIN_MCAN0_TX_INT_NUM (CSL_MSS_INTR_MSS_MCANA_INT0)
205 #define MAIN_MCAN0_RX_INT_NUM (CSL_MSS_INTR_MSS_MCANA_INT1)
206 #define MAIN_MCAN0_TS_INT_NUM (ESMG1_MCANA_TS_ERR)
208 #define MAIN_MCAN1_TX_INT_NUM (CSL_MSS_INTR_MSS_MCANB_INT0)
209 #define MAIN_MCAN1_RX_INT_NUM (CSL_MSS_INTR_MSS_MCANB_INT1)
210 #define MAIN_MCAN1_TS_INT_NUM (ESMG1_MCANB_TS_ERR)
212 #else
213 #define MCAN_MAX_PORTS (2U)
214 #endif /* #if defined(j721e_evm) || defined(j7200_evm) */
216 /**
217 * \brief Structure to hold the MCAN port mapping information
218 */
219 typedef struct BoardDiag_McanPortInfo_s
220 {
221 /** Base address of MCAN port */
222 uint32_t mcanBaseAddr;
223 /** Instance number of MCAN port */
224 uint8_t mcanInstance;
225 /** MCAN interrupt number for Tx channel */
226 uint32_t mcanTxIntNum;
227 /** MCAN interrupt number for Rx channel */
228 uint32_t mcanRxIntNum;
229 /** MCAN interrupt number for Timestamp */
230 uint32_t mcanTsIntNum;
231 } BoardDiag_McanPortInfo_t;
233 /* ========================================================================== */
234 /* Internal Function Declarations */
235 /* ========================================================================== */
237 /**
238 * \brief This function executes MCAN diagnostic test
239 *
240 * \return int32_t
241 * 0 - in case of success
242 * -1 - in case of failure
243 *
244 */
245 int32_t BoardDiag_mcanTest(void);
247 #ifdef __cplusplus
248 }
249 #endif /* __cplusplus */
251 #endif /* _MCAN_TEST_H_ */