1) Import drivers using VCHI.

VCHI is just a tool to let drivers talk to the firmware.  Here are
some of the ones we want:

  - vc_mem (https://github.com/raspberrypi/linux/blob/rpi-4.4.y/drivers/char/broadcom/vc_mem.c)

  This driver is what the vcdbg userspace program uses to set up its
  requests to the firmware, which are transmitted across VCHIQ.  vcdbg
  is really useful for debugging firmware interactions.

  - VCSM (https://github.com/raspberrypi/linux/tree/rpi-4.4.y/drivers/char/broadcom/vc_sm)

  This driver is used for talking about regions of VC memory across
  firmware protocols including VCHI.  We'll want to extend this driver
  to manage these buffers as dmabufs so that we can zero-copy import
  camera images into vc4 for rendering/display.

2) Garbage-collect unused code

One of the reasons this driver wasn't upstreamed previously was that
there's a lot code that got built that's probably unnecessary these
days.  Once we have the set of VCHI-using drivers we want in tree, we
should be able to do a sweep of the code to see what's left that's
unused.

3) Make driver more portable

Building this driver with arm/multi_v7_defconfig or arm64/defconfig
leads to data corruption during the following command: 
  
  vchiq_test -f 1

This should be fixed.

4) Fix kernel module support

Even the VPU firmware doesn't support a VCHI re-connect, the driver
should properly handle a module unload. This also includes that all
resouces must be freed (kthreads, debugfs entries, ...) and global
variables avoided.

5) Cleanup logging mechanism

The driver should probably be using the standard kernel logging mechanisms
such as dev_info, dev_dbg, and friends.

6) Documentation

A short top-down description of this driver's architecture (function of
kthreads, userspace, limitations) could be very helpful for reviewers.

7) Review and comment memory barriers

There is a heavy use of memory barriers in this driver, it would be very
beneficial to go over all of them and, if correct, comment on their merits.
Extra points to whomever confidently reviews the remote_event_*() family of
functions.

8) Get rid of custom function return values

Most functions use a custom set of return values, we should force proper Linux
error numbers. Special care is needed for VCHIQ_RETRY.

9) Reformat core code with more sane indentations

The code follows the 80 characters limitation yet tends to go 3 or 4 levels of
indentation deep making it very unpleasant to read. This is specially relevant
in the character driver ioctl code and in the core thread functions.

10) Reorganize file structure: Move char driver to it's own file and join both
platform files

The cdev is defined alongside with the platform code in vchiq_arm.c. It would
be nice to completely decouple it from the actual core code. For instance to be
able to use bcm2835-audio without having /dev/vchiq created. One could argue
it's better for security reasons or general cleanliness. It could even be
interesting to create two different kernel modules, something the likes of
vchiq-core.ko and vchiq-dev.ko. This would also ease the upstreaming process.

The code in vchiq_bcm2835_arm.c should fit in the generic platform file.

12) Get rid of all the struct typedefs

Most structs are typedefd, it's not encouraged in the kernel.

13) Get rid of all non essential global structures and create a proper per
device structure

The first thing one generally sees in a probe function is a memory allocation
for all the device specific data. This structure is then passed all over the
driver. This is good practice since it makes the driver work regardless of the
number of devices probed.
