Hi Bin, On 2 December 2015 at 01:59, Bin Meng <bmeng...@gmail.com> wrote: > Since VPD/UPD may not exist on every FSP, move the codes that > verifies VPD/UPD to chipset-specific update_fsp_configs(). > This also updates update_fsp_configs() signature to accpect > FSP runtime buffer pointer as its second parameter. > > Signed-off-by: Bin Meng <bmeng...@gmail.com> > --- > > arch/x86/cpu/baytrail/fsp_configs.c | 24 +++++++++++++++++++++++- > arch/x86/cpu/queensbay/fsp_configs.c | 26 +++++++++++++++++++++++++- > arch/x86/include/asm/fsp/fsp_support.h | 4 +++- > arch/x86/lib/fsp/fsp_support.c | 24 +----------------------- > 4 files changed, 52 insertions(+), 26 deletions(-) > > diff --git a/arch/x86/cpu/baytrail/fsp_configs.c > b/arch/x86/cpu/baytrail/fsp_configs.c > index 9810921..3a03392 100644 > --- a/arch/x86/cpu/baytrail/fsp_configs.c > +++ b/arch/x86/cpu/baytrail/fsp_configs.c > @@ -125,13 +125,35 @@ const struct pch_azalia_config azalia_config = { > * If the device tree does not specify an integer setting, use the default > * provided in Intel's Baytrail_FSP_Gold4.tgz release FSP/BayleyBayFsp.bsf > file. > */ > -void update_fsp_configs(struct fsp_config_data *config) > +void update_fsp_configs(struct fsp_config_data *config, > + struct fspinit_rtbuf *rt_buf) > { > + struct fsp_header *fsp_hdr = config->fsp_hdr; > + struct vpd_region *fsp_vpd; > struct upd_region *fsp_upd = &config->fsp_upd; > struct memory_down_data *mem; > const void *blob = gd->fdt_blob; > int node; > > + /* Initialize runtime buffer for fsp_init() */ > + rt_buf->common.stack_top = config->stack_top - 32; > + rt_buf->common.boot_mode = config->boot_mode; > + rt_buf->common.upd_data = &config->fsp_upd; > + > + /* Get VPD region start */ > + fsp_vpd = (struct vpd_region *)(fsp_hdr->img_base + > + fsp_hdr->cfg_region_off); > + > + /* Verify the VPD data region is valid */ > + assert(fsp_vpd->sign == VPD_IMAGE_ID); > + > + /* 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); > +
Maybe rather than duplicating this code, it can go in a common function that is called for these two boards? > fsp_upd->azalia_config_ptr = (uint32_t)&azalia_config; > > node = fdtdec_next_compatible(blob, 0, COMPAT_INTEL_BAYTRAIL_FSP); > diff --git a/arch/x86/cpu/queensbay/fsp_configs.c > b/arch/x86/cpu/queensbay/fsp_configs.c > index f84ae30..96ec116 100644 > --- a/arch/x86/cpu/queensbay/fsp_configs.c > +++ b/arch/x86/cpu/queensbay/fsp_configs.c > @@ -8,8 +8,32 @@ > #include <common.h> > #include <asm/fsp/fsp_support.h> > > -void update_fsp_configs(struct fsp_config_data *config) > +void update_fsp_configs(struct fsp_config_data *config, > + struct fspinit_rtbuf *rt_buf) > { > + struct fsp_header *fsp_hdr = config->fsp_hdr; > + struct vpd_region *fsp_vpd; > + struct upd_region *fsp_upd = &config->fsp_upd; > + > + /* Initialize runtime buffer for fsp_init() */ > + rt_buf->common.stack_top = config->stack_top - 32; > + rt_buf->common.boot_mode = config->boot_mode; > + rt_buf->common.upd_data = &config->fsp_upd; > + > + /* Get VPD region start */ > + fsp_vpd = (struct vpd_region *)(fsp_hdr->img_base + > + fsp_hdr->cfg_region_off); > + > + /* Verify the VPD data region is valid */ > + assert(fsp_vpd->sign == VPD_IMAGE_ID); > + > + /* 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); > + > /* Override any UPD setting if required */ > > /* Uncomment the line below to enable DEBUG message */ > diff --git a/arch/x86/include/asm/fsp/fsp_support.h > b/arch/x86/include/asm/fsp/fsp_support.h > index e65a130..61d811f 100644 > --- a/arch/x86/include/asm/fsp/fsp_support.h > +++ b/arch/x86/include/asm/fsp/fsp_support.h > @@ -194,10 +194,12 @@ void *fsp_get_bootloader_tmp_mem(const void *hob_list, > u32 *len); > * This function overrides the default configurations of FSP. > * > * @config: A pointer to the FSP configuration data structure > + * @rt_buf: A pointer to the FSP runtime buffer data structure > * > * @return: None > */ > -void update_fsp_configs(struct fsp_config_data *config); > +void update_fsp_configs(struct fsp_config_data *config, > + struct fspinit_rtbuf *rt_buf); > > /** > * fsp_init_phase_pci() - Tell the FSP that we have completed PCI init > diff --git a/arch/x86/lib/fsp/fsp_support.c b/arch/x86/lib/fsp/fsp_support.c > index faca93e..c386b75 100644 > --- a/arch/x86/lib/fsp/fsp_support.c > +++ b/arch/x86/lib/fsp/fsp_support.c > @@ -103,10 +103,8 @@ 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; > - struct upd_region *fsp_upd; > > #ifdef CONFIG_DEBUG_UART > setup_early_uart(); > @@ -122,30 +120,10 @@ void fsp_init(u32 stack_top, u32 boot_mode, void > *nvs_buf) > config_data.stack_top = stack_top; > config_data.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; > - > - /* Get VPD region start */ > - fsp_vpd = (struct vpd_region *)(fsp_hdr->img_base + > - fsp_hdr->cfg_region_off); > - > - /* Verify the VPD data region is valid */ > - assert(fsp_vpd->sign == VPD_IMAGE_ID); > - > - /* 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); > - > /* Override any configuration if required */ > - update_fsp_configs(&config_data); > + update_fsp_configs(&config_data, &rt_buf); > > memset(¶ms, 0, sizeof(struct fsp_init_params)); > params.nvs_buf = nvs_buf; > -- > 1.8.2.1 > Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot