[coreboot] New patch to review for coreboot: 7c8cf66 libpayload: Allow using CBFS functions on images in RAM

Patrick Georgi (patrick@georgi-clan.de) gerrit at coreboot.org
Wed Jan 18 13:33:18 CET 2012


Patrick Georgi (patrick at georgi-clan.de) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/550

-gerrit

commit 7c8cf667e1f1eb785d6bcf1a94b346c1a5cc00d5
Author: Patrick Georgi <patrick.georgi at secunet.com>
Date:   Tue Jan 17 15:52:05 2012 +0100

    libpayload: Allow using CBFS functions on images in RAM
    
    Two new functions allow switching the CBFS functions from using RAM
    or ROM, with ROM as default.
    
    Change-Id: I04d67ad622d25c5728ae9a63f5b8a3dc9bbacce6
    Signed-off-by: Patrick Georgi <patrick.georgi at secunet.com>
---
 payloads/libpayload/include/cbfs.h |    2 ++
 payloads/libpayload/libcbfs/cbfs.c |   31 +++++++++++++++++++++++++++----
 2 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/payloads/libpayload/include/cbfs.h b/payloads/libpayload/include/cbfs.h
index 681caeb..8b8b024 100644
--- a/payloads/libpayload/include/cbfs.h
+++ b/payloads/libpayload/include/cbfs.h
@@ -1,2 +1,4 @@
 #include <arch/types.h>
 #include "cbfs_core.h"
+void setup_cbfs_from_ram(void* start, uint32_t size);
+void setup_cbfs_from_flash(void);
diff --git a/payloads/libpayload/libcbfs/cbfs.c b/payloads/libpayload/libcbfs/cbfs.c
index c7173e0..7da2d58 100644
--- a/payloads/libpayload/libcbfs/cbfs.c
+++ b/payloads/libpayload/libcbfs/cbfs.c
@@ -40,18 +40,18 @@
 #define ERROR(x...) printf(x)
 #define LOG(x...)
 
-uint32_t host_virt_to_phys(void *addr);
-void *host_phys_to_virt(uint32_t addr);
+static uint32_t host_virt_to_phys(void *addr);
+static void *host_phys_to_virt(uint32_t addr);
 
 uint32_t romstart(void);
 uint32_t romend(void);
 
 #include <arch/virtual.h>
-uint32_t host_virt_to_phys(void *addr) {
+static uint32_t host_virt_to_phys(void *addr) {
 	return virt_to_phys(addr);
 }
 
-void *host_phys_to_virt(uint32_t addr) {
+static void *host_phys_to_virt(uint32_t addr) {
 	return phys_to_virt(addr);
 }
 #undef virt_to_phys
@@ -76,3 +76,26 @@ uint32_t romend(void)
 
 #include "cbfs_core.c"
 
+static uint32_t ram_cbfs_offset;
+
+static uint32_t ram_virt_to_phys(void *addr) {
+	return (uint32_t)addr - ram_cbfs_offset;
+}
+
+static void *ram_phys_to_virt(uint32_t addr) {
+	return (void*)addr + ram_cbfs_offset;
+}
+
+void setup_cbfs_from_ram(void* start, uint32_t size)
+{
+	/* assumes rollover */
+	ram_cbfs_offset = (uint32_t)start + size;
+	virt_to_phys = ram_virt_to_phys;
+	phys_to_virt = ram_phys_to_virt;
+}
+
+void setup_cbfs_from_flash()
+{
+	virt_to_phys = host_virt_to_phys;
+	phys_to_virt = host_phys_to_virt;
+}




More information about the coreboot mailing list