1* Import drivers using VCHI.
2
3VCHI is just a tool to let drivers talk to the firmware.  Here are
4some of the ones we want:
5
6  - vc_mem (https://github.com/raspberrypi/linux/blob/rpi-4.4.y/drivers/char/broadcom/vc_mem.c)
7
8  This driver is what the vcdbg userspace program uses to set up its
9  requests to the firmware, which are transmitted across VCHIQ.  vcdbg
10  is really useful for debugging firmware interactions.
11
12  - VCSM (https://github.com/raspberrypi/linux/tree/rpi-4.4.y/drivers/char/broadcom/vc_sm)
13
14  This driver is used for talking about regions of VC memory across
15  firmware protocols including VCHI.  We'll want to extend this driver
16  to manage these buffers as dmabufs so that we can zero-copy import
17  camera images into vc4 for rendering/display.
18
19* Fix kernel module support
20
21Even the VPU firmware doesn't support a VCHI re-connect, the driver
22should properly handle a module unload. This also includes that all
23resources must be freed (kthreads, debugfs entries, ...) and global
24variables avoided.
25
26* Documentation
27
28A short top-down description of this driver's architecture (function of
29kthreads, userspace, limitations) could be very helpful for reviewers.
30
31* Review and comment memory barriers
32
33There is a heavy use of memory barriers in this driver, it would be very
34beneficial to go over all of them and, if correct, comment on their merits.
35Extra points to whomever confidently reviews the remote_event_*() family of
36functions.
37
38* Reformat core code with more sane indentations
39
40The code follows the 80 characters limitation yet tends to go 3 or 4 levels of
41indentation deep making it very unpleasant to read. This is specially relevant
42in the character driver ioctl code and in the core thread functions.
43
44* Get rid of all non essential global structures and create a proper per
45device structure
46
47The first thing one generally sees in a probe function is a memory allocation
48for all the device specific data. This structure is then passed all over the
49driver. This is good practice since it makes the driver work regardless of the
50number of devices probed.
51
52* Clean up Sparse warnings from __user annotations. See
53vchiq_irq_queue_bulk_tx_rx(). Ensure that the address of "&waiter->bulk_waiter"
54is never disclosed to userspace.
55
56* Fix behavior of message handling
57
58The polling behavior of vchiq_bulk_transmit(), vchiq_bulk_receive() and
59vchiq_queue_kernel_message() looks broken. A possible signal should be
60propagated back to user space to let the calling task handle it before
61retrying. Hopefully these msleep(1) shouldn't be necessary anymore.
62
63https://lore.kernel.org/linux-staging/CAK8P3a3HGm1cPo4sW9fOY4E8AN8yAq3tevXxU5m8bmtmsU8WKw@mail.gmail.com/
64