|
@@ -23,13 +23,49 @@
|
|
|
*/
|
|
|
|
|
|
#include <common.h>
|
|
|
+#include <malloc.h>
|
|
|
+#include <asm/e820.h>
|
|
|
#include <asm/u-boot-x86.h>
|
|
|
+#include <asm/global_data.h>
|
|
|
+#include <asm/arch-coreboot/sysinfo.h>
|
|
|
+#include <asm/arch-coreboot/tables.h>
|
|
|
|
|
|
DECLARE_GLOBAL_DATA_PTR;
|
|
|
|
|
|
+unsigned install_e820_map(unsigned max_entries, struct e820entry *entries)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+
|
|
|
+ unsigned num_entries = min(lib_sysinfo.n_memranges, max_entries);
|
|
|
+ if (num_entries < lib_sysinfo.n_memranges) {
|
|
|
+ printf("Warning: Limiting e820 map to %d entries.\n",
|
|
|
+ num_entries);
|
|
|
+ }
|
|
|
+ for (i = 0; i < num_entries; i++) {
|
|
|
+ struct memrange *memrange = &lib_sysinfo.memrange[i];
|
|
|
+
|
|
|
+ entries[i].addr = memrange->base;
|
|
|
+ entries[i].size = memrange->size;
|
|
|
+ entries[i].type = memrange->type;
|
|
|
+ }
|
|
|
+ return num_entries;
|
|
|
+}
|
|
|
+
|
|
|
int dram_init_f(void)
|
|
|
{
|
|
|
- gd->ram_size = 64*1024*1024;
|
|
|
+ int i;
|
|
|
+ phys_size_t ram_size = 0;
|
|
|
+
|
|
|
+ for (i = 0; i < lib_sysinfo.n_memranges; i++) {
|
|
|
+ struct memrange *memrange = &lib_sysinfo.memrange[i];
|
|
|
+ unsigned long long end = memrange->base + memrange->size;
|
|
|
+
|
|
|
+ if (memrange->type == CB_MEM_RAM && end > ram_size)
|
|
|
+ ram_size = end;
|
|
|
+ }
|
|
|
+ gd->ram_size = ram_size;
|
|
|
+ if (ram_size == 0)
|
|
|
+ return -1;
|
|
|
return 0;
|
|
|
}
|
|
|
|