Subrata Banik submitted this change.

View Change

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
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(-)

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";
+}

To view, visit change 79775. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: main
Gerrit-Change-Id: I56613d1e7e81e25b31ad034edae0f716c94c4960
Gerrit-Change-Number: 79775
Gerrit-PatchSet: 11
Gerrit-Owner: Shelley Chen <shchen@google.com>
Gerrit-Reviewer: Andrey Petrov <andrey.petrov@gmail.com>
Gerrit-Reviewer: Julius Werner <jwerner@chromium.org>
Gerrit-Reviewer: Kapil Porwal <kapilporwal@google.com>
Gerrit-Reviewer: Paul Menzel <paulepanter@mailbox.org>
Gerrit-Reviewer: Ronak Kanabar <ronak.kanabar@intel.com>
Gerrit-Reviewer: Shelley Chen <shchen@google.com>
Gerrit-Reviewer: Subrata Banik <subratabanik@google.com>
Gerrit-Reviewer: build bot (Jenkins) <no-reply@coreboot.org>
Gerrit-MessageType: merged