This document contains some hints to test the function of the VCHIQ driver
without having additional hardware to the Raspberry Pi.

* Requirements & limitations

Testing the VCHIQ driver requires a Raspberry Pi with one of the following SoC:
  - BCM2835 ( e.g. Raspberry Pi Zero W )
  - BCM2836 ( e.g. Raspberry Pi 2 )
  - BCM2837 ( e.g. Raspberry Pi 3 B+ )

The BCM2711 used in the Raspberry Pi 4 is currently not supported in the
mainline kernel.

There are no specific requirements to the VideoCore firmware to get VCHIQ
working.

The test scenarios described in this document based on the tool vchiq_test.
Its source code is available here: https://github.com/raspberrypi/userland

* Configuration

Here are the most common kernel configurations:

 1. BCM2835 target SoC (ARM 32 bit)

    Just use bcm2835_defconfig which already has VCHIQ enabled.

 2. BCM2836/7 target SoC (ARM 32 bit)

    Use the multi_v7_defconfig as a base and then enable all VCHIQ options.

 3. BCM2837 target SoC (ARM 64 bit)

    Use the defconfig as a base and then enable all VCHIQ options.

* Scenarios

 * Initial test

   Check the driver is probed and /dev/vchiq is created

 * Functional test

   Command: vchiq_test -f 10

   Expected output:
   Functional test - iters:10
   ======== iteration 1 ========
   Testing bulk transfer for alignment.
   Testing bulk transfer at PAGE_SIZE.
   ...

 * Ping test

   Command: vchiq_test -p 1

   Expected output:
   Ping test - service:echo, iters:1, version 3
   vchi ping (size 0) -> 57.000000us
   vchi ping (size 0, 0 async, 0 oneway) -> 122.000000us
   vchi bulk (size 0, 0 async, 0 oneway) -> 546.000000us
   vchi bulk (size 0, 0 oneway) -> 230.000000us
   vchi ping (size 0) -> 49.000000us
   vchi ping (size 0, 0 async, 0 oneway) -> 70.000000us
   vchi bulk (size 0, 0 async, 0 oneway) -> 296.000000us
   vchi bulk (size 0, 0 oneway) -> 266.000000us
   vchi ping (size 0, 1 async, 0 oneway) -> 65.000000us
   vchi bulk (size 0, 0 oneway) -> 456.000000us
   vchi ping (size 0, 2 async, 0 oneway) -> 74.000000us
   vchi bulk (size 0, 0 oneway) -> 640.000000us
   vchi ping (size 0, 10 async, 0 oneway) -> 125.000000us
   vchi bulk (size 0, 0 oneway) -> 2309.000000us
   vchi ping (size 0, 0 async, 1 oneway) -> 70.000000us
   vchi ping (size 0, 0 async, 2 oneway) -> 76.000000us
   vchi ping (size 0, 0 async, 10 oneway) -> 105.000000us
   vchi ping (size 0, 10 async, 10 oneway) -> 165.000000us
   vchi ping (size 0, 100 async, 0 oneway) -> nanus
   vchi bulk (size 0, 0 oneway) -> nanus
   vchi ping (size 0, 0 async, 100 oneway) -> nanus
   vchi ping (size 0, 100 async, 100 oneway) -> infus
   vchi ping (size 0, 200 async, 0 oneway) -> infus
   ...
