Power: Fixup idleCount for IPU running SMP
authorSuman Anna <s-anna@ti.com>
Wed, 22 Apr 2015 22:50:11 +0000 (17:50 -0500)
committerRobert Tivy <rtivy@ti.com>
Tue, 28 Apr 2015 21:29:09 +0000 (14:29 -0700)
The SMP-mode IPUs will have the PM Idle function running on each
core, with the Core1 in idle mode more often than not when there
is only one task running. A single debug counter is used at present
to track PM idle function executions on both cores, but this doesn't
track the counters per core. Make the IpcPower_idleCount an array,
and use different index elements for each core.

Signed-off-by: Suman Anna <s-anna@ti.com>
packages/ti/pm/IpcPower.c

index 9b8df15276fa39107956da63a32b1ae284650d60..c70dece94fdff3cef4b24a293efd5a7db5bb58d1 100644 (file)
@@ -60,6 +60,7 @@
 #include <ti/sysbios/family/arm/ducati/omap4430/Power.h>
 #include <ti/sysbios/family/arm/ducati/Core.h>
 #else
+#include <ti/sysbios/hal/Core.h>
 #include <ti/sysbios/family/arm/ducati/smp/Power.h>
 #endif
 
@@ -83,7 +84,11 @@ static UInt32 IpcPower_hibLocks; /* Only one lock in SMP mode */
 #endif
 
 /* PM transition debug counters */
+#ifndef SMP
 UInt32 IpcPower_idleCount = 0;
+#else
+UInt32 IpcPower_idleCount[2] = { 0, 0 };
+#endif
 UInt32 IpcPower_suspendCount = 0;
 UInt32 IpcPower_resumeCount = 0;
 
@@ -380,7 +385,12 @@ Void IpcPower_suspend()
  */
 Void IpcPower_idle()
 {
+#ifndef SMP
     IpcPower_idleCount++;
+#else
+    UInt coreId = Core_getId();
+    IpcPower_idleCount[coreId]++;
+#endif
 
     REG32(M3_SCR_REG) = IpcPower_deepSleep ? SET_DEEPSLEEP : CLR_DEEPSLEEP;
     asm(" wfi");