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>
This commit is contained in:
Shelley Chen 2024-01-03 14:00:07 -08:00 committed by Subrata Banik
parent 4f24c354ea
commit fddf9162a3
7 changed files with 67 additions and 2 deletions

View File

@ -127,6 +127,7 @@ $(obj)/Fsp_2_S.fd: $(call strip_quotes,$(CONFIG_FSP_FD_PATH_2)) $(obj)/Fsp_M.fd
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 @@ logo.bmp-compression := LZMA
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)

View File

@ -15,7 +15,11 @@ void set_bootsplash(unsigned char *framebuffer, unsigned int x_resolution,
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);

View File

@ -149,3 +149,7 @@ config PROBE_RAM
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

View File

@ -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 @@ void bmp_load_logo(uint32_t *logo_ptr, uint32_t *logo_size)
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;
}

View File

@ -79,5 +79,28 @@ config CHROMEOS_NVS
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

View File

@ -20,3 +20,15 @@ romstage-y += watchdog.c
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)

View File

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