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