New method for run-time configuration of cluster baseId
authorRamsey Harris <ramsey@ti.com>
Wed, 4 Feb 2015 03:07:06 +0000 (19:07 -0800)
committerRobert Tivy <rtivy@ti.com>
Wed, 4 Feb 2015 19:08:51 +0000 (11:08 -0800)
Added MultiProc_setBaseIdOfCluster(). Only supported on SYS/BIOS.
This method should be called from a startup first function.

packages/ti/ipc/MultiProc.h
packages/ti/sdo/utils/MultiProc.c

index 17dc6a78b5b32a38be79aa7051718f4d2f1724f3..951b52e6cd5092921c9a8cc4c5900a8b2813ea19 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2014 Texas Instruments Incorporated - http://www.ti.com
+ * Copyright (c) 2012-2015 Texas Instruments Incorporated - http://www.ti.com
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -252,6 +252,26 @@ UInt16 MultiProc_self(Void);
  */
 Int MultiProc_setLocalId(UInt16 id);
 
+/*!
+ *  @brief      Sets executing processor's MultiProc cluster base id
+ *
+ *  @param      id  Cluster base id
+ *
+ *  @remarks    Many users don't require this function.  A typical use case
+ *              for this function is on a homogenous multicore device where
+ *              the exact same image is loaded onto all cores and the
+ *              'current' processor's cluster base id is determined/set at
+ *              runtime by reading a GPIO pin or manually assigned via
+ *              a special mechanism.
+ *
+ *  @remarks    Currently only supported in SYSBIOS.
+ *
+ *  @return     MultiProc status:
+ *              - #MultiProc_S_SUCCESS: MultiProc cluster id successfully set
+ *              - #MultiProc_E_FAIL:    MultiProc cluster id cannot be set
+ */
+Int MultiProc_setBaseIdOfCluster(UInt16 id);
+
 #if defined (__cplusplus)
 }
 #endif /* defined (__cplusplus) */
index d6aceb5b54f458a5ad61effa3f4328cfcd751af0..a83da2b7ffbd26c7f6b973b314358ab0856464d8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2014 Texas Instruments Incorporated - http://www.ti.com
+ * Copyright (c) 2012-2015 Texas Instruments Incorporated - http://www.ti.com
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -52,6 +52,7 @@
     #pragma FUNC_EXT_CALLED(MultiProc_getNumProcsInCluster);
     #pragma FUNC_EXT_CALLED(MultiProc_self);
     #pragma FUNC_EXT_CALLED(MultiProc_setLocalId);
+    #pragma FUNC_EXT_CALLED(MultiProc_setBaseIdOfCluster);
 #endif
 
 /*
@@ -166,6 +167,27 @@ Int MultiProc_setLocalId(UInt16 id)
     return (MultiProc_E_FAIL);
 }
 
+/*
+ *  ======== MultiProc_setBaseIdOfCluster ========
+ */
+Int MultiProc_setBaseIdOfCluster(UInt16 id)
+{
+    /*
+     *  Check the following
+     *  1. Make sure the statically configured constant was invalid.
+     *     To call setBaseIdOfCluster, the id must have been set to invalid.
+     *  2. Make sure the call is made before module startup
+     */
+    if ((MultiProc_getBaseIdOfCluster() == MultiProc_INVALIDID) &&
+        (Startup_rtsDone() == FALSE)) {
+        /* It is ok to set the id */
+        MultiProc_module->baseIdOfCluster = id;
+        return (MultiProc_S_SUCCESS);
+    }
+
+    return (MultiProc_E_FAIL);
+}
+
 /*
  *  ======== ti_sdo_utils_MultiProc_dummy ========
  */