summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDuncan Laurie <dlaurie@google.com>2018-10-15 13:45:29 -0700
committerDuncan Laurie <dlaurie@chromium.org>2018-10-31 18:30:20 +0000
commitea98b40efe0ae6d514ebc1d797e564abe79ea34d (patch)
tree69024e8baf95f15c09950561e9181baca0305135
parent3fbe1949b1bed2dfc58d92b01368b308ebacef04 (diff)
ec/google/wilco: Add a bootblock function for early init
Add a function for use in bootblock stage that performs early init of the EC, in particular setting it up for UART passthrough so a legacy serial port can be used by the host. This needs to be called by the mainboard that intends to use it in bootblock in order for the UART to be available in later stages. Some of the PNP style programming may look odd, but it is following the EC specification which is not entirely standard. This code has been tested on a board with this EC and it is functional. Change-Id: I9d6935a9fdf0d7290a94bf2ee565ef2a7c00ecc7 Signed-off-by: Duncan Laurie <dlaurie@google.com> Reviewed-on: https://review.coreboot.org/29121 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
-rw-r--r--src/ec/google/wilco/Makefile.inc1
-rw-r--r--src/ec/google/wilco/bootblock.c52
-rw-r--r--src/ec/google/wilco/bootblock.h29
3 files changed, 82 insertions, 0 deletions
diff --git a/src/ec/google/wilco/Makefile.inc b/src/ec/google/wilco/Makefile.inc
index 33eefd555b..2e1c0d4c7c 100644
--- a/src/ec/google/wilco/Makefile.inc
+++ b/src/ec/google/wilco/Makefile.inc
@@ -1,5 +1,6 @@
ifeq ($(CONFIG_EC_GOOGLE_WILCO),y)
+bootblock-y += bootblock.c
ramstage-y += chip.c commands.c mailbox.c
smm-y += commands.c mailbox.c smihandler.c
diff --git a/src/ec/google/wilco/bootblock.c b/src/ec/google/wilco/bootblock.c
new file mode 100644
index 0000000000..dadc5c9a77
--- /dev/null
+++ b/src/ec/google/wilco/bootblock.c
@@ -0,0 +1,52 @@
+/*
+ * 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 <arch/io.h>
+#include <device/pnp_def.h>
+#include <swab.h>
+
+#include "bootblock.h"
+
+#define PNP_CFG_IDX 0x2e
+#define PNP_LDN_SERIAL 0x0d
+
+static void pnp_enter_conf_state(pnp_devfn_t dev)
+{
+ outb(0x55, PNP_CFG_IDX);
+ outb(0x55, PNP_CFG_IDX);
+}
+
+static void pnp_exit_conf_state(pnp_devfn_t dev)
+{
+ outb(0xaa, PNP_CFG_IDX);
+}
+
+static void wilco_ec_serial_init(void)
+{
+ pnp_devfn_t dev = PNP_DEV(PNP_CFG_IDX, PNP_LDN_SERIAL);
+
+ pnp_enter_conf_state(dev);
+ pnp_set_logical_device(dev);
+ pnp_set_enable(dev, 1);
+ pnp_set_iobase(dev, PNP_IDX_IO1, cpu_to_be16(CONFIG_TTYS0_BASE));
+ pnp_write_config(dev, PNP_IDX_IO0, 1);
+ pnp_exit_conf_state(dev);
+}
+
+void wilco_ec_early_init(void)
+{
+ if (IS_ENABLED(CONFIG_DRIVERS_UART_8250IO))
+ wilco_ec_serial_init();
+}
diff --git a/src/ec/google/wilco/bootblock.h b/src/ec/google/wilco/bootblock.h
new file mode 100644
index 0000000000..8130dd76b7
--- /dev/null
+++ b/src/ec/google/wilco/bootblock.h
@@ -0,0 +1,29 @@
+/*
+ * 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_BOOTBLOCK_H
+#define EC_GOOGLE_WILCO_BOOTBLOCK_H
+
+/**
+ * wilco_ec_early_init
+ *
+ * This function performs early initialization of the EC:
+ *
+ * - Enable EC UART passthru for COM1 if serial console support
+ * is enabled with CONFIG_DRIVERS_UART_8250IO.
+ */
+void wilco_ec_early_init(void);
+
+#endif /* EC_GOOGLE_WILCO_BOOTBLOCK_H */