kernel-5.7.0-0.rc7.20200528gitb0c3ba31be3e.1
* Thu May 28 2020 CKI@GitLab <cki-project@redhat.com> [5.7.0-0.rc7.20200528gitb0c3ba31be3e.1] - b0c3ba31be3e rebase - Updated changelog for the release based on 444fc5cde643 ("CKI@GitLab") Resolves: rhbz# Signed-off-by: Justin M. Forbes <jforbes@fedoraproject.org>
This commit is contained in:
parent
a79d8affb7
commit
c1d5388741
55
0001-acr-Use-kmemdup-instead-of-kmalloc-and-memcpy.patch
Normal file
55
0001-acr-Use-kmemdup-instead-of-kmalloc-and-memcpy.patch
Normal file
@ -0,0 +1,55 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zou Wei <zou_wei@huawei.com>
|
||||
Date: Tue, 21 Apr 2020 20:37:31 +0800
|
||||
Subject: [PATCH] acr: Use kmemdup instead of kmalloc and memcpy
|
||||
|
||||
Fixes coccicheck warning:
|
||||
|
||||
drivers/gpu/drivers/gpu/drm/nouveau/nvkm/subdev/acr/hsfw.c:103:23-30: WARNING opportunity for kmemdup
|
||||
drivers/gpu/drivers/gpu/drm/nouveau/nvkm/subdev/acr/hsfw.c:113:22-29: WARNING opportunity for kmemdup
|
||||
|
||||
Fixes: 22dcda45a3d1 ("drivers/gpu/drm/nouveau/acr: implement new subdev to replace "secure boot"")
|
||||
Reported-by: Hulk Robot <hulkci@huawei.com>
|
||||
Signed-off-by: Zou Wei <zou_wei@huawei.com>
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/nouveau/nvkm/subdev/acr/hsfw.c | 12 ++++--------
|
||||
1 file changed, 4 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/hsfw.c b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/hsfw.c
|
||||
index aecce2dac558..667fa016496e 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/hsfw.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/hsfw.c
|
||||
@@ -100,25 +100,21 @@ nvkm_acr_hsfw_load_image(struct nvkm_acr *acr, const char *name, int ver,
|
||||
hsfw->data_size = lhdr->data_size;
|
||||
|
||||
hsfw->sig.prod.size = fwhdr->sig_prod_size;
|
||||
- hsfw->sig.prod.data = kmalloc(hsfw->sig.prod.size, GFP_KERNEL);
|
||||
+ hsfw->sig.prod.data = kmemdup(fw->data + fwhdr->sig_prod_offset + sig,
|
||||
+ hsfw->sig.prod.size, GFP_KERNEL);
|
||||
if (!hsfw->sig.prod.data) {
|
||||
ret = -ENOMEM;
|
||||
goto done;
|
||||
}
|
||||
|
||||
- memcpy(hsfw->sig.prod.data, fw->data + fwhdr->sig_prod_offset + sig,
|
||||
- hsfw->sig.prod.size);
|
||||
-
|
||||
hsfw->sig.dbg.size = fwhdr->sig_dbg_size;
|
||||
- hsfw->sig.dbg.data = kmalloc(hsfw->sig.dbg.size, GFP_KERNEL);
|
||||
+ hsfw->sig.dbg.data = kmemdup(fw->data + fwhdr->sig_dbg_offset + sig,
|
||||
+ hsfw->sig.dbg.size, GFP_KERNEL);
|
||||
if (!hsfw->sig.dbg.data) {
|
||||
ret = -ENOMEM;
|
||||
goto done;
|
||||
}
|
||||
|
||||
- memcpy(hsfw->sig.dbg.data, fw->data + fwhdr->sig_dbg_offset + sig,
|
||||
- hsfw->sig.dbg.size);
|
||||
-
|
||||
hsfw->sig.patch_loc = loc;
|
||||
done:
|
||||
nvkm_firmware_put(fw);
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,32 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Colin Ian King <colin.king@canonical.com>
|
||||
Date: Sat, 29 Feb 2020 00:53:07 +0000
|
||||
Subject: [PATCH] core/memory: remove redundant assignments to variable ret
|
||||
|
||||
The variable ret is being initialized with a value that is never
|
||||
read and it is being updated later with a new value. The initialization
|
||||
is redundant and can be removed.
|
||||
|
||||
Addresses-Coverity: ("Unused value")
|
||||
Signed-off-by: Colin Ian King <colin.king@canonical.com>
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/nouveau/nvkm/core/memory.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/core/memory.c b/drivers/gpu/drm/nouveau/nvkm/core/memory.c
|
||||
index 4cc186262d34..38130ef272d6 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/core/memory.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/core/memory.c
|
||||
@@ -140,7 +140,7 @@ nvkm_memory_new(struct nvkm_device *device, enum nvkm_memory_target target,
|
||||
{
|
||||
struct nvkm_instmem *imem = device->imem;
|
||||
struct nvkm_memory *memory;
|
||||
- int ret = -ENOSYS;
|
||||
+ int ret;
|
||||
|
||||
if (unlikely(target != NVKM_MEM_TARGET_INST || !imem))
|
||||
return -ENOSYS;
|
||||
--
|
||||
2.26.2
|
||||
|
62
0001-device-detect-if-changing-endianness-failed.patch
Normal file
62
0001-device-detect-if-changing-endianness-failed.patch
Normal file
@ -0,0 +1,62 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Karol Herbst <kherbst@redhat.com>
|
||||
Date: Tue, 28 Apr 2020 18:54:03 +0200
|
||||
Subject: [PATCH] device: detect if changing endianness failed
|
||||
|
||||
v2: relax the checks a little
|
||||
|
||||
Signed-off-by: Karol Herbst <kherbst@redhat.com>
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
.../gpu/drm/nouveau/nvkm/engine/device/base.c | 26 +++++++++++++++----
|
||||
1 file changed, 21 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
|
||||
index 37589f36546d..c732074bf790 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
|
||||
@@ -2924,6 +2924,20 @@ nvkm_device_del(struct nvkm_device **pdevice)
|
||||
}
|
||||
}
|
||||
|
||||
+static inline bool
|
||||
+nvkm_device_endianness(void __iomem *pri)
|
||||
+{
|
||||
+ u32 boot1 = ioread32_native(pri + 0x000004) & 0x01000001;
|
||||
+#ifdef __BIG_ENDIAN
|
||||
+ if (!boot1)
|
||||
+ return false;
|
||||
+#else
|
||||
+ if (boot1)
|
||||
+ return false;
|
||||
+#endif
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
int
|
||||
nvkm_device_ctor(const struct nvkm_device_func *func,
|
||||
const struct nvkm_device_quirk *quirk,
|
||||
@@ -2973,13 +2987,15 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
|
||||
/* identify the chipset, and determine classes of subdev/engines */
|
||||
if (detect) {
|
||||
/* switch mmio to cpu's native endianness */
|
||||
-#ifndef __BIG_ENDIAN
|
||||
- if (ioread32_native(map + 0x000004) != 0x00000000) {
|
||||
-#else
|
||||
- if (ioread32_native(map + 0x000004) == 0x00000000) {
|
||||
-#endif
|
||||
+ if (!nvkm_device_endianness(map)) {
|
||||
iowrite32_native(0x01000001, map + 0x000004);
|
||||
ioread32_native(map);
|
||||
+ if (!nvkm_device_endianness(map)) {
|
||||
+ nvdev_error(device,
|
||||
+ "GPU not supported on big-endian\n");
|
||||
+ ret = -ENOSYS;
|
||||
+ goto done;
|
||||
+ }
|
||||
}
|
||||
|
||||
/* read boot0 and strapping information */
|
||||
--
|
||||
2.26.2
|
||||
|
59
0001-device-detect-vGPUs.patch
Normal file
59
0001-device-detect-vGPUs.patch
Normal file
@ -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
|
||||
|
@ -0,0 +1,84 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Karol Herbst <kherbst@redhat.com>
|
||||
Date: Tue, 28 Apr 2020 18:54:02 +0200
|
||||
Subject: [PATCH] device: rework mmio mapping code to get rid of second map
|
||||
|
||||
Fixes warnings on GPUs with smaller a smaller mmio region like vGPUs.
|
||||
|
||||
Signed-off-by: Karol Herbst <kherbst@redhat.com>
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
.../gpu/drm/nouveau/nvkm/engine/device/base.c | 27 ++++++++++---------
|
||||
1 file changed, 15 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
|
||||
index 8ebbe1656008..37589f36546d 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
|
||||
@@ -2935,7 +2935,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
|
||||
struct nvkm_subdev *subdev;
|
||||
u64 mmio_base, mmio_size;
|
||||
u32 boot0, strap;
|
||||
- void __iomem *map;
|
||||
+ void __iomem *map = NULL;
|
||||
int ret = -EEXIST, i;
|
||||
unsigned chipset;
|
||||
|
||||
@@ -2961,12 +2961,17 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
|
||||
mmio_base = device->func->resource_addr(device, 0);
|
||||
mmio_size = device->func->resource_size(device, 0);
|
||||
|
||||
- /* identify the chipset, and determine classes of subdev/engines */
|
||||
- if (detect) {
|
||||
- map = ioremap(mmio_base, 0x102000);
|
||||
- if (ret = -ENOMEM, map == NULL)
|
||||
+ if (detect || mmio) {
|
||||
+ map = ioremap(mmio_base, mmio_size);
|
||||
+ if (map == NULL) {
|
||||
+ nvdev_error(device, "unable to map PRI\n");
|
||||
+ ret = -ENOMEM;
|
||||
goto done;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
+ /* identify the chipset, and determine classes of subdev/engines */
|
||||
+ if (detect) {
|
||||
/* switch mmio to cpu's native endianness */
|
||||
#ifndef __BIG_ENDIAN
|
||||
if (ioread32_native(map + 0x000004) != 0x00000000) {
|
||||
@@ -2980,7 +2985,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
|
||||
/* read boot0 and strapping information */
|
||||
boot0 = ioread32_native(map + 0x000000);
|
||||
strap = ioread32_native(map + 0x101000);
|
||||
- iounmap(map);
|
||||
|
||||
/* chipset can be overridden for devel/testing purposes */
|
||||
chipset = nvkm_longopt(device->cfgopt, "NvChipset", 0);
|
||||
@@ -3159,12 +3163,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
|
||||
device->name = device->chip->name;
|
||||
|
||||
if (mmio) {
|
||||
- device->pri = ioremap(mmio_base, mmio_size);
|
||||
- if (!device->pri) {
|
||||
- nvdev_error(device, "unable to map PRI\n");
|
||||
- ret = -ENOMEM;
|
||||
- goto done;
|
||||
- }
|
||||
+ device->pri = map;
|
||||
}
|
||||
|
||||
mutex_init(&device->mutex);
|
||||
@@ -3254,6 +3253,10 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
|
||||
|
||||
ret = 0;
|
||||
done:
|
||||
+ if (map && (!mmio || ret)) {
|
||||
+ device->pri = NULL;
|
||||
+ iounmap(map);
|
||||
+ }
|
||||
mutex_unlock(&nv_devices_mutex);
|
||||
return ret;
|
||||
}
|
||||
--
|
||||
2.26.2
|
||||
|
113
0001-device-use-regular-PRI-accessors-in-chipset-detectio.patch
Normal file
113
0001-device-use-regular-PRI-accessors-in-chipset-detectio.patch
Normal file
@ -0,0 +1,113 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Skeggs <bskeggs@redhat.com>
|
||||
Date: Thu, 30 Apr 2020 14:08:53 +1000
|
||||
Subject: [PATCH] device: use regular PRI accessors in chipset detection
|
||||
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
.../gpu/drm/nouveau/nvkm/engine/device/base.c | 31 ++++++++-----------
|
||||
1 file changed, 13 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
|
||||
index f977dddcd809..5b90c2a1bf3d 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
|
||||
@@ -2925,9 +2925,9 @@ nvkm_device_del(struct nvkm_device **pdevice)
|
||||
}
|
||||
|
||||
static inline bool
|
||||
-nvkm_device_endianness(void __iomem *pri)
|
||||
+nvkm_device_endianness(struct nvkm_device *device)
|
||||
{
|
||||
- u32 boot1 = ioread32_native(pri + 0x000004) & 0x01000001;
|
||||
+ u32 boot1 = nvkm_rd32(device, 0x000004) & 0x01000001;
|
||||
#ifdef __BIG_ENDIAN
|
||||
if (!boot1)
|
||||
return false;
|
||||
@@ -2949,7 +2949,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
|
||||
struct nvkm_subdev *subdev;
|
||||
u64 mmio_base, mmio_size;
|
||||
u32 boot0, boot1, strap;
|
||||
- void __iomem *map = NULL;
|
||||
int ret = -EEXIST, i;
|
||||
unsigned chipset;
|
||||
|
||||
@@ -2976,8 +2975,8 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
|
||||
mmio_size = device->func->resource_size(device, 0);
|
||||
|
||||
if (detect || mmio) {
|
||||
- map = ioremap(mmio_base, mmio_size);
|
||||
- if (map == NULL) {
|
||||
+ device->pri = ioremap(mmio_base, mmio_size);
|
||||
+ if (device->pri == NULL) {
|
||||
nvdev_error(device, "unable to map PRI\n");
|
||||
ret = -ENOMEM;
|
||||
goto done;
|
||||
@@ -2987,10 +2986,10 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
|
||||
/* identify the chipset, and determine classes of subdev/engines */
|
||||
if (detect) {
|
||||
/* switch mmio to cpu's native endianness */
|
||||
- if (!nvkm_device_endianness(map)) {
|
||||
- iowrite32_native(0x01000001, map + 0x000004);
|
||||
- ioread32_native(map);
|
||||
- if (!nvkm_device_endianness(map)) {
|
||||
+ if (!nvkm_device_endianness(device)) {
|
||||
+ nvkm_wr32(device, 0x000004, 0x01000001);
|
||||
+ nvkm_rd32(device, 0x000000);
|
||||
+ if (!nvkm_device_endianness(device)) {
|
||||
nvdev_error(device,
|
||||
"GPU not supported on big-endian\n");
|
||||
ret = -ENOSYS;
|
||||
@@ -2998,7 +2997,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
|
||||
}
|
||||
}
|
||||
|
||||
- boot0 = ioread32_native(map + 0x000000);
|
||||
+ boot0 = nvkm_rd32(device, 0x000000);
|
||||
|
||||
/* chipset can be overridden for devel/testing purposes */
|
||||
chipset = nvkm_longopt(device->cfgopt, "NvChipset", 0);
|
||||
@@ -3157,7 +3156,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
|
||||
device->chip->name, boot0);
|
||||
|
||||
/* vGPU detection */
|
||||
- boot1 = ioread32_native(map + 0x000004);
|
||||
+ boot1 = nvkm_rd32(device, 0x0000004);
|
||||
if (device->card_type >= TU100 && (boot1 & 0x00030000)) {
|
||||
nvdev_info(device, "vGPUs are not supported\n");
|
||||
ret = -ENODEV;
|
||||
@@ -3165,7 +3164,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
|
||||
}
|
||||
|
||||
/* read strapping information */
|
||||
- strap = ioread32_native(map + 0x101000);
|
||||
+ strap = nvkm_rd32(device, 0x101000);
|
||||
|
||||
/* determine frequency of timing crystal */
|
||||
if ( device->card_type <= NV_10 || device->chipset < 0x17 ||
|
||||
@@ -3187,10 +3186,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
|
||||
if (!device->name)
|
||||
device->name = device->chip->name;
|
||||
|
||||
- if (mmio) {
|
||||
- device->pri = map;
|
||||
- }
|
||||
-
|
||||
mutex_init(&device->mutex);
|
||||
|
||||
for (i = 0; i < NVKM_SUBDEV_NR; i++) {
|
||||
@@ -3278,9 +3273,9 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
|
||||
|
||||
ret = 0;
|
||||
done:
|
||||
- if (map && (!mmio || ret)) {
|
||||
+ if (device->pri && (!mmio || ret)) {
|
||||
+ iounmap(device->pri);
|
||||
device->pri = NULL;
|
||||
- iounmap(map);
|
||||
}
|
||||
mutex_unlock(&nv_devices_mutex);
|
||||
return ret;
|
||||
--
|
||||
2.26.2
|
||||
|
149
0001-disp-gv100-expose-capabilities-class.patch
Normal file
149
0001-disp-gv100-expose-capabilities-class.patch
Normal file
@ -0,0 +1,149 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Skeggs <bskeggs@redhat.com>
|
||||
Date: Thu, 13 Feb 2020 09:39:34 +1000
|
||||
Subject: [PATCH] disp/gv100-: expose capabilities class
|
||||
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/nouveau/include/nvif/class.h | 2 +
|
||||
.../gpu/drm/nouveau/nvkm/engine/disp/Kbuild | 2 +
|
||||
.../drm/nouveau/nvkm/engine/disp/capsgv100.c | 60 +++++++++++++++++++
|
||||
.../drm/nouveau/nvkm/engine/disp/rootgv100.c | 1 +
|
||||
.../drm/nouveau/nvkm/engine/disp/rootnv50.h | 3 +
|
||||
.../drm/nouveau/nvkm/engine/disp/roottu102.c | 1 +
|
||||
6 files changed, 69 insertions(+)
|
||||
create mode 100644 drivers/gpu/drm/nouveau/nvkm/engine/disp/capsgv100.c
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/class.h b/drivers/gpu/drm/nouveau/include/nvif/class.h
|
||||
index 30659747ffe8..2c79beb41126 100644
|
||||
--- a/drivers/gpu/drm/nouveau/include/nvif/class.h
|
||||
+++ b/drivers/gpu/drm/nouveau/include/nvif/class.h
|
||||
@@ -89,6 +89,8 @@
|
||||
#define GV100_DISP /* cl5070.h */ 0x0000c370
|
||||
#define TU102_DISP /* cl5070.h */ 0x0000c570
|
||||
|
||||
+#define GV100_DISP_CAPS 0x0000c373
|
||||
+
|
||||
#define NV31_MPEG 0x00003174
|
||||
#define G82_MPEG 0x00008274
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild b/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild
|
||||
index 0d584d0da59c..f7af648e0c17 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild
|
||||
@@ -74,6 +74,8 @@ nvkm-y += nvkm/engine/disp/rootgp102.o
|
||||
nvkm-y += nvkm/engine/disp/rootgv100.o
|
||||
nvkm-y += nvkm/engine/disp/roottu102.o
|
||||
|
||||
+nvkm-y += nvkm/engine/disp/capsgv100.o
|
||||
+
|
||||
nvkm-y += nvkm/engine/disp/channv50.o
|
||||
nvkm-y += nvkm/engine/disp/changf119.o
|
||||
nvkm-y += nvkm/engine/disp/changv100.o
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/capsgv100.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/capsgv100.c
|
||||
new file mode 100644
|
||||
index 000000000000..5026e530f4bb
|
||||
--- /dev/null
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/capsgv100.c
|
||||
@@ -0,0 +1,60 @@
|
||||
+/*
|
||||
+ * Copyright 2020 Red Hat Inc.
|
||||
+ *
|
||||
+ * Permission is hereby granted, free of charge, to any person obtaining a
|
||||
+ * copy of this software and associated documentation files (the "Software"),
|
||||
+ * to deal in the Software without restriction, including without limitation
|
||||
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
+ * and/or sell copies of the Software, and to permit persons to whom the
|
||||
+ * Software is furnished to do so, subject to the following conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice shall be included in
|
||||
+ * all copies or substantial portions of the Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
+ * OTHER DEALINGS IN THE SOFTWARE.
|
||||
+ */
|
||||
+#define gv100_disp_caps(p) container_of((p), struct gv100_disp_caps, object)
|
||||
+#include "rootnv50.h"
|
||||
+
|
||||
+struct gv100_disp_caps {
|
||||
+ struct nvkm_object object;
|
||||
+ struct nv50_disp *disp;
|
||||
+};
|
||||
+
|
||||
+static int
|
||||
+gv100_disp_caps_map(struct nvkm_object *object, void *argv, u32 argc,
|
||||
+ enum nvkm_object_map *type, u64 *addr, u64 *size)
|
||||
+{
|
||||
+ struct gv100_disp_caps *caps = gv100_disp_caps(object);
|
||||
+ struct nvkm_device *device = caps->disp->base.engine.subdev.device;
|
||||
+ *type = NVKM_OBJECT_MAP_IO;
|
||||
+ *addr = 0x640000 + device->func->resource_addr(device, 0);
|
||||
+ *size = 0x1000;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static const struct nvkm_object_func
|
||||
+gv100_disp_caps = {
|
||||
+ .map = gv100_disp_caps_map,
|
||||
+};
|
||||
+
|
||||
+int
|
||||
+gv100_disp_caps_new(const struct nvkm_oclass *oclass, void *argv, u32 argc,
|
||||
+ struct nv50_disp *disp, struct nvkm_object **pobject)
|
||||
+{
|
||||
+ struct gv100_disp_caps *caps;
|
||||
+
|
||||
+ if (!(caps = kzalloc(sizeof(*caps), GFP_KERNEL)))
|
||||
+ return -ENOMEM;
|
||||
+ *pobject = &caps->object;
|
||||
+
|
||||
+ nvkm_object_ctor(&gv100_disp_caps, oclass, &caps->object);
|
||||
+ caps->disp = disp;
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootgv100.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootgv100.c
|
||||
index 9c658d632d37..47efb48d769a 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootgv100.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootgv100.c
|
||||
@@ -27,6 +27,7 @@
|
||||
static const struct nv50_disp_root_func
|
||||
gv100_disp_root = {
|
||||
.user = {
|
||||
+ {{-1,-1,GV100_DISP_CAPS }, gv100_disp_caps_new },
|
||||
{{0,0,GV100_DISP_CURSOR }, gv100_disp_curs_new },
|
||||
{{0,0,GV100_DISP_WINDOW_IMM_CHANNEL_DMA}, gv100_disp_wimm_new },
|
||||
{{0,0,GV100_DISP_CORE_CHANNEL_DMA }, gv100_disp_core_new },
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv50.h b/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv50.h
|
||||
index a1f942793f98..7070f5408d92 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv50.h
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv50.h
|
||||
@@ -24,6 +24,9 @@ int nv50_disp_root_new_(const struct nv50_disp_root_func *, struct nvkm_disp *,
|
||||
const struct nvkm_oclass *, void *data, u32 size,
|
||||
struct nvkm_object **);
|
||||
|
||||
+int gv100_disp_caps_new(const struct nvkm_oclass *, void *, u32,
|
||||
+ struct nv50_disp *, struct nvkm_object **);
|
||||
+
|
||||
extern const struct nvkm_disp_oclass nv50_disp_root_oclass;
|
||||
extern const struct nvkm_disp_oclass g84_disp_root_oclass;
|
||||
extern const struct nvkm_disp_oclass g94_disp_root_oclass;
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/roottu102.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/roottu102.c
|
||||
index 579a5d02308a..d8719d38b98a 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/roottu102.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/roottu102.c
|
||||
@@ -27,6 +27,7 @@
|
||||
static const struct nv50_disp_root_func
|
||||
tu102_disp_root = {
|
||||
.user = {
|
||||
+ {{-1,-1,GV100_DISP_CAPS }, gv100_disp_caps_new },
|
||||
{{0,0,TU102_DISP_CURSOR }, gv100_disp_curs_new },
|
||||
{{0,0,TU102_DISP_WINDOW_IMM_CHANNEL_DMA}, gv100_disp_wimm_new },
|
||||
{{0,0,TU102_DISP_CORE_CHANNEL_DMA }, gv100_disp_core_new },
|
||||
--
|
||||
2.26.2
|
||||
|
146
0001-disp-hda-gf119-add-HAL-for-programming-device-entry-.patch
Normal file
146
0001-disp-hda-gf119-add-HAL-for-programming-device-entry-.patch
Normal file
@ -0,0 +1,146 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Skeggs <bskeggs@redhat.com>
|
||||
Date: Wed, 6 May 2020 14:40:56 +1000
|
||||
Subject: [PATCH] disp/hda/gf119-: add HAL for programming device entry in SF
|
||||
|
||||
Register has moved on GV100.
|
||||
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c | 11 +++++++++--
|
||||
drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h | 2 ++
|
||||
drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c | 1 +
|
||||
drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgk104.c | 1 +
|
||||
drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c | 1 +
|
||||
drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c | 1 +
|
||||
drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgv100.c | 1 +
|
||||
drivers/gpu/drm/nouveau/nvkm/engine/disp/sortu102.c | 1 +
|
||||
8 files changed, 17 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c
|
||||
index 1080ba6ecd64..8a0ec7db5145 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c
|
||||
@@ -23,6 +23,14 @@
|
||||
*/
|
||||
#include "ior.h"
|
||||
|
||||
+void
|
||||
+gf119_hda_device_entry(struct nvkm_ior *ior, int head)
|
||||
+{
|
||||
+ struct nvkm_device *device = ior->disp->engine.subdev.device;
|
||||
+ const u32 hoff = 0x800 * head;
|
||||
+ nvkm_mask(device, 0x616548 + hoff, 0x00000070, 0x00000000);
|
||||
+}
|
||||
+
|
||||
void
|
||||
gf119_hda_eld(struct nvkm_ior *ior, int head, u8 *data, u8 size)
|
||||
{
|
||||
@@ -41,11 +49,10 @@ void
|
||||
gf119_hda_hpd(struct nvkm_ior *ior, int head, bool present)
|
||||
{
|
||||
struct nvkm_device *device = ior->disp->engine.subdev.device;
|
||||
- const u32 hoff = 0x800 * head;
|
||||
u32 data = 0x80000000;
|
||||
u32 mask = 0x80000001;
|
||||
if (present) {
|
||||
- nvkm_mask(device, 0x616548 + hoff, 0x00000070, 0x00000000);
|
||||
+ ior->func->hda.device_entry(ior, head);
|
||||
data |= 0x00000001;
|
||||
} else {
|
||||
mask |= 0x00000002;
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h
|
||||
index c60acf71831e..eb1155e47ecd 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h
|
||||
@@ -88,6 +88,7 @@ struct nvkm_ior_func {
|
||||
struct {
|
||||
void (*hpd)(struct nvkm_ior *, int head, bool present);
|
||||
void (*eld)(struct nvkm_ior *, int head, u8 *data, u8 size);
|
||||
+ void (*device_entry)(struct nvkm_ior *, int head);
|
||||
} hda;
|
||||
};
|
||||
|
||||
@@ -162,6 +163,7 @@ void gt215_hda_eld(struct nvkm_ior *, int, u8 *, u8);
|
||||
|
||||
void gf119_hda_hpd(struct nvkm_ior *, int, bool);
|
||||
void gf119_hda_eld(struct nvkm_ior *, int, u8 *, u8);
|
||||
+void gf119_hda_device_entry(struct nvkm_ior *, int);
|
||||
|
||||
#define IOR_MSG(i,l,f,a...) do { \
|
||||
struct nvkm_ior *_ior = (i); \
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c
|
||||
index 456a5a143522..3b3643fb1019 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c
|
||||
@@ -177,6 +177,7 @@ gf119_sor = {
|
||||
.hda = {
|
||||
.hpd = gf119_hda_hpd,
|
||||
.eld = gf119_hda_eld,
|
||||
+ .device_entry = gf119_hda_device_entry,
|
||||
},
|
||||
};
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgk104.c
|
||||
index b94090edaebf..0c0925680790 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgk104.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgk104.c
|
||||
@@ -43,6 +43,7 @@ gk104_sor = {
|
||||
.hda = {
|
||||
.hpd = gf119_hda_hpd,
|
||||
.eld = gf119_hda_eld,
|
||||
+ .device_entry = gf119_hda_device_entry,
|
||||
},
|
||||
};
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c
|
||||
index e6965dec09c9..38045c92197f 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c
|
||||
@@ -57,6 +57,7 @@ gm107_sor = {
|
||||
.hda = {
|
||||
.hpd = gf119_hda_hpd,
|
||||
.eld = gf119_hda_eld,
|
||||
+ .device_entry = gf119_hda_device_entry,
|
||||
},
|
||||
};
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c
|
||||
index 384f82652bec..cf2075db742a 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c
|
||||
@@ -115,6 +115,7 @@ gm200_sor = {
|
||||
.hda = {
|
||||
.hpd = gf119_hda_hpd,
|
||||
.eld = gf119_hda_eld,
|
||||
+ .device_entry = gf119_hda_device_entry,
|
||||
},
|
||||
};
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgv100.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgv100.c
|
||||
index b0597ff9a714..565cfbc65550 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgv100.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgv100.c
|
||||
@@ -103,6 +103,7 @@ gv100_sor = {
|
||||
.hda = {
|
||||
.hpd = gf119_hda_hpd,
|
||||
.eld = gf119_hda_eld,
|
||||
+ .device_entry = gf119_hda_device_entry,
|
||||
},
|
||||
};
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sortu102.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sortu102.c
|
||||
index 4d5f3791ea7b..b16ecea098c7 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sortu102.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sortu102.c
|
||||
@@ -88,6 +88,7 @@ tu102_sor = {
|
||||
.hda = {
|
||||
.hpd = gf119_hda_hpd,
|
||||
.eld = gf119_hda_eld,
|
||||
+ .device_entry = gf119_hda_device_entry,
|
||||
},
|
||||
};
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,49 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Skeggs <bskeggs@redhat.com>
|
||||
Date: Wed, 6 May 2020 14:40:58 +1000
|
||||
Subject: [PATCH] disp/hda/gf119-: select HDA device entry based on bound head
|
||||
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c
|
||||
index 8a0ec7db5145..19d2d58344e4 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c
|
||||
@@ -28,14 +28,14 @@ gf119_hda_device_entry(struct nvkm_ior *ior, int head)
|
||||
{
|
||||
struct nvkm_device *device = ior->disp->engine.subdev.device;
|
||||
const u32 hoff = 0x800 * head;
|
||||
- nvkm_mask(device, 0x616548 + hoff, 0x00000070, 0x00000000);
|
||||
+ nvkm_mask(device, 0x616548 + hoff, 0x00000070, head << 4);
|
||||
}
|
||||
|
||||
void
|
||||
gf119_hda_eld(struct nvkm_ior *ior, int head, u8 *data, u8 size)
|
||||
{
|
||||
struct nvkm_device *device = ior->disp->engine.subdev.device;
|
||||
- const u32 soff = 0x030 * ior->id;
|
||||
+ const u32 soff = 0x030 * ior->id + (head * 0x04);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < size; i++)
|
||||
@@ -49,6 +49,7 @@ void
|
||||
gf119_hda_hpd(struct nvkm_ior *ior, int head, bool present)
|
||||
{
|
||||
struct nvkm_device *device = ior->disp->engine.subdev.device;
|
||||
+ const u32 soff = 0x030 * ior->id + (head * 0x04);
|
||||
u32 data = 0x80000000;
|
||||
u32 mask = 0x80000001;
|
||||
if (present) {
|
||||
@@ -57,5 +58,5 @@ gf119_hda_hpd(struct nvkm_ior *ior, int head, bool present)
|
||||
} else {
|
||||
mask |= 0x00000002;
|
||||
}
|
||||
- nvkm_mask(device, 0x10ec10 + ior->id * 0x030, mask, data);
|
||||
+ nvkm_mask(device, 0x10ec10 + soff, mask, data);
|
||||
}
|
||||
--
|
||||
2.26.2
|
||||
|
83
0001-disp-hda-gt215-pass-head-to-nvkm_ior.hda.eld.patch
Normal file
83
0001-disp-hda-gt215-pass-head-to-nvkm_ior.hda.eld.patch
Normal file
@ -0,0 +1,83 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Skeggs <bskeggs@redhat.com>
|
||||
Date: Wed, 6 May 2020 14:40:52 +1000
|
||||
Subject: [PATCH] disp/hda/gt215-: pass head to nvkm_ior.hda.eld()
|
||||
|
||||
We're going to use the bound head to select HDA device entry.
|
||||
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c | 2 +-
|
||||
drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c | 2 +-
|
||||
drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h | 6 +++---
|
||||
drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv50.c | 2 +-
|
||||
4 files changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c
|
||||
index 0fa0ec0a1de0..1080ba6ecd64 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c
|
||||
@@ -24,7 +24,7 @@
|
||||
#include "ior.h"
|
||||
|
||||
void
|
||||
-gf119_hda_eld(struct nvkm_ior *ior, u8 *data, u8 size)
|
||||
+gf119_hda_eld(struct nvkm_ior *ior, int head, u8 *data, u8 size)
|
||||
{
|
||||
struct nvkm_device *device = ior->disp->engine.subdev.device;
|
||||
const u32 soff = 0x030 * ior->id;
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c
|
||||
index 4509d2ba880e..0d1b81fe1093 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c
|
||||
@@ -24,7 +24,7 @@
|
||||
#include "ior.h"
|
||||
|
||||
void
|
||||
-gt215_hda_eld(struct nvkm_ior *ior, u8 *data, u8 size)
|
||||
+gt215_hda_eld(struct nvkm_ior *ior, int head, u8 *data, u8 size)
|
||||
{
|
||||
struct nvkm_device *device = ior->disp->engine.subdev.device;
|
||||
const u32 soff = ior->id * 0x800;
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h
|
||||
index 009d3a8b7a50..c60acf71831e 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h
|
||||
@@ -87,7 +87,7 @@ struct nvkm_ior_func {
|
||||
|
||||
struct {
|
||||
void (*hpd)(struct nvkm_ior *, int head, bool present);
|
||||
- void (*eld)(struct nvkm_ior *, u8 *data, u8 size);
|
||||
+ void (*eld)(struct nvkm_ior *, int head, u8 *data, u8 size);
|
||||
} hda;
|
||||
};
|
||||
|
||||
@@ -158,10 +158,10 @@ void gv100_hdmi_ctrl(struct nvkm_ior *, int, bool, u8, u8, u8 *, u8 , u8 *, u8);
|
||||
void gm200_hdmi_scdc(struct nvkm_ior *, int, u8);
|
||||
|
||||
void gt215_hda_hpd(struct nvkm_ior *, int, bool);
|
||||
-void gt215_hda_eld(struct nvkm_ior *, u8 *, u8);
|
||||
+void gt215_hda_eld(struct nvkm_ior *, int, u8 *, u8);
|
||||
|
||||
void gf119_hda_hpd(struct nvkm_ior *, int, bool);
|
||||
-void gf119_hda_eld(struct nvkm_ior *, u8 *, u8);
|
||||
+void gf119_hda_eld(struct nvkm_ior *, int, u8 *, u8);
|
||||
|
||||
#define IOR_MSG(i,l,f,a...) do { \
|
||||
struct nvkm_ior *_ior = (i); \
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv50.c
|
||||
index 5f758948d6e1..a7672ef17d3b 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv50.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv50.c
|
||||
@@ -155,7 +155,7 @@ nv50_disp_root_mthd_(struct nvkm_object *object, u32 mthd, void *data, u32 size)
|
||||
if (outp->info.type == DCB_OUTPUT_DP)
|
||||
ior->func->dp.audio(ior, hidx, true);
|
||||
ior->func->hda.hpd(ior, hidx, true);
|
||||
- ior->func->hda.eld(ior, data, size);
|
||||
+ ior->func->hda.eld(ior, hidx, data, size);
|
||||
} else {
|
||||
if (outp->info.type == DCB_OUTPUT_DP)
|
||||
ior->func->dp.audio(ior, hidx, false);
|
||||
--
|
||||
2.26.2
|
||||
|
105
0001-disp-hda-gv100-NV_PDISP_SF_AUDIO_CNTRL0-register-mov.patch
Normal file
105
0001-disp-hda-gv100-NV_PDISP_SF_AUDIO_CNTRL0-register-mov.patch
Normal file
@ -0,0 +1,105 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Skeggs <bskeggs@redhat.com>
|
||||
Date: Wed, 6 May 2020 14:41:01 +1000
|
||||
Subject: [PATCH] disp/hda/gv100-: NV_PDISP_SF_AUDIO_CNTRL0 register moved
|
||||
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
.../gpu/drm/nouveau/nvkm/engine/disp/Kbuild | 1 +
|
||||
.../drm/nouveau/nvkm/engine/disp/hdagv100.c | 30 +++++++++++++++++++
|
||||
.../gpu/drm/nouveau/nvkm/engine/disp/ior.h | 2 ++
|
||||
.../drm/nouveau/nvkm/engine/disp/sorgv100.c | 2 +-
|
||||
.../drm/nouveau/nvkm/engine/disp/sortu102.c | 2 +-
|
||||
5 files changed, 35 insertions(+), 2 deletions(-)
|
||||
create mode 100644 drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagv100.c
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild b/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild
|
||||
index f7af648e0c17..571687ba85b8 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild
|
||||
@@ -47,6 +47,7 @@ nvkm-y += nvkm/engine/disp/dp.o
|
||||
|
||||
nvkm-y += nvkm/engine/disp/hdagt215.o
|
||||
nvkm-y += nvkm/engine/disp/hdagf119.o
|
||||
+nvkm-y += nvkm/engine/disp/hdagv100.o
|
||||
|
||||
nvkm-y += nvkm/engine/disp/hdmi.o
|
||||
nvkm-y += nvkm/engine/disp/hdmig84.o
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagv100.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagv100.c
|
||||
new file mode 100644
|
||||
index 000000000000..57d374ecfeef
|
||||
--- /dev/null
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagv100.c
|
||||
@@ -0,0 +1,30 @@
|
||||
+/*
|
||||
+ * Copyright 2020 Red Hat Inc.
|
||||
+ *
|
||||
+ * Permission is hereby granted, free of charge, to any person obtaining a
|
||||
+ * copy of this software and associated documentation files (the "Software"),
|
||||
+ * to deal in the Software without restriction, including without limitation
|
||||
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
+ * and/or sell copies of the Software, and to permit persons to whom the
|
||||
+ * Software is furnished to do so, subject to the following conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice shall be included in
|
||||
+ * all copies or substantial portions of the Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
+ * OTHER DEALINGS IN THE SOFTWARE.
|
||||
+ */
|
||||
+#include "ior.h"
|
||||
+
|
||||
+void
|
||||
+gv100_hda_device_entry(struct nvkm_ior *ior, int head)
|
||||
+{
|
||||
+ struct nvkm_device *device = ior->disp->engine.subdev.device;
|
||||
+ const u32 hoff = 0x800 * head;
|
||||
+ nvkm_mask(device, 0x616528 + hoff, 0x00000070, head << 4);
|
||||
+}
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h
|
||||
index eb1155e47ecd..c1d7a36e4d3c 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h
|
||||
@@ -165,6 +165,8 @@ void gf119_hda_hpd(struct nvkm_ior *, int, bool);
|
||||
void gf119_hda_eld(struct nvkm_ior *, int, u8 *, u8);
|
||||
void gf119_hda_device_entry(struct nvkm_ior *, int);
|
||||
|
||||
+void gv100_hda_device_entry(struct nvkm_ior *, int);
|
||||
+
|
||||
#define IOR_MSG(i,l,f,a...) do { \
|
||||
struct nvkm_ior *_ior = (i); \
|
||||
nvkm_##l(&_ior->disp->engine.subdev, "%s: "f"\n", _ior->name, ##a); \
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgv100.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgv100.c
|
||||
index 565cfbc65550..d11a0dff10c6 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgv100.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgv100.c
|
||||
@@ -103,7 +103,7 @@ gv100_sor = {
|
||||
.hda = {
|
||||
.hpd = gf119_hda_hpd,
|
||||
.eld = gf119_hda_eld,
|
||||
- .device_entry = gf119_hda_device_entry,
|
||||
+ .device_entry = gv100_hda_device_entry,
|
||||
},
|
||||
};
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sortu102.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sortu102.c
|
||||
index b16ecea098c7..fa6d74251237 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sortu102.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sortu102.c
|
||||
@@ -88,7 +88,7 @@ tu102_sor = {
|
||||
.hda = {
|
||||
.hpd = gf119_hda_hpd,
|
||||
.eld = gf119_hda_eld,
|
||||
- .device_entry = gf119_hda_device_entry,
|
||||
+ .device_entry = gv100_hda_device_entry,
|
||||
},
|
||||
};
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,26 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Skeggs <bskeggs@redhat.com>
|
||||
Date: Wed, 6 May 2020 14:40:45 +1000
|
||||
Subject: [PATCH] disp/nv50-: increase timeout on pio channel free() polling
|
||||
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/nouveau/dispnv50/curs507a.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/curs507a.c b/drivers/gpu/drm/nouveau/dispnv50/curs507a.c
|
||||
index 8c5cf096f69b..658a200ab616 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/curs507a.c
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/curs507a.c
|
||||
@@ -32,7 +32,7 @@
|
||||
bool
|
||||
curs507a_space(struct nv50_wndw *wndw)
|
||||
{
|
||||
- nvif_msec(&nouveau_drm(wndw->plane.dev)->client.device, 2,
|
||||
+ nvif_msec(&nouveau_drm(wndw->plane.dev)->client.device, 100,
|
||||
if (nvif_rd32(&wndw->wimm.base.user, 0x0008) >= 4)
|
||||
return true;
|
||||
);
|
||||
--
|
||||
2.26.2
|
||||
|
96
0001-drm-Use-generic-helper-to-check-_PR3-presence.patch
Normal file
96
0001-drm-Use-generic-helper-to-check-_PR3-presence.patch
Normal file
@ -0,0 +1,96 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Kai-Heng Feng <kai.heng.feng@canonical.com>
|
||||
Date: Thu, 23 Apr 2020 14:23:58 +0800
|
||||
Subject: [PATCH] drm: Use generic helper to check _PR3 presence
|
||||
|
||||
Replace nouveau_pr3_present() in favor of a more generic one,
|
||||
pci_pr3_present().
|
||||
|
||||
Also the presence of upstream bridge _PR3 doesn't need to go hand in
|
||||
hand with device's _DSM, so check _PR3 before _DSM.
|
||||
|
||||
Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/nouveau/nouveau_acpi.c | 44 ++++++--------------------
|
||||
1 file changed, 10 insertions(+), 34 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.c b/drivers/gpu/drm/nouveau/nouveau_acpi.c
|
||||
index fe3a10255c36..b84dff1b0f28 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nouveau_acpi.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nouveau_acpi.c
|
||||
@@ -212,37 +212,6 @@ static const struct vga_switcheroo_handler nouveau_dsm_handler = {
|
||||
.get_client_id = nouveau_dsm_get_client_id,
|
||||
};
|
||||
|
||||
-/*
|
||||
- * Firmware supporting Windows 8 or later do not use _DSM to put the device into
|
||||
- * D3cold, they instead rely on disabling power resources on the parent.
|
||||
- */
|
||||
-static bool nouveau_pr3_present(struct pci_dev *pdev)
|
||||
-{
|
||||
- struct pci_dev *parent_pdev = pci_upstream_bridge(pdev);
|
||||
- struct acpi_device *parent_adev;
|
||||
-
|
||||
- if (!parent_pdev)
|
||||
- return false;
|
||||
-
|
||||
- if (!parent_pdev->bridge_d3) {
|
||||
- /*
|
||||
- * Parent PCI bridge is currently not power managed.
|
||||
- * Since userspace can change these afterwards to be on
|
||||
- * the safe side we stick with _DSM and prevent usage of
|
||||
- * _PR3 from the bridge.
|
||||
- */
|
||||
- pci_d3cold_disable(pdev);
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
- parent_adev = ACPI_COMPANION(&parent_pdev->dev);
|
||||
- if (!parent_adev)
|
||||
- return false;
|
||||
-
|
||||
- return parent_adev->power.flags.power_resources &&
|
||||
- acpi_has_method(parent_adev->handle, "_PR3");
|
||||
-}
|
||||
-
|
||||
static void nouveau_dsm_pci_probe(struct pci_dev *pdev, acpi_handle *dhandle_out,
|
||||
bool *has_mux, bool *has_opt,
|
||||
bool *has_opt_flags, bool *has_pr3)
|
||||
@@ -250,6 +219,16 @@ static void nouveau_dsm_pci_probe(struct pci_dev *pdev, acpi_handle *dhandle_out
|
||||
acpi_handle dhandle;
|
||||
bool supports_mux;
|
||||
int optimus_funcs;
|
||||
+ struct pci_dev *parent_pdev;
|
||||
+
|
||||
+ *has_pr3 = false;
|
||||
+ parent_pdev = pci_upstream_bridge(pdev);
|
||||
+ if (parent_pdev) {
|
||||
+ if (parent_pdev->bridge_d3)
|
||||
+ *has_pr3 = pci_pr3_present(parent_pdev);
|
||||
+ else
|
||||
+ pci_d3cold_disable(pdev);
|
||||
+ }
|
||||
|
||||
dhandle = ACPI_HANDLE(&pdev->dev);
|
||||
if (!dhandle)
|
||||
@@ -270,7 +249,6 @@ static void nouveau_dsm_pci_probe(struct pci_dev *pdev, acpi_handle *dhandle_out
|
||||
*has_mux = supports_mux;
|
||||
*has_opt = !!optimus_funcs;
|
||||
*has_opt_flags = optimus_funcs & (1 << NOUVEAU_DSM_OPTIMUS_FLAGS);
|
||||
- *has_pr3 = false;
|
||||
|
||||
if (optimus_funcs) {
|
||||
uint32_t result;
|
||||
@@ -280,8 +258,6 @@ static void nouveau_dsm_pci_probe(struct pci_dev *pdev, acpi_handle *dhandle_out
|
||||
(result & OPTIMUS_ENABLED) ? "enabled" : "disabled",
|
||||
(result & OPTIMUS_DYNAMIC_PWR_CAP) ? "dynamic power, " : "",
|
||||
(result & OPTIMUS_HDA_CODEC_MASK) ? "hda bios codec supported" : "");
|
||||
-
|
||||
- *has_pr3 = nouveau_pr3_present(pdev);
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
82
0001-kms-Fix-regression-by-audio-component-transition.patch
Normal file
82
0001-kms-Fix-regression-by-audio-component-transition.patch
Normal file
@ -0,0 +1,82 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Takashi Iwai <tiwai@suse.de>
|
||||
Date: Thu, 16 Apr 2020 09:54:28 +0200
|
||||
Subject: [PATCH] kms: Fix regression by audio component transition
|
||||
|
||||
Since the commit 742db30c4ee6 ("drm/nouveau: Add HD-audio component
|
||||
notifier support"), the nouveau driver notifies and pokes the HD-audio
|
||||
HPD and ELD via audio component, but this seems broken. The culprit
|
||||
is the naive assumption that crtc->index corresponds to the HDA pin.
|
||||
Actually this rather corresponds to the MST dev_id (alias "pipe" in
|
||||
the audio component framework) while the actual port number is given
|
||||
from the output ior id number.
|
||||
|
||||
This patch corrects the assignment of port and dev_id arguments in the
|
||||
audio component ops to recover from the HDMI/DP audio regression.
|
||||
|
||||
Fixes: 742db30c4ee6 ("drm/nouveau: Add HD-audio component notifier support")
|
||||
BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=207223
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/nouveau/dispnv50/disp.c | 16 ++++++++++------
|
||||
1 file changed, 10 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
|
||||
index 6be9df1820c5..2625ed84fc44 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
|
||||
@@ -482,15 +482,16 @@ nv50_dac_create(struct drm_connector *connector, struct dcb_output *dcbe)
|
||||
* audio component binding for ELD notification
|
||||
*/
|
||||
static void
|
||||
-nv50_audio_component_eld_notify(struct drm_audio_component *acomp, int port)
|
||||
+nv50_audio_component_eld_notify(struct drm_audio_component *acomp, int port,
|
||||
+ int dev_id)
|
||||
{
|
||||
if (acomp && acomp->audio_ops && acomp->audio_ops->pin_eld_notify)
|
||||
acomp->audio_ops->pin_eld_notify(acomp->audio_ops->audio_ptr,
|
||||
- port, -1);
|
||||
+ port, dev_id);
|
||||
}
|
||||
|
||||
static int
|
||||
-nv50_audio_component_get_eld(struct device *kdev, int port, int pipe,
|
||||
+nv50_audio_component_get_eld(struct device *kdev, int port, int dev_id,
|
||||
bool *enabled, unsigned char *buf, int max_bytes)
|
||||
{
|
||||
struct drm_device *drm_dev = dev_get_drvdata(kdev);
|
||||
@@ -506,7 +507,8 @@ nv50_audio_component_get_eld(struct device *kdev, int port, int pipe,
|
||||
nv_encoder = nouveau_encoder(encoder);
|
||||
nv_connector = nouveau_encoder_connector_get(nv_encoder);
|
||||
nv_crtc = nouveau_crtc(encoder->crtc);
|
||||
- if (!nv_connector || !nv_crtc || nv_crtc->index != port)
|
||||
+ if (!nv_connector || !nv_crtc || nv_encoder->or != port ||
|
||||
+ nv_crtc->index != dev_id)
|
||||
continue;
|
||||
*enabled = drm_detect_monitor_audio(nv_connector->edid);
|
||||
if (*enabled) {
|
||||
@@ -600,7 +602,8 @@ nv50_audio_disable(struct drm_encoder *encoder, struct nouveau_crtc *nv_crtc)
|
||||
|
||||
nvif_mthd(&disp->disp->object, 0, &args, sizeof(args));
|
||||
|
||||
- nv50_audio_component_eld_notify(drm->audio.component, nv_crtc->index);
|
||||
+ nv50_audio_component_eld_notify(drm->audio.component, nv_encoder->or,
|
||||
+ nv_crtc->index);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -634,7 +637,8 @@ nv50_audio_enable(struct drm_encoder *encoder, struct drm_display_mode *mode)
|
||||
nvif_mthd(&disp->disp->object, 0, &args,
|
||||
sizeof(args.base) + drm_eld_size(args.data));
|
||||
|
||||
- nv50_audio_component_eld_notify(drm->audio.component, nv_crtc->index);
|
||||
+ nv50_audio_component_eld_notify(drm->audio.component, nv_encoder->or,
|
||||
+ nv_crtc->index);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
--
|
||||
2.26.2
|
||||
|
64
0001-kms-gv100-Add-support-for-interlaced-modes.patch
Normal file
64
0001-kms-gv100-Add-support-for-interlaced-modes.patch
Normal file
@ -0,0 +1,64 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Lyude Paul <lyude@redhat.com>
|
||||
Date: Mon, 11 May 2020 18:41:25 -0400
|
||||
Subject: [PATCH] kms/gv100-: Add support for interlaced modes
|
||||
|
||||
We advertise being able to set interlaced modes, so let's actually make
|
||||
sure to do that. Otherwise, we'll end up hanging the display engine due
|
||||
to trying to set a mode with timings adjusted for interlacing without
|
||||
telling the hardware it's actually an interlaced mode.
|
||||
|
||||
Signed-off-by: Lyude Paul <lyude@redhat.com>
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/nouveau/dispnv50/headc37d.c | 5 +++--
|
||||
drivers/gpu/drm/nouveau/dispnv50/headc57d.c | 5 +++--
|
||||
2 files changed, 6 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/headc37d.c b/drivers/gpu/drm/nouveau/dispnv50/headc37d.c
|
||||
index 00011ce109a6..4a9a32b89f74 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/headc37d.c
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/headc37d.c
|
||||
@@ -168,14 +168,15 @@ headc37d_mode(struct nv50_head *head, struct nv50_head_atom *asyh)
|
||||
struct nv50_dmac *core = &nv50_disp(head->base.base.dev)->core->chan;
|
||||
struct nv50_head_mode *m = &asyh->mode;
|
||||
u32 *push;
|
||||
- if ((push = evo_wait(core, 12))) {
|
||||
+ if ((push = evo_wait(core, 13))) {
|
||||
evo_mthd(push, 0x2064 + (head->base.index * 0x400), 5);
|
||||
evo_data(push, (m->v.active << 16) | m->h.active );
|
||||
evo_data(push, (m->v.synce << 16) | m->h.synce );
|
||||
evo_data(push, (m->v.blanke << 16) | m->h.blanke );
|
||||
evo_data(push, (m->v.blanks << 16) | m->h.blanks );
|
||||
evo_data(push, (m->v.blank2e << 16) | m->v.blank2s);
|
||||
- evo_mthd(push, 0x200c + (head->base.index * 0x400), 1);
|
||||
+ evo_mthd(push, 0x2008 + (head->base.index * 0x400), 2);
|
||||
+ evo_data(push, m->interlace);
|
||||
evo_data(push, m->clock * 1000);
|
||||
evo_mthd(push, 0x2028 + (head->base.index * 0x400), 1);
|
||||
evo_data(push, m->clock * 1000);
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/headc57d.c b/drivers/gpu/drm/nouveau/dispnv50/headc57d.c
|
||||
index 938d910a1b1e..859131a8bc3c 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/headc57d.c
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/headc57d.c
|
||||
@@ -173,14 +173,15 @@ headc57d_mode(struct nv50_head *head, struct nv50_head_atom *asyh)
|
||||
struct nv50_dmac *core = &nv50_disp(head->base.base.dev)->core->chan;
|
||||
struct nv50_head_mode *m = &asyh->mode;
|
||||
u32 *push;
|
||||
- if ((push = evo_wait(core, 12))) {
|
||||
+ if ((push = evo_wait(core, 13))) {
|
||||
evo_mthd(push, 0x2064 + (head->base.index * 0x400), 5);
|
||||
evo_data(push, (m->v.active << 16) | m->h.active );
|
||||
evo_data(push, (m->v.synce << 16) | m->h.synce );
|
||||
evo_data(push, (m->v.blanke << 16) | m->h.blanke );
|
||||
evo_data(push, (m->v.blanks << 16) | m->h.blanks );
|
||||
evo_data(push, (m->v.blank2e << 16) | m->v.blank2s);
|
||||
- evo_mthd(push, 0x200c + (head->base.index * 0x400), 1);
|
||||
+ evo_mthd(push, 0x2008 + (head->base.index * 0x400), 2);
|
||||
+ evo_data(push, m->interlace);
|
||||
evo_data(push, m->clock * 1000);
|
||||
evo_mthd(push, 0x2028 + (head->base.index * 0x400), 1);
|
||||
evo_data(push, m->clock * 1000);
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,47 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Lyude Paul <lyude@redhat.com>
|
||||
Date: Mon, 11 May 2020 18:41:23 -0400
|
||||
Subject: [PATCH] kms/nv50-: Initialize core channel in
|
||||
nouveau_display_create()
|
||||
|
||||
We'll need the core channel initialized and ready by the time that we
|
||||
start creating modesetting objects, so that we can call the
|
||||
NV507D_GET_CAPABILITIES method to make the hardware expose it's
|
||||
modesetting capabilities for later probing.
|
||||
|
||||
So, when loading the driver prepare the core channel from within
|
||||
nouveau_display_create(). Everywhere else, we initialize the core
|
||||
channel during resume.
|
||||
|
||||
Signed-off-by: Lyude Paul <lyude@redhat.com>
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/nouveau/dispnv50/disp.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
|
||||
index 2625ed84fc44..2afd56b9887d 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
|
||||
@@ -2373,7 +2373,8 @@ nv50_display_init(struct drm_device *dev, bool resume, bool runtime)
|
||||
struct drm_encoder *encoder;
|
||||
struct drm_plane *plane;
|
||||
|
||||
- core->func->init(core);
|
||||
+ if (resume || runtime)
|
||||
+ core->func->init(core);
|
||||
|
||||
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
|
||||
if (encoder->encoder_type != DRM_MODE_ENCODER_DPMST) {
|
||||
@@ -2460,6 +2461,8 @@ nv50_display_create(struct drm_device *dev)
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
+ disp->core->func->init(disp->core);
|
||||
+
|
||||
/* create crtc objects to represent the hw heads */
|
||||
if (disp->disp->object.oclass >= GV100_DISP)
|
||||
crtcs = nvif_rd32(&device->object, 0x610060) & 0xff;
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,65 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Lyude Paul <lyude@redhat.com>
|
||||
Date: Mon, 11 May 2020 18:41:26 -0400
|
||||
Subject: [PATCH] kms/nv50-: Move 8BPC limit for MST into nv50_mstc_get_modes()
|
||||
|
||||
This just limits the BPC for MST connectors to a maximum of 8 from
|
||||
nv50_mstc_get_modes(), instead of doing so during
|
||||
nv50_msto_atomic_check(). This doesn't introduce any functional changes
|
||||
yet (other then userspace now lying about the max bpc, but we can't
|
||||
support that yet anyway so meh). But, we'll need this in a moment so
|
||||
that we can share mode validation between SST and MST which will fix
|
||||
some real world issues.
|
||||
|
||||
Signed-off-by: Lyude Paul <lyude@redhat.com>
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/nouveau/dispnv50/disp.c | 25 ++++++++++++++-----------
|
||||
1 file changed, 14 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
|
||||
index 1db4f20b8697..e92e7bf49780 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
|
||||
@@ -908,15 +908,9 @@ nv50_msto_atomic_check(struct drm_encoder *encoder,
|
||||
if (!state->duplicated) {
|
||||
const int clock = crtc_state->adjusted_mode.clock;
|
||||
|
||||
- /*
|
||||
- * XXX: Since we don't use HDR in userspace quite yet, limit
|
||||
- * the bpc to 8 to save bandwidth on the topology. In the
|
||||
- * future, we'll want to properly fix this by dynamically
|
||||
- * selecting the highest possible bpc that would fit in the
|
||||
- * topology
|
||||
- */
|
||||
- asyh->or.bpc = min(connector->display_info.bpc, 8U);
|
||||
- asyh->dp.pbn = drm_dp_calc_pbn_mode(clock, asyh->or.bpc * 3, false);
|
||||
+ asyh->or.bpc = connector->display_info.bpc;
|
||||
+ asyh->dp.pbn = drm_dp_calc_pbn_mode(clock, asyh->or.bpc * 3,
|
||||
+ false);
|
||||
}
|
||||
|
||||
slots = drm_dp_atomic_find_vcpi_slots(state, &mstm->mgr, mstc->port,
|
||||
@@ -1076,8 +1070,17 @@ nv50_mstc_get_modes(struct drm_connector *connector)
|
||||
if (mstc->edid)
|
||||
ret = drm_add_edid_modes(&mstc->connector, mstc->edid);
|
||||
|
||||
- if (!mstc->connector.display_info.bpc)
|
||||
- mstc->connector.display_info.bpc = 8;
|
||||
+ /*
|
||||
+ * XXX: Since we don't use HDR in userspace quite yet, limit the bpc
|
||||
+ * to 8 to save bandwidth on the topology. In the future, we'll want
|
||||
+ * to properly fix this by dynamically selecting the highest possible
|
||||
+ * bpc that would fit in the topology
|
||||
+ */
|
||||
+ if (connector->display_info.bpc)
|
||||
+ connector->display_info.bpc =
|
||||
+ clamp(connector->display_info.bpc, 6U, 8U);
|
||||
+ else
|
||||
+ connector->display_info.bpc = 8;
|
||||
|
||||
if (mstc->native)
|
||||
drm_mode_destroy(mstc->connector.dev, mstc->native);
|
||||
--
|
||||
2.26.2
|
||||
|
439
0001-kms-nv50-Probe-SOR-and-PIOR-caps-for-DP-interlacing-.patch
Normal file
439
0001-kms-nv50-Probe-SOR-and-PIOR-caps-for-DP-interlacing-.patch
Normal file
@ -0,0 +1,439 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Lyude Paul <lyude@redhat.com>
|
||||
Date: Mon, 11 May 2020 18:41:24 -0400
|
||||
Subject: [PATCH] kms/nv50-: Probe SOR and PIOR caps for DP interlacing support
|
||||
|
||||
Right now, we make the mistake of allowing interlacing on all
|
||||
connectors. Nvidia hardware does not always support interlacing with DP
|
||||
though, so we need to make sure that we don't allow interlaced modes to
|
||||
be set in such situations as otherwise we'll end up accidentally hanging
|
||||
the display HW.
|
||||
|
||||
This fixes some hangs with Turing, which would be caused by attempting
|
||||
to set an interlaced mode on hardware that doesn't support it. This
|
||||
patch likely fixes other hardware hanging in the same way as well.
|
||||
|
||||
Note that we say we probe PIOR caps, but they don't actually have any
|
||||
interlacing caps. So, the get_caps() function for PIORs just sets
|
||||
interlacing support to true.
|
||||
|
||||
Changes since v1:
|
||||
* Actually probe caps correctly this time, both on EVO and NVDisplay.
|
||||
Changes since v2:
|
||||
* Fix probing for < GF119
|
||||
* Use vfunc table, in prep for adding more caps in the future.
|
||||
|
||||
Signed-off-by: Lyude Paul <lyude@redhat.com>
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/nouveau/dispnv50/core.h | 7 ++++++
|
||||
drivers/gpu/drm/nouveau/dispnv50/core507d.c | 15 ++++++++++++
|
||||
drivers/gpu/drm/nouveau/dispnv50/core827d.c | 1 +
|
||||
drivers/gpu/drm/nouveau/dispnv50/core907d.c | 1 +
|
||||
drivers/gpu/drm/nouveau/dispnv50/core917d.c | 1 +
|
||||
drivers/gpu/drm/nouveau/dispnv50/corec37d.c | 26 +++++++++++++++++++++
|
||||
drivers/gpu/drm/nouveau/dispnv50/corec57d.c | 1 +
|
||||
drivers/gpu/drm/nouveau/dispnv50/disp.c | 19 +++++++++++++--
|
||||
drivers/gpu/drm/nouveau/dispnv50/disp.h | 1 +
|
||||
drivers/gpu/drm/nouveau/dispnv50/pior507d.c | 8 +++++++
|
||||
drivers/gpu/drm/nouveau/dispnv50/sor507d.c | 7 ++++++
|
||||
drivers/gpu/drm/nouveau/dispnv50/sor907d.c | 11 +++++++++
|
||||
drivers/gpu/drm/nouveau/dispnv50/sorc37d.c | 9 +++++++
|
||||
drivers/gpu/drm/nouveau/nouveau_connector.c | 10 +++++++-
|
||||
drivers/gpu/drm/nouveau/nouveau_encoder.h | 4 ++++
|
||||
15 files changed, 118 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/core.h b/drivers/gpu/drm/nouveau/dispnv50/core.h
|
||||
index ff94f3f6f264..99157dc94d23 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/core.h
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/core.h
|
||||
@@ -2,6 +2,7 @@
|
||||
#define __NV50_KMS_CORE_H__
|
||||
#include "disp.h"
|
||||
#include "atom.h"
|
||||
+#include <nouveau_encoder.h>
|
||||
|
||||
struct nv50_core {
|
||||
const struct nv50_core_func *func;
|
||||
@@ -15,6 +16,7 @@ void nv50_core_del(struct nv50_core **);
|
||||
struct nv50_core_func {
|
||||
void (*init)(struct nv50_core *);
|
||||
void (*ntfy_init)(struct nouveau_bo *, u32 offset);
|
||||
+ int (*caps_init)(struct nouveau_drm *, struct nv50_disp *);
|
||||
int (*ntfy_wait_done)(struct nouveau_bo *, u32 offset,
|
||||
struct nvif_device *);
|
||||
void (*update)(struct nv50_core *, u32 *interlock, bool ntfy);
|
||||
@@ -27,6 +29,9 @@ struct nv50_core_func {
|
||||
const struct nv50_outp_func {
|
||||
void (*ctrl)(struct nv50_core *, int or, u32 ctrl,
|
||||
struct nv50_head_atom *);
|
||||
+ /* XXX: Only used by SORs and PIORs for now */
|
||||
+ void (*get_caps)(struct nv50_disp *,
|
||||
+ struct nouveau_encoder *, int or);
|
||||
} *dac, *pior, *sor;
|
||||
};
|
||||
|
||||
@@ -35,6 +40,7 @@ int core507d_new_(const struct nv50_core_func *, struct nouveau_drm *, s32,
|
||||
struct nv50_core **);
|
||||
void core507d_init(struct nv50_core *);
|
||||
void core507d_ntfy_init(struct nouveau_bo *, u32);
|
||||
+int core507d_caps_init(struct nouveau_drm *, struct nv50_disp *);
|
||||
int core507d_ntfy_wait_done(struct nouveau_bo *, u32, struct nvif_device *);
|
||||
void core507d_update(struct nv50_core *, u32 *, bool);
|
||||
|
||||
@@ -51,6 +57,7 @@ extern const struct nv50_outp_func sor907d;
|
||||
int core917d_new(struct nouveau_drm *, s32, struct nv50_core **);
|
||||
|
||||
int corec37d_new(struct nouveau_drm *, s32, struct nv50_core **);
|
||||
+int corec37d_caps_init(struct nouveau_drm *, struct nv50_disp *);
|
||||
int corec37d_ntfy_wait_done(struct nouveau_bo *, u32, struct nvif_device *);
|
||||
void corec37d_update(struct nv50_core *, u32 *, bool);
|
||||
void corec37d_wndw_owner(struct nv50_core *);
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/core507d.c b/drivers/gpu/drm/nouveau/dispnv50/core507d.c
|
||||
index c5152c39c684..e341f572c269 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/core507d.c
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/core507d.c
|
||||
@@ -62,6 +62,20 @@ core507d_ntfy_init(struct nouveau_bo *bo, u32 offset)
|
||||
nouveau_bo_wr32(bo, offset / 4, 0x00000000);
|
||||
}
|
||||
|
||||
+int
|
||||
+core507d_caps_init(struct nouveau_drm *drm, struct nv50_disp *disp)
|
||||
+{
|
||||
+ u32 *push = evo_wait(&disp->core->chan, 2);
|
||||
+
|
||||
+ if (push) {
|
||||
+ evo_mthd(push, 0x008c, 1);
|
||||
+ evo_data(push, 0x0);
|
||||
+ evo_kick(push, &disp->core->chan);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
void
|
||||
core507d_init(struct nv50_core *core)
|
||||
{
|
||||
@@ -77,6 +91,7 @@ static const struct nv50_core_func
|
||||
core507d = {
|
||||
.init = core507d_init,
|
||||
.ntfy_init = core507d_ntfy_init,
|
||||
+ .caps_init = core507d_caps_init,
|
||||
.ntfy_wait_done = core507d_ntfy_wait_done,
|
||||
.update = core507d_update,
|
||||
.head = &head507d,
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/core827d.c b/drivers/gpu/drm/nouveau/dispnv50/core827d.c
|
||||
index 6123a068f836..2e0c1c536afe 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/core827d.c
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/core827d.c
|
||||
@@ -26,6 +26,7 @@ static const struct nv50_core_func
|
||||
core827d = {
|
||||
.init = core507d_init,
|
||||
.ntfy_init = core507d_ntfy_init,
|
||||
+ .caps_init = core507d_caps_init,
|
||||
.ntfy_wait_done = core507d_ntfy_wait_done,
|
||||
.update = core507d_update,
|
||||
.head = &head827d,
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/core907d.c b/drivers/gpu/drm/nouveau/dispnv50/core907d.c
|
||||
index ef822f813435..271629832629 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/core907d.c
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/core907d.c
|
||||
@@ -26,6 +26,7 @@ static const struct nv50_core_func
|
||||
core907d = {
|
||||
.init = core507d_init,
|
||||
.ntfy_init = core507d_ntfy_init,
|
||||
+ .caps_init = core507d_caps_init,
|
||||
.ntfy_wait_done = core507d_ntfy_wait_done,
|
||||
.update = core507d_update,
|
||||
.head = &head907d,
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/core917d.c b/drivers/gpu/drm/nouveau/dispnv50/core917d.c
|
||||
index 392338df5bfd..5cc072d4c30f 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/core917d.c
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/core917d.c
|
||||
@@ -26,6 +26,7 @@ static const struct nv50_core_func
|
||||
core917d = {
|
||||
.init = core507d_init,
|
||||
.ntfy_init = core507d_ntfy_init,
|
||||
+ .caps_init = core507d_caps_init,
|
||||
.ntfy_wait_done = core507d_ntfy_wait_done,
|
||||
.update = core507d_update,
|
||||
.head = &head917d,
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/corec37d.c b/drivers/gpu/drm/nouveau/dispnv50/corec37d.c
|
||||
index c03cb987856b..e0c8811fb8e4 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/corec37d.c
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/corec37d.c
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "core.h"
|
||||
#include "head.h"
|
||||
|
||||
+#include <nvif/class.h>
|
||||
#include <nouveau_bo.h>
|
||||
|
||||
#include <nvif/timer.h>
|
||||
@@ -87,6 +88,30 @@ corec37d_ntfy_init(struct nouveau_bo *bo, u32 offset)
|
||||
nouveau_bo_wr32(bo, offset / 4 + 3, 0x00000000);
|
||||
}
|
||||
|
||||
+int corec37d_caps_init(struct nouveau_drm *drm, struct nv50_disp *disp)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = nvif_object_init(&disp->disp->object, 0, GV100_DISP_CAPS,
|
||||
+ NULL, 0, &disp->caps);
|
||||
+ if (ret) {
|
||||
+ NV_ERROR(drm,
|
||||
+ "Failed to init notifier caps region: %d\n",
|
||||
+ ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ ret = nvif_object_map(&disp->caps, NULL, 0);
|
||||
+ if (ret) {
|
||||
+ NV_ERROR(drm,
|
||||
+ "Failed to map notifier caps region: %d\n",
|
||||
+ ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
corec37d_init(struct nv50_core *core)
|
||||
{
|
||||
@@ -111,6 +136,7 @@ static const struct nv50_core_func
|
||||
corec37d = {
|
||||
.init = corec37d_init,
|
||||
.ntfy_init = corec37d_ntfy_init,
|
||||
+ .caps_init = corec37d_caps_init,
|
||||
.ntfy_wait_done = corec37d_ntfy_wait_done,
|
||||
.update = corec37d_update,
|
||||
.wndw.owner = corec37d_wndw_owner,
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/corec57d.c b/drivers/gpu/drm/nouveau/dispnv50/corec57d.c
|
||||
index 147adcd60937..10ba9e9e4ae6 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/corec57d.c
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/corec57d.c
|
||||
@@ -46,6 +46,7 @@ static const struct nv50_core_func
|
||||
corec57d = {
|
||||
.init = corec57d_init,
|
||||
.ntfy_init = corec37d_ntfy_init,
|
||||
+ .caps_init = corec37d_caps_init,
|
||||
.ntfy_wait_done = corec37d_ntfy_wait_done,
|
||||
.update = corec37d_update,
|
||||
.wndw.owner = corec37d_wndw_owner,
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
|
||||
index 2afd56b9887d..1db4f20b8697 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
|
||||
@@ -1663,6 +1663,7 @@ nv50_sor_create(struct drm_connector *connector, struct dcb_output *dcbe)
|
||||
struct nvkm_i2c *i2c = nvxx_i2c(&drm->client.device);
|
||||
struct nouveau_encoder *nv_encoder;
|
||||
struct drm_encoder *encoder;
|
||||
+ struct nv50_disp *disp = nv50_disp(connector->dev);
|
||||
int type, ret;
|
||||
|
||||
switch (dcbe->type) {
|
||||
@@ -1689,10 +1690,12 @@ nv50_sor_create(struct drm_connector *connector, struct dcb_output *dcbe)
|
||||
|
||||
drm_connector_attach_encoder(connector, encoder);
|
||||
|
||||
+ disp->core->func->sor->get_caps(disp, nv_encoder, ffs(dcbe->or) - 1);
|
||||
+
|
||||
if (dcbe->type == DCB_OUTPUT_DP) {
|
||||
- struct nv50_disp *disp = nv50_disp(encoder->dev);
|
||||
struct nvkm_i2c_aux *aux =
|
||||
nvkm_i2c_aux_find(i2c, dcbe->i2c_index);
|
||||
+
|
||||
if (aux) {
|
||||
if (disp->disp->object.oclass < GF110_DISP) {
|
||||
/* HW has no support for address-only
|
||||
@@ -1805,7 +1808,9 @@ nv50_pior_func = {
|
||||
static int
|
||||
nv50_pior_create(struct drm_connector *connector, struct dcb_output *dcbe)
|
||||
{
|
||||
- struct nouveau_drm *drm = nouveau_drm(connector->dev);
|
||||
+ struct drm_device *dev = connector->dev;
|
||||
+ struct nouveau_drm *drm = nouveau_drm(dev);
|
||||
+ struct nv50_disp *disp = nv50_disp(dev);
|
||||
struct nvkm_i2c *i2c = nvxx_i2c(&drm->client.device);
|
||||
struct nvkm_i2c_bus *bus = NULL;
|
||||
struct nvkm_i2c_aux *aux = NULL;
|
||||
@@ -1844,6 +1849,9 @@ nv50_pior_create(struct drm_connector *connector, struct dcb_output *dcbe)
|
||||
drm_encoder_helper_add(encoder, &nv50_pior_help);
|
||||
|
||||
drm_connector_attach_encoder(connector, encoder);
|
||||
+
|
||||
+ disp->core->func->pior->get_caps(disp, nv_encoder, ffs(dcbe->or) - 1);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2401,6 +2409,8 @@ nv50_display_destroy(struct drm_device *dev)
|
||||
|
||||
nv50_audio_component_fini(nouveau_drm(dev));
|
||||
|
||||
+ nvif_object_unmap(&disp->caps);
|
||||
+ nvif_object_fini(&disp->caps);
|
||||
nv50_core_del(&disp->core);
|
||||
|
||||
nouveau_bo_unmap(disp->sync);
|
||||
@@ -2462,6 +2472,11 @@ nv50_display_create(struct drm_device *dev)
|
||||
goto out;
|
||||
|
||||
disp->core->func->init(disp->core);
|
||||
+ if (disp->core->func->caps_init) {
|
||||
+ ret = disp->core->func->caps_init(drm, disp);
|
||||
+ if (ret)
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
/* create crtc objects to represent the hw heads */
|
||||
if (disp->disp->object.oclass >= GV100_DISP)
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.h b/drivers/gpu/drm/nouveau/dispnv50/disp.h
|
||||
index d54fe00ac3a3..89c3b38c32a5 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/disp.h
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/disp.h
|
||||
@@ -9,6 +9,7 @@ struct nv50_msto;
|
||||
struct nv50_disp {
|
||||
struct nvif_disp *disp;
|
||||
struct nv50_core *core;
|
||||
+ struct nvif_object caps;
|
||||
|
||||
#define NV50_DISP_SYNC(c, o) ((c) * 0x040 + (o))
|
||||
#define NV50_DISP_CORE_NTFY NV50_DISP_SYNC(0 , 0x00)
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/pior507d.c b/drivers/gpu/drm/nouveau/dispnv50/pior507d.c
|
||||
index d2bac6a341dc..45d8ce7d2c28 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/pior507d.c
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/pior507d.c
|
||||
@@ -38,7 +38,15 @@ pior507d_ctrl(struct nv50_core *core, int or, u32 ctrl,
|
||||
}
|
||||
}
|
||||
|
||||
+static void
|
||||
+pior507d_get_caps(struct nv50_disp *disp, struct nouveau_encoder *outp,
|
||||
+ int or)
|
||||
+{
|
||||
+ outp->caps.dp_interlace = true;
|
||||
+}
|
||||
+
|
||||
const struct nv50_outp_func
|
||||
pior507d = {
|
||||
.ctrl = pior507d_ctrl,
|
||||
+ .get_caps = pior507d_get_caps,
|
||||
};
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/sor507d.c b/drivers/gpu/drm/nouveau/dispnv50/sor507d.c
|
||||
index 5222fe6a9b21..9a59fa7da00d 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/sor507d.c
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/sor507d.c
|
||||
@@ -38,7 +38,14 @@ sor507d_ctrl(struct nv50_core *core, int or, u32 ctrl,
|
||||
}
|
||||
}
|
||||
|
||||
+static void
|
||||
+sor507d_get_caps(struct nv50_disp *core, struct nouveau_encoder *outp, int or)
|
||||
+{
|
||||
+ outp->caps.dp_interlace = true;
|
||||
+}
|
||||
+
|
||||
const struct nv50_outp_func
|
||||
sor507d = {
|
||||
.ctrl = sor507d_ctrl,
|
||||
+ .get_caps = sor507d_get_caps,
|
||||
};
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/sor907d.c b/drivers/gpu/drm/nouveau/dispnv50/sor907d.c
|
||||
index b0314ec11fb3..9577ccf1c809 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/sor907d.c
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/sor907d.c
|
||||
@@ -21,6 +21,7 @@
|
||||
*/
|
||||
#include "core.h"
|
||||
|
||||
+#include <nouveau_bo.h>
|
||||
#include <nvif/class.h>
|
||||
|
||||
static void
|
||||
@@ -35,7 +36,17 @@ sor907d_ctrl(struct nv50_core *core, int or, u32 ctrl,
|
||||
}
|
||||
}
|
||||
|
||||
+static void
|
||||
+sor907d_get_caps(struct nv50_disp *disp, struct nouveau_encoder *outp, int or)
|
||||
+{
|
||||
+ const int off = or * 2;
|
||||
+ u32 tmp = nouveau_bo_rd32(disp->sync, 0x000014 + off);
|
||||
+
|
||||
+ outp->caps.dp_interlace = !!(tmp & 0x04000000);
|
||||
+}
|
||||
+
|
||||
const struct nv50_outp_func
|
||||
sor907d = {
|
||||
.ctrl = sor907d_ctrl,
|
||||
+ .get_caps = sor907d_get_caps,
|
||||
};
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/sorc37d.c b/drivers/gpu/drm/nouveau/dispnv50/sorc37d.c
|
||||
index dff059241c5d..c86ca955fdcd 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/sorc37d.c
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/sorc37d.c
|
||||
@@ -33,7 +33,16 @@ sorc37d_ctrl(struct nv50_core *core, int or, u32 ctrl,
|
||||
}
|
||||
}
|
||||
|
||||
+static void
|
||||
+sorc37d_get_caps(struct nv50_disp *disp, struct nouveau_encoder *outp, int or)
|
||||
+{
|
||||
+ u32 tmp = nvif_rd32(&disp->caps, 0x000144 + (or * 8));
|
||||
+
|
||||
+ outp->caps.dp_interlace = !!(tmp & 0x04000000);
|
||||
+}
|
||||
+
|
||||
const struct nv50_outp_func
|
||||
sorc37d = {
|
||||
.ctrl = sorc37d_ctrl,
|
||||
+ .get_caps = sorc37d_get_caps,
|
||||
};
|
||||
diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
|
||||
index 9a9a7f5003d3..6dae00da5d7e 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
|
||||
@@ -509,7 +509,11 @@ nouveau_connector_set_encoder(struct drm_connector *connector,
|
||||
nv_connector->detected_encoder = nv_encoder;
|
||||
|
||||
if (drm->client.device.info.family >= NV_DEVICE_INFO_V0_TESLA) {
|
||||
- connector->interlace_allowed = true;
|
||||
+ if (nv_encoder->dcb->type == DCB_OUTPUT_DP)
|
||||
+ connector->interlace_allowed =
|
||||
+ nv_encoder->caps.dp_interlace;
|
||||
+ else
|
||||
+ connector->interlace_allowed = true;
|
||||
connector->doublescan_allowed = true;
|
||||
} else
|
||||
if (nv_encoder->dcb->type == DCB_OUTPUT_LVDS ||
|
||||
@@ -1060,6 +1064,10 @@ nouveau_connector_mode_valid(struct drm_connector *connector,
|
||||
case DCB_OUTPUT_TV:
|
||||
return get_slave_funcs(encoder)->mode_valid(encoder, mode);
|
||||
case DCB_OUTPUT_DP:
|
||||
+ if (mode->flags & DRM_MODE_FLAG_INTERLACE &&
|
||||
+ !nv_encoder->caps.dp_interlace)
|
||||
+ return MODE_NO_INTERLACE;
|
||||
+
|
||||
max_clock = nv_encoder->dp.link_nr;
|
||||
max_clock *= nv_encoder->dp.link_bw;
|
||||
clock = clock * (connector->display_info.bpc * 3) / 10;
|
||||
diff --git a/drivers/gpu/drm/nouveau/nouveau_encoder.h b/drivers/gpu/drm/nouveau/nouveau_encoder.h
|
||||
index 3517f920bf89..3217f587eceb 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nouveau_encoder.h
|
||||
+++ b/drivers/gpu/drm/nouveau/nouveau_encoder.h
|
||||
@@ -66,6 +66,10 @@ struct nouveau_encoder {
|
||||
} dp;
|
||||
};
|
||||
|
||||
+ struct {
|
||||
+ bool dp_interlace : 1;
|
||||
+ } caps;
|
||||
+
|
||||
void (*enc_save)(struct drm_encoder *encoder);
|
||||
void (*enc_restore)(struct drm_encoder *encoder);
|
||||
void (*update)(struct nouveau_encoder *, u8 head,
|
||||
--
|
||||
2.26.2
|
||||
|
209
0001-kms-nv50-Share-DP-SST-mode_valid-handling-with-MST.patch
Normal file
209
0001-kms-nv50-Share-DP-SST-mode_valid-handling-with-MST.patch
Normal file
@ -0,0 +1,209 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Lyude Paul <lyude@redhat.com>
|
||||
Date: Mon, 11 May 2020 18:41:27 -0400
|
||||
Subject: [PATCH] kms/nv50-: Share DP SST mode_valid() handling with MST
|
||||
|
||||
Currently, the nv50_mstc_mode_valid() function is happy to take any and
|
||||
all modes, even the ones we can't actually support sometimes like
|
||||
interlaced modes.
|
||||
|
||||
Luckily, the only difference between the mode validation that needs to
|
||||
be performed for MST vs. SST is that eventually we'll need to check the
|
||||
minimum PBN against the MSTB's full PBN capabilities (remember-we don't
|
||||
care about the current bw state here). Otherwise, all of the other code
|
||||
can be shared.
|
||||
|
||||
So, we move all of the common mode validation in
|
||||
nouveau_connector_mode_valid() into a separate helper,
|
||||
nv50_dp_mode_valid(), and use that from both nv50_mstc_mode_valid() and
|
||||
nouveau_connector_mode_valid(). Note that we allow for returning the
|
||||
calculated clock that nv50_dp_mode_valid() came up with, since we'll
|
||||
eventually want to use that for PBN calculation in
|
||||
nv50_mstc_mode_valid().
|
||||
|
||||
Signed-off-by: Lyude Paul <lyude@redhat.com>
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/nouveau/dispnv50/disp.c | 9 +++-
|
||||
drivers/gpu/drm/nouveau/nouveau_connector.c | 46 ++++++++++++---------
|
||||
drivers/gpu/drm/nouveau/nouveau_connector.h | 5 +++
|
||||
drivers/gpu/drm/nouveau/nouveau_dp.c | 31 ++++++++++++++
|
||||
drivers/gpu/drm/nouveau/nouveau_encoder.h | 4 ++
|
||||
5 files changed, 75 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
|
||||
index e92e7bf49780..d5d69532f3c5 100644
|
||||
--- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
|
||||
+++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
|
||||
@@ -1056,7 +1056,14 @@ static enum drm_mode_status
|
||||
nv50_mstc_mode_valid(struct drm_connector *connector,
|
||||
struct drm_display_mode *mode)
|
||||
{
|
||||
- return MODE_OK;
|
||||
+ struct nv50_mstc *mstc = nv50_mstc(connector);
|
||||
+ struct nouveau_encoder *outp = mstc->mstm->outp;
|
||||
+
|
||||
+ /* TODO: calculate the PBN from the dotclock and validate against the
|
||||
+ * MSTB's max possible PBN
|
||||
+ */
|
||||
+
|
||||
+ return nv50_dp_mode_valid(connector, outp, mode, NULL);
|
||||
}
|
||||
|
||||
static int
|
||||
diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
|
||||
index 6dae00da5d7e..1b383ae0248f 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
|
||||
@@ -38,6 +38,7 @@
|
||||
#include "nouveau_reg.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "dispnv04/hw.h"
|
||||
+#include "dispnv50/disp.h"
|
||||
#include "nouveau_acpi.h"
|
||||
|
||||
#include "nouveau_display.h"
|
||||
@@ -1033,6 +1034,29 @@ get_tmds_link_bandwidth(struct drm_connector *connector)
|
||||
return 112000 * duallink_scale;
|
||||
}
|
||||
|
||||
+enum drm_mode_status
|
||||
+nouveau_conn_mode_clock_valid(const struct drm_display_mode *mode,
|
||||
+ const unsigned min_clock,
|
||||
+ const unsigned max_clock,
|
||||
+ unsigned int *clock_out)
|
||||
+{
|
||||
+ unsigned int clock = mode->clock;
|
||||
+
|
||||
+ if ((mode->flags & DRM_MODE_FLAG_3D_MASK) ==
|
||||
+ DRM_MODE_FLAG_3D_FRAME_PACKING)
|
||||
+ clock *= 2;
|
||||
+
|
||||
+ if (clock < min_clock)
|
||||
+ return MODE_CLOCK_LOW;
|
||||
+ if (clock > max_clock)
|
||||
+ return MODE_CLOCK_HIGH;
|
||||
+
|
||||
+ if (clock_out)
|
||||
+ *clock_out = clock;
|
||||
+
|
||||
+ return MODE_OK;
|
||||
+}
|
||||
+
|
||||
static enum drm_mode_status
|
||||
nouveau_connector_mode_valid(struct drm_connector *connector,
|
||||
struct drm_display_mode *mode)
|
||||
@@ -1041,7 +1065,6 @@ nouveau_connector_mode_valid(struct drm_connector *connector,
|
||||
struct nouveau_encoder *nv_encoder = nv_connector->detected_encoder;
|
||||
struct drm_encoder *encoder = to_drm_encoder(nv_encoder);
|
||||
unsigned min_clock = 25000, max_clock = min_clock;
|
||||
- unsigned clock = mode->clock;
|
||||
|
||||
switch (nv_encoder->dcb->type) {
|
||||
case DCB_OUTPUT_LVDS:
|
||||
@@ -1064,29 +1087,14 @@ nouveau_connector_mode_valid(struct drm_connector *connector,
|
||||
case DCB_OUTPUT_TV:
|
||||
return get_slave_funcs(encoder)->mode_valid(encoder, mode);
|
||||
case DCB_OUTPUT_DP:
|
||||
- if (mode->flags & DRM_MODE_FLAG_INTERLACE &&
|
||||
- !nv_encoder->caps.dp_interlace)
|
||||
- return MODE_NO_INTERLACE;
|
||||
-
|
||||
- max_clock = nv_encoder->dp.link_nr;
|
||||
- max_clock *= nv_encoder->dp.link_bw;
|
||||
- clock = clock * (connector->display_info.bpc * 3) / 10;
|
||||
- break;
|
||||
+ return nv50_dp_mode_valid(connector, nv_encoder, mode, NULL);
|
||||
default:
|
||||
BUG();
|
||||
return MODE_BAD;
|
||||
}
|
||||
|
||||
- if ((mode->flags & DRM_MODE_FLAG_3D_MASK) == DRM_MODE_FLAG_3D_FRAME_PACKING)
|
||||
- clock *= 2;
|
||||
-
|
||||
- if (clock < min_clock)
|
||||
- return MODE_CLOCK_LOW;
|
||||
-
|
||||
- if (clock > max_clock)
|
||||
- return MODE_CLOCK_HIGH;
|
||||
-
|
||||
- return MODE_OK;
|
||||
+ return nouveau_conn_mode_clock_valid(mode, min_clock, max_clock,
|
||||
+ NULL);
|
||||
}
|
||||
|
||||
static struct drm_encoder *
|
||||
diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.h b/drivers/gpu/drm/nouveau/nouveau_connector.h
|
||||
index de84fb4708c7..9e062c7adec8 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nouveau_connector.h
|
||||
+++ b/drivers/gpu/drm/nouveau/nouveau_connector.h
|
||||
@@ -195,6 +195,11 @@ int nouveau_conn_atomic_get_property(struct drm_connector *,
|
||||
const struct drm_connector_state *,
|
||||
struct drm_property *, u64 *);
|
||||
struct drm_display_mode *nouveau_conn_native_mode(struct drm_connector *);
|
||||
+enum drm_mode_status
|
||||
+nouveau_conn_mode_clock_valid(const struct drm_display_mode *,
|
||||
+ const unsigned min_clock,
|
||||
+ const unsigned max_clock,
|
||||
+ unsigned *clock);
|
||||
|
||||
#ifdef CONFIG_DRM_NOUVEAU_BACKLIGHT
|
||||
extern int nouveau_backlight_init(struct drm_connector *);
|
||||
diff --git a/drivers/gpu/drm/nouveau/nouveau_dp.c b/drivers/gpu/drm/nouveau/nouveau_dp.c
|
||||
index 2674f1587457..8a0f7994e1ae 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nouveau_dp.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nouveau_dp.c
|
||||
@@ -98,3 +98,34 @@ nouveau_dp_detect(struct nouveau_encoder *nv_encoder)
|
||||
return NOUVEAU_DP_SST;
|
||||
return ret;
|
||||
}
|
||||
+
|
||||
+/* TODO:
|
||||
+ * - Use the minimum possible BPC here, once we add support for the max bpc
|
||||
+ * property.
|
||||
+ * - Validate the mode against downstream port caps (see
|
||||
+ * drm_dp_downstream_max_clock())
|
||||
+ * - Validate against the DP caps advertised by the GPU (we don't check these
|
||||
+ * yet)
|
||||
+ */
|
||||
+enum drm_mode_status
|
||||
+nv50_dp_mode_valid(struct drm_connector *connector,
|
||||
+ struct nouveau_encoder *outp,
|
||||
+ const struct drm_display_mode *mode,
|
||||
+ unsigned *out_clock)
|
||||
+{
|
||||
+ const unsigned min_clock = 25000;
|
||||
+ unsigned max_clock, clock;
|
||||
+ enum drm_mode_status ret;
|
||||
+
|
||||
+ if (mode->flags & DRM_MODE_FLAG_INTERLACE && !outp->caps.dp_interlace)
|
||||
+ return MODE_NO_INTERLACE;
|
||||
+
|
||||
+ max_clock = outp->dp.link_nr * outp->dp.link_bw;
|
||||
+ clock = mode->clock * (connector->display_info.bpc * 3) / 10;
|
||||
+
|
||||
+ ret = nouveau_conn_mode_clock_valid(mode, min_clock, max_clock,
|
||||
+ &clock);
|
||||
+ if (out_clock)
|
||||
+ *out_clock = clock;
|
||||
+ return ret;
|
||||
+}
|
||||
diff --git a/drivers/gpu/drm/nouveau/nouveau_encoder.h b/drivers/gpu/drm/nouveau/nouveau_encoder.h
|
||||
index 3217f587eceb..de51733b0476 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nouveau_encoder.h
|
||||
+++ b/drivers/gpu/drm/nouveau/nouveau_encoder.h
|
||||
@@ -104,6 +104,10 @@ enum nouveau_dp_status {
|
||||
};
|
||||
|
||||
int nouveau_dp_detect(struct nouveau_encoder *);
|
||||
+enum drm_mode_status nv50_dp_mode_valid(struct drm_connector *,
|
||||
+ struct nouveau_encoder *,
|
||||
+ const struct drm_display_mode *,
|
||||
+ unsigned *clock);
|
||||
|
||||
struct nouveau_connector *
|
||||
nouveau_encoder_connector_get(struct nouveau_encoder *encoder);
|
||||
--
|
||||
2.26.2
|
||||
|
47
0001-mmu-Remove-unneeded-semicolon.patch
Normal file
47
0001-mmu-Remove-unneeded-semicolon.patch
Normal file
@ -0,0 +1,47 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zheng Bin <zhengbin13@huawei.com>
|
||||
Date: Fri, 24 Apr 2020 15:36:01 +0800
|
||||
Subject: [PATCH] mmu: Remove unneeded semicolon
|
||||
|
||||
Fixes coccicheck warning:
|
||||
|
||||
drivers/gpu/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.h:307:2-3: Unneeded semicolon
|
||||
drivers/gpu/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c:583:2-3: Unneeded semicolon
|
||||
|
||||
Reported-by: Hulk Robot <hulkci@huawei.com>
|
||||
Signed-off-by: Zheng Bin <zhengbin13@huawei.com>
|
||||
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c | 2 +-
|
||||
drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.h | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c
|
||||
index 41640e0584ac..199f94e15c5f 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c
|
||||
@@ -580,7 +580,7 @@ nvkm_vmm_iter(struct nvkm_vmm *vmm, const struct nvkm_vmm_page *page,
|
||||
it.pte[it.lvl]++;
|
||||
}
|
||||
}
|
||||
- };
|
||||
+ }
|
||||
|
||||
nvkm_vmm_flush(&it);
|
||||
return ~0ULL;
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.h b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.h
|
||||
index 5e55ecbd8005..d3f8f916d0db 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.h
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.h
|
||||
@@ -304,7 +304,7 @@ int tu102_vmm_new(struct nvkm_mmu *, bool, u64, u64, void *, u32,
|
||||
FILL(VMM, PT, PTEI, _ptes, MAP, _addr); \
|
||||
PTEI += _ptes; \
|
||||
PTEN -= _ptes; \
|
||||
- }; \
|
||||
+ } \
|
||||
nvkm_done((PT)->memory); \
|
||||
} while(0)
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
116
0001-platform-x86-sony-laptop-SNC-calls-should-handle-BUF.patch
Normal file
116
0001-platform-x86-sony-laptop-SNC-calls-should-handle-BUF.patch
Normal file
@ -0,0 +1,116 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Mattia Dongili <malattia@linux.it>
|
||||
Date: Fri, 8 May 2020 09:14:04 +0900
|
||||
Subject: [PATCH] platform/x86: sony-laptop: SNC calls should handle BUFFER
|
||||
types
|
||||
|
||||
After commit 6d232b29cfce ("ACPICA: Dispatcher: always generate buffer
|
||||
objects for ASL create_field() operator") ACPICA creates buffers even
|
||||
when new fields are small enough to fit into an integer.
|
||||
Many SNC calls counted on the old behaviour.
|
||||
Since sony-laptop already handles the INTEGER/BUFFER case in
|
||||
sony_nc_buffer_call, switch sony_nc_int_call to use its more generic
|
||||
function instead.
|
||||
|
||||
Fixes: 6d232b29cfce ("ACPICA: Dispatcher: always generate buffer objects for ASL create_field() operator")
|
||||
Reported-by: Dominik Mierzejewski <dominik@greysector.net>
|
||||
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=207491
|
||||
Reported-by: William Bader <williambader@hotmail.com>
|
||||
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1830150
|
||||
Signed-off-by: Mattia Dongili <malattia@linux.it>
|
||||
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
||||
Upstream Status: linux-platform-drivers-x86/for-next
|
||||
(cherry picked from commit 47828d22539f76c8c9dcf2a55f18ea3a8039d8ef)
|
||||
---
|
||||
drivers/platform/x86/sony-laptop.c | 53 +++++++++++++-----------------
|
||||
1 file changed, 23 insertions(+), 30 deletions(-)
|
||||
|
||||
diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c
|
||||
index 51309f7ceede..6932cd11e660 100644
|
||||
--- a/drivers/platform/x86/sony-laptop.c
|
||||
+++ b/drivers/platform/x86/sony-laptop.c
|
||||
@@ -757,33 +757,6 @@ static union acpi_object *__call_snc_method(acpi_handle handle, char *method,
|
||||
return result;
|
||||
}
|
||||
|
||||
-static int sony_nc_int_call(acpi_handle handle, char *name, int *value,
|
||||
- int *result)
|
||||
-{
|
||||
- union acpi_object *object = NULL;
|
||||
- if (value) {
|
||||
- u64 v = *value;
|
||||
- object = __call_snc_method(handle, name, &v);
|
||||
- } else
|
||||
- object = __call_snc_method(handle, name, NULL);
|
||||
-
|
||||
- if (!object)
|
||||
- return -EINVAL;
|
||||
-
|
||||
- if (object->type != ACPI_TYPE_INTEGER) {
|
||||
- pr_warn("Invalid acpi_object: expected 0x%x got 0x%x\n",
|
||||
- ACPI_TYPE_INTEGER, object->type);
|
||||
- kfree(object);
|
||||
- return -EINVAL;
|
||||
- }
|
||||
-
|
||||
- if (result)
|
||||
- *result = object->integer.value;
|
||||
-
|
||||
- kfree(object);
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
#define MIN(a, b) (a > b ? b : a)
|
||||
static int sony_nc_buffer_call(acpi_handle handle, char *name, u64 *value,
|
||||
void *buffer, size_t buflen)
|
||||
@@ -795,17 +768,20 @@ static int sony_nc_buffer_call(acpi_handle handle, char *name, u64 *value,
|
||||
if (!object)
|
||||
return -EINVAL;
|
||||
|
||||
- if (object->type == ACPI_TYPE_BUFFER) {
|
||||
+ if (!buffer) {
|
||||
+ /* do nothing */
|
||||
+ } else if (object->type == ACPI_TYPE_BUFFER) {
|
||||
len = MIN(buflen, object->buffer.length);
|
||||
+ memset(buffer, 0, buflen);
|
||||
memcpy(buffer, object->buffer.pointer, len);
|
||||
|
||||
} else if (object->type == ACPI_TYPE_INTEGER) {
|
||||
len = MIN(buflen, sizeof(object->integer.value));
|
||||
+ memset(buffer, 0, buflen);
|
||||
memcpy(buffer, &object->integer.value, len);
|
||||
|
||||
} else {
|
||||
- pr_warn("Invalid acpi_object: expected 0x%x got 0x%x\n",
|
||||
- ACPI_TYPE_BUFFER, object->type);
|
||||
+ pr_warn("Unexpected acpi_object: 0x%x\n", object->type);
|
||||
ret = -EINVAL;
|
||||
}
|
||||
|
||||
@@ -813,6 +789,23 @@ static int sony_nc_buffer_call(acpi_handle handle, char *name, u64 *value,
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int sony_nc_int_call(acpi_handle handle, char *name, int *value, int
|
||||
+ *result)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+ if (value) {
|
||||
+ u64 v = *value;
|
||||
+
|
||||
+ ret = sony_nc_buffer_call(handle, name, &v, result,
|
||||
+ sizeof(*result));
|
||||
+ } else {
|
||||
+ ret = sony_nc_buffer_call(handle, name, NULL, result,
|
||||
+ sizeof(*result));
|
||||
+ }
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
struct sony_nc_handles {
|
||||
u16 cap[0x10];
|
||||
struct device_attribute devattr;
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,58 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 19 May 2020 11:05:40 +0200
|
||||
Subject: [PATCH] virt: vbox: Add a few new vmmdev request types to the
|
||||
userspace whitelist
|
||||
|
||||
Upstream VirtualBox has defined and is using a few new request types for
|
||||
vmmdev requests passed through /dev/vboxguest to the hypervisor.
|
||||
|
||||
Add the defines for these to vbox_vmmdev_types.h and add add them to the
|
||||
whitelists of vmmdev requests which userspace is allowed to make.
|
||||
|
||||
BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1789545
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Upstream Status: https://lore.kernel.org/lkml/20200520195440.38759-1-hdegoede@redhat.com/
|
||||
---
|
||||
drivers/virt/vboxguest/vboxguest_core.c | 2 ++
|
||||
include/uapi/linux/vbox_vmmdev_types.h | 3 +++
|
||||
2 files changed, 5 insertions(+)
|
||||
|
||||
diff --git a/drivers/virt/vboxguest/vboxguest_core.c b/drivers/virt/vboxguest/vboxguest_core.c
|
||||
index 4f1addaa3f6f..ffd76b949276 100644
|
||||
--- a/drivers/virt/vboxguest/vboxguest_core.c
|
||||
+++ b/drivers/virt/vboxguest/vboxguest_core.c
|
||||
@@ -1299,7 +1299,9 @@ static int vbg_req_allowed(struct vbg_dev *gdev, struct vbg_session *session,
|
||||
case VMMDEVREQ_VIDEO_ACCEL_ENABLE:
|
||||
case VMMDEVREQ_VIDEO_ACCEL_FLUSH:
|
||||
case VMMDEVREQ_VIDEO_SET_VISIBLE_REGION:
|
||||
+ case VMMDEVREQ_VIDEO_UPDATE_MONITOR_POSITIONS:
|
||||
case VMMDEVREQ_GET_DISPLAY_CHANGE_REQEX:
|
||||
+ case VMMDEVREQ_GET_DISPLAY_CHANGE_REQ_MULTI:
|
||||
case VMMDEVREQ_GET_SEAMLESS_CHANGE_REQ:
|
||||
case VMMDEVREQ_GET_VRDPCHANGE_REQ:
|
||||
case VMMDEVREQ_LOG_STRING:
|
||||
diff --git a/include/uapi/linux/vbox_vmmdev_types.h b/include/uapi/linux/vbox_vmmdev_types.h
|
||||
index c27289fd619a..f8a8d6b3c521 100644
|
||||
--- a/include/uapi/linux/vbox_vmmdev_types.h
|
||||
+++ b/include/uapi/linux/vbox_vmmdev_types.h
|
||||
@@ -63,6 +63,7 @@ enum vmmdev_request_type {
|
||||
VMMDEVREQ_SET_GUEST_CAPABILITIES = 56,
|
||||
VMMDEVREQ_VIDEMODE_SUPPORTED2 = 57, /* since version 3.2.0 */
|
||||
VMMDEVREQ_GET_DISPLAY_CHANGE_REQEX = 80, /* since version 4.2.4 */
|
||||
+ VMMDEVREQ_GET_DISPLAY_CHANGE_REQ_MULTI = 81,
|
||||
VMMDEVREQ_HGCM_CONNECT = 60,
|
||||
VMMDEVREQ_HGCM_DISCONNECT = 61,
|
||||
VMMDEVREQ_HGCM_CALL32 = 62,
|
||||
@@ -92,6 +93,8 @@ enum vmmdev_request_type {
|
||||
VMMDEVREQ_WRITE_COREDUMP = 218,
|
||||
VMMDEVREQ_GUEST_HEARTBEAT = 219,
|
||||
VMMDEVREQ_HEARTBEAT_CONFIGURE = 220,
|
||||
+ VMMDEVREQ_NT_BUG_CHECK = 221,
|
||||
+ VMMDEVREQ_VIDEO_UPDATE_MONITOR_POSITIONS = 222,
|
||||
/* Ensure the enum is a 32 bit data-type */
|
||||
VMMDEVREQ_SIZEHACK = 0x7fffffff
|
||||
};
|
||||
--
|
||||
2.26.2
|
||||
|
320
0001-virt-vbox-Add-support-for-the-new-VBG_IOCTL_ACQUIRE_.patch
Normal file
320
0001-virt-vbox-Add-support-for-the-new-VBG_IOCTL_ACQUIRE_.patch
Normal file
@ -0,0 +1,320 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 19 May 2020 18:04:30 +0200
|
||||
Subject: [PATCH] virt: vbox: Add support for the new
|
||||
VBG_IOCTL_ACQUIRE_GUEST_CAPABILITIES ioctl
|
||||
|
||||
Add support for the new VBG_IOCTL_ACQUIRE_GUEST_CAPABILITIES ioctl, this
|
||||
is necessary for automatic resizing of the guest resolution to match the
|
||||
VM-window size to work with the new VMSVGA virtual GPU which is now the
|
||||
new default in VirtualBox.
|
||||
|
||||
BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1789545
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Upstream Status: https://lore.kernel.org/lkml/20200520195440.38759-1-hdegoede@redhat.com/
|
||||
---
|
||||
drivers/virt/vboxguest/vboxguest_core.c | 163 +++++++++++++++++++++++-
|
||||
drivers/virt/vboxguest/vboxguest_core.h | 14 ++
|
||||
include/uapi/linux/vboxguest.h | 24 ++++
|
||||
3 files changed, 200 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/virt/vboxguest/vboxguest_core.c b/drivers/virt/vboxguest/vboxguest_core.c
|
||||
index 15b3cb618c6e..4f1addaa3f6f 100644
|
||||
--- a/drivers/virt/vboxguest/vboxguest_core.c
|
||||
+++ b/drivers/virt/vboxguest/vboxguest_core.c
|
||||
@@ -679,7 +679,7 @@ static int vbg_set_host_capabilities(struct vbg_dev *gdev,
|
||||
|
||||
WARN_ON(!mutex_is_locked(&gdev->session_mutex));
|
||||
|
||||
- caps = gdev->set_guest_caps_tracker.mask;
|
||||
+ caps = gdev->acquired_guest_caps | gdev->set_guest_caps_tracker.mask;
|
||||
|
||||
if (gdev->guest_caps_host == caps)
|
||||
return 0;
|
||||
@@ -703,6 +703,113 @@ static int vbg_set_host_capabilities(struct vbg_dev *gdev,
|
||||
return vbg_status_code_to_errno(rc);
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * Acquire (get exclusive access) guest capabilities for a session.
|
||||
+ * Takes the session mutex.
|
||||
+ * Return: 0 or negative errno value.
|
||||
+ * @gdev: The Guest extension device.
|
||||
+ * @session: The session.
|
||||
+ * @flags: Flags (VBGL_IOC_AGC_FLAGS_XXX).
|
||||
+ * @or_mask: The capabilities to add.
|
||||
+ * @not_mask: The capabilities to remove.
|
||||
+ * @session_termination: Set if we're called by the session cleanup code.
|
||||
+ * This tweaks the error handling so we perform
|
||||
+ * proper session cleanup even if the host
|
||||
+ * misbehaves.
|
||||
+ */
|
||||
+static int vbg_acquire_session_capabilities(struct vbg_dev *gdev,
|
||||
+ struct vbg_session *session,
|
||||
+ u32 or_mask, u32 not_mask,
|
||||
+ u32 flags, bool session_termination)
|
||||
+{
|
||||
+ unsigned long irqflags;
|
||||
+ bool wakeup = false;
|
||||
+ int ret = 0;
|
||||
+
|
||||
+ mutex_lock(&gdev->session_mutex);
|
||||
+
|
||||
+ if (gdev->set_guest_caps_tracker.mask & or_mask) {
|
||||
+ vbg_err("%s error: cannot acquire caps which are currently set\n",
|
||||
+ __func__);
|
||||
+ ret = -EINVAL;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * Mark any caps in the or_mask as now being in acquire-mode. Note
|
||||
+ * once caps are in acquire_mode they always stay in this mode.
|
||||
+ * This impacts event handling, so we take the event-lock.
|
||||
+ */
|
||||
+ spin_lock_irqsave(&gdev->event_spinlock, irqflags);
|
||||
+ gdev->acquire_mode_guest_caps |= or_mask;
|
||||
+ spin_unlock_irqrestore(&gdev->event_spinlock, irqflags);
|
||||
+
|
||||
+ /* If we only have to switch the caps to acquire mode, we're done. */
|
||||
+ if (flags & VBGL_IOC_AGC_FLAGS_CONFIG_ACQUIRE_MODE)
|
||||
+ goto out;
|
||||
+
|
||||
+ not_mask &= ~or_mask; /* or_mask takes priority over not_mask */
|
||||
+ not_mask &= session->acquired_guest_caps;
|
||||
+ or_mask &= ~session->acquired_guest_caps;
|
||||
+
|
||||
+ if (or_mask == 0 && not_mask == 0)
|
||||
+ goto out;
|
||||
+
|
||||
+ if (gdev->acquired_guest_caps & or_mask) {
|
||||
+ ret = -EBUSY;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ gdev->acquired_guest_caps |= or_mask;
|
||||
+ gdev->acquired_guest_caps &= ~not_mask;
|
||||
+ /* session->acquired_guest_caps impacts event handling, take the lock */
|
||||
+ spin_lock_irqsave(&gdev->event_spinlock, irqflags);
|
||||
+ session->acquired_guest_caps |= or_mask;
|
||||
+ session->acquired_guest_caps &= ~not_mask;
|
||||
+ spin_unlock_irqrestore(&gdev->event_spinlock, irqflags);
|
||||
+
|
||||
+ ret = vbg_set_host_capabilities(gdev, session, session_termination);
|
||||
+ /* Roll back on failure, unless it's session termination time. */
|
||||
+ if (ret < 0 && !session_termination) {
|
||||
+ gdev->acquired_guest_caps &= ~or_mask;
|
||||
+ gdev->acquired_guest_caps |= not_mask;
|
||||
+ spin_lock_irqsave(&gdev->event_spinlock, irqflags);
|
||||
+ session->acquired_guest_caps &= ~or_mask;
|
||||
+ session->acquired_guest_caps |= not_mask;
|
||||
+ spin_unlock_irqrestore(&gdev->event_spinlock, irqflags);
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * If we added a capability, check if that means some other thread in
|
||||
+ * our session should be unblocked because there are events pending
|
||||
+ * (the result of vbg_get_allowed_event_mask_for_session() may change).
|
||||
+ *
|
||||
+ * HACK ALERT! When the seamless support capability is added we generate
|
||||
+ * a seamless change event so that the ring-3 client can sync with
|
||||
+ * the seamless state.
|
||||
+ */
|
||||
+ if (ret == 0 && or_mask != 0) {
|
||||
+ spin_lock_irqsave(&gdev->event_spinlock, irqflags);
|
||||
+
|
||||
+ if (or_mask & VMMDEV_GUEST_SUPPORTS_SEAMLESS)
|
||||
+ gdev->pending_events |=
|
||||
+ VMMDEV_EVENT_SEAMLESS_MODE_CHANGE_REQUEST;
|
||||
+
|
||||
+ if (gdev->pending_events)
|
||||
+ wakeup = true;
|
||||
+
|
||||
+ spin_unlock_irqrestore(&gdev->event_spinlock, irqflags);
|
||||
+
|
||||
+ if (wakeup)
|
||||
+ wake_up(&gdev->event_wq);
|
||||
+ }
|
||||
+
|
||||
+out:
|
||||
+ mutex_unlock(&gdev->session_mutex);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* Sets the guest capabilities for a session. Takes the session spinlock.
|
||||
* Return: 0 or negative errno value.
|
||||
@@ -725,6 +832,13 @@ static int vbg_set_session_capabilities(struct vbg_dev *gdev,
|
||||
|
||||
mutex_lock(&gdev->session_mutex);
|
||||
|
||||
+ if (gdev->acquire_mode_guest_caps & or_mask) {
|
||||
+ vbg_err("%s error: cannot set caps which are in acquire_mode\n",
|
||||
+ __func__);
|
||||
+ ret = -EBUSY;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
/* Apply the changes to the session mask. */
|
||||
previous = session->set_guest_caps;
|
||||
session->set_guest_caps |= or_mask;
|
||||
@@ -962,6 +1076,7 @@ void vbg_core_close_session(struct vbg_session *session)
|
||||
struct vbg_dev *gdev = session->gdev;
|
||||
int i, rc;
|
||||
|
||||
+ vbg_acquire_session_capabilities(gdev, session, 0, U32_MAX, 0, true);
|
||||
vbg_set_session_capabilities(gdev, session, 0, U32_MAX, true);
|
||||
vbg_set_session_event_filter(gdev, session, 0, U32_MAX, true);
|
||||
|
||||
@@ -1019,6 +1134,25 @@ static int vbg_ioctl_driver_version_info(
|
||||
return 0;
|
||||
}
|
||||
|
||||
+/* Must be called with the event_lock held */
|
||||
+static u32 vbg_get_allowed_event_mask_for_session(struct vbg_dev *gdev,
|
||||
+ struct vbg_session *session)
|
||||
+{
|
||||
+ u32 acquire_mode_caps = gdev->acquire_mode_guest_caps;
|
||||
+ u32 session_acquired_caps = session->acquired_guest_caps;
|
||||
+ u32 allowed_events = VMMDEV_EVENT_VALID_EVENT_MASK;
|
||||
+
|
||||
+ if ((acquire_mode_caps & VMMDEV_GUEST_SUPPORTS_GRAPHICS) &&
|
||||
+ !(session_acquired_caps & VMMDEV_GUEST_SUPPORTS_GRAPHICS))
|
||||
+ allowed_events &= ~VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST;
|
||||
+
|
||||
+ if ((acquire_mode_caps & VMMDEV_GUEST_SUPPORTS_SEAMLESS) &&
|
||||
+ !(session_acquired_caps & VMMDEV_GUEST_SUPPORTS_SEAMLESS))
|
||||
+ allowed_events &= ~VMMDEV_EVENT_SEAMLESS_MODE_CHANGE_REQUEST;
|
||||
+
|
||||
+ return allowed_events;
|
||||
+}
|
||||
+
|
||||
static bool vbg_wait_event_cond(struct vbg_dev *gdev,
|
||||
struct vbg_session *session,
|
||||
u32 event_mask)
|
||||
@@ -1030,6 +1164,7 @@ static bool vbg_wait_event_cond(struct vbg_dev *gdev,
|
||||
spin_lock_irqsave(&gdev->event_spinlock, flags);
|
||||
|
||||
events = gdev->pending_events & event_mask;
|
||||
+ events &= vbg_get_allowed_event_mask_for_session(gdev, session);
|
||||
wakeup = events || session->cancel_waiters;
|
||||
|
||||
spin_unlock_irqrestore(&gdev->event_spinlock, flags);
|
||||
@@ -1044,6 +1179,7 @@ static u32 vbg_consume_events_locked(struct vbg_dev *gdev,
|
||||
{
|
||||
u32 events = gdev->pending_events & event_mask;
|
||||
|
||||
+ events &= vbg_get_allowed_event_mask_for_session(gdev, session);
|
||||
gdev->pending_events &= ~events;
|
||||
return events;
|
||||
}
|
||||
@@ -1445,6 +1581,29 @@ static int vbg_ioctl_change_filter_mask(struct vbg_dev *gdev,
|
||||
false);
|
||||
}
|
||||
|
||||
+static int vbg_ioctl_acquire_guest_capabilities(struct vbg_dev *gdev,
|
||||
+ struct vbg_session *session,
|
||||
+ struct vbg_ioctl_acquire_guest_caps *caps)
|
||||
+{
|
||||
+ u32 flags, or_mask, not_mask;
|
||||
+
|
||||
+ if (vbg_ioctl_chk(&caps->hdr, sizeof(caps->u.in), 0))
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ flags = caps->u.in.flags;
|
||||
+ or_mask = caps->u.in.or_mask;
|
||||
+ not_mask = caps->u.in.not_mask;
|
||||
+
|
||||
+ if (flags & ~VBGL_IOC_AGC_FLAGS_VALID_MASK)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ if ((or_mask | not_mask) & ~VMMDEV_GUEST_CAPABILITIES_MASK)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ return vbg_acquire_session_capabilities(gdev, session, or_mask,
|
||||
+ not_mask, flags, false);
|
||||
+}
|
||||
+
|
||||
static int vbg_ioctl_change_guest_capabilities(struct vbg_dev *gdev,
|
||||
struct vbg_session *session, struct vbg_ioctl_set_guest_caps *caps)
|
||||
{
|
||||
@@ -1554,6 +1713,8 @@ int vbg_core_ioctl(struct vbg_session *session, unsigned int req, void *data)
|
||||
return vbg_ioctl_interrupt_all_wait_events(gdev, session, data);
|
||||
case VBG_IOCTL_CHANGE_FILTER_MASK:
|
||||
return vbg_ioctl_change_filter_mask(gdev, session, data);
|
||||
+ case VBG_IOCTL_ACQUIRE_GUEST_CAPABILITIES:
|
||||
+ return vbg_ioctl_acquire_guest_capabilities(gdev, session, data);
|
||||
case VBG_IOCTL_CHANGE_GUEST_CAPABILITIES:
|
||||
return vbg_ioctl_change_guest_capabilities(gdev, session, data);
|
||||
case VBG_IOCTL_CHECK_BALLOON:
|
||||
diff --git a/drivers/virt/vboxguest/vboxguest_core.h b/drivers/virt/vboxguest/vboxguest_core.h
|
||||
index dc745a033164..ab4bf64e2cec 100644
|
||||
--- a/drivers/virt/vboxguest/vboxguest_core.h
|
||||
+++ b/drivers/virt/vboxguest/vboxguest_core.h
|
||||
@@ -117,6 +117,15 @@ struct vbg_dev {
|
||||
*/
|
||||
u32 event_filter_host;
|
||||
|
||||
+ /**
|
||||
+ * Guest capabilities which have been switched to acquire_mode.
|
||||
+ */
|
||||
+ u32 acquire_mode_guest_caps;
|
||||
+ /**
|
||||
+ * Guest capabilities acquired by vbg_acquire_session_capabilities().
|
||||
+ * Only one session can acquire a capability at a time.
|
||||
+ */
|
||||
+ u32 acquired_guest_caps;
|
||||
/**
|
||||
* Usage counters for guest capabilities requested through
|
||||
* vbg_set_session_capabilities(). Indexed by capability bit
|
||||
@@ -164,6 +173,11 @@ struct vbg_session {
|
||||
* host filter. Protected by vbg_gdev.session_mutex.
|
||||
*/
|
||||
u32 event_filter;
|
||||
+ /**
|
||||
+ * Guest capabilities acquired by vbg_acquire_session_capabilities().
|
||||
+ * Only one session can acquire a capability at a time.
|
||||
+ */
|
||||
+ u32 acquired_guest_caps;
|
||||
/**
|
||||
* Guest capabilities set through vbg_set_session_capabilities().
|
||||
* A capability claimed by any guest session will be reported to the
|
||||
diff --git a/include/uapi/linux/vboxguest.h b/include/uapi/linux/vboxguest.h
|
||||
index f79d7abe27db..15125f6ec60d 100644
|
||||
--- a/include/uapi/linux/vboxguest.h
|
||||
+++ b/include/uapi/linux/vboxguest.h
|
||||
@@ -257,6 +257,30 @@ VMMDEV_ASSERT_SIZE(vbg_ioctl_change_filter, 24 + 8);
|
||||
_IOWR('V', 12, struct vbg_ioctl_change_filter)
|
||||
|
||||
|
||||
+/** VBG_IOCTL_ACQUIRE_GUEST_CAPABILITIES data structure. */
|
||||
+struct vbg_ioctl_acquire_guest_caps {
|
||||
+ /** The header. */
|
||||
+ struct vbg_ioctl_hdr hdr;
|
||||
+ union {
|
||||
+ struct {
|
||||
+ /** Flags (VBGL_IOC_AGC_FLAGS_XXX). */
|
||||
+ __u32 flags;
|
||||
+ /** Capabilities to set (VMMDEV_GUEST_SUPPORTS_XXX). */
|
||||
+ __u32 or_mask;
|
||||
+ /** Capabilities to drop (VMMDEV_GUEST_SUPPORTS_XXX). */
|
||||
+ __u32 not_mask;
|
||||
+ } in;
|
||||
+ } u;
|
||||
+};
|
||||
+VMMDEV_ASSERT_SIZE(vbg_ioctl_acquire_guest_caps, 24 + 12);
|
||||
+
|
||||
+#define VBGL_IOC_AGC_FLAGS_CONFIG_ACQUIRE_MODE 0x00000001
|
||||
+#define VBGL_IOC_AGC_FLAGS_VALID_MASK 0x00000001
|
||||
+
|
||||
+#define VBG_IOCTL_ACQUIRE_GUEST_CAPABILITIES \
|
||||
+ _IOWR('V', 13, struct vbg_ioctl_acquire_guest_caps)
|
||||
+
|
||||
+
|
||||
/** VBG_IOCTL_CHANGE_GUEST_CAPABILITIES data structure. */
|
||||
struct vbg_ioctl_set_guest_caps {
|
||||
/** The header. */
|
||||
--
|
||||
2.26.2
|
||||
|
130
0001-virt-vbox-Add-vbg_set_host_capabilities-helper-funct.patch
Normal file
130
0001-virt-vbox-Add-vbg_set_host_capabilities-helper-funct.patch
Normal file
@ -0,0 +1,130 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 19 May 2020 15:30:29 +0200
|
||||
Subject: [PATCH] virt: vbox: Add vbg_set_host_capabilities() helper function
|
||||
|
||||
Add vbg_set_host_capabilities() helper function, this is a preparation
|
||||
patch for adding support for the VBGL_IOCTL_GUEST_CAPS_ACQUIRE ioctl.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Upstream Status: https://lore.kernel.org/lkml/20200520195440.38759-1-hdegoede@redhat.com/
|
||||
---
|
||||
drivers/virt/vboxguest/vboxguest_core.c | 79 ++++++++++++++-----------
|
||||
1 file changed, 46 insertions(+), 33 deletions(-)
|
||||
|
||||
diff --git a/drivers/virt/vboxguest/vboxguest_core.c b/drivers/virt/vboxguest/vboxguest_core.c
|
||||
index aee5eff229f2..15b3cb618c6e 100644
|
||||
--- a/drivers/virt/vboxguest/vboxguest_core.c
|
||||
+++ b/drivers/virt/vboxguest/vboxguest_core.c
|
||||
@@ -661,6 +661,48 @@ static int vbg_reset_host_capabilities(struct vbg_dev *gdev)
|
||||
return vbg_status_code_to_errno(rc);
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * Set guest capabilities on the host.
|
||||
+ * Must be called with gdev->session_mutex hold.
|
||||
+ * Return: 0 or negative errno value.
|
||||
+ * @gdev: The Guest extension device.
|
||||
+ * @session: The session.
|
||||
+ * @session_termination: Set if we're called by the session cleanup code.
|
||||
+ */
|
||||
+static int vbg_set_host_capabilities(struct vbg_dev *gdev,
|
||||
+ struct vbg_session *session,
|
||||
+ bool session_termination)
|
||||
+{
|
||||
+ struct vmmdev_mask *req;
|
||||
+ u32 caps;
|
||||
+ int rc;
|
||||
+
|
||||
+ WARN_ON(!mutex_is_locked(&gdev->session_mutex));
|
||||
+
|
||||
+ caps = gdev->set_guest_caps_tracker.mask;
|
||||
+
|
||||
+ if (gdev->guest_caps_host == caps)
|
||||
+ return 0;
|
||||
+
|
||||
+ /* On termination the requestor is the kernel, as we're cleaning up. */
|
||||
+ req = vbg_req_alloc(sizeof(*req), VMMDEVREQ_SET_GUEST_CAPABILITIES,
|
||||
+ session_termination ? VBG_KERNEL_REQUEST :
|
||||
+ session->requestor);
|
||||
+ if (!req) {
|
||||
+ gdev->guest_caps_host = U32_MAX;
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+
|
||||
+ req->or_mask = caps;
|
||||
+ req->not_mask = ~caps;
|
||||
+ rc = vbg_req_perform(gdev, req);
|
||||
+ vbg_req_free(req, sizeof(*req));
|
||||
+
|
||||
+ gdev->guest_caps_host = (rc >= 0) ? caps : U32_MAX;
|
||||
+
|
||||
+ return vbg_status_code_to_errno(rc);
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* Sets the guest capabilities for a session. Takes the session spinlock.
|
||||
* Return: 0 or negative errno value.
|
||||
@@ -678,23 +720,8 @@ static int vbg_set_session_capabilities(struct vbg_dev *gdev,
|
||||
u32 or_mask, u32 not_mask,
|
||||
bool session_termination)
|
||||
{
|
||||
- struct vmmdev_mask *req;
|
||||
u32 changed, previous;
|
||||
- int rc, ret = 0;
|
||||
-
|
||||
- /*
|
||||
- * Allocate a request buffer before taking the spinlock, when
|
||||
- * the session is being terminated the requestor is the kernel,
|
||||
- * as we're cleaning up.
|
||||
- */
|
||||
- req = vbg_req_alloc(sizeof(*req), VMMDEVREQ_SET_GUEST_CAPABILITIES,
|
||||
- session_termination ? VBG_KERNEL_REQUEST :
|
||||
- session->requestor);
|
||||
- if (!req) {
|
||||
- if (!session_termination)
|
||||
- return -ENOMEM;
|
||||
- /* Ignore allocation failure, we must do session cleanup. */
|
||||
- }
|
||||
+ int ret = 0;
|
||||
|
||||
mutex_lock(&gdev->session_mutex);
|
||||
|
||||
@@ -709,23 +736,10 @@ static int vbg_set_session_capabilities(struct vbg_dev *gdev,
|
||||
goto out;
|
||||
|
||||
vbg_track_bit_usage(&gdev->set_guest_caps_tracker, changed, previous);
|
||||
- or_mask = gdev->set_guest_caps_tracker.mask;
|
||||
-
|
||||
- if (gdev->guest_caps_host == or_mask || !req)
|
||||
- goto out;
|
||||
-
|
||||
- gdev->guest_caps_host = or_mask;
|
||||
- req->or_mask = or_mask;
|
||||
- req->not_mask = ~or_mask;
|
||||
- rc = vbg_req_perform(gdev, req);
|
||||
- if (rc < 0) {
|
||||
- ret = vbg_status_code_to_errno(rc);
|
||||
-
|
||||
- /* Failed, roll back (unless it's session termination time). */
|
||||
- gdev->guest_caps_host = U32_MAX;
|
||||
- if (session_termination)
|
||||
- goto out;
|
||||
|
||||
+ ret = vbg_set_host_capabilities(gdev, session, session_termination);
|
||||
+ /* Roll back on failure, unless it's session termination time. */
|
||||
+ if (ret < 0 && !session_termination) {
|
||||
vbg_track_bit_usage(&gdev->set_guest_caps_tracker, changed,
|
||||
session->set_guest_caps);
|
||||
session->set_guest_caps = previous;
|
||||
@@ -733,7 +747,6 @@ static int vbg_set_session_capabilities(struct vbg_dev *gdev,
|
||||
|
||||
out:
|
||||
mutex_unlock(&gdev->session_mutex);
|
||||
- vbg_req_free(req, sizeof(*req));
|
||||
|
||||
return ret;
|
||||
}
|
||||
--
|
||||
2.26.2
|
||||
|
123
0001-virt-vbox-Fix-VBGL_IOCTL_VMMDEV_REQUEST_BIG-and-_LOG.patch
Normal file
123
0001-virt-vbox-Fix-VBGL_IOCTL_VMMDEV_REQUEST_BIG-and-_LOG.patch
Normal file
@ -0,0 +1,123 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 19 May 2020 12:21:30 +0200
|
||||
Subject: [PATCH] virt: vbox: Fix VBGL_IOCTL_VMMDEV_REQUEST_BIG and _LOG req
|
||||
numbers to match upstream
|
||||
|
||||
Until this commit the mainline kernel version (this version) of the
|
||||
vboxguest module contained a bug where it defined
|
||||
VBGL_IOCTL_VMMDEV_REQUEST_BIG and VBGL_IOCTL_LOG using
|
||||
_IOC(_IOC_READ | _IOC_WRITE, 'V', ...) instead of
|
||||
_IO(V, ...) as the out of tree VirtualBox upstream version does.
|
||||
|
||||
Since the VirtualBox userspace bits are always built against VirtualBox
|
||||
upstream's headers, this means that so far the mainline kernel version
|
||||
of the vboxguest module has been failing these 2 ioctls with -ENOTTY.
|
||||
I guess that VBGL_IOCTL_VMMDEV_REQUEST_BIG is never used causing us to
|
||||
not hit that one and sofar the vboxguest driver has failed to actually
|
||||
log any log messages passed it through VBGL_IOCTL_LOG.
|
||||
|
||||
This commit changes the VBGL_IOCTL_VMMDEV_REQUEST_BIG and VBGL_IOCTL_LOG
|
||||
defines to match the out of tree VirtualBox upstream vboxguest version,
|
||||
while keeping compatibility with the old wrong request defines so as
|
||||
to not break the kernel ABI in case someone has been using the old
|
||||
request defines.
|
||||
|
||||
Fixes: f6ddd094f579 ("virt: Add vboxguest driver for Virtual Box Guest integration UAPI")
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Upstream Status: https://lore.kernel.org/lkml/20200520195440.38759-1-hdegoede@redhat.com/
|
||||
---
|
||||
drivers/virt/vboxguest/vboxguest_core.c | 4 +++-
|
||||
drivers/virt/vboxguest/vboxguest_core.h | 15 +++++++++++++++
|
||||
drivers/virt/vboxguest/vboxguest_linux.c | 3 ++-
|
||||
include/uapi/linux/vboxguest.h | 4 ++--
|
||||
4 files changed, 22 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/virt/vboxguest/vboxguest_core.c b/drivers/virt/vboxguest/vboxguest_core.c
|
||||
index b690a8a4bf9e..8fab04e76c14 100644
|
||||
--- a/drivers/virt/vboxguest/vboxguest_core.c
|
||||
+++ b/drivers/virt/vboxguest/vboxguest_core.c
|
||||
@@ -1520,7 +1520,8 @@ int vbg_core_ioctl(struct vbg_session *session, unsigned int req, void *data)
|
||||
|
||||
/* For VMMDEV_REQUEST hdr->type != VBG_IOCTL_HDR_TYPE_DEFAULT */
|
||||
if (req_no_size == VBG_IOCTL_VMMDEV_REQUEST(0) ||
|
||||
- req == VBG_IOCTL_VMMDEV_REQUEST_BIG)
|
||||
+ req == VBG_IOCTL_VMMDEV_REQUEST_BIG ||
|
||||
+ req == VBG_IOCTL_VMMDEV_REQUEST_BIG_ALT)
|
||||
return vbg_ioctl_vmmrequest(gdev, session, data);
|
||||
|
||||
if (hdr->type != VBG_IOCTL_HDR_TYPE_DEFAULT)
|
||||
@@ -1558,6 +1559,7 @@ int vbg_core_ioctl(struct vbg_session *session, unsigned int req, void *data)
|
||||
case VBG_IOCTL_HGCM_CALL(0):
|
||||
return vbg_ioctl_hgcm_call(gdev, session, f32bit, data);
|
||||
case VBG_IOCTL_LOG(0):
|
||||
+ case VBG_IOCTL_LOG_ALT(0):
|
||||
return vbg_ioctl_log(data);
|
||||
}
|
||||
|
||||
diff --git a/drivers/virt/vboxguest/vboxguest_core.h b/drivers/virt/vboxguest/vboxguest_core.h
|
||||
index 4188c12b839f..77c3a9c8255d 100644
|
||||
--- a/drivers/virt/vboxguest/vboxguest_core.h
|
||||
+++ b/drivers/virt/vboxguest/vboxguest_core.h
|
||||
@@ -15,6 +15,21 @@
|
||||
#include <linux/vboxguest.h>
|
||||
#include "vmmdev.h"
|
||||
|
||||
+/*
|
||||
+ * The mainline kernel version (this version) of the vboxguest module
|
||||
+ * contained a bug where it defined VBGL_IOCTL_VMMDEV_REQUEST_BIG and
|
||||
+ * VBGL_IOCTL_LOG using _IOC(_IOC_READ | _IOC_WRITE, 'V', ...) instead
|
||||
+ * of _IO(V, ...) as the out of tree VirtualBox upstream version does.
|
||||
+ *
|
||||
+ * These _ALT definitions keep compatibility with the wrong defines the
|
||||
+ * mainline kernel version used for a while.
|
||||
+ * Note the VirtualBox userspace bits have always been built against
|
||||
+ * VirtualBox upstream's headers, so this is likely not necessary. But
|
||||
+ * we must never break our ABI so we keep these around to be 100% sure.
|
||||
+ */
|
||||
+#define VBG_IOCTL_VMMDEV_REQUEST_BIG_ALT _IOC(_IOC_READ | _IOC_WRITE, 'V', 3, 0)
|
||||
+#define VBG_IOCTL_LOG_ALT(s) _IOC(_IOC_READ | _IOC_WRITE, 'V', 9, s)
|
||||
+
|
||||
struct vbg_session;
|
||||
|
||||
/** VBox guest memory balloon. */
|
||||
diff --git a/drivers/virt/vboxguest/vboxguest_linux.c b/drivers/virt/vboxguest/vboxguest_linux.c
|
||||
index 6e8c0f1c1056..32c2c52f7e84 100644
|
||||
--- a/drivers/virt/vboxguest/vboxguest_linux.c
|
||||
+++ b/drivers/virt/vboxguest/vboxguest_linux.c
|
||||
@@ -131,7 +131,8 @@ static long vbg_misc_device_ioctl(struct file *filp, unsigned int req,
|
||||
* the need for a bounce-buffer and another copy later on.
|
||||
*/
|
||||
is_vmmdev_req = (req & ~IOCSIZE_MASK) == VBG_IOCTL_VMMDEV_REQUEST(0) ||
|
||||
- req == VBG_IOCTL_VMMDEV_REQUEST_BIG;
|
||||
+ req == VBG_IOCTL_VMMDEV_REQUEST_BIG ||
|
||||
+ req == VBG_IOCTL_VMMDEV_REQUEST_BIG_ALT;
|
||||
|
||||
if (is_vmmdev_req)
|
||||
buf = vbg_req_alloc(size, VBG_IOCTL_HDR_TYPE_DEFAULT,
|
||||
diff --git a/include/uapi/linux/vboxguest.h b/include/uapi/linux/vboxguest.h
|
||||
index 9cec58a6a5ea..f79d7abe27db 100644
|
||||
--- a/include/uapi/linux/vboxguest.h
|
||||
+++ b/include/uapi/linux/vboxguest.h
|
||||
@@ -103,7 +103,7 @@ VMMDEV_ASSERT_SIZE(vbg_ioctl_driver_version_info, 24 + 20);
|
||||
|
||||
|
||||
/* IOCTL to perform a VMM Device request larger then 1KB. */
|
||||
-#define VBG_IOCTL_VMMDEV_REQUEST_BIG _IOC(_IOC_READ | _IOC_WRITE, 'V', 3, 0)
|
||||
+#define VBG_IOCTL_VMMDEV_REQUEST_BIG _IO('V', 3)
|
||||
|
||||
|
||||
/** VBG_IOCTL_HGCM_CONNECT data structure. */
|
||||
@@ -198,7 +198,7 @@ struct vbg_ioctl_log {
|
||||
} u;
|
||||
};
|
||||
|
||||
-#define VBG_IOCTL_LOG(s) _IOC(_IOC_READ | _IOC_WRITE, 'V', 9, s)
|
||||
+#define VBG_IOCTL_LOG(s) _IO('V', 9)
|
||||
|
||||
|
||||
/** VBG_IOCTL_WAIT_FOR_EVENTS data structure. */
|
||||
--
|
||||
2.26.2
|
||||
|
47
0001-virt-vbox-Fix-guest-capabilities-mask-check.patch
Normal file
47
0001-virt-vbox-Fix-guest-capabilities-mask-check.patch
Normal file
@ -0,0 +1,47 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 19 May 2020 13:23:06 +0200
|
||||
Subject: [PATCH] virt: vbox: Fix guest capabilities mask check
|
||||
|
||||
Check the passed in capabilities against VMMDEV_GUEST_CAPABILITIES_MASK
|
||||
instead of against VMMDEV_EVENT_VALID_EVENT_MASK.
|
||||
This tightens the allowed mask from 0x7ff to 0x7.
|
||||
|
||||
Fixes: 0ba002bc4393 ("virt: Add vboxguest driver for Virtual Box Guest integration")
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Upstream Status: https://lore.kernel.org/lkml/20200520195440.38759-1-hdegoede@redhat.com/
|
||||
---
|
||||
drivers/virt/vboxguest/vboxguest_core.c | 2 +-
|
||||
drivers/virt/vboxguest/vmmdev.h | 2 ++
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/virt/vboxguest/vboxguest_core.c b/drivers/virt/vboxguest/vboxguest_core.c
|
||||
index 8fab04e76c14..18ebd7a6af98 100644
|
||||
--- a/drivers/virt/vboxguest/vboxguest_core.c
|
||||
+++ b/drivers/virt/vboxguest/vboxguest_core.c
|
||||
@@ -1444,7 +1444,7 @@ static int vbg_ioctl_change_guest_capabilities(struct vbg_dev *gdev,
|
||||
or_mask = caps->u.in.or_mask;
|
||||
not_mask = caps->u.in.not_mask;
|
||||
|
||||
- if ((or_mask | not_mask) & ~VMMDEV_EVENT_VALID_EVENT_MASK)
|
||||
+ if ((or_mask | not_mask) & ~VMMDEV_GUEST_CAPABILITIES_MASK)
|
||||
return -EINVAL;
|
||||
|
||||
ret = vbg_set_session_capabilities(gdev, session, or_mask, not_mask,
|
||||
diff --git a/drivers/virt/vboxguest/vmmdev.h b/drivers/virt/vboxguest/vmmdev.h
|
||||
index 6337b8d75d96..21f408120e3f 100644
|
||||
--- a/drivers/virt/vboxguest/vmmdev.h
|
||||
+++ b/drivers/virt/vboxguest/vmmdev.h
|
||||
@@ -206,6 +206,8 @@ VMMDEV_ASSERT_SIZE(vmmdev_mask, 24 + 8);
|
||||
* not.
|
||||
*/
|
||||
#define VMMDEV_GUEST_SUPPORTS_GRAPHICS BIT(2)
|
||||
+/* The mask of valid capabilities, for sanity checking. */
|
||||
+#define VMMDEV_GUEST_CAPABILITIES_MASK 0x00000007U
|
||||
|
||||
/** struct vmmdev_hypervisorinfo - Hypervisor info structure. */
|
||||
struct vmmdev_hypervisorinfo {
|
||||
--
|
||||
2.26.2
|
||||
|
30
0001-virt-vbox-Log-unknown-ioctl-requests-as-error.patch
Normal file
30
0001-virt-vbox-Log-unknown-ioctl-requests-as-error.patch
Normal file
@ -0,0 +1,30 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 19 May 2020 11:24:43 +0200
|
||||
Subject: [PATCH] virt: vbox: Log unknown ioctl requests as error
|
||||
|
||||
Every now and then upstream adds new ioctls without notifying us,
|
||||
log unknown ioctl requests as an error to catch these.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Upstream Status: https://lore.kernel.org/lkml/20200520195440.38759-1-hdegoede@redhat.com/
|
||||
---
|
||||
drivers/virt/vboxguest/vboxguest_core.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/virt/vboxguest/vboxguest_core.c b/drivers/virt/vboxguest/vboxguest_core.c
|
||||
index ffd76b949276..e0e343d0ba93 100644
|
||||
--- a/drivers/virt/vboxguest/vboxguest_core.c
|
||||
+++ b/drivers/virt/vboxguest/vboxguest_core.c
|
||||
@@ -1739,7 +1739,7 @@ int vbg_core_ioctl(struct vbg_session *session, unsigned int req, void *data)
|
||||
return vbg_ioctl_log(data);
|
||||
}
|
||||
|
||||
- vbg_debug("VGDrvCommonIoCtl: Unknown req %#08x\n", req);
|
||||
+ vbg_err("Userspace made an unknown ioctl req %#08x\n", req);
|
||||
return -ENOTTY;
|
||||
}
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
103
0001-virt-vbox-Rename-guest_caps-struct-members-to-set_gu.patch
Normal file
103
0001-virt-vbox-Rename-guest_caps-struct-members-to-set_gu.patch
Normal file
@ -0,0 +1,103 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 19 May 2020 14:33:13 +0200
|
||||
Subject: [PATCH] virt: vbox: Rename guest_caps struct members to
|
||||
set_guest_caps
|
||||
|
||||
Rename guest_caps[_tracker] struct members to set_guest_caps[_tracker]
|
||||
this is a preparation patch for adding support for the
|
||||
VBGL_IOCTL_GUEST_CAPS_ACQUIRE ioctl.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Upstream Status: https://lore.kernel.org/lkml/20200520195440.38759-1-hdegoede@redhat.com/
|
||||
---
|
||||
drivers/virt/vboxguest/vboxguest_core.c | 20 ++++++++++----------
|
||||
drivers/virt/vboxguest/vboxguest_core.h | 9 +++++----
|
||||
2 files changed, 15 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/drivers/virt/vboxguest/vboxguest_core.c b/drivers/virt/vboxguest/vboxguest_core.c
|
||||
index 18ebd7a6af98..aee5eff229f2 100644
|
||||
--- a/drivers/virt/vboxguest/vboxguest_core.c
|
||||
+++ b/drivers/virt/vboxguest/vboxguest_core.c
|
||||
@@ -699,17 +699,17 @@ static int vbg_set_session_capabilities(struct vbg_dev *gdev,
|
||||
mutex_lock(&gdev->session_mutex);
|
||||
|
||||
/* Apply the changes to the session mask. */
|
||||
- previous = session->guest_caps;
|
||||
- session->guest_caps |= or_mask;
|
||||
- session->guest_caps &= ~not_mask;
|
||||
+ previous = session->set_guest_caps;
|
||||
+ session->set_guest_caps |= or_mask;
|
||||
+ session->set_guest_caps &= ~not_mask;
|
||||
|
||||
/* If anything actually changed, update the global usage counters. */
|
||||
- changed = previous ^ session->guest_caps;
|
||||
+ changed = previous ^ session->set_guest_caps;
|
||||
if (!changed)
|
||||
goto out;
|
||||
|
||||
- vbg_track_bit_usage(&gdev->guest_caps_tracker, changed, previous);
|
||||
- or_mask = gdev->guest_caps_tracker.mask;
|
||||
+ vbg_track_bit_usage(&gdev->set_guest_caps_tracker, changed, previous);
|
||||
+ or_mask = gdev->set_guest_caps_tracker.mask;
|
||||
|
||||
if (gdev->guest_caps_host == or_mask || !req)
|
||||
goto out;
|
||||
@@ -726,9 +726,9 @@ static int vbg_set_session_capabilities(struct vbg_dev *gdev,
|
||||
if (session_termination)
|
||||
goto out;
|
||||
|
||||
- vbg_track_bit_usage(&gdev->guest_caps_tracker, changed,
|
||||
- session->guest_caps);
|
||||
- session->guest_caps = previous;
|
||||
+ vbg_track_bit_usage(&gdev->set_guest_caps_tracker, changed,
|
||||
+ session->set_guest_caps);
|
||||
+ session->set_guest_caps = previous;
|
||||
}
|
||||
|
||||
out:
|
||||
@@ -1452,7 +1452,7 @@ static int vbg_ioctl_change_guest_capabilities(struct vbg_dev *gdev,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
- caps->u.out.session_caps = session->guest_caps;
|
||||
+ caps->u.out.session_caps = session->set_guest_caps;
|
||||
caps->u.out.global_caps = gdev->guest_caps_host;
|
||||
|
||||
return 0;
|
||||
diff --git a/drivers/virt/vboxguest/vboxguest_core.h b/drivers/virt/vboxguest/vboxguest_core.h
|
||||
index 77c3a9c8255d..dc745a033164 100644
|
||||
--- a/drivers/virt/vboxguest/vboxguest_core.h
|
||||
+++ b/drivers/virt/vboxguest/vboxguest_core.h
|
||||
@@ -118,11 +118,12 @@ struct vbg_dev {
|
||||
u32 event_filter_host;
|
||||
|
||||
/**
|
||||
- * Usage counters for guest capabilities. Indexed by capability bit
|
||||
+ * Usage counters for guest capabilities requested through
|
||||
+ * vbg_set_session_capabilities(). Indexed by capability bit
|
||||
* number, one count per session using a capability.
|
||||
* Protected by session_mutex.
|
||||
*/
|
||||
- struct vbg_bit_usage_tracker guest_caps_tracker;
|
||||
+ struct vbg_bit_usage_tracker set_guest_caps_tracker;
|
||||
/**
|
||||
* The guest capabilities last reported to the host (or UINT32_MAX).
|
||||
* Protected by session_mutex.
|
||||
@@ -164,11 +165,11 @@ struct vbg_session {
|
||||
*/
|
||||
u32 event_filter;
|
||||
/**
|
||||
- * Guest capabilities for this session.
|
||||
+ * Guest capabilities set through vbg_set_session_capabilities().
|
||||
* A capability claimed by any guest session will be reported to the
|
||||
* host. Protected by vbg_gdev.session_mutex.
|
||||
*/
|
||||
- u32 guest_caps;
|
||||
+ u32 set_guest_caps;
|
||||
/** VMMDEV_REQUESTOR_* flags */
|
||||
u32 requestor;
|
||||
/** Set on CANCEL_ALL_WAITEVENTS, protected by vbg_devevent_spinlock. */
|
||||
--
|
||||
2.26.2
|
||||
|
28
Patchlist
28
Patchlist
@ -75,3 +75,31 @@
|
||||
0001-perf-cs-etm-Move-defined-of-traceid_list.patch
|
||||
0001-pwm-lpss-Fix-get_state-runtime-pm-reference-handling.patch
|
||||
0001-x86-Fix-compile-issues-with-rh_check_supported.patch
|
||||
0001-disp-gv100-expose-capabilities-class.patch
|
||||
0001-core-memory-remove-redundant-assignments-to-variable.patch
|
||||
0001-acr-Use-kmemdup-instead-of-kmalloc-and-memcpy.patch
|
||||
0001-drm-Use-generic-helper-to-check-_PR3-presence.patch
|
||||
0001-mmu-Remove-unneeded-semicolon.patch
|
||||
0001-device-rework-mmio-mapping-code-to-get-rid-of-second.patch
|
||||
0001-device-detect-if-changing-endianness-failed.patch
|
||||
0001-device-detect-vGPUs.patch
|
||||
0001-device-use-regular-PRI-accessors-in-chipset-detectio.patch
|
||||
0001-kms-Fix-regression-by-audio-component-transition.patch
|
||||
0001-disp-nv50-increase-timeout-on-pio-channel-free-polli.patch
|
||||
0001-disp-hda-gt215-pass-head-to-nvkm_ior.hda.eld.patch
|
||||
0001-disp-hda-gf119-add-HAL-for-programming-device-entry-.patch
|
||||
0001-disp-hda-gf119-select-HDA-device-entry-based-on-boun.patch
|
||||
0001-disp-hda-gv100-NV_PDISP_SF_AUDIO_CNTRL0-register-mov.patch
|
||||
0001-kms-nv50-Initialize-core-channel-in-nouveau_display_.patch
|
||||
0001-kms-nv50-Probe-SOR-and-PIOR-caps-for-DP-interlacing-.patch
|
||||
0001-kms-gv100-Add-support-for-interlaced-modes.patch
|
||||
0001-kms-nv50-Move-8BPC-limit-for-MST-into-nv50_mstc_get_.patch
|
||||
0001-kms-nv50-Share-DP-SST-mode_valid-handling-with-MST.patch
|
||||
0001-virt-vbox-Fix-VBGL_IOCTL_VMMDEV_REQUEST_BIG-and-_LOG.patch
|
||||
0001-virt-vbox-Fix-guest-capabilities-mask-check.patch
|
||||
0001-virt-vbox-Rename-guest_caps-struct-members-to-set_gu.patch
|
||||
0001-virt-vbox-Add-vbg_set_host_capabilities-helper-funct.patch
|
||||
0001-virt-vbox-Add-support-for-the-new-VBG_IOCTL_ACQUIRE_.patch
|
||||
0001-virt-vbox-Add-a-few-new-vmmdev-request-types-to-the-.patch
|
||||
0001-virt-vbox-Log-unknown-ioctl-requests-as-error.patch
|
||||
0001-platform-x86-sony-laptop-SNC-calls-should-handle-BUF.patch
|
||||
|
@ -6194,7 +6194,7 @@ CONFIG_SND_SOC_IMX_SGTL5000=m
|
||||
CONFIG_SND_SOC_IMX_SPDIF=m
|
||||
# CONFIG_SND_SOC_INNO_RK3036 is not set
|
||||
# CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH is not set
|
||||
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set
|
||||
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
|
||||
# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set
|
||||
CONFIG_SND_SOC=m
|
||||
CONFIG_SND_SOC_MAX9759=m
|
||||
@ -6263,6 +6263,7 @@ CONFIG_SND_SOC_SOF_ACPI=m
|
||||
# CONFIG_SND_SOC_SOF_DEBUG is not set
|
||||
# CONFIG_SND_SOC_SOF_DEBUG_PROBES is not set
|
||||
# CONFIG_SND_SOC_SOF_HDA_ALWAYS_ENABLE_DMI_L1 is not set
|
||||
CONFIG_SND_SOC_SOF_HDA_PROBES=y
|
||||
CONFIG_SND_SOC_SOF_IMX8_SUPPORT=y
|
||||
CONFIG_SND_SOC_SOF_IMX_TOPLEVEL=y
|
||||
# CONFIG_SND_SOC_SOF_NOCODEC is not set
|
||||
|
@ -2686,7 +2686,7 @@ CONFIG_LSM="yama,integrity,selinux"
|
||||
# CONFIG_LTE_GDM724X is not set
|
||||
# CONFIG_LTR501 is not set
|
||||
# CONFIG_LV0104CS is not set
|
||||
# CONFIG_LWTUNNEL_BPF is not set
|
||||
CONFIG_LWTUNNEL_BPF=y
|
||||
CONFIG_LWTUNNEL=y
|
||||
CONFIG_LXT_PHY=m
|
||||
# CONFIG_M62332 is not set
|
||||
@ -5020,7 +5020,7 @@ CONFIG_SND_SOC_INTEL_KBL_RT5660_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m
|
||||
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set
|
||||
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y
|
||||
# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set
|
||||
# CONFIG_SND_SOC is not set
|
||||
@ -5049,6 +5049,7 @@ CONFIG_SND_SOC_MAX98373=m
|
||||
# CONFIG_SND_SOC_PCM3060_SPI is not set
|
||||
# CONFIG_SND_SOC_PCM3168A_I2C is not set
|
||||
# CONFIG_SND_SOC_PCM3168A_SPI is not set
|
||||
# CONFIG_SND_SOC_PCM512x_I2C is not set
|
||||
# CONFIG_SND_SOC_RK3328 is not set
|
||||
# CONFIG_SND_SOC_RT5616 is not set
|
||||
# CONFIG_SND_SOC_RT5631 is not set
|
||||
@ -5056,8 +5057,9 @@ CONFIG_SND_SOC_MAX98373=m
|
||||
# CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set
|
||||
CONFIG_SND_SOC_SOF_ACPI=m
|
||||
# CONFIG_SND_SOC_SOF_DEBUG is not set
|
||||
# CONFIG_SND_SOC_SOF_DEBUG_PROBES is not set
|
||||
CONFIG_SND_SOC_SOF_DEBUG_PROBES=y
|
||||
# CONFIG_SND_SOC_SOF_HDA_ALWAYS_ENABLE_DMI_L1 is not set
|
||||
CONFIG_SND_SOC_SOF_HDA_PROBES=y
|
||||
# CONFIG_SND_SOC_SOF_NOCODEC_SUPPORT is not set
|
||||
# CONFIG_SND_SOC_SOF_OF is not set
|
||||
CONFIG_SND_SOC_SOF_PCI=m
|
||||
|
@ -6174,7 +6174,7 @@ CONFIG_SND_SOC_IMX_SGTL5000=m
|
||||
CONFIG_SND_SOC_IMX_SPDIF=m
|
||||
# CONFIG_SND_SOC_INNO_RK3036 is not set
|
||||
# CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH is not set
|
||||
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set
|
||||
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
|
||||
# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set
|
||||
CONFIG_SND_SOC=m
|
||||
CONFIG_SND_SOC_MAX9759=m
|
||||
|
@ -2669,7 +2669,7 @@ CONFIG_LSM="yama,integrity,selinux"
|
||||
# CONFIG_LTE_GDM724X is not set
|
||||
# CONFIG_LTR501 is not set
|
||||
# CONFIG_LV0104CS is not set
|
||||
# CONFIG_LWTUNNEL_BPF is not set
|
||||
CONFIG_LWTUNNEL_BPF=y
|
||||
CONFIG_LWTUNNEL=y
|
||||
CONFIG_LXT_PHY=m
|
||||
# CONFIG_M62332 is not set
|
||||
@ -5001,7 +5001,7 @@ CONFIG_SND_SOC_INTEL_KBL_RT5660_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m
|
||||
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set
|
||||
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y
|
||||
# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set
|
||||
# CONFIG_SND_SOC is not set
|
||||
@ -5030,6 +5030,7 @@ CONFIG_SND_SOC_MAX98373=m
|
||||
# CONFIG_SND_SOC_PCM3060_SPI is not set
|
||||
# CONFIG_SND_SOC_PCM3168A_I2C is not set
|
||||
# CONFIG_SND_SOC_PCM3168A_SPI is not set
|
||||
# CONFIG_SND_SOC_PCM512x_I2C is not set
|
||||
# CONFIG_SND_SOC_RK3328 is not set
|
||||
# CONFIG_SND_SOC_RT5616 is not set
|
||||
# CONFIG_SND_SOC_RT5631 is not set
|
||||
|
@ -6352,7 +6352,7 @@ CONFIG_SND_SOC_IMX_SPDIF=m
|
||||
CONFIG_SND_SOC_IMX_SSI=m
|
||||
# CONFIG_SND_SOC_INNO_RK3036 is not set
|
||||
# CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH is not set
|
||||
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set
|
||||
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
|
||||
# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set
|
||||
CONFIG_SND_SOC_LPASS_CPU=m
|
||||
CONFIG_SND_SOC_LPASS_PLATFORM=m
|
||||
@ -6431,6 +6431,7 @@ CONFIG_SND_SOC_SOF_ACPI=m
|
||||
# CONFIG_SND_SOC_SOF_DEBUG is not set
|
||||
# CONFIG_SND_SOC_SOF_DEBUG_PROBES is not set
|
||||
# CONFIG_SND_SOC_SOF_HDA_ALWAYS_ENABLE_DMI_L1 is not set
|
||||
CONFIG_SND_SOC_SOF_HDA_PROBES=y
|
||||
# CONFIG_SND_SOC_SOF_NOCODEC is not set
|
||||
# CONFIG_SND_SOC_SOF_NOCODEC_SUPPORT is not set
|
||||
# CONFIG_SND_SOC_SOF_OF is not set
|
||||
|
@ -6333,7 +6333,7 @@ CONFIG_SND_SOC_IMX_SPDIF=m
|
||||
CONFIG_SND_SOC_IMX_SSI=m
|
||||
# CONFIG_SND_SOC_INNO_RK3036 is not set
|
||||
# CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH is not set
|
||||
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set
|
||||
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
|
||||
# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set
|
||||
CONFIG_SND_SOC_LPASS_CPU=m
|
||||
CONFIG_SND_SOC_LPASS_PLATFORM=m
|
||||
|
@ -6148,7 +6148,7 @@ CONFIG_SND_SOC_IMX_SGTL5000=m
|
||||
CONFIG_SND_SOC_IMX_SPDIF=m
|
||||
# CONFIG_SND_SOC_INNO_RK3036 is not set
|
||||
# CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH is not set
|
||||
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set
|
||||
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
|
||||
# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set
|
||||
CONFIG_SND_SOC=m
|
||||
CONFIG_SND_SOC_MAX9759=m
|
||||
@ -6221,6 +6221,7 @@ CONFIG_SND_SOC_SOF_ACPI=m
|
||||
# CONFIG_SND_SOC_SOF_DEBUG is not set
|
||||
# CONFIG_SND_SOC_SOF_DEBUG_PROBES is not set
|
||||
# CONFIG_SND_SOC_SOF_HDA_ALWAYS_ENABLE_DMI_L1 is not set
|
||||
CONFIG_SND_SOC_SOF_HDA_PROBES=y
|
||||
# CONFIG_SND_SOC_SOF_NOCODEC is not set
|
||||
# CONFIG_SND_SOC_SOF_NOCODEC_SUPPORT is not set
|
||||
# CONFIG_SND_SOC_SOF_OF is not set
|
||||
|
@ -6129,7 +6129,7 @@ CONFIG_SND_SOC_IMX_SGTL5000=m
|
||||
CONFIG_SND_SOC_IMX_SPDIF=m
|
||||
# CONFIG_SND_SOC_INNO_RK3036 is not set
|
||||
# CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH is not set
|
||||
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set
|
||||
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
|
||||
# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set
|
||||
CONFIG_SND_SOC=m
|
||||
CONFIG_SND_SOC_MAX9759=m
|
||||
|
@ -5692,6 +5692,7 @@ CONFIG_SND_SOC_SOF_GEMINILAKE_SUPPORT=y
|
||||
CONFIG_SND_SOC_SOF_HDA_AUDIO_CODEC=y
|
||||
CONFIG_SND_SOC_SOF_HDA_COMMON_HDMI_CODEC=y
|
||||
CONFIG_SND_SOC_SOF_HDA_LINK=y
|
||||
CONFIG_SND_SOC_SOF_HDA_PROBES=y
|
||||
CONFIG_SND_SOC_SOF_ICELAKE_SUPPORT=y
|
||||
CONFIG_SND_SOC_SOF_INTEL_TOPLEVEL=y
|
||||
CONFIG_SND_SOC_SOF_JASPERLAKE_SUPPORT=y
|
||||
|
@ -5257,7 +5257,7 @@ CONFIG_SND_SOC_HDMI_CODEC=m
|
||||
# CONFIG_SND_SOC_IMX_ES8328 is not set
|
||||
# CONFIG_SND_SOC_INNO_RK3036 is not set
|
||||
# CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH is not set
|
||||
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set
|
||||
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
|
||||
# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set
|
||||
# CONFIG_SND_SOC is not set
|
||||
CONFIG_SND_SOC_MAX9759=m
|
||||
@ -5306,6 +5306,7 @@ CONFIG_SND_SOC_SOF_ACPI=m
|
||||
# CONFIG_SND_SOC_SOF_DEBUG is not set
|
||||
# CONFIG_SND_SOC_SOF_DEBUG_PROBES is not set
|
||||
# CONFIG_SND_SOC_SOF_HDA_ALWAYS_ENABLE_DMI_L1 is not set
|
||||
CONFIG_SND_SOC_SOF_HDA_PROBES=y
|
||||
# CONFIG_SND_SOC_SOF_NOCODEC is not set
|
||||
# CONFIG_SND_SOC_SOF_NOCODEC_SUPPORT is not set
|
||||
# CONFIG_SND_SOC_SOF_OF is not set
|
||||
|
@ -2567,7 +2567,7 @@ CONFIG_LSM="yama,integrity,selinux"
|
||||
# CONFIG_LTE_GDM724X is not set
|
||||
# CONFIG_LTR501 is not set
|
||||
# CONFIG_LV0104CS is not set
|
||||
# CONFIG_LWTUNNEL_BPF is not set
|
||||
CONFIG_LWTUNNEL_BPF=y
|
||||
CONFIG_LWTUNNEL=y
|
||||
CONFIG_LXT_PHY=m
|
||||
# CONFIG_M62332 is not set
|
||||
@ -4865,7 +4865,7 @@ CONFIG_SND_SOC_INTEL_KBL_RT5660_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m
|
||||
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set
|
||||
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y
|
||||
# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set
|
||||
# CONFIG_SND_SOC is not set
|
||||
@ -4894,6 +4894,7 @@ CONFIG_SND_SOC_MAX98373=m
|
||||
# CONFIG_SND_SOC_PCM3060_SPI is not set
|
||||
# CONFIG_SND_SOC_PCM3168A_I2C is not set
|
||||
# CONFIG_SND_SOC_PCM3168A_SPI is not set
|
||||
# CONFIG_SND_SOC_PCM512x_I2C is not set
|
||||
# CONFIG_SND_SOC_RK3328 is not set
|
||||
# CONFIG_SND_SOC_RT5616 is not set
|
||||
# CONFIG_SND_SOC_RT5631 is not set
|
||||
@ -4901,8 +4902,9 @@ CONFIG_SND_SOC_MAX98373=m
|
||||
# CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set
|
||||
CONFIG_SND_SOC_SOF_ACPI=m
|
||||
# CONFIG_SND_SOC_SOF_DEBUG is not set
|
||||
# CONFIG_SND_SOC_SOF_DEBUG_PROBES is not set
|
||||
CONFIG_SND_SOC_SOF_DEBUG_PROBES=y
|
||||
# CONFIG_SND_SOC_SOF_HDA_ALWAYS_ENABLE_DMI_L1 is not set
|
||||
CONFIG_SND_SOC_SOF_HDA_PROBES=y
|
||||
# CONFIG_SND_SOC_SOF_NOCODEC_SUPPORT is not set
|
||||
# CONFIG_SND_SOC_SOF_OF is not set
|
||||
CONFIG_SND_SOC_SOF_PCI=m
|
||||
|
@ -5236,7 +5236,7 @@ CONFIG_SND_SOC_HDMI_CODEC=m
|
||||
# CONFIG_SND_SOC_IMX_ES8328 is not set
|
||||
# CONFIG_SND_SOC_INNO_RK3036 is not set
|
||||
# CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH is not set
|
||||
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set
|
||||
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
|
||||
# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set
|
||||
# CONFIG_SND_SOC is not set
|
||||
CONFIG_SND_SOC_MAX9759=m
|
||||
|
@ -2551,7 +2551,7 @@ CONFIG_LSM="yama,integrity,selinux"
|
||||
# CONFIG_LTE_GDM724X is not set
|
||||
# CONFIG_LTR501 is not set
|
||||
# CONFIG_LV0104CS is not set
|
||||
# CONFIG_LWTUNNEL_BPF is not set
|
||||
CONFIG_LWTUNNEL_BPF=y
|
||||
CONFIG_LWTUNNEL=y
|
||||
CONFIG_LXT_PHY=m
|
||||
# CONFIG_M62332 is not set
|
||||
@ -4848,7 +4848,7 @@ CONFIG_SND_SOC_INTEL_KBL_RT5660_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m
|
||||
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set
|
||||
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y
|
||||
# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set
|
||||
# CONFIG_SND_SOC is not set
|
||||
@ -4877,6 +4877,7 @@ CONFIG_SND_SOC_MAX98373=m
|
||||
# CONFIG_SND_SOC_PCM3060_SPI is not set
|
||||
# CONFIG_SND_SOC_PCM3168A_I2C is not set
|
||||
# CONFIG_SND_SOC_PCM3168A_SPI is not set
|
||||
# CONFIG_SND_SOC_PCM512x_I2C is not set
|
||||
# CONFIG_SND_SOC_RK3328 is not set
|
||||
# CONFIG_SND_SOC_RT5616 is not set
|
||||
# CONFIG_SND_SOC_RT5631 is not set
|
||||
|
@ -5201,7 +5201,7 @@ CONFIG_SND_SOC_HDMI_CODEC=m
|
||||
# CONFIG_SND_SOC_IMX_ES8328 is not set
|
||||
# CONFIG_SND_SOC_INNO_RK3036 is not set
|
||||
# CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH is not set
|
||||
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set
|
||||
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
|
||||
# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set
|
||||
CONFIG_SND_SOC=m
|
||||
CONFIG_SND_SOC_MAX9759=m
|
||||
@ -5250,6 +5250,7 @@ CONFIG_SND_SOC_SOF_ACPI=m
|
||||
# CONFIG_SND_SOC_SOF_DEBUG is not set
|
||||
# CONFIG_SND_SOC_SOF_DEBUG_PROBES is not set
|
||||
# CONFIG_SND_SOC_SOF_HDA_ALWAYS_ENABLE_DMI_L1 is not set
|
||||
CONFIG_SND_SOC_SOF_HDA_PROBES=y
|
||||
# CONFIG_SND_SOC_SOF_NOCODEC is not set
|
||||
# CONFIG_SND_SOC_SOF_NOCODEC_SUPPORT is not set
|
||||
# CONFIG_SND_SOC_SOF_OF is not set
|
||||
|
@ -2535,7 +2535,7 @@ CONFIG_LSM="yama,integrity,selinux"
|
||||
# CONFIG_LTE_GDM724X is not set
|
||||
# CONFIG_LTR501 is not set
|
||||
# CONFIG_LV0104CS is not set
|
||||
# CONFIG_LWTUNNEL_BPF is not set
|
||||
CONFIG_LWTUNNEL_BPF=y
|
||||
CONFIG_LWTUNNEL=y
|
||||
# CONFIG_LXT_PHY is not set
|
||||
# CONFIG_M62332 is not set
|
||||
@ -4807,7 +4807,7 @@ CONFIG_SND_SOC_INTEL_KBL_RT5660_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m
|
||||
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set
|
||||
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y
|
||||
# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set
|
||||
# CONFIG_SND_SOC is not set
|
||||
@ -4836,6 +4836,7 @@ CONFIG_SND_SOC_MAX98373=m
|
||||
# CONFIG_SND_SOC_PCM3060_SPI is not set
|
||||
# CONFIG_SND_SOC_PCM3168A_I2C is not set
|
||||
# CONFIG_SND_SOC_PCM3168A_SPI is not set
|
||||
# CONFIG_SND_SOC_PCM512x_I2C is not set
|
||||
# CONFIG_SND_SOC_RK3328 is not set
|
||||
# CONFIG_SND_SOC_RT5616 is not set
|
||||
# CONFIG_SND_SOC_RT5631 is not set
|
||||
@ -4843,8 +4844,9 @@ CONFIG_SND_SOC_MAX98373=m
|
||||
# CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set
|
||||
CONFIG_SND_SOC_SOF_ACPI=m
|
||||
# CONFIG_SND_SOC_SOF_DEBUG is not set
|
||||
# CONFIG_SND_SOC_SOF_DEBUG_PROBES is not set
|
||||
CONFIG_SND_SOC_SOF_DEBUG_PROBES=y
|
||||
# CONFIG_SND_SOC_SOF_HDA_ALWAYS_ENABLE_DMI_L1 is not set
|
||||
CONFIG_SND_SOC_SOF_HDA_PROBES=y
|
||||
# CONFIG_SND_SOC_SOF_NOCODEC_SUPPORT is not set
|
||||
# CONFIG_SND_SOC_SOF_OF is not set
|
||||
CONFIG_SND_SOC_SOF_PCI=m
|
||||
|
@ -5180,7 +5180,7 @@ CONFIG_SND_SOC_HDMI_CODEC=m
|
||||
# CONFIG_SND_SOC_IMX_ES8328 is not set
|
||||
# CONFIG_SND_SOC_INNO_RK3036 is not set
|
||||
# CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH is not set
|
||||
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set
|
||||
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
|
||||
# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set
|
||||
CONFIG_SND_SOC=m
|
||||
CONFIG_SND_SOC_MAX9759=m
|
||||
|
@ -2519,7 +2519,7 @@ CONFIG_LSM="yama,integrity,selinux"
|
||||
# CONFIG_LTE_GDM724X is not set
|
||||
# CONFIG_LTR501 is not set
|
||||
# CONFIG_LV0104CS is not set
|
||||
# CONFIG_LWTUNNEL_BPF is not set
|
||||
CONFIG_LWTUNNEL_BPF=y
|
||||
CONFIG_LWTUNNEL=y
|
||||
# CONFIG_LXT_PHY is not set
|
||||
# CONFIG_M62332 is not set
|
||||
@ -4790,7 +4790,7 @@ CONFIG_SND_SOC_INTEL_KBL_RT5660_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m
|
||||
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set
|
||||
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y
|
||||
# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set
|
||||
# CONFIG_SND_SOC is not set
|
||||
@ -4819,6 +4819,7 @@ CONFIG_SND_SOC_MAX98373=m
|
||||
# CONFIG_SND_SOC_PCM3060_SPI is not set
|
||||
# CONFIG_SND_SOC_PCM3168A_I2C is not set
|
||||
# CONFIG_SND_SOC_PCM3168A_SPI is not set
|
||||
# CONFIG_SND_SOC_PCM512x_I2C is not set
|
||||
# CONFIG_SND_SOC_RK3328 is not set
|
||||
# CONFIG_SND_SOC_RT5616 is not set
|
||||
# CONFIG_SND_SOC_RT5631 is not set
|
||||
|
@ -2539,7 +2539,7 @@ CONFIG_LSM="yama,integrity,selinux"
|
||||
# CONFIG_LTE_GDM724X is not set
|
||||
# CONFIG_LTR501 is not set
|
||||
# CONFIG_LV0104CS is not set
|
||||
# CONFIG_LWTUNNEL_BPF is not set
|
||||
CONFIG_LWTUNNEL_BPF=y
|
||||
CONFIG_LWTUNNEL=y
|
||||
# CONFIG_LXT_PHY is not set
|
||||
# CONFIG_M62332 is not set
|
||||
@ -4819,7 +4819,7 @@ CONFIG_SND_SOC_INTEL_KBL_RT5660_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m
|
||||
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set
|
||||
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y
|
||||
# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set
|
||||
# CONFIG_SND_SOC is not set
|
||||
@ -4848,6 +4848,7 @@ CONFIG_SND_SOC_MAX98373=m
|
||||
# CONFIG_SND_SOC_PCM3060_SPI is not set
|
||||
# CONFIG_SND_SOC_PCM3168A_I2C is not set
|
||||
# CONFIG_SND_SOC_PCM3168A_SPI is not set
|
||||
# CONFIG_SND_SOC_PCM512x_I2C is not set
|
||||
# CONFIG_SND_SOC_RK3328 is not set
|
||||
# CONFIG_SND_SOC_RT5616 is not set
|
||||
# CONFIG_SND_SOC_RT5631 is not set
|
||||
|
@ -5740,6 +5740,7 @@ CONFIG_SND_SOC_SOF_GEMINILAKE_SUPPORT=y
|
||||
CONFIG_SND_SOC_SOF_HDA_AUDIO_CODEC=y
|
||||
CONFIG_SND_SOC_SOF_HDA_COMMON_HDMI_CODEC=y
|
||||
CONFIG_SND_SOC_SOF_HDA_LINK=y
|
||||
CONFIG_SND_SOC_SOF_HDA_PROBES=y
|
||||
CONFIG_SND_SOC_SOF_ICELAKE_SUPPORT=y
|
||||
CONFIG_SND_SOC_SOF_INTEL_TOPLEVEL=y
|
||||
CONFIG_SND_SOC_SOF_JASPERLAKE_SUPPORT=y
|
||||
|
@ -2731,7 +2731,7 @@ CONFIG_LSM="yama,integrity,selinux"
|
||||
# CONFIG_LTE_GDM724X is not set
|
||||
# CONFIG_LTR501 is not set
|
||||
# CONFIG_LV0104CS is not set
|
||||
# CONFIG_LWTUNNEL_BPF is not set
|
||||
CONFIG_LWTUNNEL_BPF=y
|
||||
CONFIG_LWTUNNEL=y
|
||||
CONFIG_LXT_PHY=m
|
||||
# CONFIG_M62332 is not set
|
||||
@ -5043,7 +5043,7 @@ CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SKYLAKE_HDAUDIO_CODEC=y
|
||||
CONFIG_SND_SOC_INTEL_SKYLAKE=m
|
||||
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set
|
||||
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SOF_RT5682_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y
|
||||
# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set
|
||||
@ -5073,7 +5073,7 @@ CONFIG_SND_SOC_MAX98373=m
|
||||
# CONFIG_SND_SOC_PCM3060_SPI is not set
|
||||
# CONFIG_SND_SOC_PCM3168A_I2C is not set
|
||||
# CONFIG_SND_SOC_PCM3168A_SPI is not set
|
||||
# CONFIG_SND_SOC_PCM512x_I2C is not set
|
||||
CONFIG_SND_SOC_PCM512x_I2C=m
|
||||
# CONFIG_SND_SOC_PCM512x_SPI is not set
|
||||
# CONFIG_SND_SOC_RK3328 is not set
|
||||
# CONFIG_SND_SOC_RT5616 is not set
|
||||
@ -5090,13 +5090,14 @@ CONFIG_SND_SOC_SOF_COFFEELAKE_SUPPORT=y
|
||||
# CONFIG_SND_SOC_SOF_COMETLAKE_H_SUPPORT is not set
|
||||
# CONFIG_SND_SOC_SOF_COMETLAKE_LP_SUPPORT is not set
|
||||
# CONFIG_SND_SOC_SOF_DEBUG is not set
|
||||
# CONFIG_SND_SOC_SOF_DEBUG_PROBES is not set
|
||||
CONFIG_SND_SOC_SOF_DEBUG_PROBES=y
|
||||
CONFIG_SND_SOC_SOF_ELKHARTLAKE_SUPPORT=y
|
||||
CONFIG_SND_SOC_SOF_GEMINILAKE_SUPPORT=y
|
||||
# CONFIG_SND_SOC_SOF_HDA_ALWAYS_ENABLE_DMI_L1 is not set
|
||||
CONFIG_SND_SOC_SOF_HDA_AUDIO_CODEC=y
|
||||
CONFIG_SND_SOC_SOF_HDA_COMMON_HDMI_CODEC=y
|
||||
CONFIG_SND_SOC_SOF_HDA_LINK=y
|
||||
CONFIG_SND_SOC_SOF_HDA_PROBES=y
|
||||
CONFIG_SND_SOC_SOF_ICELAKE_SUPPORT=y
|
||||
CONFIG_SND_SOC_SOF_INTEL_TOPLEVEL=y
|
||||
# CONFIG_SND_SOC_SOF_JASPERLAKE_SUPPORT is not set
|
||||
|
@ -2714,7 +2714,7 @@ CONFIG_LSM="yama,integrity,selinux"
|
||||
# CONFIG_LTE_GDM724X is not set
|
||||
# CONFIG_LTR501 is not set
|
||||
# CONFIG_LV0104CS is not set
|
||||
# CONFIG_LWTUNNEL_BPF is not set
|
||||
CONFIG_LWTUNNEL_BPF=y
|
||||
CONFIG_LWTUNNEL=y
|
||||
CONFIG_LXT_PHY=m
|
||||
# CONFIG_M62332 is not set
|
||||
@ -5024,7 +5024,7 @@ CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SKYLAKE_HDAUDIO_CODEC=y
|
||||
CONFIG_SND_SOC_INTEL_SKYLAKE=m
|
||||
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set
|
||||
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SOF_RT5682_MACH=m
|
||||
CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y
|
||||
# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set
|
||||
@ -5054,7 +5054,7 @@ CONFIG_SND_SOC_MAX98373=m
|
||||
# CONFIG_SND_SOC_PCM3060_SPI is not set
|
||||
# CONFIG_SND_SOC_PCM3168A_I2C is not set
|
||||
# CONFIG_SND_SOC_PCM3168A_SPI is not set
|
||||
# CONFIG_SND_SOC_PCM512x_I2C is not set
|
||||
CONFIG_SND_SOC_PCM512x_I2C=m
|
||||
# CONFIG_SND_SOC_PCM512x_SPI is not set
|
||||
# CONFIG_SND_SOC_RK3328 is not set
|
||||
# CONFIG_SND_SOC_RT5616 is not set
|
||||
|
109
kernel.spec
109
kernel.spec
@ -30,7 +30,7 @@ Summary: The Linux kernel
|
||||
# For a stable, released kernel, released_kernel should be 1.
|
||||
%global released_kernel 0
|
||||
|
||||
%global distro_build 0.rc7.1
|
||||
%global distro_build 0.rc7.20200528gitb0c3ba31be3e.1
|
||||
|
||||
%if 0%{?fedora}
|
||||
%define secure_boot_arch x86_64
|
||||
@ -69,10 +69,10 @@ Summary: The Linux kernel
|
||||
%endif
|
||||
|
||||
%define rpmversion 5.7.0
|
||||
%define pkgrelease 0.rc7.1
|
||||
%define pkgrelease 0.rc7.20200528gitb0c3ba31be3e.1
|
||||
|
||||
# allow pkg_release to have configurable %%{?dist} tag
|
||||
%define specrelease 0.rc7.1%{?buildid}%{?dist}
|
||||
%define specrelease 0.rc7.20200528gitb0c3ba31be3e.1%{?buildid}%{?dist}
|
||||
|
||||
%define pkg_release %{specrelease}
|
||||
|
||||
@ -163,7 +163,7 @@ Summary: The Linux kernel
|
||||
# Set debugbuildsenabled to 1 for production (build separate debug kernels)
|
||||
# and 0 for rawhide (all kernels are debug kernels).
|
||||
# See also 'make debug' and 'make release'.
|
||||
%define debugbuildsenabled 1
|
||||
%define debugbuildsenabled 0
|
||||
|
||||
# The kernel tarball/base version
|
||||
%define kversion 5.7
|
||||
@ -564,7 +564,7 @@ BuildRequires: asciidoc
|
||||
# exact git commit you can run
|
||||
#
|
||||
# xzcat -qq ${TARBALL} | git get-tar-commit-id
|
||||
Source0: linux-5.7-rc7.tar.xz
|
||||
Source0: linux-20200528gitb0c3ba31be3e.tar.xz
|
||||
|
||||
Source1: Makefile.rhelver
|
||||
|
||||
@ -780,6 +780,34 @@ Patch75: 0001-e1000e-bump-up-timeout-to-wait-when-ME-un-configure-.patch
|
||||
Patch76: 0001-perf-cs-etm-Move-defined-of-traceid_list.patch
|
||||
Patch77: 0001-pwm-lpss-Fix-get_state-runtime-pm-reference-handling.patch
|
||||
Patch78: 0001-x86-Fix-compile-issues-with-rh_check_supported.patch
|
||||
Patch79: 0001-disp-gv100-expose-capabilities-class.patch
|
||||
Patch80: 0001-core-memory-remove-redundant-assignments-to-variable.patch
|
||||
Patch81: 0001-acr-Use-kmemdup-instead-of-kmalloc-and-memcpy.patch
|
||||
Patch82: 0001-drm-Use-generic-helper-to-check-_PR3-presence.patch
|
||||
Patch83: 0001-mmu-Remove-unneeded-semicolon.patch
|
||||
Patch84: 0001-device-rework-mmio-mapping-code-to-get-rid-of-second.patch
|
||||
Patch85: 0001-device-detect-if-changing-endianness-failed.patch
|
||||
Patch86: 0001-device-detect-vGPUs.patch
|
||||
Patch87: 0001-device-use-regular-PRI-accessors-in-chipset-detectio.patch
|
||||
Patch88: 0001-kms-Fix-regression-by-audio-component-transition.patch
|
||||
Patch89: 0001-disp-nv50-increase-timeout-on-pio-channel-free-polli.patch
|
||||
Patch90: 0001-disp-hda-gt215-pass-head-to-nvkm_ior.hda.eld.patch
|
||||
Patch91: 0001-disp-hda-gf119-add-HAL-for-programming-device-entry-.patch
|
||||
Patch92: 0001-disp-hda-gf119-select-HDA-device-entry-based-on-boun.patch
|
||||
Patch93: 0001-disp-hda-gv100-NV_PDISP_SF_AUDIO_CNTRL0-register-mov.patch
|
||||
Patch94: 0001-kms-nv50-Initialize-core-channel-in-nouveau_display_.patch
|
||||
Patch95: 0001-kms-nv50-Probe-SOR-and-PIOR-caps-for-DP-interlacing-.patch
|
||||
Patch96: 0001-kms-gv100-Add-support-for-interlaced-modes.patch
|
||||
Patch97: 0001-kms-nv50-Move-8BPC-limit-for-MST-into-nv50_mstc_get_.patch
|
||||
Patch98: 0001-kms-nv50-Share-DP-SST-mode_valid-handling-with-MST.patch
|
||||
Patch99: 0001-virt-vbox-Fix-VBGL_IOCTL_VMMDEV_REQUEST_BIG-and-_LOG.patch
|
||||
Patch100: 0001-virt-vbox-Fix-guest-capabilities-mask-check.patch
|
||||
Patch101: 0001-virt-vbox-Rename-guest_caps-struct-members-to-set_gu.patch
|
||||
Patch102: 0001-virt-vbox-Add-vbg_set_host_capabilities-helper-funct.patch
|
||||
Patch103: 0001-virt-vbox-Add-support-for-the-new-VBG_IOCTL_ACQUIRE_.patch
|
||||
Patch104: 0001-virt-vbox-Add-a-few-new-vmmdev-request-types-to-the-.patch
|
||||
Patch105: 0001-virt-vbox-Log-unknown-ioctl-requests-as-error.patch
|
||||
Patch106: 0001-platform-x86-sony-laptop-SNC-calls-should-handle-BUF.patch
|
||||
|
||||
%endif
|
||||
|
||||
@ -1275,8 +1303,8 @@ ApplyOptionalPatch()
|
||||
fi
|
||||
}
|
||||
|
||||
%setup -q -n kernel-5.7-rc7 -c
|
||||
mv linux-5.7-rc7 linux-%{KVERREL}
|
||||
%setup -q -n kernel-20200528gitb0c3ba31be3e -c
|
||||
mv linux-20200528gitb0c3ba31be3e linux-%{KVERREL}
|
||||
|
||||
cd linux-%{KVERREL}
|
||||
cp -a %{SOURCE1} .
|
||||
@ -1360,6 +1388,34 @@ ApplyOptionalPatch 0001-e1000e-bump-up-timeout-to-wait-when-ME-un-configure-.pat
|
||||
ApplyOptionalPatch 0001-perf-cs-etm-Move-defined-of-traceid_list.patch
|
||||
ApplyOptionalPatch 0001-pwm-lpss-Fix-get_state-runtime-pm-reference-handling.patch
|
||||
ApplyOptionalPatch 0001-x86-Fix-compile-issues-with-rh_check_supported.patch
|
||||
ApplyOptionalPatch 0001-disp-gv100-expose-capabilities-class.patch
|
||||
ApplyOptionalPatch 0001-core-memory-remove-redundant-assignments-to-variable.patch
|
||||
ApplyOptionalPatch 0001-acr-Use-kmemdup-instead-of-kmalloc-and-memcpy.patch
|
||||
ApplyOptionalPatch 0001-drm-Use-generic-helper-to-check-_PR3-presence.patch
|
||||
ApplyOptionalPatch 0001-mmu-Remove-unneeded-semicolon.patch
|
||||
ApplyOptionalPatch 0001-device-rework-mmio-mapping-code-to-get-rid-of-second.patch
|
||||
ApplyOptionalPatch 0001-device-detect-if-changing-endianness-failed.patch
|
||||
ApplyOptionalPatch 0001-device-detect-vGPUs.patch
|
||||
ApplyOptionalPatch 0001-device-use-regular-PRI-accessors-in-chipset-detectio.patch
|
||||
ApplyOptionalPatch 0001-kms-Fix-regression-by-audio-component-transition.patch
|
||||
ApplyOptionalPatch 0001-disp-nv50-increase-timeout-on-pio-channel-free-polli.patch
|
||||
ApplyOptionalPatch 0001-disp-hda-gt215-pass-head-to-nvkm_ior.hda.eld.patch
|
||||
ApplyOptionalPatch 0001-disp-hda-gf119-add-HAL-for-programming-device-entry-.patch
|
||||
ApplyOptionalPatch 0001-disp-hda-gf119-select-HDA-device-entry-based-on-boun.patch
|
||||
ApplyOptionalPatch 0001-disp-hda-gv100-NV_PDISP_SF_AUDIO_CNTRL0-register-mov.patch
|
||||
ApplyOptionalPatch 0001-kms-nv50-Initialize-core-channel-in-nouveau_display_.patch
|
||||
ApplyOptionalPatch 0001-kms-nv50-Probe-SOR-and-PIOR-caps-for-DP-interlacing-.patch
|
||||
ApplyOptionalPatch 0001-kms-gv100-Add-support-for-interlaced-modes.patch
|
||||
ApplyOptionalPatch 0001-kms-nv50-Move-8BPC-limit-for-MST-into-nv50_mstc_get_.patch
|
||||
ApplyOptionalPatch 0001-kms-nv50-Share-DP-SST-mode_valid-handling-with-MST.patch
|
||||
ApplyOptionalPatch 0001-virt-vbox-Fix-VBGL_IOCTL_VMMDEV_REQUEST_BIG-and-_LOG.patch
|
||||
ApplyOptionalPatch 0001-virt-vbox-Fix-guest-capabilities-mask-check.patch
|
||||
ApplyOptionalPatch 0001-virt-vbox-Rename-guest_caps-struct-members-to-set_gu.patch
|
||||
ApplyOptionalPatch 0001-virt-vbox-Add-vbg_set_host_capabilities-helper-funct.patch
|
||||
ApplyOptionalPatch 0001-virt-vbox-Add-support-for-the-new-VBG_IOCTL_ACQUIRE_.patch
|
||||
ApplyOptionalPatch 0001-virt-vbox-Add-a-few-new-vmmdev-request-types-to-the-.patch
|
||||
ApplyOptionalPatch 0001-virt-vbox-Log-unknown-ioctl-requests-as-error.patch
|
||||
ApplyOptionalPatch 0001-platform-x86-sony-laptop-SNC-calls-should-handle-BUF.patch
|
||||
|
||||
%endif
|
||||
|
||||
@ -2776,6 +2832,45 @@ fi
|
||||
#
|
||||
#
|
||||
%changelog
|
||||
* Thu May 28 2020 CKI@GitLab <cki-project@redhat.com> [5.7.0-0.rc7.20200528gitb0c3ba31be3e.1]
|
||||
- b0c3ba31be3e rebase
|
||||
- Updated changelog for the release based on 444fc5cde643 ("CKI@GitLab")
|
||||
|
||||
* Wed May 27 2020 CKI@GitLab <cki-project@redhat.com> [5.7.0-0.rc7.20200527git444fc5cde643.1]
|
||||
- 444fc5cde643 rebase
|
||||
- platform/x86: sony-laptop: SNC calls should handle BUFFER types (Mattia Dongili)
|
||||
- virt: vbox: Log unknown ioctl requests as error (Hans de Goede)
|
||||
- virt: vbox: Add a few new vmmdev request types to the userspace whitelist (Hans de Goede)
|
||||
- virt: vbox: Add support for the new VBG_IOCTL_ACQUIRE_GUEST_CAPABILITIES ioctl (Hans de Goede)
|
||||
- virt: vbox: Add vbg_set_host_capabilities() helper function (Hans de Goede)
|
||||
- virt: vbox: Rename guest_caps struct members to set_guest_caps (Hans de Goede)
|
||||
- virt: vbox: Fix guest capabilities mask check (Hans de Goede)
|
||||
- virt: vbox: Fix VBGL_IOCTL_VMMDEV_REQUEST_BIG and _LOG req numbers to match upstream (Hans de Goede)
|
||||
- kms/nv50-: Share DP SST mode_valid() handling with MST (Lyude Paul)
|
||||
- kms/nv50-: Move 8BPC limit for MST into nv50_mstc_get_modes() (Lyude Paul)
|
||||
- kms/gv100-: Add support for interlaced modes (Lyude Paul)
|
||||
- kms/nv50-: Probe SOR and PIOR caps for DP interlacing support (Lyude Paul)
|
||||
- kms/nv50-: Initialize core channel in nouveau_display_create() (Lyude Paul)
|
||||
- disp/hda/gv100-: NV_PDISP_SF_AUDIO_CNTRL0 register moved (Ben Skeggs)
|
||||
- disp/hda/gf119-: select HDA device entry based on bound head (Ben Skeggs)
|
||||
- disp/hda/gf119-: add HAL for programming device entry in SF (Ben Skeggs)
|
||||
- disp/hda/gt215-: pass head to nvkm_ior.hda.eld() (Ben Skeggs)
|
||||
- disp/nv50-: increase timeout on pio channel free() polling (Ben Skeggs)
|
||||
- kms: Fix regression by audio component transition (Takashi Iwai)
|
||||
- device: use regular PRI accessors in chipset detection (Ben Skeggs)
|
||||
- device: detect vGPUs (Karol Herbst)
|
||||
- device: detect if changing endianness failed (Karol Herbst)
|
||||
- device: rework mmio mapping code to get rid of second map (Karol Herbst)
|
||||
- mmu: Remove unneeded semicolon (Zheng Bin)
|
||||
- drm: Use generic helper to check _PR3 presence (Kai-Heng Feng)
|
||||
- acr: Use kmemdup instead of kmalloc and memcpy (Zou Wei)
|
||||
- core/memory: remove redundant assignments to variable ret (Colin Ian King)
|
||||
- disp/gv100-: expose capabilities class (Ben Skeggs)
|
||||
- Remove typoed config file aarch64CONFIG_SM_GCC_8150 ("Justin M. Forbes")
|
||||
- Updated changelog for the release based on v5.7-rc7 ("CKI@GitLab")
|
||||
- redhat: Add dummy-module kernel module (Prarit Bhargava)
|
||||
- redhat: enable CONFIG_LWTUNNEL_BPF (Jiri Benc)
|
||||
|
||||
* Mon May 25 2020 CKI@GitLab <cki-project@redhat.com> [5.7.0-0.rc7.1]
|
||||
- v5.7-rc7 rebase
|
||||
- Updated changelog for the release based on caffb99b6929 ("CKI@GitLab")
|
||||
|
6
sources
6
sources
@ -1,3 +1,3 @@
|
||||
SHA512 (linux-5.7-rc7.tar.xz) = d2553e8f25f988f796f017c4425ae3c45f6f468785b6ab29f8fe380832da42e9023cf1ed7ff04bcaeea8aea772942a98de301af1fa6b2103c26119c3738a6bb3
|
||||
SHA512 (kernel-abi-whitelists-5.7.0-0.rc7.1.tar.bz2) = 0354fc494949869eb0414c302b01f6900779a10eabf98e8c5d59f258c1a9217173b81b8e968fa501ee2ae44391e647cf22e19e016c6eb6f756fe89807156e309
|
||||
SHA512 (kernel-kabi-dw-5.7.0-0.rc7.1.tar.bz2) = b279439b7bdd140df979367fde66b294fc9888bd66f51d850f7520fb9ab20ad4e9449a16ced7dd0893bafed7dad5017997dbf4b6bc2ed4f71574670b7e052126
|
||||
SHA512 (linux-20200528gitb0c3ba31be3e.tar.xz) = f5870a2a45a90e739d3924d5714862eb985b375271ef4c67359313ed54a25ebd52d667c2b385c744ad28761d2db91ff5cb91adfbc1c4795d04e88dd700be7192
|
||||
SHA512 (kernel-abi-whitelists-5.7.0-0.rc7.20200528gitb0c3ba31be3e.1.tar.bz2) = ee0bbe08136a496f95303fcbd0a8a8c9122139d4a1ad7c97b6efc21f075aa14dd2af6c85b84c05005b4d2f0472c569e3a8c2bfc649ed4b0311abfb55c42ca6fb
|
||||
SHA512 (kernel-kabi-dw-5.7.0-0.rc7.20200528gitb0c3ba31be3e.1.tar.bz2) = 02e5371d2df4bedbbc1cd763542f29ff7bdc35dca7a903fd977ca3aee215f55ff8b67faf8077aa0d7ffa4368e73c2b01dd5abc03cd9846af241574686a53e2db
|
||||
|
Loading…
Reference in New Issue
Block a user