diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ec/google/wilco/Makefile.inc | 2 | ||||
-rw-r--r-- | src/ec/google/wilco/chip.c | 80 | ||||
-rw-r--r-- | src/ec/google/wilco/chip.h | 26 |
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 */ |