Patrick Georgi (patrick@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@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@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; +}