1*aa125180SJai LuthraThis document contains some hints to test the function of the VCHIQ driver 2*aa125180SJai Luthrawithout having additional hardware to the Raspberry Pi. 3*aa125180SJai Luthra 4*aa125180SJai Luthra* Requirements & limitations 5*aa125180SJai Luthra 6*aa125180SJai LuthraTesting the VCHIQ driver requires a Raspberry Pi with one of the following SoC: 7*aa125180SJai Luthra - BCM2835 ( e.g. Raspberry Pi Zero W ) 8*aa125180SJai Luthra - BCM2836 ( e.g. Raspberry Pi 2 ) 9*aa125180SJai Luthra - BCM2837 ( e.g. Raspberry Pi 3 B+ ) 10*aa125180SJai Luthra 11*aa125180SJai LuthraThe BCM2711 used in the Raspberry Pi 4 is currently not supported in the 12*aa125180SJai Luthramainline kernel. 13*aa125180SJai Luthra 14*aa125180SJai LuthraThere are no specific requirements to the VideoCore firmware to get VCHIQ 15*aa125180SJai Luthraworking. 16*aa125180SJai Luthra 17*aa125180SJai LuthraThe test scenarios described in this document based on the tool vchiq_test. 18*aa125180SJai LuthraIts source code is available here: https://github.com/raspberrypi/userland 19*aa125180SJai Luthra 20*aa125180SJai Luthra* Configuration 21*aa125180SJai Luthra 22*aa125180SJai LuthraHere are the most common kernel configurations: 23*aa125180SJai Luthra 24*aa125180SJai Luthra 1. BCM2835 target SoC (ARM 32 bit) 25*aa125180SJai Luthra 26*aa125180SJai Luthra Just use bcm2835_defconfig which already has VCHIQ enabled. 27*aa125180SJai Luthra 28*aa125180SJai Luthra 2. BCM2836/7 target SoC (ARM 32 bit) 29*aa125180SJai Luthra 30*aa125180SJai Luthra Use the multi_v7_defconfig as a base and then enable all VCHIQ options. 31*aa125180SJai Luthra 32*aa125180SJai Luthra 3. BCM2837 target SoC (ARM 64 bit) 33*aa125180SJai Luthra 34*aa125180SJai Luthra Use the defconfig which has most of the VCHIQ options enabled. 35*aa125180SJai Luthra 36*aa125180SJai Luthra* Scenarios 37*aa125180SJai Luthra 38*aa125180SJai Luthra * Initial test 39*aa125180SJai Luthra 40*aa125180SJai Luthra Check the driver is probed and /dev/vchiq is created 41*aa125180SJai Luthra 42*aa125180SJai Luthra * Functional test 43*aa125180SJai Luthra 44*aa125180SJai Luthra Command: vchiq_test -f 10 45*aa125180SJai Luthra 46*aa125180SJai Luthra Expected output: 47*aa125180SJai Luthra Functional test - iters:10 48*aa125180SJai Luthra ======== iteration 1 ======== 49*aa125180SJai Luthra Testing bulk transfer for alignment. 50*aa125180SJai Luthra Testing bulk transfer at PAGE_SIZE. 51*aa125180SJai Luthra ... 52*aa125180SJai Luthra 53*aa125180SJai Luthra * Ping test 54*aa125180SJai Luthra 55*aa125180SJai Luthra Command: vchiq_test -p 56*aa125180SJai Luthra 57*aa125180SJai Luthra Expected output: 58*aa125180SJai Luthra Ping test - service:echo, iters:1000, version 3 59*aa125180SJai Luthra vchi ping (size 0) -> 57.000000us 60*aa125180SJai Luthra vchi ping (size 0, 0 async, 0 oneway) -> 122.000000us 61*aa125180SJai Luthra vchi bulk (size 0, 0 async, 0 oneway) -> 546.000000us 62*aa125180SJai Luthra vchi bulk (size 0, 0 oneway) -> 230.000000us 63*aa125180SJai Luthra vchi ping (size 0) -> 49.000000us 64*aa125180SJai Luthra vchi ping (size 0, 0 async, 0 oneway) -> 70.000000us 65*aa125180SJai Luthra vchi bulk (size 0, 0 async, 0 oneway) -> 296.000000us 66*aa125180SJai Luthra vchi bulk (size 0, 0 oneway) -> 266.000000us 67*aa125180SJai Luthra vchi ping (size 0, 1 async, 0 oneway) -> 65.000000us 68*aa125180SJai Luthra vchi bulk (size 0, 0 oneway) -> 456.000000us 69*aa125180SJai Luthra vchi ping (size 0, 2 async, 0 oneway) -> 74.000000us 70*aa125180SJai Luthra vchi bulk (size 0, 0 oneway) -> 640.000000us 71*aa125180SJai Luthra vchi ping (size 0, 10 async, 0 oneway) -> 125.000000us 72*aa125180SJai Luthra vchi bulk (size 0, 0 oneway) -> 2309.000000us 73*aa125180SJai Luthra vchi ping (size 0, 0 async, 1 oneway) -> 70.000000us 74*aa125180SJai Luthra vchi ping (size 0, 0 async, 2 oneway) -> 76.000000us 75*aa125180SJai Luthra vchi ping (size 0, 0 async, 10 oneway) -> 105.000000us 76*aa125180SJai Luthra vchi ping (size 0, 10 async, 10 oneway) -> 165.000000us 77*aa125180SJai Luthra vchi ping (size 0, 100 async, 0 oneway) -> nanus 78*aa125180SJai Luthra vchi bulk (size 0, 0 oneway) -> nanus 79*aa125180SJai Luthra vchi ping (size 0, 0 async, 100 oneway) -> nanus 80*aa125180SJai Luthra vchi ping (size 0, 100 async, 100 oneway) -> infus 81*aa125180SJai Luthra vchi ping (size 0, 200 async, 0 oneway) -> infus 82*aa125180SJai Luthra ... 83*aa125180SJai Luthra 84*aa125180SJai Luthra * Debugfs test 85*aa125180SJai Luthra 86*aa125180SJai Luthra Command: cat /sys/kernel/debug/vchiq/state 87*aa125180SJai Luthra 88*aa125180SJai Luthra Example output: 89*aa125180SJai Luthra State 0: CONNECTED 90*aa125180SJai Luthra tx_pos=0x1e8(@43b0acda), rx_pos=0x170(@05493af8) 91*aa125180SJai Luthra Version: 8 (min 3) 92*aa125180SJai Luthra Stats: ctrl_tx_count=7, ctrl_rx_count=7, error_count=0 93*aa125180SJai Luthra Slots: 30 available (29 data), 0 recyclable, 0 stalls (0 data) 94*aa125180SJai Luthra Platform: 2835 (VC master) 95*aa125180SJai Luthra Local: slots 34-64 tx_pos=0x1e8 recycle=0x1f 96*aa125180SJai Luthra Slots claimed: 97*aa125180SJai Luthra DEBUG: SLOT_HANDLER_COUNT = 20(0x14) 98*aa125180SJai Luthra DEBUG: SLOT_HANDLER_LINE = 1937(0x791) 99*aa125180SJai Luthra DEBUG: PARSE_LINE = 1864(0x748) 100*aa125180SJai Luthra DEBUG: PARSE_HEADER = -249155224(0xf1263168) 101*aa125180SJai Luthra DEBUG: PARSE_MSGID = 67362817(0x403e001) 102*aa125180SJai Luthra DEBUG: AWAIT_COMPLETION_LINE = 0(0x0) 103*aa125180SJai Luthra DEBUG: DEQUEUE_MESSAGE_LINE = 0(0x0) 104*aa125180SJai Luthra DEBUG: SERVICE_CALLBACK_LINE = 0(0x0) 105*aa125180SJai Luthra DEBUG: MSG_QUEUE_FULL_COUNT = 0(0x0) 106*aa125180SJai Luthra DEBUG: COMPLETION_QUEUE_FULL_COUNT = 0(0x0) 107*aa125180SJai Luthra Remote: slots 2-32 tx_pos=0x170 recycle=0x1f 108*aa125180SJai Luthra Slots claimed: 109*aa125180SJai Luthra 2: 10/9 110*aa125180SJai Luthra DEBUG: SLOT_HANDLER_COUNT = 20(0x14) 111*aa125180SJai Luthra DEBUG: SLOT_HANDLER_LINE = 1851(0x73b) 112*aa125180SJai Luthra DEBUG: PARSE_LINE = 1827(0x723) 113*aa125180SJai Luthra DEBUG: PARSE_HEADER = -150330912(0xf70a21e0) 114*aa125180SJai Luthra DEBUG: PARSE_MSGID = 67113022(0x400103e) 115*aa125180SJai Luthra DEBUG: AWAIT_COMPLETION_LINE = 0(0x0) 116*aa125180SJai Luthra DEBUG: DEQUEUE_MESSAGE_LINE = 0(0x0) 117*aa125180SJai Luthra DEBUG: SERVICE_CALLBACK_LINE = 0(0x0) 118*aa125180SJai Luthra DEBUG: MSG_QUEUE_FULL_COUNT = 0(0x0) 119*aa125180SJai Luthra DEBUG: COMPLETION_QUEUE_FULL_COUNT = 0(0x0) 120*aa125180SJai Luthra Service 0: LISTENING (ref 1) 'PEEK little-endian (0x4b454550)' remote n/a (msg use 0/3840, slot use 0/15) 121*aa125180SJai Luthra Bulk: tx_pending=0 (size 0), rx_pending=0 (size 0) 122*aa125180SJai Luthra Ctrl: tx_count=0, tx_bytes=0, rx_count=0, rx_bytes=0 123*aa125180SJai Luthra Bulk: tx_count=0, tx_bytes=0, rx_count=0, rx_bytes=0 124*aa125180SJai Luthra 0 quota stalls, 0 slot stalls, 0 bulk stalls, 0 aborted, 0 errors 125*aa125180SJai Luthra instance b511f60b 126