Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[POWERPC] Add 6xx-style HID0_SLEEP support.

This adds a function to put a 6xx/7xx/7xxx/83xx family CPU into sleep
mode, and return after an interrupt has occurred. It expects to be
called with interrupts disabled, and returns with interrupts disabled.
Interrupts are enabled while the processor is asleep, but the interrupt
that wakes the processor is not handled; it is still pending when this
function returns.

Signed-off-by: Scott Wood <scottwood@freescale.com>
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>

authored by

Scott Wood and committed by
Paul Mackerras
0b2cca80 a560643e

+62
+52
arch/powerpc/sysdev/6xx-suspend.S
··· 1 + /* 2 + * Enter and leave sleep state on chips with 6xx-style HID0 3 + * power management bits, which don't leave sleep state via reset. 4 + * 5 + * Author: Scott Wood <scottwood@freescale.com> 6 + * 7 + * Copyright (c) 2006-2007 Freescale Semiconductor, Inc. 8 + * 9 + * This program is free software; you can redistribute it and/or modify it 10 + * under the terms of the GNU General Public License version 2 as published 11 + * by the Free Software Foundation. 12 + */ 13 + 14 + #include <asm/ppc_asm.h> 15 + #include <asm/reg.h> 16 + #include <asm/thread_info.h> 17 + #include <asm/asm-offsets.h> 18 + 19 + _GLOBAL(mpc6xx_enter_standby) 20 + mflr r4 21 + 22 + mfspr r5, SPRN_HID0 23 + rlwinm r5, r5, 0, ~(HID0_DOZE | HID0_NAP) 24 + oris r5, r5, HID0_SLEEP@h 25 + mtspr SPRN_HID0, r5 26 + isync 27 + 28 + lis r5, ret_from_standby@h 29 + ori r5, r5, ret_from_standby@l 30 + mtlr r5 31 + 32 + rlwinm r5, r1, 0, 0, 31-THREAD_SHIFT 33 + lwz r6, TI_LOCAL_FLAGS(r5) 34 + ori r6, r6, _TLF_SLEEPING 35 + stw r6, TI_LOCAL_FLAGS(r5) 36 + 37 + mfmsr r5 38 + ori r5, r5, MSR_EE 39 + oris r5, r5, MSR_POW@h 40 + sync 41 + mtmsr r5 42 + isync 43 + 44 + 1: b 1b 45 + 46 + ret_from_standby: 47 + mfspr r5, SPRN_HID0 48 + rlwinm r5, r5, 0, ~HID0_SLEEP 49 + mtspr SPRN_HID0, r5 50 + 51 + mtlr r4 52 + blr
+4
arch/powerpc/sysdev/Makefile
··· 44 44 obj-$(CONFIG_8xx) += mpc8xx_pic.o cpm1.o 45 45 obj-$(CONFIG_UCODE_PATCH) += micropatch.o 46 46 endif 47 + 48 + ifeq ($(CONFIG_SUSPEND),y) 49 + obj-$(CONFIG_6xx) += 6xx-suspend.o 50 + endif
+6
include/asm-powerpc/mpc6xx.h
··· 1 + #ifndef __ASM_POWERPC_MPC6xx_H 2 + #define __ASM_POWERPC_MPC6xx_H 3 + 4 + void mpc6xx_enter_standby(void); 5 + 6 + #endif