From 57ee2fd875c689706c70338e073acefb806787e7 Mon Sep 17 00:00:00 2001 From: Vadim Bendebury Date: Thu, 1 May 2014 19:30:46 -0700 Subject: [PATCH] Prepare Spansion driver for use in CBFS wrapper Since the same driver is going to be used at all coreboot stages, it can not use malloc() anymore. Replace it with static allocation of the driver container structure. The read interface is changed to spi_flash_cmd_read_slow(), because of the problems with spi_flash_cmd_read_fast() implementation. In fact there is no performance difference in the way the two interface functions are implemented. BUG=chrome-os-partner:27784 TEST=manual . with all patches applied coreboot proceeds to attempting to load the payload. Change-Id: I1c7beedce7747bc89ab865fd844b568ad50d2dae Signed-off-by: Vadim Bendebury Reviewed-on: https://chromium-review.googlesource.com/197931 Reviewed-by: Aaron Durbin Reviewed-by: David Hendricks --- src/drivers/spi/spansion.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/drivers/spi/spansion.c b/src/drivers/spi/spansion.c index 126b14cda6..2640a3d2d8 100644 --- a/src/drivers/spi/spansion.c +++ b/src/drivers/spi/spansion.c @@ -207,6 +207,8 @@ static int spansion_erase(struct spi_flash *flash, u32 offset, size_t len) return spi_flash_cmd_erase(flash, CMD_S25FLXX_SE, offset, len); } +static struct spansion_spi_flash spsn_flash; + struct spi_flash *spi_flash_probe_spansion(struct spi_slave *spi, u8 *idcode) { const struct spansion_spi_flash_params *params; @@ -230,11 +232,7 @@ struct spi_flash *spi_flash_probe_spansion(struct spi_slave *spi, u8 *idcode) return NULL; } - spsn = malloc(sizeof(struct spansion_spi_flash)); - if (!spsn) { - printk(BIOS_WARNING, "SF: Failed to allocate memory\n"); - return NULL; - } + spsn = &spsn_flash; spsn->params = params; spsn->flash.spi = spi; @@ -242,7 +240,7 @@ struct spi_flash *spi_flash_probe_spansion(struct spi_slave *spi, u8 *idcode) spsn->flash.write = spansion_write; spsn->flash.erase = spansion_erase; - spsn->flash.read = spi_flash_cmd_read_fast; + spsn->flash.read = spi_flash_cmd_read_slow; spsn->flash.sector_size = params->page_size * params->pages_per_sector; spsn->flash.size = spsn->flash.sector_size * params->nr_sectors;