Kyösti Mälkki (kyosti.malkki@gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/3906
-gerrit
commit bcf57efa5a7e45d16ee7b9a1f9984bb67aa85b38 Author: Kyösti Mälkki kyosti.malkki@gmail.com Date: Sun Jun 23 20:03:50 2013 +0300
Prefer get_cbmem_table() over set_cbmem_table()
First attempt to access CBMEM in ramstage resolves the location of CBMEM region.
Change-Id: I982b9abfcee57a7ea421c245dadb84342949efae Signed-off-by: Kyösti Mälkki kyosti.malkki@gmail.com --- src/lib/cbmem.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/src/lib/cbmem.c b/src/lib/cbmem.c index 1645096..aa60f8c 100644 --- a/src/lib/cbmem.c +++ b/src/lib/cbmem.c @@ -43,8 +43,8 @@ struct cbmem_entry { } __attribute__((packed));
#ifndef __PRE_RAM__ -uint64_t high_tables_base = 0; -uint64_t high_tables_size = 0; +static uint64_t bss_cbmem_base = 0; +static uint64_t bss_cbmem_size = 0; #endif
static void cbmem_locate_table(uint64_t *base, uint64_t *size) @@ -52,8 +52,10 @@ static void cbmem_locate_table(uint64_t *base, uint64_t *size) #ifdef __PRE_RAM__ get_cbmem_table(base, size); #else - *base = high_tables_base; - *size = high_tables_size; + if (!(bss_cbmem_base && bss_cbmem_size)) + get_cbmem_table(&bss_cbmem_base, &bss_cbmem_size); + *base = bss_cbmem_base; + *size = bss_cbmem_size; #endif }
@@ -67,12 +69,12 @@ struct cbmem_entry *get_cbmem_toc(void) #if !defined(__PRE_RAM__) void set_cbmem_table(uint64_t base, uint64_t size) { - if (base == high_tables_base && size == high_tables_size) + if (base == bss_cbmem_base && size == bss_cbmem_size) return;
printk(BIOS_DEBUG, "CBMEM region %llx-%llx\n", base, base+size-1); - high_tables_base = base; - high_tables_size = size; + bss_cbmem_base = base; + bss_cbmem_size = size; } #endif