/* SPDX-License-Identifier: GPL-2.0-only */ #include <acpi/acpi.h> #include <baseboard/variants.h> #include <device/device.h> #include <ec/ec.h> #include <soc/pci_devs.h> #include <soc/nhlt.h> #include <variant/gpio.h> static void mainboard_init(struct device *dev) { mainboard_ec_init(); } static unsigned long mainboard_write_acpi_tables(const struct device *device, unsigned long current, acpi_rsdp_t *rsdp) { uintptr_t start_addr; uintptr_t end_addr; struct nhlt *nhlt; const char *oem_id = NULL; const char *oem_table_id = NULL; uint32_t oem_revision = 0; start_addr = current; nhlt = nhlt_init(); if (nhlt == NULL) return start_addr; variant_nhlt_init(nhlt); variant_nhlt_oem_overrides(&oem_id, &oem_table_id, &oem_revision); end_addr = nhlt_soc_serialize_oem_overrides(nhlt, start_addr, oem_id, oem_table_id, oem_revision); if (end_addr != start_addr) acpi_add_table(rsdp, (void *)start_addr); return end_addr; } static void mainboard_enable(struct device *dev) { dev->ops->init = mainboard_init; dev->ops->write_acpi_tables = mainboard_write_acpi_tables; } static void mainboard_chip_init(void *chip_info) { const struct pad_config *pads; size_t num; pads = variant_gpio_table(&num); gpio_configure_pads(pads, num); pads = variant_sku_gpio_table(&num); gpio_configure_pads(pads, num); } void __weak variant_final(void) { /* nop */ } static void mainboard_final(void *chip_info) { variant_final(); } struct chip_operations mainboard_ops = { .init = mainboard_chip_init, .enable_dev = mainboard_enable, .final = mainboard_final };