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 ...