Update to odulow per maintenance bronze
[o-du/phy.git] / fhi_lib / app / dpdk.sh
1 #! /bin/bash
2
3 #/******************************************************************************
4 #*
5 #*   Copyright (c) 2019 Intel.
6 #*
7 #*   Licensed under the Apache License, Version 2.0 (the "License");
8 #*   you may not use this file except in compliance with the License.
9 #*   You may obtain a copy of the License at
10 #*
11 #*       http://www.apache.org/licenses/LICENSE-2.0
12 #*
13 #*   Unless required by applicable law or agreed to in writing, software
14 #*   distributed under the License is distributed on an "AS IS" BASIS,
15 #*   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 #*   See the License for the specific language governing permissions and
17 #*   limitations under the License.
18 #*
19 #*******************************************************************************/
20
21 if [ -z "$RTE_SDK" ]
22 then
23     echo "## ERROR: Please make sure environment variable RTE_SDK is set to valid DPDK path."
24     echo "       To fix, please do: export RTE_SDK=path_to_dpdk_folder    before running this script"
25     exit 1
26 fi
27
28 if [ -z "$RTE_TARGET" ]
29 then
30     echo "## ERROR: Please make sure environment variable RTE_TARGET is set to valid DPDK path."
31     exit 1
32 fi
33
34 #
35 # Unloads igb_uio.ko.
36 #
37 remove_igb_uio_module()
38 {
39     echo "Unloading any existing DPDK UIO module"
40     /sbin/lsmod | grep -s igb_uio > /dev/null
41     if [ $? -eq 0 ] ; then
42         sudo /sbin/rmmod igb_uio
43     fi
44 }
45
46 #
47 # Loads new igb_uio.ko (and uio module if needed).
48 #
49 load_igb_uio_module()
50 {
51     if [ ! -f $RTE_SDK/$RTE_TARGET/kmod/igb_uio.ko ];then
52         echo "## ERROR: Target does not have the DPDK UIO Kernel Module."
53         echo "       To fix, please try to rebuild target."
54         return
55     fi
56
57     remove_igb_uio_module
58
59     /sbin/lsmod | grep -s uio > /dev/null
60     if [ $? -ne 0 ] ; then
61         if [ -f /lib/modules/$(uname -r)/kernel/drivers/uio/uio.ko ] ; then
62             echo "Loading uio module"
63             sudo /sbin/modprobe uio
64         fi
65     fi
66
67     # UIO may be compiled into kernel, so it may not be an error if it can't
68     # be loaded.
69
70     echo "Loading DPDK UIO module"
71     sudo /sbin/insmod $RTE_SDK/$RTE_TARGET/kmod/igb_uio.ko
72     if [ $? -ne 0 ] ; then
73         echo "## ERROR: Could not load kmod/igb_uio.ko."
74         quit
75     fi
76 }
77
78 #
79 # Unloads VFIO modules.
80 #
81 remove_vfio_module()
82 {
83     echo "Unloading any existing VFIO module"
84     /sbin/lsmod | grep -s vfio > /dev/null
85     if [ $? -eq 0 ] ; then
86         sudo /sbin/rmmod vfio-pci
87         sudo /sbin/rmmod vfio_iommu_type1
88         sudo /sbin/rmmod vfio
89     fi
90 }
91
92 #
93 # Loads new vfio-pci (and vfio module if needed).
94 #
95 load_vfio_module()
96 {
97     remove_vfio_module
98
99
100     echo "Loading VFIO module"
101     /sbin/lsmod | grep -s vfio_pci > /dev/null
102     if [ $? -ne 0 ] ; then
103         sudo /sbin/modprobe -v vfio-pci
104     fi
105
106     # make sure regular users can read /dev/vfio
107     echo "chmod /dev/vfio"
108     sudo chmod a+x /dev/vfio
109     if [ $? -ne 0 ] ; then
110         echo "FAIL"
111         quit
112     fi
113     echo "OK"
114
115     # check if /dev/vfio/vfio exists - that way we
116     # know we either loaded the module, or it was
117     # compiled into the kernel
118     if [ ! -e /dev/vfio/vfio ] ; then
119         echo "## ERROR: VFIO not found!"
120     fi
121 }
122
123
124 load_igb_uio_module
125 load_vfio_module
126
127 CPU_FEATURES_DETECT=`cat /proc/cpuinfo |grep hypervisor | wc -l`
128
129 if [ "$CPU_FEATURES_DETECT" -eq "0" ]
130 then
131 VM_DETECT='HOST'
132 echo ${VM_DETECT}
133 else
134 VM_DETECT='VM'
135 echo ${VM_DETECT}
136 fi
137
138 $RTE_SDK/usertools/dpdk-devbind.py --status
139 if [ ${VM_DETECT} == 'HOST' ]; then
140     #HOST
141     $RTE_SDK/usertools/dpdk-devbind.py --bind=vfio-pci 0000:19:02.0
142     $RTE_SDK/usertools/dpdk-devbind.py --bind=vfio-pci 0000:19:02.1
143     $RTE_SDK/usertools/dpdk-devbind.py --bind=vfio-pci 0000:19:0a.0
144     $RTE_SDK/usertools/dpdk-devbind.py --bind=vfio-pci 0000:19:0a.1
145 else
146     #VM
147     $RTE_SDK/usertools/dpdk-devbind.py --bind=igb_uio 0000:00:04.0
148     $RTE_SDK/usertools/dpdk-devbind.py --bind=igb_uio 0000:00:05.0
149     $RTE_SDK/usertools/dpdk-devbind.py --bind=igb_uio 0000:00:06.0
150     $RTE_SDK/usertools/dpdk-devbind.py --bind=igb_uio 0000:00:07.0
151 fi
152
153 $RTE_SDK/usertools/dpdk-devbind.py --status
154