diff --git a/device/testing/device-samsung-chagallwifi/APKBUILD b/device/testing/device-samsung-chagallwifi/APKBUILD
index 59ec4130af40df395a5890b6a453f95cfed14b72..8e90b0045064a75db362cb2d0c0825b746788862 100644
--- a/device/testing/device-samsung-chagallwifi/APKBUILD
+++ b/device/testing/device-samsung-chagallwifi/APKBUILD
@@ -3,16 +3,20 @@
 # Reference: <https://postmarketos.org/devicepkg>
 pkgname=device-samsung-chagallwifi
 pkgdesc="Samsung Galaxy Tab S 10.5"
-pkgver=0.1
-pkgrel=3
+pkgver=1
+pkgrel=0
 url="https://postmarketos.org"
 license="MIT"
 arch="armv7"
 options="!check !archcheck"
-depends="postmarketos-base linux-samsung-chagallwifi mkbootimg mesa-dri-swrast msm-fb-refresher"
+depends="postmarketos-base mkbootimg"
 makedepends="devicepkg-dev"
 source="deviceinfo"
-subpackages="$pkgname-nonfree-firmware:nonfree_firmware"
+subpackages="
+	$pkgname-kernel-downstream:kernel_downstream
+	$pkgname-kernel-mainline:kernel_mainline
+	$pkgname-nonfree-firmware:nonfree_firmware
+"
 
 build() {
 	devicepkg_build $startdir $pkgname
@@ -22,6 +26,18 @@ package() {
 	devicepkg_package $startdir $pkgname
 }
 
+kernel_downstream() {
+	pkgdesc="Display and wifi works (see device table for details)"
+	depends="linux-samsung-chagallwifi mesa-dri-swrast msm-fb-refresher"
+	devicepkg_subpackage_kernel $startdir $pkgname $subpkgname
+}
+
+kernel_mainline() {
+	pkgdesc="Mainline WIP (usb networking works but not much else)"
+	depends="linux-postmarketos-exynos5"
+	devicepkg_subpackage_kernel $startdir $pkgname $subpkgname
+}
+
 nonfree_firmware() {
 	pkgdesc="Non-free firmware for the Samsung Galaxy Tab S"
 	depends="firmware-samsung-chagall"
@@ -29,5 +45,5 @@ nonfree_firmware() {
 }
 
 sha512sums="
-b6dbcae026861dc9c31c804d0388ec24ceac313692b901b6d159134710892b89e798878cae8e41a26167b3c3b5e7f6360818cec84fdbd22fbcd77bf4a48dcc8b  deviceinfo
+3928540b95d988b0264da86c43bedd0c3e66f9b0d60a795fe26c976da383aee0d1a3819d1aa819af9637f7540c2cefdd2e1decf7b4dc060e6327d303d8e5cebc  deviceinfo
 "
diff --git a/device/testing/device-samsung-chagallwifi/deviceinfo b/device/testing/device-samsung-chagallwifi/deviceinfo
index b0c12e21cf62f9fa5e3c2e631a0caeae9ddf0529..b3bc6b7698856e0038327b627b314e7daa440a09 100644
--- a/device/testing/device-samsung-chagallwifi/deviceinfo
+++ b/device/testing/device-samsung-chagallwifi/deviceinfo
@@ -1,11 +1,14 @@
 # Reference: <https://postmarketos.org/deviceinfo>
-# Please use double quotes only. You can source this file in shell scripts.
+# Please use double quotes only. You can source this file in shell
+# scripts.
 
 deviceinfo_format_version="0"
 deviceinfo_name="Samsung Galaxy Tab S 10.5 WiFi"
 deviceinfo_manufacturer="Samsung"
 deviceinfo_codename="samsung-chagallwifi"
 deviceinfo_year="2014"
+deviceinfo_append_dtb_mainline="true"
+deviceinfo_dtb_mainline="exynos5420-chagall-wifi"
 deviceinfo_arch="armv7"
 
 # Device related
@@ -19,6 +22,8 @@ deviceinfo_screen_height="1600"
 deviceinfo_flash_method="heimdall-bootimg"
 deviceinfo_generate_bootimg="true"
 deviceinfo_bootimg_qcdt="false"
+deviceinfo_bootimg_append_seandroidenforce="true"
+deviceinfo_bootimg_mtk_mkimage="false"
 deviceinfo_bootimg_dtb_second="false"
 deviceinfo_flash_offset_base="0x10000000"
 deviceinfo_flash_offset_kernel="0x00008000"
@@ -26,6 +31,8 @@ deviceinfo_flash_offset_ramdisk="0x01000000"
 deviceinfo_flash_offset_second="0x00f00000"
 deviceinfo_flash_offset_tags="0x00000100"
 deviceinfo_flash_pagesize="2048"
+
+# Heimdall related
 deviceinfo_flash_heimdall_partition_kernel="BOOT"
 deviceinfo_flash_heimdall_partition_system="SYSTEM"
 
diff --git a/main/linux-postmarketos-exynos5/0009-ARM-decompressor-Flush-tlb-before-swiching-domain-0-.patch b/main/linux-postmarketos-exynos5/0009-ARM-decompressor-Flush-tlb-before-swiching-domain-0-.patch
new file mode 100644
index 0000000000000000000000000000000000000000..247f343d25650908413dcdd1bef817a3d0fb3baf
--- /dev/null
+++ b/main/linux-postmarketos-exynos5/0009-ARM-decompressor-Flush-tlb-before-swiching-domain-0-.patch
@@ -0,0 +1,37 @@
+From 25b22fa8ed1bd03d54cc67e57ab039fa25524b83 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= <arve@android.com>
+Date: Fri, 30 Nov 2012 17:05:40 -0800
+Subject: [PATCH 09/16] ARM: decompressor: Flush tlb before swiching domain 0
+ to client mode
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+If the bootloader used a page table that is incompatible with domain 0
+in client mode, and boots with the mmu on, then swithing domain 0 to
+client mode causes a fault if we don't flush the tlb after updating
+the page table pointer.
+
+v2: Add ISB before loading dacr.
+
+Signed-off-by: Arve Hjønnevåg <arve@android.com>
+---
+ arch/arm/boot/compressed/head.S | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
+index b1cb1972361b..82c220ddf712 100644
+--- a/arch/arm/boot/compressed/head.S
++++ b/arch/arm/boot/compressed/head.S
+@@ -895,6 +895,8 @@ __armv7_mmu_cache_on:
+ 		bic     r6, r6, #1 << 31        @ 32-bit translation system
+ 		bic     r6, r6, #(7 << 0) | (1 << 4)	@ use only ttbr0
+ 		mcrne	p15, 0, r3, c2, c0, 0	@ load page table pointer
++		mcrne	p15, 0, r0, c8, c7, 0	@ flush I,D TLBs
++		mcr	p15, 0, r0, c7, c5, 4	@ ISB
+ 		mcrne	p15, 0, r1, c3, c0, 0	@ load domain access control
+ 		mcrne   p15, 0, r6, c2, c0, 2   @ load ttb control
+ #endif
+-- 
+2.34.1
+
diff --git a/main/linux-postmarketos-exynos5/0010-dt-bindings-arm-samsung-document-Chagall-WiFi-board-.patch b/main/linux-postmarketos-exynos5/0010-dt-bindings-arm-samsung-document-Chagall-WiFi-board-.patch
new file mode 100644
index 0000000000000000000000000000000000000000..7d059b1f72284a923831af77dccdfe3d665b6ee9
--- /dev/null
+++ b/main/linux-postmarketos-exynos5/0010-dt-bindings-arm-samsung-document-Chagall-WiFi-board-.patch
@@ -0,0 +1,30 @@
+From ef6559982b265ccc27a68085c521ed26b5efbd85 Mon Sep 17 00:00:00 2001
+From: Henrik Grimler <henrik@grimler.se>
+Date: Mon, 20 Dec 2021 11:47:38 +0100
+Subject: [PATCH 10/16] dt-bindings: arm: samsung: document Chagall WiFi board
+ binding
+
+Add binding for Samsung Galaxy Tab S 10.5", based on Exynos 5420 with
+codename chagall-wifi. It was released in 2014 and has several siblings
+with similar hardware.
+
+Signed-off-by: Henrik Grimler <henrik@grimler.se>
+---
+ .../devicetree/bindings/arm/samsung/samsung-boards.yaml          | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Documentation/devicetree/bindings/arm/samsung/samsung-boards.yaml b/Documentation/devicetree/bindings/arm/samsung/samsung-boards.yaml
+index ef6dc14be4b5..c385e6bfaed1 100644
+--- a/Documentation/devicetree/bindings/arm/samsung/samsung-boards.yaml
++++ b/Documentation/devicetree/bindings/arm/samsung/samsung-boards.yaml
+@@ -140,6 +140,7 @@ properties:
+         items:
+           - enum:
+               - insignal,arndale-octa           # Insignal Arndale Octa
++              - samsung,chagall-wifi            # Samsung SM-T800
+               - samsung,smdk5420                # Samsung SMDK5420 eval
+           - const: samsung,exynos5420
+           - const: samsung,exynos5
+-- 
+2.34.1
+
diff --git a/main/linux-postmarketos-exynos5/0011-ARM-exynos-only-do-SMC_CMD_CPU1BOOT-call-on-Exynos4.patch b/main/linux-postmarketos-exynos5/0011-ARM-exynos-only-do-SMC_CMD_CPU1BOOT-call-on-Exynos4.patch
new file mode 100644
index 0000000000000000000000000000000000000000..89f7825c54d81dbd2832e1139e25d2ed494fcb25
--- /dev/null
+++ b/main/linux-postmarketos-exynos5/0011-ARM-exynos-only-do-SMC_CMD_CPU1BOOT-call-on-Exynos4.patch
@@ -0,0 +1,62 @@
+From dae39d461569897f3ae0aedde041dfb8cfcc4f96 Mon Sep 17 00:00:00 2001
+From: Henrik Grimler <henrik@grimler.se>
+Date: Mon, 18 Oct 2021 21:43:08 +0200
+Subject: [PATCH 11/16] ARM: exynos: only do SMC_CMD_CPU1BOOT call on Exynos4
+
+On Exynos5 the call is simply ignored by most variants of the
+trustzone firmware.  However, on some devices it instead causes the
+device to hang, so let's avoid the call for the SoCs where it should
+not be needed.
+
+To see that the call is ignored, we can look into sboot/tzsw.  On most
+of the Exynos{4,5} devices the part of sboot/tzsw that seem to handle
+the secure monitor calls is quite easy to recognise, the SMC number is
+compared to known ones, and if equal it branches to the relevant
+function.  In assembly this looks something like:
+
+;-- handle_smc:
+0x00000514      650070e3       cmn r0, 0x65
+0x00000518      0a00000a       beq loc.smc_cmd_reg
+0x0000051c      010070e3       cmn r0, 1
+0x00000520      6c00000a       beq loc.smc_cmd_init
+0x00000524      020070e3       cmn r0, 2
+0x00000528      6b00000a       beq loc.smc_cmd_info
+0x0000052c      030070e3       cmn r0, 3
+0x00000530      6e00000a       beq loc.smc_cmd_sleep
+0x00000534      060070e3       cmn r0, 6
+0x00000538      ae00000a       beq loc.smc_cmd_save_state
+0x0000053c      070070e3       cmn r0, 7
+0x00000540      b400000a       beq loc.smc_cmd_standby
+0x00000544      2b01001a       bne loc.smc_return_minus1
+
+where above example is from exynos5420-arndale-octa.  As can be seen
+the case where r0 is 4 (i.e. SMC_CMD_CPU1BOOT) is not handled.  The
+annotations are taken from github.com/hsnaves/exynos5410-firmware,
+where a large part of the exynos5410 trustzone firmware has been
+reverse-engineered.
+
+Signed-off-by: Henrik Grimler <henrik@grimler.se>
+Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
+---
+ arch/arm/mach-exynos/firmware.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/mach-exynos/firmware.c b/arch/arm/mach-exynos/firmware.c
+index 2eaf2dbb8e81..2da5b60b59e2 100644
+--- a/arch/arm/mach-exynos/firmware.c
++++ b/arch/arm/mach-exynos/firmware.c
+@@ -60,8 +60,10 @@ static int exynos_cpu_boot(int cpu)
+ 	/*
+ 	 * Exynos3250 doesn't need to send smc command for secondary CPU boot
+ 	 * because Exynos3250 removes WFE in secure mode.
++	 *
++	 * On Exynos5 devices the call is ignored by trustzone firmware.
+ 	 */
+-	if (soc_is_exynos3250())
++	if (!soc_is_exynos4210() && !soc_is_exynos4412())
+ 		return 0;
+ 
+ 	/*
+-- 
+2.34.1
+
diff --git a/main/linux-postmarketos-exynos5/0012-ARM-dts-Add-support-for-Samsung-Chagall-WiFi.patch b/main/linux-postmarketos-exynos5/0012-ARM-dts-Add-support-for-Samsung-Chagall-WiFi.patch
new file mode 100644
index 0000000000000000000000000000000000000000..d1d34c7272f84de201153800741b1e49cfb6c6e9
--- /dev/null
+++ b/main/linux-postmarketos-exynos5/0012-ARM-dts-Add-support-for-Samsung-Chagall-WiFi.patch
@@ -0,0 +1,826 @@
+From 5464814ae6af0b7abbcce9a76f772fee7977d4f5 Mon Sep 17 00:00:00 2001
+From: Henrik Grimler <henrik@grimler.se>
+Date: Wed, 27 Jan 2021 16:04:46 +0100
+Subject: [PATCH 12/16] ARM: dts: Add support for Samsung Chagall WiFi
+
+Chagall WiFi, with product name Samsung Galaxy Tab S 10.5", is based
+on Exynos 5420.  This device is one of several tablet models released
+in 2014 based on Exynos 5420.
+
+The device tree added here contains support for:
+
+- UART
+- eMMC
+- SD card
+- USB
+
+CCI has been disabled in the hardware, enabling it would require
+(de-)soldering a resistor on the board.  Trying to boot with it
+enabled in kernel makes the device hang when CCI is probed.
+Exynos5420-arndale-octa also has had CCI disabled due to issues, see
+commit 25217fef3551 ("ARM: dts: disable CCI on exynos5420 based
+arndale-octa").
+
+Signed-off-by: Henrik Grimler <henrik@grimler.se>
+---
+ arch/arm/boot/dts/Makefile                    |   1 +
+ arch/arm/boot/dts/exynos5420-chagall-wifi.dts |  75 ++
+ .../dts/exynos5420-galaxy-tab-common.dtsi     | 692 ++++++++++++++++++
+ 3 files changed, 768 insertions(+)
+ create mode 100644 arch/arm/boot/dts/exynos5420-chagall-wifi.dts
+ create mode 100644 arch/arm/boot/dts/exynos5420-galaxy-tab-common.dtsi
+
+diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
+index 0de64f237cd8..088fcedb3212 100644
+--- a/arch/arm/boot/dts/Makefile
++++ b/arch/arm/boot/dts/Makefile
+@@ -220,6 +220,7 @@ dtb-$(CONFIG_ARCH_EXYNOS5) += \
+ 	exynos5420-arndale-octa.dtb \
+ 	exynos5420-peach-pit.dtb \
+ 	exynos5420-smdk5420.dtb \
++	exynos5420-chagall-wifi.dtb \
+ 	exynos5422-odroidhc1.dtb \
+ 	exynos5422-odroidxu3.dtb \
+ 	exynos5422-odroidxu3-lite.dtb \
+diff --git a/arch/arm/boot/dts/exynos5420-chagall-wifi.dts b/arch/arm/boot/dts/exynos5420-chagall-wifi.dts
+new file mode 100644
+index 000000000000..1319344a2c74
+--- /dev/null
++++ b/arch/arm/boot/dts/exynos5420-chagall-wifi.dts
+@@ -0,0 +1,75 @@
++// SPDX-License-Identifier: GPL-2.0
++/*
++ * Samsung's Exynos5420 Chagall WiFi board device tree source
++ *
++ * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
++ *		http://www.samsung.com
++ * Copyright (c) 2022 Henrik Grimler
++ */
++
++/dts-v1/;
++#include "exynos5420-galaxy-tab-common.dtsi"
++
++/ {
++	model = "Samsung Chagall WiFi based on Exynos5420";
++	compatible = "samsung,chagall-wifi", "samsung,exynos5420", \
++		     "samsung,exynos5";
++};
++
++&ldo15_reg {
++	/* Unused */
++	regulator-name = "VDD_LDO15";
++	regulator-min-microvolt = <3300000>;
++	regulator-max-microvolt = <3300000>;
++};
++
++&ldo17_reg {
++	regulator-name = "VDD_IRLED_3V3";
++	regulator-min-microvolt = <3300000>;
++	regulator-max-microvolt = <3350000>;
++	regulator-always-on;
++	regulator-boot-on;
++
++	regulator-state-mem {
++		regulator-off-in-suspend;
++	};
++};
++
++&ldo28_reg {
++	/* Unused */
++	regulator-name = "VDD_LDO28";
++	regulator-min-microvolt = <3300000>;
++	regulator-max-microvolt = <3300000>;
++};
++
++&ldo29_reg {
++	regulator-name = "VDD_TCON_1V8";
++	regulator-min-microvolt = <1900000>;
++	regulator-max-microvolt = <1900000>;
++
++	regulator-state-mem {
++		regulator-off-in-suspend;
++	};
++};
++
++&ldo31_reg {
++	regulator-name = "VDD_GRIP_1V8";
++	regulator-min-microvolt = <1800000>;
++	regulator-max-microvolt = <1800000>;
++	regulator-always-on;
++	regulator-boot-on;
++
++	regulator-state-mem {
++		regulator-off-in-suspend;
++	};
++};
++
++&ldo32_reg {
++	regulator-name = "VDD_TSP_1V8";
++	regulator-min-microvolt = <1900000>;
++	regulator-max-microvolt = <1900000>;
++
++	regulator-state-mem {
++		regulator-off-in-suspend;
++	};
++};
+diff --git a/arch/arm/boot/dts/exynos5420-galaxy-tab-common.dtsi b/arch/arm/boot/dts/exynos5420-galaxy-tab-common.dtsi
+new file mode 100644
+index 000000000000..b3f5a50ef6d5
+--- /dev/null
++++ b/arch/arm/boot/dts/exynos5420-galaxy-tab-common.dtsi
+@@ -0,0 +1,692 @@
++// SPDX-License-Identifier: GPL-2.0
++/*
++ * Base DT for Samsung's family of tablets based on Exynos5420.
++ *
++ * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
++ *		http://www.samsung.com
++ * Copyright (c) 2022 Henrik Grimler
++ */
++
++/dts-v1/;
++#include "exynos5420.dtsi"
++#include "exynos5420-cpus.dtsi"
++#include <dt-bindings/input/input.h>
++#include <dt-bindings/gpio/gpio.h>
++#include <dt-bindings/clock/samsung,s2mps11.h>
++
++/ {
++	chassis-type = "tablet";
++
++	/*
++	 * To successfully boot the mainline kernel with the stock
++	 * bootloader (SBOOT), the tlb needs to be flushed after the
++	 * page table pointer has been updated in __common_mmu_cache_on.
++	 * The same hack is also needed to boot exynos4412-i9300 with
++	 * stock bootloader, and probably other Samsung devices of
++	 * similar age.  See
++	 * https://lore.kernel.org/all/1355276466-18295-1-git-send-email-arve@android.com
++	 * for more details.
++	 */
++
++	chosen {
++		stdout-path = "serial2:115200n8";
++	};
++
++	memory@20000000 {
++		device_type = "memory";
++		reg = <0x20000000 0xc0000000>;
++	};
++
++	firmware@2073000 {
++		compatible = "samsung,secure-firmware";
++		reg = <0x02073000 0x1000>;
++	};
++
++	fixed-rate-clocks {
++		oscclk {
++			compatible = "samsung,exynos5420-oscclk";
++			clock-frequency = <24000000>;
++		};
++	};
++
++	gpio-keys {
++		compatible = "gpio-keys";
++		pinctrl-names = "default";
++
++		key-power {
++			debounce-interval = <10>;
++			gpios = <&gpx2 2 GPIO_ACTIVE_LOW>;
++			label = "Power";
++			linux,code = <KEY_POWER>;
++			wakeup-source;
++		};
++
++		key-home {
++			debounce-interval = <10>;
++			gpios = <&gpx0 5 GPIO_ACTIVE_LOW>;
++			label = "Home";
++			linux,code = <KEY_HOME>;
++			wakeup-source;
++		};
++
++		key-volume-up {
++			debounce-interval = <10>;
++			gpios = <&gpx0 2 GPIO_ACTIVE_LOW>;
++			label = "Volume Up";
++			linux,code = <KEY_VOLUMEUP>;
++		};
++
++		key-volume-down {
++			debounce-interval = <10>;
++			gpios = <&gpx0 3 GPIO_ACTIVE_LOW>;
++			label = "Volume Down";
++			linux,code = <KEY_VOLUMEDOWN>;
++		};
++	};
++};
++
++&cci {
++	/* CCI is disabled in hardware */
++	status = "disabled";
++};
++
++&cpu0 {
++	cpu-supply = <&buck2_reg>;
++};
++
++&cpu4 {
++	cpu-supply = <&buck6_reg>;
++};
++
++&gpu {
++	status = "okay";
++	mali-supply = <&buck4_reg>;
++};
++
++&hsi2c_7 {
++	status = "okay";
++
++	pmic@66 {
++		compatible = "samsung,s2mps11-pmic";
++		reg = <0x66>;
++
++		interrupt-parent = <&gpx3>;
++		interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
++		pinctrl-names = "default";
++		pinctrl-0 = <&s2mps11_irq>;
++
++		s2mps11_osc: clocks {
++			compatible = "samsung,s2mps11-clk";
++			#clock-cells = <1>;
++			clock-output-names = "s2mps11_ap", "s2mps11_cp",
++					     "s2mps11_bt";
++		};
++
++		regulators {
++			buck1_reg: BUCK1 {
++				regulator-name = "VDD_MIF_1V1";
++				regulator-min-microvolt = <700000>;
++				regulator-max-microvolt = <1300000>;
++				regulator-always-on;
++				regulator-boot-on;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			buck2_reg: BUCK2 {
++				regulator-name = "VDD_ARM_1V0";
++				regulator-min-microvolt = <800000>;
++				regulator-max-microvolt = <1500000>;
++				regulator-always-on;
++				regulator-boot-on;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			buck3_reg: BUCK3 {
++				regulator-name = "VDD_INT_1V0";
++				regulator-min-microvolt = <800000>;
++				regulator-max-microvolt = <1400000>;
++				regulator-always-on;
++				regulator-boot-on;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			buck4_reg: BUCK4 {
++				regulator-name = "VDD_G3D_1V0";
++				regulator-min-microvolt = <700000>;
++				regulator-max-microvolt = <1400000>;
++				regulator-always-on;
++				regulator-boot-on;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			buck5_reg: BUCK5 {
++				regulator-name = "VDD_MEM_1V2";
++				regulator-min-microvolt = <1200000>;
++				regulator-max-microvolt = <1200000>;
++				regulator-always-on;
++				regulator-boot-on;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++
++			};
++
++			buck6_reg: BUCK6 {
++				regulator-name = "VDD_KFC_1V0";
++				regulator-min-microvolt = <800000>;
++				regulator-max-microvolt = <1500000>;
++				regulator-always-on;
++				regulator-boot-on;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			buck7_reg: BUCK7 {
++				regulator-name = "VIN_LLDO_1V4";
++				regulator-min-microvolt = <1200000>;
++				regulator-max-microvolt = <1500000>;
++				regulator-always-on;
++			};
++
++			buck8_reg: BUCK8 {
++				regulator-name = "VIN_MLDO_2V0";
++				regulator-min-microvolt = <1800000>;
++				regulator-max-microvolt = <2100000>;
++				regulator-always-on;
++			};
++
++			buck9_reg: BUCK9 {
++				regulator-name = "VIN_HLDO_3V5";
++				regulator-min-microvolt = <3000000>;
++				regulator-max-microvolt = <3500000>;
++				regulator-always-on;
++			};
++
++			buck10_reg: BUCK10 {
++				regulator-name = "VDD_CAM_ISP_1V0";
++				regulator-min-microvolt = <750000>;
++				regulator-max-microvolt = <3550000>;
++			};
++
++			ldo1_reg: LDO1 {
++				regulator-name = "VDD_ALIVE_1.0V";
++				regulator-min-microvolt = <1000000>;
++				regulator-max-microvolt = <1000000>;
++				regulator-always-on;
++			};
++
++			ldo2_reg: LDO2 {
++				regulator-name = "VDD_APIO_1V8";
++				regulator-min-microvolt = <1800000>;
++				regulator-max-microvolt = <1800000>;
++				regulator-always-on;
++				regulator-boot-on;
++
++				regulator-state-mem {
++					regulator-on-in-suspend;
++				};
++			};
++
++			ldo3_reg: LDO3 {
++				regulator-name = "VDD_APIO_MMC01_1V8";
++				regulator-min-microvolt = <1800000>;
++				regulator-max-microvolt = <1800000>;
++				regulator-always-on;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			ldo4_reg: LDO4 {
++				regulator-name = "VDD_ADC_1V8";
++				regulator-min-microvolt = <1800000>;
++				regulator-max-microvolt = <1800000>;
++				regulator-always-on;
++				regulator-boot-on;
++
++				regulator-state-mem {
++					regulator-on-in-suspend;
++				};
++			};
++
++			ldo5_reg: LDO5 {
++				/* Unused */
++				regulator-name = "VDD_LDO5";
++				regulator-min-microvolt = <1800000>;
++				regulator-max-microvolt = <1800000>;
++			};
++
++			ldo6_reg: LDO6 {
++				regulator-name = "VDD_MIPI_1V0";
++				regulator-min-microvolt = <1000000>;
++				regulator-max-microvolt = <1000000>;
++				regulator-always-on;
++				regulator-boot-on;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			ldo7_reg: LDO7 {
++				regulator-name = "VDD_MIPI_PLL_ABB1_18V";
++				regulator-min-microvolt = <1800000>;
++				regulator-max-microvolt = <1800000>;
++				regulator-always-on;
++				regulator-boot-on;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			ldo8_reg: LDO8 {
++				/* Unused */
++				regulator-name = "VDD_LDO8";
++				regulator-min-microvolt = <1800000>;
++				regulator-max-microvolt = <1800000>;
++			};
++
++			ldo9_reg: LDO9 {
++				regulator-name = "VDD_UOTG_3V0";
++				regulator-min-microvolt = <3000000>;
++				regulator-max-microvolt = <3000000>;
++				regulator-always-on;
++				regulator-boot-on;
++
++				regulator-state-mem {
++					regulator-on-in-suspend;
++				};
++			};
++
++			ldo10_reg: LDO10 {
++				regulator-name = "VDDQ_PRE_1V8";
++				regulator-min-microvolt = <1800000>;
++				regulator-max-microvolt = <1800000>;
++				regulator-always-on;
++				regulator-boot-on;
++
++				regulator-state-mem {
++					regulator-on-in-suspend;
++				};
++			};
++
++			ldo11_reg: LDO11 {
++				regulator-name = "VDD_HSIC_1V0";
++				regulator-min-microvolt = <1000000>;
++				regulator-max-microvolt = <1000000>;
++				regulator-always-on;
++				regulator-boot-on;
++
++				regulator-state-mem {
++					regulator-on-in-suspend;
++				};
++			};
++
++			ldo12_reg: LDO12 {
++				regulator-name = "VDD_HSIC_1V8";
++				regulator-min-microvolt = <1800000>;
++				regulator-max-microvolt = <1800000>;
++				regulator-always-on;
++				regulator-boot-on;
++
++				regulator-state-mem {
++					regulator-on-in-suspend;
++				};
++			};
++
++			ldo13_reg: LDO13 {
++				regulator-name = "VDD_APIO_MMC2_2V8";
++				regulator-min-microvolt = <1800000>;
++				regulator-max-microvolt = <2800000>;
++				regulator-boot-on;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			ldo14_reg: LDO14 {
++				regulator-name = "VDD_MOTOR_3V0";
++				regulator-min-microvolt = <3000000>;
++				regulator-max-microvolt = <3000000>;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			ldo15_reg: LDO15 {
++				regulator-name = "VDD_LDO15";
++				/*
++				 * LDO15 varies between devices and is
++				 * specified in the device dts
++				 */
++			};
++
++			ldo16_reg: LDO16 {
++				regulator-name = "VDD_AP_2V8";
++				regulator-min-microvolt = <2800000>;
++				regulator-max-microvolt = <2800000>;
++				regulator-always-on;
++				regulator-boot-on;
++
++				regulator-state-mem {
++					regulator-on-in-suspend;
++				};
++			};
++
++			ldo17_reg: LDO17 {
++				regulator-name = "VDD_LDO17";
++				/*
++				 * LDO17 varies between devices and is
++				 * specified in the device dts
++				 */
++			};
++
++			ldo18_reg: LDO18 {
++				/* Unused */
++				regulator-name = "VDD_LDO18";
++				regulator-min-microvolt = <1800000>;
++				regulator-max-microvolt = <1800000>;
++			};
++
++
++			ldo19_reg: LDO19 {
++				regulator-name = "VDD_VTF_2V8";
++				regulator-min-microvolt = <2800000>;
++				regulator-max-microvolt = <2800000>;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			ldo20_reg: LDO20 {
++				regulator-name = "VDD_CAM1_CAM_1V8";
++				regulator-min-microvolt = <1800000>;
++				regulator-max-microvolt = <1800000>;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			ldo21_reg: LDO21 {
++				regulator-name = "VDD_CAM_IO_1V8";
++				regulator-min-microvolt = <1800000>;
++				regulator-max-microvolt = <1800000>;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			ldo22_reg: LDO22 {
++				regulator-name = "VDD_CAM0_S_CORE_1V1";
++				regulator-min-microvolt = <1050000>;
++				regulator-max-microvolt = <1200000>;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			ldo23_reg: LDO23 {
++				regulator-name = "VDD_MIFS_1V1";
++				regulator-min-microvolt = <800000>;
++				regulator-max-microvolt = <1100000>;
++				regulator-always-on;
++
++				regulator-state-mem {
++					regulator-on-in-suspend;
++				};
++			};
++
++			ldo24_reg: LDO24 {
++				regulator-name = "VDD_TSP_3V3";
++				regulator-min-microvolt = <3300000>;
++				regulator-max-microvolt = <3300000>;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			ldo25_reg: LDO25 {
++				/* Unused */
++				regulator-name = "VDD_LDO25";
++				regulator-min-microvolt = <800000>;
++				regulator-max-microvolt = <3950000>;
++			};
++
++			ldo26_reg: LDO26 {
++				regulator-name = "VDD_CAM0_AF_2V8";
++				regulator-min-microvolt = <2800000>;
++				regulator-max-microvolt = <2800000>;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			ldo27_reg: LDO27 {
++				regulator-name = "VDD_G3DS_1V0";
++				regulator-min-microvolt = <800000>;
++				regulator-max-microvolt = <1000000>;
++				regulator-always-on;
++
++				regulator-state-mem {
++					regulator-on-in-suspend;
++				};
++			};
++
++			ldo28_reg: LDO28 {
++				regulator-name = "VDD_LDO28";
++				/*
++				 * LDO28 varies between devices and is
++				 * specified in the device dts
++				 */
++			};
++
++			ldo29_reg: LDO29 {
++				regulator-name = "VDD_LDO29";
++				/*
++				 * LDO29 varies between devices and is
++				 * specified in the device dts
++				 */
++			};
++
++			ldo30_reg: LDO30 {
++				regulator-name = "VDD_TOUCH_1V8";
++				regulator-min-microvolt = <1900000>;
++				regulator-max-microvolt = <1900000>;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			ldo31_reg: LDO31 {
++				regulator-name = "VDD_LDO31";
++				/*
++				 * LDO31 varies between devices and is
++				 * specified in the device dts
++				 */
++			};
++
++			ldo32_reg: LDO32 {
++				regulator-name = "VDD_LDO32";
++				/*
++				 * LDO32 varies between devices and is
++				 * specified in the device dts
++				 */
++			};
++
++			ldo33_reg: LDO33 {
++				regulator-name = "VDD_MHL_1V8";
++				regulator-min-microvolt = <1800000>;
++				regulator-max-microvolt = <1800000>;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			ldo34_reg: LDO34 {
++				regulator-name = "VDD_MHL_3V3";
++				regulator-min-microvolt = <3300000>;
++				regulator-max-microvolt = <3300000>;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			ldo35_reg: LDO35 {
++				regulator-name = "VDD_SIL_1V2";
++				regulator-min-microvolt = <1200000>;
++				regulator-max-microvolt = <1200000>;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++
++			ldo36_reg: LDO36 {
++				/* Unused */
++				regulator-name = "VDD_LDO36";
++				regulator-min-microvolt = <800000>;
++				regulator-max-microvolt = <3950000>;
++			};
++
++			ldo37_reg: LDO37 {
++				/* Unused */
++				regulator-name = "VDD_LDO37";
++				regulator-min-microvolt = <800000>;
++				regulator-max-microvolt = <3950000>;
++			};
++
++			ldo38_reg: LDO38 {
++				regulator-name = "VDD_KEY_LED_3V3";
++				regulator-min-microvolt = <2500000>;
++				regulator-max-microvolt = <3300000>;
++
++				regulator-state-mem {
++					regulator-off-in-suspend;
++				};
++			};
++		};
++	};
++};
++
++&mixer {
++	status = "okay";
++};
++
++/* Internal storage */
++&mmc_0 {
++	status = "okay";
++	bus-width = <8>;
++	cap-mmc-highspeed;
++	card-detect-delay = <200>;
++	mmc-hs200-1_8v;
++	non-removable;
++	pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_bus1 &sd0_bus4 &sd0_bus8>;
++	pinctrl-names = "default";
++	samsung,dw-mshc-ciu-div = <3>;
++	samsung,dw-mshc-ddr-timing = <0 2>;
++	samsung,dw-mshc-sdr-timing = <0 4>;
++	vqmmc-supply = <&ldo3_reg>;
++};
++
++/* External sdcard */
++&mmc_2 {
++	status = "okay";
++	bus-width = <4>;
++	cap-sd-highspeed;
++	card-detect-delay = <200>;
++	cd-gpios = <&gpx2 4 GPIO_ACTIVE_LOW>;
++	pinctrl-0 = <&sd2_clk &sd2_cmd &mmc2_cd &sd2_bus1 &sd2_bus4>;
++	pinctrl-names = "default";
++	samsung,dw-mshc-ciu-div = <3>;
++	samsung,dw-mshc-ddr-timing = <0 2>;
++	samsung,dw-mshc-sdr-timing = <0 4>;
++	sd-uhs-sdr50;
++	vmmc-supply = <&ldo19_reg>;
++	vqmmc-supply = <&ldo13_reg>;
++};
++
++&pinctrl_0 {
++	mmc2_cd: mmc2-cd {
++		samsung,pins = "gpx2-4";
++		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
++	};
++
++	s2mps11_irq: s2mps11-irq {
++		samsung,pins = "gpx3-0";
++		samsung,pin-function = <EXYNOS_PIN_FUNC_F>;
++		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
++		samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>;
++	};
++};
++
++&rtc {
++	status = "okay";
++	clocks = <&clock CLK_RTC>, <&s2mps11_osc S2MPS11_CLK_AP>;
++	clock-names = "rtc", "rtc_src";
++};
++
++&tmu_cpu0 {
++	vtmu-supply = <&ldo10_reg>;
++};
++
++&tmu_cpu1 {
++	vtmu-supply = <&ldo10_reg>;
++};
++
++&tmu_cpu2 {
++	vtmu-supply = <&ldo10_reg>;
++};
++
++&tmu_cpu3 {
++	vtmu-supply = <&ldo10_reg>;
++};
++
++&tmu_gpu {
++	vtmu-supply = <&ldo10_reg>;
++};
++
++&usbdrd_dwc3_0 {
++	dr_mode = "peripheral";
++};
++
++&usbdrd_dwc3_1 {
++	dr_mode = "peripheral";
++};
++
++&usbdrd3_0 {
++	vdd33-supply = <&ldo9_reg>;
++	vdd10-supply = <&ldo11_reg>;
++};
++
++&usbdrd3_1 {
++	vdd33-supply = <&ldo9_reg>;
++	vdd10-supply = <&ldo11_reg>;
++};
+-- 
+2.34.1
+
diff --git a/main/linux-postmarketos-exynos5/APKBUILD b/main/linux-postmarketos-exynos5/APKBUILD
index d05e73471dba273ddd505203f3f8e74885ef625f..3c62901f0f0c43cf82730a8ae041a0837bce79d8 100644
--- a/main/linux-postmarketos-exynos5/APKBUILD
+++ b/main/linux-postmarketos-exynos5/APKBUILD
@@ -46,6 +46,10 @@ source="
 	0006-ODROID-COMMON-add-symbol-to-device-tree-compiler.patch
 	0007-ODROID-COMMON-phy-realtek-add-Wake-on-Lan-to-Realtek.patch
 	0008-ARM-exynos-add-machine-description-for-ODROID-XU3-4.patch
+	0009-ARM-decompressor-Flush-tlb-before-swiching-domain-0-.patch
+	0010-dt-bindings-arm-samsung-document-Chagall-WiFi-board-.patch
+	0011-ARM-exynos-only-do-SMC_CMD_CPU1BOOT-call-on-Exynos4.patch
+	0012-ARM-dts-Add-support-for-Samsung-Chagall-WiFi.patch
 "
 builddir="$srcdir/linux-${_kernver//_/-}"
 
@@ -85,4 +89,8 @@ e540e3be0d0d45135f394f07bf8c9769654bf4c7d79a4558593ade87e02c21ab5cf66c3ff6672dab
 0272dc43b9218e38ce329c7a358eb869fd7ccdf70c9aae0e5cc3e0a029ba8f9616d3260b247650277376a1c1a3ec160f1ec8bc3df642b6f6cf7e60ba99e828e7  0006-ODROID-COMMON-add-symbol-to-device-tree-compiler.patch
 622f1f90ecc63a3cac32e8dafcfbe265a175031307af0a99088301bb2631bb55f6e6194e889f453d6f06239a5217e52c1b4ee9905570a06e975ce7aa1bb35434  0007-ODROID-COMMON-phy-realtek-add-Wake-on-Lan-to-Realtek.patch
 36b00ee94045b8dce002f55b91e0970dde59f9fa75ec4df7043930532991bfb59a0504256b056cd3f801bab05f5c23b2765e55c6ffbafe706a3e62bcd1ff71b9  0008-ARM-exynos-add-machine-description-for-ODROID-XU3-4.patch
+f031b887181d645075c7e4b2d93d60f0b0932e256f6b292850bab4b7480b4289f4a89f43f7e4a6d951eb0c7cd1a5cafff119c433573bb188a9960bab0685d189  0009-ARM-decompressor-Flush-tlb-before-swiching-domain-0-.patch
+b0595d89a559c14e016f0ef65f526240ab2a85a0397fed1b9a304aca2d7a946496891aad33dcd0fae77fc9d4f33baba58503595f97132af90efdaf9de8d78e4c  0010-dt-bindings-arm-samsung-document-Chagall-WiFi-board-.patch
+8d8be7677e67c41a3eafbf5fff13edeb6be88056a45ab55347544ab883fd3e50d15e77a929f53bd2a1917c9d51cec3d5a78205b3fade0d682081bb5e0317ee81  0011-ARM-exynos-only-do-SMC_CMD_CPU1BOOT-call-on-Exynos4.patch
+d552e78c7a7c029274766200dba88a9af3b22e60f393e1fcd345a527de26c203222308ecce0b212ea8f55a5287737b6ee8730c69680d585f8ce4b45faebf3d20  0012-ARM-dts-Add-support-for-Samsung-Chagall-WiFi.patch
 "