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:
parent
e37fbf0527
commit
a9f7363241
|
@ -12,6 +12,7 @@
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <linux/cpu_pm.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
|
@ -30,6 +31,7 @@
|
||||||
#include "prcm44xx.h"
|
#include "prcm44xx.h"
|
||||||
#include "prminst44xx.h"
|
#include "prminst44xx.h"
|
||||||
#include "powerdomain.h"
|
#include "powerdomain.h"
|
||||||
|
#include "pm.h"
|
||||||
|
|
||||||
/* Static data */
|
/* Static data */
|
||||||
|
|
||||||
|
@ -768,6 +770,22 @@ void prm_restore_context(void)
|
||||||
omap4_prcm_irq_setup.pm_ctrl);
|
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
|
* 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)
|
int __init omap44xx_prm_init(const struct omap_prcm_init_data *data)
|
||||||
{
|
{
|
||||||
|
static struct notifier_block nb;
|
||||||
omap_prm_base_init();
|
omap_prm_base_init();
|
||||||
|
|
||||||
prm_init_data = data;
|
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;
|
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);
|
return prm_register(&omap44xx_prm_ll_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue