From cd2afc0df034670a83479aded514b22b99124cf5 Mon Sep 17 00:00:00 2001 From: Furquan Shaikh Date: Tue, 15 Nov 2016 20:33:29 -0800 Subject: google/chromeec: Add common infrastructure for boot-mode switches Instead of defining the same functions for reading/clearing boot-mode switches from EC in every mainboard, add a common infrastructure to enable common functions for handling boot-mode switches if GOOGLE_CHROMEEC is being used. Only boards that were not moved to this new infrastructure are those that do not use GOOGLE_CHROMEEC or which rely on some mainboard specific mechanism for reading boot-mode switches. BUG=None BRANCH=None TEST=abuild compiles all boards successfully with and without ChromeOS option. Change-Id: I267aadea9e616464563df04b51a668b877f0d578 Signed-off-by: Furquan Shaikh Reviewed-on: https://review.coreboot.org/17449 Tested-by: build bot (Jenkins) Reviewed-by: Julius Werner --- src/ec/google/chromeec/switches.c | 59 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/ec/google/chromeec/switches.c (limited to 'src/ec/google/chromeec/switches.c') diff --git a/src/ec/google/chromeec/switches.c b/src/ec/google/chromeec/switches.c new file mode 100644 index 0000000000..74f72105d0 --- /dev/null +++ b/src/ec/google/chromeec/switches.c @@ -0,0 +1,59 @@ +/* + * This file is part of the coreboot project. + * + * Copyright 2016 Google Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include + +#if IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC_LPC) +int get_lid_switch(void) +{ + if (!IS_ENABLED(CONFIG_LID_SWITCH)) + return -1; + + return !!(google_chromeec_get_switches() & EC_SWITCH_LID_OPEN); +} +#endif + +int get_recovery_mode_switch(void) +{ + /* Check for dedicated recovery switch first. */ + if (IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC_LPC) && + (google_chromeec_get_switches() & EC_SWITCH_DEDICATED_RECOVERY)) + return 1; + + /* Check if the EC has posted the keyboard recovery/fastboot event. */ + return !!(google_chromeec_get_events_b() & + (EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_RECOVERY) | + EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_FASTBOOT))); +} + +int get_recovery_mode_retrain_switch(void) +{ + /* + * Check if the EC has posted the keyboard recovery event with memory + * retrain. + */ + return !!(google_chromeec_get_events_b() & + EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_RECOVERY_HW_REINIT)); +} + +int clear_recovery_mode_switch(void) +{ + /* Clear all host event bits requesting recovery mode. */ + return google_chromeec_clear_events_b( + EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_RECOVERY) | + EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_RECOVERY_HW_REINIT) | + EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_FASTBOOT)); +} -- cgit v1.2.3