drm: rework flip-work helpers to avoid calling func when the FIFO is full

Make use of lists instead of kfifo in order to dynamically allocate
task entry when someone require some delayed work, and thus preventing
drm_flip_work_queue from directly calling func instead of queuing this
call.
This allow drm_flip_work_queue to be safely called even within irq
handlers.

Add new helper functions to allocate a flip work task and queue it when
needed. This prevents allocating data within irq context (which might
impact the time spent in the irq handler).

Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
Reviewed-by: Rob Clark <robdclark@gmail.com>
drm: flip-work: change drm_flip_work_init prototype

Now that we're using lists instead of kfifo to store drm flip-work tasks
we do not need the size parameter passed to drm_flip_work_init function
anymore.
Moreover this function cannot fail anymore, we can thus remove the return
code.

Modify drm_flip_work_init users to take account of these changes.

Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
Reviewed-by: Rob Clark <robdclark@gmail.com>
drm: atmel-hlcdc: add specific workqueue for the Display Controller

Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
drm: atmel-hlcdc: make use of drm_flip_work

Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
drm: atmel-hlcdc: rely on universal plane cursor handling

Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
drm: atmel-hlcdc: do not ref/unref fb where unneeded

Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>