SysLink-IPC: SLPM - Add Ducati self-hibernation and suspend support
authorJuan Gutierrez <jgutierrez@ti.com>
Wed, 20 Oct 2010 17:40:41 +0000 (12:40 -0500)
committerSuman Anna <s-anna@ti.com>
Fri, 29 Oct 2010 04:48:33 +0000 (23:48 -0500)
commitd9f8a44a4543e940b48356d519a33c649db4b97c
tree67b0dd0a0e2391e92f7cefeda7eaca8fcf31b6cc
parentf21ad45bb63e56893c262594f5e18223b9ceaea5
SysLink-IPC: SLPM - Add Ducati self-hibernation and suspend support

This patch adds the support for Ducati Self-hibernation and hibernation
during the System Suspend/Resume path.

Ducati self-hibernation is triggered after a certain period of
inactivity time. By default the Hiber_Period is set to 5 seconds.
The hibernation period could be changed in runtime using the next
API:

Bool slpm_HibTimer_setPeriod_us(UInt32 period)

GPT3/4 are used for triggering the Save-Context phase. Each Core
saves its NVIC and M3-Register context. SysM3 is in charge of saving
the common Ducati context(AMMU, L2RAM, CTM, etc).

Ducati Self-hibernation process:
After certain period of inactivity (Hiber_Period), APPM3 starts
saving its context and notifies SYSM3 to do the same. Just before
SYSM3 starts saving its own and the common context, it sends a
notification to A9 side. At this moment both cores are "idling".
Once each core has finished its saving phase, each one sets a
readyIdle flag in shared memory and goes in WFI state. A9 checks
these flags after receiving the Ducati-hibernation notification
and asserts the resets.

When the resets are de-asserted a restore context routine is
executed in each core. SYSM3 should be woken up first to restore
the common context. There is a Sync process in which each Core
waits for the other before enabling its interrupts and
resume.

Ducati hibernation in Suspend path:
The System Suspend message recieved by Ducati triggers the Ducati
hibernation to save the context and be ready to be reset. The main
difference between "suspend-induced" and "Ducati-self" hibernation
is that the former triggers Save context routine immediately after
receiving the Suspend message, the latter in the other hand, will
wait until Ducati reach the idle loop to start the saving context
phase.

Hibernation in Suspend path does not send the hibernation notification
to A9. A9 assumes that Ducati is ready to hibernate when it receives
the acknowledge for the suspend message from Ducati.

NOTE: In order to get this patch integrated with Multimedia baseimage,
multimedia configuration file should specify the proper mapping for
GPT3 and GPT4 in cfg file:

==== @ \wtsd_ducatimmsw\platform\base_image\Base_image_app_m3.cfg ====

  var dmTimer = xdc.useModule('ti.sysbios.timers.dmtimer.Timer');
  dmTimer.timerSettings[0].baseAddr = 0xA8034000;
  dmTimer.timerSettings[1].baseAddr = 0xA8036000;

======================================================================

Signed-off-by: Juan Gutierrez <jgutierrez@ti.com>
Signed-off-by: Miguel Vadillo <vadillo@ti.com>
Signed-off-by: Paul Hunt <hunt@ti.com>
packages/ti/omap/slpm/idle.c
packages/ti/omap/slpm/idle.h
packages/ti/omap/slpm/slpm.c
packages/ti/omap/slpm/slpm.xdc
packages/ti/omap/slpm/slpm_interface.h
packages/ti/omap/slpm/slpm_transport.h