-
Philip Müller authoredPhilip Müller authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
MHWDCONFIG 3.45 KiB
# mhwd Driver Config
NAME="video-hybrid-amd-nvidia-prime"
INFO="Hybrid prime solution for NVIDIA Optimus Technology - Closed source NVIDIA driver & open source amd driver."
VERSION="2025.01.13"
FREEDRIVER="false"
PRIORITY="8"
# NVIDIA cards
CLASSIDS="0300 0302"
VENDORIDS="10de"
DEVICEIDS=">/var/lib/mhwd/ids/pci/nvidia.ids"
# Amd cards
CLASSIDS="0300"
VENDORIDS="1002"
DEVICEIDS="*"
# Conflicts
CONFLICTS="nvidia-390xx-utils nvidia-390xx-settings libxnvctrl-390xx nvidia-470xx-utils nvidia-470xx-settings libxnvctrl-470xx"
CONFLICTS_64="lib32-nvidia-390xx-utils lib32-nvidia-470xx-utils"
CONKMOD="nvidia-390xx nvidia-470xx"
# Conflicts with other mhwd configs
MHWDCONFLICTS="video*nvidia*"
MHWDDEPENDS="video-linux"
# Dependencies (nvidia-prime dependency is technically optional, but adds the prime-run command)
DEPENDS="nvidia-utils nvidia-settings libxnvctrl nvidia-prime"
DEPENDS_64="lib32-nvidia-utils"
DEPKMOD="nvidia"
[[ "$(nvidia-recommended-driver)" == "open" ]] && DEPKMOD="nvidia-open"
XORGFILE="/etc/X11/mhwd.d/nvidia.conf"
UDEVFILE="/etc/udev/rules.d/90-mhwd-prime-powermanagement.rules"
MHWDGPU_BLCKLSTNVIDIA="/etc/modprobe.d/mhwd-gpu.conf"
MHWDGPU_MODLDNVIDIA="/etc/modules-load.d/mhwd-gpu.conf"
_setup_nvidia_powermanagememnt()
{
cat <<EOF > "${UDEVFILE}"
# Remove NVIDIA USB xHCI Host Controller devices, if present
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{remove}="1"
# Remove NVIDIA USB Type-C UCSI devices, if present
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c8000", ATTR{remove}="1"
# Remove NVIDIA Audio devices, if present (enable it for kernels lower than 5.5)
#ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x040300", ATTR{remove}="1"
# Enable runtime PM for NVIDIA VGA/3D controller devices on driver bind
ACTION=="bind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030000", TEST=="power/control", ATTR{power/control}="auto"
ACTION=="bind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030200", TEST=="power/control", ATTR{power/control}="auto"
# Disable runtime PM for NVIDIA VGA/3D controller devices on driver unbind
ACTION=="unbind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030000", TEST=="power/control", ATTR{power/control}="on"
ACTION=="unbind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030200", TEST=="power/control", ATTR{power/control}="on"
EOF
echo 'options nvidia "NVreg_DynamicPowerManagement=0x02"' >> "${MHWDGPU_BLCKLSTNVIDIA}"
}
post_install()
{
# Create an empty Xorg config file, configuration is already provided by nvidia-*-utils
MHWD_HEADING "${XORGFILE}"
mhwd-gpu --setmod nvidia --setxorg "${XORGFILE}"
_setup_nvidia_powermanagememnt
# Without this 'glxgears' doesn't work in live-session
MODULES_LOAD="/etc/modules-load.d"
echo "nvidia-drm" >> "${MODULES_LOAD}/mhwd-gpu.conf"
if [ ! "$(pgrep X)" ]; then
modprobe nvidia-drm
fi
}
post_remove()
{
rm -f "${XORGFILE}"
rm -f "${UDEVFILE}"
if [ -f "${MHWDGPU_BLCKLSTNVIDIA}" ]; then
sed -i '/^blacklist nouveau/d' "${MHWDGPU_BLCKLSTNVIDIA}"
sed -i '/^blacklist ttm/d' "${MHWDGPU_BLCKLSTNVIDIA}"
sed -i '/^blacklist drm_kms_helper/d' "${MHWDGPU_BLCKLSTNVIDIA}"
sed -i '/^blacklist drm/d' "${MHWDGPU_BLCKLSTNVIDIA}"
sed -i '/^options nvidia "NVreg_DynamicPowerManagement=0x02"/d' "${MHWDGPU_BLCKLSTNVIDIA}"
fi
if [ -f "${MHWDGPU_MODLDNVIDIA}" ]; then
sed -i '/^nvidia/d' "${MHWDGPU_MODLDNVIDIA}"
fi
mhwd-gpu --check
}