This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM625: AM625: Display splash screen image in u-boot of Custom AM625 Board

Part Number: AM625

Tool/software:

I am trying to display a splash screen on an AM6252 custom board.
However, when I attempt to display the splash screen, a "Synchronous Abort" error occurs.
I would like to understand the cause of the "Synchronous Abort" and would appreciate your assistance.

Unlike the EVM, I am using a single-port LVDS panel.

I checked the defconfig and device tree using the links below:

https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/latest/exports/docs/linux/Foundational_Components/U-Boot/UG-Splash-Screen.html#display-custom-logo-as-splash-screen 

https://git.ti.com/cgit/ti-u-boot/ti-u-boot/commit/?h=ti-u-boot-2024.04&id=9328edb265e25a3fdfbad5d8b11678869fe8eea7

The device tree I modified for using the splash screen in U-Boot is as follows:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
panel_lvds: panel-lvds {
bootph-pre-ram;
compatible = "simple-panel";
status= "okay";
width-mm = <154>;
height-mm = <86>;
data-mapping = "vesa-24";
panel-timings {
bootph-pre-ram;
clock-frequency = <5120000>;
hactive = <1024>;
vactive = <600>;
hback-porch = <160>;
hfront-porch = <160>;
vback-porch = <23>;
vfront-porch = <12>;
hsync-len = <108>;
vsync-len = <3>;
de-active = <1>;
};
};
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Interestingly, the splash screen works fine in the Linux kernel, but it does not work in U-Boot.

To verify in U-Boot, I used the following command line, which resulted in a "Synchronous Abort" error.

Fullscreen
1
2
ext4load mmc 0:9 $loadaddr intellian.bmp
bmp display $loadaddr m m
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

For debugging, I enabled debug prints, and the logs are as follows:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
=> bmp display $loadaddr m m
[common/bmp.c : 125] bmp_display
[common/bmp.c : 136] bmp_display map_to_sysmem complete
dss@30200000 (dss_plane_init:714): vidl1: bufsize 2560, buf_threshold 2559/1280, mflag threshold 1706/853 preload 1280
dss@30200000 (dss_plane_init:714): vid: bufsize 2560, buf_threshold 2559/1280, mflag threshold 1706/853 preload 1280
dss@30200000 (dss_vp_set_clk_rate:613): vp0: new rate 1125000000 Hz (requested 1120000000 Hz)
dss@30200000 (dss_vp_set_gamma:409): dss_vp_set_gamma: hw_videoport 0, lut len 0, hw len 256
dss@30200000 (dss_vp_write_gamma_table:389): dss_vp_write_gamma_table: hw_videoport 0
dss@30200000 (tidss_drv_probe:902): DSS fclk 250000000 Hz
"Synchronous Abort" handler, esr 0x96000044
elr: 000000008085a160 lr : 000000008085a0fc (reloc)
elr: 00000000fff5d160 lr : 00000000fff5d0fc
x0 : 00000000fdef9650 x1 : ffffffffff700000
x2 : ffffffffff958000 x3 : 0000000000000000
x4 : 0000000000000000 x5 : 0000000000000000
x6 : 00000000fdef9650 x7 : 0000000000000000
x8 : 000000000000000c x9 : 0000000000000008
x10: 00000000ffffffe8 x11: 0000000000000006
x12: 000000000001869f x13: 0000000000000000
x14: 0000000000000000 x15: 0000000000000000
x16: 00000000fff5d190 x17: 0000000000000000
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

For reference, the relevant part of the device tree used in the kernel is shown below.
It works normally in the kernel.

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
&dss {
status = "okay";
};
&dss_ports {
#address-cells = <1>;
#size-cells = <0>;
/* VP1: LVDS Output (OLDI TX 0) */
lvds_dss: port@0 {
reg = <0>;
oldi_out0: endpoint {
remote-endpoint = <&lcd_in0>;
};
};
};
lcd {
compatible = "gwt,gwt-7.0-1024600-dwmc-55";
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Additionally, I added the panel timing in panel-simple.c as shown below:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static const struct display_timing gwt_gwt70_1024600_dwmc55_timing = {
.pixelclock = { 40800000, 51200000, 67200000 },
.hactive = { 1024, 1024, 1024 },
.hfront_porch = { 16, 160, 216 },
.hback_porch = { 160, 160, 160 },
.hsync_len = { 1, 108, 140 },
.vactive = { 600, 600, 600 },
.vfront_porch = { 1, 12, 127 },
.vback_porch = { 23, 23, 23 },
.vsync_len = { 1, 13, 20 },
.flags = DISPLAY_FLAGS_DE_HIGH,
};
static const struct panel_desc gwt_gwt70_1024600_dwmc55 = {
.timings = &gwt_gwt70_1024600_dwmc55_timing,
.num_timings = 1,
.bpc = 6,
.size = {
.width = 154,
.height = 86,
},
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

The kmsprint information when it works correctly in the kernel is as follows:

Fullscreen
1
2
3
4
5
6
root@AptusLx:~# kmsprint
Connector 0 (40) LVDS-1 (connected)
Encoder 0 (39) LVDS
Crtc 0 (38) 1024x600@54.42 51.200 1024/160/108/160/? 600/12/13/23/? 54 (54.42) 0x0 0x48
Plane 0 (31) fb-id: 48 (crtcs: 0) 0,0 1024x600 -> 0,0 1024x600 (AR12 AB12 RA12 RG16 BG16 AR15 AB15 AR24 AB24 RA24 BA24 RG24 BG24 AR30 AB30 XR12 XB12 RX12 XR15 XB15 XR24 XB24 RX24 BX24 XR30 XB30 YUYV UYVY NV12)
FB 48 1024x600
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • Hi,

    Let me confirm with our developer and get back to you. As far as I know, the driver only supports dual link mode and I am not sure how to configure in single mode at Uboot level.

    Regards,
    Krunal

  • Dear Krunal,

    I looked into the driver code because a Synchronous Abort occurred.
    I confirmed that the driver code takes dual link into account.
    However, this does not seem to be the cause of the abort issue.

    It seems that I may have made a mistake somewhere.

    Could you please check with the developer to confirm?

    I look forward to your response.

    Best regards,
    Seungmin Nam.

  • The developer is currently out of office, please expect a response by next week. 

  • Dear Divyansh,

    Thank you for the update. However, it is quite urgent for me to get assistance this week as it impacts our current progress.
    Is there any way to arrange support or guidance sooner?
    Your help would be greatly appreciated!

    Regards,
    Seungmin Nam.

  • Hi,

    We are currently only supporting dual-link LVDS in U-Boot stage. Addition of support for single-link LVDS is in our to-do list and we will probably have this feature in the future, but I do not have any patch to help with it at this moment.

    Regards

    Divyansh