freertos c6x fixes
authorBadri S <badri@ti.com>
Fri, 7 May 2021 20:00:24 +0000 (01:30 +0530)
committerBadri S <badri@ti.com>
Fri, 7 May 2021 20:22:42 +0000 (01:52 +0530)
freertos c6x fixes

Signed-off-by: Badri S <badri@ti.com>
packages/ti/drv/mibspi/test/loopback/src/mibspi_test_common.c
packages/ti/kernel/freertos/portable/TI_CGT/c66/port.c

index d120c5f51106797f71d238968f0aa29212832937..8d60b4c6637fcd9916bae6044e7891c7128a0e13 100644 (file)
@@ -404,7 +404,7 @@ static int32_t Test_spiLoopback(const MIBSPI_Handle handle, uint8_t slaveIndex,
 }
 
 #ifdef MIBSPI_DMA_ENABLE
-uint32_t gTestCallbackDone = 0;
+volatile uint32_t gTestCallbackDone = 0;
 
 void Test_loopback_callbackFxn (MIBSPI_Handle handle,
                                 MIBSPI_Transaction * transaction)
@@ -464,6 +464,15 @@ static int32_t Test_spiLoopback_callback(const MIBSPI_Handle handle, uint8_t sla
             while (gTestCallbackDone == 0)
             {
                 /* waiting for the callback funciton to be called. */
+                /* Need Nop so that interrupts get enabled atleast for a few cycles in C66x case */
+                asm(" nop ");
+                asm(" nop ");
+                asm(" nop ");
+                asm(" nop ");
+                asm(" nop ");
+                asm(" nop ");
+                asm(" nop ");
+                asm(" nop ");
             }
             /* Check data integrity */
             if (memcmp((void *)txBuf, (void *)rxBuf, len) != 0)
index 3791e4a8ceffe5a0bd4edc316c579465626b11f6..f7f55f7235b86db36d7feb22b5c55763426671a6 100644 (file)
@@ -201,7 +201,7 @@ typedef struct tskTaskControlBlock       /* The old naming convention is used to
     #endif
 } tskTCB;
 
-extern tskTCB * pxCurrentTCB;
+extern  tskTCB * volatile pxCurrentTCB;
 /*
  * Starts the first task executing.  This function is necessarily written in
  * assembly code so is implemented in portASM.s.
@@ -237,7 +237,7 @@ void Task_exit(void)
 
 void Task_enter(void)
 {
-
+    portENABLE_INTERRUPTS();
 }
 
 void ti_sysbios_knl_Task_Func(uint32_t arg1, uint32_t arg2)
@@ -520,8 +520,16 @@ void vPortYieldAsyncFromISR( void )
     vTaskSwitchContext();
     newSP = ( void ** )( &pxCurrentTCB->pxTopOfStack );
     /* We should not be swapping from one task back to same task. Indicates bug in invocation of vPortYieldAsyncFromISR */
-    DebugP_assert(oldSP != newSP);
-    ti_sysbios_family_c62_TaskSupport_swap__E( oldSP, newSP );
+    //DebugP_assert(oldSP != newSP);
+    if(oldSP != newSP)
+    {
+        ti_sysbios_family_c62_TaskSupport_swap__E( oldSP, newSP );
+    }
+    else
+    {
+        DebugP_log1("Doing switch to same task:%p",(uintptr_t)oldSP);
+        uxPortIncorrectYieldCount++;
+    }
     /* Interrupts should be disabled in case of async yield from ISR */
     /* Enable interrupts if task was preempted outside critical section */
     portDISABLE_INTERRUPTS();