xref: /linux/tools/testing/selftests/vfio/scripts/setup.sh (revision a3ebb59eee2e558e8f8f27fc3f75cd367f17cd8e)
1*fa246a1dSDavid Matlack# SPDX-License-Identifier: GPL-2.0-or-later
2*fa246a1dSDavid Matlackset -e
3*fa246a1dSDavid Matlack
4*fa246a1dSDavid Matlacksource $(dirname -- "${BASH_SOURCE[0]}")/lib.sh
5*fa246a1dSDavid Matlack
6*fa246a1dSDavid Matlackfunction main() {
7*fa246a1dSDavid Matlack	local device_bdf
8*fa246a1dSDavid Matlack	local device_dir
9*fa246a1dSDavid Matlack	local numvfs
10*fa246a1dSDavid Matlack	local driver
11*fa246a1dSDavid Matlack
12*fa246a1dSDavid Matlack	if [ $# = 0 ]; then
13*fa246a1dSDavid Matlack		echo "usage: $0 segment:bus:device.function ..." >&2
14*fa246a1dSDavid Matlack		exit 1
15*fa246a1dSDavid Matlack	fi
16*fa246a1dSDavid Matlack
17*fa246a1dSDavid Matlack	for device_bdf in "$@"; do
18*fa246a1dSDavid Matlack		test -d /sys/bus/pci/devices/${device_bdf}
19*fa246a1dSDavid Matlack
20*fa246a1dSDavid Matlack		device_dir=${DEVICES_DIR}/${device_bdf}
21*fa246a1dSDavid Matlack		if [ -d "${device_dir}" ]; then
22*fa246a1dSDavid Matlack			echo "${device_bdf} has already been set up, exiting."
23*fa246a1dSDavid Matlack			exit 0
24*fa246a1dSDavid Matlack		fi
25*fa246a1dSDavid Matlack
26*fa246a1dSDavid Matlack		mkdir -p ${device_dir}
27*fa246a1dSDavid Matlack
28*fa246a1dSDavid Matlack		numvfs=$(get_sriov_numvfs ${device_bdf})
29*fa246a1dSDavid Matlack		if [ "${numvfs}" ]; then
30*fa246a1dSDavid Matlack			set_sriov_numvfs ${device_bdf} 0
31*fa246a1dSDavid Matlack			echo ${numvfs} > ${device_dir}/sriov_numvfs
32*fa246a1dSDavid Matlack		fi
33*fa246a1dSDavid Matlack
34*fa246a1dSDavid Matlack		driver=$(get_driver ${device_bdf})
35*fa246a1dSDavid Matlack		if [ "${driver}" ]; then
36*fa246a1dSDavid Matlack			unbind ${device_bdf} ${driver}
37*fa246a1dSDavid Matlack			echo ${driver} > ${device_dir}/driver
38*fa246a1dSDavid Matlack		fi
39*fa246a1dSDavid Matlack
40*fa246a1dSDavid Matlack		set_driver_override ${device_bdf} vfio-pci
41*fa246a1dSDavid Matlack		touch ${device_dir}/driver_override
42*fa246a1dSDavid Matlack
43*fa246a1dSDavid Matlack		bind ${device_bdf} vfio-pci
44*fa246a1dSDavid Matlack		touch ${device_dir}/vfio-pci
45*fa246a1dSDavid Matlack	done
46*fa246a1dSDavid Matlack}
47*fa246a1dSDavid Matlack
48*fa246a1dSDavid Matlackmain "$@"
49