1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
#!/bin/bash
#
# This module attempts to properly deal with thermal behavior on PowerPC
# based Mac systems, by installing the model-appropriate (when hostonly)
# or all (when not) fan control/thermal kernel modules and loading them
# in a hook.
#
# While this is not strictly necessary for all kernels, particularly
# modular kernels will not autoload those drivers, even once the full
# system is up, which results in the fans spinning up to 100%; this is
# particularly annoying on live systems, where the system takes a while
# to load, so it's best to load the drivers early in initramfs stage.
#
# The behavior of this is inspired by the thermal hook in Debian's
# initramfs-tools, but written for dracut specifically and updated
# for modern kernels (2012+).
# called by dracut
check() {
local _arch=${DRACUT_ARCH:-$(uname -m)}
# only for PowerPC Macs
[[ $_arch == ppc* && $_arch != ppc64le ]] || return 1
return 0
}
# called by dracut
installkernel() {
pmac_model() {
local pm_model
pm_model="$(grep model /proc/cpuinfo)"
echo "${pm_model##*: }"
}
# only PowerMac3,6 has a module, special case
if [[ ${DRACUT_ARCH:-$(uname -m)} != ppc64* ]]; then
if [[ $hostonly_mode != "strict" ]] || [[ $hostonly && "$(pmac_model)" == "PowerMac3,6" ]]; then
hostonly=$(optional_hostonly) instmods therm_windtunnel
fi
return 0
fi
windfarm_modules() {
if [[ $hostonly_mode != "strict" ]]; then
# include all drivers when not hostonly or sloppy hostonly
hostonly='' instmods \
windfarm_pm72 windfarm_pm81 windfarm_pm91 windfarm_pm112 \
windfarm_pm121 windfarm_rm31
else
# guess model specific module, then install the rest
case "$(pmac_model)" in
PowerMac7,2 | PowerMac7,3) instmods windfarm_pm72 ;;
PowerMac8,1 | PowerMac8,2) instmods windfarm_pm81 ;;
PowerMac9,1) instmods windfarm_pm91 ;;
PowerMac11,2) instmods windfarm_pm112 ;;
PowerMac12,1) instmods windfarm_pm121 ;;
RackMac3,1) instmods windfarm_rm31 ;;
# no match, so skip installation of the rest
*) return 1 ;;
esac
fi
return 0
}
# hostonly and didn't match a model; skip installing other modules
windfarm_modules || return 0
# these are all required by the assorted windfarm_pm*
instmods \
windfarm_core windfarm_cpufreq_clamp windfarm_pid \
windfarm_smu_controls windfarm_smu_sat windfarm_smu_sensors \
windfarm_fcu_controls windfarm_ad7417_sensor windfarm_max6690_sensor \
windfarm_lm75_sensor windfarm_lm87_sensor
}
# called by dracut
install() {
# this will attempt to load the appropriate modules
inst_hook pre-udev 99 "$moddir/load-thermal.sh"
}
|