diff --git a/configs/AM62LX/AM62LX_linux_toc.txt b/configs/AM62LX/AM62LX_linux_toc.txt index 315a27f23..b87096ae8 100644 --- a/configs/AM62LX/AM62LX_linux_toc.txt +++ b/configs/AM62LX/AM62LX_linux_toc.txt @@ -41,6 +41,7 @@ linux/Foundational_Components/U-Boot/UG-Secure-Boot linux/Foundational_Components/U-Boot/UG-Keywriter-Lite linux/Foundational_Components/U-Boot/UG-Keywriter linux/Foundational_Components/U-Boot/UG-Programming-OTPs +linux/Foundational_Components/U-Boot/UG-Splash-Screen linux/Foundational_Components/U-Boot/Applications linux/Foundational_Components/U-Boot/Apps-SPL-Debug-OpenOCD diff --git a/configs/J722S/J722S_linux_toc.txt b/configs/J722S/J722S_linux_toc.txt index 32fc1b6ad..cc9058b72 100644 --- a/configs/J722S/J722S_linux_toc.txt +++ b/configs/J722S/J722S_linux_toc.txt @@ -40,6 +40,7 @@ linux/Foundational_Components/U-Boot/UG-DDRSS-J7 linux/Foundational_Components/U-Boot/UG-Network-K3 linux/Foundational_Components/U-Boot/UG-HyperBus linux/Foundational_Components/U-Boot/UG-RemoteProc +linux/Foundational_Components/U-Boot/UG-Splash-Screen linux/Foundational_Components/U-Boot/Applications linux/Foundational_Components/U-Boot/Apps-SPL-Debug-OpenOCD linux/Foundational_Components/U-Boot/Apps-Load-in-CCS diff --git a/source/linux/Foundational_Components/U-Boot/UG-Splash-Screen.rst b/source/linux/Foundational_Components/U-Boot/UG-Splash-Screen.rst index 9c56cdf19..5c733b863 100644 --- a/source/linux/Foundational_Components/U-Boot/UG-Splash-Screen.rst +++ b/source/linux/Foundational_Components/U-Boot/UG-Splash-Screen.rst @@ -8,8 +8,11 @@ Splash screens are typically used to provide feedback to the user that the board to showcase the vendor logo which helps with branding and identification of which boot image is being used for the bootup. -The |__PART_FAMILY_DEVICE_NAMES__| offers out-of-box splash screen experience with OLDI display. -It also supports displaying a splash screen until kernel is booted up with flicker-free transition across different boot stages. +.. ifconfig:: CONFIG_part_variant not in ('AM62LX', 'AM62PX', 'J722S') + + The |__PART_FAMILY_DEVICE_NAMES__| offers out-of-box splash screen experience with OLDI display. + +The |__PART_FAMILY_DEVICE_NAMES__| supports displaying a splash screen until the kernel boots up, with a flicker-free transition across different boot stages. ------------------ Features supported @@ -19,9 +22,8 @@ The following features are supported for splash screen in U-Boot: #. Supports 32, 24, and 8 bits per pixel BMP image. #. Supports frame buffer of size 1920x1200 resolution, images with a resolution lesser than this can still be displayed using the same frame buffer. -#. Supports displaying only BMP and compressed BMP images(gzip and 8bit RLE). +#. Supports displaying only BMP and compressed BMP images (gzip and 8bit RLE). #. Supports MMC and OSPI as bmp image sources. -#. Supports splash screen only on OLDI panel. The |__PART_FAMILY_DEVICE_NAMES__| supports splash screen at both U-Boot proper and A53 SPL with A53 SPL displaying splash screen **~1.4 seconds** earlier than U-Boot proper. @@ -49,38 +51,39 @@ At the SPL stage, the splash screen display function is called from :file:`board U-Boot proper ^^^^^^^^^^^^^ -To enable the splash screen at U-Boot proper enable the following configs in :file:`configs/_a53_defconfig`. +.. ifconfig:: CONFIG_part_variant in ('AM62X', 'AM62PX') -.. code-block:: kconfig + To enable the splash screen at U-Boot proper enable the following configs in :file:`configs/_a53_defconfig`. - CONFIG_SPLASH_SCREEN=y - CONFIG_SPLASH_SOURCE=y - CONFIG_SPLASH_SCREEN_ALIGN=y - CONFIG_HIDE_LOGO_VERSION=y + .. code-block:: kconfig -If the user only wants the splash screen feature at U-Boot proper, the user can disable the splash screen at A53 SPL -by disabling the kconfig **CONFIG_SPL_VIDEO**. + CONFIG_SPLASH_SCREEN=y + CONFIG_SPLASH_SOURCE=y + CONFIG_SPLASH_SCREEN_ALIGN=y + CONFIG_HIDE_LOGO_VERSION=y -.. code-block:: kconfig + If the user only wants the splash screen feature at U-Boot proper, the user can disable the splash screen at A53 SPL + by disabling the kconfig **CONFIG_SPL_VIDEO**. - # CONFIG_SPL_VIDEO=y + .. code-block:: kconfig -The splash screen feature at U-Boot proper gets compiled in :file:`u-boot.img`, which is built during U-Boot -compilation. Any changes made to U-Boot splash screen feature will require the recompilation of :file:`u-boot.img`. -User should use the recompiled u-boot.img to boot the board, to see splash screen at U-Boot proper. + # CONFIG_SPL_VIDEO=y -.. note:: - * If splash screen is enabled at U-Boot proper it will stay persistent until linux boot starts. + The splash screen feature at U-Boot proper gets compiled in :file:`u-boot.img`, which is built during U-Boot + compilation. Any changes made to U-Boot splash screen feature will require the recompilation of :file:`u-boot.img`. + User should use the recompiled u-boot.img to boot the board, to see splash screen at U-Boot proper. -.. _Display custom logo as splash screen: + .. note:: + + If splash screen is enabled at U-Boot proper it will stay persistent until linux boot starts. Display custom logo as splash screen ------------------------------------ -#. In U-Boot all information for the image to be displayed as splash screen is passed through environment variables, +#. In U-Boot, all information for the image to be displayed as splash screen is passed through environment variables defined below. These should be added in the .env file used by the board under :file:`board/ti/.env`. For reference, :file:`board/ti/am62x.env` is shown below : - .. code-block:: bash + .. code-block:: text #Name of file to be displayed splashfile=ti_logo_414x97_32bpp.bmp.gz @@ -123,6 +126,7 @@ Display custom logo as splash screen #. Change **splashsource** variable to the name of the source defined in above struct. .. important:: + :file:`.env` file gets compiled into :file:`u-boot.img` and :file:`tispl.bin` for U-Boot proper and A53 SPL respectively, any changes made in .env will require the recompilation of :file:`u-boot.img` and :file:`tispl.bin` depending on the stage splash screen is enabled. @@ -202,29 +206,149 @@ To enable splash screen on custom board based on |__PART_FAMILY_DEVICE_NAMES__| .. ifconfig:: CONFIG_part_variant in ('AM62PX') - 1. Add video driver and panel node in the dts file by referring following patches: + 1. Config fragments select the panel-specific device-tree overlays; see + `Panel-specific config fragments`_ for details. - * `arm: dts: k3-am62p5-sk-u-boot: Add panel device-tree node `_ + 2. Enable the A53 SPL splash screen related configurations. The :file:`configs/am62px_evm_a53_defconfig` + already includes the splash screen config fragment, which enables splash screen by default. + For custom boards, refer to the following file: -.. ifconfig:: CONFIG_part_variant in ('AM62X') + * `Splash screen config fragment `_ - 1. Add video driver and panel node in the dts file by referring following patches: + 3. To enable different boot media for splash, define splash file locations struct in the board file + present at :file:`board/ti//evm.c` - * `arm: dts: k3-am625-sk-u-boot: Add panel device-tree node `_ + AM62PX supports two splash storage locations: SPI-NOR flash (raw at offset ``0x700000``) and + MMC FAT filesystem, defined in :file:`board/ti/am62px/evm.c`: -.. ifconfig:: CONFIG_part_variant in ('AM62PX') + .. code-block:: c + + static struct splash_location default_splash_locations[] = { + { + .name = "sf", + .storage = SPLASH_STORAGE_SF, + .flags = SPLASH_STORAGE_RAW, + .offset = 0x700000, + }, + { + .name = "mmc", + .storage = SPLASH_STORAGE_MMC, + .flags = SPLASH_STORAGE_FS, + .devpart = "1:1", + }, + }; - 2. Enable the A53 SPL splash screen related configurations in the |__PART_FAMILY_DEVICE_NAMES__| defconfig by referring to below patches and files: + 4. If a different boot media other than mmc is used for storing splash, then update the + splash-related env variables in board.env file present at :file:`board/ti//.env` - * `configs: am62px: Enable A53 splashscreen `_ - * `Splash screen config fragment for AM62x and AM62P `_ + The default splash environment variables for AM62PX are set in :file:`board/ti/am62px/am62px.env`: + + .. code-block:: text + + splashfile=ti_logo_414x97_32bpp.bmp.gz + splashimage=0x80200000 + splashpos=m,m .. ifconfig:: CONFIG_part_variant in ('AM62X') - 2. Enable the A53 SPL splash screen related configurations in the |__PART_FAMILY_DEVICE_NAMES__| defconfig by referring to below patches and files: + 1. Add video driver and panel node in the dts file by referring following patches: + + * `arm: dts: k3-am625-sk-u-boot: Add panel device-tree node `_ + + 2. Enable the A53 SPL splash screen related configurations in the |__PART_FAMILY_DEVICE_NAMES__| defconfig by referring to below patches and files: + + * `configs: am62x_evm_a53_defconfig: Enable A53 splashscreen at U-Boot SPL `_ + * `Splash screen config fragment for AM62x and AM62P `_ + + 3. To enable different boot media for splash, define splash file locations struct in the board file present at :file:`board/ti//evm.c` + + 4. If a different boot media other than mmc is used for storing splash, then update the splash-related env variables in board.env file present at :file:`board/ti//.env` + +.. ifconfig:: CONFIG_part_variant in ('J722S') + + 1. Config fragments select the panel-specific device-tree overlays; see + `Panel-specific config fragments`_ for details. + + 2. Enable the A53 SPL splash screen related configurations. The :file:`configs/j722s_evm_a53_defconfig` + already includes the splash screen config fragment, which enables splash screen by default. + For custom boards, refer to the following file: + + * `Splash screen config fragment `_ + + 3. To enable different boot media for splash, define splash file locations struct in the board file + present at :file:`board/ti//evm.c` + + J722S supports two splash storage locations: SPI-NOR flash (raw at offset ``0x700000``) and + MMC FAT filesystem, defined in :file:`board/ti/j722s/evm.c`: + + .. code-block:: c + + static struct splash_location default_splash_locations[] = { + { + .name = "sf", + .storage = SPLASH_STORAGE_SF, + .flags = SPLASH_STORAGE_RAW, + .offset = 0x700000, + }, + { + .name = "mmc", + .storage = SPLASH_STORAGE_MMC, + .flags = SPLASH_STORAGE_FS, + .devpart = "1:1", + }, + }; + + 4. If a different boot media other than mmc is used for storing splash, then update the + splash-related env variables in board.env file present at :file:`board/ti//.env` + + The default splash environment variables for J722S are set in :file:`board/ti/j722s/j722s.env`: + + .. code-block:: text + + splashfile=ti_logo_414x97_32bpp.bmp.gz + splashimage=0x80200000 + splashpos=m,m + +.. ifconfig:: CONFIG_part_variant in ('AM62LX') + + 1. The :file:`configs/am62lx_evm_dsi_rpi_panel.config` fragment selects the DSI panel overlay; + see `Panel-specific config fragments`_ for details. + + 2. Enable the A53 SPL splash screen related configurations. The :file:`configs/am62lx_evm_defconfig` + does not include the splash screen config fragment by default; pass the required fragments at + build time. For custom boards, refer to the following files: + + * `Splash screen config fragment `_ + * `AM62LX DSI panel config fragment `_ + + 3. To enable different boot media for splash, define splash file locations struct in the board file + present at :file:`board/ti//evm.c` + + AM62LX supports only MMC FAT filesystem as the splash storage location, defined in + :file:`board/ti/am62lx/evm.c`: - * `configs: am62x_evm_a53_defconfig: Enable A53 splashscreen at U-Boot SPL `_ - * `Splash screen config fragment for AM62x and AM62P `_ + .. code-block:: c + + static struct splash_location default_splash_locations[] = { + { + .name = "mmc", + .storage = SPLASH_STORAGE_MMC, + .flags = SPLASH_STORAGE_FS, + .devpart = "1:1", + }, + }; + + 4. If a different boot media other than mmc is used for storing splash, then update the + splash-related env variables in board.env file present at :file:`board/ti//.env` + + The default splash environment variables for AM62LX are set in :file:`board/ti/am62lx/am62lx.env`. + Note that AM62LX uses a different DDR load address for the splash image: + + .. code-block:: text + + splashfile=ti_logo_414x97_32bpp.bmp.gz + splashimage=0x82200000 + splashpos=m,m .. note:: @@ -249,9 +373,6 @@ To enable splash screen on custom board based on |__PART_FAMILY_DEVICE_NAMES__| CONFIG_VIDEO_BMP_GZIP=y CONFIG_VIDEO_LOGO=y -3. To enable different boot media for splash, define splash file locations struct in the board file present at :file:`board/ti//evm.c` -4. If a different boot media other than mmc is used for storing splash, then update the splash-related env variables in board.env file present at :file:`board/ti//.env` - Refer section `Display custom logo as splash screen`_ to know more about splash file location struct and env variables. @@ -291,6 +412,7 @@ Run splash screen using OSPI NOR proper. .. important:: + OSPI NOR doesn't support displaying gzip bmp image. Display RLE compressed image @@ -354,7 +476,7 @@ Flicker free display across boot stages and Linux Kernel status = "disabled"; }; -5. In case a custom bootloader or a different board is used that doesn't support the aforementioned dynamic node update, then the simple-framebuffer node can be defined manually in the board device-tree file under the chosen node as shown below : +5. In case a custom bootloader or a different board is used that doesn't support the aforementioned dynamic node update, then the simple-framebuffer node can be defined manually in the board device-tree file under the chosen node. .. ifconfig:: CONFIG_part_variant in ('AM62X') @@ -414,6 +536,145 @@ If the user wants to keep the boot animation alive until the display server star The above option is enabled by default in the SDK, The user will need to disable it manually if they desire a persistent splash screen and they are not using the DRM fbdev emulation feature. +Panel-specific config fragments +------------------------------- +In addition to the base :file:`configs/am62x_a53_splashscreen.config`, pass panel-specific config +fragments to select the correct device-tree overlay and display pipeline drivers. + +.. ifconfig:: CONFIG_part_variant in ('AM62PX') + + .. list-table:: + :header-rows: 1 + :widths: 35 65 + + * - Panel + - Config fragments required + * - OLDI Microtips MF101HIE + - :file:`configs/am62p5_j722s_evm_oldi-microtips-mf101hie-panel.config` + * - DSI Raspberry Pi 7-inch + - :file:`configs/k3_a53_dsi.config` :file:`configs/am62p5_evm_dsi_rpi_panel.config` + +.. ifconfig:: CONFIG_part_variant in ('J722S') + + .. list-table:: + :header-rows: 1 + :widths: 35 65 + + * - Panel + - Config fragments required + * - OLDI Microtips MF101HIE + - :file:`configs/am62p5_j722s_evm_oldi-microtips-mf101hie-panel.config` + * - DSI Raspberry Pi 7-inch + - :file:`configs/k3_a53_dsi.config` :file:`configs/j722s_evm_dsi_rpi_panel.config` + * - eDP + - :file:`configs/k3_a53_dsi.config` :file:`configs/j722s_evm_a53_edp.config` + +.. ifconfig:: CONFIG_part_variant in ('AM62LX') + + .. list-table:: + :header-rows: 1 + :widths: 35 65 + + * - Panel + - Config fragments required + * - DSI Raspberry Pi 7-inch + - :file:`configs/am62x_a53_splashscreen.config` :file:`configs/k3_a53_dsi.config` :file:`configs/am62lx_evm_dsi_rpi_panel.config` + +Build U-Boot with splash screen enabled +--------------------------------------- +The splash screen is enabled by passing the appropriate config fragment(s) alongside the platform +defconfig at the ``make`` configuration step. The second ``make`` invocation compiles the binaries. + +.. ifconfig:: CONFIG_part_variant in ('AM62PX') + + :file:`configs/am62px_evm_a53_defconfig` already includes :file:`configs/am62x_a53_splashscreen.config`, + so a standard A53 build has splash screen enabled. To use a specific panel, apply the corresponding + config fragment: + + .. code-block:: console + + $ export UBOOT_DIR= + $ export TI_LINUX_FW_DIR= + $ export TFA_DIR= + $ export OPTEE_DIR= + $ cd $UBOOT_DIR + + # OLDI panel + $ make ARCH=arm CROSS_COMPILE="$CROSS_COMPILE_64" am62px_evm_a53_defconfig am62p5_j722s_evm_oldi-microtips-mf101hie-panel.config O=$UBOOT_DIR/out/a53 + $ make ARCH=arm CROSS_COMPILE="$CROSS_COMPILE_64" CC="$CC_64" BL31=$TFA_DIR/build/k3/lite/release/bl31.bin TEE=$OPTEE_DIR/out/arm-plat-k3/core/tee-pager_v2.bin O=$UBOOT_DIR/out/a53 BINMAN_INDIRS=$TI_LINUX_FW_DIR + + # DSI Raspberry Pi 7-inch panel + $ make ARCH=arm CROSS_COMPILE="$CROSS_COMPILE_64" am62px_evm_a53_defconfig k3_a53_dsi.config am62p5_evm_dsi_rpi_panel.config O=$UBOOT_DIR/out/a53 + $ make ARCH=arm CROSS_COMPILE="$CROSS_COMPILE_64" CC="$CC_64" BL31=$TFA_DIR/build/k3/lite/release/bl31.bin TEE=$OPTEE_DIR/out/arm-plat-k3/core/tee-pager_v2.bin O=$UBOOT_DIR/out/a53 BINMAN_INDIRS=$TI_LINUX_FW_DIR + +.. ifconfig:: CONFIG_part_variant in ('J722S') + + :file:`configs/j722s_evm_a53_defconfig` already includes :file:`configs/am62x_a53_splashscreen.config`, + so a standard A53 build has splash screen enabled. To use a specific panel, apply the corresponding + config fragment: + + .. code-block:: console + + $ export UBOOT_DIR= + $ export TI_LINUX_FW_DIR= + $ export TFA_DIR= + $ export OPTEE_DIR= + $ cd $UBOOT_DIR + + # OLDI panel + $ make ARCH=arm CROSS_COMPILE="$CROSS_COMPILE_64" j722s_evm_a53_defconfig am62p5_j722s_evm_oldi-microtips-mf101hie-panel.config O=$UBOOT_DIR/out/a53 + $ make ARCH=arm CROSS_COMPILE="$CROSS_COMPILE_64" CC="$CC_64" BL31=$TFA_DIR/build/k3/lite/release/bl31.bin TEE=$OPTEE_DIR/out/arm-plat-k3/core/tee-pager_v2.bin O=$UBOOT_DIR/out/a53 BINMAN_INDIRS=$TI_LINUX_FW_DIR + + # DSI Raspberry Pi 7-inch panel + $ make ARCH=arm CROSS_COMPILE="$CROSS_COMPILE_64" j722s_evm_a53_defconfig k3_a53_dsi.config j722s_evm_dsi_rpi_panel.config O=$UBOOT_DIR/out/a53 + $ make ARCH=arm CROSS_COMPILE="$CROSS_COMPILE_64" CC="$CC_64" BL31=$TFA_DIR/build/k3/lite/release/bl31.bin TEE=$OPTEE_DIR/out/arm-plat-k3/core/tee-pager_v2.bin O=$UBOOT_DIR/out/a53 BINMAN_INDIRS=$TI_LINUX_FW_DIR + + # eDP + $ make ARCH=arm CROSS_COMPILE="$CROSS_COMPILE_64" j722s_evm_a53_defconfig k3_a53_dsi.config j722s_evm_a53_edp.config O=$UBOOT_DIR/out/a53 + $ make ARCH=arm CROSS_COMPILE="$CROSS_COMPILE_64" CC="$CC_64" BL31=$TFA_DIR/build/k3/lite/release/bl31.bin TEE=$OPTEE_DIR/out/arm-plat-k3/core/tee-pager_v2.bin O=$UBOOT_DIR/out/a53 BINMAN_INDIRS=$TI_LINUX_FW_DIR + +.. ifconfig:: CONFIG_part_variant in ('AM62LX') + + AM62LX does not include splash screen configs in the base defconfig. All required config + fragments must be passed explicitly alongside the defconfig: + + .. code-block:: console + + $ export UBOOT_DIR= + $ export TI_LINUX_FW_DIR= + $ export TFA_DIR= + $ export OPTEE_DIR= + $ cd $UBOOT_DIR + + # DSI Raspberry Pi 7-inch panel + $ make CROSS_COMPILE="$CROSS_COMPILE_64" am62lx_evm_defconfig am62x_a53_splashscreen.config k3_a53_dsi.config am62lx_evm_dsi_rpi_panel.config O=$UBOOT_DIR/out + $ make CROSS_COMPILE="$CROSS_COMPILE_64" \ + BL1=$TFA_DIR/build/k3low/am62lx/release/bl1.bin \ + BL31=$TFA_DIR/build/k3low/am62lx/release/bl31.bin \ + BINMAN_INDIRS=$TI_LINUX_FW_DIR \ + TEE=$OPTEE_DIR/out/arm-plat-k3/core/tee-pager_v2.bin \ + O=$UBOOT_DIR/out + + .. warning:: + + When U-Boot splash screen is enabled on |__PART_FAMILY_DEVICE_NAMES__|, Linux boot will + hang unless the display pipeline drivers are built into the kernel (``=y``) rather than + compiled as modules (``=m``). Modules are loaded too late in the boot sequence to take + over the display handed off by U-Boot. + + Apply the following changes to :file:`arch/arm64/configs/defconfig` in Linux: + + .. code-block:: kconfig + + CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=y + CONFIG_DRM=y + CONFIG_DRM_PANEL_SIMPLE=y + CONFIG_DRM_SIMPLE_BRIDGE=y + CONFIG_DRM_TOSHIBA_TC358762=y + CONFIG_DRM_CDNS_DSI=y + CONFIG_DRM_TIDSS=y + CONFIG_PHY_CADENCE_DPHY=y + Disabling splash screen ----------------------- To disable splash screen use `configs/am62x_evm_prune_splashscreen.config `__ fragment while building u-boot with corresponding a53 defconfig.