cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

hcd-tests.sh (6217B)


      1#!/bin/sh
      2# SPDX-License-Identifier: GPL-2.0
      3#
      4# test types can be passed on the command line:
      5#
      6# - control: any device can do this
      7# - out, in:  out needs 'bulk sink' firmware, in needs 'bulk src'
      8# - iso-out, iso-in:  out needs 'iso sink' firmware, in needs 'iso src'
      9# - halt: needs bulk sink+src, tests halt set/clear from host
     10# - unlink: needs bulk sink and/or src, test HCD unlink processing
     11# - loop: needs firmware that will buffer N transfers
     12#
     13# run it for hours, days, weeks.
     14#
     15
     16#
     17# this default provides a steady test load for a bulk device
     18#
     19TYPES='control out in'
     20#TYPES='control out in halt'
     21
     22#
     23# to test HCD code
     24#
     25#  - include unlink tests
     26#  - add some ${RANDOM}ness
     27#  - connect several devices concurrently (same HC)
     28#  - keep HC's IRQ lines busy with unrelated traffic (IDE, net, ...)
     29#  - add other concurrent system loads
     30#
     31
     32declare -i COUNT BUFLEN
     33
     34COUNT=50000
     35BUFLEN=2048
     36
     37# NOTE:  the 'in' and 'out' cases are usually bulk, but can be
     38# set up to use interrupt transfers by 'usbtest' module options
     39
     40
     41if [ "$DEVICE" = "" ]; then
     42	echo "testing ALL recognized usbtest devices"
     43	echo ""
     44	TEST_ARGS="-a"
     45else
     46	TEST_ARGS=""
     47fi
     48
     49do_test ()
     50{
     51    if ! ./testusb $TEST_ARGS -s $BUFLEN -c $COUNT $* 2>/dev/null
     52    then
     53	echo "FAIL"
     54	exit 1
     55    fi
     56}
     57
     58ARGS="$*"
     59
     60if [ "$ARGS" = "" ];
     61then
     62    ARGS="$TYPES"
     63fi
     64
     65# FIXME use /sys/bus/usb/device/$THIS/bConfigurationValue to
     66# check and change configs
     67
     68CONFIG=''
     69
     70check_config ()
     71{
     72    if [ "$CONFIG" = "" ]; then
     73	CONFIG=$1
     74	echo "assuming $CONFIG configuration"
     75	return
     76    fi
     77    if [ "$CONFIG" = $1 ]; then
     78	return
     79    fi
     80
     81    echo "** device must be in $1 config, but it's $CONFIG instead"
     82    exit 1
     83}
     84
     85
     86echo "TESTING:  $ARGS"
     87
     88while : true
     89do
     90    echo $(date)
     91
     92    for TYPE in $ARGS
     93    do
     94	# restore defaults
     95	COUNT=5000
     96	BUFLEN=2048
     97
     98	# FIXME automatically multiply COUNT by 10 when
     99	# /sys/bus/usb/device/$THIS/speed == "480"
    100
    101#	COUNT=50000
    102
    103	case $TYPE in
    104	control)
    105	    # any device, in any configuration, can use this.
    106	    echo '** Control test cases:'
    107
    108	    echo "test 9: ch9 postconfig"
    109	    do_test -t 9 -c 5000
    110	    echo "test 10: control queueing"
    111	    do_test -t 10 -c 5000
    112
    113	    # this relies on some vendor-specific commands
    114	    echo "test 14: control writes"
    115	    do_test -t 14 -c 15000 -s 256 -v 1
    116
    117	    echo "test 21: control writes, unaligned"
    118	    do_test -t 21 -c 100 -s 256 -v 1
    119
    120	    ;;
    121
    122	out)
    123	    check_config sink-src
    124	    echo '** Host Write (OUT) test cases:'
    125
    126	    echo "test 1: $COUNT transfers, same size"
    127	    do_test -t 1
    128	    echo "test 3: $COUNT transfers, variable/short size"
    129	    do_test -t 3 -v 421
    130
    131	    COUNT=100
    132	    echo "test 17: $COUNT transfers, unaligned DMA map by core"
    133	    do_test -t 17
    134
    135	    echo "test 19: $COUNT transfers, unaligned DMA map by usb_alloc_coherent"
    136	    do_test -t 19
    137
    138	    COUNT=2000
    139	    echo "test 5: $COUNT scatterlists, same size entries"
    140	    do_test -t 5
    141
    142	    # try to trigger short OUT processing bugs
    143	    echo "test 7a: $COUNT scatterlists, variable size/short entries"
    144	    do_test -t 7 -v 579
    145	    BUFLEN=4096
    146	    echo "test 7b: $COUNT scatterlists, variable size/bigger entries"
    147	    do_test -t 7 -v 41
    148	    BUFLEN=64
    149	    echo "test 7c: $COUNT scatterlists, variable size/micro entries"
    150	    do_test -t 7 -v 63
    151	    ;;
    152
    153	iso-out)
    154	    check_config sink-src
    155	    echo '** Host ISOCHRONOUS Write (OUT) test cases:'
    156
    157	    # at peak iso transfer rates:
    158	    # - usb 2.0 high bandwidth, this is one frame.
    159	    # - usb 1.1, it's twenty-four frames.
    160	    BUFLEN=24500
    161
    162	    COUNT=1000
    163
    164# COUNT=10000
    165
    166	    echo "test 15: $COUNT transfers, same size"
    167	    # do_test -t 15 -g 3 -v 0
    168	    BUFLEN=32768
    169	    do_test -t 15 -g 8 -v 0
    170
    171	    # FIXME it'd make sense to have an iso OUT test issuing
    172	    # short writes on more packets than the last one
    173
    174	    COUNT=100
    175	    echo "test 22: $COUNT transfers, non aligned"
    176	    do_test -t 22 -g 8 -v 0
    177
    178	    ;;
    179
    180	in)
    181	    check_config sink-src
    182	    echo '** Host Read (IN) test cases:'
    183
    184	    # NOTE:  these "variable size" reads are just multiples
    185	    # of 512 bytes, no EOVERFLOW testing is done yet
    186
    187	    echo "test 2: $COUNT transfers, same size"
    188	    do_test -t 2
    189	    echo "test 4: $COUNT transfers, variable size"
    190	    do_test -t 4
    191
    192	    COUNT=100
    193	    echo "test 18: $COUNT transfers, unaligned DMA map by core"
    194	    do_test -t 18
    195
    196	    echo "test 20: $COUNT transfers, unaligned DMA map by usb_alloc_coherent"
    197	    do_test -t 20
    198
    199	    COUNT=2000
    200	    echo "test 6: $COUNT scatterlists, same size entries"
    201	    do_test -t 6
    202	    echo "test 8: $COUNT scatterlists, variable size entries"
    203	    do_test -t 8
    204	    ;;
    205
    206	iso-in)
    207	    check_config sink-src
    208	    echo '** Host ISOCHRONOUS Read (IN) test cases:'
    209
    210	    # at peak iso transfer rates:
    211	    # - usb 2.0 high bandwidth, this is one frame.
    212	    # - usb 1.1, it's twenty-four frames.
    213	    BUFLEN=24500
    214
    215	    COUNT=1000
    216
    217# COUNT=10000
    218
    219	    echo "test 16: $COUNT transfers, same size"
    220	    # do_test -t 16 -g 3 -v 0
    221	    BUFLEN=32768
    222	    do_test -t 16 -g 8 -v 0
    223
    224	    # FIXME since iso expects faults, it'd make sense
    225	    # to have an iso IN test issuing short reads ...
    226
    227	    COUNT=100
    228	    echo "test 23: $COUNT transfers, unaligned"
    229	    do_test -t 23 -g 8 -v 0
    230
    231	    ;;
    232
    233	halt)
    234	    # NOTE:  sometimes hardware doesn't cooperate well with halting
    235	    # endpoints from the host side.  so long as mass-storage class
    236	    # firmware can halt them from the device, don't worry much if
    237	    # you can't make this test work on your device.
    238	    COUNT=2000
    239	    echo "test 13: $COUNT halt set/clear"
    240	    do_test -t 13
    241	    ;;
    242
    243	unlink)
    244	    COUNT=2000
    245	    echo "test 11: $COUNT read unlinks"
    246	    do_test -t 11
    247
    248	    echo "test 12: $COUNT write unlinks"
    249	    do_test -t 12
    250	    ;;
    251
    252	loop)
    253	    # defaults need too much buffering for ez-usb devices
    254	    BUFLEN=2048
    255	    COUNT=32
    256
    257	    # modprobe g_zero qlen=$COUNT buflen=$BUFLEN loopdefault
    258	    check_config loopback
    259
    260	    # FIXME someone needs to write and merge a version of this
    261
    262	    echo "write $COUNT buffers of $BUFLEN bytes, read them back"
    263
    264	    echo "write $COUNT variable size buffers, read them back"
    265
    266	    ;;
    267
    268	*)
    269	    echo "Don't understand test type $TYPE"
    270	    exit 1;
    271	esac
    272	echo ''
    273    done
    274done