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

cpuidle-s3c64xx.c (1328B)


      1// SPDX-License-Identifier: GPL-2.0
      2//
      3// Copyright (c) 2011 Wolfson Microelectronics, plc
      4// Copyright (c) 2011 Samsung Electronics Co., Ltd.
      5//		http://www.samsung.com
      6
      7#include <linux/kernel.h>
      8#include <linux/init.h>
      9#include <linux/cpuidle.h>
     10#include <linux/io.h>
     11#include <linux/export.h>
     12#include <linux/time.h>
     13
     14#include <asm/cpuidle.h>
     15
     16#include "cpu.h"
     17#include "map.h"
     18
     19#include "regs-sys-s3c64xx.h"
     20#include "regs-syscon-power-s3c64xx.h"
     21
     22static int s3c64xx_enter_idle(struct cpuidle_device *dev,
     23			      struct cpuidle_driver *drv,
     24			      int index)
     25{
     26	unsigned long tmp;
     27
     28	/* Setup PWRCFG to enter idle mode */
     29	tmp = __raw_readl(S3C64XX_PWR_CFG);
     30	tmp &= ~S3C64XX_PWRCFG_CFG_WFI_MASK;
     31	tmp |= S3C64XX_PWRCFG_CFG_WFI_IDLE;
     32	__raw_writel(tmp, S3C64XX_PWR_CFG);
     33
     34	cpu_do_idle();
     35
     36	return index;
     37}
     38
     39static struct cpuidle_driver s3c64xx_cpuidle_driver = {
     40	.name	= "s3c64xx_cpuidle",
     41	.owner  = THIS_MODULE,
     42	.states = {
     43		{
     44			.enter            = s3c64xx_enter_idle,
     45			.exit_latency     = 1,
     46			.target_residency = 1,
     47			.name             = "IDLE",
     48			.desc             = "System active, ARM gated",
     49		},
     50	},
     51	.state_count = 1,
     52};
     53
     54static int __init s3c64xx_init_cpuidle(void)
     55{
     56	if (soc_is_s3c64xx())
     57		return cpuidle_register(&s3c64xx_cpuidle_driver, NULL);
     58	return 0;
     59}
     60device_initcall(s3c64xx_init_cpuidle);