1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-only 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright 2008 IBM Corp. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Based on arch/powerpc/platforms/pasemi/idle.c: 6*4882a593Smuzhiyun * Copyright (C) 2006-2007 PA Semi, Inc 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * Added by: Jerone Young <jyoung5@us.ibm.com> 9*4882a593Smuzhiyun */ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include <linux/of.h> 12*4882a593Smuzhiyun #include <linux/kernel.h> 13*4882a593Smuzhiyun #include <asm/machdep.h> 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun static int mode_spin; 16*4882a593Smuzhiyun ppc44x_idle(void)17*4882a593Smuzhiyunstatic void ppc44x_idle(void) 18*4882a593Smuzhiyun { 19*4882a593Smuzhiyun unsigned long msr_save; 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun msr_save = mfmsr(); 22*4882a593Smuzhiyun /* set wait state MSR */ 23*4882a593Smuzhiyun mtmsr(msr_save|MSR_WE|MSR_EE|MSR_CE|MSR_DE); 24*4882a593Smuzhiyun isync(); 25*4882a593Smuzhiyun /* return to initial state */ 26*4882a593Smuzhiyun mtmsr(msr_save); 27*4882a593Smuzhiyun isync(); 28*4882a593Smuzhiyun } 29*4882a593Smuzhiyun ppc44x_idle_init(void)30*4882a593Smuzhiyunint __init ppc44x_idle_init(void) 31*4882a593Smuzhiyun { 32*4882a593Smuzhiyun if (!mode_spin) { 33*4882a593Smuzhiyun /* If we are not setting spin mode 34*4882a593Smuzhiyun then we set to wait mode */ 35*4882a593Smuzhiyun ppc_md.power_save = &ppc44x_idle; 36*4882a593Smuzhiyun } 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun return 0; 39*4882a593Smuzhiyun } 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun arch_initcall(ppc44x_idle_init); 42*4882a593Smuzhiyun idle_param(char * p)43*4882a593Smuzhiyunstatic int __init idle_param(char *p) 44*4882a593Smuzhiyun { 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun if (!strcmp("spin", p)) { 47*4882a593Smuzhiyun mode_spin = 1; 48*4882a593Smuzhiyun ppc_md.power_save = NULL; 49*4882a593Smuzhiyun } 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun return 0; 52*4882a593Smuzhiyun } 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun early_param("idle", idle_param); 55