[coreboot-gerrit] Patch set updated for coreboot: a28ce6b cbfs: support concurrent media channels properly

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Thu Mar 26 00:33:22 CET 2015


Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/8897

-gerrit

commit a28ce6b1808ef258c41f68d0af8042e072099718
Author: Vadim Bendebury <vbendeb at chromium.org>
Date:   Mon Sep 22 17:25:37 2014 -0700

    cbfs: support concurrent media channels properly
    
    Coreboot generic CBFS media API does not support
    multiple media access instances, but it should.
    
    With this fix the CBFS context (memory cache for
    SPI accesses) is shared among all open media access
    streams. A better memory management scheme might be
    required, but for now this fix allows to support
    booting deptcharge and accessing VPD through two
    independent CBFS media streams.
    
    BUG=chrome-os-partner:32152
    TEST=no exception is thrown when the second stream
         is opened
    
    Change-Id: I62889089b4832c9e9760ef24ecc517220d8f3ec4
    Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
    Original-Commit-Id: 691f9794805d04beff349f1bc60ac9d7530d7cbf
    Original-Change-Id: Ib9d9d1f5209c2e515a95d7acbf4a8ac1255d3f8a
    Original-Signed-off-by: Vadim Bendebury <vbendeb at chromium.org>
    Original-Reviewed-on: https://chromium-review.googlesource.com/219441
    Original-Reviewed-by: Aaron Durbin <adurbin at chromium.org>
---
 src/lib/cbfs_spi.c | 26 +++++++++++++++-----------
 1 file changed, 15 insertions(+), 11 deletions(-)

diff --git a/src/lib/cbfs_spi.c b/src/lib/cbfs_spi.c
index 4471532..2b3728e 100644
--- a/src/lib/cbfs_spi.c
+++ b/src/lib/cbfs_spi.c
@@ -70,26 +70,30 @@ static void *cbfs_media_unmap(struct cbfs_media *media,
 	return cbfs_simple_buffer_unmap(&context->buffer, address);
 }
 
-int init_default_cbfs_media(struct cbfs_media *media)
+static int init_cbfs_media_context(void)
 {
-	if (spi_context.buffer.buffer)
-		return 0; /* It has been already initialized. */
+	if (!spi_context.spi_flash_info) {
 
-	spi_context.spi_flash_info = spi_flash_probe
-		(CONFIG_BOOT_MEDIA_SPI_BUS, 0);
-	if (!spi_context.spi_flash_info)
-		return -1;
+		spi_context.spi_flash_info = spi_flash_probe
+			(CONFIG_BOOT_MEDIA_SPI_BUS, 0);
 
-	spi_context.buffer.buffer = (void *)CONFIG_CBFS_CACHE_ADDRESS;
-	spi_context.buffer.size = CONFIG_CBFS_CACHE_SIZE;
+		if (!spi_context.spi_flash_info)
+			return -1;
 
-	media->context = &spi_context;
+		spi_context.buffer.buffer = (void *)CONFIG_CBFS_CACHE_ADDRESS;
+		spi_context.buffer.size = CONFIG_CBFS_CACHE_SIZE;
+	}
+	return 0;
 
+}
+int init_default_cbfs_media(struct cbfs_media *media)
+{
+	media->context = &spi_context;
 	media->open = cbfs_media_open;
 	media->close = cbfs_media_close;
 	media->read = cbfs_media_read;
 	media->map = cbfs_media_map;
 	media->unmap = cbfs_media_unmap;
 
-	return 0;
+	return init_cbfs_media_context();
 }



More information about the coreboot-gerrit mailing list