xref: /linux/drivers/platform/raspberrypi/vchiq-interface/TESTING (revision 37bb2e7217b01404e2abf9d90d8e5705a5603b52)
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