From 175addbb24ce2219750911f2524343d5f1c9aded Mon Sep 17 00:00:00 2001 From: Benoit Romieu Date: Tue, 7 Feb 2012 17:44:49 +0100 Subject: [PATCH] mrst.c: reimplement the force cold boot properly BZ: 22672 Do a cold reset in normal case. Do a cold boot depending of module param force_cold_boot. Change-Id: I422ac66c070f24c287fc625e1d282e2be71cbe84 Reviewed-on: http://android.intel.com:8080/34345 Reviewed-by: Kuppuswamy, Sathyanarayanan Reviewed-by: Gross, Mark Tested-by: Ng, Cheon-woei Reviewed-by: buildbot Tested-by: buildbot --- arch/x86/platform/intel-mid/intel-mid.c | 18 ++++++++++++++++++ arch/x86/platform/intel-mid/intel_mid_weak_decls.h | 1 - arch/x86/platform/intel-mid/mfld.c | 9 --------- arch/x86/platform/intel-mid/mrst.c | 9 --------- 4 files changed, 18 insertions(+), 19 deletions(-) diff --git a/arch/x86/platform/intel-mid/intel-mid.c b/arch/x86/platform/intel-mid/intel-mid.c index 631534f..a0c7b80 100644 --- a/arch/x86/platform/intel-mid/intel-mid.c +++ b/arch/x86/platform/intel-mid/intel-mid.c @@ -254,6 +254,24 @@ int intel_mid_i8042_detect(void) return 0; } +static int force_cold_boot; +module_param(force_cold_boot, bool, 0644); +MODULE_PARM_DESC(force_cold_boot, + "Set to Y to force a COLD BOOT instead of a COLD RESET " + "on the next reboot system call."); + +static void intel_mid_reboot(void) +{ + if (intel_scu_ipc_medfw_upgrade()) { + pr_debug("intel_scu_ipc: IFWI upgrade failed...\n"); + BUG(); + } + if (force_cold_boot) + intel_scu_ipc_simple_command(IPCMSG_COLD_BOOT, 0); + else + intel_scu_ipc_simple_command(IPCMSG_COLD_RESET, 0); +} + /* * Moorestown specific x86_init function overrides and early setup * calls. diff --git a/arch/x86/platform/intel-mid/intel_mid_weak_decls.h b/arch/x86/platform/intel-mid/intel_mid_weak_decls.h index 420685fc..abff38e 100644 --- a/arch/x86/platform/intel-mid/intel_mid_weak_decls.h +++ b/arch/x86/platform/intel-mid/intel_mid_weak_decls.h @@ -13,6 +13,5 @@ /* __attribute__((weak)) makes these declarations overridable */ extern struct devs_id __initconst device_ids[] __attribute__((weak)); -extern void intel_mid_reboot(void) __attribute__((weak)); extern void intel_mid_power_off(void) __attribute__((weak)); extern unsigned long __init intel_mid_calibrate_tsc(void) __attribute__((weak)); diff --git a/arch/x86/platform/intel-mid/mfld.c b/arch/x86/platform/intel-mid/mfld.c index 180735c..b188a0c 100644 --- a/arch/x86/platform/intel-mid/mfld.c +++ b/arch/x86/platform/intel-mid/mfld.c @@ -87,15 +87,6 @@ void intel_mid_power_off(void) mfld_power_off(); } -void intel_mid_reboot(void) -{ - if (intel_scu_ipc_medfw_upgrade()) { - pr_debug("intel_scu_ipc: IFWI upgrade failed...\n"); - BUG(); - } - intel_scu_ipc_simple_command(IPCMSG_COLD_BOOT, 0); -} - unsigned long __init intel_mid_calibrate_tsc(void) { unsigned long flags, fast_calibrate; diff --git a/arch/x86/platform/intel-mid/mrst.c b/arch/x86/platform/intel-mid/mrst.c index 70df7c4..22db8fb 100644 --- a/arch/x86/platform/intel-mid/mrst.c +++ b/arch/x86/platform/intel-mid/mrst.c @@ -41,15 +41,6 @@ void intel_mid_power_off(void) intel_scu_ipc_simple_command(IPCMSG_COLD_RESET, 1); } -void intel_mid_reboot(void) -{ - if (intel_scu_ipc_medfw_upgrade()) { - pr_debug("intel_scu_ipc: IFWI upgrade failed...\n"); - BUG(); - } - intel_scu_ipc_simple_command(IPCMSG_COLD_RESET, 0); -} - unsigned long __init intel_mid_calibrate_tsc(void) { unsigned long flags, fast_calibrate; -- 2.7.4