1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (C) 2006-2007 PA Semi, Inc 4 * 5 * Maintained by: Olof Johansson <olof@lixom.net> 6 */ 7 8 #include <asm/processor.h> 9 #include <asm/page.h> 10 #include <asm/ppc_asm.h> 11 #include <asm/cputable.h> 12 #include <asm/cache.h> 13 #include <asm/thread_info.h> 14 #include <asm/asm-offsets.h> 15 16 /* Power savings opcodes since not all binutils have them at this time */ 17 #define DOZE .long 0x4c000324 18 #define NAP .long 0x4c000364 19 #define SLEEP .long 0x4c0003a4 20 #define RVW .long 0x4c0003e4 21 22 /* Common sequence to do before going to any of the 23 * powersavings modes. 24 */ 25 26 #define PRE_SLEEP_SEQUENCE \ 27 std r3,8(r1); \ 28 ptesync ; \ 29 ld r3,8(r1); \ 30 1: cmpd r3,r3; \ 31 bne 1b 32 33 _doze: 34 PRE_SLEEP_SEQUENCE 35 DOZE 36 b . 37 38 39 _GLOBAL(idle_spin) 40 blr 41 42 _GLOBAL(idle_doze) 43 LOAD_REG_ADDR(r3, _doze) 44 b sleep_common 45 46 /* Add more modes here later */ 47 48 sleep_common: 49 mflr r0 50 std r0, 16(r1) 51 stdu r1,-64(r1) 52 #ifdef CONFIG_PPC_PASEMI_CPUFREQ 53 std r3, 48(r1) 54 55 /* Only do power savings when in astate 0 */ 56 bl check_astate 57 cmpwi r3,0 58 bne 1f 59 60 ld r3, 48(r1) 61 #endif 62 LOAD_REG_IMMEDIATE(r6,MSR_DR|MSR_IR|MSR_ME|MSR_EE) 63 mfmsr r4 64 andc r5,r4,r6 65 mtmsrd r5,0 66 67 mtctr r3 68 bctrl 69 70 mtmsrd r4,0 71 72 1: addi r1,r1,64 73 ld r0,16(r1) 74 mtlr r0 75 blr 76
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.