]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - keystone-linux/ipc-transport.git/commitdiff
TransportSrio: Added K1 support to examples and resolved SDOCM00118774
authorJustin Sobota <jsobota@ti.com>
Mon, 7 Dec 2015 22:43:45 +0000 (17:43 -0500)
committerJustin Sobota <jsobota@ti.com>
Mon, 7 Dec 2015 22:43:45 +0000 (17:43 -0500)
Signed-off-by: Justin Sobota <jsobota@ti.com>
c66/srio/docs/ReleaseNotes_TransportSrio.doc
c66/srio/docs/ReleaseNotes_TransportSrio.pdf
c66/srio/example/src/bench_srio.c
c66/srio/example/src/multiboard_srio.c

index ba88771e33675470483f232de433d80bc3afa086..3e4c5e1ba3dab4d488ce14a7470382027eeef194 100644 (file)
Binary files a/c66/srio/docs/ReleaseNotes_TransportSrio.doc and b/c66/srio/docs/ReleaseNotes_TransportSrio.doc differ
index 7857fd71da378644657da807a20d69b2b28fa047..d041aa6e5c12eb01da53390eb0bb36491c1e64a8 100644 (file)
Binary files a/c66/srio/docs/ReleaseNotes_TransportSrio.pdf and b/c66/srio/docs/ReleaseNotes_TransportSrio.pdf differ
index d42a3dcbc11abfe90d761327d0cc3cf927d0a2b9..ae287207418a9c898a9e66566a11f56701de0e5f 100644 (file)
 #define RM_PRINT_STATS        0
 #define SYSINIT               0
 #define NUM_DSP_CORES         2
+#if (defined(DEVICE_C6657) || defined(DEVICE_C6678))
+#define NUM_CORES             2 /* 2 DSPs */
+#else
 #define NUM_CORES             3 /* Host + DSPs */
+#endif
 #define TEST_ITERATIONS_STD   3
 #define TEST_ITERATIONS_FRAG  3
 #define TEST_ITERATIONS_TOT   (TEST_ITERATIONS_STD + TEST_ITERATIONS_FRAG)
@@ -1323,14 +1327,28 @@ void initTsk(UArg arg0, UArg arg1)
     transSrioParamsT11.rxMsgQHeapId      = SRIO_MSGQ_HEAP_ID;
     transSrioParamsT11.maxMTU            = srioMaxMTU;
     transSrioParamsT11.rmServiceHandle   = rmServiceHandle;
-    /* Must map to a valid channel for each DSP core.  Follow sprugr9f.pdf
-     * Table 5-9 */
+    /* Must map to a valid channel for each DSP core.  Follow sprugr9h.pdf
+     * Table 5-7 for C6678 and Table 5-9 for K2HK */
     transSrioParamsT11.accumCh           = DNUM;
     transSrioParamsT11.accumTimerCount   = 0;
     transSrioParamsT11.transNetworkId    = SRIO_T11_TRANS_NET_ID;
     transSrioParamsT11.rxIntVectorId     = 8;
 
     memset(&t11EpParams, 0, sizeof(t11EpParams));
+#if (defined(DEVICE_C6657) || defined(DEVICE_C6678))
+    /* DSP Core 0 */
+    t11EpParams[0].tt       = 1;
+    t11EpParams[0].deviceId = DEVICE_ID1_16BIT;
+    t11EpParams[0].mailbox  = 0;
+    t11EpParams[0].letter   = 0;
+    t11EpParams[0].segMap   = (sizeof(TstMsg) > 256 ? 1 :0);
+    /* DSP Core 1 */
+    t11EpParams[1].tt       = 1;
+    t11EpParams[1].deviceId = DEVICE_ID2_16BIT;
+    t11EpParams[1].mailbox  = 0;
+    t11EpParams[1].letter   = 0;
+    t11EpParams[1].segMap   = (sizeof(TstMsg) > 256 ? 1 :0);
+#else
     /* ARMv7 Linux Host */
     t11EpParams[0].tt       = 1;
     t11EpParams[0].deviceId = DEVICE_ID1_16BIT;
@@ -1349,6 +1367,7 @@ void initTsk(UArg arg0, UArg arg1)
     t11EpParams[2].mailbox  = 0;
     t11EpParams[2].letter   = 0;
     t11EpParams[2].segMap   = (sizeof(TstMsg) > 256 ? 1 :0);
+#endif
 
     memset(&t11socketParams, 0, sizeof(t11socketParams));
     t11socketParams.epListSize = NUM_CORES;
@@ -1386,18 +1405,39 @@ void initTsk(UArg arg0, UArg arg1)
     transSrioParamsT9.maxMTU            = srioMaxMTU;
     transSrioParamsT9.rmServiceHandle   = rmServiceHandle;
     /* Type 9 instance specific parameters */
-    /* Must map to a valid channel for each DSP core.  Follow sprugr9g.pdf
-     * Table 5-9 */
+#if defined(DEVICE_C6657)
+    /* Must map to a valid channel for each DSP core.  Follow sprugr9h.pdf
+     * Table 5-3 & 5-4 for C6657 */
+    transSrioParamsT9.accumCh            = DNUM + 2; /* Next valid accum ch is
+                                                      * number of device DSP
+                                                      * cores away
+                                                      * (2 for C6657) */
+#else
+    /* Must map to a valid channel for each DSP core.  Follow sprugr9h.pdf
+     * Table 5-7 for C6678 and Table 5-9 for K2HK */
     transSrioParamsT9.accumCh            = DNUM + 8; /* Next valid accum ch is
                                                       * number of device DSP
                                                       * cores away
-                                                      * (8 for K2HK) */
+                                                      * (8 for C6678 & K2HK) */
+#endif
     transSrioParamsT9.accumTimerCount    = 0;
     transSrioParamsT9.transNetworkId     = SRIO_T9_TRANS_NET_ID;
     transSrioParamsT9.rxIntVectorId      = 9;
 
     /* Type 9 specific */
     memset(&t9EpParams, 0, sizeof(t9EpParams));
+#if (defined(DEVICE_C6657) || defined(DEVICE_C6678))
+    /* DSP Core 0 */
+    t9EpParams[0].tt       = 1;
+    t9EpParams[0].deviceId = DEVICE_ID1_16BIT;
+    t9EpParams[0].cos      = 0;
+    t9EpParams[0].streamId = 0;
+    /* DSP Core 1 */
+    t9EpParams[1].tt       = 1;
+    t9EpParams[1].deviceId = DEVICE_ID2_16BIT;
+    t9EpParams[1].cos      = 0;
+    t9EpParams[1].streamId = 0;
+#else
     /* ARMv7 Linux Host */
     t9EpParams[0].tt       = 1;
     t9EpParams[0].deviceId = DEVICE_ID1_16BIT;
@@ -1413,6 +1453,7 @@ void initTsk(UArg arg0, UArg arg1)
     t9EpParams[2].deviceId = DEVICE_ID2_16BIT;
     t9EpParams[2].cos      = 0;
     t9EpParams[2].streamId = 0;
+#endif
 
     memset(&t9socketParams, 0, sizeof(t9socketParams));
     t9socketParams.epListSize = NUM_CORES;
index 35f7b7408742c9dc3704345b9ae37383bf769c92..790d1651ff33860de074f1c1fede38f85c944e60 100644 (file)
 #define RM_PRINT_STATS        0
 #define SYSINIT               0
 #define NUM_LOCAL_DSP_CORES   2
+#if (defined(DEVICE_C6657) || defined(DEVICE_C6678))
+#define NUM_TOTAL_CORES       4
+#else
 #define NUM_TOTAL_CORES       6
+#endif
 #define TEST_ITERATIONS_STD   3
 #define TEST_ITERATIONS_FRAG  3
 #define TEST_ITERATIONS_TOT   (TEST_ITERATIONS_STD + TEST_ITERATIONS_FRAG)
-#define NUM_TEST_MSGS         64
+#define NUM_TEST_MSGS         50
 
+#if (defined(DEVICE_C6657) || defined(DEVICE_C6678))
+#define IPC_CLUSTER_OFFSET    2
+#else
 #define IPC_CLUSTER_OFFSET    3
+#endif
 
 #define HOST_DESC_SIZE_BYTES  128
 #define HOST_DESC_NUM         512
 #define TRANS_SEND_DESC       4
-#define TRANS_RCV_DESC        128
+#define TRANS_RCV_DESC        120
 #define TRANS_FRAG_DESC       4
 #define HOST_DESC_MEM_REGION  0
 
@@ -195,6 +203,11 @@ uint8_t hostDesc[HOST_DESC_NUM * HOST_DESC_SIZE_BYTES];
 #pragma DATA_ALIGN (syncInit, 128)
 volatile uint8_t syncInit[128];
 
+/* Sync block for Transport initialization barriers */
+#pragma DATA_SECTION (syncTransInit, ".sync");
+#pragma DATA_ALIGN (syncTransInit, 128)
+volatile uint8_t syncTransInit[NUM_LOCAL_DSP_CORES][128];
+
 /* Sync block for cleanup barriers */
 #pragma DATA_SECTION (syncCleanup, ".sync");
 #pragma DATA_ALIGN (syncCleanup, 128)
@@ -473,6 +486,7 @@ static uint32_t testRemoteBoardSend(uint16_t transId)
     System_printf("IPC Core %d : Syncing with consumer board DSP %d...\n",
                   ipcCoreId, remoteProcId);
     while(noSync) {
+        rxMsg = NULL;
         txMsg = (TstMsg *) MessageQ_alloc(SRIO_MSGQ_HEAP_ID, sizeof(TstMsg));
         if (txMsg == NULL) {
             System_printf("Error IPC Core %d : "
@@ -608,6 +622,7 @@ static uint32_t testRemoteBoardReceive(uint16_t transId)
     TstMsg   *txMsg;
     uint32_t  numReceived = 0;
     uint32_t  i;
+    int32_t   rxFlag;
     uint32_t  result = TEST_PASS;
 
     System_printf("IPC Core %d : "
@@ -687,6 +702,7 @@ static uint32_t testRemoteBoardReceive(uint16_t transId)
             numReceived++;
         }
 
+        rxFlag = rxMsg->flags;
         status = MessageQ_free((MessageQ_Msg) rxMsg);
         if (status < 0) {
             System_printf("Error IPC Core %d : "
@@ -696,7 +712,7 @@ static uint32_t testRemoteBoardReceive(uint16_t transId)
             goto error_exit;
         }
 
-        if (rxMsg->flags == SEND_MESSAGE_LAST_MESSAGE) {
+        if (rxFlag == SEND_MESSAGE_LAST_MESSAGE) {
             break;
         }
     }
@@ -925,11 +941,15 @@ cleanup_error:
 
         /* Reset all sync mechanisms */
         memset(&syncInit, 0, sizeof(syncInit));
+        memset((void *)&syncTransInit[coreNum][0], 0, sizeof(syncTransInit) /
+               NUM_LOCAL_DSP_CORES);
         memset((void *)&syncCleanup[coreNum][0], 0, sizeof(syncCleanup) /
                NUM_LOCAL_DSP_CORES);
         if (coreNum == SYSINIT) {
             wb((void *)&syncInit, sizeof(syncInit));
         }
+        wb((void *)&syncTransInit[coreNum][0], sizeof(syncTransInit) /
+           NUM_LOCAL_DSP_CORES);
         wb((void *)&syncCleanup[coreNum][0], sizeof(syncCleanup) /
            NUM_LOCAL_DSP_CORES);
 
@@ -1245,14 +1265,40 @@ void initTsk(UArg arg0, UArg arg1)
     transSrioParamsT11.rxMsgQHeapId      = SRIO_MSGQ_HEAP_ID;
     transSrioParamsT11.maxMTU            = srioMaxMTU;
     transSrioParamsT11.rmServiceHandle   = rmServiceHandle;
-    /* Must map to a valid channel for each DSP core.  Follow sprugr9f.pdf
-     * Table 5-9 */
+    /* Must map to a valid channel for each DSP core.  Follow sprugr9h.pdf
+     * Table 5-7 for C6678 and Table 5-9 for K2HK */
     transSrioParamsT11.accumCh           = DNUM;
     transSrioParamsT11.accumTimerCount   = 0; 
     transSrioParamsT11.transNetworkId    = SRIO_T11_TRANS_NET_ID;
     transSrioParamsT11.rxIntVectorId     = 8;
 
     memset(&t11EpParams, 0, sizeof(t11EpParams));
+#if (defined(DEVICE_C6657) || defined(DEVICE_C6678))
+    /* Core 0 (Producer) MultiProc ID - 0 */
+    t11EpParams[0].tt       = 0;
+    t11EpParams[0].deviceId = DEVICE_ID1_8BIT;
+    t11EpParams[0].mailbox  = 0;
+    t11EpParams[0].letter   = 0;
+    t11EpParams[0].segMap   = (sizeof(TstMsg) > 256 ? 1 :0);
+    /* Core 1 (Producer) MultiProc ID - 1 */
+    t11EpParams[1].tt       = 0;
+    t11EpParams[1].deviceId = DEVICE_ID1_8BIT;
+    t11EpParams[1].mailbox  = 0;
+    t11EpParams[1].letter   = 1;
+    t11EpParams[1].segMap   = (sizeof(TstMsg) > 256 ? 1 :0);
+    /* Core 0 (Consumer) MultiProc ID - 2 */
+    t11EpParams[2].tt       = 0;
+    t11EpParams[2].deviceId = DEVICE_ID2_8BIT;
+    t11EpParams[2].mailbox  = 0;
+    t11EpParams[2].letter   = 0;
+    t11EpParams[2].segMap   = (sizeof(TstMsg) > 256 ? 1 :0);
+    /* Core 1 (Consumer) MultiProc ID - 3 */
+    t11EpParams[3].tt       = 0;
+    t11EpParams[3].deviceId = DEVICE_ID2_8BIT;
+    t11EpParams[3].mailbox  = 0;
+    t11EpParams[3].letter   = 1;
+    t11EpParams[3].segMap   = (sizeof(TstMsg) > 256 ? 1 :0);
+#else
     /* Linux Host (Producer) MultiProc ID - 0 */
     t11EpParams[0].tt       = 0;
     t11EpParams[0].deviceId = DEVICE_ID1_8BIT;
@@ -1289,6 +1335,7 @@ void initTsk(UArg arg0, UArg arg1)
     t11EpParams[5].mailbox  = 0;
     t11EpParams[5].letter   = 2;
     t11EpParams[5].segMap   = (sizeof(TstMsg) > 256 ? 1 :0);
+#endif
 
     memset(&t11socketParams, 0, sizeof(t11socketParams));
     t11socketParams.epListSize = NUM_TOTAL_CORES;
@@ -1326,18 +1373,49 @@ void initTsk(UArg arg0, UArg arg1)
     transSrioParamsT9.maxMTU            = srioMaxMTU;
     transSrioParamsT9.rmServiceHandle   = rmServiceHandle;
     /* Type 9 instance specific parameters */
+#if defined(DEVICE_C6657)
+    /* Must map to a valid channel for each DSP core.  Follow sprugr9h.pdf
+     * Table 5-3 & 5-4 for C6657 */
+    transSrioParamsT9.accumCh            = DNUM + 2; /* Next valid accum ch is
+                                                      * number of device DSP
+                                                      * cores away
+                                                      * (2 for C6657) */
+#else
     /* Must map to a valid channel for each DSP core.
-     * Follow sprugr9g.pdf Table 5-9 */
+     * Follow sprugr9h.pdf Table 5-7 for C6678 and Table 5-9 for K2HK */
     transSrioParamsT9.accumCh            = DNUM + 8; /* Next valid accum ch is
                                                       * number of device DSP
                                                       * cores away 
-                                                      * (8 for K2HK) */
+                                                      * (8 for C6678 & K2HK) */
     transSrioParamsT9.accumTimerCount    = 0; 
     transSrioParamsT9.transNetworkId     = SRIO_T9_TRANS_NET_ID;
     transSrioParamsT9.rxIntVectorId      = 9;
+#endif
 
     /* Type 9 specific */
     memset(&t9EpParams, 0, sizeof(t9EpParams));
+#if (defined(DEVICE_C6657) || defined(DEVICE_C6678))
+    /* Core 0 (Producer) MultiProc ID - 0 */
+    t9EpParams[0].tt       = 0;
+    t9EpParams[0].deviceId = DEVICE_ID1_8BIT;
+    t9EpParams[0].cos      = 0;
+    t9EpParams[0].streamId = 0;
+    /* Core 1 (Producer) MultiProc ID - 1 */
+    t9EpParams[1].tt       = 0;
+    t9EpParams[1].deviceId = DEVICE_ID1_8BIT;
+    t9EpParams[1].cos      = 0;
+    t9EpParams[1].streamId = 1;
+    /* Core 0 (Consumer) MultiProc ID - 2 */
+    t9EpParams[2].tt       = 0;
+    t9EpParams[2].deviceId = DEVICE_ID2_8BIT;
+    t9EpParams[2].cos      = 0;
+    t9EpParams[2].streamId = 0;
+    /* Core 1 (Consumer) MultiProc ID - 3 */
+    t9EpParams[3].tt       = 0;
+    t9EpParams[3].deviceId = DEVICE_ID2_8BIT;
+    t9EpParams[3].cos      = 0;
+    t9EpParams[3].streamId = 1;
+#else
     /* Linux Host (Producer) MultiProc ID - 0 */
     t9EpParams[0].tt       = 0;
     t9EpParams[0].deviceId = DEVICE_ID1_8BIT;
@@ -1368,6 +1446,7 @@ void initTsk(UArg arg0, UArg arg1)
     t9EpParams[5].deviceId = DEVICE_ID2_8BIT;
     t9EpParams[5].cos      = 0;
     t9EpParams[5].streamId = 2;
+#endif
 
     memset(&t9socketParams, 0, sizeof(t9socketParams));
     t9socketParams.epListSize = NUM_TOTAL_CORES;
@@ -1396,15 +1475,23 @@ void initTsk(UArg arg0, UArg arg1)
 #endif
 
     if (coreNum == SYSINIT) {
-        /* Signal to other DSPs that SRIO transport to remote core is
-         * attached */
-        syncInit[SYNC_INDEX_SRIO_TRANS_INIT] = 1;
-        wb((void *) &syncInit, sizeof(syncInit)); 
+        int32_t i;
+
+        /* Wait for other cores to complete initialization */
+        for (i = 0; i < NUM_LOCAL_DSP_CORES; i++) {
+            if (i != coreNum) {
+                do {
+                    inv((void *) &syncTransInit[i][0], sizeof(syncTransInit) /
+                        NUM_LOCAL_DSP_CORES);
+                } while (!syncTransInit[i][0]);
+            }
+        }
     } else {
-        /* Synchronize with SRIO transport attach sync point on SYSINIT core */
-        do {
-            inv((void *) &syncInit, sizeof(syncInit));
-        } while (!syncInit[SYNC_INDEX_SRIO_TRANS_INIT]);
+        /* SYSINIT cannot start testing until all other cores have completed
+         * initialization */
+        syncTransInit[coreNum][0] = 1;
+        wb((void *) &syncTransInit[coreNum][0], sizeof(syncTransInit) /
+           NUM_LOCAL_DSP_CORES);
     }
 
     if (cleanupTskHandle) {