Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a9f73632 authored by Keerthy's avatar Keerthy Committed by Tony Lindgren
Browse files

ARM: OMAP2+: prm44xx: Inroduce cpu_pm notifiers for context save/restore



Inroduce cpu_pm notifiers for context save/restore. This will be
needed for am43xx family in case of rtc only mode with ddr in
self-refresh.

Signed-off-by: default avatarKeerthy <j-keerthy@ti.com>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent e37fbf05
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
 * published by the Free Software Foundation.
 */

#include <linux/cpu_pm.h>
#include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/errno.h>
@@ -30,6 +31,7 @@
#include "prcm44xx.h"
#include "prminst44xx.h"
#include "powerdomain.h"
#include "pm.h"

/* Static data */

@@ -768,6 +770,22 @@ void prm_restore_context(void)
				 omap4_prcm_irq_setup.pm_ctrl);
}

static int cpu_notifier(struct notifier_block *nb, unsigned long cmd, void *v)
{
	switch (cmd) {
	case CPU_CLUSTER_PM_ENTER:
		if (enable_off_mode)
			prm_save_context();
		break;
	case CPU_CLUSTER_PM_EXIT:
		if (enable_off_mode)
			prm_restore_context();
		break;
	}

	return NOTIFY_OK;
}

/*
 * XXX document
 */
@@ -788,6 +806,7 @@ static const struct omap_prcm_init_data *prm_init_data;

int __init omap44xx_prm_init(const struct omap_prcm_init_data *data)
{
	static struct notifier_block nb;
	omap_prm_base_init();

	prm_init_data = data;
@@ -809,6 +828,12 @@ int __init omap44xx_prm_init(const struct omap_prcm_init_data *data)
		omap4_prcm_irq_setup.mask = AM43XX_PRM_IRQENABLE_MPU_OFFSET;
	}

	/* Only AM43XX can lose prm context during rtc-ddr suspend */
	if (soc_is_am43xx()) {
		nb.notifier_call = cpu_notifier;
		cpu_pm_register_notifier(&nb);
	}

	return prm_register(&omap44xx_prm_ll_data);
}