13c6f1753694f8e2344f8aa52cbc232103424e6e
[icn.git] / deploy / kud-plugin-addons / device-plugins / qat / driver / install_qat.sh
1 #!/bin/bash
2
3 # Precondition:
4 # QAT device installed, such as lspci | grep 37c8
5 # Enable grub with "intel_iommu=on iommu=pt"
6
7 ROOT=
8
9 MV=mv
10 RM=rm
11 ECHO=echo
12 SLEEP=sleep
13 INSTALL="/usr/bin/install -c"
14 MKDIR_P="mkdir -p"
15 libdir=/usr/local/lib
16 bindir=/usr/local/bin
17
18 am__append_1="drivers/crypto/qat/qat_dh895xcc/qat_dh895xcc.ko\
19                         drivers/crypto/qat/qat_dh895xccvf/qat_dh895xccvf.ko"
20
21 am__append_2="qat_895xcc.bin qat_895xcc_mmp.bin"
22 am__append_3="dh895xcc_dev0.conf dh895xcc_dev1.conf dh895xccvf_dev0.conf.vm"
23
24 # Kernel modules list
25 KO_MODULES_LIST="drivers/crypto/qat/qat_common/intel_qat.ko \
26         drivers/crypto/qat/qat_c62x/qat_c62x.ko \
27         drivers/crypto/qat/qat_c62xvf/qat_c62xvf.ko \
28         drivers/crypto/qat/qat_d15xx/qat_d15xx.ko \
29         drivers/crypto/qat/qat_d15xxvf/qat_d15xxvf.ko \
30         drivers/crypto/qat/qat_c3xxx/qat_c3xxx.ko \
31         drivers/crypto/qat/qat_c3xxxvf/qat_c3xxxvf.ko $am__append_1"
32
33 # Firmwares list
34 BIN_LIST="qat_c3xxx.bin qat_c3xxx_mmp.bin qat_c62x.bin \
35         qat_c62x_mmp.bin qat_mmp.bin qat_d15xx.bin qat_d15xx_mmp.bin \
36         $am__append_2"
37 CONFIG_LIST="c3xxx_dev0.conf \
38         c3xxxvf_dev0.conf.vm \
39         c6xx_dev0.conf \
40         c6xx_dev1.conf \
41         c6xx_dev2.conf \
42         c6xxvf_dev0.conf.vm \
43         d15xx_dev0.conf \
44         d15xxpf_dev0.conf \
45         d15xxvf_dev0.conf.vm \
46         $am__append_3"
47
48 QAT_DH895XCC_NUM_VFS=32
49 QAT_DHC62X_NUM_VFS=16
50 QAT_DHD15XX_NUM_VFS=16
51 QAT_DHC3XXX_NUM_VFS=16
52
53 # Device information variables
54 INTEL_VENDORID="8086"
55 DH895_DEVICE_NUMBER="0435"
56 DH895_DEVICE_NUMBER_VM="0443"
57 C62X_DEVICE_NUMBER="37c8"
58 C62X_DEVICE_NUMBER_VM="37c9"
59 D15XX_DEVICE_NUMBER="6f54"
60 D15XX_DEVICE_NUMBER_VM="6f55"
61 C3XXX_DEVICE_NUMBER="19e2"
62 C3XXX_DEVICE_NUMBER_VM="19e3"
63 numC62xDevice=`lspci -vnd 8086: | egrep -c "37c8|37c9"`
64 numD15xxDevice=`lspci -vnd 8086: | egrep -c "6f54|6f55"`
65 numDh895xDevice=`lspci -vnd 8086: | egrep -c "0435|0443"`
66 numC3xxxDevice=`lspci -vnd 8086: | egrep -c "19e2|19e3"`
67 numDh895xDevicesP=`lspci -n | egrep -c "$INTEL_VENDORID:$DH895_DEVICE_NUMBER"`
68 numDh895xDevicesV=`lspci -n | egrep -c "$INTEL_VENDORID:$DH895_DEVICE_NUMBER_VM"`
69 numC62xDevicesP=`lspci -n | egrep -c "$INTEL_VENDORID:$C62X_DEVICE_NUMBER"`
70 numD15xxDevicesP=`lspci -n | egrep -c "$INTEL_VENDORID:$D15XX_DEVICE_NUMBER"`
71 numC3xxxDevicesP=`lspci -n | egrep -c "$INTEL_VENDORID:$C3XXX_DEVICE_NUMBER"`
72 MODPROBE_BLACKLIST_FILE="blacklist-qat-vfs.conf"
73
74 # load vfio-pci
75 $ECHO "Loading module vfio-pci"
76 modprobe vfio-pci
77
78 # qat-driver
79 $ECHO "Installing driver in `\uname -r`"
80 INSTALL_MOD_DIR=/lib/modules/`\uname -r`/updates/
81 for ko in $KO_MODULES_LIST; do
82     base=${ko%/*};
83     file=${ko##*/};
84     mkdir -p $ROOT$INSTALL_MOD_DIR$base
85     $INSTALL $file $ROOT$INSTALL_MOD_DIR$base
86 done
87
88 # qat-adf-ctl
89 if [ ! -d $ROOT$bindir ]; then
90     $MKDIR_P $ROOT$bindir;
91 fi;
92 $INSTALL -D -m 750 adf_ctl $ROOT$bindir/adf_ctl;
93
94 # qat-service
95 if [ ! -d $ROOT/lib/firmware/qat_fw_backup ]; then
96     $MKDIR_P $ROOT/lib/firmware/qat_fw_backup;
97 fi;
98
99 for bin in $BIN_LIST; do
100     if [ -e $ROOT/lib/firmware/$bin ]; then
101         mv $ROOT/lib/firmware/$bin $ROOT/lib/firmware/qat_fw_backup/$bin;
102     fi;
103     if [ -e $bin ]; then
104         $INSTALL -D -m 750 $bin $ROOT/lib/firmware/$bin;
105     fi;
106 done;
107
108 if [ ! -d $ROOT/etc/qat_conf_backup ]; then
109     $MKDIR_P $ROOT/etc/qat_conf_backup;
110 fi;
111 $MV $ROOT/etc/dh895xcc*.conf $ROOT/etc/qat_conf_backup/ 2>/dev/null;
112 $MV $ROOT/etc/c6xx*.conf $ROOT/etc/qat_conf_backup/ 2>/dev/null;
113 $MV $ROOT/etc/d15xx*.conf $ROOT/etc/qat_conf_backup/ 2>/dev/null;
114 $MV $ROOT/etc/c3xxx*.conf $ROOT/etc/qat_conf_backup/ 2>/dev/null;
115
116 for ((dev=0; dev<$numDh895xDevicesP; dev++))
117 do
118     $INSTALL -D -m 640 dh895xcc_dev0.conf $ROOT/etc/dh895xcc_dev$dev.conf;
119     for ((vf_dev = 0; vf_dev<$QAT_DH895XCC_NUM_VFS; vf_dev++))
120     do
121         vf_dev_num=$(($dev * $QAT_DH895XCC_NUM_VFS + $vf_dev));
122         $INSTALL -D -m 640 dh895xccvf_dev0.conf.vm $ROOT/etc/dh895xccvf_dev$vf_dev_num.conf;
123     done;
124 done;
125
126 for ((dev=0; dev<$numC62xDevicesP; dev++))
127 do
128     $INSTALL -D -m 640 c6xx_dev$(($dev%3)).conf $ROOT/etc/c6xx_dev$dev.conf;
129     for ((vf_dev = 0; vf_dev<$QAT_DHC62X_NUM_VFS; vf_dev++))
130     do
131         vf_dev_num=$(($dev * $QAT_DHC62X_NUM_VFS + $vf_dev));
132         $INSTALL -D -m 640 c6xxvf_dev0.conf.vm $ROOT/etc/c6xxvf_dev$vf_dev_num.conf;
133     done;
134 done;
135
136 for ((dev=0; dev<$numD15xxDevicesP; dev++))
137 do
138     $INSTALL -D -m 640 d15xx_dev$(($dev%3)).conf $ROOT/etc/d15xx_dev$dev.conf;
139     for ((vf_dev = 0; vf_dev<$QAT_DHD15XX_NUM_VFS; vf_dev++))
140     do
141         vf_dev_num=$(($dev * $QAT_DHD15XX_NUM_VFS + $vf_dev));
142         $INSTALL -D -m 640 d15xxvf_dev0.conf.vm $ROOT/etc/d15xxvf_dev$vf_dev_num.conf;
143     done;
144 done;
145
146 for ((dev=0; dev<$numC3xxxDevicesP; dev++))
147 do
148     $INSTALL -D -m 640 c3xxx_dev0.conf $ROOT/etc/c3xxx_dev$dev.conf;
149     for ((vf_dev = 0; vf_dev<$QAT_DHC3XXX_NUM_VFS; vf_dev++))
150     do
151         vf_dev_num=$(($dev * $QAT_DHC3XXX_NUM_VFS + $vf_dev));
152         $INSTALL -D -m 640 c3xxxvf_dev0.conf.vm $ROOT/etc/c3xxxvf_dev$vf_dev_num.conf;
153     done;
154 done;
155
156 $ECHO "Creating startup and kill scripts";
157 if [ ! -d $ROOT/etc/modprobe.d ]; then
158     $MKDIR_P $ROOT/etc/modprobe.d;
159 fi;
160 $INSTALL -D -m 750 qat_service $ROOT/etc/init.d/qat_service;
161 $INSTALL -D -m 750 qat_service_vfs $ROOT/etc/init.d/qat_service_vfs;
162 $INSTALL -D -m 750 qat $ROOT/etc/default/qat;
163 if [ -e $ROOT/etc/modprobe.d/$MODPROBE_BLACKLIST_FILE ] ; then
164     $RM $ROOT/etc/modprobe.d/$MODPROBE_BLACKLIST_FILE;
165 fi;
166
167 if [ $numDh895xDevicesP != 0 ];then
168     $ECHO "blacklist qat_dh895xccvf" >> $ROOT/etc/modprobe.d/$MODPROBE_BLACKLIST_FILE;
169 fi;
170 if [ $numC3xxxDevicesP != 0 ];then
171     $ECHO "blacklist qat_c3xxxvf" >> $ROOT/etc/modprobe.d/$MODPROBE_BLACKLIST_FILE;
172 fi;
173 if [ $numC62xDevicesP != 0 ];then
174     $ECHO "blacklist qat_c62xvf" >> $ROOT/etc/modprobe.d/$MODPROBE_BLACKLIST_FILE;
175 fi;
176 if [ $numD15xxDevicesP != 0 ];then
177     $ECHO "blacklist qat_d15xxvf" >> $ROOT/etc/modprobe.d/$MODPROBE_BLACKLIST_FILE;
178 fi;
179
180 if [ ! -d $ROOT$libdir ]; then
181     $MKDIR_P $ROOT$libdir;
182 fi;
183 if [ ! -d $ROOT/etc/ld.so.conf.d ]; then
184     $MKDIR_P $ROOT/etc/ld.so.conf.d;
185 fi;
186 if [ ! -d $ROOT/lib/modules/`\uname -r`/kernel/drivers ]; then
187     $MKDIR_P $ROOT/lib/modules/`\uname -r`/kernel/drivers;
188 fi;
189 if [ ! -d $ROOT/etc/udev/rules.d ]; then
190     $MKDIR_P $ROOT/etc/udev/rules.d;
191 fi;
192
193 $ECHO "Copying libqat_s.so to $ROOT$libdir";
194 $INSTALL -D -m 755 libqat_s.so $ROOT$libdir/libqat_s.so;
195 $ECHO "Copying libusdm_drv_s.so to $ROOT$libdir";
196 $INSTALL -D -m 755 libusdm_drv_s.so $ROOT$libdir/libusdm_drv_s.so;
197 $ECHO $libdir > $ROOT/etc/ld.so.conf.d/qat.conf; ldconfig;
198
199 $ECHO "Copying usdm module to system drivers";
200 $INSTALL usdm_drv.ko "$ROOT/lib/modules/`\uname -r`/kernel/drivers";
201 $INSTALL qat_api.ko  "$ROOT/lib/modules/`\uname -r`/kernel/drivers";
202 $ECHO "Creating udev rules";
203 if [ ! -e $ROOT/etc/udev/rules.d/00-qat.rules ]; then
204     echo 'KERNEL=="qat_adf_ctl" MODE="0660" GROUP="qat"' > $ROOT/etc/udev/rules.d/00-qat.rules;
205     echo 'KERNEL=="qat_dev_processes" MODE="0660" GROUP="qat"' >> $ROOT/etc/udev/rules.d/00-qat.rules;
206     echo 'KERNEL=="usdm_drv" MODE="0660" GROUP="qat"' >> $ROOT/etc/udev/rules.d/00-qat.rules;
207     echo 'KERNEL=="uio*" MODE="0660" GROUP="qat"' >> $ROOT/etc/udev/rules.d/00-qat.rules;
208     echo 'KERNEL=="hugepages" MODE="0660" GROUP="qat"' >> $ROOT/etc/udev/rules.d/00-qat.rules;
209 fi;
210 $ECHO "Creating module.dep file for QAT released kernel object";
211 $ECHO "This will take a few moments";
212 depmod -a;
213 if [ `lsmod | grep "usdm_drv" | wc -l` != "0" ]; then
214     $ECHO "rmmod usdm_drv";
215     rmmod usdm_drv;
216 fi;
217 if [ -e /sbin/chkconfig ] ; then
218     chkconfig --add qat_service;
219 elif [ -e /usr/sbin/update-rc.d ]; then
220     $ECHO "update-rc.d qat_service defaults";
221     update-rc.d qat_service defaults;
222 fi;
223
224 $ECHO "Starting QAT service";
225 /etc/init.d/qat_service shutdown;
226 $SLEEP 3;
227 /etc/init.d/qat_service start;
228
229 # load kernel vf module for QAT device plugin
230 numC62xDevicesV=`lspci -n | egrep -c "$INTEL_VENDORID:$C62X_DEVICE_NUMBER_VM"`
231 numD15xxDevicesV=`lspci -n | egrep -c "$INTEL_VENDORID:$D15XX_DEVICE_NUMBER_VM"`
232 numC3xxxDevicesV=`lspci -n | egrep -c "$INTEL_VENDORID:$C3XXX_DEVICE_NUMBER_VM"`
233 if [ $numC62xDevicesV != 0 ];then
234     $ECHO "Loading qat_c62xvf";
235     modprobe qat_c62xvf
236 fi
237 if [ $numC3xxxDevicesV != 0 ];then
238     $ECHO "Loading qat_c3xxxvf";
239     modprobe qat_c3xxxvf
240 fi
241 if [ $numD15xxDevicesV != 0 ];then
242     $ECHO "Loading qat_d15xxvf";
243     modprobe qat_d15xxvf
244 fi
245