Fixed C6670 SRIO boot issue
[keystone-rtos/mcsdk-tools.git] / boot_loader / examples / srio / srioboot_example / src / srioBootExample.c
index bd72c4696e8df96635c922273c80d00ffb099e1c..e2dcdc3b13557d448228080f4fe7090fbf62b2d7 100644 (file)
@@ -36,6 +36,7 @@
 #include "platform.h"
 #include "srioDdrInit.h"
 #include "srioBootCode.h"
+#include "ti/csl/csl_semAux.h"
 
 #define DEVICE_REG32_W(x,y)   *(volatile uint32_t *)(x)=(y)
 #define DEVICE_REG32_R(x)    (*(volatile uint32_t *)(x))
@@ -45,7 +46,7 @@
 #endif
 
 #ifdef _EVMC6670L_
-#define MAGIC_ADDR     0x87fffc
+#define MAGIC_ADDR     0x8ffffc
 #endif
 
 #define BOOT_MAGIC_ADDR(x)  (MAGIC_ADDR + (1<<28) + (x<<24))
@@ -105,6 +106,28 @@ uint32_t byteto32bits(uint8_t *pDspCode)
     return(temp);
 }
 
+void Osal_platformSpiCsEnter(void)
+{
+    /* Get the hardware semaphore.
+     *
+     * Acquire Multi core CPPI synchronization lock
+     */
+    while ((CSL_semAcquireDirect (3)) == 0);
+
+    return;
+}
+
+void Osal_platformSpiCsExit (void)
+{
+    /* Release the hardware semaphore
+     *
+     * Release multi-core lock.
+     */
+    CSL_semReleaseSemaphore (3);
+
+    return;
+}
+
 
 /* Convert to big endian, if the .out to be booted is big endian, this is not required */
 void
@@ -443,7 +466,7 @@ void main (void)
     {
         printf("Transfer DDR init code via SRIO successfully\n");
 
-        platform_delay(1000);
+        platform_delay(100000);
 
         /* Push the boot image code to remote DSP DDR and boot core 0 to run Hello World */
         if(pushData2Srio(bootCode, rio_id)==0)