diff options
author | Simon Rettberg | 2018-09-12 16:04:54 +0200 |
---|---|---|
committer | Simon Rettberg | 2018-09-12 16:04:54 +0200 |
commit | 4beee53195a65839f4d8f269bbba959783933cf4 (patch) | |
tree | 0f88497796976dd66a3da7c4aab4855a08a8571b /core/rootfs | |
parent | [rfs32] setup_partitons: More agressive udev-settle timeout (diff) | |
download | mltk-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-default | 7 | ||||
-rw-r--r-- | core/rootfs/rootfs-stage31/data/inc/drm.functions | 29 | ||||
-rw-r--r-- | core/rootfs/rootfs-stage31/module.build | 9 | ||||
-rw-r--r-- | core/rootfs/rootfs-stage31/module.conf | 2 | ||||
-rw-r--r-- | core/rootfs/rootfs-stage31/templates/drm.cfg | 41 |
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 |