CBMEM: Add cbmem_late_set_table() and drop references to high_tables_base

This helper function is for compatibility only for chipsets that do
not implement get_top_of_ram() to support early CBMEM.

Also remove references to globals high_tables_base and _size under
arch/ and from two ARMv7 boards.

Change-Id: I17eee30635a0368b2ada06e0698425c5ef0ecc53
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: http://review.coreboot.org/3902
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Reviewed-by: Aaron Durbin <adurbin@google.com>
This commit is contained in:
Kyösti Mälkki 2013-09-04 13:05:01 +03:00
parent 42f4651434
commit 1ae305efe1
7 changed files with 44 additions and 26 deletions

View File

@ -29,13 +29,6 @@
#define MAX_COREBOOT_TABLE_SIZE (8 * 1024) #define MAX_COREBOOT_TABLE_SIZE (8 * 1024)
/*
* TODO: "High" tables are a convention used on x86. Maybe we can
* clean up that naming at some point.
*/
uint64_t high_tables_base = 0;
uint64_t high_tables_size;
void cbmem_arch_init(void) void cbmem_arch_init(void)
{ {
} }

View File

@ -25,9 +25,6 @@
*/ */
void set_top_of_ram(uint64_t ramtop) void set_top_of_ram(uint64_t ramtop)
{ {
high_tables_base = ramtop - HIGH_MEMORY_SIZE; cbmem_late_set_table(ramtop - HIGH_MEMORY_SIZE, HIGH_MEMORY_SIZE);
high_tables_size = HIGH_MEMORY_SIZE;
printk(BIOS_DEBUG, "high_tables_base: %08llx, size %lld\n",
high_tables_base, high_tables_size);
} }
#endif #endif

View File

@ -32,8 +32,6 @@
#include <lib.h> #include <lib.h>
#include <smbios.h> #include <smbios.h>
uint64_t high_tables_base = 0;
uint64_t high_tables_size;
void cbmem_arch_init(void) void cbmem_arch_init(void)
{ {
@ -227,9 +225,18 @@ struct lb_memory *write_tables(void)
if (high_table_pointer) { if (high_table_pointer) {
unsigned long new_high_table_pointer; unsigned long new_high_table_pointer;
/* FIXME: The high_table_base parameter is not reference when tables are high,
* or high_table_pointer >1 MB.
*/
#if CONFIG_DYNAMIC_CBMEM
u64 fixme_high_tables_base = 0;
#else
u64 fixme_high_tables_base = high_tables_base;
#endif
/* Also put a forwarder entry into 0-4K */ /* Also put a forwarder entry into 0-4K */
new_high_table_pointer = write_coreboot_table(low_table_start, low_table_end, new_high_table_pointer = write_coreboot_table(low_table_start, low_table_end,
high_tables_base, high_table_pointer); fixme_high_tables_base, high_table_pointer);
if (new_high_table_pointer > (high_table_pointer + if (new_high_table_pointer > (high_table_pointer +
MAX_COREBOOT_TABLE_SIZE)) MAX_COREBOOT_TABLE_SIZE))

View File

@ -137,6 +137,7 @@ void cbmem_add_lb_mem(struct lb_memory *mem);
#ifndef __PRE_RAM__ #ifndef __PRE_RAM__
extern uint64_t high_tables_base, high_tables_size; extern uint64_t high_tables_base, high_tables_size;
void set_top_of_ram(uint64_t ramtop); void set_top_of_ram(uint64_t ramtop);
void cbmem_late_set_table(uint64_t base, uint64_t size);
void set_cbmem_toc(struct cbmem_entry *); void set_cbmem_toc(struct cbmem_entry *);
#endif #endif

View File

@ -42,6 +42,8 @@ struct cbmem_entry {
} __attribute__((packed)); } __attribute__((packed));
#ifndef __PRE_RAM__ #ifndef __PRE_RAM__
uint64_t high_tables_base = 0;
uint64_t high_tables_size = 0;
static struct cbmem_entry *bss_cbmem_toc; static struct cbmem_entry *bss_cbmem_toc;
struct cbmem_entry *__attribute__((weak)) get_cbmem_toc(void) struct cbmem_entry *__attribute__((weak)) get_cbmem_toc(void)
@ -60,7 +62,15 @@ struct cbmem_entry *__attribute__((weak)) get_cbmem_toc(void)
printk(BIOS_WARNING, "WARNING: you need to define get_cbmem_toc() for your chipset\n"); printk(BIOS_WARNING, "WARNING: you need to define get_cbmem_toc() for your chipset\n");
return NULL; return NULL;
} }
#endif
#if !defined(__PRE_RAM__)
void cbmem_late_set_table(uint64_t base, uint64_t size)
{
printk(BIOS_DEBUG, "CBMEM region %llx-%llx (%s)\n", base, base+size-1, __FUNCTION__);
high_tables_base = base;
high_tables_size = size;
}
#endif #endif
/** /**

View File

@ -221,17 +221,22 @@ static void mainboard_init(device_t dev)
// gpio_info(); // gpio_info();
} }
static void setup_cbmem(void)
{
u64 size = CONFIG_COREBOOT_TABLES_SIZE;
u64 base = CONFIG_SYS_SDRAM_BASE +
((unsigned)CONFIG_DRAM_SIZE_MB << 20ULL) -
CONFIG_COREBOOT_TABLES_SIZE;
cbmem_late_set_table(base, size);
cbmem_init(base, size);
}
static void mainboard_enable(device_t dev) static void mainboard_enable(device_t dev)
{ {
dev->ops->init = &mainboard_init; dev->ops->init = &mainboard_init;
/* set up coreboot tables */ /* set up coreboot tables */
/* FIXME: this should happen somewhere else */ setup_cbmem();
high_tables_size = CONFIG_COREBOOT_TABLES_SIZE;
high_tables_base = CONFIG_SYS_SDRAM_BASE +
((unsigned)CONFIG_DRAM_SIZE_MB << 20ULL) -
CONFIG_COREBOOT_TABLES_SIZE;
cbmem_init(high_tables_base, high_tables_size);
/* set up dcache and MMU */ /* set up dcache and MMU */
/* FIXME: this should happen via resource allocator */ /* FIXME: this should happen via resource allocator */

View File

@ -262,17 +262,22 @@ static void mainboard_init(device_t dev)
// gpio_info(); // gpio_info();
} }
static void setup_cbmem(void)
{
u64 size = CONFIG_COREBOOT_TABLES_SIZE;
u64 base = CONFIG_SYS_SDRAM_BASE +
((unsigned)CONFIG_DRAM_SIZE_MB << 20ULL) -
CONFIG_COREBOOT_TABLES_SIZE;
cbmem_late_set_table(base, size);
cbmem_init(base, size);
}
static void mainboard_enable(device_t dev) static void mainboard_enable(device_t dev)
{ {
dev->ops->init = &mainboard_init; dev->ops->init = &mainboard_init;
/* set up coreboot tables */ /* set up coreboot tables */
/* FIXME: this should happen somewhere else */ setup_cbmem();
high_tables_size = CONFIG_COREBOOT_TABLES_SIZE;
high_tables_base = CONFIG_SYS_SDRAM_BASE +
((unsigned)CONFIG_DRAM_SIZE_MB << 20ULL) -
CONFIG_COREBOOT_TABLES_SIZE;
cbmem_init(high_tables_base, high_tables_size);
/* set up dcache and MMU */ /* set up dcache and MMU */
/* FIXME: this should happen via resource allocator */ /* FIXME: this should happen via resource allocator */