Add OMAP5 DSP Support for HLOS->SYSBIOS IPC
authorAngela Stegmaier <angelabaker@ti.com>
Mon, 11 Mar 2013 22:42:26 +0000 (17:42 -0500)
committerVW <vwan@ti.com>
Tue, 30 Apr 2013 17:25:10 +0000 (10:25 -0700)
Signed-off-by: Angela Stegmaier <angelabaker@ti.com>
packages/ti/configs/omap54xx/Dsp.cfg
packages/ti/ipc/family/omap54xx/package.xs
packages/ti/ipc/remoteproc/Resource.xdt
packages/ti/ipc/remoteproc/rsc_table_omap5_dsp.h
packages/ti/ipc/tests/package.bld
packages/ti/ipc/tests/ping_rpmsg.cfg
packages/ti/ipc/tests/ping_rpmsg_common.cfg.xs
packages/ti/ipc/tests/rpmsg_transport.cfg
packages/ti/ipc/tests/test_omx_dsp_omap5.cfg [new file with mode: 0644]

index 96ca2afaaa652f569ed891972bf09812b0a3c22e..e3783bf7bd53489e2df5dc4c5557251ed67b1ff2 100644 (file)
@@ -54,6 +54,7 @@ var BIOS        = xdc.useModule('ti.sysbios.BIOS');
 BIOS.libType    = BIOS.LibType_Debug;
 
 xdc.loadPackage('ti.ipc.rpmsg');
+xdc.loadPackage('ti.ipc.family.omap54xx');
 
 /* TBD: Not yet taken in from omapzoom:
 xdc.loadPackage('ti.srvmgr');
@@ -62,11 +63,8 @@ xdc.loadPackage('ti.resmgr');
 */
 
 /* Enable Memory Translation module that operates on the BIOS Resource Table */
-var IpcMemory = xdc.useModule('ti.resources.IpcMemory');
-IpcMemory.loadSegment = "EXT_CODE"
-
-/* HwSpinlock Module */
-xdc.loadPackage('ti.gates.hwspinlock');
+var Resource = xdc.useModule('ti.ipc.remoteproc.Resource');
+Resource.loadSegment = "EXT_CODE"
 
 /* Modules used in Power Management */
 xdc.loadPackage('ti.pm');
@@ -75,6 +73,7 @@ Power.loadSegment = "PM_DATA";
 
 /* Idle function that periodically flushes the unicache */
 var Idle = xdc.useModule('ti.sysbios.knl.Idle');
+Idle.addFunc('&VirtQueue_cacheWb');
 
 //TBD: Idle.addFunc('&ti_deh_Deh_idleBegin'); /* Must be placed before pwr mgmt */
 Idle.addFunc('&IpcPower_idle');        /* IpcPower_idle must be at the end */
@@ -109,9 +108,10 @@ Text.isLoaded = true;
 var Registry = xdc.useModule('xdc.runtime.Registry');
 Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
 Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
-Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
-Registry.common$.diags_LIFECYCLE = Diags.RUNTIME_OFF;
-Registry.common$.diags_STATUS = Diags.RUNTIME_OFF;
+Registry.common$.diags_USER1 = Diags.ALWAYS_ON;
+Registry.common$.diags_INFO  = Diags.ALWAYS_ON;
+Registry.common$.diags_LIFECYCLE = Diags.ALWAYS_ON;
+Registry.common$.diags_STATUS = Diags.ALWAYS_ON;
 Diags.setMaskEnabled = true;
 
 var Main = xdc.useModule('xdc.runtime.Main');
@@ -124,7 +124,7 @@ Hwi.enableException = true;
 
 /* -------------------------------- DSP ----------------------------------*/
 var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
-MultiProc.setConfig("DSP", ["HOST", "CORE0", "CORE1", "DSP"]);
+MultiProc.setConfig("DSP", ["HOST", "IPU", "DSP"]);
 
 /* --------------------------- TICK --------------------------------------*/
 var Clock = xdc.useModule('ti.sysbios.knl.Clock');
@@ -157,4 +157,6 @@ Program.sectMap[".tracebuf"] = "TRACE_BUF";
 Program.sectMap[".errorbuf"] = "EXC_DATA";
 
 /* Version module */
+/* ???
 xdc.useModule('ti.utils.Version');
+*/
index 0334ccaab525e3f6461bcdd5243658bc5ea53c5f..7b5a1e906c05893eebd8cb242b5069c226685772 100644 (file)
@@ -106,8 +106,9 @@ function getLibs(prog)
 function validate()
 {
     var BIOS = xdc.module('ti.sysbios.BIOS');
+    var suffix = prog.build.target.findSuffix(this);
 
-    if (!BIOS.smpEnabled) {
+    if (!BIOS.smpEnabled && (suffix != "e64T")) {
         throw new Error(Pkg.$name+" must have BIOS.smpEnabled set to true.");
     }
 }
index f2b5730b3714ea72424400f691e1ca4d2a4f3fc7..55a9e92bff4f82e72a73987d848d270dbc734842 100644 (file)
@@ -55,6 +55,7 @@
 #define OMAP5
 #include <ti/ipc/remoteproc/rsc_table_omap5_ipu.h>
 %    } else if (prog.cpu.attrs.cpuCore.match(/^64T$/)) {
+#define OMAP5
 #include <ti/ipc/remoteproc/rsc_table_omap5_dsp.h>
 %    }
 %    else {
index 0d20c0f224b6dcad97d4fa32c07fcd3d0902529d..4dd04cb93640dcc5991efa2345a1ac05a5b65ded 100644 (file)
@@ -42,9 +42,7 @@
 #ifndef _RSC_TABLE_DSP_H_
 #define _RSC_TABLE_DSP_H_
 
-#include <xdc/std.h>
 #include "rsc_types.h"
-#include <ti/gates/hwspinlock/HwSpinlock.h>
 
 /* DSP Memory Map */
 #define L4_44XX_BASE            0x4A000000
@@ -120,7 +118,7 @@ struct resource_table {
     UInt32 version;
     UInt32 num;
     UInt32 reserved[2];
-    UInt32 offset[17];  /* Should match 'num' in actual definition */
+    UInt32 offset[16];  /* Should match 'num' in actual definition */
 
     /* rpmsg vdev entry */
     struct fw_rsc_vdev rpmsg_vdev;
@@ -171,21 +169,16 @@ struct resource_table {
 
     /* devmem entry */
     struct fw_rsc_devmem devmem9;
-
-    /* hwspinlock custom entry */
-    struct fw_rsc_custom hwspin;
 };
 
 #define TRACEBUFADDR (UInt32)&ti_trace_SysMin_Module_State_0_outbuf__A
-#define HWSPINKLOCKSTATEADDR (UInt32)&ti_gates_HwSpinlock_sharedState
-#define HWSPINKLOCKNUMADDR (UInt32)&ti_gates_HwSpinlock_numLocks
 
 #pragma DATA_SECTION(ti_ipc_remoteproc_ResourceTable, ".resource_table")
 #pragma DATA_ALIGN(ti_ipc_remoteproc_ResourceTable, 4096)
 
 struct resource_table ti_ipc_remoteproc_ResourceTable = {
     1,      /* we're the first version that implements this */
-    17,     /* number of entries in the table */
+    16,     /* number of entries in the table */
     0, 0,   /* reserved, must be zero */
     /* offsets to entries */
     {
@@ -205,7 +198,6 @@ struct resource_table ti_ipc_remoteproc_ResourceTable = {
         offsetof(struct resource_table, devmem7),
         offsetof(struct resource_table, devmem8),
         offsetof(struct resource_table, devmem9),
-        offsetof(struct resource_table, hwspin),
     },
 
     /* rpmsg vdev entry */
@@ -305,12 +297,6 @@ struct resource_table ti_ipc_remoteproc_ResourceTable = {
         DSP_PERIPHERAL_ISS, L3_PERIPHERAL_ISS,
         SZ_256K, 0, 0, "DSP_PERIPHERAL_ISS",
     },
-
-    {
-        TYPE_CUSTOM, TYPE_HWSPIN,
-        sizeof(struct fw_rsc_custom_hwspin),
-        { HWSPINKLOCKNUMADDR, HWSPINKLOCKSTATEADDR, "hwspin"},
-    },
 };
 
 #endif /* _RSC_TABLE_DSP_H_ */
index bfebaf42f1e11e16c905fcc8a633af0047e96982..96d02900ae2a77b3543f8f20fbed1c2414634626 100644 (file)
@@ -75,7 +75,7 @@ for (var i = 0; i < Build.targets.length; i++) {
 
     /* currently only build for OMAPL138, Keystone II, and OMAP5*/
     if (!((targ.isa == "674") || (targ.isa == "66") ||
-          (targ.isa.match(/v7M(|4)/)))) {
+          (targ.isa.match(/v7M(|4)/)) || (targ.isa == "64T"))) {
         continue;
     }
 
@@ -148,5 +148,13 @@ for (var i = 0; i < Build.targets.length; i++) {
             }).addObjects(["test_omx.c","ping_tasks.c","rpc_task.c",
                     "MxServer.c"]);
         }
+
+        if (platform.match(/^ti\.platform\.omap54xx\.dsp/)) {
+            Pkg.addExecutable(name + "/test_omx_dsp_omap5", targ, platform, {
+                cfgScript: "test_omx_dsp_omap5",
+                defs: "-D DSP -D OMAP5xxx"
+            }).addObjects(["test_omx.c","ping_tasks.c","rpc_task",
+                    "MxServer.c"]);
+        }
     }
 }
index 48369c419f5233c1e97e6c270f0b7f1410b175d0..60c4872fef292b3206e09f6be5900dbf0fc1fddb 100644 (file)
@@ -52,6 +52,24 @@ if (Program.cpu.deviceName.match(/^OMAP5430$/) &&
     xdc.includeFile("ti/configs/omap54xx/IpuSmp.cfg");
     xdc.includeFile("ti/configs/omap54xx/IpuAmmu.cfg");
 }
+/* This will match for omap5 dsp only: */
+/*else if (Program.platformName.match(/^ti\.platform\.omap54xx\.dsp/)) {*/
+else if (Program.platformName.match(/dsp/)) {
+    var Task          = xdc.useModule('ti.sysbios.knl.Task');
+    var params = new Task.Params;
+    params.instance.name = "ping";
+    params.arg0= 51;
+    Program.global.tsk1 = Task.create('&pingTaskFxn', params);
+    Task.deleteTerminatedTasks = true;
+
+    /* This calls RPMessage_init() once before BIOS_start(): */
+    xdc.loadPackage('ti.ipc.ipcmgr');
+    var BIOS        = xdc.useModule('ti.sysbios.BIOS');
+    BIOS.addUserStartupFunction('&IpcMgr_rpmsgStartup');
+
+    xdc.includeFile("ti/configs/omap54xx/Dsp.cfg");
+    xdc.includeFile("ti/configs/omap54xx/DspAmmu.cfg");
+}
 else {
     xdc.loadCapsule("ping_rpmsg_common.cfg.xs");
 }
index 074c862ad118eb225f3ff0bce44f21c39babc6cd..255477a6585dd6f4cf2a8d2b912b9f96735a7ada 100644 (file)
@@ -180,7 +180,7 @@ else if (Program.platformName.match(/simKepler/) ||
     */
 }
 else {
-    throw("messageq_common.cfg: Did not match any platform!");
+    throw("ping_rpmsg_common.cfg: Did not match any platform!");
 }
 
 Hwi.enableException = true;
index f658c2569bc6e1b89781ad30cd278fec1f33e2e7..fef624b37c4a616a547fb22e13b238d52307355a 100644 (file)
@@ -65,6 +65,35 @@ if (Program.cpu.deviceName.match(/^OMAP5430$/) &&
     xdc.includeFile("ti/configs/omap54xx/IpuSmp.cfg");
     xdc.includeFile("ti/configs/omap54xx/IpuAmmu.cfg");
 }
+/* This will match for omap5 dsp only: */
+else if (Program.platformName.match(/^ti\.platform\.omap54xx\.dsp/)) {
+    /* This initializes the MessageQ Transport RPMSG stack:  */
+    xdc.loadPackage('ti.ipc.ipcmgr');
+    var BIOS        = xdc.useModule('ti.sysbios.BIOS');
+    BIOS.addUserStartupFunction('&IpcMgr_ipcStartup');
+
+    var HeapBuf = xdc.useModule('ti.sysbios.heaps.HeapBuf');
+    var params = new HeapBuf.Params;
+    params.align = 8;
+    params.blockSize = 512;
+    params.numBlocks = 256;
+    var msgHeap = HeapBuf.create(params);
+
+    var MessageQ  = xdc.useModule('ti.sdo.ipc.MessageQ');
+    MessageQ.registerHeapMeta(msgHeap, 0);
+
+    var Diags = xdc.useModule('xdc.runtime.Diags');
+    Diags.setMaskMeta("ti.ipc.transports.TransportRpmsg",
+        Diags.INFO|Diags.USER1|Diags.STATUS, Diags.ALWAYS_ON);
+    Diags.setMaskMeta("ti.ipc.namesrv.NameServerRemoteRpmsg", Diags.INFO,
+        Diags.ALWAYS_ON);
+
+    var VirtioSetup = xdc.useModule('ti.ipc.transports.TransportRpmsgSetup');
+    VirtioSetup.common$.diags_INFO = Diags.ALWAYS_ON;
+
+    xdc.includeFile("ti/configs/omap54xx/Dsp.cfg");
+    xdc.includeFile("ti/configs/omap54xx/DspAmmu.cfg");
+}
 else {
     xdc.loadCapsule("messageq_common.cfg.xs");
 }
diff --git a/packages/ti/ipc/tests/test_omx_dsp_omap5.cfg b/packages/ti/ipc/tests/test_omx_dsp_omap5.cfg
new file mode 100644 (file)
index 0000000..94cc65c
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* This calls MessageQCopy_init() once before BIOS_start(): */
+xdc.loadPackage('ti.ipc.ipcmgr');
+var BIOS        = xdc.useModule('ti.sysbios.BIOS');
+BIOS.addUserStartupFunction('&IpcMgr_rpmsgStartup');
+BIOS.addUserStartupFunction('&register_MxServer');
+
+var Task = xdc.useModule('ti.sysbios.knl.Task');
+Task.defaultStackSize = 0x2000;
+
+xdc.loadPackage('ti.srvmgr');
+xdc.useModule('ti.srvmgr.omx.OmxSrvMgr');
+xdc.loadPackage('ti.srvmgr.omaprpc');
+
+/* ti.grcm Configuration */
+var rcmSettings = xdc.useModule('ti.grcm.Settings');
+rcmSettings.ipc = rcmSettings.IpcSupport_ti_sdo_ipc;
+xdc.useModule('ti.grcm.RcmServer');
+
+xdc.includeFile("ti/configs/omap54xx/Dsp.cfg");
+xdc.includeFile("ti/configs/omap54xx/DspAmmu.cfg");
+
+var Task = xdc.useModule('ti.sysbios.knl.Task');
+Task.defaultStackSize = 12 * 0x400;
+
+xdc.loadPackage('ti.ipc.mm');