CMA dynamically allocates memory to the GPU as required. When the amount of free memory available to the GPU falls below the 'low water mark' (
cma_lwm), CMA will attempt to re-allocate some of the memory currently available to the ARM to be instead reserved for the GPU. You can think of this as 'minimum free memory' for the GPU.
If the GPU later frees up some resources and finds itself with additional memory available above the 'high water mark' (
cma_hwm), the excess memory will be allocated instead to the ARM. You can think of this as 'maximum free memory' for the GPU.
The ARM basically gets whatever memory is left in the pool. In order for CMA to work you will need to add the following line to your cmdline.txt (in addition to and separate from the config options in your config.txt):
The RPiconfig wiki page has additional information.