Subrata Banik has submitted this change. ( https://review.coreboot.org/c/coreboot/+/79775?usp=email )
Change subject: vc/google: Show different logos for different ChromeOS devices ......................................................................
vc/google: Show different logos for different ChromeOS devices
This commit adds support for showing different logos on the ChromeOS firmware splash screen based on the device model (between Chromebook-Plus and regular ChromeOS devices like Chromebook and Chromebox). This allows OEMs to customize the branding on their devices.
This patch also introduces three new Kconfigs: - CHROMEOS_FW_SPLASH_SCREEN - CHROMEOS_LOGO_PATH - CHROMEBOOK_PLUS_LOGO_PATH which allow users to enable the fw splash screen feature in the vendorcode. Previously, we were using the BMP_LOGO Kconfig in drivers/intel/fsp2_0, but we didn't want the top level Kconfigs to be located inside the architecture specific files.
BUG=b:317880956 BRANCH=None TEST=emerge-rex coreboot chromeos-bootimage verify that FW splash screen appears
Change-Id: I56613d1e7e81e25b31ad034edae0f716c94c4960 Signed-off-by: Shelley Chen shchen@google.com Reviewed-on: https://review.coreboot.org/c/coreboot/+/79775 Reviewed-by: Kapil Porwal kapilporwal@google.com Tested-by: build bot (Jenkins) no-reply@coreboot.org Reviewed-by: Julius Werner jwerner@chromium.org Reviewed-by: Paul Menzel paulepanter@mailbox.org --- M src/drivers/intel/fsp2_0/Makefile.inc M src/include/bootsplash.h M src/lib/Kconfig M src/lib/bmp_logo.c M src/vendorcode/google/chromeos/Kconfig M src/vendorcode/google/chromeos/Makefile.inc A src/vendorcode/google/chromeos/splash.c 7 files changed, 67 insertions(+), 2 deletions(-)
Approvals: Shelley Chen: Looks good to me, approved Kapil Porwal: Looks good to me, approved Paul Menzel: Looks good to me, but someone else must approve build bot (Jenkins): Verified Julius Werner: Looks good to me, approved
diff --git a/src/drivers/intel/fsp2_0/Makefile.inc b/src/drivers/intel/fsp2_0/Makefile.inc index 5463405..4cb24ff 100644 --- a/src/drivers/intel/fsp2_0/Makefile.inc +++ b/src/drivers/intel/fsp2_0/Makefile.inc @@ -127,6 +127,7 @@ endif
# Add logo to the cbfs image +ifneq ($(CONFIG_HAVE_CUSTOM_BMP_LOGO),y) cbfs-files-$(CONFIG_BMP_LOGO) += logo.bmp logo.bmp-file := $(call strip_quotes,$(CONFIG_FSP2_0_LOGO_FILE_NAME)) logo.bmp-type := raw @@ -135,6 +136,7 @@ else ifeq ($(CONFIG_BMP_LOGO_COMPRESS_LZ4),y) logo.bmp-compression := LZ4 endif +endif
ifneq ($(call strip_quotes,$(CONFIG_FSP_HEADER_PATH)),) CPPFLAGS_common+=-I$(CONFIG_FSP_HEADER_PATH) diff --git a/src/include/bootsplash.h b/src/include/bootsplash.h index 9d1bae3..86048a4 100644 --- a/src/include/bootsplash.h +++ b/src/include/bootsplash.h @@ -15,7 +15,11 @@ unsigned int y_resolution, unsigned int bytes_per_line, unsigned int fb_resolution);
- +/* + * Allow platform-specific BMP logo overrides via HAVE_CUSTOM_BMP_LOGO config. + * For example: Introduce configurable BMP logo for customization on platforms like ChromeOS + */ +const char *bmp_logo_filename(void); void bmp_load_logo(uint32_t *logo_ptr, uint32_t *logo_size); void bmp_release_logo(void);
diff --git a/src/lib/Kconfig b/src/lib/Kconfig index 80efe75..d11bf59 100644 --- a/src/lib/Kconfig +++ b/src/lib/Kconfig @@ -149,3 +149,7 @@ help When enabled it will be possible to detect usable RAM using probe_ram function. + +config HAVE_CUSTOM_BMP_LOGO + def_bool n + depends on BMP_LOGO diff --git a/src/lib/bmp_logo.c b/src/lib/bmp_logo.c index 330ed6f..2888777 100644 --- a/src/lib/bmp_logo.c +++ b/src/lib/bmp_logo.c @@ -5,9 +5,17 @@ #include <cbfs.h> #include <cbmem.h> #include <stdint.h> +#include <vendorcode/google/chromeos/chromeos.h>
static const struct cbmem_entry *logo_entry;
+#if !CONFIG(HAVE_CUSTOM_BMP_LOGO) +const char *bmp_logo_filename(void) +{ + return "logo.bmp"; +} +#endif + void bmp_load_logo(uint32_t *logo_ptr, uint32_t *logo_size) { void *logo_buffer; @@ -24,7 +32,7 @@ if (!logo_buffer) return;
- *logo_size = cbfs_load("logo.bmp", logo_buffer, 1 * MiB); + *logo_size = cbfs_load(bmp_logo_filename(), logo_buffer, 1 * MiB); if (*logo_size) *logo_ptr = (uintptr_t)logo_buffer; } diff --git a/src/vendorcode/google/chromeos/Kconfig b/src/vendorcode/google/chromeos/Kconfig index 0979652..74f23d6 100644 --- a/src/vendorcode/google/chromeos/Kconfig +++ b/src/vendorcode/google/chromeos/Kconfig @@ -79,5 +79,28 @@ bool depends on ACPI_SOC_NVS
+config CHROMEOS_FW_SPLASH_SCREEN + bool "Display Splash Screen in firmware" + default n + select BMP_LOGO + select HAVE_CUSTOM_BMP_LOGO + help + Select this option to display the manufacturer's logo or + custom image (OEM splash screen) early in the boot process. + This can enhance the user experience by providing visual + feedback while the system starts up. For example, ChromeOS + devices use this option to show their logo before the operating + system loads. + +config CHROMEOS_LOGO_PATH + string "Path to ChromeOS logo file" + depends on CHROMEOS_FW_SPLASH_SCREEN + default "3rdparty/blobs/mainboard/$(MAINBOARDDIR)/logo.bmp" + +config CHROMEBOOK_PLUS_LOGO_PATH + string "Path to Chromebook Plus logo file" + depends on CHROMEOS_FW_SPLASH_SCREEN + default "3rdparty/blobs/mainboard/$(MAINBOARDDIR)/logo.bmp" + endif # CHROMEOS endmenu diff --git a/src/vendorcode/google/chromeos/Makefile.inc b/src/vendorcode/google/chromeos/Makefile.inc index dce4d9c..af37a09 100644 --- a/src/vendorcode/google/chromeos/Makefile.inc +++ b/src/vendorcode/google/chromeos/Makefile.inc @@ -20,3 +20,15 @@ ramstage-y += watchdog.c
romstage-$(CONFIG_CHROMEOS_DRAM_PART_NUMBER_IN_CBI) += dram_part_num_override.c +ramstage-$(CONFIG_CHROMEOS_FW_SPLASH_SCREEN) += splash.c + +# Add logo to the cbfs image +cbfs-files-$(CONFIG_CHROMEOS_FW_SPLASH_SCREEN) += cb_logo.bmp +cb_logo.bmp-file := $(call strip_quotes,$(CONFIG_CHROMEOS_LOGO_PATH)) +cb_logo.bmp-type := raw +cb_logo.bmp-compression := $(CBFS_COMPRESS_FLAG) + +cbfs-files-$(CONFIG_CHROMEOS_FW_SPLASH_SCREEN) += cb_plus_logo.bmp +cb_plus_logo.bmp-file := $(call strip_quotes,$(CONFIG_CHROMEBOOK_PLUS_LOGO_PATH)) +cb_plus_logo.bmp-type := raw +cb_plus_logo.bmp-compression := $(CBFS_COMPRESS_FLAG) diff --git a/src/vendorcode/google/chromeos/splash.c b/src/vendorcode/google/chromeos/splash.c new file mode 100644 index 0000000..3532fb8 --- /dev/null +++ b/src/vendorcode/google/chromeos/splash.c @@ -0,0 +1,12 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include <bootsplash.h> +#include <vendorcode/google/chromeos/chromeos.h> + +const char *bmp_logo_filename(void) +{ + if (chromeos_device_branded_plus()) + return "cb_plus_logo.bmp"; + else + return "cb_logo.bmp"; +}