cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

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);