summaryrefslogtreecommitdiffstats
path: root/src/drivers/intel/fsp2_0/silicon_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/intel/fsp2_0/silicon_init.c')
-rw-r--r--src/drivers/intel/fsp2_0/silicon_init.c31
1 files changed, 27 insertions, 4 deletions
diff --git a/src/drivers/intel/fsp2_0/silicon_init.c b/src/drivers/intel/fsp2_0/silicon_init.c
index f3472420bc6f..76636dd7a89e 100644
--- a/src/drivers/intel/fsp2_0/silicon_init.c
+++ b/src/drivers/intel/fsp2_0/silicon_init.c
@@ -124,9 +124,12 @@ static void do_silicon_init(struct fsp_header *hdr)
/* Give SoC/mainboard a chance to populate entries */
platform_fsp_silicon_init_params_cb(upd);
- /* Populate logo related entries */
- if (CONFIG(BMP_LOGO))
- soc_load_logo(upd);
+ /*
+ * Populate UPD entries for the logo if the platform utilizes
+ * the FSP's capability for rendering bitmap (BMP) images.
+ */
+ if (CONFIG(BMP_LOGO) && !CONFIG(USE_COREBOOT_FOR_BMP_RENDERING))
+ soc_load_logo_by_fsp(upd);
/* Call SiliconInit */
silicon_init = (void *)(uintptr_t)(hdr->image_base +
@@ -154,6 +157,17 @@ static void do_silicon_init(struct fsp_header *hdr)
fsp_debug_after_silicon_init(status);
fsps_return_value_handler(FSP_SILICON_INIT_API, status);
+ /*
+ * Only applies for SoC platforms prior to FSP 2.2 specification:
+ * If a BMP logo is enabled (`BMP_LOGO`) and the platform is
+ * configured to skip the FSP for rendering logo bitmap
+ * (`USE_COREBOOT_FOR_BMP_RENDERING`), then call the coreboot
+ * native function to handle BMP logo loading and display.
+ */
+ if (!CONFIG(PLATFORM_USES_FSP2_2) && CONFIG(BMP_LOGO) &&
+ CONFIG(USE_COREBOOT_FOR_BMP_RENDERING))
+ soc_load_logo_by_coreboot();
+
/* Reinitialize CPUs if FSP-S has done MP Init */
if (CONFIG(USE_INTEL_FSP_MP_INIT) && !fsp_is_multi_phase_init_enabled())
do_mpinit_after_fsp();
@@ -202,6 +216,15 @@ static void do_silicon_init(struct fsp_header *hdr)
timestamp_add_now(TS_FSP_MULTI_PHASE_SI_INIT_END);
post_code(POSTCODE_FSP_MULTI_PHASE_SI_INIT_EXIT);
+ /*
+ * If a BMP logo is enabled (`BMP_LOGO`) and the platform is
+ * configured to skip the FSP for rendering logo bitmap
+ * (`USE_COREBOOT_FOR_BMP_RENDERING`), then call the coreboot
+ * native function to handle BMP logo loading and display.
+ */
+ if (CONFIG(BMP_LOGO) && CONFIG(USE_COREBOOT_FOR_BMP_RENDERING))
+ soc_load_logo_by_coreboot();
+
/* Reinitialize CPUs if FSP-S has done MP Init */
if (CONFIG(USE_INTEL_FSP_MP_INIT))
do_mpinit_after_fsp();
@@ -269,7 +292,7 @@ void fsp_silicon_init(void)
fsp_display_timestamp();
}
-__weak void soc_load_logo(FSPS_UPD *supd) { }
+__weak void soc_load_logo_by_fsp(FSPS_UPD *supd) { }
static void release_logo(void *arg_unused)
{