diff options
author | Duncan Laurie <dlaurie@google.com> | 2018-10-15 13:45:29 -0700 |
---|---|---|
committer | Duncan Laurie <dlaurie@chromium.org> | 2018-10-31 18:30:20 +0000 |
commit | ea98b40efe0ae6d514ebc1d797e564abe79ea34d (patch) | |
tree | 69024e8baf95f15c09950561e9181baca0305135 /src/ec/google/wilco | |
parent | 3fbe1949b1bed2dfc58d92b01368b308ebacef04 (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>
Diffstat (limited to 'src/ec/google/wilco')
-rw-r--r-- | src/ec/google/wilco/Makefile.inc | 1 | ||||
-rw-r--r-- | src/ec/google/wilco/bootblock.c | 52 | ||||
-rw-r--r-- | src/ec/google/wilco/bootblock.h | 29 |
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 */ |