summaryrefslogtreecommitdiffstats
path: root/core/modules/nvidia_kernel
diff options
context:
space:
mode:
authorSimon Rettberg2018-09-12 16:04:54 +0200
committerSimon Rettberg2018-09-12 16:04:54 +0200
commit4beee53195a65839f4d8f269bbba959783933cf4 (patch)
tree0f88497796976dd66a3da7c4aab4855a08a8571b /core/modules/nvidia_kernel
parent[rfs32] setup_partitons: More agressive udev-settle timeout (diff)
downloadmltk-4beee53195a65839f4d8f269bbba959783933cf4.tar.gz
mltk-4beee53195a65839f4d8f269bbba959783933cf4.tar.xz
mltk-4beee53195a65839f4d8f269bbba959783933cf4.zip
[rfs31/nvidia] Use drm.cfg.d machanism
Diffstat (limited to 'core/modules/nvidia_kernel')
-rw-r--r--core/modules/nvidia_kernel/module.build42
-rw-r--r--core/modules/nvidia_kernel/module.conf3
2 files changed, 43 insertions, 2 deletions
diff --git a/core/modules/nvidia_kernel/module.build b/core/modules/nvidia_kernel/module.build
index cb82865f..5c5e647d 100644
--- a/core/modules/nvidia_kernel/module.build
+++ b/core/modules/nvidia_kernel/module.build
@@ -1,8 +1,10 @@
#!/bin/bash
fetch_source() {
+ local url="$REQUIRED_URL_BASE/$REQUIRED_VERSION/$REQUIRED_NVIDIA"
mkdir -p src 2>/dev/null
cd src || perror "Could not change into src directory."
- download "$REQUIRED_URL"
+ download "$REQUIRED_URL_BASE/$REQUIRED_VERSION/README/supportedchips.html"
+ download "$url"
}
build() {
@@ -49,6 +51,44 @@ build() {
done
rm -rf "$MODULE_BUILD_DIR/NVIDIA"
+
+ mkdir -p "$MODULE_BUILD_DIR/drm.cfg.d"
+ local drmfile="$MODULE_BUILD_DIR/drm.cfg.d/00-nvidia"
+ cat > "$drmfile" <<-BLOFF
+ @nvidia acpi_ipmi nvidia/nvidia.ko nvidia/nvidia-uvm.ko nvidia/nvidia-modeset.ko nvidia/nvidia-drm.ko
+ @nvidia_fallback nouveau
+BLOFF
+ if ! [ -s "$MODULE_WORK_DIR/src/supportedchips.html" ]; then
+ pwarning "No supportedchips.html -- using wildcard drm.cfg"
+ echo "10de @nvidia" >> "$drmfile"
+ else
+ local mode line name dev version
+ pinfo "Creating drm.cfg"
+ mode=0
+ version=
+ while read -r line; do
+ if [[ "$line" =~ '<a name="legacy_' ]]; then
+ version=$(echo "$line" | sed -r 's/^.*name="legacy_([^"]+)".*$/\1/')
+ break # For now, we stop here; later on we could support legacy drivers
+ # By appending $version below and then having different locations for
+ # the modules, and in stage3.2 load different sqfs containers
+ elif [[ "$mode" = 0 ]] && [[ "$line" =~ ^'<tr' ]]; then
+ mode=1
+ elif [[ "$mode" = 1 ]] && [[ "$line" =~ ^'<td' ]]; then
+ mode=2
+ name=$(echo "$line" | sed -r 's/^.*<td[^>]*>([^<]+)<.*$/\1/')
+ elif [[ "$mode" = 2 ]] && [[ "$line" =~ ^'<td'[^'>']*'>'[0-9A-F]{4}'<' ]]; then
+ mode=0
+ dev=$(echo "$line" | sed -r 's/^.*<td[^>]*>([0-9A-Fa-f]{4})<.*$/\1/' | tr 'A-Z' 'a-z')
+ echo "10de:$dev @nvidia$version"
+ else
+ mode=0
+ name=
+ dev=
+ fi
+ done < supportedchips.html >> "$drmfile"
+ fi
+
}
post_copy() {
diff --git a/core/modules/nvidia_kernel/module.conf b/core/modules/nvidia_kernel/module.conf
index 1940ca36..97487c0f 100644
--- a/core/modules/nvidia_kernel/module.conf
+++ b/core/modules/nvidia_kernel/module.conf
@@ -1,10 +1,11 @@
#!/bin/bash
REQUIRED_VERSION="384.59"
REQUIRED_NVIDIA="NVIDIA-Linux-x86_64-$REQUIRED_VERSION.run"
-REQUIRED_URL="http://download.nvidia.com/XFree86/Linux-x86_64/$REQUIRED_VERSION/$REQUIRED_NVIDIA"
+REQUIRED_URL_BASE="http://download.nvidia.com/XFree86/Linux-x86_64"
REQUIRED_DIRECTORIES="
/lib/modules/nvidia
+ /drm.cfg.d
"
REQUIRED_MODULES="
kernel