QNX: IPC: Handle Internal Memory Loading outside of Resource Table
[ipc/ipcdev.git] / qnx / src / ipc3x_dev / ti / syslink / family / omap5430 / ipu / omap5430BenelliProc.c
index 380dc4fa6c0c9ae2a2a8937954e608a805233f57..e76e280b66ac368c0648652b4d78939a0d08282d 100644 (file)
@@ -13,7 +13,7 @@
  *
  *  ============================================================================
  *
- *  Copyright (c) 2010-2015, Texas Instruments Incorporated
+ *  Copyright (c) 2010-2016, Texas Instruments Incorporated
  *
  *  Redistribution and use in source and binary forms, with or without
  *  modification, are permitted provided that the following conditions
@@ -93,6 +93,12 @@ extern "C" {
 #define IS_RANGE_VALID(x,min,max) (((x) < (max)) && ((x) >= (min)))
 
 
+/*!
+ *  @brief  Number of static entries in address translation table.
+ */
+#define AddrTable_IPU_STATIC_COUNT 1
+#define AddrTable_DSP_STATIC_COUNT 0
+
 /*!
  *  @brief  max entries in translation table.
  */
@@ -144,14 +150,31 @@ typedef struct OMAP5430TESLAPROC_module_object_tag {
 
 
 /* Number of  memory regions */
-static UInt32 AddrTable_IPU_count = 0;
-static UInt32 AddrTable_DSP_count = 0;
+static UInt32 AddrTable_IPU_count = AddrTable_IPU_STATIC_COUNT;
+static UInt32 AddrTable_DSP_count = AddrTable_DSP_STATIC_COUNT;
 
 /* Address translation table for IPU */
-static ProcMgr_AddrInfo OMAP5430BENELLIPROC_addrTable[AddrTable_SIZE];
+static ProcMgr_AddrInfo OMAP5430BENELLIPROC_addrTable[AddrTable_SIZE] =
+{
+        /* L2 RAM */
+        {
+            .addr[ProcMgr_AddrType_MasterKnlVirt] = -1u,
+            .addr[ProcMgr_AddrType_MasterUsrVirt] = -1u,
+            .addr[ProcMgr_AddrType_MasterPhys] = 0x55020000u,
+            .addr[ProcMgr_AddrType_SlaveVirt] = 0x20000000u,
+            .addr[ProcMgr_AddrType_SlavePhys] = -1u,
+            .size = 0x10000u,
+            .isCached = FALSE,
+            .mapMask = ProcMgr_SLAVEVIRT,
+            .isMapped = TRUE,
+            .refCount = 0u      /* refCount set to 0 for static entry */
+        },
+};
 
 /* Address translation table for DSP */
-static ProcMgr_AddrInfo OMAP5430TESLAPROC_addrTable[AddrTable_SIZE];
+static ProcMgr_AddrInfo OMAP5430TESLAPROC_addrTable[AddrTable_SIZE] =
+{
+};
 
 /* =============================================================================
  *  Globals
@@ -168,7 +191,7 @@ static
 OMAP5430BENELLIPROC_ModuleObject OMAP5430IPU0PROC_state =
 {
     .config_size = sizeof (OMAP5430BENELLIPROC_Config),
-    .defInstParams.numMemEntries = 0,
+    .defInstParams.numMemEntries = AddrTable_IPU_STATIC_COUNT,
     .isSetup = FALSE,
     .procHandle = NULL,
     .gateHandle = NULL
@@ -181,7 +204,7 @@ static
 OMAP5430BENELLIPROC_ModuleObject OMAP5430IPU1PROC_state =
 {
     .config_size = sizeof (OMAP5430BENELLIPROC_Config),
-    .defInstParams.numMemEntries = 0,
+    .defInstParams.numMemEntries = AddrTable_IPU_STATIC_COUNT,
     .isSetup = FALSE,
     .procHandle = NULL,
     .gateHandle = NULL
@@ -194,7 +217,7 @@ static
 OMAP5430TESLAPROC_ModuleObject OMAP5430DSPPROC_state =
 {
     .config_size = sizeof (OMAP5430TESLAPROC_Config),
-    .defInstParams.numMemEntries = 0,
+    .defInstParams.numMemEntries = AddrTable_DSP_STATIC_COUNT,
     .isSetup = FALSE,
     .procHandle = NULL,
     .gateHandle = NULL
@@ -1267,6 +1290,7 @@ OMAP5430BENELLIPROC_detach (Processor_Handle handle)
     Int i                              = 0;
     ProcMgr_AddrInfo *    ai;
     ProcMgr_AddrInfo *          pMemRegn        = NULL;
+    UInt32                    staticCount = 0;
     UInt32 *                  AddrTable_count = NULL;
 
     GT_1trace (curTrace, GT_ENTER, "OMAP5430BENELLIPROC_detach", handle);
@@ -1277,16 +1301,19 @@ OMAP5430BENELLIPROC_detach (Processor_Handle handle)
     {
         case PROCTYPE_IPU0:
             pMemRegn = OMAP5430BENELLIPROC_addrTable;
+            staticCount = AddrTable_IPU_STATIC_COUNT;
             AddrTable_count = &AddrTable_IPU_count;
             break;
 #ifndef IPC_SYSBIOS_SMP
         case PROCTYPE_IPU1:
             pMemRegn = OMAP5430BENELLIPROC_addrTable;
+            staticCount = AddrTable_IPU_STATIC_COUNT;
             AddrTable_count = &AddrTable_IPU_count;
             break;
 #endif
         case PROCTYPE_DSP:
             pMemRegn = OMAP5430TESLAPROC_addrTable;
+            staticCount = AddrTable_DSP_STATIC_COUNT;
             AddrTable_count = &AddrTable_DSP_count;
             break;
     }
@@ -1360,7 +1387,7 @@ OMAP5430BENELLIPROC_detach (Processor_Handle handle)
             }
 
             /* delete all dynamically added entries */
-            for (i = 0; i < *AddrTable_count; i++) {
+            for (i = staticCount; i < *AddrTable_count; i++) {
                 ai = &pMemRegn[i];
                 ai->addr[ProcMgr_AddrType_MasterKnlVirt] = -1u;
                 ai->addr[ProcMgr_AddrType_MasterUsrVirt] = -1u;
@@ -1373,8 +1400,8 @@ OMAP5430BENELLIPROC_detach (Processor_Handle handle)
                 ai->isMapped = FALSE;
                 ai->refCount = 0u;
             }
-            object->params.numMemEntries = 0;
-            *AddrTable_count = 0;
+            object->params.numMemEntries = staticCount;
+            *AddrTable_count = staticCount;
 
             //No need to reset.. that will be done in STOP
            /* tmpStatus = OMAP5430BENELLI_halResetCtrl (object->halObject,