root/arch/powerpc/platforms/pasemi/powersave.S

/* [<][>][^][v][top][bottom][index][help] */
   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 

/* [<][>][^][v][top][bottom][index][help] */