All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH-v2] Hibernation Support in mips system
@ 2009-06-04 12:27 wuzhangjin
  2009-06-04 15:28 ` Atsushi Nemoto
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: wuzhangjin @ 2009-06-04 12:27 UTC (permalink / raw)
  To: linux-mips, ralf
  Cc: Arnaud Patard, Atsushi Nemoto, Yan Hua, Zhang Fuxin,
	Pavel Machek, Wu Zhangjin, Hu Hongbing

From: Wu Zhangjin <wuzj@lemote.com>

This is pulled from the to-mips branch of
http://dev.lemote.com/code/linux_loongson, the original author is Hu
Hongbing from www.lemote.com

according to the feedback from Atsushi Nemoto, Arnaud Patard, Yanhua,
Pavel Machek and Ralf Baechle. I removed the a0-a7,v1 registers
saving/restoring, added cache/tlb flushing and fpu,dsp registers
saving/restoring, and also tuned some coding style problem with the
support of scripts/checkpatch.pl and added GPL notice.

Reviewed-by: Pavel Machek <pavel@ucw.cz>
Reviewed-by: Yan Hua <yanh@lemote.com>
Reviewed-by: Arnaud Patard <apatard@mandriva.com>
Reviewed-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Wu Zhangjin <wuzj@lemote.com>
Signed-off-by: Hu Hongbing <huhb@lemote.com>
---
 arch/mips/Kconfig               |    3 ++
 arch/mips/Makefile              |    3 ++
 arch/mips/include/asm/suspend.h |    5 ++-
 arch/mips/kernel/asm-offsets.c  |   13 +++++++
 arch/mips/power/Makefile        |    1 +
 arch/mips/power/cpu.c           |   43 ++++++++++++++++++++++++
 arch/mips/power/hibernate.S     |   70 +++++++++++++++++++++++++++++++++++++++
 7 files changed, 137 insertions(+), 1 deletions(-)
 create mode 100644 arch/mips/power/Makefile
 create mode 100644 arch/mips/power/cpu.c
 create mode 100644 arch/mips/power/hibernate.S

diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index c7d1d08..4423d82 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -2128,6 +2128,9 @@ endmenu
 
 menu "Power management options"
 
+config ARCH_HIBERNATION_POSSIBLE
+	def_bool y
+
 config ARCH_SUSPEND_POSSIBLE
 	def_bool y
 	depends on !SMP
diff --git a/arch/mips/Makefile b/arch/mips/Makefile
index 6d39fdf..361a30d 100644
--- a/arch/mips/Makefile
+++ b/arch/mips/Makefile
@@ -685,6 +685,9 @@ core-y			+= arch/mips/kernel/ arch/mips/mm/ arch/mips/math-emu/
 
 drivers-$(CONFIG_OPROFILE)	+= arch/mips/oprofile/
 
+# suspend and hibernation support
+drivers-$(CONFIG_PM)	+= arch/mips/power/
+
 ifdef CONFIG_LASAT
 rom.bin rom.sw: vmlinux
 	$(Q)$(MAKE) $(build)=arch/mips/lasat/image $@
diff --git a/arch/mips/include/asm/suspend.h b/arch/mips/include/asm/suspend.h
index 2562f8f..294cdb6 100644
--- a/arch/mips/include/asm/suspend.h
+++ b/arch/mips/include/asm/suspend.h
@@ -1,6 +1,9 @@
 #ifndef __ASM_SUSPEND_H
 #define __ASM_SUSPEND_H
 
-/* Somewhen...  Maybe :-)  */
+static inline int arch_prepare_suspend(void) { return 0; }
+
+/* References to section boundaries */
+extern const void __nosave_begin, __nosave_end;
 
 #endif /* __ASM_SUSPEND_H */
diff --git a/arch/mips/kernel/asm-offsets.c b/arch/mips/kernel/asm-offsets.c
index c901c22..8d006ec 100644
--- a/arch/mips/kernel/asm-offsets.c
+++ b/arch/mips/kernel/asm-offsets.c
@@ -14,6 +14,7 @@
 #include <linux/mm.h>
 #include <linux/interrupt.h>
 #include <linux/kbuild.h>
+#include <linux/suspend.h>
 #include <asm/ptrace.h>
 #include <asm/processor.h>
 
@@ -326,3 +327,15 @@ void output_octeon_cop2_state_defines(void)
 	BLANK();
 }
 #endif
+
+#ifdef CONFIG_HIBERNATION
+void output_pbe_defines(void)
+{
+	COMMENT(" Linux struct pbe offsets. ");
+	OFFSET(PBE_ADDRESS, pbe, address);
+	OFFSET(PBE_ORIG_ADDRESS, pbe, orig_address);
+	OFFSET(PBE_NEXT, pbe, next);
+	DEFINE(PBE_SIZE, sizeof(struct pbe));
+	BLANK();
+}
+#endif
diff --git a/arch/mips/power/Makefile b/arch/mips/power/Makefile
new file mode 100644
index 0000000..73d56b8
--- /dev/null
+++ b/arch/mips/power/Makefile
@@ -0,0 +1 @@
+obj-$(CONFIG_HIBERNATION) += cpu.o hibernate.o
diff --git a/arch/mips/power/cpu.c b/arch/mips/power/cpu.c
new file mode 100644
index 0000000..505c1b2
--- /dev/null
+++ b/arch/mips/power/cpu.c
@@ -0,0 +1,43 @@
+/*
+ * Suspend support specific for mips.
+ *
+ * Distribute under GPLv2
+ *
+ * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
+ * Author: Hu Hongbing <huhb@lemote.com>
+ *         Wu Zhangjin <wuzj@lemote.com>
+ */
+#include <asm/suspend.h>
+#include <asm/fpu.h>
+#include <asm/dsp.h>
+
+static u32 saved_status;
+struct pt_regs saved_regs;
+
+void save_processor_state(void)
+{
+	saved_status = read_c0_status();
+
+	if (is_fpu_owner())
+		save_fp(current);
+	if (cpu_has_dsp)
+		save_dsp(current);
+}
+
+void restore_processor_state(void)
+{
+	write_c0_status(saved_status);
+
+	if (is_fpu_owner())
+		restore_fp(current);
+	if (cpu_has_dsp)
+		restore_dsp(current);
+}
+
+int pfn_is_nosave(unsigned long pfn)
+{
+	unsigned long nosave_begin_pfn = PFN_DOWN(__pa(&__nosave_begin));
+	unsigned long nosave_end_pfn = PFN_UP(__pa(&__nosave_end));
+
+	return	(pfn >= nosave_begin_pfn) && (pfn < nosave_end_pfn);
+}
diff --git a/arch/mips/power/hibernate.S b/arch/mips/power/hibernate.S
new file mode 100644
index 0000000..f7c78ff
--- /dev/null
+++ b/arch/mips/power/hibernate.S
@@ -0,0 +1,70 @@
+/*
+ * Hibernation support specific for mips - temporary page tables
+ *
+ * Distribute under GPLv2
+ *
+ * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
+ * Author: Hu Hongbing <huhb@lemote.com>
+ *         Wu Zhangjin <wuzj@lemote.com>
+ */
+#include <asm/asm-offsets.h>
+#include <asm/regdef.h>
+#include <asm/asm.h>
+
+.text
+LEAF(swsusp_arch_suspend)
+	PTR_LA t0, saved_regs
+	PTR_S ra, PT_R31(t0)
+	PTR_S sp, PT_R29(t0)
+	PTR_S fp, PT_R30(t0)
+	PTR_S gp, PT_R28(t0)
+	PTR_S s0, PT_R16(t0)
+	PTR_S s1, PT_R17(t0)
+	PTR_S s2, PT_R18(t0)
+	PTR_S s3, PT_R19(t0)
+	PTR_S s4, PT_R20(t0)
+	PTR_S s5, PT_R21(t0)
+	PTR_S s6, PT_R22(t0)
+	PTR_S s7, PT_R23(t0)
+	j swsusp_save
+END(swsusp_arch_suspend)
+
+LEAF(swsusp_arch_resume)
+	PTR_L t0, restore_pblist
+0:
+	PTR_L t1, PBE_ADDRESS(t0)   /* source */
+	PTR_L t2, PBE_ORIG_ADDRESS(t0) /* destination */
+	PTR_ADDIU t3, t1, _PAGE_SIZE
+1:
+	REG_L t8, (t1)
+	REG_S t8, (t2)
+	PTR_ADDIU t1, t1, SZREG
+	PTR_ADDIU t2, t2, SZREG
+	bne t1, t3, 1b
+	PTR_L t0, PBE_NEXT(t0)
+	bnez t0, 0b
+	/* flush caches to make sure context is in memory */
+	PTR_L t0, __flush_cache_all
+	jalr t0
+	/* flush tlb entries */
+#ifdef CONFIG_SMP
+	jal	flush_tlb_all
+#else
+	jal	local_flush_tlb_all
+#endif
+	PTR_LA t0, saved_regs
+	PTR_L ra, PT_R31(t0)
+	PTR_L sp, PT_R29(t0)
+	PTR_L fp, PT_R30(t0)
+	PTR_L gp, PT_R28(t0)
+	PTR_L s0, PT_R16(t0)
+	PTR_L s1, PT_R17(t0)
+	PTR_L s2, PT_R18(t0)
+	PTR_L s3, PT_R19(t0)
+	PTR_L s4, PT_R20(t0)
+	PTR_L s5, PT_R21(t0)
+	PTR_L s6, PT_R22(t0)
+	PTR_L s7, PT_R23(t0)
+	PTR_LI v0, 0x0
+	jr ra
+END(swsusp_arch_resume)
-- 
1.6.0.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH-v2] Hibernation Support in mips system
  2009-06-04 12:27 [PATCH-v2] Hibernation Support in mips system wuzhangjin
@ 2009-06-04 15:28 ` Atsushi Nemoto
  2009-06-04 16:06   ` Wu Zhangjin
  2009-06-06 15:23 ` Zhang Le
  2009-06-16 11:01 ` Ralf Baechle
  2 siblings, 1 reply; 6+ messages in thread
From: Atsushi Nemoto @ 2009-06-04 15:28 UTC (permalink / raw)
  To: wuzhangjin; +Cc: linux-mips, ralf, apatard, yanh, zhangfx, pavel, wuzj, huhb

On Thu,  4 Jun 2009 20:27:10 +0800, wuzhangjin@gmail.com wrote:
> From: Wu Zhangjin <wuzj@lemote.com>
> 
> This is pulled from the to-mips branch of
> http://dev.lemote.com/code/linux_loongson, the original author is Hu
> Hongbing from www.lemote.com

I have successfully suspended to disk on malta qemu.  Thanks!

---
Atsushi Nemoto

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH-v2] Hibernation Support in mips system
  2009-06-04 15:28 ` Atsushi Nemoto
@ 2009-06-04 16:06   ` Wu Zhangjin
  0 siblings, 0 replies; 6+ messages in thread
From: Wu Zhangjin @ 2009-06-04 16:06 UTC (permalink / raw)
  To: Atsushi Nemoto; +Cc: linux-mips, ralf, apatard, yanh, zhangfx, pavel, huhb

On Fri, 2009-06-05 at 00:28 +0900, Atsushi Nemoto wrote:
> On Thu,  4 Jun 2009 20:27:10 +0800, wuzhangjin@gmail.com wrote:
> > From: Wu Zhangjin <wuzj@lemote.com>
> > 
> > This is pulled from the to-mips branch of
> > http://dev.lemote.com/code/linux_loongson, the original author is Hu
> > Hongbing from www.lemote.com
> 
> I have successfully suspended to disk on malta qemu.  Thanks!

thanks very much for your testing :-)

Wu Zhangjin

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH-v2] Hibernation Support in mips system
  2009-06-04 12:27 [PATCH-v2] Hibernation Support in mips system wuzhangjin
  2009-06-04 15:28 ` Atsushi Nemoto
@ 2009-06-06 15:23 ` Zhang Le
  2009-06-06 16:57   ` Wu Zhangjin
  2009-06-16 11:01 ` Ralf Baechle
  2 siblings, 1 reply; 6+ messages in thread
From: Zhang Le @ 2009-06-06 15:23 UTC (permalink / raw)
  To: wuzhangjin
  Cc: linux-mips, ralf, Arnaud Patard, Atsushi Nemoto, Yan Hua,
	Zhang Fuxin, Pavel Machek, Wu Zhangjin, Hu Hongbing

[-- Attachment #1: Type: text/plain, Size: 629 bytes --]

On 20:27 Thu 04 Jun     , wuzhangjin@gmail.com wrote:

[snip]

> +++ b/arch/mips/power/cpu.c
> @@ -0,0 +1,43 @@
> +/*
> + * Suspend support specific for mips.

Sorry for nitpicking, but here "specific" could be omitted.

> + *
> + * Distribute under GPLv2

Distributed

...
[snip]
...

> +++ b/arch/mips/power/hibernate.S
> @@ -0,0 +1,70 @@
> +/*
> + * Hibernation support specific for mips - temporary page tables

Same here

> + *
> + * Distribute under GPLv2

And here

-- 
Zhang, Le
Gentoo/Loongson Developer
http://zhangle.is-a-geek.org
0260 C902 B8F8 6506 6586 2B90 BC51 C808 1E4E 2973

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH-v2] Hibernation Support in mips system
  2009-06-06 15:23 ` Zhang Le
@ 2009-06-06 16:57   ` Wu Zhangjin
  0 siblings, 0 replies; 6+ messages in thread
From: Wu Zhangjin @ 2009-06-06 16:57 UTC (permalink / raw)
  To: Zhang Le
  Cc: linux-mips, ralf, Arnaud Patard, Atsushi Nemoto, Yan Hua,
	Zhang Fuxin, Pavel Machek, Hu Hongbing

Hi, 

Applied :-)

thanks!
Wu Zhangjin

On Sat, 2009-06-06 at 23:23 +0800, Zhang Le wrote:
> On 20:27 Thu 04 Jun     , wuzhangjin@gmail.com wrote:
> 
> [snip]
> 
> > +++ b/arch/mips/power/cpu.c
> > @@ -0,0 +1,43 @@
> > +/*
> > + * Suspend support specific for mips.
> 
> Sorry for nitpicking, but here "specific" could be omitted.
> 
> > + *
> > + * Distribute under GPLv2
> 
> Distributed
> 
> ...
> [snip]
> ...
> 
> > +++ b/arch/mips/power/hibernate.S
> > @@ -0,0 +1,70 @@
> > +/*
> > + * Hibernation support specific for mips - temporary page tables
> 
> Same here
> 
> > + *
> > + * Distribute under GPLv2
> 
> And here
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH-v2] Hibernation Support in mips system
  2009-06-04 12:27 [PATCH-v2] Hibernation Support in mips system wuzhangjin
  2009-06-04 15:28 ` Atsushi Nemoto
  2009-06-06 15:23 ` Zhang Le
@ 2009-06-16 11:01 ` Ralf Baechle
  2 siblings, 0 replies; 6+ messages in thread
From: Ralf Baechle @ 2009-06-16 11:01 UTC (permalink / raw)
  To: wuzhangjin
  Cc: linux-mips, Arnaud Patard, Atsushi Nemoto, Yan Hua, Zhang Fuxin,
	Pavel Machek, Wu Zhangjin, Hu Hongbing

On Thu, Jun 04, 2009 at 08:27:10PM +0800, wuzhangjin@gmail.com wrote:

> This is pulled from the to-mips branch of
> http://dev.lemote.com/code/linux_loongson, the original author is Hu
> Hongbing from www.lemote.com
> 
> according to the feedback from Atsushi Nemoto, Arnaud Patard, Yanhua,
> Pavel Machek and Ralf Baechle. I removed the a0-a7,v1 registers
> saving/restoring, added cache/tlb flushing and fpu,dsp registers
> saving/restoring, and also tuned some coding style problem with the
> support of scripts/checkpatch.pl and added GPL notice.

SMP support requires CPU hotplugging which MIPS currently doesn't support.
As implemented in this patch cache and tlb flushing will also be
invoked with interrupts disabled so smp_call_function() will blow up in
charming ways.  My request to move the cache and tlb flushing code was
ignored but since this matter will need revisiting anyway and hibernation
is a very useful feature I decieded to take the patch but limit hibernation
to !SMP.

Thanks folks!

  Ralf

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2009-06-16 11:03 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-06-04 12:27 [PATCH-v2] Hibernation Support in mips system wuzhangjin
2009-06-04 15:28 ` Atsushi Nemoto
2009-06-04 16:06   ` Wu Zhangjin
2009-06-06 15:23 ` Zhang Le
2009-06-06 16:57   ` Wu Zhangjin
2009-06-16 11:01 ` Ralf Baechle

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.