glados: Implement Chrome OS specific handlers

Implement the required Chrome OS specific handlers to read the
recovery mode, clear the recovery mode, read the lid switch state,
and read the write protect state using the appropriate methods.

Also update the Chrome OS ACPI device to use the GPIO definitions
that are exposed now by the SOC.

BUG=chrome-os-partner:43515
BRANCH=none
TEST=build and boot on glados and successfully enter recovery mode

Original-Change-Id: Ifd51c11dc71b7d091615c29a618454a6a2cc33d7
Original-Signed-off-by: Duncan Laurie <dlaurie@chromium.org>
Original-Reviewed-on: https://chromium-review.googlesource.com/293515
Original-Reviewed-by: Aaron Durbin <adurbin@chromium.org>

Change-Id: Ia6ef83a80b9729654bc87bb81bd8d7c1b01d7f42
Signed-off-by: Duncan Laurie <dlaurie@chromium.org>
Reviewed-on: http://review.coreboot.org/11281
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
Duncan Laurie 2015-08-13 12:54:27 -07:00 committed by Aaron Durbin
parent 699c788837
commit c328191728
2 changed files with 31 additions and 7 deletions

View File

@ -17,7 +17,11 @@
* Foundation, Inc.
*/
Name (OIPG, Package() {
Package () { 0x0001, 0, 0xFFFFFFFF, "INT344B:00" }, // no recovery button
Package () { 0x0003, 1, 71, "INT344B:00" }, // firmware write protect
#include <soc/gpio.h>
Name (OIPG, Package () {
/* No physical recovery GPIO. */
Package () { 0x0001, 0, 0xFFFFFFFF, "INT344B:00" },
/* Firmware write protect GPIO. */
Package () { 0x0003, 1, GPP_C23, "INT344B:00" },
})

View File

@ -23,10 +23,14 @@
#include <device/device.h>
#include <device/pci.h>
#include <rules.h>
#include <gpio.h>
#include <soc/gpio.h>
#include <string.h>
#include <ec/google/chromeec/ec.h>
#include <vendorcode/google/chromeos/chromeos.h>
#include "ec.h"
#if ENV_RAMSTAGE
#include <boot/coreboot_tables.h>
@ -55,20 +59,36 @@ void fill_lb_gpios(struct lb_gpios *gpios)
int get_lid_switch(void)
{
return 1;
/* Read lid switch state from the EC. */
return !!(google_chromeec_get_switches() & EC_SWITCH_LID_OPEN);
}
/* The dev-switch is virtual */
int get_developer_mode_switch(void)
{
/* No physical developer mode switch. */
return 0;
}
int get_recovery_mode_switch(void)
{
return 0;
/* Check for dedicated recovery switch first. */
if (google_chromeec_get_switches() & EC_SWITCH_DEDICATED_RECOVERY)
return 1;
/* Otherwise check if the EC has posted the keyboard recovery event. */
return !!(google_chromeec_get_events_b() &
EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_RECOVERY));
}
int clear_recovery_mode_switch(void)
{
/* Clear keyboard recovery event. */
return google_chromeec_clear_events_b(
EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_RECOVERY));
}
int get_write_protect_state(void)
{
return 0;
/* Read PCH_WP GPIO. */
return gpio_get(GPP_C23);
}