summaryrefslogtreecommitdiff
path: root/src/ec/google
diff options
context:
space:
mode:
authorDuncan Laurie <dlaurie@google.com>2018-10-15 02:40:21 +0000
committerDuncan Laurie <dlaurie@chromium.org>2018-10-31 18:29:36 +0000
commitb29e2d58f20619311110cf345545eaff39207351 (patch)
tree7ca284b62288470d5bf38f2c8ff1d590394c8519 /src/ec/google
parent2f954921b822512351410b6256fb32ea20faa3f5 (diff)
downloadcoreboot-b29e2d58f20619311110cf345545eaff39207351.tar.xz
ec/google/wilco: Add devicetree chip infrastructure
Add a chip_operations structure for Wilco EC and hook it into the device tree so it can be initialized at boot. Reserve the device resources specified in Kconfig, which will also create the device IO windows if they have not been created in bootblock. If the IO windows already exist (becauase they were specified in the mainboard devicetree.cb) then this will find the existing entry instead. During device init stage prepare the keyboard for use, which is required for it to be functional in firmware and OS with this EC. Also send a command to the EC telling it to pass the power button through to the host for processing. Change-Id: I0adb01cf394f939f4a28aeb47fe4d0bcda5957d9 Signed-off-by: Duncan Laurie <dlaurie@google.com> Reviewed-on: https://review.coreboot.org/29117 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/ec/google')
-rw-r--r--src/ec/google/wilco/Makefile.inc2
-rw-r--r--src/ec/google/wilco/chip.c80
-rw-r--r--src/ec/google/wilco/chip.h26
3 files changed, 107 insertions, 1 deletions
diff --git a/src/ec/google/wilco/Makefile.inc b/src/ec/google/wilco/Makefile.inc
index 68172e3abe..c011ebf0e6 100644
--- a/src/ec/google/wilco/Makefile.inc
+++ b/src/ec/google/wilco/Makefile.inc
@@ -1,5 +1,5 @@
ifeq ($(CONFIG_EC_GOOGLE_WILCO),y)
-ramstage-y += commands.c mailbox.c
+ramstage-y += chip.c commands.c mailbox.c
endif
diff --git a/src/ec/google/wilco/chip.c b/src/ec/google/wilco/chip.c
new file mode 100644
index 0000000000..cc9f030957
--- /dev/null
+++ b/src/ec/google/wilco/chip.c
@@ -0,0 +1,80 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2018 Google LLC
+ *
+ * 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 <device/pnp.h>
+#include <pc80/keyboard.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#include "commands.h"
+#include "ec.h"
+#include "chip.h"
+
+static void wilco_ec_init(struct device *dev)
+{
+ if (!dev->enabled)
+ return;
+
+ /* Print EC firmware information */
+ wilco_ec_print_all_info();
+
+ /* Initialize keyboard, ignore emulated PS/2 mouse */
+ pc_keyboard_init(NO_AUX_DEVICE);
+
+ /* Direct power button to the host for processing */
+ wilco_ec_send(KB_POWER_BUTTON_TO_HOST, 1);
+}
+
+static void wilco_ec_resource(struct device *dev, int index,
+ size_t base, size_t size)
+{
+ struct resource *res = new_resource(dev, index);
+ res->flags = IORESOURCE_IO | IORESOURCE_ASSIGNED | IORESOURCE_FIXED;
+ res->base = base;
+ res->size = size;
+}
+
+static void wilco_ec_read_resources(struct device *dev)
+{
+ /* ACPI command and data regions */
+ wilco_ec_resource(dev, 0, CONFIG_EC_BASE_ACPI_DATA, 8);
+
+ /* Host command and data regions */
+ wilco_ec_resource(dev, 1, CONFIG_EC_BASE_HOST_DATA, 8);
+
+ /* Packet region */
+ wilco_ec_resource(dev, 2, CONFIG_EC_BASE_PACKET, 16);
+}
+
+static struct device_operations ops = {
+ .init = wilco_ec_init,
+ .read_resources = wilco_ec_read_resources,
+ .enable_resources = DEVICE_NOOP,
+ .set_resources = DEVICE_NOOP,
+};
+
+static struct pnp_info info[] = {
+ { NULL, 0, 0, 0, }
+};
+
+static void wilco_ec_enable_dev(struct device *dev)
+{
+ pnp_enable_devices(dev, &ops, ARRAY_SIZE(info), info);
+}
+
+struct chip_operations ec_google_wilco_ops = {
+ CHIP_NAME("Google Wilco EC")
+ .enable_dev = wilco_ec_enable_dev,
+};
diff --git a/src/ec/google/wilco/chip.h b/src/ec/google/wilco/chip.h
new file mode 100644
index 0000000000..9b02ee346d
--- /dev/null
+++ b/src/ec/google/wilco/chip.h
@@ -0,0 +1,26 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2018 Google LLC
+ *
+ * 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.
+ */
+
+#ifndef EC_GOOGLE_WILCO_CHIP_H
+#define EC_GOOGLE_WILCO_CHIP_H
+
+#include <device/device.h>
+
+extern struct chip_operations ec_google_wilco_ops;
+
+struct ec_google_wilco_config {
+};
+
+#endif /* EC_GOOGLE_WILCO_CHIP_H */