SPRADK8 February   2025 AM62P

 

  1.   1
  2.   Abstract
  3.   Trademarks
  4. 1Introduction
  5. 2Hardware Used
    1. 2.1 AM62Px Processor
    2. 2.2 SK-LCD1
    3. 2.3 Display Subsystem on AM62P
  6. 3Early Splash-Screen Architecture
    1. 3.1 Boot Stages on AM62P
    2. 3.2 Flicker-Free Transition
  7. 4Flicker-Free Transition From SPL to U-Boot
    1. 4.1 Steps to Test
    2. 4.2 Measurements
  8. 5Flicker-Free Transition From SBL to Linux Kernel
    1. 5.1 Steps to Test
    2. 5.2 Measurements
  9. 6Results

Steps to Test

This section describes the steps required to achieve an early splash screen, along with flicker-free transition from the SBL stage to the Linux Kernel. The DSS sharing example in the MCU+ SDK integrates early splash of image along with SBL on the OSPI boot media, Device Manager, and Inter-processor communication functionality. The bootloader, IPC, and Display run on separate tasks. The Display task displays a splash image with alpha blending and finally switches to the display sharing task, where telltale frames quickly move back and forth. Falcon boot is used in the example, which means the intermediate U-Boot stage is skipped and SBL directly boots the Linux image. This DSS example, with a few modifications is used for demonstration.


AM62P Splash Timings

Figure 5-1 Splash Timings
  • Download the processor SDK and use the ti-linux-kernel directory under /board-support to make the modifications as described in the following steps. Generate the Device Tree Blob (DTB) and image file after the modifications to ti-linux-kernel. These files are later used to create the linux.appimage, which is used in the RTOS example to run Linux on an A53 core.
  • The linux.appimage is built using Falcon boot mode. Hence, include the bootargs information in the k3-am62p5-sk.dts file under the chosen node:
    bootargs = "console=ttyS2,115200n8 earlycon=ns16550a,mmio32,0x02800000 root=/dev/mmcblk1p2 rw rootfstype=ext4 rootwait";
  • To make sure that the splash screen remains persistent while the Linux Kernel boots up, ti-u-boot dynamically updates the Linux Kernel device-tree with framebuffer region meta-data, marking the region as reserved in the Linux device tree as follows:
    framebuffer: framebuffer@ff700000 {
         reg = <0x00 0xff700000 0x00 0x008ca000>;
         no-map;
    };
  • Set the status of the simple-framebuffer node to "okay" by manually modifying the board device-tree file under the chosen node as shown in the following code:
    framebuffer0: framebuffer@0 {
          compatible = "simple-framebuffer";
          power-domains = <&k3_pds 186 TI_SCI_PD_EXCLUSIVE>,
                          <&k3_pds 243 TI_SCI_PD_EXCLUSIVE>,
                          <&k3_pds 244 TI_SCI_PD_EXCLUSIVE>;
          clocks = <&k3_clks 186 6>,
                   <&dss0_vp1_clk>,
                   <&k3_clks 186 2>;
          display = <&dss0>;
          reg = <0x00 0xff700000 0x00 0x008ca000>;
          width = <1920>;
          height = <1200>;
          stride = <(1920 * 4)>;
          format = "x8r8g8b8";
     };
  • To keep the boot animation alive until the display server starts up, the Direct Rendering Manager (DRM) framebuffer device emulation feature needs to be manually disabled by removing the following config option in arch/arm64/configs/defconfig like mentioned below: # CONFIG_DRM_FBDEV_EMULATION is not set
  • After the previously shown changes in Linux directory, build the Linux Kernel, to create the DTB and Kernel image.
  • Apply the overlay file k3-am62p5-sk-microtips-mf101hie-panel.dtbo onto the DTB file to support display on an OLDI panel. Use the following command:
    fdtoverlay -i ./arch/arm64/boot/dts/ti/k3-am62p5-sk.dtb ./arch/arm64/boot/dts/ti/k3-am62p5-sk-microtips-mf101hie-panel.dtbo -o ./../../board-support/prebuilt-images/am62pxx-evm-display-cluster/k3-am62p.dtb
  • Copy the following two files into the /board-support/prebuilt-images/am62pxx-evm-display-cluster folder:
    1. k3-am62p.dtb (created in the previous step)
    2. Image (arch/arm64/boot/)
  • Remove the usage and definition of DispApp_splashThread() and DispApp_displayShareThread() in the examples/drivers/dss/dss_display_share/dss_display_share.c file
    AM62P Code Changes 1Figure 5-2 Code Changes 1
    AM62P Code Changes 2Figure 5-3 Code Changes 2
    AM62P Code Changes 3Figure 5-4 Code Changes 3
  • Compile the images in tools/boot/sbl_prebuilt/am62px-sk/default_sbl_ospi_linux_hs_fs_splash_screen.cfg
  • Flash the built images into the OSPI flash using the universal asynchronous receiver-transmitter (UART) TI UniFlash tool.
  • For fast rendering of the Linux GUI application, build and install ti-img-rogue-driver using the top-level makefile in SDK. Use the following steps:
    1. Run command:
      make ti-img-rogue-driver (Value RGX_BVNC="36.53.104.796" in Rules.make)
    2. Insert the SD card and run the following command:
      sudo make ti-img-rogue-driver_install DESTDIR=/media/aparna/root
  • Switch to OSPI NOR boot mode to view the demonstration.
    BOOTMODE [ 8 : 15 ] (SW5) = 0000 0000
    BOOTMODE [ 0 : 7 ] (SW4) = 1100 1110