[coreboot-gerrit] New patch to review for coreboot: drivers/spi: remove unconditional RW boot device initialization

Aaron Durbin (adurbin@chromium.org) gerrit at coreboot.org
Tue Aug 23 15:51:06 CEST 2016


Aaron Durbin (adurbin at chromium.org) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/16300

-gerrit

commit 5c3d65c38d23de18a2f1e0b1df2d2f0357c35820
Author: Aaron Durbin <adurbin at chromium.org>
Date:   Tue Aug 23 08:45:55 2016 -0500

    drivers/spi: remove unconditional RW boot device initialization
    
    The SPI drivers for the various chipsets are not consistent in
    their handling of when they are accessible. Coupled with the
    unknown ordering of boot_device_init() being called this can
    lead to unexpected behavior (probing failures or hangs). Instead
    move the act of initializng the SPI flash boot device to when
    the various infrastructure requires its usage when it calls
    boot_device_rw(). Those platforms utilizing the RW boot device
    would need to ensure their SPI drivers are functional and
    ready when the call happens.
    
    This further removes any other systems failing to boot as
    reported in https://ticket.coreboot.org/issues/67.
    
    BUG=chrome-os-partner:56151
    
    Change-Id: Ib3bddf5e26bf5322f3dd20345eeef6bee40f0f66
    Signed-off-by: Aaron Durbin <adurbin at chromium.org>
---
 src/drivers/spi/boot_device_rw_nommap.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/drivers/spi/boot_device_rw_nommap.c b/src/drivers/spi/boot_device_rw_nommap.c
index bf15e99..32ded9c 100644
--- a/src/drivers/spi/boot_device_rw_nommap.c
+++ b/src/drivers/spi/boot_device_rw_nommap.c
@@ -70,7 +70,7 @@ static const struct region_device_ops spi_ops = {
 static const struct region_device spi_rw =
 	REGION_DEV_INIT(&spi_ops, 0, CONFIG_ROM_SIZE);
 
-void boot_device_init(void)
+static void boot_device_rw_init(void)
 {
 	const int bus = CONFIG_BOOT_DEVICE_SPI_FLASH_BUS;
 	const int cs = 0;
@@ -86,6 +86,9 @@ void boot_device_init(void)
 
 const struct region_device *boot_device_rw(void)
 {
+	/* Probe for the SPI flash device if not already done. */
+	boot_device_rw_init();
+
 	if (car_get_var(sfg) == NULL)
 		return NULL;
 



More information about the coreboot-gerrit mailing list