From: Linus Torvalds <torvalds@linux-foundation.org>
Date: Wed, 2 Apr 2014 20:47:29 +0000 (-0700)
Subject: Merge branch 'powernv-cpuidle' of git://git.kernel.org/pub/scm/linux/kernel/git/benh... 
X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=e6d9bfc63813882c896bf7ea6f6b14ca7b50b755;p=linux.git

Merge branch 'powernv-cpuidle' of git://git./linux/kernel/git/benh/powerpc

Pull powerpc non-virtualized cpuidle from Ben Herrenschmidt:
 "This is the branch I mentioned in my other pull request which contains
  our improved cpuidle support for the "powernv" platform
  (non-virtualized).

  It adds support for the "fast sleep" feature of the processor which
  provides higher power savings than our usual "nap" mode but at the
  cost of losing the timers while asleep, and thus exploits the new
  timer broadcast framework to work around that limitation.

  It's based on a tip timer tree that you seem to have already merged"

* 'powernv-cpuidle' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
  cpuidle/powernv: Parse device tree to setup idle states
  cpuidle/powernv: Add "Fast-Sleep" CPU idle state
  powerpc/powernv: Add OPAL call to resync timebase on wakeup
  powerpc/powernv: Add context management for Fast Sleep
  powerpc: Split timer_interrupt() into timer handling and interrupt handling routines
  powerpc: Implement tick broadcast IPI as a fixed IPI message
  powerpc: Free up the slot of PPC_MSG_CALL_FUNC_SINGLE IPI message
---

e6d9bfc63813882c896bf7ea6f6b14ca7b50b755
diff --cc arch/powerpc/include/asm/opal.h
index ffafab037ba86,c71c72e47d475..fe2aa0b48d2b0
--- a/arch/powerpc/include/asm/opal.h
+++ b/arch/powerpc/include/asm/opal.h
@@@ -161,10 -154,7 +161,11 @@@ extern int opal_enter_rtas(struct rtas_
  #define OPAL_FLASH_VALIDATE			76
  #define OPAL_FLASH_MANAGE			77
  #define OPAL_FLASH_UPDATE			78
+ #define OPAL_RESYNC_TIMEBASE			79
 +#define OPAL_DUMP_INIT				81
 +#define OPAL_DUMP_INFO				82
 +#define OPAL_DUMP_READ				83
 +#define OPAL_DUMP_ACK				84
  #define OPAL_GET_MSG				85
  #define OPAL_CHECK_ASYNC_COMPLETION		86
  #define OPAL_SYNC_HOST_REBOOT			87
@@@ -915,14 -862,11 +916,15 @@@ extern void opal_get_rtc_time(struct rt
  extern unsigned long opal_get_boot_time(void);
  extern void opal_nvram_init(void);
  extern void opal_flash_init(void);
 +extern int opal_elog_init(void);
 +extern void opal_platform_dump_init(void);
 +extern void opal_sys_param_init(void);
  
  extern int opal_machine_check(struct pt_regs *regs);
 +extern bool opal_mce_check_early_recovery(struct pt_regs *regs);
  
  extern void opal_shutdown(void);
+ extern int opal_resync_timebase(void);
  
  extern void opal_lpc_init(void);
  
diff --cc arch/powerpc/platforms/powernv/opal-wrappers.S
index 75c89df8d71e9,aab54b60334fc..bb90f9a4e0270
--- a/arch/powerpc/platforms/powernv/opal-wrappers.S
+++ b/arch/powerpc/platforms/powernv/opal-wrappers.S
@@@ -131,15 -126,7 +131,16 @@@ OPAL_CALL(opal_write_elog,			OPAL_ELOG_
  OPAL_CALL(opal_validate_flash,			OPAL_FLASH_VALIDATE);
  OPAL_CALL(opal_manage_flash,			OPAL_FLASH_MANAGE);
  OPAL_CALL(opal_update_flash,			OPAL_FLASH_UPDATE);
+ OPAL_CALL(opal_resync_timebase,			OPAL_RESYNC_TIMEBASE);
 +OPAL_CALL(opal_dump_init,			OPAL_DUMP_INIT);
 +OPAL_CALL(opal_dump_info,			OPAL_DUMP_INFO);
 +OPAL_CALL(opal_dump_info2,			OPAL_DUMP_INFO2);
 +OPAL_CALL(opal_dump_read,			OPAL_DUMP_READ);
 +OPAL_CALL(opal_dump_ack,			OPAL_DUMP_ACK);
  OPAL_CALL(opal_get_msg,				OPAL_GET_MSG);
  OPAL_CALL(opal_check_completion,		OPAL_CHECK_ASYNC_COMPLETION);
 +OPAL_CALL(opal_dump_resend_notification,	OPAL_DUMP_RESEND);
  OPAL_CALL(opal_sync_host_reboot,		OPAL_SYNC_HOST_REBOOT);
 +OPAL_CALL(opal_sensor_read,			OPAL_SENSOR_READ);
 +OPAL_CALL(opal_get_param,			OPAL_GET_PARAM);
 +OPAL_CALL(opal_set_param,			OPAL_SET_PARAM);
diff --cc drivers/cpuidle/cpuidle-powernv.c
index f48607cd25402,fdae1c476e275..719f6fb5b1c35
--- a/drivers/cpuidle/cpuidle-powernv.c
+++ b/drivers/cpuidle/cpuidle-powernv.c
@@@ -14,8 -16,13 +16,14 @@@
  
  #include <asm/machdep.h>
  #include <asm/firmware.h>
 +#include <asm/runlatch.h>
  
+ /* Flags and constants used in PowerNV platform */
+ 
+ #define MAX_POWERNV_IDLE_STATES	8
+ #define IDLE_USE_INST_NAP	0x00010000 /* Use nap instruction */
+ #define IDLE_USE_INST_SLEEP	0x00020000 /* Use sleep instruction */
+ 
  struct cpuidle_driver powernv_idle_driver = {
  	.name             = "powernv_idle",
  	.owner            = THIS_MODULE,