@@ -43,6 +43,33 @@ if [[ "$major_ver" -lt "2" ]] || \
43
43
cse_passthrough=1
44
44
fi
45
45
46
+ # pci devices for passthru
47
+ declare -A passthru_vpid
48
+ declare -A passthru_bdf
49
+
50
+ passthru_vpid=(
51
+ [" usb_xdci" ]=" 8086 5aaa"
52
+ [" ipu" ]=" 8086 5a88"
53
+ [" ipu_i2c" ]=" 8086 5aac"
54
+ [" cse" ]=" 8086 5a9a"
55
+ [" sd_card" ]=" 8086 5aca"
56
+ [" audio" ]=" 8086 5a98"
57
+ [" audio_codec" ]=" 8086 5ab4"
58
+ [" wifi" ]=" 11ab 2b38"
59
+ [" bluetooth" ]=" 8086 5abc"
60
+ )
61
+ passthru_bdf=(
62
+ [" usb_xdci" ]=" 0000:00:15.1"
63
+ [" ipu" ]=" 0000:00:03.0"
64
+ [" ipu_i2c" ]=" 0000:00:16.0"
65
+ [" cse" ]=" 0000:00:0f.0"
66
+ [" sd_card" ]=" 0000:00:1b.0"
67
+ [" audio" ]=" 0000:00:0e.0"
68
+ [" audio_codec" ]=" 0000:00:17.0"
69
+ [" wifi" ]=" 0000:03:00.0"
70
+ [" bluetooth" ]=" 0000:00:18.0"
71
+ )
72
+
46
73
function launch_clearlinux()
47
74
{
48
75
if [ ! -f " /data/$5 /$5 .img" ]; then
83
110
84
111
# for VT-d device setting
85
112
modprobe pci_stub
86
- echo " 8086 5aaa " > /sys/bus/pci/drivers/pci-stub/new_id
87
- echo " 0000:00:15.1 " > /sys/bus/pci/devices/0000:00:15.1 /driver/unbind
88
- echo " 0000:00:15.1 " > /sys/bus/pci/drivers/pci-stub/bind
113
+ echo ${passthru_vpid["usb_xdci"]} > /sys/bus/pci/drivers/pci-stub/new_id
114
+ echo ${passthru_bdf["usb_xdci"]} > /sys/bus/pci/devices/${passthru_bdf["usb_xdci"]} /driver/unbind
115
+ echo ${passthru_bdf["usb_xdci"]} > /sys/bus/pci/drivers/pci-stub/bind
89
116
90
117
echo 100 > /sys/bus/usb/drivers/usb-storage/module/parameters/delay_use
91
118
92
119
boot_ipu_option=" "
93
120
if [ $ipu_passthrough == 1 ]; then
94
- # for ipu passthrough - ipu device 0:3.0
95
- if [ -d " /sys/bus/pci/devices/0000:00:03.0 " ]; then
96
- echo " 8086 5a88 " > /sys/bus/pci/drivers/pci-stub/new_id
97
- echo " 0000:00:03.0 " > /sys/bus/pci/devices/0000:00:03.0 /driver/unbind
98
- echo " 0000:00:03.0 " > /sys/bus/pci/drivers/pci-stub/bind
121
+ # for ipu passthrough - ipu device
122
+ if [ -d " /sys/bus/pci/devices/${passthru_bdf["ipu"]} " ]; then
123
+ echo ${passthru_vpid["ipu"]} > /sys/bus/pci/drivers/pci-stub/new_id
124
+ echo ${passthru_bdf["ipu"]} > /sys/bus/pci/devices/${passthru_bdf["ipu"]} /driver/unbind
125
+ echo ${passthru_bdf["ipu"]} > /sys/bus/pci/drivers/pci-stub/bind
99
126
boot_ipu_option=" $boot_ipu_option " " -s 12,passthru,0/3/0 "
100
127
fi
101
128
102
- # for ipu passthrough - ipu related i2c 0:16.0
103
- # please use virtual slot 22 for i2c 0:16.0 to make sure that the i2c controller
129
+ # for ipu passthrough - ipu related i2c
130
+ # please use virtual slot 22 for i2c to make sure that the i2c controller
104
131
# could get the same virtaul BDF as physical BDF
105
- if [ -d " /sys/bus/pci/devices/0000:00:16.0 " ]; then
106
- echo " 8086 5aac " > /sys/bus/pci/drivers/pci-stub/new_id
107
- echo " 0000:00:16.0 " > /sys/bus/pci/devices/0000:00:16.0 /driver/unbind
108
- echo " 0000:00:16.0 " > /sys/bus/pci/drivers/pci-stub/bind
132
+ if [ -d " /sys/bus/pci/devices/${passthru_bdf["ipu_i2c"]} " ]; then
133
+ echo ${passthru_vpid["ipu_i2c"]} > /sys/bus/pci/drivers/pci-stub/new_id
134
+ echo ${passthru_bdf["ipu_i2c"]} > /sys/bus/pci/devices/${passthru_bdf["ipu_i2c"]} /driver/unbind
135
+ echo ${passthru_bdf["ipu_i2c"]} > /sys/bus/pci/drivers/pci-stub/bind
109
136
boot_ipu_option=" $boot_ipu_option " " -s 22,passthru,0/16/0 "
110
137
fi
111
138
else
114
141
115
142
boot_cse_option=" "
116
143
if [ $cse_passthrough == 1 ]; then
117
- echo " 8086 5a9a " > /sys/bus/pci/drivers/pci-stub/new_id
118
- echo " 0000:00:0f.0 " > /sys/bus/pci/devices/0000:00:0f.0 /driver/unbind
119
- echo " 0000:00:0f.0 " > /sys/bus/pci/drivers/pci-stub/bind
144
+ echo ${passthru_vpid["cse"]} > /sys/bus/pci/drivers/pci-stub/new_id
145
+ echo ${passthru_bdf["cse"]} > /sys/bus/pci/devices/${passthru_bdf["cse"]} /driver/unbind
146
+ echo ${passthru_bdf["cse"]} > /sys/bus/pci/drivers/pci-stub/bind
120
147
boot_cse_option=" $boot_cse_option " " -s 15,passthru,0/0f/0 "
121
148
else
122
149
boot_cse_option=" $boot_cse_option " " -s 15,virtio-heci,0/0f/0 "
123
150
fi
124
151
125
152
# for sd card passthrough - SDXC/MMC Host Controller 00:1b.0
126
- echo " 8086 5aca " > /sys/bus/pci/drivers/pci-stub/new_id
127
- echo " 0000:00:1b.0 " > /sys/bus/pci/devices/0000:00:1b.0 /driver/unbind
128
- echo " 0000:00:1b.0 " > /sys/bus/pci/drivers/pci-stub/bind
153
+ echo ${passthru_vpid["sd_card"]} > /sys/bus/pci/drivers/pci-stub/new_id
154
+ echo ${passthru_bdf["sd_card"]} > /sys/bus/pci/devices/${passthru_bdf["sd_card"]} /driver/unbind
155
+ echo ${passthru_bdf["sd_card"]} > /sys/bus/pci/drivers/pci-stub/bind
129
156
130
157
# for memsize setting, total 8GB(>7.5GB) uos->6GB, 4GB(>3.5GB) uos->2GB
131
158
memsize=` cat /proc/meminfo| head -n 1| awk ' {print $2}' `
231
258
232
259
# for VT-d device setting
233
260
modprobe pci_stub
234
- echo " 8086 5aaa " > /sys/bus/pci/drivers/pci-stub/new_id
235
- echo " 0000:00:15.1 " > /sys/bus/pci/devices/0000:00:15.1 /driver/unbind
236
- echo " 0000:00:15.1 " > /sys/bus/pci/drivers/pci-stub/bind
261
+ echo ${passthru_vpid["usb_xdci"]} > /sys/bus/pci/drivers/pci-stub/new_id
262
+ echo ${passthru_bdf["usb_xdci"]} > /sys/bus/pci/devices/${passthru_bdf["usb_xdci"]} /driver/unbind
263
+ echo ${passthru_bdf["usb_xdci"]} > /sys/bus/pci/drivers/pci-stub/bind
237
264
238
265
# for audio device
239
266
boot_audio_option=" "
240
267
if [ $audio_passthrough == 1 ]; then
241
- echo " 8086 5a98 " > /sys/bus/pci/drivers/pci-stub/new_id
242
- echo " 0000:00:0e.0 " > /sys/bus/pci/devices/0000:00:0e.0 /driver/unbind
243
- echo " 0000:00:0e.0 " > /sys/bus/pci/drivers/pci-stub/bind
268
+ echo ${passthru_vpid["audio"]} > /sys/bus/pci/drivers/pci-stub/new_id
269
+ echo ${passthru_bdf["audio"]} > /sys/bus/pci/devices/${passthru_bdf["audio"]} /driver/unbind
270
+ echo ${passthru_bdf["audio"]} > /sys/bus/pci/drivers/pci-stub/bind
244
271
245
272
# for audio codec
246
- echo " 8086 5ab4 " > /sys/bus/pci/drivers/pci-stub/new_id
247
- echo " 0000:00:17.0 " > /sys/bus/pci/devices/0000:00:17.0 /driver/unbind
248
- echo " 0000:00:17.0 " > /sys/bus/pci/drivers/pci-stub/bind
273
+ echo ${passthru_vpid["audio_codec"]} > /sys/bus/pci/drivers/pci-stub/new_id
274
+ echo ${passthru_bdf["audio_codec"]} > /sys/bus/pci/devices/${passthru_bdf["audio_codec"]} /driver/unbind
275
+ echo ${passthru_bdf["audio_codec"]} > /sys/bus/pci/drivers/pci-stub/bind
249
276
250
277
boot_audio_option=" -s 14,passthru,0/e/0,keep_gsi -s 23,passthru,0/17/0"
251
278
else
252
279
boot_audio_option=" -s 14,virtio-audio"
253
280
fi
254
281
255
282
# for sd card passthrough - SDXC/MMC Host Controller 00:1b.0
256
- echo " 8086 5aca " > /sys/bus/pci/drivers/pci-stub/new_id
257
- echo " 0000:00:1b.0 " > /sys/bus/pci/devices/0000:00:1b.0 /driver/unbind
258
- echo " 0000:00:1b.0 " > /sys/bus/pci/drivers/pci-stub/bind
283
+ echo ${passthru_vpid["sd_card"]} > /sys/bus/pci/drivers/pci-stub/new_id
284
+ echo ${passthru_bdf["sd_card"]} > /sys/bus/pci/devices/${passthru_bdf["sd_card"]} /driver/unbind
285
+ echo ${passthru_bdf["sd_card"]} > /sys/bus/pci/drivers/pci-stub/bind
259
286
260
287
# WIFI
261
- echo " 11ab 2b38 " > /sys/bus/pci/drivers/pci-stub/new_id
262
- echo " 0000:03:00.0 " > /sys/bus/pci/devices/0000:03:00.0 /driver/unbind
263
- echo " 0000:03:00.0 " > /sys/bus/pci/drivers/pci-stub/bind
288
+ echo ${passthru_vpid["wifi"]} > /sys/bus/pci/drivers/pci-stub/new_id
289
+ echo ${passthru_bdf["wifi"]} > /sys/bus/pci/devices/${passthru_bdf["wifi"]} /driver/unbind
290
+ echo ${passthru_bdf["wifi"]} > /sys/bus/pci/drivers/pci-stub/bind
264
291
265
292
# Bluetooth passthrough depends on WIFI
266
- echo " 8086 5abc " > /sys/bus/pci/drivers/pci-stub/new_id
267
- echo " 0000:00:18.0 " > /sys/bus/pci/devices/0000:00:18.0 /driver/unbind
268
- echo " 0000:00:18.0 " > /sys/bus/pci/drivers/pci-stub/bind
293
+ echo ${passthru_vpid["bluetooth"]} > /sys/bus/pci/drivers/pci-stub/new_id
294
+ echo ${passthru_bdf["bluetooth"]} > /sys/bus/pci/devices/${passthru_bdf["bluetooth"]} /driver/unbind
295
+ echo ${passthru_bdf["bluetooth"]} > /sys/bus/pci/drivers/pci-stub/bind
269
296
270
297
# Check if the NPK device/driver is present
271
298
ls -d /sys/bus/pci/drivers/intel_th_pci/0000* 2> /dev/null 1> /dev/null
@@ -282,21 +309,21 @@ echo 100 > /sys/bus/usb/drivers/usb-storage/module/parameters/delay_use
282
309
283
310
boot_ipu_option=" "
284
311
if [ $ipu_passthrough == 1 ]; then
285
- # for ipu passthrough - ipu device 0:3.0
286
- if [ -d " /sys/bus/pci/devices/0000:00:03.0 " ]; then
287
- echo " 8086 5a88 " > /sys/bus/pci/drivers/pci-stub/new_id
288
- echo " 0000:00:03.0 " > /sys/bus/pci/devices/0000:00:03.0 /driver/unbind
289
- echo " 0000:00:03.0 " > /sys/bus/pci/drivers/pci-stub/bind
312
+ # for ipu passthrough - ipu device
313
+ if [ -d " /sys/bus/pci/devices/${passthru_bdf["ipu"]} " ]; then
314
+ echo ${passthru_vpid["ipu"]} > /sys/bus/pci/drivers/pci-stub/new_id
315
+ echo ${passthru_bdf["ipu"]} > /sys/bus/pci/devices/${passthru_bdf["ipu"]} /driver/unbind
316
+ echo ${passthru_bdf["ipu"]} > /sys/bus/pci/drivers/pci-stub/bind
290
317
boot_ipu_option=" $boot_ipu_option " " -s 12,passthru,0/3/0 "
291
318
fi
292
319
293
- # for ipu passthrough - ipu related i2c 0:16.0
294
- # please use virtual slot 22 for i2c 0:16.0 to make sure that the i2c controller
320
+ # for ipu passthrough - ipu related i2c
321
+ # please use virtual slot 22 for i2c to make sure that the i2c controller
295
322
# could get the same virtaul BDF as physical BDF
296
- if [ -d " /sys/bus/pci/devices/0000:00:16.0 " ]; then
297
- echo " 8086 5aac " > /sys/bus/pci/drivers/pci-stub/new_id
298
- echo " 0000:00:16.0 " > /sys/bus/pci/devices/0000:00:16.0 /driver/unbind
299
- echo " 0000:00:16.0 " > /sys/bus/pci/drivers/pci-stub/bind
323
+ if [ -d " /sys/bus/pci/devices/${passthru_bdf["ipu_i2c"]} " ]; then
324
+ echo ${passthru_vpid["ipu_i2c"]} > /sys/bus/pci/drivers/pci-stub/new_id
325
+ echo ${passthru_bdf["ipu_i2c"]} > /sys/bus/pci/devices/${passthru_bdf["ipu_i2c"]} /driver/unbind
326
+ echo ${passthru_bdf["ipu_i2c"]} > /sys/bus/pci/drivers/pci-stub/bind
300
327
boot_ipu_option=" $boot_ipu_option " " -s 22,passthru,0/16/0 "
301
328
fi
302
329
else
305
332
306
333
boot_cse_option=" "
307
334
if [ $cse_passthrough == 1 ]; then
308
- echo " 8086 5a9a " > /sys/bus/pci/drivers/pci-stub/new_id
309
- echo " 0000:00:0f.0 " > /sys/bus/pci/devices/0000:00:0f.0 /driver/unbind
310
- echo " 0000:00:0f.0 " > /sys/bus/pci/drivers/pci-stub/bind
335
+ echo ${passthru_vpid["cse"]} /sys/bus/pci/drivers/pci-stub/new_id
336
+ echo ${passthru_bdf["cse"]} > /sys/bus/pci/devices/${passthru_bdf["cse"]} /driver/unbind
337
+ echo ${passthru_bdf["cse"]} > /sys/bus/pci/drivers/pci-stub/bind
311
338
boot_cse_option=" $boot_cse_option " " -s 15,passthru,0/0f/0 "
312
339
else
313
340
boot_cse_option=" $boot_cse_option " " -s 15,virtio-heci,0/0f/0 "
0 commit comments