The driver don't need to allocate memory. It is my experience that allocating memory at boot time is not that trivial, i.e. you don't have a one allocate that amount of memory at boot time function call. With CMA driver don't have to worry where to get the memory region from -- driver merely uses it.
This is a rather minor point though. More importantly, drivers can easily share the same region of memory without even knowing about it. The example I keep giving is a system with a camera and a video decoder which never run at the same time. If each driver were to allocate space for themselves twice the amount of memory would be reserved then really needed. It's of course only a simple example and one could show many more.
Also, as a freebie, drivers get allocators that are implemented in CMA. This may not always be an advantage since not all drivers will need it but nonetheless some may benefit.
So to sum things up, all the complexity of reserving and allocating memory is moved from the drivers to the framework plus centralised management gives greater flexibility for platform architects.