提交 3340f2cc 编写于 作者: B Bin Meng

x86: fsp: Introduce CONFIG_FSP_USE_UPD Kconfig option

Not every FSP supports UPD, thus we introduce a Kconfig option
CONFIG_FSP_USE_UPD and use it to wrap these common UPD handling
codes in fsp_support.c.
Signed-off-by: NBin Meng <bmeng.cn@gmail.com>
Acked-by: NSimon Glass <sjg@chromium.org>
Tested-by: NSimon Glass <sjg@chromium.org>
上级 81f84aa6
......@@ -242,6 +242,15 @@ config FSP_SYS_MALLOC_F_LEN
help
Additional size of malloc() pool before relocation.
config FSP_USE_UPD
bool
depends on HAVE_FSP
default y
help
Most FSPs use UPD data region for some FSP customization. But there
are still some FSPs that might not even have UPD. For such FSPs,
override this to n in their platform Kconfig files.
config ENABLE_MRC_CACHE
bool "Enable MRC cache"
depends on !EFI && !SYS_COREBOOT
......
......@@ -103,10 +103,12 @@ void fsp_init(u32 stack_top, u32 boot_mode, void *nvs_buf)
fsp_init_f init;
struct fsp_init_params params;
struct fspinit_rtbuf rt_buf;
struct vpd_region *fsp_vpd;
struct fsp_header *fsp_hdr;
struct fsp_init_params *params_ptr;
#ifdef CONFIG_FSP_USE_UPD
struct vpd_region *fsp_vpd;
struct upd_region *fsp_upd;
#endif
#ifdef CONFIG_DEBUG_UART
setup_early_uart();
......@@ -122,14 +124,7 @@ void fsp_init(u32 stack_top, u32 boot_mode, void *nvs_buf)
config_data.common.stack_top = stack_top;
config_data.common.boot_mode = boot_mode;
fsp_upd = &config_data.fsp_upd;
memset(&rt_buf, 0, sizeof(struct fspinit_rtbuf));
/* Reserve a gap in stack top */
rt_buf.common.stack_top = stack_top - 32;
rt_buf.common.boot_mode = boot_mode;
rt_buf.common.upd_data = fsp_upd;
#ifdef CONFIG_FSP_USE_UPD
/* Get VPD region start */
fsp_vpd = (struct vpd_region *)(fsp_hdr->img_base +
fsp_hdr->cfg_region_off);
......@@ -137,12 +132,22 @@ void fsp_init(u32 stack_top, u32 boot_mode, void *nvs_buf)
/* Verify the VPD data region is valid */
assert(fsp_vpd->sign == VPD_IMAGE_ID);
fsp_upd = &config_data.fsp_upd;
/* Copy default data from Flash */
memcpy(fsp_upd, (void *)(fsp_hdr->img_base + fsp_vpd->upd_offset),
sizeof(struct upd_region));
/* Verify the UPD data region is valid */
assert(fsp_upd->terminator == UPD_TERMINATOR);
#endif
memset(&rt_buf, 0, sizeof(struct fspinit_rtbuf));
/* Initialize runtime buffer for fsp_init() */
rt_buf.common.stack_top = stack_top - 32;
rt_buf.common.boot_mode = boot_mode;
rt_buf.common.upd_data = fsp_upd;
/* Override any configuration if required */
update_fsp_configs(&config_data);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册