summaryrefslogtreecommitdiffstats
path: root/core/rootfs
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/rootfs
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/rootfs')
-rw-r--r--core/rootfs/rootfs-stage31/data/drm.cfg.d/50-default7
-rw-r--r--core/rootfs/rootfs-stage31/data/inc/drm.functions29
-rw-r--r--core/rootfs/rootfs-stage31/module.build9
-rw-r--r--core/rootfs/rootfs-stage31/module.conf2
-rw-r--r--core/rootfs/rootfs-stage31/templates/drm.cfg41
5 files changed, 30 insertions, 58 deletions
diff --git a/core/rootfs/rootfs-stage31/data/drm.cfg.d/50-default b/core/rootfs/rootfs-stage31/data/drm.cfg.d/50-default
new file mode 100644
index 00000000..a8b4ffbf
--- /dev/null
+++ b/core/rootfs/rootfs-stage31/data/drm.cfg.d/50-default
@@ -0,0 +1,7 @@
+## intel
+# Dell GX 620
+8086:2772 i915
+# aliases
+@amdgpu amdgpu
+@amdgpu_fallback radeon
+@radeon radeon
diff --git a/core/rootfs/rootfs-stage31/data/inc/drm.functions b/core/rootfs/rootfs-stage31/data/inc/drm.functions
index ab87efb3..f4ca3af5 100644
--- a/core/rootfs/rootfs-stage31/data/inc/drm.functions
+++ b/core/rootfs/rootfs-stage31/data/inc/drm.functions
@@ -1,7 +1,14 @@
+grepmod () {
+ local line
+ line=$( grep -i -m1 "^$1\\s" /drm.cfg.d/* )
+ [ -z "$line" ] && return
+ echo ${line:${#1}}
+}
+
# pass module name(s) relative path in /lib/modules with .ko extension, or special like @nvidia or @amd
load_gfx () {
- local MOD FILES OFFSET RETVAL
+ local MOD FILES RETVAL
RETVAL=1 # default: failure
while [ $# -gt 0 ]; do
MOD=$(echo $1) # trim :)
@@ -9,16 +16,14 @@ load_gfx () {
[ -z "$MOD" ] && continue
if [ "x${MOD}" != "x${MOD#@}" ]; then
# starts with '@' - special
- OFFSET=$(( ${#MOD} + 2 ))
- FILES=$( grep "^$MOD\s" "/drm.cfg" | cut -c ${OFFSET}- )
+ FILES=$( grepmod "$MOD" )
[ -z "$FILES" ] && drop_shell "Could not find entry for special $MOD"
if load_gfx $FILES; then
RETVAL=0
else
# loading special case failed, try fallback if found
MOD="${MOD}_fallback"
- OFFSET=$(( ${#MOD} + 2 ))
- FILES=$( grep "^$MOD\s" "/drm.cfg" | cut -c ${OFFSET}- )
+ FILES=$( grepmod "$MOD" )
[ -n "$FILES" ] && load_gfx $FILES && RETVAL=0
fi
else # regular module name or filename
@@ -51,20 +56,20 @@ setup_gfx () {
fi
# not forced - check which driver to load
CARDS=$(lspci | grep 'Class 0300' | awk '{print $4}')
- if [ -e "/drm.cfg" ] && [ -n "$CARDS" ]; then
+ if [ -d "/drm.cfg.d" ] && [ -n "$CARDS" ]; then
SUCCESS="yes"
for CARD in $CARDS; do
# look up exact pci id of this card
- [ $DEBUG -ge 1 ] && echo Trying exact matching for drm drivers for $CARD
- FILES=$(grep "^$CARD\s" "/drm.cfg" | cut -c 11-)
+ [ $DEBUG -ge 1 ] && echo "Trying exact matching for drm drivers for $CARD"
+ FILES=$( grepmod "$CARD" )
load_gfx $FILES && continue
# failed... try vendor id only
- CARD=$(echo $CARD | cut -c 1-4)
- [ $DEBUG -ge 1 ] && echo Trying vendor matching for drm drivers for $CARD
- FILES=$(grep "^$CARD\s" "/drm.cfg" | cut -c 6-)
+ CARD=${CARD:0:4}
+ [ $DEBUG -ge 1 ] && echo "Trying vendor matching for drm drivers for $CARD"
+ FILES=$( grepmod "$CARD" )
load_gfx $FILES && continue
# everything failed for this card
- echo Unknown PCI vendor id: $CARD
+ echo "Unknown PCI vendor id: $CARD"
SUCCESS="no"
done
[ "x$SUCCESS" == "xyes" ] && return 0
diff --git a/core/rootfs/rootfs-stage31/module.build b/core/rootfs/rootfs-stage31/module.build
index e9e9a979..49377a90 100644
--- a/core/rootfs/rootfs-stage31/module.build
+++ b/core/rootfs/rootfs-stage31/module.build
@@ -22,16 +22,17 @@ build() {
# generate drm module loading database
pinfo "Generating PCI ID database for DRM drivers"
local DRM_MODULES="$KERNEL_BASE_DIR/lib/modules/$TARGET_KERNEL_LONG/kernel/drivers/gpu/drm"
- local PCI_FILE="$MODULE_BUILD_DIR/drm.cfg"
+ mkdir -p "$MODULE_BUILD_DIR/drm.cfg.d"
+ local PCI_FILE="$MODULE_BUILD_DIR/drm.cfg.d/99-modinfo"
+ rm -f -- "$PCI_FILE"
[ -d "$DRM_MODULES" ] || perror "DRM dir not found at $DRM_MODULES"
- cp "$MODULE_DIR/templates/drm.cfg" "$PCI_FILE" || perror "Could not copy drm.cfg from templates dir"
echo "# -- generated from kernel $TARGET_KERNEL_LONG modules:" >> "$PCI_FILE"
- for FILE in $(find "$DRM_MODULES" -name "*.ko"); do
+ for FILE in $(find "$DRM_MODULES" -name "*.ko" | sort -u); do # sort -u is an ugly hack to get amdgpu to take precedence over radeon
local MODNAME=$(basename "$FILE")
MODNAME=${MODNAME%.ko}
[ -z "$MODNAME" ] && perror "$FILE equals empty modname"
echo "# $MODNAME" >> "$PCI_FILE"
- for ALIAS in $(modinfo "$FILE" | grep '^alias:' | grep -o 'pci:v.*' | tr '[A-F]' '[a-f]'); do
+ for ALIAS in $(modinfo "$FILE" | grep '^alias:' | grep -o 'pci:v.*' | tr 'A-F' 'a-f'); do
VENDOR=$(echo $ALIAS | cut -c 10-13)
if [ "x$(echo $ALIAS | cut -c 15)" == "x*" ]; then
# device wildcard
diff --git a/core/rootfs/rootfs-stage31/module.conf b/core/rootfs/rootfs-stage31/module.conf
index 5d8a4b81..48559567 100644
--- a/core/rootfs/rootfs-stage31/module.conf
+++ b/core/rootfs/rootfs-stage31/module.conf
@@ -76,5 +76,5 @@ REQUIRED_SYSTEM_FILES="
/etc/localtime
"
REQUIRED_FILES="
- /drm.cfg
+ /drm.cfg.d/99-modinfo
"
diff --git a/core/rootfs/rootfs-stage31/templates/drm.cfg b/core/rootfs/rootfs-stage31/templates/drm.cfg
deleted file mode 100644
index 22941bb4..00000000
--- a/core/rootfs/rootfs-stage31/templates/drm.cfg
+++ /dev/null
@@ -1,41 +0,0 @@
-## nvidia
-# 8800 GTS
-10de:0193 @nvidia
-# ION
-10de:087d @nvidia
-##
-# 10de-11c0: nvidia Geforce GTX 660 (OG)
-# 10de-11fa: nvidia Quadro K4000 (RT)
-# 10de-0fc2: nvidia GeForce GT 630 (OG)
-# 10de-0dd8: nvidia Quadro 2000
-# 10de-0ff3: nvidia Quadro K420
-# 10de-0df8: nvidia Quadro 600
-# 10de-06dd: nvidia Quadro 4000
-# 10de-1382: nvidia GeForce GTX 745 (HN)
-# 10de-13ba: nvidia Quadro K2200
-# 10de-13bb: nvidia Quadro K620 (HN)
-# 10de-1381: nvidia GeForce GTX 750 (HN)
-# 10de:0ffe: nvidia Quadro K2000
-##
-10de:11c0 @nvidia
-10de:11fa @nvidia
-10de:0fc2 @nvidia
-10de:0dd8 @nvidia
-10de:0ff3 @nvidia
-10de:0df8 @nvidia
-10de:06dd @nvidia
-10de:1382 @nvidia
-10de:13ba @nvidia
-10de:13bb @nvidia
-10de:1381 @nvidia
-10de:0ffe @nvidia
-
-## intel
-# Dell GX 620
-8086:2772 i915
-# aliases
-@nvidia acpi_ipmi nvidia/nvidia.ko nvidia/nvidia-uvm.ko nvidia/nvidia-modeset.ko nvidia/nvidia-drm.ko
-@nvidia_fallback nouveau
-@amdgpu amdgpu
-@amdgpu_fallback radeon
-@radeon radeon