diff options
author | Patrick Georgi <patrick.georgi@secunet.com> | 2012-01-17 15:52:05 +0100 |
---|---|---|
committer | Patrick Georgi <patrick@georgi-clan.de> | 2012-01-26 12:27:24 +0100 |
commit | 409d17dee7b407729a29c067ab064c78be18841e (patch) | |
tree | 81ae00cef0ab7c2c57d6d323ec831266b6aad4d8 /payloads | |
parent | e8689ed974992b35aede9cd831b428ac37d9be76 (diff) |
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')
-rw-r--r-- | payloads/libpayload/include/cbfs.h | 2 | ||||
-rw-r--r-- | 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 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; +} |