diff options
Diffstat (limited to 'src/soc/intel')
-rw-r--r-- | src/soc/intel/skylake/Makefile.inc | 3 | ||||
-rw-r--r-- | src/soc/intel/skylake/flash_controller.c | 22 |
2 files changed, 14 insertions, 11 deletions
diff --git a/src/soc/intel/skylake/Makefile.inc b/src/soc/intel/skylake/Makefile.inc index 98f2718fb7..b92eab317f 100644 --- a/src/soc/intel/skylake/Makefile.inc +++ b/src/soc/intel/skylake/Makefile.inc @@ -17,6 +17,7 @@ bootblock-y += bootblock/pch.c bootblock-y += bootblock/report_platform.c bootblock-y += bootblock/smbus.c bootblock-y += bootblock/systemagent.c +bootblock-y += flash_controller.c bootblock-$(CONFIG_UART_DEBUG) += bootblock/uart.c bootblock-$(CONFIG_UART_DEBUG) += uart_debug.c bootblock-y += gpio.c @@ -26,6 +27,8 @@ bootblock-y += pcr.c bootblock-y += pmutil.c bootblock-y += tsc_freq.c +verstage-y += flash_controller.c +verstage-y += pch.c verstage-$(CONFIG_UART_DEBUG) += uart_debug.c romstage-y += flash_controller.c diff --git a/src/soc/intel/skylake/flash_controller.c b/src/soc/intel/skylake/flash_controller.c index 9c2378ba3f..6601e6caa3 100644 --- a/src/soc/intel/skylake/flash_controller.c +++ b/src/soc/intel/skylake/flash_controller.c @@ -13,6 +13,7 @@ */ /* This file is derived from the flashrom project. */ +#include <arch/early_variables.h> #include <stdint.h> #include <stdlib.h> #include <string.h> @@ -341,15 +342,17 @@ int pch_hwseq_read_status(struct spi_flash *flash, u8 *reg) return 0; } +static struct spi_slave boot_spi CAR_GLOBAL; +static struct spi_flash boot_flash CAR_GLOBAL; + static struct spi_flash *spi_flash_hwseq_probe(struct spi_slave *spi) { struct spi_flash *flash; - flash = malloc(sizeof(*flash)); - if (!flash) { - printk(BIOS_WARNING, "SF: Failed to allocate memory\n"); - return NULL; - } + flash = car_get_var_ptr(&boot_flash); + + /* Ensure writes can take place to the flash. */ + spi_init(); flash->spi = spi; flash->name = "Opaque HW-sequencing"; @@ -369,14 +372,11 @@ static struct spi_flash *spi_flash_hwseq_probe(struct spi_slave *spi) struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs) { - struct spi_slave *slave = malloc(sizeof(*slave)); - - if (!slave) { - printk(BIOS_DEBUG, "PCH SPI: Bad allocation\n"); + /* This is special hardware. We expect bus 0 and CS line 0 here. */ + if ((bus != 0) || (cs != 0)) return NULL; - } - memset(slave, 0, sizeof(*slave)); + struct spi_slave *slave = car_get_var_ptr(&boot_spi); slave->bus = bus; slave->cs = cs; |