Update to odulow per maintenance bronze
[o-du/phy.git] / fhi_lib / app / dpdk.sh
old mode 100644 (file)
new mode 100755 (executable)
index 96bb84f..6fc02be
 #*
 #*******************************************************************************/
 
-export RTE_SDK=/home/turner/dpdk
-export RTE_TARGET=x86_64-native-linuxapp-icc
+if [ -z "$RTE_SDK" ]
+then
+    echo "## ERROR: Please make sure environment variable RTE_SDK is set to valid DPDK path."
+    echo "       To fix, please do: export RTE_SDK=path_to_dpdk_folder    before running this script"
+    exit 1
+fi
+
+if [ -z "$RTE_TARGET" ]
+then
+    echo "## ERROR: Please make sure environment variable RTE_TARGET is set to valid DPDK path."
+    exit 1
+fi
 
 #
 # Unloads igb_uio.ko.
@@ -65,7 +75,54 @@ load_igb_uio_module()
     fi
 }
 
+#
+# Unloads VFIO modules.
+#
+remove_vfio_module()
+{
+    echo "Unloading any existing VFIO module"
+    /sbin/lsmod | grep -s vfio > /dev/null
+    if [ $? -eq 0 ] ; then
+        sudo /sbin/rmmod vfio-pci
+        sudo /sbin/rmmod vfio_iommu_type1
+        sudo /sbin/rmmod vfio
+    fi
+}
+
+#
+# Loads new vfio-pci (and vfio module if needed).
+#
+load_vfio_module()
+{
+    remove_vfio_module
+
+
+    echo "Loading VFIO module"
+    /sbin/lsmod | grep -s vfio_pci > /dev/null
+    if [ $? -ne 0 ] ; then
+        sudo /sbin/modprobe -v vfio-pci
+    fi
+
+    # make sure regular users can read /dev/vfio
+    echo "chmod /dev/vfio"
+    sudo chmod a+x /dev/vfio
+    if [ $? -ne 0 ] ; then
+        echo "FAIL"
+        quit
+    fi
+    echo "OK"
+
+    # check if /dev/vfio/vfio exists - that way we
+    # know we either loaded the module, or it was
+    # compiled into the kernel
+    if [ ! -e /dev/vfio/vfio ] ; then
+        echo "## ERROR: VFIO not found!"
+    fi
+}
+
+
 load_igb_uio_module
+load_vfio_module
 
 CPU_FEATURES_DETECT=`cat /proc/cpuinfo |grep hypervisor | wc -l`
 
@@ -81,10 +138,10 @@ fi
 $RTE_SDK/usertools/dpdk-devbind.py --status
 if [ ${VM_DETECT} == 'HOST' ]; then
     #HOST
-    $RTE_SDK/usertools/dpdk-devbind.py --bind=igb_uio 0000:d8:02.0
-    $RTE_SDK/usertools/dpdk-devbind.py --bind=igb_uio 0000:d8:02.1
-    $RTE_SDK/usertools/dpdk-devbind.py --bind=igb_uio 0000:07:02.0
-    $RTE_SDK/usertools/dpdk-devbind.py --bind=igb_uio 0000:07:02.1
+    $RTE_SDK/usertools/dpdk-devbind.py --bind=vfio-pci 0000:19:02.0
+    $RTE_SDK/usertools/dpdk-devbind.py --bind=vfio-pci 0000:19:02.1
+    $RTE_SDK/usertools/dpdk-devbind.py --bind=vfio-pci 0000:19:0a.0
+    $RTE_SDK/usertools/dpdk-devbind.py --bind=vfio-pci 0000:19:0a.1
 else
     #VM
     $RTE_SDK/usertools/dpdk-devbind.py --bind=igb_uio 0000:00:04.0