summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--payloads/libpayload/arch/x86/coreboot.c3
-rw-r--r--payloads/libpayload/include/coreboot_tables.h2
-rw-r--r--payloads/libpayload/libc/coreboot.c24
3 files changed, 15 insertions, 14 deletions
diff --git a/payloads/libpayload/arch/x86/coreboot.c b/payloads/libpayload/arch/x86/coreboot.c
index 3a9eb1a7be..07adee8917 100644
--- a/payloads/libpayload/arch/x86/coreboot.c
+++ b/payloads/libpayload/arch/x86/coreboot.c
@@ -50,8 +50,7 @@ static void cb_parse_x86_rom_var_mtrr(void *ptr, struct sysinfo_t *info)
static void cb_parse_mrc_cache(void *ptr, struct sysinfo_t *info)
{
- struct cb_cbmem_tab *const cbmem = (struct cb_cbmem_tab *)ptr;
- info->mrc_cache = phys_to_virt(cbmem->cbmem_tab);
+ info->mrc_cache = get_cbmem_ptr(ptr);
}
int cb_parse_arch_specific(struct cb_record *rec, struct sysinfo_t *info)
diff --git a/payloads/libpayload/include/coreboot_tables.h b/payloads/libpayload/include/coreboot_tables.h
index c24d6acfd6..188f4268c3 100644
--- a/payloads/libpayload/include/coreboot_tables.h
+++ b/payloads/libpayload/include/coreboot_tables.h
@@ -395,4 +395,6 @@ static inline const char *cb_mb_part_string(const struct cb_mainboard *cbm)
(void *)(((u8 *) (_rec)) + sizeof(*(_rec)) \
+ (sizeof((_rec)->map[0]) * (_idx)))
+/* Helper functions */
+void *get_cbmem_ptr(unsigned char *ptr);
#endif
diff --git a/payloads/libpayload/libc/coreboot.c b/payloads/libpayload/libc/coreboot.c
index e14b144ee4..2ff2090c19 100644
--- a/payloads/libpayload/libc/coreboot.c
+++ b/payloads/libpayload/libc/coreboot.c
@@ -42,6 +42,12 @@
/* === 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);
+}
+
static void cb_parse_memory(void *ptr, struct sysinfo_t *info)
{
struct cb_memory *mem = ptr;
@@ -128,20 +134,17 @@ static void cb_parse_mac_addresses(unsigned char *ptr,
static void cb_parse_tstamp(unsigned char *ptr, struct sysinfo_t *info)
{
- struct cb_cbmem_tab *const cbmem = (struct cb_cbmem_tab *)ptr;
- info->tstamp_table = phys_to_virt(cbmem->cbmem_tab);
+ info->tstamp_table = get_cbmem_ptr(ptr);
}
static void cb_parse_cbmem_cons(unsigned char *ptr, struct sysinfo_t *info)
{
- struct cb_cbmem_tab *const cbmem = (struct cb_cbmem_tab *)ptr;
- info->cbmem_cons = phys_to_virt(cbmem->cbmem_tab);
+ info->cbmem_cons = get_cbmem_ptr(ptr);
}
static void cb_parse_acpi_gnvs(unsigned char *ptr, struct sysinfo_t *info)
{
- struct cb_cbmem_tab *const cbmem = (struct cb_cbmem_tab *)ptr;
- info->acpi_gnvs = phys_to_virt(cbmem->cbmem_tab);
+ info->acpi_gnvs = get_cbmem_ptr(ptr);
}
static void cb_parse_board_id(unsigned char *ptr, struct sysinfo_t *info)
@@ -193,8 +196,7 @@ static void cb_parse_string(unsigned char *ptr, char **info)
static void cb_parse_wifi_calibration(void *ptr, struct sysinfo_t *info)
{
- struct cb_cbmem_tab *const cbmem = (struct cb_cbmem_tab *)ptr;
- info->wifi_calibration = phys_to_virt(cbmem->cbmem_tab);
+ info->wifi_calibration = get_cbmem_ptr(ptr);
}
static void cb_parse_ramoops(void *ptr, struct sysinfo_t *info)
@@ -235,14 +237,12 @@ static void cb_parse_boot_media_params(unsigned char *ptr,
static void cb_parse_vpd(void *ptr, struct sysinfo_t *info)
{
- struct cb_cbmem_tab *const cbmem = (struct cb_cbmem_tab *)ptr;
- info->chromeos_vpd = phys_to_virt(cbmem->cbmem_tab);
+ info->chromeos_vpd = get_cbmem_ptr(ptr);
}
static void cb_parse_fmap_cache(void *ptr, struct sysinfo_t *info)
{
- struct cb_cbmem_tab *const cbmem = (struct cb_cbmem_tab *)ptr;
- info->fmap_cache = phys_to_virt(cbmem->cbmem_tab);
+ info->fmap_cache = get_cbmem_ptr(ptr);
}
#if CONFIG(LP_TIMER_RDTSC)