Stefan Reinauer (stefan.reinauer@coreboot.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2797
-gerrit
commit ed57d885dfc5660fdf79c780b3d390c5ed9f2e75 Author: Aaron Durbin adurbin@chromium.org Date: Tue Feb 12 00:40:30 2013 -0600
ramstage: Add cbmem_get_table_location()
When CONFIG_EARLY_CBMEM_INIT is selected romstage is supposed to have initialized cbmem. Therefore provide a weak function for the chipset to implement named cbmem_get_table_location(). When CONFIG_EARLY_CBMEM_INIT is selected cbmem_get_table_location() will be called to get the cbmem location and size. After that cbmem_initialize() is called.
Change-Id: Idc45a95f9d4b1d83eb3c6d4977f7a8c80c1ffe76 Signed-off-by: Aaron Durbin adurbin@chromium.org --- src/include/cbmem.h | 5 +++++ src/lib/hardwaremain.c | 10 ++++++++++ 2 files changed, 15 insertions(+)
diff --git a/src/include/cbmem.h b/src/include/cbmem.h index d0f0c9a..1212cb2 100644 --- a/src/include/cbmem.h +++ b/src/include/cbmem.h @@ -67,6 +67,11 @@ #ifndef __ASSEMBLER__ #ifndef __PRE_RAM__ extern uint64_t high_tables_base, high_tables_size; +#if CONFIG_EARLY_CBMEM_INIT +/* Return 0 on success, < 0 on error. */ +int __attribute__((weak)) cbmem_get_table_location(uint64_t *tables_base, + uint64_t *tables_size); +#endif #endif
int cbmem_initialize(void); diff --git a/src/lib/hardwaremain.c b/src/lib/hardwaremain.c index d2213d2..b29cc93 100644 --- a/src/lib/hardwaremain.c +++ b/src/lib/hardwaremain.c @@ -85,6 +85,16 @@ void hardwaremain(int boot_complete) /* FIXME: Is there a better way to handle this? */ init_timer();
+ /* CONFIG_EARLY_CBMEM_INIT indicates that romstage initialized + * the cbmem area. Therefore the table location can be initialized + * early in ramstage if cbmem_get_table_location() is implemented. + */ +#if CONFIG_EARLY_CBMEM_INIT + if (cbmem_get_table_location != NULL && + !cbmem_get_table_location(&high_tables_base, &high_tables_size)) + cbmem_initialize(); +#endif + timestamp_stash(TS_DEVICE_ENUMERATE);
/* Initialize chips early, they might disable unused devices. */