User Tools

Site Tools


doc:appunti:hardware:raspberrypi_3

Kodi on the Raspberry Pi 3 and CMA problems

Running Kodi 19.4 on the Raspberry Pi 3 Model B Plus Rev 1.3 with Raspberry Pi OS based on Debian 11.9, I experienced some weird crashes of the Kodi interface: sometimes the Kodi process suddendly restart while I'm browsing a folder with about 200 video items.

The error messages are revealed by the dmesg output:

[  628.433140] cma: cma_alloc: linux,cma: alloc failed, req-size: 338 pages, ret: -12
[  628.433195] bcm2835-codec bcm2835-codec: dma alloc of size 1384448 failed
...
[  848.225919] [drm:vc4_bo_create [vc4]] *ERROR* Failed to allocate from GEM DMA helper:
[  848.226063] vc4-drm soc:gpu: [drm]                            V3D: 210408kb BOs (1132)
[  848.226074] vc4-drm soc:gpu: [drm]                     V3D shader:     56kb BOs (14)
[  848.226081] vc4-drm soc:gpu: [drm]                           dumb:   2040kb BOs (1)
[  848.226088] vc4-drm soc:gpu: [drm]                         binner:  16384kb BOs (1)
[  848.226095] vc4-drm soc:gpu: [drm]                total purged BO:   1028kb BOs (2)

As you can see the V3D used 210408 kb of the DRM memory, which is very near to the default size reserved of 256 Mb. You can see it into dmesg output:

[    0.000000] Reserved memory: created CMA memory pool at 0x1ec00000, size 256 MiB

In /boot/config.txt you should confirm that you are loading the vc4-kms-v3d overlay, which will use the VideoCore IV GPU available on the Raspberry Pi 3.

# Enable DRM VC4 V3D driver
dtoverlay=vc4-kms-v3d
max_framebuffers=2

To reserve more memory for the CMA, add the following line into /boot/config.txt

# Default cma reserved memory is 256 Mb, use 480 instead.
dtoverlay=cma,cma-size=503316480

Because the total memory is limited to 1 Gb, it is advisable to reserve not much memory for the GPU; in /boot/config.txt put this:

gpu_mem=128

With 128 Mb of GPU memory I'm still able to play 1920×1080 videos without issues. Many features of the VideoCore IV GPU use the CMA reserved memory, not this GPU reserver one.

You can check how many GPU memory is used during Kodi normal operation, just launch the bcmstat.sh script and let it run:

./bcmstat.sh Dd5

At next reboot I verified that the new setting is in place, checking the dmesg output:

[    0.000000] Reserved memory: created CMA memory pool at 0x10c00000, size 480 MiB
[    0.000000] Memory: 398320K/917504K available (10240K kernel code, 1452K rwdata,
               2900K rodata, 1024K init, 613K bss, 27664K reserved, 491520K cma-reserved)

Verify also that the system has enough free memory once the Kodi program is started, use the free commando to get it:

               total        used        free      shared  buff/cache   available
Mem:          890864      286280      287876        2836      316708      546816
Swap:         524284           0      524284

About 280 Mb of free memory should suffice for normal operations.

doc/appunti/hardware/raspberrypi_3.txt · Last modified: 2024/03/22 06:13 by niccolo