From 284b08fb51b60255cbedcfe7aa7dcf319450d7e3 Mon Sep 17 00:00:00 2001 From: Patrick Delaunay Date: Mon, 10 Jul 2023 13:30:59 +0200 Subject: [PATCH] board: stm32mp1: add splash screen with stmicroelectronics logo Display the STMicroelectronics logo with features VIDEO_LOGO and SPLASH_SCREEN on STMicroelectronics boards. With CONFIG_SYS_VENDOR = "st", the logo st.bmp is selected, loaded at the address indicated by splashimage and centered with "splashpos=m,m". Signed-off-by: Patrick Delaunay Reviewed-by: Patrice Chotard --- MAINTAINERS | 1 + configs/stm32mp15_basic_defconfig | 3 +++ configs/stm32mp15_defconfig | 3 +++ configs/stm32mp15_trusted_defconfig | 3 +++ include/configs/stm32mp15_st_common.h | 4 +++- tools/logos/st.bmp | Bin 0 -> 18244 bytes 6 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 tools/logos/st.bmp diff --git a/MAINTAINERS b/MAINTAINERS index bf851cffd6b..523c17ebae4 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -633,6 +633,7 @@ F: include/dt-bindings/clock/stm32mp* F: include/dt-bindings/pinctrl/stm32-pinfunc.h F: include/dt-bindings/reset/stm32mp* F: include/stm32_rcc.h +F: tools/logos/st.bmp F: tools/stm32image.c N: stm N: stm32 diff --git a/configs/stm32mp15_basic_defconfig b/configs/stm32mp15_basic_defconfig index 424ae5dbdfa..9ea5aaa7145 100644 --- a/configs/stm32mp15_basic_defconfig +++ b/configs/stm32mp15_basic_defconfig @@ -171,6 +171,7 @@ CONFIG_USB_GADGET_VENDOR_NUM=0x0483 CONFIG_USB_GADGET_PRODUCT_NUM=0x5720 CONFIG_USB_GADGET_DWC2_OTG=y CONFIG_VIDEO=y +CONFIG_VIDEO_LOGO=y CONFIG_BACKLIGHT_GPIO=y CONFIG_VIDEO_LCD_ORISETECH_OTM8009A=y CONFIG_VIDEO_LCD_RAYDIUM_RM68200=y @@ -178,6 +179,8 @@ CONFIG_VIDEO_STM32=y CONFIG_VIDEO_STM32_DSI=y CONFIG_VIDEO_STM32_MAX_XRES=1280 CONFIG_VIDEO_STM32_MAX_YRES=800 +CONFIG_SPLASH_SCREEN=y +CONFIG_SPLASH_SCREEN_ALIGN=y CONFIG_BMP_16BPP=y CONFIG_BMP_24BPP=y CONFIG_BMP_32BPP=y diff --git a/configs/stm32mp15_defconfig b/configs/stm32mp15_defconfig index 2700b5c4991..4d0a81f8a87 100644 --- a/configs/stm32mp15_defconfig +++ b/configs/stm32mp15_defconfig @@ -147,6 +147,7 @@ CONFIG_USB_GADGET_VENDOR_NUM=0x0483 CONFIG_USB_GADGET_PRODUCT_NUM=0x5720 CONFIG_USB_GADGET_DWC2_OTG=y CONFIG_VIDEO=y +CONFIG_VIDEO_LOGO=y CONFIG_BACKLIGHT_GPIO=y CONFIG_VIDEO_LCD_ORISETECH_OTM8009A=y CONFIG_VIDEO_LCD_RAYDIUM_RM68200=y @@ -154,6 +155,8 @@ CONFIG_VIDEO_STM32=y CONFIG_VIDEO_STM32_DSI=y CONFIG_VIDEO_STM32_MAX_XRES=1280 CONFIG_VIDEO_STM32_MAX_YRES=800 +CONFIG_SPLASH_SCREEN=y +CONFIG_SPLASH_SCREEN_ALIGN=y CONFIG_BMP_16BPP=y CONFIG_BMP_24BPP=y CONFIG_BMP_32BPP=y diff --git a/configs/stm32mp15_trusted_defconfig b/configs/stm32mp15_trusted_defconfig index 5b94e0c6d2e..0a7d8624858 100644 --- a/configs/stm32mp15_trusted_defconfig +++ b/configs/stm32mp15_trusted_defconfig @@ -147,6 +147,7 @@ CONFIG_USB_GADGET_VENDOR_NUM=0x0483 CONFIG_USB_GADGET_PRODUCT_NUM=0x5720 CONFIG_USB_GADGET_DWC2_OTG=y CONFIG_VIDEO=y +CONFIG_VIDEO_LOGO=y CONFIG_BACKLIGHT_GPIO=y CONFIG_VIDEO_LCD_ORISETECH_OTM8009A=y CONFIG_VIDEO_LCD_RAYDIUM_RM68200=y @@ -154,6 +155,8 @@ CONFIG_VIDEO_STM32=y CONFIG_VIDEO_STM32_DSI=y CONFIG_VIDEO_STM32_MAX_XRES=1280 CONFIG_VIDEO_STM32_MAX_YRES=800 +CONFIG_SPLASH_SCREEN=y +CONFIG_SPLASH_SCREEN_ALIGN=y CONFIG_BMP_16BPP=y CONFIG_BMP_24BPP=y CONFIG_BMP_32BPP=y diff --git a/include/configs/stm32mp15_st_common.h b/include/configs/stm32mp15_st_common.h index b45982a35b8..60838cb0e3f 100644 --- a/include/configs/stm32mp15_st_common.h +++ b/include/configs/stm32mp15_st_common.h @@ -10,7 +10,9 @@ #define STM32MP_BOARD_EXTRA_ENV \ "usb_pgood_delay=2000\0" \ - "console=ttySTM0\0" + "console=ttySTM0\0" \ + "splashimage=" __stringify(CONFIG_SYS_LOAD_ADDR) "\0" \ + "splashpos=m,m\0" #include diff --git a/tools/logos/st.bmp b/tools/logos/st.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f59d3c5cef6b8bce5213a1ef42a9cdaa3c5dbc58 GIT binary patch literal 18244 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 literal 0 Hc-jL100001 -- 2.39.5