x86: fsp: Introduce CONFIG_FSP_USE_UPD Kconfig option
authorBin Meng <bmeng.cn@gmail.com>
Fri, 11 Dec 2015 06:03:01 +0000 (22:03 -0800)
committerBin Meng <bmeng.cn@gmail.com>
Wed, 13 Jan 2016 04:20:14 +0000 (12:20 +0800)
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: Bin Meng <bmeng.cn@gmail.com>
Acked-by: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>
arch/x86/Kconfig
arch/x86/lib/fsp/fsp_support.c

index 7e7cb612d7c2d6c9f19ebb57a085aa5451abb2aa..f07567c81ac4374c46349cf892c5420179841369 100644 (file)
@@ -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
index 9257745349e4545f70d51e99c7f732ee1789b1ef..d86a511b096abb96881958cf4483ebb1252c1294 100644 (file)
@@ -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);