hw_hotplug: use all available GPIO lines

Prepare Beetles to use all available GPIO lines to
manage NVMe drives.

The two reasons are:
 + we want to test multiple NVMes instead just one
 + setting all GPIO will make it easier to physically
   connect NVMe connectors to Beetles

Change-Id: I0351dd2e7cfef0a75eff0692be3c746ad1b5664f
Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13748
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: Karol Latecki <karol.latecki@intel.com>
This commit is contained in:
Krzysztof Karas 2022-07-22 06:47:59 +00:00 committed by Tomasz Zawadzki
parent f110891143
commit dc43aae54d

View File

@ -1,4 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
shopt -s nullglob
testdir=$(readlink -f $(dirname $0)) testdir=$(readlink -f $(dirname $0))
rootdir=$(readlink -f $testdir/../..) rootdir=$(readlink -f $testdir/../..)
@ -15,22 +16,25 @@ function beetle_ssh() {
} }
function insert_device() { function insert_device() {
beetle_ssh 'Beetle --SetGpio "$gpio" HIGH' beetle_ssh 'for gpio in {0..10}; do Beetle --SetGpio "$gpio" HIGH; done'
waitforblk $name for name in "${names[@]}"; do
waitforblk $name
done
DRIVER_OVERRIDE=$driver $rootdir/scripts/setup.sh DRIVER_OVERRIDE=$driver $rootdir/scripts/setup.sh
} }
function remove_device() { function remove_device() {
beetle_ssh 'Beetle --SetGpio "$gpio" LOW' beetle_ssh 'for gpio in {0..10}; do Beetle --SetGpio "$gpio" LOW; done'
} }
function restore_device() { function restore_device() {
beetle_ssh 'Beetle --SetGpio "$gpio" HIGH' beetle_ssh 'for gpio in {0..10}; do Beetle --SetGpio "$gpio" HIGH; done'
# Bind all devices to kernel
"$rootdir/scripts/setup.sh" reset
} }
ip=$1 ip=$1
gpio=$2 driver=$2
driver=$3
declare -i io_time=5 declare -i io_time=5
declare -i kernel_hotplug_time=7 declare -i kernel_hotplug_time=7
@ -38,18 +42,22 @@ declare -i kernel_hotplug_time=7
timing_enter hotplug_hw_cfg timing_enter hotplug_hw_cfg
# Configure microcontroller # Configure microcontroller
beetle_ssh 'Beetle --SetGpioDirection "$gpio" OUT' beetle_ssh 'for gpio in {0..10}; do Beetle --SetGpioDirection "$gpio" OUT; done'
# Get blk dev name connected to interposer # Get blk dev names connected to interposer
beetle_ssh 'Beetle --SetGpio "$gpio" HIGH' restore_device
sleep $kernel_hotplug_time sleep $kernel_hotplug_time
$rootdir/scripts/setup.sh reset
blk_list1=$(lsblk -d --output NAME | grep "^nvme") blk_list1=$(lsblk -d --output NAME | grep "^nvme")
remove_device remove_device
sleep $kernel_hotplug_time sleep $kernel_hotplug_time
blk_list2=$(lsblk -d --output NAME | grep "^nvme") || true blk_list2=$(lsblk -d --output NAME | grep "^nvme") || true
name=${blk_list1#"$blk_list2"}
names=(${blk_list1#"$blk_list2"})
nvme_count="${#names[@]}"
echo nvme_count
# Move devices back to userspace
insert_device insert_device
timing_exit hotplug_hw_cfg timing_exit hotplug_hw_cfg
@ -64,7 +72,7 @@ fi
exec {log}> >(tee -a "$testdir/log.txt") exec {log}> >(tee -a "$testdir/log.txt")
exec >&$log 2>&1 exec >&$log 2>&1
$SPDK_EXAMPLE_DIR/hotplug -i 0 -t 100 -n 2 -r 2 $mode & "$SPDK_EXAMPLE_DIR/hotplug" -i 0 -t 100 -n $((2 * nvme_count)) -r $((2 * nvme_count)) $mode &
hotplug_pid=$! hotplug_pid=$!
trap 'killprocess $hotplug_pid; restore_device; rm $testdir/log.txt; exit 1' SIGINT SIGTERM EXIT trap 'killprocess $hotplug_pid; restore_device; rm $testdir/log.txt; exit 1' SIGINT SIGTERM EXIT
@ -105,4 +113,6 @@ rm $testdir/log.txt
trap - SIGINT SIGTERM EXIT trap - SIGINT SIGTERM EXIT
restore_device
timing_exit hotplug_hw_test timing_exit hotplug_hw_test