1
0

Accepting request 1061900 from X11:Drivers:Video:Redesign

- introduce %hardcode_pci_list macro for hardcoding PCI ID 
  modaliases for Supplements; make it default to *temporarily*
  workaround boo#1207520
  * TW: enable only officially supported headless GPUs!
  * Leap/sle: enable all Turing and Ampere GPUs and set the
    appropriate modprobe.d option, so we can at least begin
    testing on sle15-sp5 ...
- adds pci-table.patch, generati-pci-table.sh

OBS-URL: https://build.opensuse.org/request/show/1061900
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/nvidia-open-driver-G06-signed?expand=0&rev=3
This commit is contained in:
Dominique Leuenberger 2023-01-30 16:10:14 +00:00 committed by Git OBS Bridge
commit 545e3fd16b
4 changed files with 214 additions and 1 deletions

63
generati-pci-table.sh Normal file
View File

@ -0,0 +1,63 @@
#!/bin/sh
if [ $# -ne 1 ]; then
echo "$0 <input_file"
exit 1
fi
input=$1
cat > nvidia/nv_pci_table_list.h <<EOF
EOF
cat > nvidia/nv_module_pci_table_list.h <<EOF
EOF
for did in $(cat $input | cut -d " " -f1 ); do
echo $did
cat >> nvidia/nv_pci_table_list.h <<EOF
{
.vendor = PCI_VENDOR_ID_NVIDIA,
.device = $did,
.subvendor = PCI_ANY_ID,
.subdevice = PCI_ANY_ID,
.class = (PCI_CLASS_DISPLAY_VGA << 8),
.class_mask = ~0
},
{
.vendor = PCI_VENDOR_ID_NVIDIA,
.device = $did,
.subvendor = PCI_ANY_ID,
.subdevice = PCI_ANY_ID,
.class = (PCI_CLASS_DISPLAY_3D << 8),
.class_mask = ~0
},
EOF
cat >> nvidia/nv_module_pci_table_list.h <<EOF
{
.vendor = PCI_VENDOR_ID_NVIDIA,
.device = $did,
.subvendor = PCI_ANY_ID,
.subdevice = PCI_ANY_ID,
.class = (PCI_CLASS_DISPLAY_VGA << 8),
.class_mask = ~0
},
{
.vendor = PCI_VENDOR_ID_NVIDIA,
.device = $did,
.subvendor = PCI_ANY_ID,
.subdevice = PCI_ANY_ID,
.class = (PCI_CLASS_DISPLAY_3D << 8),
.class_mask = ~0
},
{
.vendor = PCI_VENDOR_ID_NVIDIA,
.device = $did,
.subvendor = PCI_ANY_ID,
.subdevice = PCI_ANY_ID,
.class = (PCI_CLASS_BRIDGE_OTHER << 8),
.class_mask = ~0
},
EOF
done
cp nvidia/nv_pci_table_list.h nvidia-drm/nv_pci_table_list.h
cp nvidia/nv_module_pci_table_list.h nvidia-drm/nv_module_pci_table_list.h

View File

@ -1,3 +1,15 @@
-------------------------------------------------------------------
Sun Jan 29 16:16:33 UTC 2023 - Stefan Dirsch <sndirsch@suse.com>
- introduce %hardcode_pci_list macro for hardcoding PCI ID
modaliases for Supplements; make it default to *temporarily*
workaround boo#1207520
* TW: enable only officially supported headless GPUs!
* Leap/sle: enable all Turing and Ampere GPUs and set the
appropriate modprobe.d option, so we can at least begin
testing on sle15-sp5 ...
- adds pci-table.patch, generati-pci-table.sh
-------------------------------------------------------------------
Wed Jan 25 15:00:04 UTC 2023 - Stefan Dirsch <sndirsch@suse.com>

View File

@ -16,6 +16,8 @@
#
%define hardcode_pci_list 1
%if %{undefined kernel_module_directory}
%if 0%{?usrmerged}
%define kernel_module_directory /usr/lib/modules
@ -49,8 +51,10 @@ Source9: pci_ids-unsupported-%{version}
Source10: pci_ids-unsupported
Source11: pesign-copy-sources
Source12: pesign-spec-macros
Source13: generati-pci-table.sh
Patch0: 0001-Don-t-override-INSTALL_MOD_DIR.patch
Patch2: persistent-nvidia-id-string.patch
Patch3: pci-table.patch
BuildRequires: %{kernel_module_package_buildreqs}
BuildRequires: gcc-c++
BuildRequires: kernel-source
@ -71,8 +75,10 @@ ExclusiveArch: x86_64 aarch64
%(sed -e '/^%%post\>/ r %_sourcedir/kmp-post.sh' -e '/^%%postun\>/ r %_sourcedir/kmp-postun.sh' %kmp_template_name >%_builddir/nvidia-kmp-template)
%kernel_module_package -n %{name} -t %_builddir/nvidia-kmp-template -f %_sourcedir/kmp-filelist -p %_sourcedir/preamble
# create hardware supplements for manual builds
%if ! 0%{hardcode_pci_list}
## create hardware supplements for manual builds
%{load:%{SOURCE12}}
%endif
# newer rpmbuilds attach the kernel version and the major part of release to %%pci_id_file of the __kmp_supplements script
# boo#1190210
@ -86,6 +92,16 @@ for GeForce RTX 2000 series and newer GPUs.
%setup -q -n open-gpu-kernel-modules-%{version}
%patch0 -p1
%patch2 -p1
%if 0%{hardcode_pci_list}
%patch3 -p0
pushd kernel-open
%if 0%{?suse_version} >= 1550
sh %{SOURCE13} %{SOURCE2}
%else
sh %{SOURCE13} %{SOURCE9}
%endif
popd
%endif
set -- *
mkdir source
mv "$@" source/
@ -148,7 +164,15 @@ for flavor in %flavors_to_build; do
blacklist nouveau
options nvidia-drm modeset=1
### Enable support on *all* Turing/Ampere GPUs: Alpha Quality!
%if 0%{hardcode_pci_list}
%if 0%{?suse_version} >= 1550
#options nvidia NVreg_OpenRmEnableUnsupportedGpus=1
%else
options nvidia NVreg_OpenRmEnableUnsupportedGpus=1
%endif
%else
#options nvidia NVreg_OpenRmEnableUnsupportedGpus=1
%endif
EOF
echo -n "install nvidia " >> $MODPROBE_DIR/50-nvidia-$flavor.conf
tail -n +3 %_sourcedir/modprobe.nvidia.install | awk '{ printf "%s ", $0 }' >> $MODPROBE_DIR/50-nvidia-$flavor.conf

114
pci-table.patch Normal file
View File

@ -0,0 +1,114 @@
diff -u -r kernel-open.orig/nvidia/nv-pci-table.c kernel-open/nvidia/nv-pci-table.c
--- kernel-open.orig/nvidia/nv-pci-table.c 2023-01-29 14:48:55.126713000 +0100
+++ kernel-open/nvidia/nv-pci-table.c 2023-01-29 14:56:28.901959000 +0100
@@ -28,51 +28,13 @@
/* Devices supported by RM */
struct pci_device_id nv_pci_table[] = {
- {
- .vendor = PCI_VENDOR_ID_NVIDIA,
- .device = PCI_ANY_ID,
- .subvendor = PCI_ANY_ID,
- .subdevice = PCI_ANY_ID,
- .class = (PCI_CLASS_DISPLAY_VGA << 8),
- .class_mask = ~0
- },
- {
- .vendor = PCI_VENDOR_ID_NVIDIA,
- .device = PCI_ANY_ID,
- .subvendor = PCI_ANY_ID,
- .subdevice = PCI_ANY_ID,
- .class = (PCI_CLASS_DISPLAY_3D << 8),
- .class_mask = ~0
- },
+#include "nv_pci_table_list.h"
{ }
};
/* Devices supported by all drivers in nvidia.ko */
struct pci_device_id nv_module_device_table[] = {
- {
- .vendor = PCI_VENDOR_ID_NVIDIA,
- .device = PCI_ANY_ID,
- .subvendor = PCI_ANY_ID,
- .subdevice = PCI_ANY_ID,
- .class = (PCI_CLASS_DISPLAY_VGA << 8),
- .class_mask = ~0
- },
- {
- .vendor = PCI_VENDOR_ID_NVIDIA,
- .device = PCI_ANY_ID,
- .subvendor = PCI_ANY_ID,
- .subdevice = PCI_ANY_ID,
- .class = (PCI_CLASS_DISPLAY_3D << 8),
- .class_mask = ~0
- },
- {
- .vendor = PCI_VENDOR_ID_NVIDIA,
- .device = PCI_ANY_ID,
- .subvendor = PCI_ANY_ID,
- .subdevice = PCI_ANY_ID,
- .class = (PCI_CLASS_BRIDGE_OTHER << 8),
- .class_mask = ~0
- },
+#include "nv_module_pci_table_list.h"
{ }
};
diff -u -r kernel-open.orig/nvidia-drm/nv-pci-table.c kernel-open/nvidia-drm/nv-pci-table.c
--- kernel-open.orig/nvidia-drm/nv-pci-table.c 2023-01-29 14:48:51.032916000 +0100
+++ kernel-open/nvidia-drm/nv-pci-table.c 2023-01-29 14:53:47.242620000 +0100
@@ -28,51 +28,13 @@
/* Devices supported by RM */
struct pci_device_id nv_pci_table[] = {
- {
- .vendor = PCI_VENDOR_ID_NVIDIA,
- .device = PCI_ANY_ID,
- .subvendor = PCI_ANY_ID,
- .subdevice = PCI_ANY_ID,
- .class = (PCI_CLASS_DISPLAY_VGA << 8),
- .class_mask = ~0
- },
- {
- .vendor = PCI_VENDOR_ID_NVIDIA,
- .device = PCI_ANY_ID,
- .subvendor = PCI_ANY_ID,
- .subdevice = PCI_ANY_ID,
- .class = (PCI_CLASS_DISPLAY_3D << 8),
- .class_mask = ~0
- },
+#include "nv_pci_table_list.h"
{ }
};
/* Devices supported by all drivers in nvidia.ko */
struct pci_device_id nv_module_device_table[] = {
- {
- .vendor = PCI_VENDOR_ID_NVIDIA,
- .device = PCI_ANY_ID,
- .subvendor = PCI_ANY_ID,
- .subdevice = PCI_ANY_ID,
- .class = (PCI_CLASS_DISPLAY_VGA << 8),
- .class_mask = ~0
- },
- {
- .vendor = PCI_VENDOR_ID_NVIDIA,
- .device = PCI_ANY_ID,
- .subvendor = PCI_ANY_ID,
- .subdevice = PCI_ANY_ID,
- .class = (PCI_CLASS_DISPLAY_3D << 8),
- .class_mask = ~0
- },
- {
- .vendor = PCI_VENDOR_ID_NVIDIA,
- .device = PCI_ANY_ID,
- .subvendor = PCI_ANY_ID,
- .subdevice = PCI_ANY_ID,
- .class = (PCI_CLASS_BRIDGE_OTHER << 8),
- .class_mask = ~0
- },
+#include "nv_module_pci_table_list.h"
{ }
};