xc7k480t/xdma/linux-kernel/tests/load_driver.sh

101 lines
2.5 KiB
Bash
Raw Normal View History

2025-05-02 19:01:03 +08:00
#!/bin/bash
# set -x
display_help() {
echo "$0 [interrupt mode]"
echo "interrupt mode: optional"
echo "0: auto"
echo "1: MSI"
echo "2: Legacy"
echo "3: MSIx"
echo "4: do not use interrupt, poll mode only"
exit;
}
if [ "$1" == "help" ]; then
display_help
fi;
interrupt_selection=$1
echo "interrupt_selection $interrupt_selection."
device_id=903f
# Make sure only root can run our script
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
# Remove the existing xdma kernel module
lsmod | grep xdma
if [ $? -eq 0 ]; then
rmmod xdma
if [ $? -ne 0 ]; then
echo "rmmod xdma failed: $?"
exit 1
fi
fi
# Use the following command to Load the driver in the default
# or interrupt drive mode. This will allow the driver to use
# interrupts to signal when DMA transfers are completed.
echo -n "Loading driver..."
case $interrupt_selection in
"0")
echo "insmod xdma.ko interrupt_mode=1 ..."
ret=`insmod ../xdma/xdma.ko interrupt_mode=0`
;;
"1")
echo "insmod xdma.ko interrupt_mode=2 ..."
ret=`insmod ../xdma/xdma.ko interrupt_mode=1`
;;
"2")
echo "insmod xdma.ko interrupt_mode=3 ..."
ret=`insmod ../xdma/xdma.ko interrupt_mode=2`
;;
"3")
echo "insmod xdma.ko interrupt_mode=4 ..."
ret=`insmod ../xdma/xdma.ko interrupt_mode=3`
;;
"4")
echo "insmod xdma.ko poll_mode=1 ..."
ret=`insmod ../xdma/xdma.ko poll_mode=1`
;;
*)
intp=`sudo lspci -d :${device_id} -v | grep -o -E "MSI-X"`
intp1=`sudo lspci -d :${device_id} -v | grep -o -E "MSI:"`
if [[ ( -n $intp ) && ( $intp == "MSI-X" ) ]]; then
echo "insmod xdma.ko interrupt_mode=0 ..."
ret=`insmod ../xdma/xdma.ko interrupt_mode=0`
elif [[ ( -n $intp1 ) && ( $intp1 == "MSI:" ) ]]; then
echo "insmod xdma.ko interrupt_mode=1 ..."
ret=`insmod ../xdma/xdma.ko interrupt_mode=1`
else
echo "insmod xdma.ko interrupt_mode=2 ..."
ret=`insmod ../xdma/xdma.ko interrupt_mode=2`
fi
;;
esac
if [ ! $ret == 0 ]; then
echo "Error: xdma driver did not load properly"
echo " FAILED"
exit 1
fi
# Check to see if the xdma devices were recognized
echo ""
cat /proc/devices | grep xdma > /dev/null
returnVal=$?
if [ $returnVal == 0 ]; then
# Installed devices were recognized.
echo "The Kernel module installed correctly and the xmda devices were recognized."
else
# No devices were installed.
echo "Error: The Kernel module installed correctly, but no devices were recognized."
echo " FAILED"
exit 1
fi
echo "DONE"