Uboot and Kernel splash screen in touchscreen

Hello.

I am trying to setup a splash screen on Uboot and in kernel bootup.

As for the Kernel:

I followed the steps on how to set my splash screen. I deactivated the console FB since I don’t need it. Actually I want to get rid of it so that came as a bonus.

Although, my image did not appear. The screen just goes black (backlight on) and chromium appears when my service deploys it as normal. I activated the option in menuconfig as well (Custom logo 224 ascii .ppm) but I can never see the splash screen. Did I miss anything?

As for the UBoot

I noticed in another question that I had to set the env. variable “panel” to disable autodetect (which was wrong for my display). I got it right: wvga-rgb (800x480). Unfortunately, the backlight does not even turn on - not even a toradex splash screen like I used to get in hdmi monitor.
Do I need to turn on backlight in UBoot? How do I do it? I am connected using the Unif. Touch Display port.

Another question: Can I change uboot configurations in yocto? I would like to set some uboot environmental variables through yocto and change the splash screen in it too.

Regards,

Hi,

As for the Kernel:

I followed the steps on how to set my splash screen. I deactivated the console FB since I don’t need it. Actually I want to get rid of it so that came as a bonus.

Although, my image did not appear. The screen just goes black (backlight on) and chromium appears when my service deploys it as normal. I activated the option in menuconfig as well (Custom logo 224 ascii .ppm) but I can never see the splash screen. Did I miss anything?

I also had this issue. My work around was to leave framebuffer console enabled in kernel config and just set invalid console to console kernel parameter as described here. Note that removing console parameter will fallback to the framebuffer console. You can also disable the blinking cursor with vt.global_cursor_default=0 kernel parameter as stated here.

I am still curious why it doesn’t work if you disable framebuffer console in kernel config.

Another question: Can I change uboot configurations in yocto?
I would like to set some uboot environmental variables through yocto and change the splash screen in it too.

Yes you can. Modify u-boot sources to suit your needs (I prefer to do this outside of OE) , create patch and add patch to your layer in yocto. For reference check out this videos.

Hi Mlinar

Thank you for sharing your experience.

In the meantime i managed to successfully build an image with a kernel splash screen. I messed up the setup variable in UBoot and that’s why I was having issues.

On the uboot I will follow your guidelines. I created some patches for the kernel already (including the desired ASCII image - 4 MB patch file :D) so it should be easy to do.

Again, thanks for your help and time.

Regards

Joao

Ive been exploring uboot sources and I don’t see anything in menuconfig that clearly makes what I want.

Did anyone successfully turn on a touchscreen (and activated splash) in uboot? In my case, only works if I connect a HDMI screen. In touchscreen, not even the backlight comes on. Does anyone have any experience on this?

EDIT: So far i’ve tried to

  • change apalis_imx6.c backlight from 1 to 0 (because it mentions 1 is for LG HD and 0 for EDT) no change
  • Created new display entry on struct for my display no change - but it gets recognized in variable panel
  • removed ifdef ipu_v3 to init display all the time - no change (defconfig has ipuv3_config as expected)

Still nothing on display. I’ve checked the power input and I get 5V, but no output. What can I do to activate the output of apalis in uboot?

While this seems to work on Colibri iMX6 something about it is broken on Apalis iMX6. I’m looking at it right now.

As an update, I managed to power up the backlight so far, but that’s it.

Here’s the respective patch I applied to apalis_imx6.c

@@ -596,7 +596,7 @@
 	reg |= IOMUXC_GPR2_DATA_WIDTH_CH0_24BIT;
 	writel(reg, &iomux->gpr[2]);
 	gpio_direction_output(RGB_BACKLIGHT_GP, 1);
-	gpio_direction_output(RGB_BACKLIGHTPWM_GP, 0);
+	gpio_direction_output(RGB_BACKLIGHTPWM_GP, 1);
 	gpio_direction_output(RGB_BACKLIGHTPWM_OE, 0);
 }
 
@@ -606,7 +606,7 @@
 		rgb_pads,
 		ARRAY_SIZE(rgb_pads));
 	gpio_direction_output(RGB_BACKLIGHT_GP, 1);
-	gpio_direction_output(RGB_BACKLIGHTPWM_GP, 0);
+	gpio_direction_output(RGB_BACKLIGHTPWM_GP, 1);
 	gpio_direction_output(RGB_BACKLIGHTPWM_OE, 0);
 }

@@ -752,7 +771,7 @@
 	imx_iomux_v3_setup_multiple_pads(backlight_pads,
 					 ARRAY_SIZE(backlight_pads));
 	/* use 0 for EDT 7", use 1 for LG fullHD panel */
-	gpio_direction_output(RGB_BACKLIGHTPWM_GP, 0);
+	gpio_direction_output(RGB_BACKLIGHTPWM_GP, 1);
 	gpio_direction_output(RGB_BACKLIGHTPWM_OE, 0);
 	gpio_direction_output(RGB_BACKLIGHT_GP, 1);
 }

Another note: I noticed on the function setup_display for apalis and colibri are virtually the same with the exception of backlight. Both modules have the DI0 pins in the setup but shouldn’t apalis use DI1 instead?

EDIT: I’ve tried this and it didnt change anything. I even put both masks on - for DI1´ and DI0´ and got no progress. Also tried to apply the LDB patch mlinar mentioned and changed nothing. At the moment I only have access to backlight. Is there any update on this issue? Thank you for your time

Hi Joao

I tried to reproduce this here.

With my EDT 7" display I do get (the Toradex) splash screen out of the box but with a EDT 5.7" I don’t get any sensible output on the display. Both are connected to the Unified Display Connector.

Surprisingly the 5.7" display looks at the RESET_MOCI_EDT# signal while the 7" display does not.
Could you try to test if that is the issue you now have by e.g. releasing RESET_MOCI# with the following command in the U-Boot console:

gpio clear 28

Max

Hi max. As soon as I hit that command, I get a black screen. No toradex logo. but that’s progress alright

Setting it back to 1 I get the backlight only again so you got something here. Thank you!

EDIT: I reverted all clock related changes i’ve made (only kept the backlight + new display definition changes) and I get backlight + blackscreen now.

Here are the commands I tried with a random image and following your guide

U-Boot 2016.11-2.7.4+g1b121c6 (Dec 19 2017 - 11:20:56 +0000)

CPU:   Freescale i.MX6D rev1.5 at 792 MHz
Reset cause: WDOG
I2C:   ready
DRAM:  512 MiB
PMIC:  device id: 0x10, revision id: 0x21, programmed
MMC:   FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2
auto-detected panel wvga-rgb-milenio3
Display: wvga-rgb-milenio3 (800x480)
In:    serial
Out:   serial
Err:   serial
Model: Toradex Apalis iMX6 Dual 512MB V1.1A, Serial# 05067832
Net:   using PHY at 7
FEC [PRIME]
Hit any key to stop autoboot:  0
Apalis iMX6 #
Apalis iMX6 #
Apalis iMX6 #
Apalis iMX6 #
Apalis iMX6 #
Apalis iMX6 #
Apalis iMX6 #
Apalis iMX6 #
Apalis iMX6 #
Apalis iMX6 #
Apalis iMX6 #
Apalis iMX6 #
Apalis iMX6 #
Apalis iMX6 #
Apalis iMX6 # gpio clear 28
gpio: pin 28 (gpio 28) value is 0
Apalis iMX6 # tftp ${loadaddr} accuracy-and-precision-test-1-en.png.bmp
Using FEC device
TFTP from server 192.168.2.87; our IP address is 192.168.2.83
Filename 'accuracy-and-precision-test-1-en.png.bmp'.
Load address: 0x12000000
Loading: ##################################################  376.1 KiB
         2.5 MiB/s
done
Bytes transferred = 385078 (5e036 hex)
Apalis iMX6 # bmp display ${loadaddr}
Apalis iMX6 # clrlogo
Apalis iMX6 # bmp display ${loadaddr}

OK this is weird! According to the datasheet, it’s the 26 pin that’s connected to the Unif. Display Port and not the 28. I know there’s some magic from the MXM3 to gpio pin number but in the first bank should be 26-26 and 28-28. What’s the relation of RESET_MICO# to RESET_MOCI_EDT#?

Hi

According to the datasheet, it’s the 26 pin that’s connected to the Unif. Display Port and not the 28.
Have a look at ‘Figure 5: nRESET_OUT circuit’ in the datasheet. gpio28 corresponds to the ‘ENET_TX_EN’ ball.

What’s the relation of RESET_MICO# to RESET_MOCI_EDT#
On the Ixora there is a 0 Ohm resistor between these two nets. Have a look at the schematic.


So, now that we now the cause of your issue you could either:

  • remove R82 from your Ixora
  • change apalis_imx6.c so that the ball ‘ENET_TX_EN’ is muxed as GPIO and set to ouput ‘0’

Note that we don’t release RESET_MOCI in U-Boot because during boot we need to pull it low again when initalizing PCIe. If you release it, it will go to 0 for 100ms during boot when the PCIe driver is initalized to meet timing restrictions of the PCIe switch on the Apalis Evaluation Board. I do not expect any adverse effects though.

Max

Hi Max,

Thanks once again for your support.

I managed to mux the ball as GPIO and when it boots now it does the trick automaticly, as expected.

Although, I would like to mention that i still do not have a splashscreen logo. What could be the reason behind it? On u-boot, i changed the following:

  • New UART (UART4 instead of UART1)

  • BACKLIGHTPWM_GP from 0 to 1 (patch at top)

  • New display definition down below

     .bus	= -1,
     .addr	= 0,
     .pixfmt	= IPU_PIX_FMT_RGB24,
     .detect= detect_default,
     .enable	= enable_rgb,
     .mode	= {
     	.name           = "wvga-rgb-milenio3",
     	.refresh        = 60,
     	.xres           = 800,
     	.yres           = 480,
     	.pixclock       = 30066,
     	.left_margin    = 40,
     	.right_margin   = 88,
     	.upper_margin   = 33,
     	.lower_margin   = 10,
     	.hsync_len      = 128,
     	.vsync_len      = 2,
     	.sync           = 0x40000000,
     	.vmode          = FB_VMODE_NONINTERLACED
    

    } }, {

Sync was 0 but since in Linux I have inverted clock I checked the value to it and place it there too. I will try with sync = 0 and edit the results

EDIT: No difference. Also worth mentioning that my Linux splash screen sets up way faster now. What can be the reason that I don’t have a splash in uboot?

EDIT2: Setting panel to wvga-rgb works. I had something wrong with my definition. All done. Thank you very much and Happy Holidays!