If i understood correctly, the kms driver (vc4-kms-v3d) uses a dynamic memory split which can be set via the 'cma' parameter in cmdline.txt

This means the less memory i assign to the gpu with 'gpu_mem' the more memory will be available for the dynamic gpu/cpu memory split.

When 'gpu_mem' is set to 16, the gpu will be initialized in a cutdown mode. Meaning some blocks are not active. I could see for example that gstreamer was missing some hardware decoder elements in this case.

But what are the further impacts? I can run chromium quiet smoothly and also playback a mjpeg video stream using gstreamer (1024 * 688) with no recognizable impact.

Is the 'gpu_mem=16' setting ok to use in combination with the kms driver? Or should i rather use 32M to initialize the gpu completely?

  • Are you sure getting 16 MB of RAM free is worth the effort? Mar 2, 2021 at 7:05
  • @DmitryGrigoryev probably not. But I still want to know exactly whats going on. Or tbh I also wanted to know if i was completely off and there is something i misunderstood.
    – Fl0v0
    Mar 2, 2021 at 10:17

1 Answer 1


In mesa3d's VC4 documentation's 'Performance Tricks' section, it is hinted that ;

  • Decrease firmware memory

The firmware allocates a fixed chunk of memory before booting Linux. If firmware functions are not required, this amount can be reduced.

In config.txt edit gpu_mem to 16, if you do not need video decoding, edit gpu_mem to 64 if you need video decoding.

One could infer that setting gpu_mem to 16 (or to less than 64, which it is is not clear) at least disables hardware video decoding.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.