diff --git a/device/testing/device-sony-pioneer/APKBUILD b/device/testing/device-sony-pioneer/APKBUILD
new file mode 100644
index 0000000000000000000000000000000000000000..3faa7fe11015b8815015bd5e70a50a0f0f80d0fa
--- /dev/null
+++ b/device/testing/device-sony-pioneer/APKBUILD
@@ -0,0 +1,51 @@
+# Reference: <https://postmarketos.org/devicepkg>
+pkgname=device-sony-pioneer
+pkgdesc="Sony Xperia XA2"
+pkgver=0.1
+pkgrel=0
+url="https://postmarketos.org"
+license="MIT"
+arch="aarch64"
+options="!check !archcheck"
+depends="
+	linux-postmarketos-qcom-sdm660
+	mkbootimg
+	postmarketos-base
+	soc-qcom-sdm660
+"
+makedepends="devicepkg-dev"
+install="$pkgname.post-install"
+source="
+	deviceinfo
+	rootston.ini
+"
+subpackages="
+	$pkgname-nonfree-firmware:nonfree_firmware
+	$pkgname-phosh
+"
+
+
+build() {
+	devicepkg_build $startdir $pkgname
+}
+
+package() {
+	devicepkg_package $startdir $pkgname
+}
+
+phosh() {
+	install_if="$pkgname postmarketos-ui-phosh"
+	install -Dm644 "$srcdir"/rootston.ini \
+		"$subpkgdir"/etc/phosh/rootston.ini
+}
+
+nonfree_firmware() {
+	pkgdesc="Various firmware files required for most subsystems to run."
+	depends="firmware-sony-ninges"
+	mkdir "$subpkgdir"
+}
+
+sha512sums="
+a6449c6668152c7ff0e998ecc910b8763f3cb8a40f05e049e78430b88770504da43cc193c6cdebadcfdacc373f3238588aa1a8707549817f9d31e78e6392402c  deviceinfo
+aad7cce10db5ec156585893c82932bd42f2c86e4d68208b5f3816ac7f5f80eb6ddf15157666e81de97d30b20897f88e1027545a87fe5c96c37b5e75e3e125ee4  rootston.ini
+"
diff --git a/device/testing/device-sony-pioneer/device-sony-pioneer.post-install b/device/testing/device-sony-pioneer/device-sony-pioneer.post-install
new file mode 100644
index 0000000000000000000000000000000000000000..3361066e7f94269fb8487c36742eeda6f14525f8
--- /dev/null
+++ b/device/testing/device-sony-pioneer/device-sony-pioneer.post-install
@@ -0,0 +1,11 @@
+ #!/bin/sh
+
+if [ -z "$(grep /dev/disk/by-partlabel/modem_a /etc/fstab)" ]; then
+	# Firmware shipped with the stock ROM, _a is always populated
+	echo "/dev/disk/by-partlabel/modem_a   /opt/firmware/modem       auto    ro      0       0" >> /etc/fstab
+fi
+
+if [ -z "$(grep /dev/disk/by-partlabel/oem_a /etc/fstab)" ]; then
+	# ODM blobs provided by Sony Open Devices Project
+	echo "/dev/disk/by-partlabel/oem_a   /opt/firmware/odm       auto    ro      0       0" >> /etc/fstab
+fi
diff --git a/device/testing/device-sony-pioneer/deviceinfo b/device/testing/device-sony-pioneer/deviceinfo
new file mode 100644
index 0000000000000000000000000000000000000000..12e529f2999b7ba7832070d0e644e5bde4235671
--- /dev/null
+++ b/device/testing/device-sony-pioneer/deviceinfo
@@ -0,0 +1,32 @@
+# Reference: <https://postmarketos.org/deviceinfo>
+# Please use double quotes only. You can source this file in shell
+# scripts.
+
+deviceinfo_format_version="0"
+deviceinfo_name="Sony Xperia XA2"
+deviceinfo_manufacturer="Sony"
+deviceinfo_codename="sony-pioneer"
+deviceinfo_year="2018"
+deviceinfo_dtb="qcom/sdm630-sony-xperia-nile-pioneer"
+deviceinfo_append_dtb="true"
+deviceinfo_arch="aarch64"
+
+# Device related
+deviceinfo_chassis="handset"
+deviceinfo_keyboard="false"
+deviceinfo_external_storage="true"
+deviceinfo_screen_width="1080"
+deviceinfo_screen_height="1920"
+
+# Bootloader related
+deviceinfo_flash_method="fastboot"
+deviceinfo_generate_bootimg="true"
+deviceinfo_bootimg_qcdt="false"
+deviceinfo_bootimg_mtk_mkimage="false"
+deviceinfo_bootimg_dtb_second="false"
+deviceinfo_flash_offset_base="0x00000000"
+deviceinfo_flash_offset_kernel="0x00008000"
+deviceinfo_flash_offset_ramdisk="0x02000000"
+deviceinfo_flash_offset_second="0x00f00000"
+deviceinfo_flash_offset_tags="0x01e00000"
+deviceinfo_flash_pagesize="4096"
diff --git a/device/testing/device-sony-pioneer/rootston.ini b/device/testing/device-sony-pioneer/rootston.ini
new file mode 100644
index 0000000000000000000000000000000000000000..74ac1390418158d84ec10986e97271bfee563393
--- /dev/null
+++ b/device/testing/device-sony-pioneer/rootston.ini
@@ -0,0 +1,5 @@
+[cursor:seat0]
+map-to-output:DSI-1
+
+[output:DSI-1]
+scale = 3
diff --git a/device/testing/firmware-sony-ninges/APKBUILD b/device/testing/firmware-sony-ninges/APKBUILD
new file mode 100644
index 0000000000000000000000000000000000000000..f55d9ae94602f41ee3ffab9780e139e37e1a070d
--- /dev/null
+++ b/device/testing/firmware-sony-ninges/APKBUILD
@@ -0,0 +1,19 @@
+pkgname=firmware-sony-ninges
+pkgver=1
+pkgrel=0
+pkgdesc="Firmware for Sony Xperia XA2/Plus/Ultra & 10/10 Plus"
+url="postmarketos.org"
+arch="aarch64"
+license="BSD-3-Clause"
+install="$pkgname.post-install"
+options="!check !archcheck !strip !tracedeps pmb:cross-native"
+depends="rsync"
+source="copy-firmware.initd"
+
+package() {
+	install -Dm755 "$srcdir/copy-firmware.initd" "$pkgdir/etc/init.d/copy-firmware"
+}
+
+sha512sums="
+59a495245036c005d5f84e7232f41434f907398b1a110e25ce47af98a451e13dbb468ba446b3a47b9b5b248cce18511ffa9e0f1f3fbbe8239e1d08fda3fd605e  copy-firmware.initd
+"
diff --git a/device/testing/firmware-sony-ninges/copy-firmware.initd b/device/testing/firmware-sony-ninges/copy-firmware.initd
new file mode 100644
index 0000000000000000000000000000000000000000..165fdbf15022eb4d20f2a348ccf3215922009c3a
--- /dev/null
+++ b/device/testing/firmware-sony-ninges/copy-firmware.initd
@@ -0,0 +1,19 @@
+#!/sbin/openrc-run
+
+description="Copy firmware to the correct location"
+
+start() {
+	# Set up directories (if needed)
+	mkdir -p /opt/firmware/modem
+	mkdir -p /opt/firmware/odm
+	mkdir -p /lib/firmware/qcom/venus-4.4
+
+	# Copy all the firmware over (except Venus)
+	rsync -r -l -p --owner=root --group=root --chmod=0755 --exclude 'venus*' /opt/firmware/modem/image/* /lib/firmware/
+
+	# Copy Venus FW over to the correct location
+	rsync -r -l -p --owner=root --group=root --chmod=0755 /opt/firmware/modem/image/venus* /lib/firmware/qcom/venus-4.4
+
+	# Get Adreno & ZAP firmware from ODM package
+	rsync -r -l -p --owner=root --group=root --chmod=0755 /opt/firmware/odm/firmware/* /lib/firmware/qcom
+} 
diff --git a/device/testing/firmware-sony-ninges/firmware-sony-ninges.post-install b/device/testing/firmware-sony-ninges/firmware-sony-ninges.post-install
new file mode 100644
index 0000000000000000000000000000000000000000..a65edebd6d932501472e89fb3d7e69d7d586b694
--- /dev/null
+++ b/device/testing/firmware-sony-ninges/firmware-sony-ninges.post-install
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+rc-update add copy-firmware default
diff --git a/device/testing/soc-qcom-sdm660/APKBUILD b/device/testing/soc-qcom-sdm660/APKBUILD
new file mode 100644
index 0000000000000000000000000000000000000000..db4eb7890a452bdf1a4bbc4abf35f72214276dd4
--- /dev/null
+++ b/device/testing/soc-qcom-sdm660/APKBUILD
@@ -0,0 +1,28 @@
+pkgname=soc-qcom-sdm660
+pkgdesc="Common package for Qualcomm SDM630/636/660 devices"
+pkgver=1
+pkgrel=0
+url="https://postmarketos.org"
+license="BSD-3-Clause"
+arch="aarch64"
+options="!check !archcheck !tracedeps pmb:cross-native"
+subpackages="$pkgname-nonfree-firmware:nonfree_firmware"
+
+package() {
+	mkdir -p "$pkgdir"
+}
+
+nonfree_firmware() {
+	pkgdesc="Modem, WiFi, BT and GPU Firmware"
+	depends="
+		linux-firmware-qca
+		linux-firmware-qcom
+		msm-modem
+		pd-mapper
+		pd-mapper-openrc
+		tqftpserv
+		tqftpserv-openrc
+		"
+	install="$subpkgname.post-install"
+	mkdir "$subpkgdir"
+}
diff --git a/device/testing/soc-qcom-sdm660/soc-qcom-sdm660-nonfree-firmware.post-install b/device/testing/soc-qcom-sdm660/soc-qcom-sdm660-nonfree-firmware.post-install
new file mode 100644
index 0000000000000000000000000000000000000000..70b9e0efe219f21ba16ee978aa3f1b083e82ca41
--- /dev/null
+++ b/device/testing/soc-qcom-sdm660/soc-qcom-sdm660-nonfree-firmware.post-install
@@ -0,0 +1,3 @@
+#!/bin/sh
+rc-update add tqftpserv boot
+rc-update add pd-mapper boot