Last edited one week ago

Visual troubleshooting grid


Some typical issues related to the visual domain are listed below. Solutions or debugging methods are proposed for these issues.

If your issue is not listed, try also looking in the articles in the visual or troubleshooting grids categories.


Symptom Resolution
DRM/KMS
./myQtApplication
Could not queue DRM page flip! (Permission denied)
Could not queue DRM page flip! (Permission denied)

The psplash-drm userland splash screen is running and is then the DRM master, avoiding other DRM applications to access to DRM/KMS. Stop this psplash-drm application with the command below before running your use case:

psplash-drm-quit

Note: You may need to enter "export QT_QPA_EGLFS_ALWAYS_SET_MODE=1" before running your Qt application. For further information, refer to the Qt documentation.

echo 32 > /sys/class/backlight/5a000000.dsi.0/brightness
sh: write error: No such device or address

On this board, the panel backlight is related to a MIPI® DSI panel. This backlight can be modified only if the panel is already powered on. That is probably not the case here.
The panel must restart before modifying its backlight. To do so, start any display-related application. For further information, refer to DRM KMS overview and Wayland Weston overview articles.

I/TC: Resumed
E/TC:0   tzc_it_handler:79 TZC permission failure
E/TC:0   dump_fail_filter:417 Overrun violation on filter 0
E/TC:0   dump_fail_filter:420 Permission violation on filter 0
E/TC:0   dump_fail_filter:425 Violation @0xdce1ff80, non-secure
unprivileged read, AXI ID 403
E/TC:0   Panic at core/arch/arm/plat-stm32mp1/plat_tzc400.c:84
<tzc_it_handler>
E/TC:0   TEE load address @ 0xde000000

This trace indicates that the TZC internal peripheral is detecting a "permission violation" made by the master whose AXI ID is 0x403. It corresponds to the LTDC internal peripheral (LTDC NSAID=0b0011. For further information, refer to the STM32 reference manuals).
Some Linux® Kernel DRM/KMS module drivers are probably missing in the system. As there is probably a display splashscreen in U-Boot, the LTDC display internal peripheral is clocked and is running. When the user initiates the power sequence, as there is no DRM/KMS driver in the system, the display-related clocks are not switched off. The LTDC then continues to make erratic illegal accesses to the memory, that are catched by the TZC internal peripheral. OP-TEE/TZC detects this abnormal behavior and then stops the system and logs this trace.
To fix this issue, please update your Linux® Kernel configuration with all the missing drivers.

dmesg | grep -i ltdc
[  341.85] [drm] ltdc fifo underrun: please verify display mode
[ 1045.48] [drm] ltdc fifo underrun: please verify display mode

The "LTDC fifo underrun" messages occur when the LTDC input fifo is not filled fast enough. These messages may appear occasionally (during the display initialization for instance) and are often non-blocking. However, it happens that these messages are numerous, generating display problems like visual artifacts and this can come from:

  • the system configuration: maybe some parameters are missing or are incorrect in the DDR controller, the DDR driver or the AXI configuration
  • the system dynamic performance: maybe the dynamic voltage and frequency scaling (DVFS) policy is improper for the use case
  • a too high display pixel clock frequency due to a too important display resolution for the platform
  • a too complex display configuration using several LTDC "layers" for the display composition
  • a use case that is too “heavy” for the platform, using too much of the DDR bandwidth (high cpu load, large ethernet transfer, usb, gpu, npu...) and leaving too little DDR bandwidth for LTDC
  • a combination of the above cases

To fix this problem, check your DDR & AXI system parameters, adjust the DVFS policy, decrease the display resolution, use a single LTDC layer for the display composition, monitor the system with Linux monitoring tools and the DDR usage with DDRPERFM internal peripheral, "simplify" the use case...


GPU
[ 45.679109] Unhandled fault: imprecise external abort (0xc06) at 0xae1a0000
[ 45.684628] pgd = d1e98000
[ 45.687334] [ae1a0000] *pgd=d1e9f835, *pte=f8000747, *ppte=f8000c37
[ 45.693842] Unhandled fault: imprecise external abort (0xc06) at 0xae1a0000
[ 45.700480] pgd = d1dc0000
[ 45.703156] [ae1a0000] *pgd=00000000

Maybe the GPU reserved memory area in the kernel device tree is not aligned with the board DDR memory size. Have a look at the "gpu_reserved" entry in the kernel device tree, and update it if necessary.

Wayland / Weston
glmark2-es2-wayland 
[11380.091100] reserved_mem_unmap_user: vm_munmap failed
eglCreateWindowSurface failed with error: 0x3003
Error: eglCreateWindowSurface failed with error: 0x3003
Error: CanvasGeneric: Invalid EGL state
Error: main: Could not initialize canvas
weston-simple-egl
[11380.091100] reserved_mem_unmap_user: vm_munmap failed
has EGL_EXT_buffer_age and EGL_EXT_swap_buffers_with_damage
weston-simple-egl: ../git/clients/simple-egl.c:440: create_surface: 
  Assertion `ret == EGL_TRUE' failed.
Aborted (core dumped)
weston-simple-egl
has EGL_EXT_buffer_age and EGL_EXT_swap_buffers_with_damage
Segmentation fault (core dumped) 

Weston is using pixman software composition instead of GPU hardware composition. This may be because you have not accepted the EULA at the beginning of the build...

cat /etc/default/weston
WESTON_USER=weston
#Autogenerated
OPTARGS=--use-pixman

Please comment the "pixman" line in the file "/etc/default/weston"

cat /etc/default/weston
WESTON_USER=weston
#Autogenerated
#OPTARGS=--use-pixman
systemctl stop Weston-launch
Failed to stop Weston-launch.service: Unit Weston-launch.service not loaded.
systemctl stop Weston-graphical-session
Failed to stop Weston-graphical-session.service: Unit Weston-graphical-session.service not loaded.

Please remove the capital letter in the word Weston. The correct command is:

systemctl restart weston-graphical-session
weston-simple-egl
weston-simple-egl: ../weston-10.0.0/clients/simple-egl.c:852: 
main: Assertion `display.display' failed.
Aborted (core dumped)
glmark2-es2-wayland
Error: main: Could not initialize canvas

Weston is probably started with the "weston" user. The correct commands are:

su -l "weston" -c "weston-simple-egl"
su -l "weston" -c "glmark2-es2-wayland"
systemctl stop Weston@root.service
Failed to stop Weston.service: Unit Weston.service not loaded.
systemctl stop weston
Failed to stop weston.service: Unit weston.service not loaded.
systemctl stop weston-launch
Failed to stop weston-launch.service: Unit weston-launch.service not loaded.

Please use the full Weston service named "weston-graphical-session". The correct command is:

systemctl stop weston-graphical-session

Note: You can list all systemctl services with the following command:

systemctl list-units | grep -i weston 
weston-image mypicture.bmp
mypicture.bmp: unrecognized file header 0x42 0x4d 0x1e 0x51

"weston-image" small application supports only jpeg, png and webp image files. Please convert your ".bmp" image file into one of these supported image file formats.

Note: The official source code of "weston-image" is in the file image.c and the related error message is in image-loader.c.

su -l weston -c weston-screenshooter
weston_screenshooter@5: error 0: screenshooter failed: permission denied. Debug protocol must be enabled

The Weston debug tool weston-screenshooter works only with Weston in debug mode. Add the following line to the file named "/etc/default/weston" to enable the Weston debug mode:

OPTARGS=--debug

Find more details in How to make a screen capture in Weston article.

Note: The Weston debug mode will be taken into account after a stop/start of the Wayland Weston service, please refer to How to stop and start Weston article.


GStreamer
There may be a timestamping problem, or this computer is too slow.

This message is typically displayed when the GStreamer A/V sync drops some frames. This may be due to a decoder that is too slow, badly timestamped buffers, or a badly formed container (.ts, .3gp, .mp4, .avi, ...).
To proceed with investigations, refer to the article How to profile video framerate.

Could not create Wayland display

HDMI TV not connected, please connect it.

gst-play-1.0 /usr/local/myvideo.webm
Press 'k' to see a list of keyboard shortcuts.
Now playing /usr/local/myvideo.webm
WARNING Could not initialise Wayland output
WARNING debug information: ../gst-plugins-bad-1.20.1/ext/wayland/gstwaylandsink.c(368):
gst_wayland_sink_find_display (): /GstWaylandSink:waylandsink0:
Failed to create GstWlDisplay: 'Failed to connect to the wayland display '(default)

Weston is probably started with the "weston" user. The correct command is:

su -l "weston" -c "gst-play-1.0 /usr/local/myvideo.webm"
Could not load BMP file

Make sure the loader of the bmp file format, libpixbufloader-bmp.so, is present in /usr/lib/gdk-pixbuf-2.0/2.10.0/. Otherwise, remove /usr/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache, copy the libpixbufloader-bmp.so file from distrib build to /usr/lib/gdk-pixbuf-2.0/2.10.0/, then run "/usr/lib/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders > /usr/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache" to reload the loaders.

V4L2 (camera & video)

The camera sensor output in preview mode or/and in capture mode is "dark".

Several possibilities may explain this issue depending on the camera sensor:

  • Camera sensor with integrated ISP: Double check the camera sensor initialization sequence in the related Linux® Kernel driver, maybe the integrated ISP is badly programmed.
  • Camera sensor without integrated ISP: Two operations are required in this case: Debayering (also called "demosaicing") from Raw Bayer color format to RGB color format, Image enhancement using "2A" algorithms (Auto exposure and Auto white balance).
    • On STM32MP1 series: The Debayering operation may be done for instance by GStreamer bayer2rgb plugin. The Image enhancement operation requires a software ISP library or/and application as there is no hardware camera peripheral in this serie supporting this use case. Note: It may be possible to use the GPU (available on STM32MP157 line More info.png) for these 2 operations but the related software is not part of the OpenSTLinux offer.
    • On STM32MP2 series: The DCMIPP internal peripheral integrates an image signal processing (ISP) block used to process camera sensor images. The Debayering operation can be performed by using GStreamer libcamerasrc (preferred) or v4l2src plugins. The Image enhancement operation requires to use libcamera (preferred) or, if V4l2-ctl is used, the dcmipp-isp-ctrl basic ISP tuning example application. Note: The X-LINUX-ISP expansion package can also be used to greatly enhance the sensor image compare to the dcmipp-isp-ctrl application.

Note: The dark output can also be related to the light environment, an object in front of the camera or a camera defect...