diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 86821b88e7d8e02f7923e882ef3c4870230b98cd..7c645dd7c3a183b607823223bc186ee98ed12a32 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -25,27 +25,40 @@
 #    - cd scripts
 #    - for script in *.sh; do bash $script; done
 
-Ubuntu 18.04 LTS:
-  image: ubuntu:18.04
-  script:
-    - export KVERSION="5.0.0-31-generic"
-    - >
-      apt-get update && apt-get --no-install-recommends -qy install
-      ca-certificates sudo git build-essential
-      linux-image-$KVERSION linux-modules-extra-$KVERSION linux-headers-$KVERSION python
-      python-setuptools python-yaml python-decorator
-      lua5.1 curl libreadline-dev
-    - *run-scripts
+# Ubuntu 18.04 LTS:
+#   image: ubuntu:18.04
+#   script:
+#     - export KVERSION="5.0.0-31-generic"
+#     - >
+#       apt-get update && apt-get --no-install-recommends -qy install
+#       ca-certificates sudo git build-essential
+#       linux-image-$KVERSION linux-modules-extra-$KVERSION linux-headers-$KVERSION python
+#       python-setuptools python-yaml python-decorator
+#       lua5.1 curl libreadline-dev
+#     - *run-scripts
 
-Debian Buster:
-  image: debian:buster
+# Debian Buster:
+#   image: debian:buster
+#   script:
+#     - >
+#       apt-get update && apt-get --no-install-recommends -qy install
+#       ca-certificates sudo git build-essential
+#       linux-image-amd64 linux-headers-amd64 python
+#       python-setuptools python-yaml python-decorator
+#       lua5.1 curl libreadline-dev
+#     - export KVERSION=$(ls /lib/modules/)
+#     - *run-scripts
+
+Debian Bullseye:
+  image: debian:bullseye
   script:
     - >
-      apt-get update && apt-get --no-install-recommends -qy install
+      apt update && apt-get --no-install-recommends -qy install
       ca-certificates sudo git build-essential
-      linux-image-amd64 linux-headers-amd64 python
-      python-setuptools python-yaml python-decorator
+      linux-image-amd64 linux-headers-amd64 python3
+      python3-setuptools python3-yaml python3-decorator
       lua5.1 curl libreadline-dev
+    - ln -sf /usr/bin/python3 /usr/local/bin/python
     - export KVERSION=$(ls /lib/modules/)
     - *run-scripts
 
diff --git a/patches/fmc-sw.diff b/patches/fmc-sw.diff
deleted file mode 100644
index 9a084e1d8f64ec0c6ad3b40832b4fd56c97ec70e..0000000000000000000000000000000000000000
--- a/patches/fmc-sw.diff
+++ /dev/null
@@ -1,231 +0,0 @@
-diff --git a/drivers/fmc/fmc-eeprom.c b/drivers/fmc/fmc-eeprom.c
-index a000a0d..2bd2a6f 100644
---- a/drivers/fmc/fmc-eeprom.c
-+++ b/drivers/fmc/fmc-eeprom.c
-@@ -7,9 +7,14 @@
- #include <linux/module.h>
- #include <linux/memory.h>
- #include <linux/fmc.h>
-+#include <linux/slab.h>
- #include "fmc-internal.h"
- #include "fmc-compat.h"
- 
-+#if KERNEL_VERSION(4, 6, 0) <= LINUX_VERSION_CODE
-+#include <linux/nvmem-consumer.h>
-+#endif
-+
- #define FRU_EEPROM_NAME "fru_eeprom"
- 
- /**
-@@ -17,11 +22,14 @@
-  */
- #define FMC_EEPROM_TYPE_DEFAULT "24c02"
- 
--/**
-- * Setup function for the AT24C02 EEPROM. What we need to do here is to
-- * quickly validate the EEPROM content. The EEPROM should contain a valid
-- * FRU.
-- */
-+#if KERNEL_VERSION(4, 6, 0) <= LINUX_VERSION_CODE
-+const struct property_entry at24_24c02[AT24_NUM_PROPERTIES] = {
-+	PROPERTY_ENTRY_U32("size", 256),
-+	PROPERTY_ENTRY_U32("pagesize", 8),
-+	PROPERTY_ENTRY_U32("address-width", 16),
-+	{ }
-+};
-+#else
- static void fmc_slot_eeprom_setup(struct memory_accessor *macc, void *context)
- {
- 	struct fmc_slot *slot = context;
-@@ -38,9 +46,10 @@ static const struct at24_platform_data at24_24c02 = {
- 	.flags = 0,
- 	.setup = fmc_slot_eeprom_setup,
- };
-+#endif /* KERNEL_VERSION(4, 6, 0) <= LINUX_VERSION_CODE */
- 
- /**
-- * Initialize I2C EEPROM info with standad values
-+ * Initialize I2C EEPROM info with standard values
-  */
- static void fmc_slot_eeprom_init(struct fmc_slot *slot,
- 				 struct i2c_board_info *info,
-@@ -48,7 +57,11 @@ static void fmc_slot_eeprom_init(struct fmc_slot *slot,
- {
- 	strncpy(info->type, name, I2C_NAME_SIZE);
- 	info->addr = FMC_EEPROM_ADDR_SPACE;
-+#if KERNEL_VERSION(4, 6, 0) <= LINUX_VERSION_CODE
-+	info->properties = slot->at24_data;
-+#else
- 	info->platform_data = &slot->at24_data;
-+#endif
- }
- 
- static void fmc_slot_eeprom_init_default(struct fmc_slot *slot,
-@@ -56,8 +69,12 @@ static void fmc_slot_eeprom_init_default(struct fmc_slot *slot,
- {
- 	memset(info, 0, sizeof(*info));
- 	fmc_slot_eeprom_init(slot, info, FMC_EEPROM_TYPE_DEFAULT);
-+#if KERNEL_VERSION(4, 6, 0) > LINUX_VERSION_CODE
- 	memcpy(&slot->at24_data, &at24_24c02, sizeof(slot->at24_data));
- 	slot->at24_data.context = slot;
-+#else
-+	memcpy(slot->at24_data, &at24_24c02, sizeof(slot->at24_data));
-+#endif
- }
- 
- /**
-@@ -66,13 +83,41 @@ static void fmc_slot_eeprom_init_default(struct fmc_slot *slot,
- ssize_t fmc_slot_eeprom_read(struct fmc_slot *slot,
- 			     void *buf, off_t offset, size_t count)
- {
-+	int err = 0;
-+#if KERNEL_VERSION(4, 6, 0) <= LINUX_VERSION_CODE
-+	int idx;
-+	size_t len;
-+	struct nvmem_device *nvmem;
-+	char *nvmem_name;
-+	/* 
-+	 * TODO Check if index can be anything else than zero and,
-+	 * if yes, how to get the proper value.
-+	 */
-+	idx = 0;
-+	len = strlen(dev_name(&slot->eeprom->dev)) + 2;
-+	nvmem_name = kzalloc(len, GFP_KERNEL);
-+	if (nvmem_name) {
-+		snprintf(nvmem_name, len, "%s%d",
-+			 dev_name(&slot->eeprom->dev), idx);
-+		nvmem = nvmem_device_get(&slot->dev, nvmem_name);
-+		if (nvmem) {
-+			err = nvmem_device_read(nvmem, offset, count, buf);
-+#if KERNEL_VERSION(5, 1, 0) <= LINUX_VERSION_CODE
-+			nvmem_device_put(nvmem);
-+#endif
-+		}
-+		kfree(nvmem_name);
-+	}
-+#else
- 	/*
- 	 * TODO if we export this function, do we have to lock it when we
- 	 * use it? Think about it
- 	 */
- 	if (!slot->macc || !slot->macc->read)
- 		return -ENODEV;
--	return slot->macc->read(slot->macc, buf, offset, count);
-+	err = slot->macc->read(slot->macc, buf, offset, count);
-+#endif
-+	return err;
- }
- EXPORT_SYMBOL(fmc_slot_eeprom_read);
- 
-@@ -152,7 +197,9 @@ void fmc_slot_eeprom_del(struct fmc_slot *slot)
- 	sysfs_remove_link(&slot->dev.kobj, FRU_EEPROM_NAME);
- 	i2c_unregister_device(slot->eeprom);
- 	slot->eeprom = NULL;
-+#if KERNEL_VERSION(4, 6, 0) > LINUX_VERSION_CODE
- 	slot->macc = NULL;
-+#endif
- }
- 
- /**
-@@ -197,19 +244,25 @@ int fmc_slot_eeprom_type_set(struct fmc_slot *slot, const char *type)
- 
- 
- 	memset(&i2c_info, 0, sizeof(i2c_info));
-+#if KERNEL_VERSION(4, 6, 0) > LINUX_VERSION_CODE
- 	memset(&slot->at24_data, 0, sizeof(slot->at24_data));
-+#else
-+	memset(slot->at24_data, 0, sizeof(slot->at24_data));
-+#endif
- 
- 	len = (len * 1024) / 8;
- 	/*
- 	 * For sizes between 1K and 16K the EEPROM uses part of the device
- 	 * address as internal memory address
- 	 */
--	if (len > 4096) /* 32K 4KiB */
--		slot->at24_data.flags = AT24_FLAG_ADDR16;
--	else if (len > 131072) /* 1024K 128KiB */
-+	if (len > 131072) /* 1024K 128KiB */
- 		return -EINVAL;
- 
- 	fmc_slot_eeprom_init(slot, &i2c_info, type);
-+
-+#if KERNEL_VERSION(4, 6, 0) > LINUX_VERSION_CODE
-+	if (len > 4096) /* 32K 4KiB */
-+		slot->at24_data.flags = AT24_FLAG_ADDR16;
- 	slot->at24_data.byte_len = len;
- 	slot->at24_data.page_size = 1; /* 1Byte page to play safe */
- 	slot->at24_data.setup = fmc_slot_eeprom_setup;
-@@ -219,7 +272,15 @@ int fmc_slot_eeprom_type_set(struct fmc_slot *slot, const char *type)
- 		i2c_info.type, i2c_info.addr,
- 		slot->at24_data.byte_len, slot->at24_data.page_size,
- 		slot->at24_data.flags);
-+#else
-+	slot->at24_data[0] = PROPERTY_ENTRY_U32("size", len);
-+	slot->at24_data[1] = PROPERTY_ENTRY_U32("pagesize", 1);
-+	if (len > 4096) /* 32K 4KiB */
-+		slot->at24_data[2] = PROPERTY_ENTRY_U32("address-width", 16);
- 
-+	dev_dbg(&slot->dev, "%s 0x%x %d\n",
-+		i2c_info.type, i2c_info.addr, len);
-+#endif
- 	return fmc_slot_eeprom_replace(slot, &i2c_info);
- }
- EXPORT_SYMBOL(fmc_slot_eeprom_type_set);
-diff --git a/drivers/fmc/fru-parse.c b/drivers/fmc/fru-parse.c
-index 35a1380..2fd95eb 100644
---- a/drivers/fmc/fru-parse.c
-+++ b/drivers/fmc/fru-parse.c
-@@ -5,12 +5,6 @@
-  */
- 
- #include <linux/version.h>
--
--#if KERNEL_VERSION(3, 11, 0) > LINUX_VERSION_CODE
--
--/*
-- * On kernel 3.11 and greater this is included
-- */
- #include <linux/slab.h>
- #include <linux/ipmi-fru.h>
- 
-@@ -98,5 +92,3 @@ char *fru_get_part_number(struct fru_common_header *header)
- 	return __fru_alloc_get_tl(header, 3);
- }
- EXPORT_SYMBOL(fru_get_part_number);
--
--#endif
-diff --git a/include/linux/fmc.h b/include/linux/fmc.h
-index 3bc5c12..7fd835f 100644
---- a/include/linux/fmc.h
-+++ b/include/linux/fmc.h
-@@ -11,13 +11,13 @@
- #include <linux/spinlock.h>
- #include <linux/version.h>
- 
-+#if KERNEL_VERSION(5, 1, 0) > LINUX_VERSION_CODE
- #if KERNEL_VERSION(3, 10, 0) <= LINUX_VERSION_CODE
- #include <linux/platform_data/at24.h>
- #else
- #include <linux/i2c/at24.h>
- #endif
--
--
-+#endif
- 
- #ifndef _LINUX_FMC_H
- #define _LINUX_FMC_H
-@@ -84,8 +84,13 @@ struct fmc_slot {
- 
- 	struct i2c_client *eeprom;
- 
-+#if KERNEL_VERSION(4, 6, 0) <= LINUX_VERSION_CODE
-+#define AT24_NUM_PROPERTIES 4
-+	struct property_entry at24_data[AT24_NUM_PROPERTIES];
-+#else
- 	struct memory_accessor *macc;
- 	struct at24_platform_data at24_data;
-+#endif
- };
- 
- /**
diff --git a/patches/svec.diff b/patches/svec.diff
deleted file mode 100644
index 373e121032d8d98736f25f479d9cbe0c2efb17c2..0000000000000000000000000000000000000000
--- a/patches/svec.diff
+++ /dev/null
@@ -1,30 +0,0 @@
-diff --git a/software/kernel/svec-core.c b/software/kernel/svec-core.c
-index fe0b648..eda3c72 100644
---- a/software/kernel/svec-core.c
-+++ b/software/kernel/svec-core.c
-@@ -69,10 +69,12 @@ static int svec_fw_load(struct svec_dev *svec_dev, const char *name)
- 	return err;
- }
- 
-+#if KERNEL_VERSION(3, 15, 0) > LINUX_VERSION_CODE
- static void remove_callback(struct device *dev)
- {
- 	vme_unregister_device(to_vme_dev(dev));
- }
-+#endif
- 
- #define VBRIDGE_DBG_FW_BUF_LEN 128
- static ssize_t svec_dbg_fw_write(struct file *file,
-@@ -111,7 +113,12 @@ static ssize_t svec_dbg_fw_write(struct file *file,
- 	 */
- 	dev_warn(&svec_dev->vdev->dev, "VME Slave removed\n");
- 	dev_warn(&svec_dev->vdev->dev, "Remove this device driver instance\n");
-+#if KERNEL_VERSION(3, 15, 0) > LINUX_VERSION_CODE
- 	ret = device_schedule_callback(&svec_dev->vdev->dev, remove_callback);
-+#else
-+	vme_unregister_device(to_vme_dev(&svec_dev->vdev->dev));
-+	ret = 0;
-+#endif
- 	if (ret) {
- 		dev_err(&svec_dev->vdev->dev,
- 			"Can't remove device driver instance %d\n", ret);
diff --git a/patches/ual.diff b/patches/ual.diff
deleted file mode 100644
index c304e19e47fdbc2427c26276e866467cc2efebbb..0000000000000000000000000000000000000000
--- a/patches/ual.diff
+++ /dev/null
@@ -1,110 +0,0 @@
-diff --git a/Makefile b/Makefile
-index ec8017f..1f4e9de 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1,9 +1,11 @@
- DIRS = lib tools
- 
--.PHONY: all clean $(DIRS)
-+.PHONY: all clean install $(DIRS)
- 
- clean: TARGET = clean
-+install: TARGET= install
-+
-+all clean install: $(DIRS)
- 
--all clean: $(DIRS)
- $(DIRS):
- 	$(MAKE) -C $@ $(TARGET)
-diff --git a/lib/Makefile b/lib/Makefile
-index 7ed546e..20076d9 100644
---- a/lib/Makefile
-+++ b/lib/Makefile
-@@ -5,9 +5,20 @@ CONFIG_VME ?= n
- CFLAGS += -DGIT_VERSION=\"$(GIT_VERSION)\"
- CFLAGS += -Wall -Werror -ggdb -O2 -fPIC
- 
-+GIT_VERSION    := $(shell git describe --always --dirty --long --tags)
-+SO_VERSION_XYZ := $(shell git describe --tags --abbrev=0 | grep -o -E "[0-9]+\.[0-9]+\.[0-9]")
-+
-+ifeq ($(SO_VERSION_XYZ),)
-+	SO_VERSION_XYZ := 0
-+endif
-+
-+PREFIX ?= /usr/local
-+DESTLIBDIR ?= $(PREFIX)/lib
-+
- LIB = libual.o
- LIB_A = libual.a
- LIB_SO = libual.so
-+LIB_SO_XYZ = $(LIB_SO).$(SO_VERSION_XYZ)
- 
- LOBJ := bus.o
- LOBJ += bus-pci.o
-@@ -20,6 +31,7 @@ ifeq ($(CONFIG_VME), y)
- LIBVME_A = $(VMEBRIDGE)/lib
- LIBVME_H = $(VMEBRIDGE)/include
- CFLAGS += -DCONFIG_VME
-+CFLAGS += -DVERSION="\"$(GIT_VERSION)\""
- CFLAGS += -I$(LIBVME_H) -I$(LIBVME_A)
- LDFLAGS += -L$(LIBVME_A) -lvmebus
- LOBJ += bus-vme.o
-@@ -44,19 +56,32 @@ $(LIB_A): $(LIB_DEP)
- ifeq ($(CONFIG_VME), y)
- 	$(AR) r tmp$@ $(LOBJ)
- # transform a thin library into a normal one
--	echo -e "create $@\naddlib tmp$@\naddlib $(LIBVME_A)/libvmebus.a\nsave\nend" | $(AR) -M
-+	printf "create $@\naddlib tmp$@\naddlib $(LIBVME_A)/libvmebus.a\nsave\nend" | $(AR) -M
- 	$(RM) tmp$@
- else
- 	$(AR) r $@ $(LOBJ)
- endif
- 	$(RANLIB) $@
- 
--$(LIB_SO): $(LIB_A)
-+$(LIB_SO_XYZ): $(LIB_A)
- 	$(CC) -shared -o $@ -Wl,--whole-archive,-soname,$@.$(VERSION) $^ -Wl,--no-whole-archive -lrt
- 
-+$(LIB_SO): $(LIB_SO_XYZ)
-+	ln -sf $< $@
-+
- clean:
--	-$(RM) -rf $(LIB) $(LIB_A) $(LIB_SO)
-+	-$(RM) -rf $(LIB) $(LIB_A) $(LIB_SO) $(LIB_SO_XYZ)
- 	-$(RM) -rf *.{a,so,o}
- 	-$(RM) -rf html Doxyfile Doxyfile.template
- 
- cleanall: clean
-+
-+install: libs
-+	install -d $(DESTLIBDIR)
-+	install -m 0644 $(LIB_A) $(DESTLIBDIR)
-+	install -m 0755 $(LIB_SO_XYZ) $(DESTLIBDIR)
-+	ln -sf $(LIB_SO_XYZ) $(DESTLIBDIR)/$(LIB_SO)
-+
-+uninstall:
-+	rm -f $(DESTLIBDIR)/$(LIB_A) $(DESTLIBDIR)/$(LIBS_SO) $(DESTLIBDIR)/$(LIBS_SO_XYZ)
-+	rmdir --ignore-fail-on-non-empty $(DESTLIBDIR)
-diff --git a/tools/Makefile b/tools/Makefile
-index 3ce5054..687340b 100644
---- a/tools/Makefile
-+++ b/tools/Makefile
-@@ -12,8 +12,18 @@ ifeq ($(CONFIG_VME), y)
- CFLAGS += -DCONFIG_VME
- endif
- 
-+BINDESTDIR ?= $(PREFIX)/usr/local/bin
-+
- all: $(PROGS)
- 
-+install:
-+	install -d $(BINDESTDIR)
-+	install -m 0755 $(PROGS) $(BINDESTDIR)
-+
-+uninstall:
-+	rm -f $(addprefix $(BINDESTDIR)/,$(PROGS))
-+	rmdir --ignore-fail-on-non-empty $(BINDESTDIR)
-+
- clean:
- 	rm -f $(PROGS) *.o *~
- 
diff --git a/patches/vmebridge.diff b/patches/vmebridge.diff
new file mode 100644
index 0000000000000000000000000000000000000000..35d55f188e38718278061d889a3d136539f19e51
--- /dev/null
+++ b/patches/vmebridge.diff
@@ -0,0 +1,91 @@
+diff --git a/vmebridge-ng/driver/vme_compat.c b/vmebridge-ng/driver/vme_compat.c
+index 2a187be0..232e0e3a 100644
+--- a/vmebridge-ng/driver/vme_compat.c
++++ b/vmebridge-ng/driver/vme_compat.c
+@@ -3,7 +3,6 @@
+  * Copyright 2018 CERN
+  * Author: Federico Vaga <federico.vaga@cern.ch>
+  */
+-#include <linux/kallsyms.h>
+ #include <linux/sched.h>
+ #include <linux/ioport.h>
+ #include <linux/mm.h>
+@@ -11,6 +10,23 @@
+ #include "vme_bridge.h"
+ #include "vme_compat.h"
+ 
++/**
++ * NOTE Because of the "dirty hack" further down, access
++ * to kallsyms_lookup_name() is needed, however the symbol
++ * is not exported starting with kernel v5.6.0. This is a
++ * further hack to provide access to the symbol.
++ */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
++#define KPROBE_LOOKUP 1
++#include <linux/kprobes.h>
++
++static struct kprobe kp = {
++    .symbol_name = "kallsyms_lookup_name"
++};
++#else
++#include <linux/kallsyms.h>
++#endif
++
+ long get_user_pages_l(unsigned long start, unsigned long nr_pages,
+ 		      unsigned int gup_flags, struct page **pages,
+ 		      struct vm_area_struct **vmas)
+@@ -42,6 +58,14 @@ int insert_resource_l(struct resource *parent,
+ 	static int (*insert_resource_p)(struct resource *parent,
+ 					struct resource *new);
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
++	typedef unsigned long (*kallsyms_lookup_name_t)(const char *name);
++	kallsyms_lookup_name_t kallsyms_lookup_name;
++	/* TODO: check return value of register_probe() */
++	register_kprobe(&kp);
++	kallsyms_lookup_name = (kallsyms_lookup_name_t) kp.addr;
++	unregister_kprobe(&kp);
++#endif
+ 	insert_resource_p = (void *) kallsyms_lookup_name("insert_resource");
+ 
+ 	return insert_resource_p(parent, new);
+diff --git a/vmebridge-ng/driver/vme_compat.h b/vmebridge-ng/driver/vme_compat.h
+index 945180fb..b2a78c27 100644
+--- a/vmebridge-ng/driver/vme_compat.h
++++ b/vmebridge-ng/driver/vme_compat.h
+@@ -61,19 +61,24 @@ struct bin_attribute bin_attr_##_name = __BIN_ATTR(_name, _mode, _read, \
+ #endif
+ #endif
+ 
+-#if KERNEL_VERSION(3, 12, 0) > LINUX_VERSION_CODE
+-#ifdef RHEL_RELEASE_VERSION
+-#if RHEL_RELEASE_VERSION(7, 7) > RHEL_RELEASE_CODE
+-#define BUS_ATTR_WO(_name) \
+-	struct bus_attribute bus_attr_##_name = __ATTR_WO(_name)
+-#define BUS_ATTR_RO(_name) \
+-	struct bus_attribute bus_attr_##_name = __ATTR_RO(_name)
++#ifndef BUS_ATTR
++#define BUS_ATTR(_name, _mode, _show, _store)\
++  struct bus_attribute bus_attr_##_name = __ATTR(_name, _mode, _show, _store)
++#endif
++
++#ifndef BUS_ATTR_RW
++#define BUS_ATTR_RW(_name) \
++  struct bus_attribute bus_attr_##_name = __ATTR_RW(_name)
+ #endif
+-#else
+-#define BUS_ATTR_RW(_name)
+-#define BUS_ATTR_WO(_name)
+-#define BUS_ATTR_RO(_name)
++
++#ifndef BUS_ATTR_RO
++#define BUS_ATTR_RO(_name) \
++  struct bus_attribute bus_attr_##_name = __ATTR_RO(_name)
+ #endif
++
++#ifndef BUS_ATTR_WO
++#define BUS_ATTR_WO(_name) \
++  struct bus_attribute bus_attr_##_name = __ATTR_WO(_name)
+ #endif
+ 
+ extern long get_user_pages_l(unsigned long start, unsigned long nr_pages,
diff --git a/patches/zio.diff b/patches/zio.diff
deleted file mode 100644
index f6c5570337b9725ac0935d17aa6d4d357a788789..0000000000000000000000000000000000000000
--- a/patches/zio.diff
+++ /dev/null
@@ -1,86 +0,0 @@
-diff --git a/drivers/zio/chardev.c b/drivers/zio/chardev.c
-index ea61829..28ad9d0 100644
---- a/drivers/zio/chardev.c
-+++ b/drivers/zio/chardev.c
-@@ -429,6 +429,9 @@ static ssize_t zio_generic_read(struct file *f, char __user *ubuf,
- 	struct zio_channel *chan = priv->chan;
- 	struct zio_bi *bi = chan->bi;
- 	struct zio_block *block;
-+#if KERNEL_VERSION(4, 18, 0) <= LINUX_VERSION_CODE
-+	struct zio_control zio_ctrl;
-+#endif
- 	int (*can_read)(struct zio_f_priv *);
- 	int fault, rflags;
- 
-@@ -469,7 +472,12 @@ static ssize_t zio_generic_read(struct file *f, char __user *ubuf,
- 				mutex_unlock(&chan->user_lock);
- 				continue;
- 			}
-+#if KERNEL_VERSION(4, 18, 0) <= LINUX_VERSION_CODE
-+			memcpy(&zio_ctrl, zio_get_ctrl(block), sizeof(struct zio_control));
-+			fault = copy_to_user(ubuf, &zio_ctrl, count);
-+#else
- 			fault = copy_to_user(ubuf, zio_get_ctrl(block), count);
-+#endif
- 			mutex_unlock(&chan->user_lock);
- 			if (fault)
- 				return -EFAULT;
-diff --git a/drivers/zio/core.c b/drivers/zio/core.c
-index f1d7e4c..1dd88b4 100644
---- a/drivers/zio/core.c
-+++ b/drivers/zio/core.c
-@@ -139,13 +139,13 @@ static int __init zio_init(void)
- 
- 	err = zio_default_buffer_init();
- 	if (err)
--		pr_warning("%s: cannot register default buffer\n", __func__);
-+		pr_warn("%s: cannot register default buffer\n", __func__);
- 	err = zio_default_trigger_init();
- 	if (err)
--		pr_warning("%s: cannot register default trigger\n", __func__);
-+		pr_warn("%s: cannot register default trigger\n", __func__);
- 	if (zio_sniffdev_init())
--		pr_warning("%s: cannot initialize /dev/zio-sniff.ctrl\n",
--			   __func__);
-+		pr_warn("%s: cannot initialize /dev/zio-sniff.ctrl\n",
-+			__func__);
- 
- 	pr_info("zio-core had been loaded\n");
- 	return 0;
-diff --git a/drivers/zio/devices/zio-loop.c b/drivers/zio/devices/zio-loop.c
-index 4edd97f..c88acda 100644
---- a/drivers/zio/devices/zio-loop.c
-+++ b/drivers/zio/devices/zio-loop.c
-@@ -186,6 +186,7 @@ static int zloop_raw_output(struct zio_cset *cset)
- 
- 	case ZLOOP_CSET_OUT_DATA:
- 		index = ZLOOP_TYPE_READ_DATA;
-+		/*@fallthrough@*/
- 	case ZLOOP_CSET_OUT_CTRLDATA:
- 		if (index < 0)
- 			index = ZLOOP_TYPE_READ_CTRLDATA;
-diff --git a/drivers/zio/objects.c b/drivers/zio/objects.c
-index 61e5719..c9eadf3 100644
---- a/drivers/zio/objects.c
-+++ b/drivers/zio/objects.c
-@@ -1223,7 +1223,7 @@ static int zobj_unique_name(struct zio_object_list *zobj_list, const char *name)
- 		return -EINVAL;
- 	}
- 	if (strlen(name) > ZIO_OBJ_NAME_LEN)
--		pr_warning("ZIO: name too long, cut to %d characters\n",
-+		pr_warn("ZIO: name too long, cut to %d characters\n",
- 			ZIO_OBJ_NAME_LEN);
- 
- 	pr_debug("%s\n", __func__);
-diff --git a/drivers/zio/sysfs.c b/drivers/zio/sysfs.c
-index 42f292a..9f0ca40 100644
---- a/drivers/zio/sysfs.c
-+++ b/drivers/zio/sysfs.c
-@@ -764,6 +764,7 @@ static ssize_t zio_store_alarm(struct device *dev,
- 	switch (sscanf(buf, "%i %i", &v1, &v2)) {
- 	case 2:
- 		ctrl->drv_alarms &= (~v2);
-+		/*@fallthrough@*/
- 	case 1:
- 		ctrl->zio_alarms &= (~v1);
- 		break;
diff --git a/scripts/adc_lib_build.sh b/scripts/adc_lib_build.sh
index 0105750514644cdcbeb86bceab51b37dad10d7ab..256e16da245578a24849dc1ec999c6befb5e7235 100644
--- a/scripts/adc_lib_build.sh
+++ b/scripts/adc_lib_build.sh
@@ -10,12 +10,12 @@ cd $BUILD_DIR
 
 [ -d $PROJECT ] || git clone https://ohwr.org/project/adc-lib.git $PROJECT
 cd $PROJECT
-git checkout -B release v2.5.1
+git checkout -B release v4.0.3
 [ $SKIP_PATCH ] || [ -e $PATCH_DIR/$PROJECT.diff ] && patch -p1 < $PATCH_DIR/$PROJECT.diff
 export ZIO=$BUILD_DIR/zio
-export FMCADC100M=$BUILD_DIR/fmc-adc-100m14b4cha-sw
+export FMCADC100M=$BUILD_DIR/fmc-adc-100m14b4cha/software
 [ $SKIP_BUILD ] || make
 [ $SKIP_INSTALL ] || sudo -E make install
-[ $SKIP_INSTALL ] || sudo -E make -C lib/PyAdcLib install
+[ $SKIP_INSTALL ] || sudo -E make -C PyAdcLib install
 
 . $SCRIPT_DIR/post_script
diff --git a/scripts/cheby_build.sh b/scripts/cheby_build.sh
index 0e72ed30911d7e939dc3be3d3fac838baa11b72f..99d91600f7dbdb4eccac1e0f73b528e629d198af 100644
--- a/scripts/cheby_build.sh
+++ b/scripts/cheby_build.sh
@@ -8,6 +8,6 @@ cd $BUILD_DIR
 
 [ -d $PROJECT ] || git clone https://gitlab.cern.ch/cohtdrivers/cheby.git $PROJECT
 cd $PROJECT
-git checkout master
+git checkout -B release v1.5.0
 
 . $SCRIPT_DIR/post_script
diff --git a/scripts/fmc_adc_100m_build.sh b/scripts/fmc_adc_100m_build.sh
index 9749be8097a0b3e753d45ca5d86a0e2acd45f5d8..797cb73c197c788df2c27f81733d11c597421319 100644
--- a/scripts/fmc_adc_100m_build.sh
+++ b/scripts/fmc_adc_100m_build.sh
@@ -1,22 +1,34 @@
 #!/bin/sh
 
-PROJECT=fmc-adc-100m14b4cha-sw
+PROJECT=fmc-adc-100m14b4cha
 
 . ./pre_script
 
 bash $SCRIPT_DIR/fmc_sw_build.sh
 bash $SCRIPT_DIR/zio_build.sh
+bash $SCRIPT_DIR/vmebridge_build.sh
 
 cd $BUILD_DIR
 
-[ -d $PROJECT ] || git clone https://ohwr.org/project/fmc-adc-100m14b4cha-sw.git $PROJECT
+[ -d $PROJECT ] || git clone https://ohwr.org/project/fmc-adc-100m14b4cha.git $PROJECT
 cd $PROJECT
-git checkout -b dlamprid-dev 0e644a5
+git checkout -B release v6.0.4
 [ $SKIP_PATCH ] || [ -e $PATCH_DIR/$PROJECT.diff ] && patch -p1 < $PATCH_DIR/$PROJECT.diff
 export ZIO=$BUILD_DIR/zio
 export FMC=$BUILD_DIR/fmc-sw
-[ $SKIP_BUILD ] || make
-[ $SKIP_INSTALL ] || sudo -E make -C kernel modules_install
-[ $SKIP_INSTALL ] || sudo -E make -C tools install
+export VMEBUS=$BUILD_DIR/coht/vmebridge-ng
+[ $SKIP_BUILD ] || make -C software
+[ $SKIP_INSTALL ] || sudo -E make -C software/kernel modules_install
+[ $SKIP_INSTALL ] || sudo -E make -C software/tools install
+
+BITSTREAM_URL="https://be-cem-edl.web.cern.ch/fmc-adc-100m14b4cha/v6.0.4/bitstreams/"
+BITSTREAMS=$(curl -s $BITSTREAM_URL | grep 'tar.xz' | sed 's/.*<a href=".*">\(.*\)<\/a>.*/\1/')
+mkdir -p $BUILD_DIR/bitstreams/$PROJECT
+for b in $BITSTREAMS; do
+    curl $BITSTREAM_URL/$b | tar xJv -C $BUILD_DIR/bitstreams/$PROJECT --wildcards '*.bin'
+done
+
+[ $SKIP_INSTALL ] || sudo -E install -d /lib/firmware
+[ $SKIP_INSTALL ] || sudo -E install -m 0644 $BUILD_DIR/bitstreams/$PROJECT/*.bin /lib/firmware/
 
 . $SCRIPT_DIR/post_script
diff --git a/scripts/fmc_adc_100m_ref_spec_install.sh b/scripts/fmc_adc_100m_ref_spec_install.sh
index 55a8e3fba4d46f9174a583b6537752207a8408ce..63253a97d224ff18e8512b30e819ee909aaeb91b 100644
--- a/scripts/fmc_adc_100m_ref_spec_install.sh
+++ b/scripts/fmc_adc_100m_ref_spec_install.sh
@@ -5,19 +5,6 @@ PROJECT=fmc_adc_100m_ref_spec
 . ./pre_script
 
 bash $SCRIPT_DIR/spec_carrier_build.sh
-bash $SCRIPT_DIR/fmc_adc_100m_build.sh
 bash $SCRIPT_DIR/adc_lib_build.sh
 
-cd $BUILD_DIR
-
-[ -d $PROJECT ] || git clone https://ohwr.org/project/fmc-adc-100m14b4cha-gw.git $PROJECT
-cd $PROJECT
-#TODO: release
-git checkout proposed_master
-export CONFIG_FMC_ADC_SPEC=m
-[ $SKIP_BUILD ] || make -C software
-[ $SKIP_INSTALL ] || sudo -E make -C software install
-
-#TODO: donwload released gateware and install it
-
 . $SCRIPT_DIR/post_script
diff --git a/scripts/fmc_adc_100m_ref_svec_install.sh b/scripts/fmc_adc_100m_ref_svec_install.sh
index 872e742273ca95cf168360ac15e532ceebbc2555..9d3a6b2feb66d0bdd12884f949dfc6af7f420d98 100644
--- a/scripts/fmc_adc_100m_ref_svec_install.sh
+++ b/scripts/fmc_adc_100m_ref_svec_install.sh
@@ -5,19 +5,6 @@ PROJECT=fmc_adc_100m_ref_svec
 . ./pre_script
 
 bash $SCRIPT_DIR/svec_carrier_build.sh
-bash $SCRIPT_DIR/fmc_adc_100m_vme_build.sh
 bash $SCRIPT_DIR/adc_lib_build.sh
 
-cd $BUILD_DIR
-
-[ -d $PROJECT ] || git clone https://ohwr.org/project/fmc-adc-100m14b4cha-gw.git $PROJECT
-cd $PROJECT
-#TODO: release
-git checkout proposed_master
-export CONFIG_FMC_ADC_SVEC=m
-[ $SKIP_BUILD ] || make -C software
-[ $SKIP_INSTALL ] || sudo -E make -C software install
-
-#TODO: donwload released gateware and install it
-
 . $SCRIPT_DIR/post_script
diff --git a/scripts/fmc_adc_100m_vme_build.sh b/scripts/fmc_adc_100m_vme_build.sh
deleted file mode 100644
index 7bc8657aa027d4ad24ef4e33678f8ff7b0b12655..0000000000000000000000000000000000000000
--- a/scripts/fmc_adc_100m_vme_build.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh
-
-PROJECT=fmc-adc-100m14b4cha-vme
-
-. ./pre_script
-
-bash $SCRIPT_DIR/fmc_sw_build.sh
-bash $SCRIPT_DIR/zio_build.sh
-bash $SCRIPT_DIR/vmebridge_build.sh
-
-cd $BUILD_DIR
-
-[ -d $PROJECT ] || git clone https://ohwr.org/project/fmc-adc-100m14b4cha-sw.git $PROJECT
-cd $PROJECT
-#TODO: release!
-git checkout -b dlamprid-dev 0e644a5
-[ $SKIP_PATCH ] || [ -e $PATCH_DIR/fmc-adc-100m14b4cha-sw.diff ] && patch -p1 < $PATCH_DIR/fmc-adc-100m14b4cha-sw.diff
-export ZIO=$BUILD_DIR/zio
-export FMC=$BUILD_DIR/fmc-sw
-export VMEBRIDGE=$BUILD_DIR/vmebridge
-export CONFIG_FMC_ADC_SVEC="y"
-[ $SKIP_BUILD ] || make
-[ $SKIP_INSTALL ] || sudo -E make -C kernel modules_install
-[ $SKIP_INSTALL ] || sudo -E make -C tools install
-
-. $SCRIPT_DIR/post_script
diff --git a/scripts/fmc_sw_build.sh b/scripts/fmc_sw_build.sh
index ecd5e16b3e26d6deeb629d55cc4fd5b08860af50..b4518f709a807881cea57d24a0783e0f47a3397c 100644
--- a/scripts/fmc_sw_build.sh
+++ b/scripts/fmc_sw_build.sh
@@ -8,7 +8,7 @@ cd $BUILD_DIR
 
 [ -d $PROJECT ] || git clone https://ohwr.org/project/fmc-sw.git $PROJECT
 cd $PROJECT
-git checkout -B release v1.0.4
+git checkout -B release v1.1.5
 [ $SKIP_PATCH ] || [ -e $PATCH_DIR/$PROJECT.diff ] && patch -p1 < $PATCH_DIR/$PROJECT.diff
 [ $SKIP_BUILD ] || make
 [ $SKIP_INSTALL ] || sudo -E make modules_install
diff --git a/scripts/general_cores_build.sh b/scripts/general_cores_build.sh
index 567e59da7465f1b126d1460a0b3a0a02ea9e84c9..0d92c7b44381bc20f96277bfa3d88a82bebbff97 100644
--- a/scripts/general_cores_build.sh
+++ b/scripts/general_cores_build.sh
@@ -8,7 +8,7 @@ cd $BUILD_DIR
 
 [ -d $PROJECT ] || git clone https://ohwr.org/project/general-cores.git $PROJECT
 cd $PROJECT
-git checkout -B release v1.1.0
+git checkout -b tmp b84c76b
 [ $SKIP_PATCH ] || [ -e $PATCH_DIR/$PROJECT.diff ] && patch -p1 < $PATCH_DIR/$PROJECT.diff
 [ $SKIP_BUILD ] || make -C software/htvic
 [ $SKIP_BUILD ] || make -C software/i2c-ocores
diff --git a/scripts/mockturtle_build.sh b/scripts/mockturtle_build.sh
index f171eb56e8abac9897fe8d36db8ef3e7f9f8a925..5e64ba6d870aed1d5d1c801546f9d1ff983f3f3f 100644
--- a/scripts/mockturtle_build.sh
+++ b/scripts/mockturtle_build.sh
@@ -10,7 +10,7 @@ cd $BUILD_DIR
 
 [ -d $PROJECT ] || git clone https://ohwr.org/project/mock-turtle.git $PROJECT
 cd $PROJECT
-git checkout -B release v4.0.4
+git checkout -B release v4.1.0
 [ $SKIP_BUILD ] || WBGEN2=$BUILD_DIR/wishbone-gen/wbgen2 make -C software
 [ $SKIP_INSTALL ] || WBGEN2=$BUILD_DIR/wishbone-gen/wbgen2 sudo -E make -C software install
 [ $SKIP_INSTALL ] || sudo -E make -C software/lib/PyMockTurtle install
diff --git a/scripts/pre_script b/scripts/pre_script
index 1663bc47c7e4fda0c8006c2d4d465ef3376823f2..b5b4f12f9097806ffeeff2d04d4d4165f86f1195 100644
--- a/scripts/pre_script
+++ b/scripts/pre_script
@@ -7,3 +7,7 @@ set -e
 if [ -e $BUILD_DIR/built.$PROJECT ]; then
     exit 0
 fi
+
+echo -e "\033[34m\033[1m"
+echo "  Starting installation of $PROJECT"
+echo -e "\033[0m"
diff --git a/scripts/spec_carrier_build.sh b/scripts/spec_carrier_build.sh
index 5b56c71dcbafd69497e31b033cdf22f193d724da..e1b6da43251f768bc7159c7a8a656c76b663f86a 100644
--- a/scripts/spec_carrier_build.sh
+++ b/scripts/spec_carrier_build.sh
@@ -13,7 +13,7 @@ cd $BUILD_DIR
 
 [ -d $PROJECT ] || git clone https://ohwr.org/project/spec.git $PROJECT
 cd $PROJECT
-git checkout -B release v1.4.9
+git checkout -B release v3.0.0
 [ $SKIP_PATCH ] || [ -e $PATCH_DIR/$PROJECT.diff ] && patch -p1 < $PATCH_DIR/$PROJECT.diff
 export CHEBY="python $BUILD_DIR/cheby/proto/cheby.py"
 export FMC="$BUILD_DIR/fmc-sw"
@@ -22,12 +22,6 @@ export SPI="$BUILD_DIR/general-cores/software/spi-ocores"
 export CONFIG_FPGA_MGR_BACKPORT="y"
 export FPGA_MGR="$BUILD_DIR/fpga-manager"
 [ $SKIP_BUILD ] || make -C software
-[ $SKIP_INSTALL ] || sudo -E make -C software modules_install
-
-SPEC_BIN="https://ohwr.org/project/spec/wikis/uploads/98d07df245b14b373b11a02ab7358cb2/spec-binaries-v1.4.4.tar.xz"
-curl $SPEC_BIN | tar xJ -C $BUILD_DIR
-[ $SKIP_INSTALL ] || sudo -E install -d /lib/firmware
-[ $SKIP_INSTALL ] || sudo -E install -m 0644 $BUILD_DIR/spec-binaries-v1.4.4/spec-golden-45T.bin /lib/firmware/
-[ $SKIP_INSTALL ] || sudo -E install -m 0644 $BUILD_DIR/spec-binaries-v1.4.4/spec-golden-150T.bin /lib/firmware/
+[ $SKIP_INSTALL ] || sudo -E make -C software install
 
 . $SCRIPT_DIR/post_script
diff --git a/scripts/svec_carrier_build.sh b/scripts/svec_carrier_build.sh
index 6d62edcc7fdd872c3ce53dcb9ace3363fecd1adc..af8fb2458e6f5692b5eb7948a09d555254523229 100644
--- a/scripts/svec_carrier_build.sh
+++ b/scripts/svec_carrier_build.sh
@@ -14,14 +14,13 @@ cd $BUILD_DIR
 
 [ -d $PROJECT ] || git clone https://ohwr.org/project/svec.git $PROJECT
 cd $PROJECT
-git checkout -B release v1.4.9
+git checkout -B release v3.0.0
 [ $SKIP_PATCH ] || [ -e $PATCH_DIR/$PROJECT.diff ] && patch -p1 < $PATCH_DIR/$PROJECT.diff
 export CHEBY="python $BUILD_DIR/cheby/proto/cheby.py"
 export FMC="$BUILD_DIR/fmc-sw"
-export VMEBRIDGE="$BUILD_DIR/vmebridge"
+export VMEBRIDGE="$BUILD_DIR/coht/vmebridge-ng"
 export I2C="$BUILD_DIR/general-cores/software/i2c-ocores"
-# TODO: check why SPI is not needed here
-#export SPI="$BUILD_DIR/general-cores/software/spi-ocores"
+export SPI="$BUILD_DIR/general-cores/software/spi-ocores"
 export CONFIG_FPGA_MGR_BACKPORT="y"
 export FPGA_MGR="$BUILD_DIR/fpga-manager"
 [ $SKIP_BUILD ] || make -C software/kernel
diff --git a/scripts/ual_install.sh b/scripts/ual_install.sh
index 24740a89c2be3ca08a73efea5ae16763a1437a70..31cc36bbee40aca5d8290c93d3d5b27d50e3fbb9 100644
--- a/scripts/ual_install.sh
+++ b/scripts/ual_install.sh
@@ -10,9 +10,9 @@ cd $BUILD_DIR
 
 [ -d $PROJECT ] || git clone https://gitlab.cern.ch/cohtdrivers/ual.git $PROJECT
 cd $PROJECT
-git checkout -B release v1.3.0
+git checkout -B release v1.3.1
 [ $SKIP_PATCH ] || [ -e $PATCH_DIR/$PROJECT.diff ] && patch -p1 < $PATCH_DIR/$PROJECT.diff
-[ $SKIP_BUILD ] || make VMEBRIDGE=../../vmebridge CONFIG_VME=y
+[ $SKIP_BUILD ] || make VMEBRIDGE=../../coht/vmebridge-ng CONFIG_VME=y
 [ $SKIP_INSTALL ] || sudo -E make install
 [ $SKIP_INSTALL ] || sudo -E sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/ual.conf'
 [ $SKIP_INSTALL ] || sudo -E ldconfig
diff --git a/scripts/vmebridge_build.sh b/scripts/vmebridge_build.sh
index 3b3f083bcdc413eea134b0a07df87798ff74c614..4bb6a53044eadad3a19676b31009710a21dd67fa 100644
--- a/scripts/vmebridge_build.sh
+++ b/scripts/vmebridge_build.sh
@@ -6,14 +6,11 @@ PROJECT=vmebridge
 
 cd $BUILD_DIR
 
-rm -rf ${PROJECT}
-mkdir -p $PROJECT
 [ -d coht ] || git clone https://gitlab.cern.ch/dlamprid/coht.git
 cd coht
-git checkout -f feature/vmebridge-ng/modernise
+git checkout varodek_develop
 [ $SKIP_PATCH ] || [ -e $PATCH_DIR/$PROJECT.diff ] && patch -p1 < $PATCH_DIR/$PROJECT.diff
-cp -r vmebridge-ng/{driver,include,lib,vmeutils} ../${PROJECT}/
-cd ../$PROJECT/driver
+cd vmebridge-ng/driver
 [ $SKIP_BUILD ] || make -C $LINUX M=`pwd` modules
 [ $SKIP_INSTALL ] || sudo -E make -C $LINUX M=`pwd` modules_install
 cd ../lib
diff --git a/scripts/wrtd_build.sh b/scripts/wrtd_build.sh
index 60e8822abfab817592d27f19cb58ad0873558cd6..bd86f08b1458d33cc87665cb3f2351a474f0286d 100644
--- a/scripts/wrtd_build.sh
+++ b/scripts/wrtd_build.sh
@@ -4,27 +4,17 @@ PROJECT=wrtd
 
 . ./pre_script
 
-bash ./mockturtle_build.sh
+bash $SCRIPT_DIR/mockturtle_build.sh
 
 cd $BUILD_DIR
 
 [ -d $PROJECT ] || git clone https://ohwr.org/project/wrtd.git $PROJECT
 cd $PROJECT
-#TODO: release
-git checkout -b tmp 1454731
+git checkout -B release v1.1.0
 export WRTD_DEP_TRTL=$BUILD_DIR/mock-turtle
 [ $SKIP_BUILD ] || make -C software
 [ $SKIP_INSTALL ] || sudo -E make -C software install
 [ $SKIP_INSTALL ] || sudo -E sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/wrtd.conf'
 [ $SKIP_INSTALL ] || sudo -E ldconfig
-[ $SKIP_INSTALL ] || sudo -E install -d /etc/udev/rules.d/
-[ $SKIP_INSTALL ] || sudo -E install -m 0644 software/udev/rules.d/* /etc/udev/rules.d/
-[ $SKIP_INSTALL ] || sudo -E sh -c 'getent group wrtd 2>&1 > /dev/null || groupadd wrtd'
-
-WRTD_BIN="https://ohwr.org/project/wrtd/wikis/uploads/8c95166b306cf12b6d75c6e0b27f142d/wrtd-binaries-v1.0.0.tar.gz"
-curl $WRTD_BIN | tar xz -C $BUILD_DIR
-[ $SKIP_INSTALL ] || sudo -E install -d /lib/firmware
-[ $SKIP_INSTALL ] || sudo -E install -m 0644 $BUILD_DIR/wrtd-binaries-v1.0.0/wrtd_ref_spec150t_adc/gateware/wrtd_ref_spec150t_adc.bin /lib/firmware/
-[ $SKIP_INSTALL ] || sudo -E install -m 0644 $BUILD_DIR/wrtd-binaries-v1.0.0/wrtd_ref_svec_tdc_fd/gateware/wrtd_ref_svec_tdc_fd.bin   /lib/firmware/
 
 . $SCRIPT_DIR/post_script
diff --git a/scripts/wrtd_ref_designs_install.sh b/scripts/wrtd_ref_designs_install.sh
new file mode 100644
index 0000000000000000000000000000000000000000..426c8c66bf60d68e30d6d73dee186346297ffbb7
--- /dev/null
+++ b/scripts/wrtd_ref_designs_install.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+PROJECT=wrtd-ref-designs
+
+. ./pre_script
+
+bash $SCRIPT_DIR/wrtd_build.sh
+
+cd $BUILD_DIR
+
+[ -d $PROJECT ] || git clone https://ohwr.org/project/wrtd-ref-designs.git $PROJECT
+cd $PROJECT
+git checkout -B release v2.0.0
+[ $SKIP_INSTALL ] || sudo -E install -d /etc/udev/rules.d/
+[ $SKIP_INSTALL ] || sudo -E install -m 0644 software/udev/rules.d/* /etc/udev/rules.d/
+[ $SKIP_INSTALL ] || sudo -E sh -c 'getent group wrtd 2>&1 > /dev/null || groupadd wrtd'
+
+BITSTREAM_URL="https://be-cem-edl.web.cern.ch/wrtd-reference-designs/v2.0.0/bitstreams/"
+BITSTREAMS=$(curl -s $BITSTREAM_URL | grep 'tar.xz' | sed 's/.*<a href=".*">\(.*\)<\/a>.*/\1/')
+mkdir -p $BUILD_DIR/bitstreams
+for b in $BITSTREAMS; do
+    curl $BITSTREAM_URL/$b | tar xJv -C $BUILD_DIR/bitstreams --wildcards '*.bin'
+done
+
+[ $SKIP_INSTALL ] || sudo -E install -d /lib/firmware
+[ $SKIP_INSTALL ] || sudo -E install -m 0644 $BUILD_DIR/bitstreams/*.bin /lib/firmware/
+
+. $SCRIPT_DIR/post_script
diff --git a/scripts/wrtd_ref_spec150t_adc_install.sh b/scripts/wrtd_ref_spec150t_adc_install.sh
index e897a8c33d685661f5d7c218187122e7f9e54a0e..a11014f02c9afef1564853150a68f44dda6631eb 100644
--- a/scripts/wrtd_ref_spec150t_adc_install.sh
+++ b/scripts/wrtd_ref_spec150t_adc_install.sh
@@ -4,9 +4,8 @@ PROJECT=wrtd_ref_spec150t_adc
 
 . ./pre_script
 
-bash $SCRIPT_DIR/wrtd_build.sh
+bash $SCRIPT_DIR/wrtd_ref_designs_install.sh
 bash $SCRIPT_DIR/spec_carrier_build.sh
-bash $SCRIPT_DIR/fmc_adc_100m_build.sh
 bash $SCRIPT_DIR/adc_lib_build.sh
 
 . $SCRIPT_DIR/post_script
diff --git a/scripts/wrtd_ref_svec_adc_x2_install.sh b/scripts/wrtd_ref_svec_adc_x2_install.sh
new file mode 100644
index 0000000000000000000000000000000000000000..bdc3cef3b7edb5830b47100ff85a9ed99f363413
--- /dev/null
+++ b/scripts/wrtd_ref_svec_adc_x2_install.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+PROJECT=wrtd_ref_svec_adc_x2
+
+. ./pre_script
+
+bash $SCRIPT_DIR/wrtd_ref_designs_install.sh
+bash $SCRIPT_DIR/svec_carrier_build.sh
+bash $SCRIPT_DIR/adc_lib_build.sh
+
+. $SCRIPT_DIR/post_script
diff --git a/scripts/wrtd_ref_svec_fd_x2_install.sh b/scripts/wrtd_ref_svec_fd_x2_install.sh
new file mode 100644
index 0000000000000000000000000000000000000000..4fbb5bed809b09164a755b0497b236723dba2092
--- /dev/null
+++ b/scripts/wrtd_ref_svec_fd_x2_install.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+PROJECT=wrtd_ref_svec_fd_x2
+
+. ./pre_script
+
+bash $SCRIPT_DIR/wrtd_ref_designs_install.sh
+bash $SCRIPT_DIR/svec_carrier_build.sh
+
+. $SCRIPT_DIR/post_script
diff --git a/scripts/wrtd_ref_svec_tdc_fd_install.sh b/scripts/wrtd_ref_svec_tdc_fd_install.sh
index 07cf2523311a24d35024f7c906a3ec0c7e49a85d..9573cd2fd838e0681e1ce8f0a31243da4e413d10 100644
--- a/scripts/wrtd_ref_svec_tdc_fd_install.sh
+++ b/scripts/wrtd_ref_svec_tdc_fd_install.sh
@@ -4,7 +4,7 @@ PROJECT=wrtd_ref_svec_tdc_fd
 
 . ./pre_script
 
-bash $SCRIPT_DIR/wrtd_build.sh
+bash $SCRIPT_DIR/wrtd_ref_designs_install.sh
 bash $SCRIPT_DIR/svec_carrier_build.sh
 
 . $SCRIPT_DIR/post_script
diff --git a/scripts/wrtd_ref_svec_tdc_x2_install.sh b/scripts/wrtd_ref_svec_tdc_x2_install.sh
new file mode 100644
index 0000000000000000000000000000000000000000..95aa057f1aca0469a2af3ebe6f226a1e1ae1f320
--- /dev/null
+++ b/scripts/wrtd_ref_svec_tdc_x2_install.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+PROJECT=wrtd_ref_svec_tdc_x2
+
+. ./pre_script
+
+bash $SCRIPT_DIR/wrtd_ref_designs_install.sh
+bash $SCRIPT_DIR/svec_carrier_build.sh
+
+. $SCRIPT_DIR/post_script
diff --git a/scripts/zio_build.sh b/scripts/zio_build.sh
index de54e76e9730a8a9ce7a1e63b986a4838e073cdf..e2c3696bd674331355fc3d1bd3ac4fd19979e26e 100644
--- a/scripts/zio_build.sh
+++ b/scripts/zio_build.sh
@@ -8,7 +8,7 @@ cd $BUILD_DIR
 
 [ -d $PROJECT ] || git clone https://ohwr.org/project/zio.git $PROJECT
 cd $PROJECT
-git checkout -B release v1.4.2
+git checkout -B release v1.4.4
 [ $SKIP_PATCH ] || [ -e $PATCH_DIR/$PROJECT.diff ] && patch -p1 < $PATCH_DIR/$PROJECT.diff
 [ $SKIP_BUILD ] || make -C drivers/zio
 [ $SKIP_INSTALL ] || sudo -E make -C drivers/zio modules_install