summaryrefslogtreecommitdiff
path: root/board
diff options
context:
space:
mode:
authorGabe Black <gabeblack@chromium.org>2011-12-05 12:09:22 +0000
committerGraeme Russ <graeme.russ@gmail.com>2011-12-19 13:26:15 +1100
commit63f559cd12e64825df78c1774b707ac1782110c0 (patch)
treee7920d4db917ad0f20069d5d3ea47a228d83d244 /board
parentef5a5b004997a0759d6f5f3206a419f90d5ffac5 (diff)
downloadu-boot-imx-63f559cd12e64825df78c1774b707ac1782110c0.zip
u-boot-imx-63f559cd12e64825df78c1774b707ac1782110c0.tar.gz
u-boot-imx-63f559cd12e64825df78c1774b707ac1782110c0.tar.bz2
x86: Import code from coreboot's libpayload to parse the coreboot table
This change also forces the lib_sysinfo structure to be in the .data section. Otherwise it ends up in the .bss section. U-boot assumes that it doesn't need to copy it over during relocation, and instead fills that whole section with zeroes. If we really were booting from ROM that would be appropriate, but we need some information from the coreboot tables (memory size) before then and have to fill that structure before relocation. We skirt u-boot's assumption by putting this in .data where it assumes there is still read only but non-zero data. Signed-off-by: Gabe Black <gabeblack@chromium.org>
Diffstat (limited to 'board')
-rw-r--r--board/chromebook-x86/coreboot/coreboot.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/board/chromebook-x86/coreboot/coreboot.c b/board/chromebook-x86/coreboot/coreboot.c
index 44c6f15..22a643c 100644
--- a/board/chromebook-x86/coreboot/coreboot.c
+++ b/board/chromebook-x86/coreboot/coreboot.c
@@ -26,6 +26,8 @@
#include <asm/u-boot-x86.h>
#include <flash.h>
#include <netdev.h>
+#include <asm/arch-coreboot/tables.h>
+#include <asm/arch-coreboot/sysinfo.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -34,6 +36,14 @@ unsigned long monitor_flash_len = CONFIG_SYS_MONITOR_LEN;
/*
* Miscellaneous platform dependent initializations
*/
+int cpu_init_f(void)
+{
+ int ret = get_coreboot_info(&lib_sysinfo);
+ if (ret != 0)
+ printf("Failed to parse coreboot tables.\n");
+ return ret;
+}
+
int board_early_init_f(void)
{
return 0;