summaryrefslogtreecommitdiff
path: root/payloads/libpayload/libc/coreboot.c
diff options
context:
space:
mode:
authorNico Huber <nico.h@gmx.de>2020-07-18 16:15:42 +0200
committerPatrick Georgi <pgeorgi@google.com>2020-08-24 09:13:30 +0000
commitbea01e32b277682d273fa4a054f34cf725cb15b7 (patch)
tree3c94473ea766b8440fca31d9af932198ad0232ed /payloads/libpayload/libc/coreboot.c
parent12faea3095cbdb4f134442db1451487355368cf8 (diff)
libpayload: Cache physical location of CBMEM entries
In the presence of self-relocating payloads, it's safer to keep physical addresses in `libsysinfo`. This updates all the references to CBMEM entries that are not consumed inside libpayload code. Change-Id: I3be64c8be8b46d00b457eafd7f80a8ed8e604030 Signed-off-by: Nico Huber <nico.h@gmx.de> Reviewed-on: https://review.coreboot.org/c/coreboot/+/43580 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Diffstat (limited to 'payloads/libpayload/libc/coreboot.c')
-rw-r--r--payloads/libpayload/libc/coreboot.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/payloads/libpayload/libc/coreboot.c b/payloads/libpayload/libc/coreboot.c
index be2eebb56d..b34f2c582f 100644
--- a/payloads/libpayload/libc/coreboot.c
+++ b/payloads/libpayload/libc/coreboot.c
@@ -41,12 +41,6 @@
/* === Parsing code === */
/* This is the generic parsing code. */
-void *get_cbmem_ptr(unsigned char *ptr)
-{
- struct cb_cbmem_tab *const cbmem = (struct cb_cbmem_tab *)ptr;
- return phys_to_virt(cbmem->cbmem_tab);
-}
-
uintptr_t get_cbmem_addr(const void *const cbmem_tab_entry)
{
const struct cb_cbmem_tab *const cbmem = cbmem_tab_entry;
@@ -91,7 +85,7 @@ static void cb_parse_serial(void *ptr, struct sysinfo_t *info)
static void cb_parse_vboot_workbuf(unsigned char *ptr, struct sysinfo_t *info)
{
- info->vboot_workbuf = get_cbmem_ptr(ptr);
+ info->vboot_workbuf = get_cbmem_addr(ptr);
}
static void cb_parse_vbnv(unsigned char *ptr, struct sysinfo_t *info)
@@ -136,7 +130,7 @@ static void cb_parse_mac_addresses(unsigned char *ptr,
static void cb_parse_tstamp(unsigned char *ptr, struct sysinfo_t *info)
{
- info->tstamp_table = get_cbmem_ptr(ptr);
+ info->tstamp_table = get_cbmem_addr(ptr);
}
static void cb_parse_cbmem_cons(unsigned char *ptr, struct sysinfo_t *info)
@@ -146,7 +140,7 @@ static void cb_parse_cbmem_cons(unsigned char *ptr, struct sysinfo_t *info)
static void cb_parse_acpi_gnvs(unsigned char *ptr, struct sysinfo_t *info)
{
- info->acpi_gnvs = get_cbmem_ptr(ptr);
+ info->acpi_gnvs = get_cbmem_addr(ptr);
}
static void cb_parse_board_id(unsigned char *ptr, struct sysinfo_t *info)
@@ -197,7 +191,7 @@ static void cb_parse_string(unsigned char *ptr, char **info)
static void cb_parse_wifi_calibration(void *ptr, struct sysinfo_t *info)
{
- info->wifi_calibration = get_cbmem_ptr(ptr);
+ info->wifi_calibration = get_cbmem_addr(ptr);
}
static void cb_parse_ramoops(void *ptr, struct sysinfo_t *info)
@@ -238,12 +232,12 @@ static void cb_parse_boot_media_params(unsigned char *ptr,
static void cb_parse_vpd(void *ptr, struct sysinfo_t *info)
{
- info->chromeos_vpd = get_cbmem_ptr(ptr);
+ info->chromeos_vpd = get_cbmem_addr(ptr);
}
static void cb_parse_fmap_cache(void *ptr, struct sysinfo_t *info)
{
- info->fmap_cache = get_cbmem_ptr(ptr);
+ info->fmap_cache = get_cbmem_addr(ptr);
}
#if CONFIG(LP_TIMER_RDTSC)