summaryrefslogtreecommitdiff
path: root/SOURCES/0001-device-detect-vGPUs.patch
diff options
context:
space:
mode:
Diffstat (limited to 'SOURCES/0001-device-detect-vGPUs.patch')
-rw-r--r--SOURCES/0001-device-detect-vGPUs.patch59
1 files changed, 59 insertions, 0 deletions
diff --git a/SOURCES/0001-device-detect-vGPUs.patch b/SOURCES/0001-device-detect-vGPUs.patch
new file mode 100644
index 0000000..08f591f
--- /dev/null
+++ b/SOURCES/0001-device-detect-vGPUs.patch
@@ -0,0 +1,59 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Karol Herbst <kherbst@redhat.com>
+Date: Tue, 28 Apr 2020 18:54:04 +0200
+Subject: [PATCH] device: detect vGPUs
+
+Using ENODEV as this prevents probe failed errors in dmesg.
+
+v2: move check further down
+
+Signed-off-by: Karol Herbst <kherbst@redhat.com>
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+---
+ drivers/gpu/drm/nouveau/nvkm/engine/device/base.c | 15 ++++++++++++---
+ 1 file changed, 12 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
+index c732074bf790..f977dddcd809 100644
+--- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
++++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
+@@ -2948,7 +2948,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
+ {
+ struct nvkm_subdev *subdev;
+ u64 mmio_base, mmio_size;
+- u32 boot0, strap;
++ u32 boot0, boot1, strap;
+ void __iomem *map = NULL;
+ int ret = -EEXIST, i;
+ unsigned chipset;
+@@ -2998,9 +2998,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
+ }
+ }
+
+- /* read boot0 and strapping information */
+ boot0 = ioread32_native(map + 0x000000);
+- strap = ioread32_native(map + 0x101000);
+
+ /* chipset can be overridden for devel/testing purposes */
+ chipset = nvkm_longopt(device->cfgopt, "NvChipset", 0);
+@@ -3158,6 +3156,17 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
+ nvdev_info(device, "NVIDIA %s (%08x)\n",
+ device->chip->name, boot0);
+
++ /* vGPU detection */
++ boot1 = ioread32_native(map + 0x000004);
++ if (device->card_type >= TU100 && (boot1 & 0x00030000)) {
++ nvdev_info(device, "vGPUs are not supported\n");
++ ret = -ENODEV;
++ goto done;
++ }
++
++ /* read strapping information */
++ strap = ioread32_native(map + 0x101000);
++
+ /* determine frequency of timing crystal */
+ if ( device->card_type <= NV_10 || device->chipset < 0x17 ||
+ (device->chipset >= 0x20 && device->chipset < 0x25))
+--
+2.26.2
+