mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

Create selftests for PCIe BW control through the PCIe cooling device sysfs interface. First, the BW control selftest finds the PCIe Port to test with. By default, the PCIe Port with the highest Link Speed is selected but another PCIe Port can be provided with -d parameter. The actual test steps the cur_state of the cooling device one-by-one from max_state to what the cur_state was initially. The speed change is confirmed by observing the current_link_speed for the corresponding PCIe Port. Link: https://lore.kernel.org/r/20241018144755.7875-10-ilpo.jarvinen@linux.intel.com Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
67 lines
1.1 KiB
Bash
Executable file
67 lines
1.1 KiB
Bash
Executable file
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
set -e
|
|
|
|
TESTNAME=set_pcie_speed
|
|
|
|
declare -a PCIELINKSPEED=(
|
|
"2.5 GT/s PCIe"
|
|
"5.0 GT/s PCIe"
|
|
"8.0 GT/s PCIe"
|
|
"16.0 GT/s PCIe"
|
|
"32.0 GT/s PCIe"
|
|
"64.0 GT/s PCIe"
|
|
)
|
|
|
|
# Kselftest framework requirement - SKIP code is 4.
|
|
ksft_skip=4
|
|
retval=0
|
|
|
|
coolingdev="$1"
|
|
statefile="$coolingdev/cur_state"
|
|
maxfile="$coolingdev/max_state"
|
|
linkspeedfile="$2"
|
|
|
|
oldstate=`cat $statefile`
|
|
maxstate=`cat $maxfile`
|
|
|
|
set_state()
|
|
{
|
|
local state=$1
|
|
local linkspeed
|
|
local expected_linkspeed
|
|
|
|
echo $state > $statefile
|
|
|
|
sleep 1
|
|
|
|
linkspeed="`cat $linkspeedfile`"
|
|
expected_linkspeed=$((maxstate-state))
|
|
expected_str="${PCIELINKSPEED[$expected_linkspeed]}"
|
|
if [ ! "${expected_str}" = "${linkspeed}" ]; then
|
|
echo "$TESTNAME failed: expected: ${expected_str}; got ${linkspeed}"
|
|
retval=1
|
|
fi
|
|
}
|
|
|
|
cleanup_skip ()
|
|
{
|
|
set_state $oldstate
|
|
exit $ksft_skip
|
|
}
|
|
|
|
trap cleanup_skip EXIT
|
|
|
|
echo "$TESTNAME: testing states $maxstate .. $oldstate with $coolingdev"
|
|
for i in $(seq $maxstate -1 $oldstate); do
|
|
set_state "$i"
|
|
done
|
|
|
|
trap EXIT
|
|
if [ $retval -eq 0 ]; then
|
|
echo "$TESTNAME [PASS]"
|
|
else
|
|
echo "$TESTNAME [FAIL]"
|
|
fi
|
|
exit $retval
|