From eb2b5cd458996401b9812000e70c8749a6214cfe Mon Sep 17 00:00:00 2001
From: Clayton Craft <clayton@craftyguy.net>
Date: Wed, 20 Nov 2024 21:52:56 -0800
Subject: [PATCH] linux-postmarketos-qcom-laptop: new aport  (MR 5837)

This is a generic kernel for qcom laptops (sc8280xp & x1e), meant to
replace the lenovo-21bx kernel for the x13s.

- Uses johan_defconfig as base, and includes Minecrell's pmos.config
- Adds some extra kconfig for supporting virtualization
---
 CODEOWNERS                                    |   1 +
 .../linux-postmarketos-qcom-laptop/APKBUILD   |  87 +++++
 .../misc.config                               |   5 +
 .../pmos.config                               | 302 ++++++++++++++++++
 4 files changed, 395 insertions(+)
 create mode 100644 device/community/linux-postmarketos-qcom-laptop/APKBUILD
 create mode 100644 device/community/linux-postmarketos-qcom-laptop/misc.config
 create mode 100644 device/community/linux-postmarketos-qcom-laptop/pmos.config

diff --git a/CODEOWNERS b/CODEOWNERS
index c2e5a28eb98..28315dc7706 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -115,6 +115,7 @@ device/*/linux-postmarketos-marvell-dove/	@longnoserob
 device/*/linux-postmarketos-mediatek-mt8173/	@jenneron @adamthiede
 device/*/linux-postmarketos-mediatek-mt8183/	@jenneron @binarycraft
 device/*/linux-postmarketos-omap/		@MightyM17 @Sicelo
+device/*/linux-postmarketos-qcom-laptop/	@craftyguy @calebccff
 device/*/linux-postmarketos-qcom-msm8939/	@Newbyte
 device/*/linux-postmarketos-qcom-msm8953/	@M0Rf30 @Ultra-azu @barni2000
 device/*/linux-postmarketos-qcom-msm8996/	@Tooniis
diff --git a/device/community/linux-postmarketos-qcom-laptop/APKBUILD b/device/community/linux-postmarketos-qcom-laptop/APKBUILD
new file mode 100644
index 00000000000..03a9cb5ed64
--- /dev/null
+++ b/device/community/linux-postmarketos-qcom-laptop/APKBUILD
@@ -0,0 +1,87 @@
+# Maintainer: Clayton Craft <clayton@craftyguy.net>
+# Co-Maintainer: Caleb Connolly <caleb@postmarketos.org>
+pkgname=linux-postmarketos-qcom-laptop
+pkgver=6.12
+pkgrel=0
+# Commit from branch @ https://github.com/jhovold/linux/tree/wip/x1e80100-$pkgver
+_commit="93bd777d19aa0e8b58dee1eb837a16acf56035b0"
+pkgdesc="Generic kernel for Qualcomm laptops"
+arch="aarch64"
+_carch="arm64"
+_flavor="postmarketos-qcom-laptop"
+url="https://kernel.org"
+license="GPL-2.0-only"
+options="!strip
+	!check
+	!tracedeps
+	pmb:cross-native
+	pmb:kconfigcheck-community
+	pmb:kconfigcheck-containers
+	pmb:kconfigcheck-uefi
+"
+makedepends="
+	bash
+	bc
+	bison
+	devicepkg-dev
+	findutils
+	flex
+	git
+	openssl-dev
+	perl
+	python3
+	zstd
+"
+replaces="linux-lenovo-21bx"
+
+# Source
+_repository="linux"
+source="
+	$pkgname-$_commit.tar.gz::https://github.com/jhovold/$_repository/archive/$_commit.tar.gz
+	misc.config
+	pmos.config
+"
+builddir="$srcdir/linux-$_commit"
+_outdir="out"
+_defconfig="johan_defconfig"
+
+prepare() {
+	default_prepare
+	cp "$srcdir/pmos.config" "$builddir"/arch/"$_carch"/configs/
+	cp "$srcdir/misc.config" "$builddir"/arch/"$_carch"/configs/
+
+	# Generate .config
+	unset LDFLAGS
+	make ARCH="$_carch" CC="${CC:-gcc}" \
+		KBUILD_BUILD_VERSION="$((pkgrel + 1 ))-$_flavor" \
+		"$_defconfig" pmos.config misc.config
+}
+
+build() {
+	unset LDFLAGS
+	make ARCH="$_carch" CC="${CC:-gcc}" \
+		KBUILD_BUILD_VERSION="$((pkgrel + 1 ))-$_flavor"
+}
+
+package() {
+	install -Dm644 "$builddir/arch/$_carch/boot/vmlinuz.efi" \
+			"$pkgdir/boot/linux.efi"
+
+	make modules_install dtbs_install \
+		ARCH="$_carch" \
+		INSTALL_PATH="$pkgdir"/boot/ \
+		INSTALL_MOD_PATH="$pkgdir" \
+		INSTALL_MOD_STRIP=1 \
+		INSTALL_DTBS_PATH="$pkgdir"/boot/dtbs
+
+	rm -f "$pkgdir"/lib/modules/*/build "$pkgdir"/lib/modules/*/source
+
+	install -D "$builddir"/include/config/kernel.release \
+		"$pkgdir"/usr/share/kernel/$_flavor/kernel.release
+}
+
+sha512sums="
+af20b0d7e46e31de152a01e6c811c691f3866add856d4b8cc3e665fde2f10d0fa4ccb401cf3583e4975c0ccb281369fc019825ad274c4edad49f0e8069c154fc  linux-postmarketos-qcom-laptop-93bd777d19aa0e8b58dee1eb837a16acf56035b0.tar.gz
+c343baeb03f91a16994fd53e7cf1be0590be591c3a02e583d897f6b84ee9b33662cac513f84e1756fed58ab283c16471492bf227a1adb00f5bdd660ea4631ef1  misc.config
+e3238b32255fba51bf9364a0c9f70d35a95e07d51704dfcd999045fa84a08251707d4da95bb09d8b86502838b8d6d6187b968f33c54c8c7eea883a02096bc6a8  pmos.config
+"
diff --git a/device/community/linux-postmarketos-qcom-laptop/misc.config b/device/community/linux-postmarketos-qcom-laptop/misc.config
new file mode 100644
index 00000000000..0054c2539d6
--- /dev/null
+++ b/device/community/linux-postmarketos-qcom-laptop/misc.config
@@ -0,0 +1,5 @@
+CONFIG_BLK_WBT=y
+CONFIG_BLK_WBT_MQ=y
+CONFIG_CONNECTOR=y
+CONFIG_PROC_EVENTS=y
+CONFIG_USB_SERIAL_PL2303=m
diff --git a/device/community/linux-postmarketos-qcom-laptop/pmos.config b/device/community/linux-postmarketos-qcom-laptop/pmos.config
new file mode 100644
index 00000000000..0ced36f6d76
--- /dev/null
+++ b/device/community/linux-postmarketos-qcom-laptop/pmos.config
@@ -0,0 +1,302 @@
+# CONFIG_LOCALVERSION_AUTO is not set
+
+CONFIG_BLK_DEV_DM=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_CGROUPS=y
+CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_XTS=y
+CONFIG_DEVTMPFS=y
+CONFIG_DM_CRYPT=m
+CONFIG_EXT4_FS=y
+CONFIG_INPUT_EVDEV=y
+CONFIG_MD=y
+CONFIG_SYSVIPC=y
+CONFIG_TMPFS_POSIX_ACL=y
+CONFIG_UEVENT_HELPER=y
+CONFIG_USER_NS=y
+CONFIG_VT=y
+CONFIG_FW_LOADER_COMPRESS=y
+CONFIG_FW_LOADER_COMPRESS_ZSTD=y
+
+# Anbox / Waydroid
+CONFIG_ANDROID_BINDER_IPC=y
+# CONFIG_ANDROID_BINDERFS is not set
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BPF_SYSCALL=y
+CONFIG_BRIDGE=m
+CONFIG_BRIDGE_VLAN_FILTERING=y
+CONFIG_CGROUP_BPF=y
+CONFIG_CROSS_MEMORY_ATTACH=y
+CONFIG_FUSE_FS=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_PSI=y
+CONFIG_SQUASHFS=m
+CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y
+CONFIG_SQUASHFS_FILE_DIRECT=y
+CONFIG_SQUASHFS_XATTR=y
+CONFIG_SQUASHFS_XZ=y
+CONFIG_TMPFS_XATTR=y
+CONFIG_TUN=m
+CONFIG_VETH=m
+CONFIG_VLAN_8021Q=m
+
+# iwd
+CONFIG_ASYMMETRIC_KEY_TYPE=y
+CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
+CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_CMAC=y
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=y
+CONFIG_CRYPTO_SHA256=y
+CONFIG_CRYPTO_SHA512=y
+CONFIG_CRYPTO_USER_API=m
+CONFIG_CRYPTO_USER_API_HASH=m
+CONFIG_CRYPTO_USER_API_SKCIPHER=m
+CONFIG_KEYS=y
+CONFIG_KEY_DH_OPERATIONS=y
+CONFIG_PKCS7_MESSAGE_PARSER=y
+CONFIG_PKCS8_PRIVATE_KEY_PARSER=m
+CONFIG_X509_CERTIFICATE_PARSER=y
+CONFIG_RFKILL=y
+
+# nftables
+CONFIG_NETFILTER=y
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_NAT=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_NAT=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_REJECT_IPV4=m
+CONFIG_NF_REJECT_IPV6=m
+CONFIG_NF_TABLES=m
+CONFIG_NF_TABLES_INET=y
+CONFIG_NF_TABLES_IPV4=y
+CONFIG_NF_TABLES_IPV6=y
+CONFIG_NFT_CT=m
+CONFIG_NFT_LIMIT=m
+CONFIG_NFT_LOG=m
+CONFIG_NFT_MASQ=m
+CONFIG_NFT_NAT=m
+CONFIG_NFT_REJECT=m
+CONFIG_NFT_COMPAT=m
+
+# /usr/share/docker/contrib/check-config.sh (from Gentoo)
+# Missing dependency?
+CONFIG_NET_SCHED=y
+
+# Generally Necessary:
+CONFIG_NAMESPACES=y
+CONFIG_NET_NS=y
+CONFIG_PID_NS=y
+CONFIG_IPC_NS=y
+CONFIG_UTS_NS=y
+CONFIG_CGROUPS=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_CGROUP_DEVICE=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_CPUSETS=y
+CONFIG_KEYS=y
+CONFIG_VETH=m
+CONFIG_BRIDGE=m
+CONFIG_BRIDGE_NETFILTER=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_IPVS=m
+CONFIG_NETFILTER_XT_MARK=m
+CONFIG_IP_NF_NAT=m
+CONFIG_NF_NAT=m
+CONFIG_POSIX_MQUEUE=y
+
+# Optional Features:
+CONFIG_USER_NS=y
+CONFIG_SECCOMP=y
+CONFIG_CGROUP_PIDS=y
+CONFIG_BLK_CGROUP=y
+CONFIG_BLK_DEV_THROTTLING=y
+CONFIG_CGROUP_PERF=y
+CONFIG_NET_CLS_CGROUP=m
+CONFIG_CGROUP_NET_PRIO=y
+CONFIG_CFS_BANDWIDTH=y
+CONFIG_FAIR_GROUP_SCHED=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_VS=m
+CONFIG_IP_VS_NFCT=y
+CONFIG_IP_VS_PROTO_TCP=y
+CONFIG_IP_VS_PROTO_UDP=y
+CONFIG_IP_VS_RR=m
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_VXLAN=m
+CONFIG_BRIDGE_VLAN_FILTERING=y
+CONFIG_IPVLAN=m
+CONFIG_MACVLAN=m
+CONFIG_DUMMY=m
+CONFIG_BLK_DEV_DM=m
+CONFIG_DM_THIN_PROVISIONING=m
+CONFIG_OVERLAY_FS=m
+
+# lxc
+CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
+CONFIG_CHECKPOINT_RESTORE=y
+CONFIG_IP6_NF_TARGET_MASQUERADE=m
+
+# ZRAM
+CONFIG_CRYPTO_LZ4=y
+CONFIG_CRYPTO_ZSTD=y
+CONFIG_SWAP=y
+CONFIG_ZRAM=m
+CONFIG_ZRAM_BACKEND_LZ4=y
+CONFIG_ZRAM_BACKEND_ZSTD=y
+CONFIG_ZRAM_DEF_COMP_ZSTD=y
+
+# netboot
+CONFIG_BLK_DEV_NBD=m
+
+# WireGuard
+CONFIG_WIREGUARD=m
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_NF_TABLES=m
+CONFIG_NF_TABLES_IPV4=y
+CONFIG_NF_TABLES_IPV6=y
+CONFIG_NFT_CT=m
+CONFIG_NFT_FIB_IPV4=m
+CONFIG_NFT_FIB_IPV6=m
+CONFIG_NF_CONNTRACK_MARK=y
+
+# File systems
+CONFIG_BTRFS_FS=m
+CONFIG_EXFAT_FS=m
+CONFIG_EXT4_FS=y
+CONFIG_F2FS_FS=m
+CONFIG_F2FS_FS_COMPRESSION=y
+CONFIG_UDF_FS=m
+CONFIG_XFS_FS=m
+
+# Community
+CONFIG_BINFMT_MISC=m
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_CIFS=m
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_UCLAMP_TASK=y
+CONFIG_UCLAMP_TASK_GROUP=y
+CONFIG_DM_INTEGRITY=m
+
+# Input
+CONFIG_HIDRAW=y
+CONFIG_INPUT_UINPUT=m
+CONFIG_INPUT_JOYSTICK=y
+CONFIG_JOYSTICK_XPAD=m
+CONFIG_JOYSTICK_XPAD_FF=y
+CONFIG_JOYSTICK_XPAD_LEDS=y
+CONFIG_UHID=m
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+CONFIG_USB_HIDDEV=y
+CONFIG_USB_PRINTER=m
+
+# USB
+CONFIG_DRM_UDL=m
+CONFIG_SND_USB_AUDIO=m
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_CP210X=m
+CONFIG_USB_STORAGE=y
+CONFIG_USB_RTL8152=m
+CONFIG_USB_USBNET=m
+
+# USB Gadget
+CONFIG_U_SERIAL_CONSOLE=y
+CONFIG_USB_CONFIGFS=m
+CONFIG_USB_CONFIGFS_SERIAL=y
+CONFIG_USB_CONFIGFS_ACM=y
+CONFIG_USB_CONFIGFS_OBEX=y
+CONFIG_USB_CONFIGFS_NCM=y
+CONFIG_USB_CONFIGFS_ECM=y
+CONFIG_USB_CONFIGFS_RNDIS=y
+CONFIG_USB_CONFIGFS_EEM=y
+CONFIG_USB_CONFIGFS_MASS_STORAGE=y
+CONFIG_USB_CONFIGFS_F_FS=y
+CONFIG_USB_CONFIGFS_F_UAC1=y
+CONFIG_USB_CONFIGFS_F_UAC2=y
+CONFIG_USB_CONFIGFS_F_MIDI=y
+CONFIG_USB_CONFIGFS_F_HID=y
+CONFIG_USB_CONFIGFS_F_UVC=y
+CONFIG_USB_CONFIGFS_F_PRINTER=y
+
+# USB net
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_EEM=m
+CONFIG_USB_ACM=m
+CONFIG_USB_WDM=m
+
+# LED triggers
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
+CONFIG_LEDS_TRIGGER_AUDIO=m
+CONFIG_LEDS_TRIGGER_BACKLIGHT=m
+CONFIG_LEDS_TRIGGER_CAMERA=m
+CONFIG_LEDS_TRIGGER_GPIO=m
+CONFIG_LEDS_TRIGGER_NETDEV=m
+CONFIG_LEDS_TRIGGER_ONESHOT=m
+CONFIG_LEDS_TRIGGER_PATTERN=m
+CONFIG_LEDS_TRIGGER_TRANSIENT=m
+CONFIG_LEDS_TRIGGER_TTY=m
+
+# Bluetooth devices
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+# EFI
+CONFIG_EFI=y
+CONFIG_EFI_ZBOOT=y
+CONFIG_FB_EFI=y
+CONFIG_VFAT_FS=y
+CONFIG_NLS_ASCII=y
+CONFIG_PSTORE=y
+CONFIG_EFI_VARS_PSTORE=y
+CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE=y
+
+# libcamera
+CONFIG_DMABUF_HEAPS=y
+CONFIG_DMABUF_HEAPS_CMA=y
+CONFIG_DMABUF_HEAPS_SYSTEM=y
+CONFIG_UDMABUF=y
+
+# enable uvcvideo for basic USB webcam/HDMI-dongle support
+CONFIG_MEDIA_USB_SUPPORT=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+
+# Debug
+CONFIG_DYNAMIC_DEBUG=y
+CONFIG_FTRACE=y
+CONFIG_FUNCTION_TRACER=y
+CONFIG_DYNAMIC_FTRACE=y
+
+# Virtualization
+CONFIG_HW_RANDOM_VIRTIO=m
+CONFIG_KVM=y
+CONFIG_VIRTUALIZATION=y
-- 
GitLab