Last active
June 1, 2020 20:12
-
-
Save alllexx88/1aebabd49da990089a489cb4f5c94698 to your computer and use it in GitHub Desktop.
DisplayLink 5.2.14 dkms for Linux 5.4.x patch
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/Makefile b/Makefile | |
index 8281112..5ed3acc 100644 | |
--- a/Makefile | |
+++ b/Makefile | |
@@ -40,7 +40,7 @@ evdi-y := evdi_drv.o evdi_modeset.o evdi_connector.o evdi_encoder.o evdi_main.o | |
evdi-$(CONFIG_COMPAT) += evdi_ioc32.o | |
obj-$(CONFIG_DRM_EVDI) := evdi.o | |
-else | |
+endif | |
# kbuild against specified or current kernel | |
ifeq ($(KVER),) | |
@@ -51,7 +51,7 @@ ifeq ($(KDIR),) | |
KDIR := /lib/modules/$(KVER)/build | |
endif | |
-default: module | |
+all: module | |
module: | |
$(MAKE) -C $(KDIR) M=$$PWD | |
@@ -59,7 +59,4 @@ module: | |
clean: | |
rm -rf *.o *.ko .tmp* .*.*.cmd Module.symvers evdi.mod.c modules.order | |
- | |
-endif # ifneq ($(KERNELRELEASE),) | |
- | |
endif # ifneq ($(DKMS_BUILD),) | |
diff --git a/dkms.conf b/dkms.conf | |
index 817231d..ebd568e 100644 | |
--- a/dkms.conf | |
+++ b/dkms.conf | |
@@ -7,11 +7,13 @@ | |
# | |
PACKAGE_NAME="evdi" | |
-PACKAGE_VERSION=1.0.0 | |
+PACKAGE_VERSION=5.2.14 | |
AUTOINSTALL=yes | |
-MAKE[0]="make all INCLUDEDIR=/lib/modules/$kernelver/build/include KVERSION=$kernelver DKMS_BUILD=1" | |
+#MAKE[0]="make all INCLUDEDIR=/lib/modules/$kernelver/build/include KVERSION=$kernelver DKMS_BUILD=1" | |
+MAKE[0]="make all INCLUDEDIR=/lib/modules/$kernelver/build/include KVER=$kernelver" | |
DEST_MODULE_LOCATION[0]="/kernel/drivers/gpu/drm/evdi" | |
BUILT_MODULE_NAME[0]="evdi" | |
-CLEAN="make clean KERNELRELEASE=$kernelver DKMS_BUILD=1" | |
+#CLEAN="make clean KERNELRELEASE=$kernelver DKMS_BUILD=1" | |
+CLEAN="make clean KERNELRELEASE=$kernelver" | |
diff --git a/evdi_drv.c b/evdi_drv.c | |
index e59d0a1..c4fd33e 100644 | |
--- a/evdi_drv.c | |
+++ b/evdi_drv.c | |
@@ -18,6 +18,10 @@ | |
#include "evdi_params.h" | |
#include "evdi_debug.h" | |
+#if KERNEL_VERSION(5, 4, 0) <= LINUX_VERSION_CODE | |
+# define DRIVER_PRIME 0 | |
+#endif | |
+ | |
MODULE_AUTHOR("DisplayLink (UK) Ltd."); | |
MODULE_DESCRIPTION("Extensible Virtual Display Interface"); | |
MODULE_LICENSE("GPL"); | |
diff --git a/evdi_drv.h b/evdi_drv.h | |
index 0d67197..9433530 100644 | |
--- a/evdi_drv.h | |
+++ b/evdi_drv.h | |
@@ -20,7 +20,17 @@ | |
#include <drm/drm_crtc_helper.h> | |
#include <drm/drm_rect.h> | |
#include <drm/drm_gem.h> | |
-#include <linux/reservation.h> | |
+#if KERNEL_VERSION(5, 4, 0) > LINUX_VERSION_CODE | |
+# include <linux/reservation.h> | |
+# define evdi_reservation_object reservation_object | |
+# define evdi_reservation_object_init reservation_object_init | |
+# define evdi_reservation_object_fini reservation_object_fini | |
+#else | |
+# include <linux/dma-resv.h> | |
+# define evdi_reservation_object dma_resv | |
+# define evdi_reservation_object_init dma_resv_init | |
+# define evdi_reservation_object_fini dma_resv_fini | |
+#endif | |
#include "evdi_debug.h" | |
#define DRIVER_NAME "evdi" | |
@@ -51,8 +61,8 @@ struct evdi_gem_object { | |
struct page **pages; | |
void *vmapping; | |
struct sg_table *sg; | |
- struct reservation_object *resv; | |
- struct reservation_object _resv; | |
+ struct evdi_reservation_object *resv; | |
+ struct evdi_reservation_object _resv; | |
}; | |
#define to_evdi_bo(x) container_of(x, struct evdi_gem_object, base) | |
@@ -112,8 +122,12 @@ uint32_t evdi_gem_object_handle_lookup(struct drm_file *filp, | |
struct drm_gem_object *evdi_gem_prime_import(struct drm_device *dev, | |
struct dma_buf *dma_buf); | |
+#if KERNEL_VERSION(5, 4, 0) > LINUX_VERSION_CODE | |
struct dma_buf *evdi_gem_prime_export(struct drm_device *dev, | |
struct drm_gem_object *obj, int flags); | |
+#else | |
+struct dma_buf *evdi_gem_prime_export(struct drm_gem_object *obj, int flags); | |
+#endif | |
int evdi_gem_vmap(struct evdi_gem_object *obj); | |
void evdi_gem_vunmap(struct evdi_gem_object *obj); | |
diff --git a/evdi_gem.c b/evdi_gem.c | |
index 2895d6c..0a0d336 100644 | |
--- a/evdi_gem.c | |
+++ b/evdi_gem.c | |
@@ -61,7 +61,7 @@ struct evdi_gem_object *evdi_gem_alloc_object(struct drm_device *dev, | |
return NULL; | |
} | |
- reservation_object_init(&obj->_resv); | |
+ evdi_reservation_object_init(&obj->_resv); | |
obj->resv = &obj->_resv; | |
return obj; | |
@@ -255,7 +255,7 @@ void evdi_gem_free_object(struct drm_gem_object *gem_obj) | |
if (gem_obj->dev->vma_offset_manager) | |
drm_gem_free_mmap_offset(gem_obj); | |
- reservation_object_fini(&obj->_resv); | |
+ evdi_reservation_object_fini(&obj->_resv); | |
obj->resv = NULL; | |
} | |
@@ -569,8 +569,12 @@ struct drm_gem_object *evdi_gem_prime_import(struct drm_device *dev, | |
return ERR_PTR(ret); | |
} | |
+#if KERNEL_VERSION(5, 4, 0) > LINUX_VERSION_CODE | |
struct dma_buf *evdi_gem_prime_export(__maybe_unused struct drm_device *dev, | |
struct drm_gem_object *obj, int flags) | |
+#else | |
+struct dma_buf *evdi_gem_prime_export(struct drm_gem_object *obj, int flags) | |
+#endif | |
{ | |
struct evdi_gem_object *evdi_obj = to_evdi_bo(obj); | |
struct dma_buf_export_info exp_info = { | |
@@ -582,7 +586,7 @@ struct dma_buf *evdi_gem_prime_export(__maybe_unused struct drm_device *dev, | |
.priv = obj | |
}; | |
-#if KERNEL_VERSION(4, 9, 0) <= LINUX_VERSION_CODE | |
+#if (KERNEL_VERSION(4, 9, 0) <= LINUX_VERSION_CODE) && (KERNEL_VERSION(5, 4, 0) > LINUX_VERSION_CODE) | |
return drm_gem_dmabuf_export(dev, &exp_info); | |
#else | |
return dma_buf_export(&exp_info); |
@kalon33 Sorry for a late response. Probably, DisplayLink updated the code in their destributed Linux driver, making this patch outdated. You can use code from DisplayLink/evdi in Ubuntu 20.04. I wrote this patch before discovering the repository, wouldn't have bothered otherwise 😉
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for your patch! Unfortunately, on latest Ubuntu 20.04LTS, trying to patch evdi, I got these errors: