84 lines
1.8 KiB
Plaintext
84 lines
1.8 KiB
Plaintext
|
#!/usr/bin/env bash
|
||
|
|
||
|
# Extracted frm nvidia-xrun
|
||
|
DRY_RUN=0
|
||
|
|
||
|
function execute {
|
||
|
if [[ ${DRY_RUN} -eq 1 ]]
|
||
|
then
|
||
|
echo ">>Dry run. Command: $*"
|
||
|
else
|
||
|
eval $*
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
|
||
|
function turn_off_gpu {
|
||
|
if [[ "$REMOVE_DEVICE" == '1' ]]; then
|
||
|
echo 'Removing Nvidia bus from the kernel'
|
||
|
execute "sudo tee /sys/bus/pci/devices/${DEVICE_BUS_ID}/remove <<<1"
|
||
|
else
|
||
|
echo 'Enabling powersave for the graphic card'
|
||
|
execute "sudo tee /sys/bus/pci/devices/${DEVICE_BUS_ID}/power/control <<<auto"
|
||
|
fi
|
||
|
|
||
|
echo 'Enabling powersave for the PCIe controller'
|
||
|
execute "sudo tee /sys/bus/pci/devices/${CONTROLLER_BUS_ID}/power/control <<<auto"
|
||
|
}
|
||
|
|
||
|
function turn_on_gpu {
|
||
|
echo 'Turning the PCIe controller on to allow card rescan'
|
||
|
execute "sudo tee /sys/bus/pci/devices/${CONTROLLER_BUS_ID}/power/control <<<on"
|
||
|
|
||
|
echo 'Waiting 1 second'
|
||
|
execute "sleep 1"
|
||
|
|
||
|
if [[ ! -d /sys/bus/pci/devices/${DEVICE_BUS_ID} ]]; then
|
||
|
echo 'Rescanning PCI devices'
|
||
|
execute "sudo tee /sys/bus/pci/rescan <<<1"
|
||
|
echo "Waiting ${BUS_RESCAN_WAIT_SEC} second for rescan"
|
||
|
execute "sleep ${BUS_RESCAN_WAIT_SEC}"
|
||
|
fi
|
||
|
|
||
|
echo 'Turning the card on'
|
||
|
execute "sudo tee /sys/bus/pci/devices/${DEVICE_BUS_ID}/power/control <<<on"
|
||
|
}
|
||
|
|
||
|
function load_modules {
|
||
|
for module in "${MODULES_LOAD[@]}"
|
||
|
do
|
||
|
echo "Loading module ${module}"
|
||
|
execute "sudo modprobe ${module}"
|
||
|
done
|
||
|
}
|
||
|
|
||
|
function unload_modules {
|
||
|
for module in "${MODULES_UNLOAD[@]}"
|
||
|
do
|
||
|
echo "Unloading module ${module}"
|
||
|
execute "sudo modprobe -r ${module}"
|
||
|
done
|
||
|
}
|
||
|
|
||
|
if [[ "$1" == "-d" ]]
|
||
|
then
|
||
|
DRY_RUN=1
|
||
|
shift 1
|
||
|
fi
|
||
|
|
||
|
# load config file
|
||
|
. /etc/default/nvidia-xrun
|
||
|
|
||
|
if [ "$1" == "on" ]
|
||
|
then
|
||
|
turn_on_gpu
|
||
|
load_modules
|
||
|
elif [ "$1" == "off" ]
|
||
|
then
|
||
|
unload_modules
|
||
|
turn_off_gpu
|
||
|
else
|
||
|
echo "Usage: $0 [on|off]"
|
||
|
fi
|
||
|
|