sh: PMB hibernation support
PATCH 1/1 sh: PMB hibernation support
Hi Paul
Quoted 6 lines
Feel free to post what you already have, even if it doesn't apply. This sort of stuff by nature tends to take several iterations before it's in any shape to merge anyways.
In attach there is a proposal on how manage the PMB after a resume from hibernation.
My assumption in background is that "just because the kernel runs.. the "core" PMB (main memory) are already ok" In our kernel I'm doing something very similar.
I can say: it compiles but I have no way to really test this code as it is.
Regards
Francesco
From f7ac0e9ecd48c8987a747968a79a94ac3f424adc Mon Sep 17 00:00:00 2001
From: Francesco Virlinzi <[email protected]>
Date: Wed, 11 Mar 2009 11:31:52 +0100
Subject: [PATCH] sh_mmu: Added hibernation support in the PMB
--- arch/sh/mm/pmb.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 files changed, 38 insertions(+), 0 deletions(-)
arch/sh/mm/pmb.c +38 -0
@@ -15,6 +15,8 @@*/ #include <linux/init.h> #include <linux/kernel.h> +#include <linux/sysdev.h> +#include <linux/cpu.h> #include <linux/module.h> #include <linux/slab.h> #include <linux/bitops.h>
@@ -402,3 +404,39 @@ static int __init pmb_debugfs_init(void)return 0 ; }postcore_initcall (pmb_debugfs_init); + +#ifdef CONFIG_PM +static int pmb_sysdev_suspend (struct sys_device *dev,pm_message_t state) +{ +static pm_message_t prev_state; + +/* Restore the PMB after a resume from hibernation */ +if (state.event ==PM_EVENT_ON && + prev_state.event ==PM_EVENT_FREEZE ) { +struct pmb_entry *pmbe; +spin_lock_irq (&pmb_list_lock); +for (pmbe = pmb_list; pmbe; pmbe = pmbe->next) +set_pmb_entry (pmbe); +spin_unlock_irq (&pmb_list_lock); + } + prev_state = state; +return 0 ; +} + +static int pmb_sysdev_resume (struct sys_device *dev) +{ +return pmb_sysdev_suspend (dev,PMSG_ON ); +} + +static struct sysdev_driver pmb_sysdev_driver = { + .suspend = pmb_sysdev_suspend, + .resume = pmb_sysdev_resume, +}; + +static int __init pmb_sysdev_init (void ) +{ +return sysdev_driver_register (&cpu_sysdev_class, &pmb_sysdev_driver); +} + +subsys_initcall (pmb_sysdev_init); +#endif
Signature · 1 line
1.5.6.6
Quoted 7 lines · Francesco VIRLINZI
In attach there is a proposal on how manage the PMB after a resume from hibernation.
My assumption in background is that "just because the kernel runs.. the "core" PMB (main memory) are already ok"
In our kernel I'm doing something very similar.
I can say: it compiles but I have no way to really test this code as it is.
This looks like as good a place as any to start, so I'll merge this for now, and we can build on top of this incrementally as other cases pop up.