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: Keerthy <j-keerthy@ti.com> Signed-off-by: Tony Lindgren <tony@atomide.com>
This commit is contained in:
@ -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);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user