[PDK-9369] OSAL: FreeRTOS Support for J721E/J7VCL/AM65xx R5F cores
[processor-sdk/pdk.git] / packages / ti / osal / test / src / main_osal_test.c
1 /**
2  *  \file   main_osal_test.c
3  *
4  *  \brief  OSAL driver test application main file.
5  *
6  */
8 /*
9  * Copyright (C) 2016-2020 Texas Instruments Incorporated - http://www.ti.com/
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  *
15  * Redistributions of source code must retain the above copyright
16  * notice, this list of conditions and the following disclaimer.
17  *
18  * Redistributions in binary form must reproduce the above copyright
19  * notice, this list of conditions and the following disclaimer in the
20  * documentation and/or other materials provided with the
21  * distribution.
22  *
23  * Neither the name of Texas Instruments Incorporated nor the names of
24  * its contributors may be used to endorse or promote products derived
25  * from this software without specific prior written permission.
26  *
27  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38  *
39  */
41 #if !(defined(BARE_METAL) || defined(FREERTOS))
42 /* XDCtools Header files */
43 #include <xdc/std.h>
44 #if defined (SOC_J721E) || defined(SOC_J7200)
45 // workaround for A72 does not supported in SYS/BIOS yet
46 #if defined (BUILD_C7X_1)
47 #ifndef BARE_METAL
48 #include <ti/sysbios/family/c7x/Hwi.h>
49 #endif //BARE_METAL
50 #endif //BUILD_C7X_1
51 #else
52 #include <xdc/cfg/global.h>
53 #endif
54 #include <xdc/runtime/System.h>
55 #include <xdc/runtime/Error.h>
57 /* BIOS Header files */
58 #include <ti/sysbios/BIOS.h>
59 #include <ti/osal/SwiP.h>
60 #endif
62 #if !defined(BARE_METAL)
63 /* include for both tirtos and freertos. */
64 #include <ti/osal/TaskP.h>
65 #endif
67 #if defined (FREERTOS)
68 #include "FreeRTOS.h"
69 #include "task.h"
70 #include <ti/osal/MemoryP.h>
71 #endif
73 #include <stdio.h>
74 #include <string.h>
75 #include <math.h>
77 /* TI-RTOS Header files */
78 #include <ti/osal/osal.h>
79 #include <ti/osal/soc/osal_soc.h>
80 #include "OSAL_log.h"
82 #include "OSAL_board.h"
84 #if defined (SOC_J721E) || defined(SOC_J7200)
85 #include <ti/drv/sciclient/sciclient.h>
86 #endif
87 /**********************************************************************
88  ************************** Internal functions ************************
89  **********************************************************************/
90 #define TWO_TIMER_INTERRUPT_TEST 0
91 #if defined(SOC_TPR12) || defined (SOC_AWR294X)
92 #define ENABLE_DEBUG_LOG_TEST   1
93 #endif
95 #include <ti/csl/soc.h>
97 #if defined (__C7100__)
98 #include <ti/csl/csl_clec.h>
99 #include <ti/csl/arch/csl_arch.h>
100 #endif
101 #include <ti/csl/tistdtypes.h>
102 #if defined (BARE_METAL)
103 #if !defined(SOC_TPR12) && !defined (SOC_AWR294X)
104 #include <ti/csl/csl_timer.h>
105 #endif
106 #include <ti/csl/arch/csl_arch.h>
108 #if   defined (SOC_AM571x) || defined (SOC_AM572x) || defined (SOC_AM574x)
109 #undef  TWO_TIMER_INTERRUPT_TEST
110 #define TWO_TIMER_INTERRUPT_TEST 1
111 #endif
112 #elif defined (FREERTOS)
114 #else
115 void ErrorHandler(Error_Block *eb)
117     OSAL_log("ErrorHandler: ");
118     Error_print(eb);
120 #endif
122 #if defined(BUILD_C66X_1) || defined(BUILD_C66X_2)
123 /* To set C66 timer interrupts on J7ES VLAB */
124 void C66xTimerInterruptInit(void);
125 #endif
127 #ifdef BUILD_C7X_1
128 void    Osal_appC7xPreInit(void);
129 void    C7x_ConfigureTimerOutput(void);
130 #endif
132 #undef  ENABLE_GET_TIME_TEST
133 #if defined(SOC_AM65XX) || defined(SOC_J721E) || defined(SOC_AM572x) || defined(SOC_K2G) || defined(SOC_AM335x) || defined(SOC_AM437x) || defined(SOC_J7200)|| defined(SOC_TPR12) || defined (SOC_AWR294X)
134 #define ENABLE_GET_TIME_TEST     1
135 #endif
137 #ifndef NULL_PTR
138 #define NULL_PTR ((void *)0x0)
139 #endif
141 /**********************************************************************
142  ************************** Global Variables **************************
143  **********************************************************************/
144 #if defined (__TI_ARM_V5__)
145 TimerP_Handle handle;
146 #endif
148 /* Test application stack size */
149 #if defined (__C7100__)
150 /* Temp workaround to avoid assertion failure: A_stackSizeTooSmall : Task stack size must be >= 16KB.
151   * until the Bug PDK-7605 is resolved */
152 #define APP_TSK_STACK_MAIN              (32U * 1024U)
153 #else
154 #define APP_TSK_STACK_MAIN              (16U * 1024U)
155 #endif
157 #ifdef BARE_METAL
158 /* No task support for Bare metal */
159 #else
160 /* Test application stack */
161 static uint8_t  gAppTskStackMain[APP_TSK_STACK_MAIN] __attribute__((aligned(32)));
162 #endif
164 /*
165  *  ======== Board_initOSAL ========
166  */
167 void Board_initOSAL(void)
169     Board_initCfg boardCfg;
170     Board_STATUS  status;
171 #if defined(evmK2E) || defined(evmC6678)
172     boardCfg = BOARD_INIT_MODULE_CLOCK |
173         BOARD_INIT_UART_STDIO;
174 #else
175     boardCfg = BOARD_INIT_PINMUX_CONFIG;
176     /* For TPR12 AWR294X we dont do module clock init from app. This is done by
177      * GEL file or SBL. Doing Module Clock init causes OSAL RTI interrupts
178      * to stop if another core also runs OSAL test
179      */
180     #if !defined(SOC_TPR12) && !defined (SOC_AWR294X)
181     #if !defined(_TMS320C6X)
182         boardCfg |= BOARD_INIT_MODULE_CLOCK;
183     #endif
184     #endif /* !defined(SOC_TPR12) */
186     #if defined (UART_CONSOLE)
187         boardCfg |= BOARD_INIT_UART_STDIO;
188     #endif
189 #endif
190     status = Board_init(boardCfg);
192     if (status != BOARD_SOK)
193     {
194         OSAL_log(" Board_init() is not successful...unexpected results may happen \n");
195     }
197     return;
201 /*
202  *  ======== HWI test function ========
203  */
204 volatile   uint64_t gTestlocalTimeout = 0x300000U;
206 #if (defined (SOC_AM65XX) || defined (SOC_AM64X) || defined(SOC_J721E) || defined(SOC_J7200) || defined (SOC_TPR12) || defined (SOC_AWR294X)) && (!defined(BUILD_C66X_1))&&(!defined(BUILD_C66X_2))&&(!defined(BUILD_C7X_1))
207 #define INT_NUM_IRQ 32
208 #define LOOP_CNT    100
209 volatile uint64_t gFlagIRQ = 0;
211 void myIsrIRQ(uintptr_t arg)
213     gFlagIRQ = 1;
214     gTestlocalTimeout = 0x300000;
216 bool  OSAL_core_hwi_test()
219     HwiP_Params hwiParams;
220     HwiP_Handle handle;
221     volatile int intCount = 0;
222     int32_t ret;
223     bool test_pass=true;
225     HwiP_Params_init(&hwiParams);
227     OSAL_log("Creating Hwi myIsr \n");
228     handle = HwiP_create(INT_NUM_IRQ, myIsrIRQ, &hwiParams);
229     if (handle == NULL_PTR) {
230       OSAL_log("Failed to create the HwiP handle \n");
231       test_pass = false;
232     }
234     if (test_pass == true)
235     {
236         while (intCount != LOOP_CNT)
237         {
238             ret=HwiP_post(INT_NUM_IRQ);
240             if(ret==osal_UNSUPPORTED)
241             { /* In case of unsupported SOC/error */
242               OSAL_log("HwiP_post unsupported/failed!\n");
243               test_pass=false;
244               break;
245             }
247             /* Wait for software timeout, ISR should hit
248              * otherwise return the test as failed */
249             while (gTestlocalTimeout != 0U)
250             {
251               gTestlocalTimeout--;
252               if (gFlagIRQ)
253               {
254                 gFlagIRQ = 0;
255                 intCount++;
256                 break;
257               }
258             }
259             /* Wait is over - did not get any interrupts posted/received
260              * declare the test as fail
261              */
262             if (gTestlocalTimeout == 0)
263             {
264               OSAL_log("Failed to get interrupts \n");
265               test_pass = false;
266               break;
267             }
268         }
270         OSAL_log("%d IRQs received. Test over !\n",intCount);
271         ret = HwiP_delete(handle);
272         if (ret != HwiP_OK)
273         {
274           OSAL_log(" Failed to delete HwiP handle \n");
275           test_pass= false;
276         }
277     }
279     return test_pass;
281 #endif
283 bool OSAL_hwi_test()
285   bool pass = true;
286 #if (defined (SOC_AM65XX) || defined (SOC_AM64X) || defined(SOC_J721E) || defined(SOC_J7200) || defined (SOC_TPR12) || defined (SOC_AWR294X)) && (!defined(BUILD_C66X_1))&&(!defined(BUILD_C66X_2))&&(!defined(BUILD_C7X_1))
287   pass = OSAL_core_hwi_test();
288 #endif
289   return pass;
292 typedef enum UT_Timer_Type_s {
293     UT_Timer_DMTIMER = 0,
294     UT_Timer_TIMER64 = 1,
295     UT_Timer_RTITIMER = 2
296 } UT_Timer_Type_t;
299 #if defined(SOC_AM335x)
300 #define CM_PER_TIMER3_CLKCTRL             (0x44e00084)
301 #define CM_DPLL_CLKSEL_TIMER3_CLK         (0x44e0050c)
302 UT_Timer_Type_t  timer_type    =          UT_Timer_DMTIMER;
303 #define OSAL_TEST_TIMER_ID                (1U)
304 #define OSAL_TEST_TIMER_PERIOD            (5000U)
305 #elif defined(SOC_AM437x)
306 #define CM_PER_TIMER3_CLKCTRL             (0x44DF8800 + 0x538)
307 #define CM_DPLL_CLKSEL_TIMER3_CLK         (0x44DF4200 + 0x8)
308 UT_Timer_Type_t  timer_type  =            UT_Timer_DMTIMER;
309 #define OSAL_TEST_TIMER_ID                (3U)
310 #define OSAL_TEST_TIMER_PERIOD            (5000U)
312 #elif defined(SOC_K2E) || defined(SOC_K2L)
313 UT_Timer_Type_t  timer_type =             UT_Timer_TIMER64;
314 #define OSAL_TEST_TIMER_ID                (TimerP_ANY)
315 #define OSAL_TEST_TIMER_PERIOD            (5000U)
316 #elif defined(SOC_K2H) || defined(SOC_K2K)
317 UT_Timer_Type_t  timer_type =             UT_Timer_TIMER64;
318 #define OSAL_TEST_TIMER_ID                (8U)
319 #define OSAL_TEST_TIMER_PERIOD            (5000U)
320 #elif defined(SOC_K2G)
321 UT_Timer_Type_t  timer_type =             UT_Timer_TIMER64;
322 #define OSAL_TEST_TIMER_ID                (1U)
323 #define OSAL_TEST_TIMER_ID2               (2U)
324 #define OSAL_TEST_TIMER_PERIOD            (5000U)
325 #elif defined(SOC_AM572x) || defined (SOC_AM574x)
326 UT_Timer_Type_t  timer_type   =           UT_Timer_DMTIMER;
327   #if defined (__ARM_ARCH_7A__)
328     #define OSAL_TEST_TIMER_ID                (1U)
329     #define OSAL_TEST_TIMER_ID2               (9U)
330     #define OSAL_TEST_TIMER_PERIOD            (5000U)
331   #elif   defined (_TMS320C6X)
332     #define OSAL_TEST_TIMER_ID                (4U)
333     #define OSAL_TEST_TIMER_ID2               (5U)
334     #define OSAL_TEST_TIMER_PERIOD            (5000U)
335   #else
336     #define OSAL_TEST_TIMER_ID                (8U)
337     #define OSAL_TEST_TIMER_ID2               (10U)
338     #define OSAL_TEST_TIMER_PERIOD            (5000U)
339   #endif
340 #elif defined(SOC_AM571x)
341 UT_Timer_Type_t  timer_type   =           UT_Timer_DMTIMER;
342   #if defined (__ARM_ARCH_7A__)
343     #define OSAL_TEST_TIMER_ID                (1U)
344     #define OSAL_TEST_TIMER_ID2               (9U)
345     #define OSAL_TEST_TIMER_PERIOD            (5000U)
346   #elif   defined (_TMS320C6X)
347     #define OSAL_TEST_TIMER_ID                (4U)
348     #define OSAL_TEST_TIMER_ID2               (5U)
349     #define OSAL_TEST_TIMER_PERIOD            (5000U)
350   #else
351     #define OSAL_TEST_TIMER_ID                (8U)
352     #define OSAL_TEST_TIMER_ID2               (10U)
353     #define OSAL_TEST_TIMER_PERIOD            (5000U)
354   #endif
355 #elif defined(SOC_OMAPL137) || defined (SOC_OMAPL138)
356 UT_Timer_Type_t  timer_type =             UT_Timer_TIMER64;
357 #define OSAL_TEST_TIMER_ID                (1U)
358 #define OSAL_TEST_TIMER_PERIOD            (5000U)
360 #elif defined(SOC_AM65XX)
361   UT_Timer_Type_t  timer_type    =          UT_Timer_DMTIMER;
362   #if defined (__TI_ARM_V7R4__)
363     #define OSAL_TEST_TIMER_ID                (1U)
364     #define OSAL_TEST_TIMER_ID2               (2U)
365     #define OSAL_TEST_TIMER_PERIOD            (5000U)
366   #else
367     #define OSAL_TEST_TIMER_ID                (4U)
368     #define OSAL_TEST_TIMER_ID2               (5U)
369     #define OSAL_TEST_TIMER_PERIOD            (5000U)
370   #endif
371 #elif defined(SOC_J721E)
372   UT_Timer_Type_t  timer_type    =          UT_Timer_DMTIMER;
373   #if defined (BUILD_MCU1_0)
374     #define OSAL_TEST_TIMER_ID                (2U)
375     #define OSAL_TEST_TIMER_ID2               (3U)
376     #define OSAL_TEST_TIMER_PERIOD            (5000U)
377   #elif defined (__TI_ARM_V7R4__)
378     #define OSAL_TEST_TIMER_ID                (1U)
379     #define OSAL_TEST_TIMER_ID2               (2U)
380     #define OSAL_TEST_TIMER_PERIOD            (5000U)
381   #elif defined (BUILD_C66X_1)
382     #define OSAL_TEST_TIMER_ID                (2U)
383     #define OSAL_TEST_TIMER_ID2               (3U)
384     #define OSAL_TEST_TIMER_PERIOD            (5000U)
385   #elif defined (BUILD_C66X_2)
386     #define OSAL_TEST_TIMER_ID                (2U)
387     #define OSAL_TEST_TIMER_ID2               (3U)
388     #define OSAL_TEST_TIMER_PERIOD            (5000U)
389   #elif defined (BUILD_C7X_1)
390     #define OSAL_TEST_TIMER_ID                (1U)
391     #define OSAL_TEST_TIMER_ID2               (2U)
392     #define OSAL_TEST_TIMER_PERIOD            (5000U)
393   #else
394     #define OSAL_TEST_TIMER_ID                (2U)
395     #define OSAL_TEST_TIMER_ID2               (5U)
396     #define OSAL_TEST_TIMER_PERIOD            (5000U)
397   #endif
398 #elif defined(SOC_J7200)
399   UT_Timer_Type_t  timer_type    =          UT_Timer_DMTIMER;
400   #if defined (__TI_ARM_V7R4__)
401     #define OSAL_TEST_TIMER_ID                (1U)
402     #define OSAL_TEST_TIMER_ID2               (2U)
403     #define OSAL_TEST_TIMER_PERIOD            (5000U)
404   #else
405     #define OSAL_TEST_TIMER_ID                (2U)
406     #define OSAL_TEST_TIMER_ID2               (5U)
407     #define OSAL_TEST_TIMER_PERIOD            (5000U)
408   #endif
409 #elif defined(SOC_AM64X)
410   UT_Timer_Type_t  timer_type    =          UT_Timer_DMTIMER;
411   #if defined(BUILD_MCU)
412     #define OSAL_TEST_TIMER_ID                (1U)
413     #define OSAL_TEST_TIMER_ID2               (2U)
414     #define OSAL_TEST_TIMER_PERIOD            (5000U)
415   #endif
416   #if defined(BUILD_MPU)
417     #define OSAL_TEST_TIMER_ID                (4U)
418     #define OSAL_TEST_TIMER_ID2               (2U)
419     #define OSAL_TEST_TIMER_PERIOD            (5000U)
420   #endif
421   #if defined(BUILD_M4F)
422     #define OSAL_TEST_TIMER_ID                (1U)
423     #define OSAL_TEST_TIMER_ID2               (2U)
424     #define OSAL_TEST_TIMER_PERIOD            (5000U)
425   #endif
426 #elif (defined(SOC_TPR12) || defined (SOC_AWR294X))
427     UT_Timer_Type_t  timer_type =           UT_Timer_RTITIMER;
428 #define OSAL_TEST_TIMER_ID                    (TimerP_ANY)
429 #if defined(SIM_BUILD)
430 #define OSAL_TEST_TIMER_PERIOD                (500U)
431 #else
432 #define OSAL_TEST_TIMER_PERIOD                (5000U)
433 #endif
434 #else
435 UT_Timer_Type_t  timer_type   =           UT_Timer_DMTIMER;
436   #if defined (__ARM_ARCH_7A__)
437     #define OSAL_TEST_TIMER_ID                (1U)
438     #define OSAL_TEST_TIMER_PERIOD            (5000U)
439   #elif   defined (_TMS320C6X)
440     #define OSAL_TEST_TIMER_ID                (4U)
441     #define OSAL_TEST_TIMER_PERIOD            (5000U)
442   #else
443     #define OSAL_TEST_TIMER_ID                (8U)
444     #define OSAL_TEST_TIMER_PERIOD            (5000U)
445   #endif
446 #endif
448 #if defined(SIM_BUILD)
449 #define      OSAL_GET_TIME_MAX_SAMPLES  (10U)
450 #else
451 #define      OSAL_GET_TIME_MAX_SAMPLES  (20U)
452 #endif
453 volatile uint32_t timerIsrCount = 0;
454 volatile uint32_t timerIsr2Count = 0;
456 #if defined(SIM_BUILD)
457 #define OSAL_TIMER_TEST_MAX_INTERRUPTS      (10U)
458 #else
459 #define OSAL_TIMER_TEST_MAX_INTERRUPTS      (100U)
460 #endif
463 #if defined (ENABLE_GET_TIME_TEST)
464 uint64_t     gTestTimeRd[OSAL_GET_TIME_MAX_SAMPLES];
465 #endif
467 void timerIsr(void *arg)
469 #if defined(BARE_METAL) && defined(__TI_ARM_V5__)
470     TimerP_ClearInterrupt(handle);
471 #endif
473 #if defined (ENABLE_GET_TIME_TEST)
474     if (timerIsrCount < OSAL_GET_TIME_MAX_SAMPLES)
475     {
476         gTestTimeRd[timerIsrCount] = TimerP_getTimeInUsecs();
477     }
478 #endif
479     timerIsrCount++;
483 #if    TWO_TIMER_INTERRUPT_TEST
484 void timerIsr2(void *arg)
486     timerIsr2Count++;
488 #endif
490 /*
491  * ========= Osal Delay Test function =========
492  */
493 #if defined(SIM_BUILD)
494 #define OSAL_DELAY_TIME         1
495 #else
496 #define OSAL_DELAY_TIME         10
497 #endif
498 bool Osal_delay_test(void)
500 #if !defined(SOC_AM64X)
501    int32_t i;
502   /* This test assumes that Board init has been already
503    * called outside this function
504    */
505    /* Notice a '.' on terminal for every 1 second */
507    for (i=0; i<10;i++) {
508 #endif
509       Osal_delay(OSAL_DELAY_TIME);
510       OSAL_log(".");
511 #if !defined(SOC_AM64X)
512    }
513 #endif
514    OSAL_log("\n");
516   return(true);
519 #if defined (ENABLE_GET_TIME_TEST)
520 /*
521  * ========= Osal getTime Test function =========
522  */
523 bool Osal_getTime_test(void)
525    int32_t      i;
526    bool         retVal   = true;
528    OSAL_log(" \n     time read in micro seconds is \n ");
529    for (i = 0; i < OSAL_GET_TIME_MAX_SAMPLES; i++)
530    {
531        OSAL_log(" %d \n ", (uint32_t) gTestTimeRd[i]);
532    }
534    return(retVal);
536 #endif
538 /*
539  *  ======== Timer test function ========
540  */
541 bool OSAL_timer_test()
543     TimerP_Params timerParams;
544 #if !defined (__TI_ARM_V5__)
545     /* Timer handle is defined as global for OMAPL13x ARM9 core since
546        it is required for clearing the interrupt from ISR */
547     TimerP_Handle handle;
548 #endif
550 #if    TWO_TIMER_INTERRUPT_TEST
551     TimerP_Handle handle2;
552 #endif
553     TimerP_Status timerStatus;
554     Osal_HwAttrs  hwAttrs;
556 #if defined(BARE_METAL)
557     int32_t       id    = OSAL_TEST_TIMER_ID;
558 #else
559     /* Pass TimerP_ANY for FreeRTOS, since FreeRTOS kernel running on each core
560      * will use one timer per core. So if there is a conflict in the id passed
561      * TimerP_create will fail. See FreeRTOS_config_<core>.h for details about
562      * the timer instance used by each core */
563     int32_t       id    = TimerP_ANY;
564 #endif
566 #if defined(SOC_AM437x)
567     /* We can't use Timer_ANY for Sys BIOS as it allocates Timer0 which is
568      * firewalled on HS device and hence changing the Test Timer ID = 3 for
569      * both HS and GP parts
570      */
571     id                  = OSAL_TEST_TIMER_ID;
572 #endif
574 #if defined(SOC_J721E)
575 #if !(defined(BARE_METAL) || defined(FREERTOS))
576 #if defined(BUILD_C66X_1) || defined(BUILD_C66X_2) || defined(BUILD_C7X_1) || defined(BUILD_MCU1_0)
577     id                  = OSAL_TEST_TIMER_ID;
578 #endif
579 #endif
580 #endif
581     volatile      int32_t i;
582     uint32_t      prevCount, ctrlBitmap = OSAL_HWATTR_SET_OSALDELAY_TIMER_BASE ;
583     bool          ret = true;
584     int32_t       osal_ret;
586 #if (defined (SOC_AM437x) || defined (SOC_AM335x))
587     *(unsigned int*)CM_DPLL_CLKSEL_TIMER3_CLK = 0x1; /* high frequency input clock */
589     // enable the TIMER
590     *(unsigned int*)CM_PER_TIMER3_CLKCTRL = 0x2; /* Module is explicitly enabled */
591 #endif
593     /* Set the timer base for the osal delay */
594     Osal_getHwAttrs(&hwAttrs);
596 #if defined (SOC_AM437x)
597     hwAttrs.osalDelayTimerBaseAddr = (uintptr_t) 0x48040000U; /* DMTIMER2 */
598 #endif
600 #if defined (OSAL_TEST_CPU_FREQ_KHZ)
601     hwAttrs.cpuFreqKHz = OSAL_TEST_CPU_FREQ_KHZ;
602     ctrlBitmap        |= OSAL_HWATTR_SET_CPU_FREQ;
603 #endif
605     /* This API should return osal_OK for AM3/AM4 and return unsupported for other Socs */
606     osal_ret = Osal_setHwAttrs(ctrlBitmap, &hwAttrs);
608 #if defined (SOC_AM437x) || defined (SOC_AM335x)
609     if (osal_ret == osal_OK) {
610       ret = true;
611     }
612     else {
613       ret = false;
614     }
615 #else
616     if ((osal_ret == osal_UNSUPPORTED) ||
617        (osal_ret == osal_OK)) {
618       ret = true;
619     }
620     else {
621       ret = false;
622     }
623 #endif /* (SOC_AM437x) || defined (SOC_AM335x) */
625     TimerP_Params_init(&timerParams);
626     timerParams.runMode    = TimerP_RunMode_CONTINUOUS;
627     timerParams.startMode  = TimerP_StartMode_USER;
628     timerParams.periodType = TimerP_PeriodType_MICROSECS;
629     timerParams.period     = OSAL_TEST_TIMER_PERIOD;
631 #if defined(SOC_J721E) || defined(SOC_J7200)
632 #if defined(BUILD_C66X_1)
633     /* the Eevnt 21 is used for DMTimer0 by SYS/BIOS by default, so we need to use a different one here for DMTimer2 */
634         timerParams.eventId    = 22;
635     /* the Interrupt 14 is used for DMTimer0 by SYS/BIOS by default, so we need to use a different one here for DMTimer2 */
636     timerParams.intNum     = 15;
637     OSAL_log("\n set intNum=%d, id=%d,  \n", timerParams.intNum, id);
638 #endif
639 #if defined(BUILD_C66X_2)
640     /* the Eevnt 20 is used for DMTimer0 by SYS/BIOS by default, so we need to use a different one here for DMTimer2 */
641         timerParams.eventId    = 22;
642     /* the Interrupt 14 is used for DMTimer0 by SYS/BIOS by default, so we need to use a different one here for DMTimer2 */
643     timerParams.intNum     = 15;
644 #endif
646 #if defined(BUILD_C7X_1)
647     timerParams.intNum     = 15;
648     OSAL_log("\n set intNum=%d, id=%d,  \n", timerParams.intNum, id);
649 #endif
650 #endif
652 #if !defined(SOC_J721E) || !defined(SOC_J7200)
653 #if defined(_TMS320C6X)
654 #if defined(SOC_TPR12)
655     timerParams.intNum     = 16;
656 #else
657     timerParams.intNum     = 15;
658 #endif
659     OSAL_log("\n set intNum=%d, id=%d,  \n", timerParams.intNum, id);
660 #endif
661 #endif
663     if (timer_type == UT_Timer_TIMER64)
664     {
665       timerParams.timerMode = TimerP_Timer64Mode_UNCHAINED;
666       timerParams.timerHalf = TimerP_Timer64Half_LOWER;
667     }
668     handle = TimerP_create(id, (TimerP_Fxn)&timerIsr, &timerParams);
670     /* don't expect the handle to be null */
671     if (handle == NULL_PTR)
672     {
673       OSAL_log("\n Timer Create error \n");
674       ret = false;
675     }
677 #if defined(ENABLE_GET_TIME_TEST)
678      TimerP_getTimeInUsecs();
679 #endif
681 #if    TWO_TIMER_INTERRUPT_TEST
683 #if (defined(_TMS320C6X) && (!defined(SOC_J721E) ))
684     timerParams.intNum     = 14;
685 #endif
687     if (ret == true)  {
688       handle2 = TimerP_create(OSAL_TEST_TIMER_ID2, (TimerP_Fxn)&timerIsr2, &timerParams);
689       /* don't expect the handle to be null */
690       if (handle2 == NULL_PTR)
691       {
692         OSAL_log("\n Timer Create error for handle2 \n");
693         ret = false;
694       }
695     }
696 #endif
698     if (ret == true)
699     {
700       timerIsrCount = 0U;
701       timerStatus = TimerP_start(handle);
703       if (timerStatus != TimerP_OK) {
704         OSAL_log("Err: Coult not start the timer %d \n", id);
705         ret = false;
706       }
708 #if    TWO_TIMER_INTERRUPT_TEST
709       timerIsr2Count = 0U;
710       timerStatus = TimerP_start(handle2);
712       if (timerStatus != TimerP_OK) {
713         OSAL_log("Err: Coult not start the timer %d \n", id + 1);
714         ret = false;
715       }
717       while (1)
718       {
719         if (timerIsr2Count >= OSAL_TIMER_TEST_MAX_INTERRUPTS) {
720           timerStatus = TimerP_stop(handle2);
721           if (timerStatus != TimerP_OK) {
722             OSAL_log("Err: Coult not stop the timer %d \n", id);
723             ret = false;
724           }
725           break;
726         }
727       }
728 #endif
730       while (1)
731       {
732         if (timerIsrCount >= OSAL_TIMER_TEST_MAX_INTERRUPTS) {
733           timerStatus = TimerP_stop(handle);
734           if (timerStatus != TimerP_OK) {
735             OSAL_log("Err: Coult not stop the timer %d \n", id);
736             ret = false;
737           }
739           break;
740         }
741       }
743       /* Latch the ISR count after the timer stops */
744       prevCount = (timerIsrCount);
746       /* Give some time for all pending interrupts to be processed */
747       for(i = 0; i < 1000; i++)
748       {
749         asm (" nop ");
750       }
752       /* Now check if timer ISR gets kicked in
753        * timer ISR should not be kicked in */
754       if (ret == true)
755       {
756          for (i = 0; i < 50000; i++);
758          if (prevCount != timerIsrCount)
759          {
760            OSAL_log(" Error: Timer appears to be not stopped via OSAL calls, val1 = %u and val2 = %u \n ", prevCount, timerIsrCount);
761            ret = false;
762          }
763          else
764          {
765            OSAL_log("  TimerTestLog: got %u ticks from timer id = %d \n", timerIsrCount, id);
766 #if    TWO_TIMER_INTERRUPT_TEST
767            OSAL_log("  TimerTestLog: got %u ticks from timer id = %d \n", timerIsr2Count, id+1);
768 #endif
769          }
770        }
771     }
773     if (handle != NULL_PTR)
774     {
775       if (TimerP_delete(handle) != TimerP_OK)
776       {
777         ret = false;
778       }
779     }
781     for (i = 0; i < (log2(TIMERP_AVAILABLE_MASK+1U)+1U); i++)
782     {
783         TimerP_Params_init(&timerParams);
784         timerParams.runMode    = TimerP_RunMode_CONTINUOUS;
785         timerParams.startMode  = TimerP_StartMode_USER;
786         timerParams.periodType = TimerP_PeriodType_MICROSECS;
787         timerParams.period     = OSAL_TEST_TIMER_PERIOD;
788         handle = TimerP_create(TimerP_ANY, NULL, &timerParams);
789         /* don't expect the handle to be null */
790         if (handle == NULL_PTR)
791         {
792             OSAL_log("\n Error: Timer Create failed for %d th time \n", i);
793             ret = false;
794         }
795         if (TimerP_delete(handle) != TimerP_OK)
796         {
797             OSAL_log("\n Error: Timer Delete failed for %d th time \n", i);
798             ret = false;
799         }
800     }    
801     return (ret);
804 /*
805  *  ======== Clock test function ========
806  */
807 bool OSAL_clock_test()
809     return true;
812 #ifdef MANUAL_CACHE_TEST
814 #if defined (__ARM_ARCH_7A__)
815 #include <ti/csl/csl_a15.h>
816 #include <ti/csl/csl_armGicAux.h>
817 #elif defined (_TMS320C6X)
818 #include <ti/csl/csl_cacheAux.h>
819 #endif
821 #if defined (SOC_AM437x) || defined(SOC_AM335x)
822 #include <ti/starterware/include/chipdb.h>
823 #include <ti/starterware/include/armv7a/pl310.h>
824 #include <ti/starterware/include/armv7a/pl310_config.h>
825 #endif
827 #define BUF_LEN 256
828 #define LOCAL_CPU_WRITE_PATTERN_1 0xA1A1A1A1
829 #define LOCAL_CPU_WRITE_PATTERN_2 0xA2A2A2A2
830 #define LOCAL_CPU_WRITE_PATTERN_3 0xA3A3A3A3
832 #define ALTERNATE_CPU_WRITE_PATTERN_1 0xB1B1B1B1
833 #define ALTERNATE_CPU_WRITE_PATTERN_2 0xB2B2B2B2
834 #define ALTERNATE_CPU_WRITE_PATTERN_3 0xB3B3B3B3
836 #if defined (__ARM_ARCH_7A__)
837 uint32_t ddr_buf[BUF_LEN] __attribute__((aligned(256))); // GCC way of aligning
838 #elif defined (_TMS320C6X)
839 #pragma DATA_SECTION(ddr_buf,".cachetest_ddrbuf")
840 #pragma DATA_ALIGN(ddr_buf,256)
841 uint32_t ddr_buf[BUF_LEN];
842 #elif defined(__TI_ARM_V7M4__)
843 uint32_t ddr_buf[BUF_LEN];
844 #endif
845 void OSAL_cache_test_fill_buf(uint32_t *buf, int len,uint32_t pattern) {
846   int i;
847   for(i=0;i<len;i++) {
848      buf[i]=pattern;
849   }
851 /* Returns FALSE if all the buffer is not 'pattern'. This will read the contents though */
852 bool OSAL_cache_test_check_buf(uint32_t *buf, int len,uint32_t pattern) {
853   int i;
854   bool match=TRUE;
855   for(i=0;i<len;i++) {
856      if(buf[i]!=pattern) {
857        match=FALSE;
858      }
859   }
860   return(match);
863 #if defined (SOC_AM572x) || defined (SOC_AM574x)
864 bool OSAL_cache_test()
867   bool match,res=TRUE;
868 #if defined (__ARM_ARCH_7A__)
869   CSL_a15EnableCache();
870 #elif defined(_TMS320C6X)
871     /* Enable for most of the DDR3 memory , especially the first two MAR regions where ddr_buf will reside */
872     CACHE_enableCaching(128);
873     CACHE_enableCaching(129);
874     CACHE_setL1DSize(CACHE_L1_4KCACHE);
875     CACHE_setL2Size(CACHE_1024KCACHE);
876 #endif
877   OSAL_log("This manual cache test is a CCS based test. Please do the following\n");
878   OSAL_log("1) On the local CPU open two memory windows for the address 0x%x\n: One CPU view and One Physical memory view\n",&ddr_buf[0]);
879   OSAL_log("2) Connect an alternate CPU (for example if local cpu is A15, open a c66/m4 as the alternate CPU\n");
880   OSAL_log("3) On the alternate CPU ( preferably a different window through (CCS->New Window)) Open the address 0x%x\n with a physical memory view\n",&ddr_buf[0]);
882   OSAL_log("\n**** Forcing a read to get the buffer cached() ******\n");
883   OSAL_cache_test_check_buf(ddr_buf,BUF_LEN,0); /* Checking for dummy pattern, just to force the cache read */
885   OSAL_log("\n**** Testing Cache_Invalidate() ******\n");
887   OSAL_log("\nWriting  0x%x local ddr memory\n",LOCAL_CPU_WRITE_PATTERN_1);
888     /************************ TEST for CacheP_Inv() *********************/
889     /* A15- Write LOCAL_CPU_WRITE_PATTERN_1 in to ddr_buf[0] */
890     OSAL_cache_test_fill_buf(ddr_buf,BUF_LEN,LOCAL_CPU_WRITE_PATTERN_1);
892     /* Check in the alternate cpu window (m4/c66x/a15) if it can see it (Physical memory). It shouldnt if cache is enabled. */
893     OSAL_log("\nCheck in the alternate cpu window (m4/c66x/a15) if it can see it (Physical memory). It shouldn't appear as it is still in cache\n");
895     OSAL_log("\nInvalidating cache.\n");
896     /* Now OSAL_CacheInv() - Invalidates and writes back cache() */
897     CacheP_Inv(ddr_buf,BUF_LEN*sizeof(uint32_t));
899     OSAL_log("\nCheck in alternate cpu window (m4/c66x/a15) if it can see it (Physical memory). For A15 it should (Invalidate also writes back for A15), for others it should not \n");
901     OSAL_log("\nNow write(%d 32-bit words) of pattern 0x%x on the alternate CPU physical memory window (a15/m4/c66x) \n",BUF_LEN,ALTERNATE_CPU_WRITE_PATTERN_1);
902     OSAL_log("\nCheck if this pattern 0x%x has made it to the physical memory view of this cpu.It should. \n",ALTERNATE_CPU_WRITE_PATTERN_1);
904 #if defined(__ARM_ARCH_7A__)
905     /* The below invalidate test is to account for ARM prefetching. On A15 Cache Inv writes back too. To see any changes AFTER the DDR was
906     externally modified, a Cache Invalidate is required */
907     CacheP_Inv(ddr_buf,BUF_LEN*sizeof(uint32_t));
908 #endif
909     OSAL_log("\nChecking if local CPU read fetches the 0x%x value updated by the alternate cpu core\n",ALTERNATE_CPU_WRITE_PATTERN_1);
910     /* Now read the value on A15 now */
911     match=OSAL_cache_test_check_buf(ddr_buf,BUF_LEN,ALTERNATE_CPU_WRITE_PATTERN_1);
912     if(match==TRUE) {
913         OSAL_log("\nPattern matched. OSAL_CacheInv() Test passed\n");
914     } else {
915         OSAL_log("\n OSAL_CacheInv() Test failed\n");
916     }
918     /************************ TEST for CacheP_wb() *********************/
919     OSAL_log("\n**** Testing Cache_WriteBack() ******\n");
921     OSAL_log("\nWriting  0x%x local ddr memory\n",LOCAL_CPU_WRITE_PATTERN_2);
922     /* local cpu- Write LOCAL_CPU_WRITE_PATTERN_2 in to ddr_buf[0] */
923     OSAL_cache_test_fill_buf(ddr_buf,BUF_LEN,LOCAL_CPU_WRITE_PATTERN_2);
925     OSAL_log("\nCheck in the alternate cpu window (m4/c66x/a15) if the pattern 0x%x can be seen it (Physical memory). It shouldn't appear as it is still in cache\n",LOCAL_CPU_WRITE_PATTERN_2);
927     OSAL_log("\nWriting back cache.\n");
928     /* Now OSAL_CacheWb() - Writes back cache() */
929     CacheP_wb(ddr_buf,BUF_LEN*sizeof(uint32_t));
931     /* Check in DSP window if it can see it (Physical memory). It should now. */
932     OSAL_log("\nCheck in alternate cpu window (m4/c66x/a15) and verify that the 0x%x is seen in Physical memory\n",LOCAL_CPU_WRITE_PATTERN_2);
934     /* If so, write back portion is tested. */
935     OSAL_log("\nNow write the pattern 0x%x on the alternate CPU physical memory window (a15/m4/c66x) \n",ALTERNATE_CPU_WRITE_PATTERN_2);
936     /* Since, on this local cpu, we just wrote back cache() only, and not invalidated, the ALTERNATE_CPU_WRITE_PATTERN_2 wont be seen in the local cpu's cached memory
937        Read Variable on A15 to ensure CPU Read(). The value should be the old LOCAL_CPU_WRITE_PATTERN_2.. and NOT the ALTERNATE_CPU_WRITE_PATTERN_2.. which the alternate CPU wrote. */
938     match=OSAL_cache_test_check_buf(ddr_buf,BUF_LEN,LOCAL_CPU_WRITE_PATTERN_2);
939     if(match==TRUE) {
940         OSAL_log("\nPattern matched. OSAL_Cache_Writeback() Test passed\n");
941      } else {
942         OSAL_log("\n OSAL_Cache_Writeback() Test failed\n");
943      }
945     /************************ TEST for CacheP_wbInv() *********************/
946      OSAL_log("\n**** Testing Cache_WriteBack_Invalidate() ******\n");
948      OSAL_log("\nWriting  0x%x local ddr memory\n",LOCAL_CPU_WRITE_PATTERN_3);
950      /* local cpu- Write LOCAL_CPU_WRITE_PATTERN_3 in to ddr_buf[0] */
951      OSAL_cache_test_fill_buf(ddr_buf,BUF_LEN,LOCAL_CPU_WRITE_PATTERN_3);
953      OSAL_log("\nCheck in the alternate cpu window (m4/c66x/a15) if the pattern 0x%x can be seen it (Physical memory). It shouldn't appear as it is still in cache\n",LOCAL_CPU_WRITE_PATTERN_3);
955      OSAL_log("\nWriting back cache and invalidating it.\n");
957      /* Now OSAL_CacheWbInv() - Writes back cache and invalidate() */
958       CacheP_wbInv(ddr_buf,BUF_LEN*sizeof(uint32_t));
960       /* Check in DSP window if it can see it (Physical memory). It should now. */
961       OSAL_log("\nCheck in alternate cpu window (m4/c66x/a15) and verify that the 0x%x is seen in Physical memory. If not it is a failure \n",LOCAL_CPU_WRITE_PATTERN_3);
964       OSAL_log("\nNow write the pattern 0x%x on the alternate CPU physical memory window (a15/m4/c66x) \n",ALTERNATE_CPU_WRITE_PATTERN_3);
966 #if defined(__ARM_ARCH_7A__)
967     /* This is due to ARM prefetching */
968      CacheP_Inv(ddr_buf,BUF_LEN*sizeof(uint32_t));
969 #endif
971     /* Since, on local cpu, we not only wrote back cache but also invalidated it,the local cpu should be able the alternate pattern now */
972     match=OSAL_cache_test_check_buf(ddr_buf,BUF_LEN,ALTERNATE_CPU_WRITE_PATTERN_3);
973     if(match==TRUE) {
974         OSAL_log("\nPattern matched. OSAL_Cache_WritebackInvalidate() Test passed\n");
975      } else {
976         OSAL_log("\nOSAL_Cache_WritebackInvalidate() Test failed\n");
977      }
979      return(res);
981 #endif /* SOC_AM572x || SOC_AM574x */
982 #endif /* MANUAL_CACHE_TEST */
984 /*
985  *  ======== Extended memory block test function ========
986  * This test aims at testing the create and delete functions that
987  * are enhanced to support extended memory blocks for SemaphoreP and HwiP
988  */
989 #define OSAL_TEST_NUM_EXT_SEMAPHORES    (1U)
990 #define OSAL_TEST_NUM_EXT_HWIPS         (1U)
992 #if defined (BARE_METAL)
993 #define SEMP_BLOCK_SIZE (OSAL_TEST_NUM_EXT_SEMAPHORES * OSAL_NONOS_SEMAPHOREP_SIZE_BYTES)
994 #define HWIP_BLOCK_SIZE (OSAL_TEST_NUM_EXT_HWIPS * OSAL_NONOS_HWIP_SIZE_BYTES)
995 uint8_t semPMemBlock[SEMP_BLOCK_SIZE];
996 uint8_t hwiPMemBlock[HWIP_BLOCK_SIZE];
997 #else
998 #define SEMP_BLOCK_SIZE (OSAL_TEST_NUM_EXT_SEMAPHORES * OSAL_TIRTOS_SEMAPHOREP_SIZE_BYTES)
999 #define HWIP_BLOCK_SIZE (OSAL_TEST_NUM_EXT_HWIPS * OSAL_TIRTOS_HWIP_SIZE_BYTES)
1000 uint8_t semPMemBlock[SEMP_BLOCK_SIZE];
1001 uint8_t hwiPMemBlock[HWIP_BLOCK_SIZE];
1002 #endif
1004 static void myIsr(void)
1008 bool OSAL_ExtBlock_test(void)
1010     SemaphoreP_Params semParams;
1011     HwiP_Params       hwiParams;
1012     Osal_HwAttrs      hwAttrs;
1013     int32_t           osal_ret;
1014     uint32_t          ctrlBitMap = ( OSAL_HWATTR_SET_SEMP_EXT_BASE |
1015                                      OSAL_HWATTR_SET_HWIP_EXT_BASE);
1016     SemaphoreP_Handle semHandle;
1017     HwiP_Handle       hwiHandle;
1019     /* Set the timer base for the osal delay */
1020     osal_ret = Osal_getHwAttrs(&hwAttrs);
1021     if (osal_ret != osal_OK)
1022     {
1023         return (false);
1024     }
1026     /* This API should return osal_OK for AM3/AM4 and return unsupported for other Socs */
1027     hwAttrs.extSemaphorePBlock.base = (uintptr_t) &semPMemBlock[0];
1028     hwAttrs.extSemaphorePBlock.size = SEMP_BLOCK_SIZE;
1029     hwAttrs.extHwiPBlock.size       = HWIP_BLOCK_SIZE;
1030     hwAttrs.extHwiPBlock.base       = (uintptr_t) &hwiPMemBlock[0];
1031     osal_ret = Osal_setHwAttrs(ctrlBitMap, &hwAttrs);
1032     if (osal_ret != osal_OK)
1033     {
1034         return (false);
1035     }
1037     /* Default parameter initialization */
1038     SemaphoreP_Params_init(&semParams);
1040     /* create the semaphore block */
1041     semHandle = SemaphoreP_create(0, &semParams);
1042     if (semHandle == (SemaphoreP_Handle) NULL_PTR)
1043     {
1044         return (false);
1045     }
1047     /* Verify the block created is in the extended memory block range */
1048     if (semHandle != (SemaphoreP_Handle) &semPMemBlock[0])
1049     {
1050         return(false);
1051     }
1053     /* delete the semaphore block */
1054     osal_ret = SemaphoreP_delete(semHandle);
1055     if (osal_ret != (SemaphoreP_Status) SemaphoreP_OK)
1056     {
1057         return (false);
1058     }
1061     /* Default parameter initialization */
1062     HwiP_Params_init(&hwiParams);
1064     /* create the hwi block */
1065     hwiHandle = HwiP_create(8, (HwiP_Fxn)myIsr, &hwiParams);
1066     if (hwiHandle == (HwiP_Handle) NULL_PTR)
1067     {
1068         return (false);
1069     }
1071     /* Verify the block created is in the extended memory block range */
1072     if (hwiHandle != (HwiP_Handle) &hwiPMemBlock[0])
1073     {
1074         return(false);
1075     }
1077     /* delete the hwi block */
1078     osal_ret = HwiP_delete(hwiHandle);
1079     if (osal_ret != (HwiP_Status) HwiP_OK)
1080     {
1081         return (false);
1082     }
1084     /* Clear the extended block base for next tests */
1085     /* This API should return osal_OK for AM3/AM4 and return unsupported for other Socs */
1086     hwAttrs.extSemaphorePBlock.base = (uintptr_t) NULL_PTR;
1087     hwAttrs.extSemaphorePBlock.size = 0;
1088     hwAttrs.extHwiPBlock.size       = 0;
1089     hwAttrs.extHwiPBlock.base       = (uintptr_t) NULL_PTR;
1090     osal_ret = Osal_setHwAttrs(ctrlBitMap, &hwAttrs);
1091     if (osal_ret != osal_OK)
1092     {
1093         return (false);
1094     }
1095     return(true);
1100 /*
1101  *  ======== Semaphore test function ========
1102  */
1103 bool OSAL_semaphore_test()
1105     SemaphoreP_Params semParams;
1106     SemaphoreP_Handle handle1, handle2;
1108     SemaphoreP_Params_init(&semParams);
1110     /* Test 1: counting mode, no timeout */
1111     semParams.mode = SemaphoreP_Mode_COUNTING;
1112     handle1 = SemaphoreP_create(0, &semParams);
1113     if (handle1 == NULL_PTR)
1114     {
1115         return false;
1116     }
1117     if (SemaphoreP_post(handle1) != SemaphoreP_OK)
1118     {
1119         return false;
1120     }
1121     if (SemaphoreP_pend(handle1, 0) != SemaphoreP_OK)
1122     {
1123         return false;
1124     }
1126     /* Test 2: binary mode, with timeout */
1127     semParams.mode = SemaphoreP_Mode_BINARY;
1128     handle2 = SemaphoreP_create(1, &semParams);
1129     if (handle2 == NULL_PTR)
1130     {
1131         return false;
1132     }
1133     if (SemaphoreP_pend(handle2, 0) != SemaphoreP_OK)
1134     {
1135         return false;
1136     }
1137     if (SemaphoreP_pend(handle2, 10) != SemaphoreP_TIMEOUT)
1138     {
1139         return false;
1140     }
1142     if (SemaphoreP_delete(handle1) != SemaphoreP_OK)
1143     {
1144         return false;
1145     }
1147     if (SemaphoreP_delete(handle2) != SemaphoreP_OK)
1148     {
1149         return false;
1150     }
1152     return true;
1155 #if !(defined(BARE_METAL) || defined(FREERTOS))
1157 /*
1158  *  ======== Queue test function ========
1159  */
1160 typedef struct Test_Queue_Buf_s
1162     Osal_Queue_Elem lnk;
1163     uint32_t        index;
1164     uint8_t*        pkt;
1166 } Test_Queue_Buf;
1168 bool OSAL_queue_test()
1170     Osal_Queue_Elem queueList;
1171     Osal_Queue_Handle   handle;
1172     Test_Queue_Buf buf[10], *pBuf;
1173     int i;
1175     Osal_Queue_construct((void *)&queueList, (void *)NULL);
1176     handle = Osal_Queue_handle((void *)&queueList);
1178     if (handle == NULL_PTR)
1179     {
1180         OSAL_log("Failed to create queue \n");
1181         return false;
1182     }
1184     for (i = 0; i < 10; i++)
1185     {
1186         buf[i].index = (uint32_t)i;
1187         buf[i].pkt = NULL;
1188     }
1190     /* Test 1: queue push/pop test */
1191     for (i = 0; i < 10; i++)
1192     {
1193         Osal_Queue_put(handle, (Osal_Queue_Elem *)&buf[i]);
1194     }
1196     for (i = 0; i < 10; i++)
1197     {
1198         pBuf = (Test_Queue_Buf *)Osal_Queue_get(handle);
1200         if (pBuf == NULL_PTR)
1201         {
1202             OSAL_log("Failed to pop queue element %d \n", i);
1203             return false;
1204         }
1206         if (pBuf->index != i)
1207         {
1208             OSAL_log("Pop element %d, but expect %d \n", pBuf->index, i);
1209             return false;
1211         }
1212     }
1214     /* Test 2: queue empty test */
1215     if (!Osal_Queue_empty(handle))
1216     {
1217         OSAL_log("Empty queue check failed\n");
1218         return false;
1219     }
1221     pBuf = (Test_Queue_Buf *)Osal_Queue_get(handle);
1223     if (pBuf != (Test_Queue_Buf *)&queueList)
1224     {
1225         OSAL_log("Queue is still not empry with element %p handle %p queue struct %p\n", pBuf, handle, &queueList);
1226         return false;
1227     }
1229     return true;
1232 volatile bool gFlagSwi;
1233 void mySwiFxn(uintptr_t arg0, uintptr_t arg1)
1235     gFlagSwi = 1U;
1238 bool OSAL_swi_test()
1240     SwiP_Handle handle;
1241     SwiP_Params swiParams;
1242     SwiP_Status status;
1243     bool        retVal = true;
1245     SwiP_Params_init(&swiParams);
1246     handle = SwiP_create((SwiP_Fxn)&mySwiFxn, &swiParams);
1247     if (handle == NULL_PTR)
1248     {
1249         OSAL_log("Failed to create software interrupt \n");
1250         retVal = false;
1251     }
1253     if (retVal == true)
1254     {
1255         gFlagSwi = 0;
1256         status = SwiP_post(handle);
1257         if (status != SwiP_OK)
1258         {
1259             OSAL_log("Failed to post software interrupt \n");
1260             retVal = false;
1261         }
1262     }
1264     if (retVal == true)
1265     {
1266         gTestlocalTimeout = 0x300000U;
1267         while (gTestlocalTimeout != 0U)
1268         {
1269             gTestlocalTimeout--;
1270             if (gFlagSwi)
1271             {
1272                 gFlagSwi = 0;
1273                 retVal = true;
1274                 break;
1275             }
1276         }
1278         if (gTestlocalTimeout == 0)
1279         {
1280             OSAL_log("Failed to get software interrupt \n");
1281             retVal = false;
1282         }
1283     }
1285     if (retVal == true)
1286     {
1287         status = SwiP_delete(&handle);
1288         if (status != SwiP_OK)
1289         {
1290             OSAL_log("Failed to delete software interrupt \n");
1291             retVal = false;
1292         }
1293     }
1295     return (retVal);
1297 #endif
1299 #if ENABLE_DEBUG_LOG_TEST
1300 bool OSAL_log_test()
1302     bool        retVal = true;
1304     OSAL_log("BegugP Log test starts!\n");
1306     DebugP_log0 ("debugP_log0 run successfully\n");
1307     DebugP_log1 ("debugP_log1 run with %u argument uccessfully\n", 1U);
1308     DebugP_log2 ("debugP_log2 run with %u arguments (2, %d) successfully\n", 2U, 2);
1309     DebugP_log3 ("debugP_log3 run with %u arguments (3, %d, %d) successfully\n", 3U, 3, 3);
1310     DebugP_log4 ("debugP_log4 run with %u arguments (4, %d, %d, 0x%x) successfully\n", 4U, 4, 4, 64);
1312     return (retVal);
1314 #endif
1316 #ifndef BARE_METAL
1317 #if  defined(FREERTOS)
1319 #else
1320 #include <ti/sysbios/knl/Clock.h>
1321 #endif
1322 #ifndef SIM_BUILD
1323 #define   OSAL_TASKP_TEST_ITERATION    (10U)
1324 #if  defined(FREERTOS)
1325 #define   OSAL_TASKP_TEST_1MS          (1U)
1326 #else
1327 #define   OSAL_TASKP_TEST_1MS          (1000U)
1328 #endif
1329 #define   OSAL_TASKP_TEST_TICKS        (1000U)
1330 #else
1331 #define   OSAL_TASKP_TEST_ITERATION    (2U)
1332 #define   OSAL_TASKP_TEST_1MS          (10U)
1333 #define   OSAL_TASKP_TEST_TICKS        (10U)
1334 #endif
1336 uint64_t OSAL_get_ticks()
1338     uint64_t ticks;
1339 #if  defined(FREERTOS)
1340     ticks = (uint64_t)uiPortGetRunTimeCounterValue();
1341 #else
1342     ticks = (uint64_t)Clock_getTicks();
1343 #endif
1344     return ticks;
1347 bool OSAL_task_sleep_test(void)
1349     int32_t i;
1350     uint64_t    start_time_nticks, end_time_nticks;
1351     uint32_t    diff_nticks, diff_tout;
1353     /* nTicks in OSAL is 1000 ticks per milli seconds
1354      * hence the task sleep = 1000 milliseconds should
1355      * provide the same sleep time as in TaskP_sleep(nTicks = 1000)
1356      */
1357     start_time_nticks = OSAL_get_ticks();
1359     for (i=0; i < OSAL_TASKP_TEST_ITERATION; i++)
1360     {
1361        TaskP_sleep(OSAL_TASKP_TEST_TICKS);
1362     }
1363     end_time_nticks = OSAL_get_ticks();
1364     diff_nticks     = (uint32_t)(end_time_nticks - start_time_nticks);
1366     start_time_nticks = OSAL_get_ticks();
1368     for (i=0; i < OSAL_TASKP_TEST_ITERATION; i++)
1369     {
1370        TaskP_sleepInMsecs(OSAL_TASKP_TEST_1MS);
1371     }
1372     end_time_nticks = OSAL_get_ticks();
1373     diff_tout       = (uint32_t)(end_time_nticks - start_time_nticks);
1375     OSAL_log(" \n \
1376                diff_nticks = %d \n \
1377                diff_tout   = %d \n ", diff_nticks, diff_tout);
1378 #if  !defined(FREERTOS)
1379     OSAL_log(" Clock_tickPeriod = %d \n \
1380                Clock_tickSource = %d ", Clock_tickPeriod, Clock_tickSource);
1381 #endif
1383     return (true);
1386 #endif
1388 #if  defined(FREERTOS)
1389 bool OSAL_mempry_test()
1391     void *memPtr1, *memPtr2, *memPtr[5];
1392     uint32_t align;
1393     bool retVal = true;
1394     uint32_t i;
1396     /* Test1: Allocate 16 bytes aligned memory. */
1397     align = 16;
1398     memPtr1 = MemoryP_ctrlAlloc(100, align);
1399     if (memPtr1 != NULL)
1400     {
1401         /* Check if teh allocated mempry is 16 bytes aligned. */
1402         if ((uintptr_t)memPtr1 & (align - 1)!= 0)
1403         {
1404             retVal = false;
1405         }
1406     }
1407     else
1408     {
1409         retVal = false;
1410     }
1412     /* Test2: Allocate 64 bytes aligned memory. */
1413     align = 64;
1414     memPtr2 = MemoryP_ctrlAlloc(200, align);
1415     if (memPtr2 != NULL)
1416     {
1417         /* Check if teh allocated mempry is 16 bytes aligned. */
1418         if ((uintptr_t)memPtr2 & (align - 1)!= 0)
1419         {
1420             retVal = false;
1421         }
1422     }
1423     else
1424     {
1425         retVal = false;
1426     }
1428     if (memPtr1 != NULL)
1429     {
1430         MemoryP_ctrlFree(memPtr1, 100);
1431     }
1432     if (memPtr2 != NULL)
1433     {
1434         MemoryP_ctrlFree(memPtr2, 200);
1435     }
1437     /* Test2: check memory leak
1438      * multiple iteration of alloc and free to give same mem pointer.
1439      */
1440     for (i=0; i<5; i++)
1441     {
1442         align = 64;
1443         memPtr[i] = MemoryP_ctrlAlloc(200, align);
1444         MemoryP_ctrlFree(memPtr[i], 200);
1445     }
1446     for (i=1; i<5; i++)
1447     {
1448         if (memPtr[i] != memPtr[i-1])
1449         {
1450             retVal = false;
1451             break;
1452         }
1453     }
1454     return retVal;
1456 #endif
1458 /*
1459  *  ======== main test function ========
1460  */
1461 #if defined(BARE_METAL)
1462 void osal_test()
1463 #elif defined(FREERTOS)
1464 void osal_test(void *arg0, void *arg1)
1465 #else
1466 void osal_test(UArg arg0, UArg arg1)
1467 #endif
1469     bool testFail = false;
1470     Osal_StaticMemStatus pMemStats;
1472     Board_initOSAL();
1474 #ifdef BUILD_C7X_1
1475     Osal_appC7xPreInit();
1476     C7x_ConfigureTimerOutput();
1477 #endif
1479 #ifdef BUILD_M4F    
1480     OSAL_log("\n M4 test \n");
1481 #endif
1483 #if defined(BUILD_C66X_1) || defined(BUILD_C66X_2)
1484 /* To set C66 timer interrupts on J7ES VLAB */
1485     C66xTimerInterruptInit();
1486 #endif
1488     OSAL_log(" OSAL Test Starting...\n Takes about 30 seconds ...\n"); 
1490 #if defined(BARE_METAL)
1491     /* No TASKP test for BAREmetal */
1492 #else
1493     /* TASK Sleep APIs test for RTOS */
1494     if (OSAL_task_sleep_test() == true)
1495     {
1496         OSAL_log("\n TaskP tests have passed. \n");
1497     }
1498     else
1499     {
1500         OSAL_log("\n TaskP tests have failed. \n");
1501     }
1502 #endif
1504     if(OSAL_hwi_test() == true)
1505     {
1506         OSAL_log("\n HWI tests have passed. \n");
1507     }
1508     else
1509     {
1510         OSAL_log("\n HWI tests have failed. \n");
1511         testFail = true;
1512     }
1514 #ifdef ENABLE_TIMER_TEST
1515     if(OSAL_timer_test() == true)
1516     {
1517         OSAL_log("\n Timer tests have passed. \n");
1518     }
1519     else
1520     {
1521         OSAL_log("\n Timer tests have failed. \n");
1522         testFail = true;
1523     }
1524 #endif
1526 /* The test does not support below SoCs */
1527 #if !defined(SOC_TDA2XX) && !defined(SOC_TDA2PX) && !defined(SOC_TDA2EX) && !defined(SOC_TDA3XX)
1528   OSAL_log("\n Running Osal_Delay test:");
1530   if(Osal_delay_test() == true)
1531   {
1532       OSAL_log("\n Osal_Delay  tests have passed. \n");
1533   }
1534   else
1535   {
1536       OSAL_log("\n Osal_Delay  tests have failed. \n");
1537       testFail = true;
1538   }
1539 #endif
1541 #ifdef ENABLE_GET_TIME_TEST
1542     OSAL_log("\n Running Osal_getTime test:");
1544     if(Osal_getTime_test() == true)
1545     {
1546         OSAL_log("\n Osal_getTime  tests have passed. \n");
1547     }
1548     else
1549     {
1550         OSAL_log("\n Osal_getTime  tests have failed. \n");
1551         testFail = true;
1552     }
1553 #endif
1555     if(OSAL_clock_test() == true)
1556     {
1557         OSAL_log("\n Clock tests have passed. \n");
1558     }
1559     else
1560     {
1561         OSAL_log("\n Clock tests have failed. \n");
1562         testFail = true;
1563     }
1565     if(OSAL_semaphore_test() == true)
1566     {
1567         OSAL_log("\n Semaphore tests have passed. \n");
1568     }
1569     else
1570     {
1571         OSAL_log("\n Semaphore tests have failed. \n");
1572         testFail = true;
1573     }
1575 #ifdef ENABLE_EXT_BLOCK_TEST
1577     if(OSAL_ExtBlock_test() == true)
1578     {
1579         OSAL_log("\n Extended Memory Block tests for HwiP/SwiP have passed. \n");
1580     }
1581     else
1582     {
1583         OSAL_log("\n Extended Memory Block tests for HwiP/SwiP have failed. \n");
1584         testFail = true;
1585     }
1586 #endif
1588     #ifdef MANUAL_CACHE_TEST
1589     /* This test is valid only for MANUAL testing */
1590     OSAL_cache_test();
1591     #endif
1593     /* Now print the static memory statistics */
1594     if(Osal_getStaticMemStatus(&pMemStats) == osal_OK)
1595     {
1596        OSAL_log("\n Semaphore Statistics:     \
1597                  \n  PeakSemObjs    = %u,     \
1598                  \n  numMaxSemObjs  = %u,     \
1599                  \n  numFreeSemObjs = %u \n", \
1600                  pMemStats.peakSemObjs,       \
1601                  pMemStats.numMaxSemObjs,     \
1602                  pMemStats.numFreeSemObjs);
1604        OSAL_log("\n Hwi Statistics:           \
1605                  \n  PeakHwiObjs    = %u,     \
1606                  \n  numMaxHwiObjs  = %u,     \
1607                  \n  numFreeHwiObjs = %u \n", \
1608                  pMemStats.peakHwiObjs,       \
1609                  pMemStats.numMaxHwiObjs,     \
1610                  pMemStats.numFreeHwiObjs);
1612        OSAL_log("\n Timer Statistics:           \
1613                  \n  PeakTimerObjs    = %u,     \
1614                  \n  numMaxTimerObjs  = %u,     \
1615                  \n  numFreeTimerObjs = %u \n", \
1616                  pMemStats.peakTimerObjs,       \
1617                  pMemStats.numMaxTimerObjs,     \
1618                  pMemStats.numFreeTimerObjs);
1620     }
1621     else
1622     {
1623       testFail = true;
1624       OSAL_log("\n Memory Statistics query failed \n");
1625     }
1627 #if !(defined(BARE_METAL) || defined(FREERTOS))
1628     if(OSAL_swi_test() == true)
1629     {
1630         OSAL_log("\n SWI tests have passed. \n");
1631     }
1632     else
1633     {
1634         OSAL_log("\n SWI tests have failed. \n");
1635         testFail = true;
1636     }
1638     if(OSAL_queue_test() == true)
1639     {
1640         OSAL_log("\n Queue tests have passed. \n");
1641     }
1642     else
1643     {
1644         OSAL_log("\n Queue tests have failed. \n");
1645         testFail = true;
1646     }
1647 #endif
1649 #if ENABLE_DEBUG_LOG_TEST
1650     if(OSAL_log_test() == true)
1651     {
1652         OSAL_log("\n DebugP Log tests have passed. \n");
1653     }
1654     else
1655     {
1656         OSAL_log("\n DebugP Log tests have failed. \n");
1657         testFail = true;
1658     }
1659 #endif
1661 #if defined(FREERTOS)
1662     if(OSAL_mempry_test() == true)
1663     {
1664         OSAL_log("\n MemoryP Log tests have passed. \n");
1665     }
1666     else
1667     {
1668         OSAL_log("\n MemoryP Log tests have failed. \n");
1669         testFail = true;
1670     }
1671 #endif
1673     if(testFail == true)
1674     {
1675         OSAL_log("\n Some tests have failed. \n");
1676     }
1677     else
1678     {
1679         OSAL_log("\n All tests have passed. \n");
1680     }
1682 #ifdef BARE_METAL
1683     while (1)
1684     {
1685     }
1686 #endif
1690 #ifdef BUILD_C7X_1
1691 void sysIdleLoop(void)
1693    __asm(" IDLE");
1696 #include <ti/sysbios/family/c7x/Hwi.h>
1697 #include <ti/csl/csl_clec.h>
1698 void C7x_ConfigureTimerOutput()
1700     CSL_ClecEventConfig   cfgClec;
1701     CSL_CLEC_EVTRegs     *clecBaseAddr = (CSL_CLEC_EVTRegs*)CSL_COMPUTE_CLUSTER0_CLEC_REGS_BASE;
1703     uint32_t input         = CSLR_COMPUTE_CLUSTER0_GIC500SS_SPI_TIMER0_INTR_PEND_0 + 992; /* Used for Timer Interrupt */
1704     uint32_t corepackEvent = 14;
1706     /* Configure CLEC */
1707     cfgClec.secureClaimEnable = FALSE;
1708     cfgClec.evtSendEnable     = TRUE;
1709     cfgClec.rtMap             = CSL_CLEC_RTMAP_CPU_ALL;
1710     cfgClec.extEvtNum         = 0;
1711     cfgClec.c7xEvtNum         = corepackEvent;
1712     CSL_clecConfigEvent(clecBaseAddr, input, &cfgClec);
1714     input         = CSLR_COMPUTE_CLUSTER0_GIC500SS_SPI_TIMER1_INTR_PEND_0 + 992; /* Used for Timer Interrupt */
1715     corepackEvent = 15;
1717     /* Configure CLEC */
1718     cfgClec.secureClaimEnable = FALSE;
1719     cfgClec.evtSendEnable     = TRUE;
1720     cfgClec.rtMap             = CSL_CLEC_RTMAP_CPU_ALL;
1721     cfgClec.extEvtNum         = 0;
1722     cfgClec.c7xEvtNum         = corepackEvent;
1723     CSL_clecConfigEvent(clecBaseAddr, input, &cfgClec);
1726 #endif
1728 #if defined(BUILD_C66X_1) || defined(BUILD_C66X_2)
1729 /* To set C66 timer interrupts on J7ES VLAB */
1730 void C66xTimerInterruptInit(void)
1732 #if defined (_TMS320C6X) && !defined(SOC_TPR12) && !defined (SOC_AWR294X)
1733     struct tisci_msg_rm_irq_set_req     rmIrqReq;
1734     struct tisci_msg_rm_irq_set_resp    rmIrqResp;
1736     /* On C66x builds we define OS timer tick in the configuration file to
1737      * trigger event #21 for C66x_1 and #20 for C66x_2. Map
1738      * DMTimer 0 interrupt to these events through DMSC RM API.
1739      */
1740     rmIrqReq.valid_params           = TISCI_MSG_VALUE_RM_DST_ID_VALID |
1741                                       TISCI_MSG_VALUE_RM_DST_HOST_IRQ_VALID;
1742     rmIrqReq.src_id                 = TISCI_DEV_TIMER0;
1743     rmIrqReq.src_index              = 0U;
1744 #if defined (BUILD_C66X_1)
1745     rmIrqReq.dst_id                 = TISCI_DEV_C66SS0_CORE0;
1746     rmIrqReq.dst_host_irq           = 21U;
1747 #endif
1748 #if defined (BUILD_C66X_2)
1749     rmIrqReq.dst_id                 = TISCI_DEV_C66SS1_CORE0;
1750     rmIrqReq.dst_host_irq           = 20U;
1751 #endif
1752     /* Unused params */
1753     rmIrqReq.global_event           = 0U;
1754     rmIrqReq.ia_id                  = 0U;
1755     rmIrqReq.vint                   = 0U;
1756     rmIrqReq.vint_status_bit_index  = 0U;
1757     rmIrqReq.secondary_host         = TISCI_MSG_VALUE_RM_UNUSED_SECONDARY_HOST;
1759     Sciclient_rmIrqSet(&rmIrqReq, &rmIrqResp, SCICLIENT_SERVICE_WAIT_FOREVER);
1761     /* On C66x builds we define OS timer tick in the configuration file to
1762      * trigger event #22 for C66x_1 and #22 for C66x_2. Map
1763      * DMTimer 0 interrupt to these events through DMSC RM API.
1764      */
1765     rmIrqReq.valid_params           = TISCI_MSG_VALUE_RM_DST_ID_VALID |
1766                                       TISCI_MSG_VALUE_RM_DST_HOST_IRQ_VALID;
1767     rmIrqReq.src_id                 = TISCI_DEV_TIMER2;
1768     rmIrqReq.src_index              = 0U;
1769 #if defined (BUILD_C66X_1)
1770     rmIrqReq.dst_id                 = TISCI_DEV_C66SS0_CORE0;
1771     rmIrqReq.dst_host_irq           = 22U;
1772 #endif
1773 #if defined (BUILD_C66X_2)
1774     rmIrqReq.dst_id                 = TISCI_DEV_C66SS1_CORE0;
1775     rmIrqReq.dst_host_irq           = 22U;
1776 #endif
1778     /* Unused params */
1779     rmIrqReq.global_event           = 0U;
1780     rmIrqReq.ia_id                  = 0U;
1781     rmIrqReq.vint                   = 0U;
1782     rmIrqReq.vint_status_bit_index  = 0U;
1783     rmIrqReq.secondary_host         = TISCI_MSG_VALUE_RM_UNUSED_SECONDARY_HOST;
1785     Sciclient_rmIrqSet(&rmIrqReq, &rmIrqResp, SCICLIENT_SERVICE_WAIT_FOREVER);
1787 #endif
1790 void sysIdleLoop(void)
1792    __asm(" IDLE");
1795 #endif
1797 /*
1798  *  ======== main ========
1799  */
1800 int main(void)
1803 #ifdef BARE_METAL
1804     osal_test();
1805 #else
1806     /* All other platforms have the task created under RTSC cfg file
1807      * hence not needed to be created again as below
1808      * For AM65XX TPR12 and J7 the common RTSC cfg file is used and hence there is
1809      * no test application specific task is created in teh RTSC cfg file
1810      */
1811 #if defined (SOC_AM65XX) || defined (SOC_J721E) || defined(SOC_J7200) || defined(SOC_TPR12) || defined (SOC_AWR294X)|| defined(SOC_AM64X)
1812     TaskP_Params taskParams;
1813 #if !defined(FREERTOS)
1814     Error_Block  eb;
1815 #endif
1816     TaskP_Params_init(&taskParams);
1817     taskParams.priority =2;
1818     taskParams.stack        = gAppTskStackMain;
1819     taskParams.stacksize    = sizeof (gAppTskStackMain);
1820 #if !defined(FREERTOS)
1821     taskParams.pErrBlk      = &eb;
1822 #endif
1823     TaskP_create(osal_test, &taskParams);
1824 #endif
1825 #if defined (FREERTOS)
1826     /* Start the scheduler to start the tasks executing. */
1827     vTaskStartScheduler();
1828 #else
1829     /* Start BIOS */
1830     BIOS_start();
1831 #endif
1832 #endif
1833     return (0);
1836 #if defined(BUILD_MPU) || defined (__C7100__)
1837 extern void Osal_initMmuDefault(void);
1838 void InitMmu(void)
1840     Osal_initMmuDefault();
1842 #endif
1844 void Osal_appC7xPreInit(void)
1846 #if defined (__C7100__)
1847     CSL_ClecEventConfig cfgClec;
1848     CSL_CLEC_EVTRegs   *clecBaseAddr = (CSL_CLEC_EVTRegs*) CSL_COMPUTE_CLUSTER0_CLEC_REGS_BASE;
1849     uint32_t            i, maxInputs = 2048U;
1851     /* make secure claim bit to FALSE so that after we switch to non-secure mode
1852      * we can program the CLEC MMRs
1853      */
1854     cfgClec.secureClaimEnable = FALSE;
1855     cfgClec.evtSendEnable     = FALSE;
1856     cfgClec.rtMap             = CSL_CLEC_RTMAP_DISABLE;
1857     cfgClec.extEvtNum         = 0U;
1858     cfgClec.c7xEvtNum         = 0U;
1859     for(i = 0U; i < maxInputs; i++)
1860     {
1861         CSL_clecConfigEvent(clecBaseAddr, i, &cfgClec);
1862     }
1863 #endif
1865     return;