[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