diff --git a/device/testing/linux-essential-mata/0001-Revert-tty-check-before-stopping-kthread.patch b/device/testing/linux-essential-mata/0001-Revert-tty-check-before-stopping-kthread.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4de5e33849b26bd2745ddb45655f4a5d5e305019
--- /dev/null
+++ b/device/testing/linux-essential-mata/0001-Revert-tty-check-before-stopping-kthread.patch
@@ -0,0 +1,29 @@
+From 7fc383ecf3a8913dfb89fb7e6a4d2e9376f91fcd Mon Sep 17 00:00:00 2001
+From: TAKIZAWA Fumiya <takizawa.fumiya34@gmail.com>
+Date: Sat, 9 May 2020 23:58:39 +0900
+Subject: [PATCH 1/6] Revert "tty: check before stopping kthread"
+
+This reverts commit d74871d364a32d28c70eb9f521807d8ca6e1968e.
+
+This is a workaround for a crash when CONFIG_VT=y
+---
+ drivers/tty/tty_buffer.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/drivers/tty/tty_buffer.c b/drivers/tty/tty_buffer.c
+index 92af201f9030..8917b6f87b04 100644
+--- a/drivers/tty/tty_buffer.c
++++ b/drivers/tty/tty_buffer.c
+@@ -132,8 +132,7 @@ void tty_buffer_free_all(struct tty_port *port)
+ 	buf->tail = &buf->sentinel;
+ 
+ 	atomic_set(&buf->mem_used, 0);
+-	if (!IS_ERR_OR_NULL(port->worker_thread))
+-		kthread_stop(port->worker_thread);
++	kthread_stop(port->worker_thread);
+ }
+ 
+ /**
+-- 
+2.26.2
+
diff --git a/device/testing/linux-essential-mata/0002-Revert-tty-move-tty_port-workqueue-to-be-a-kthread.patch b/device/testing/linux-essential-mata/0002-Revert-tty-move-tty_port-workqueue-to-be-a-kthread.patch
new file mode 100644
index 0000000000000000000000000000000000000000..908ad6a4889108b0ac1d9c3498f06c5da94005f5
--- /dev/null
+++ b/device/testing/linux-essential-mata/0002-Revert-tty-move-tty_port-workqueue-to-be-a-kthread.patch
@@ -0,0 +1,127 @@
+From d2b77ffe10854d1aa3d68c1c346a7d003faa50ca Mon Sep 17 00:00:00 2001
+From: TAKIZAWA Fumiya <takizawa.fumiya34@gmail.com>
+Date: Sat, 9 May 2020 23:59:08 +0900
+Subject: [PATCH 2/6] Revert "tty: move tty_port workqueue to be a kthread"
+
+This reverts commit 6504bb3e934293960287fcf31aba8fd58407d22a.
+
+This is a workaround for a crash when CONFIG_VT=y
+---
+ drivers/tty/tty_buffer.c | 27 +++++++--------------------
+ include/linux/tty.h      |  6 ++----
+ 2 files changed, 9 insertions(+), 24 deletions(-)
+
+diff --git a/drivers/tty/tty_buffer.c b/drivers/tty/tty_buffer.c
+index 8917b6f87b04..4706df20191b 100644
+--- a/drivers/tty/tty_buffer.c
++++ b/drivers/tty/tty_buffer.c
+@@ -71,7 +71,7 @@ void tty_buffer_unlock_exclusive(struct tty_port *port)
+ 	atomic_dec(&buf->priority);
+ 	mutex_unlock(&buf->lock);
+ 	if (restart)
+-		queue_kthread_work(&port->worker, &buf->work);
++		queue_work(system_unbound_wq, &buf->work);
+ }
+ EXPORT_SYMBOL_GPL(tty_buffer_unlock_exclusive);
+ 
+@@ -132,7 +132,6 @@ void tty_buffer_free_all(struct tty_port *port)
+ 	buf->tail = &buf->sentinel;
+ 
+ 	atomic_set(&buf->mem_used, 0);
+-	kthread_stop(port->worker_thread);
+ }
+ 
+ /**
+@@ -405,7 +404,7 @@ void tty_schedule_flip(struct tty_port *port)
+ 	 * flush_to_ldisc() sees buffer data.
+ 	 */
+ 	smp_store_release(&buf->tail->commit, buf->tail->used);
+-	queue_kthread_work(&port->worker, &buf->work);
++	queue_work(system_unbound_wq, &buf->work);
+ }
+ EXPORT_SYMBOL(tty_schedule_flip);
+ 
+@@ -473,7 +472,7 @@ receive_buf(struct tty_struct *tty, struct tty_buffer *head, int count)
+  *		 'consumer'
+  */
+ 
+-static void flush_to_ldisc(struct kthread_work *work)
++static void flush_to_ldisc(struct work_struct *work)
+ {
+ 	struct tty_port *port = container_of(work, struct tty_port, buf.work);
+ 	struct tty_bufhead *buf = &port->buf;
+@@ -563,20 +562,8 @@ void tty_buffer_init(struct tty_port *port)
+ 	init_llist_head(&buf->free);
+ 	atomic_set(&buf->mem_used, 0);
+ 	atomic_set(&buf->priority, 0);
++	INIT_WORK(&buf->work, flush_to_ldisc);
+ 	buf->mem_limit = TTYB_DEFAULT_MEM_LIMIT;
+-	init_kthread_work(&buf->work, flush_to_ldisc);
+-	init_kthread_worker(&port->worker);
+-	port->worker_thread = kthread_run(kthread_worker_fn, &port->worker,
+-					  "tty_worker_thread");
+-	if (IS_ERR(port->worker_thread)) {
+-		/*
+-		 * Not good, we can't unwind, this tty is going to be really
+-		 * sad...
+-		 */
+-		pr_err("Unable to start tty_worker_thread\n");
+-	}
+-
+-
+ }
+ 
+ /**
+@@ -604,15 +591,15 @@ void tty_buffer_set_lock_subclass(struct tty_port *port)
+ 
+ bool tty_buffer_restart_work(struct tty_port *port)
+ {
+-	return queue_kthread_work(&port->worker, &port->buf.work);
++	return queue_work(system_unbound_wq, &port->buf.work);
+ }
+ 
+ bool tty_buffer_cancel_work(struct tty_port *port)
+ {
+-	return kthread_cancel_work_sync(&port->buf.work);
++	return cancel_work_sync(&port->buf.work);
+ }
+ 
+ void tty_buffer_flush_work(struct tty_port *port)
+ {
+-	flush_kthread_work(&port->buf.work);
++	flush_work(&port->buf.work);
+ }
+diff --git a/include/linux/tty.h b/include/linux/tty.h
+index 1c1bb90f6819..99165b4e6a7b 100644
+--- a/include/linux/tty.h
++++ b/include/linux/tty.h
+@@ -12,7 +12,7 @@
+ #include <uapi/linux/tty.h>
+ #include <linux/rwsem.h>
+ #include <linux/llist.h>
+-#include <linux/kthread.h>
++
+ 
+ /*
+  * Lock subclasses for tty locks
+@@ -82,7 +82,7 @@ static inline char *flag_buf_ptr(struct tty_buffer *b, int ofs)
+ 
+ struct tty_bufhead {
+ 	struct tty_buffer *head;	/* Queue head */
+-	struct kthread_work work;
++	struct work_struct work;
+ 	struct mutex	   lock;
+ 	atomic_t	   priority;
+ 	struct tty_buffer sentinel;
+@@ -240,8 +240,6 @@ struct tty_port {
+ 						   based drain is needed else
+ 						   set to size of fifo */
+ 	struct kref		kref;		/* Ref counter */
+-	struct kthread_worker   worker;         /* worker thread */
+-	struct task_struct      *worker_thread; /* worker thread */
+ };
+ 
+ /*
+-- 
+2.26.2
+
diff --git a/device/testing/linux-essential-mata/0003-Revert-tty-add-tty_port_set_policy-function.patch b/device/testing/linux-essential-mata/0003-Revert-tty-add-tty_port_set_policy-function.patch
new file mode 100644
index 0000000000000000000000000000000000000000..442726226d863bad0c08e8304e8e95e3b684ba9b
--- /dev/null
+++ b/device/testing/linux-essential-mata/0003-Revert-tty-add-tty_port_set_policy-function.patch
@@ -0,0 +1,54 @@
+From 7a30026cccdf446246b39c3d4bb1fc5c26f2b5bf Mon Sep 17 00:00:00 2001
+From: TAKIZAWA Fumiya <takizawa.fumiya34@gmail.com>
+Date: Sun, 10 May 2020 00:00:14 +0900
+Subject: [PATCH 3/6] Revert "tty: add tty_port_set_policy function"
+
+This reverts commit 115aa3ef849b1c34cdc2f61c5aac3df22a8e1964.
+
+This is a workaround for a crash when CONFIG_VT=y
+---
+ drivers/tty/tty_port.c | 10 ----------
+ include/linux/tty.h    |  2 --
+ 2 files changed, 12 deletions(-)
+
+diff --git a/drivers/tty/tty_port.c b/drivers/tty/tty_port.c
+index 9f06fc11bc5f..482f33f20043 100644
+--- a/drivers/tty/tty_port.c
++++ b/drivers/tty/tty_port.c
+@@ -16,7 +16,6 @@
+ #include <linux/bitops.h>
+ #include <linux/delay.h>
+ #include <linux/module.h>
+-#include <uapi/linux/sched.h>
+ 
+ void tty_port_init(struct tty_port *port)
+ {
+@@ -599,12 +598,3 @@ int tty_port_open(struct tty_port *port, struct tty_struct *tty,
+ }
+ 
+ EXPORT_SYMBOL(tty_port_open);
+-
+-int tty_port_set_policy(struct tty_port *port, int policy, int sched_priority)
+-{
+-	struct sched_param param = { .sched_priority = sched_priority };
+-
+-	return sched_setscheduler(port->worker_thread, policy, &param);
+-}
+-EXPORT_SYMBOL_GPL(tty_port_set_policy);
+-
+diff --git a/include/linux/tty.h b/include/linux/tty.h
+index 99165b4e6a7b..812cdd8cff22 100644
+--- a/include/linux/tty.h
++++ b/include/linux/tty.h
+@@ -580,8 +580,6 @@ static inline int tty_port_users(struct tty_port *port)
+ {
+ 	return port->count + port->blocked_open;
+ }
+-extern int tty_port_set_policy(struct tty_port *port, int policy,
+-			       int sched_priority);
+ 
+ extern int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc);
+ extern int tty_unregister_ldisc(int disc);
+-- 
+2.26.2
+
diff --git a/device/testing/linux-essential-mata/0004-Revert-msm_serial_hs-make-the-Bluetooth-tty-thread-R.patch b/device/testing/linux-essential-mata/0004-Revert-msm_serial_hs-make-the-Bluetooth-tty-thread-R.patch
new file mode 100644
index 0000000000000000000000000000000000000000..276cc9bcbdaad7294ae428f0a5a8c2a74e84222b
--- /dev/null
+++ b/device/testing/linux-essential-mata/0004-Revert-msm_serial_hs-make-the-Bluetooth-tty-thread-R.patch
@@ -0,0 +1,35 @@
+From d0d3339500f7b50461492f934b08b953b6a1ba54 Mon Sep 17 00:00:00 2001
+From: TAKIZAWA Fumiya <takizawa.fumiya34@gmail.com>
+Date: Sun, 10 May 2020 00:00:32 +0900
+Subject: [PATCH 4/6] Revert "msm_serial_hs: make the Bluetooth tty thread RT"
+
+This reverts commit f5c9ea68f5c91907e406228710582ef3c23dbe39.
+
+This is a workaround for a crash when CONFIG_VT=y
+---
+ drivers/tty/serial/msm_serial_hs.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/drivers/tty/serial/msm_serial_hs.c b/drivers/tty/serial/msm_serial_hs.c
+index c699a662d0a9..1ea54d00e23e 100644
+--- a/drivers/tty/serial/msm_serial_hs.c
++++ b/drivers/tty/serial/msm_serial_hs.c
+@@ -62,7 +62,6 @@
+ #include <linux/ipc_logging.h>
+ #include <asm/irq.h>
+ #include <linux/kthread.h>
+-#include <uapi/linux/sched.h>
+ 
+ #include <linux/msm-sps.h>
+ #include <linux/platform_data/msm_serial_hs.h>
+@@ -3386,7 +3385,6 @@ static void  msm_serial_hs_rt_init(struct uart_port *uport)
+ 	msm_uport->pm_state = MSM_HS_PM_SUSPENDED;
+ 	mutex_unlock(&msm_uport->mtx);
+ 	pm_runtime_enable(uport->dev);
+-	tty_port_set_policy(&uport->state->port, SCHED_FIFO, 1);
+ }
+ 
+ static int msm_hs_runtime_suspend(struct device *dev)
+-- 
+2.26.2
+
diff --git a/device/testing/linux-essential-mata/0006-Add-condition-for-calling-mdss_fb_free_fb_ion_memory.patch b/device/testing/linux-essential-mata/0006-Add-condition-for-calling-mdss_fb_free_fb_ion_memory.patch
new file mode 100644
index 0000000000000000000000000000000000000000..2b4791ec09a80acc5a24e36e0f5410f660d3567e
--- /dev/null
+++ b/device/testing/linux-essential-mata/0006-Add-condition-for-calling-mdss_fb_free_fb_ion_memory.patch
@@ -0,0 +1,36 @@
+From a324fdc2d86c1c4ca091cfa7ece2899e57c49c3f Mon Sep 17 00:00:00 2001
+From: TAKIZAWA Fumiya <takizawa.fumiya34@gmail.com>
+Date: Sat, 9 May 2020 23:17:52 +0900
+Subject: [PATCH 6/6] Add condition for calling mdss_fb_free_fb_ion_memory()
+
+Vendor code release memory when closing framebuffer device.
+It causes ENODEV and so on.
+
+eg.
+$ cat /dev/random > /dev/fb0
+ash: write error: No such device
+
+In order to prevent this behavior, add condition for calling mdss_fb_free_fb_ion_memory() in mdss_fb_release_all().
+---
+ drivers/video/fbdev/msm/mdss_fb.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/video/fbdev/msm/mdss_fb.c b/drivers/video/fbdev/msm/mdss_fb.c
+index acf6d8f77bc8..2c9578ff8cfa 100644
+--- a/drivers/video/fbdev/msm/mdss_fb.c
++++ b/drivers/video/fbdev/msm/mdss_fb.c
+@@ -2937,8 +2937,10 @@ static int mdss_fb_release_all(struct fb_info *info, bool release_all)
+ 			      mfd->index, ret, task->comm, current->tgid);
+ 			return ret;
+ 		}
+-		if (mfd->fb_ion_handle)
++		if (release_all && mfd->fb_ion_handle) {
++			printk("mdss_fb_release_all: release_ion_memory");
+ 			mdss_fb_free_fb_ion_memory(mfd);
++		}
+ 
+ 		atomic_set(&mfd->ioctl_ref_cnt, 0);
+ 	} else {
+-- 
+2.26.2
+
diff --git a/device/testing/linux-essential-mata/APKBUILD b/device/testing/linux-essential-mata/APKBUILD
index 85996b19308c0d34f599d6741144f45a6be5fce9..86b104328289dd09e67deb930ba821590c28cbea 100644
--- a/device/testing/linux-essential-mata/APKBUILD
+++ b/device/testing/linux-essential-mata/APKBUILD
@@ -23,6 +23,13 @@ source="
 	$_config
 	cc-option_wrapper_Wno-frame-larger.patch
 	f_fs_module_inittest.patch
+	0001-Revert-tty-check-before-stopping-kthread.patch
+	0002-Revert-tty-move-tty_port-workqueue-to-be-a-kthread.patch
+	0003-Revert-tty-add-tty_port_set_policy-function.patch
+	0004-Revert-msm_serial_hs-make-the-Bluetooth-tty-thread-R.patch
+	0006-Add-condition-for-calling-mdss_fb_free_fb_ion_memory.patch
+	init-ignore-dm-parameter.patch
+	init-initramfs-disable-do_skip_initramfs.patch
 "
 builddir="$srcdir/$_repository-$_commit"
 _outdir="out"
@@ -45,4 +52,11 @@ package() {
 sha512sums="7d0d937c3482eaf2e30f5de29b62398201203d29674003980774d227896343d870e6f0f821a78489d7d5d76ce11d9d002e84ea471a72f193c5fc9b2b90c6173c  linux-essential-mata-d13a367745bb75601f7346d4d9d7525a6ca6e332.tar.gz
 481b67dc9e9d127f1204e0eb57231a2d396fea9479342a24726035d77422dfbedd51ea521533a6eb62031dded0ef933b8afa12e7db5fe51abebebd2d61bb5eba  config-essential-mata.aarch64
 9326ec6cdd89ca093c690ccafb4ceb0d4835063f672b74205997ea9dffe9e45b923e772be7c0daaa9fb2b71377e9b8519db9efd259404f28238cadd8431b4b45  cc-option_wrapper_Wno-frame-larger.patch
-c3968546a3cdd0abe0c7f32fcbdefeb7ca2b7f7507ad1d1ca214ac65a3a5ce930ca471024f5abd92e33a22801caffbfa5bb16e106479c0dec09eb1b60094ba3a  f_fs_module_inittest.patch"
+c3968546a3cdd0abe0c7f32fcbdefeb7ca2b7f7507ad1d1ca214ac65a3a5ce930ca471024f5abd92e33a22801caffbfa5bb16e106479c0dec09eb1b60094ba3a  f_fs_module_inittest.patch
+1a8cb6ed2cc9b81815160ec990c16385cbe94d71e1607c5968c24a5fa653128fc3e25dfdac861b03faa163d612251814d4c59f4c083258c0d9964c74504c462d  0001-Revert-tty-check-before-stopping-kthread.patch
+892a5414647ba609741382bea12de9e2731481fd109bc8febcf77210e1a8d672f22588b5086f27ec32d87b9aea1b0ab1a9e0556f7bd11ddcdfd6ab8b6a1904b0  0002-Revert-tty-move-tty_port-workqueue-to-be-a-kthread.patch
+94d8c6a9009fca6484d12cef0698b6e219a09bd82b9ed20eb109467f141514aa9f418988470e658ab340710fb910337645cc772ebe2e59547d329e0c35c9a2a6  0003-Revert-tty-add-tty_port_set_policy-function.patch
+89401939fbedfe4719de4706a09702504a92e171806788e597513b7dfca763f4a345895f963b300840fa126c628b43dc3836cf5b3958667b1e6993c1ef0e973e  0004-Revert-msm_serial_hs-make-the-Bluetooth-tty-thread-R.patch
+f226a33de5ca4b5919465bee3a2e68e2bfe376c56afcb2884d72d57d4a3c1a0627f1f71c0d4d28e7bf4b3e3cc4fb4122c2e3aeeb9637c41390d95fa9f5495a89  0006-Add-condition-for-calling-mdss_fb_free_fb_ion_memory.patch
+66ac924e2619994dad71a88223d62e911cc90c20f578eb1b0544f115de8367ea9767e7955245c70699f7af040bb8c42f9fa7aff60d4638f1e568a3b3662d30a6  init-ignore-dm-parameter.patch
+0f536e5acd0f5e6d6774918d8e226ae1f4edc486596fc5c93a110b4eb2555e0f1281f460065928a7f7a272b886f61f7967fe60cc4952ed1f4b37143bd2a28962  init-initramfs-disable-do_skip_initramfs.patch"
diff --git a/device/testing/linux-essential-mata/init-ignore-dm-parameter.patch b/device/testing/linux-essential-mata/init-ignore-dm-parameter.patch
new file mode 100644
index 0000000000000000000000000000000000000000..0dc6c254e7f67e58fe29f9f2c20fcf6eb5a40fbb
--- /dev/null
+++ b/device/testing/linux-essential-mata/init-ignore-dm-parameter.patch
@@ -0,0 +1,34 @@
+From 9eb681bb5e4166553fee08c2ff2aebae76f0e727 Mon Sep 17 00:00:00 2001
+From: Zhuowei Zhang <linux@worthdoingbadly.com>
+Date: Sat, 8 Dec 2018 00:42:49 -0800
+Subject: [PATCH] init: ignore dm= parameter
+
+The commit "CHROMIUM: dm: boot time specification of dm="
+(a058da83727d9f3df84c956d9b29d775a2a9d45f) added a new boot
+parameter for specifying dm partitions. This breaks postmarketOS's
+root partition mounting.
+
+Change the boot parameter to something the bootloader doesn't know
+about.
+
+Thanks to opendata26 for figuring this out.
+---
+ init/do_mounts_dm.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/init/do_mounts_dm.c b/init/do_mounts_dm.c
+index 7760705faffe..628b6a0c66d8 100644
+--- a/init/do_mounts_dm.c
++++ b/init/do_mounts_dm.c
+@@ -459,7 +459,7 @@ static void __init dm_setup_drives(void)
+ 	dm_setup_cleanup(devices);
+ }
+ 
+-__setup("dm=", dm_setup);
++__setup("dm_IGNORE=", dm_setup);
+ 
+ void __init dm_run_setup(void)
+ {
+-- 
+2.17.1
+
diff --git a/device/testing/linux-essential-mata/init-initramfs-disable-do_skip_initramfs.patch b/device/testing/linux-essential-mata/init-initramfs-disable-do_skip_initramfs.patch
new file mode 100644
index 0000000000000000000000000000000000000000..25fc10e27991ba52823c10b4915d467e0b6d0c71
--- /dev/null
+++ b/device/testing/linux-essential-mata/init-initramfs-disable-do_skip_initramfs.patch
@@ -0,0 +1,37 @@
+From 75dedb7524818dfa9904417fe1e5ac0c40291d89 Mon Sep 17 00:00:00 2001
+From: Zhuowei Zhang <linux@worthdoingbadly.com>
+Date: Tue, 27 Nov 2018 14:24:17 -0800
+Subject: [PATCH 2/2] init: initramfs: disable do_skip_initramfs
+
+On Android devices with A/B partition scheme, the initramfs is
+ignored when booting into the operating system. This breaks
+postmarketOS, which requires the initramfs.
+
+This reverts the change so the initramfs is always used.
+
+Based on a patch by erfanoabdi.
+---
+ init/initramfs.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/init/initramfs.c b/init/initramfs.c
+index bf3af10c500a..34af892143b2 100644
+--- a/init/initramfs.c
++++ b/init/initramfs.c
+@@ -622,11 +622,13 @@ static int __init populate_rootfs(void)
+ {
+ 	char *err;
+ 
++	/*
+ 	if (do_skip_initramfs) {
+ 		if (initrd_start)
+ 			free_initrd();
+ 		return default_rootfs();
+ 	}
++	*/
+ 
+ 	err = unpack_to_rootfs(__initramfs_start, __initramfs_size);
+ 	if (err)
+-- 
+2.17.1
+