summaryrefslogtreecommitdiff
path: root/payloads/libpayload
diff options
context:
space:
mode:
authorPatrick Georgi <patrick.georgi@secunet.com>2012-01-17 15:52:05 +0100
committerPatrick Georgi <patrick@georgi-clan.de>2012-01-26 12:27:24 +0100
commit409d17dee7b407729a29c067ab064c78be18841e (patch)
tree81ae00cef0ab7c2c57d6d323ec831266b6aad4d8 /payloads/libpayload
parente8689ed974992b35aede9cd831b428ac37d9be76 (diff)
downloadcoreboot-409d17dee7b407729a29c067ab064c78be18841e.tar.xz
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> Reviewed-on: http://review.coreboot.org/550 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Diffstat (limited to 'payloads/libpayload')
-rw-r--r--payloads/libpayload/include/cbfs.h2
-rw-r--r--payloads/libpayload/libcbfs/cbfs.c31
2 files changed, 29 insertions, 4 deletions
diff --git a/payloads/libpayload/include/cbfs.h b/payloads/libpayload/include/cbfs.h
index 681caeb493..8b8b0243ef 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 c7173e0cb3..7da2d58364 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;
+}