diff --git a/device/testing/device-motorola-rtwo/APKBUILD b/device/testing/device-motorola-rtwo/APKBUILD new file mode 100644 index 000000000..37b96775d --- /dev/null +++ b/device/testing/device-motorola-rtwo/APKBUILD @@ -0,0 +1,41 @@ +# Reference: +maintainer="snlavaise " +pkgname=device-motorola-rtwo +pkgver=1 +pkgrel=0 +pkgdesc="Motorola Moto Edge 40 Pro" +url="https://postmarketos.org" +arch="aarch64" +license="MIT" +depends=" + linux-postmarketos-qcom-sm8550 + mkbootimg + postmarketos-base + soc-qcom + " +makedepends="devicepkg-dev" +source=" + deviceinfo + modules-initfs + " +options="!archcheck !check" + +# TODO (as hardware comes up): +# - firmware-motorola-rtwo (WiFi/BT/modem/GPU blobs, generate from the +# stock image with 'pmbootstrap ...' or extract manually) +# - firmware-qcom-adreno-* for the Adreno 740 (GPU / mesa-vulkan-freedreno) +# - make-dynpart-mappings once super partitions are mapped +# - soc-qcom-modem, qbootctl (A/B slot handling) once booting + +build() { + devicepkg_build $startdir $pkgname +} + +package() { + devicepkg_package $startdir $pkgname +} + +sha512sums=" +2dee03e8320880337767f0f6523c2f85ba24940a4499ea6f470a7e1655e7c6e69122018daa03ddbba34b5302dc5f40ae48a7bcabfb9aedcfab10b112227e3052 deviceinfo +977b5009bf750b3ff1419afc9ccb6a955f79c62f0bddd07af9f75a687a939eddda5c697b38a29ad8fea172693506dd353ce0b01bedd4dac72b105c060c343188 modules-initfs +" diff --git a/device/testing/device-motorola-rtwo/deviceinfo b/device/testing/device-motorola-rtwo/deviceinfo new file mode 100644 index 000000000..36bb3d1be --- /dev/null +++ b/device/testing/device-motorola-rtwo/deviceinfo @@ -0,0 +1,42 @@ +# Reference: +# Please use double quotes only. You can source this file in shell +# scripts. + +deviceinfo_format_version="0" +deviceinfo_name="Motorola Moto Edge 40 Pro" +deviceinfo_manufacturer="Motorola" +deviceinfo_codename="motorola-rtwo" +deviceinfo_year="2023" +deviceinfo_dtb="qcom/sm8550-motorola-rtwo" +deviceinfo_append_dtb="true" +deviceinfo_arch="aarch64" + +# Device related +deviceinfo_chassis="handset" +deviceinfo_keyboard="false" +deviceinfo_external_storage="true" +deviceinfo_screen_width="1220" +deviceinfo_screen_height="2712" +deviceinfo_getty="ttyMSM0;115200" + +# The panel is not described in the device tree yet, so there is no display +# output. Flip this to "false" once mdss_dsi0 + a panel node work. +deviceinfo_no_framebuffer="true" + +# Bootloader related +deviceinfo_flash_method="fastboot" +deviceinfo_kernel_cmdline="console=ttyMSM0,115200n8 earlycon" +deviceinfo_generate_bootimg="true" +deviceinfo_bootimg_qcdt="false" +deviceinfo_header_version="4" +deviceinfo_flash_pagesize="4096" +deviceinfo_flash_sparse="true" + +# UFS storage +deviceinfo_rootfs_image_sector_size="4096" + +# A/B + dynamic (super) partitions. Fill in the 'super' block device once +# known (from the initramfs debug shell: +# ls -l /dev/disk/by-partlabel/super +# ), then uncomment: +# deviceinfo_super_partitions="/dev/sda1 /dev/sda1" diff --git a/device/testing/device-motorola-rtwo/modules-initfs b/device/testing/device-motorola-rtwo/modules-initfs new file mode 100644 index 000000000..06555a36d --- /dev/null +++ b/device/testing/device-motorola-rtwo/modules-initfs @@ -0,0 +1,12 @@ +# Modules to include in the initramfs (one name per line, '#' = comment). +# Needed for: USB networking + telnet debug-shell, and later FDE unlock +# (touchscreen + panel). +# +# Most of the SM8550 USB gadget path is built-in with the postmarketOS +# kernel config, so nothing is strictly required yet. Add modules here as +# the port progresses, e.g.: +# +# phy-qcom-eusb2-repeater +# phy-qcom-qmp-combo +# panel-- +# diff --git a/device/testing/linux-postmarketos-qcom-sm8550/APKBUILD b/device/testing/linux-postmarketos-qcom-sm8550/APKBUILD new file mode 100644 index 000000000..bc858a920 --- /dev/null +++ b/device/testing/linux-postmarketos-qcom-sm8550/APKBUILD @@ -0,0 +1,108 @@ +# Reference: +# Kernel config based on: arch/arm64/configs/defconfig (+ pmos.config, devices.config) +maintainer="snlavaise " +_flavor="postmarketos-qcom-sm8550" +pkgname=linux-$_flavor +pkgver=6.13_rc3 +pkgrel=0 +pkgdesc="Mainline kernel fork for Qualcomm SM8550 (Snapdragon 8 Gen 2) devices" +arch="aarch64" +_carch="arm64" +url="https://gitlab.postmarketos.org/soc/qcom-sm8550/linux" +license="GPL-2.0-only" +options=" + !check + !strip + !tracedeps + pmb:cross-native + pmb:kconfigcheck-community + pmb:kconfigcheck-uefi +" +makedepends=" + bash + bison + clang + elfutils-dev + findutils + flex + linux-headers + lld + llvm + openssl-dev + pahole + perl + postmarketos-installkernel + python3 + zstd +" + +# Source: snapshot of the postmarketOS SM8550 bring-up tree (branch: bringup). +# Bump _commit to move forward; then run 'pmbootstrap checksum linux-postmarketos-qcom-sm8550'. +_commit="22591bbc21da5cc0c6e37503b77bd2d852fe241c" +source=" + $pkgname-$_commit.tar.gz::https://gitlab.postmarketos.org/soc/qcom-sm8550/linux/-/archive/$_commit/linux-$_commit.tar.gz + sm8550-motorola-rtwo.dts +" +builddir="$srcdir/linux-$_commit" + +prepare() { + default_prepare + + # The Motorola rtwo (Moto Edge 40 Pro) device tree is not upstream yet, so + # drop it into the tree and register it in the Makefile before configuring. + local _dtsdir="$builddir/arch/$_carch/boot/dts/qcom" + cp "$srcdir/sm8550-motorola-rtwo.dts" "$_dtsdir/sm8550-motorola-rtwo.dts" + if ! grep -q "sm8550-motorola-rtwo.dtb" "$_dtsdir/Makefile"; then + sed -i '/sm8550-mtp\.dtb/a dtb-$(CONFIG_ARCH_QCOM) += sm8550-motorola-rtwo.dtb' \ + "$_dtsdir/Makefile" + fi + + # Generate .config from the in-tree upstream defconfig plus the postmarketOS + # and device config fragments shipped by the kernel repo. + # To "freeze" this config: build once, copy "$builddir"/.config to + # config-$_flavor.$CARCH, add it to source= and switch prepare() to a plain + # 'cp "$srcdir/config-$_flavor.$CARCH" .config' (like the other qcom kernels). + make ARCH="$_carch" LLVM=1 HOSTLDFLAGS="-fuse-ld=lld" \ + defconfig pmos.config devices.config +} + +build() { + unset LDFLAGS + make ARCH="$_carch" LLVM=1 HOSTLDFLAGS="-fuse-ld=lld" \ + KBUILD_BUILD_VERSION="$((pkgrel + 1))-$_flavor" +} + +package() { + mkdir -p "$pkgdir"/boot + + if [ -e "$builddir/arch/$_carch/boot/vmlinuz.efi" ]; then + # ZBOOT EFI decompressor for EFI booting + install -Dm644 "$builddir/arch/$_carch/boot/vmlinuz.efi" \ + "$pkgdir/boot/linux.efi" + # gzip'd image for Android boot.img compatibility + install -Dm644 "$builddir/arch/$_carch/boot/vmlinuz" \ + "$pkgdir/boot/vmlinuz" + else + echo "WARNING: CONFIG_EFI_ZBOOT not enabled!" + install -Dm644 "$builddir/arch/$_carch/boot/Image.gz" \ + "$pkgdir/boot/vmlinuz" + fi + + make modules_install dtbs_install \ + ARCH="$_carch" \ + LLVM=1 \ + INSTALL_PATH="$pkgdir"/boot \ + INSTALL_MOD_PATH="$pkgdir"/usr \ + INSTALL_MOD_STRIP=1 \ + INSTALL_DTBS_PATH="$pkgdir"/boot/dtbs + rm -f "$pkgdir"/usr/lib/modules/*/build "$pkgdir"/usr/lib/modules/*/source + + install -D "$builddir"/include/config/kernel.release \ + "$pkgdir"/usr/share/kernel/"$_flavor"/kernel.release +} + +# The kernel tarball checksum is filled in by +# 'pmbootstrap checksum linux-postmarketos-qcom-sm8550' (it downloads ~250 MB). +sha512sums=" +ed1e3a57c30dff3f40026c2e318965fa7f62dfb0eef428ee0354341137bffde324f93cf5a500619e476e44ac616351ac9cafec6dc3ecefa69b68f24b9c94bbb2 sm8550-motorola-rtwo.dts +" diff --git a/device/testing/linux-postmarketos-qcom-sm8550/sm8550-motorola-rtwo.dts b/device/testing/linux-postmarketos-qcom-sm8550/sm8550-motorola-rtwo.dts new file mode 100644 index 000000000..0ce6fbd09 --- /dev/null +++ b/device/testing/linux-postmarketos-qcom-sm8550/sm8550-motorola-rtwo.dts @@ -0,0 +1,456 @@ +// SPDX-License-Identifier: BSD-3-Clause +/* + * Motorola Moto Edge 40 Pro / Razr 40 Ultra platform (codename "rtwo"), SM8550 + * + * WIP bring-up device tree for postmarketOS. This is NOT a finished port: + * - The regulator tree below is copied from sm8550-mtp.dts (the Qualcomm + * reference design). Verify every rail against Motorola's downstream + * (LineageOS: kernel/motorola/sm8550, arch/arm64/boot/dts/vendor/qcom/*rtwo*). + * - reserved-memory / memory@ is left to the bootloader. If the board hangs + * early, add the carveouts from the downstream DT (cont_splash, ramoops, + * adsp/cdsp/mpss/... regions). + * - Display panel, touchscreen, WiFi/BT, NFC, modem, charger/fuel-gauge, + * haptics and the GPU zap shader still need to be described. + * + * Goal of this file as-is: reach the postmarketOS initramfs debug shell over + * USB (and the UART if you have a cable), then iterate. + */ + +/dts-v1/; + +#include +#include + +#include "sm8550.dtsi" +#include "pm8550.dtsi" +#include "pm8550b.dtsi" +#define PMK8550VE_SID 5 +#include "pm8550ve.dtsi" +#include "pm8550vs.dtsi" +#include "pmk8550.dtsi" + +/ { + model = "Motorola Moto Edge 40 Pro"; + compatible = "motorola,rtwo", "qcom,sm8550"; + chassis-type = "handset"; + + aliases { + serial0 = &uart7; + }; + + chosen { + stdout-path = "serial0:115200n8"; + + /* + * TODO: a simple-framebuffer node pointing at the bootloader + * framebuffer would give an early console on the panel. The + * base address / geometry must come from the downstream DT or + * from 'fastboot oem' / the LK log. + */ + }; + + vph_pwr: vph-pwr-regulator { + compatible = "regulator-fixed"; + regulator-name = "vph_pwr"; + regulator-min-microvolt = <3700000>; + regulator-max-microvolt = <3700000>; + + regulator-always-on; + regulator-boot-on; + }; +}; + +&apps_rsc { + /* Copied from sm8550-mtp.dts - VERIFY against Motorola downstream */ + regulators-0 { + compatible = "qcom,pm8550-rpmh-regulators"; + qcom,pmic-id = "b"; + + vdd-bob1-supply = <&vph_pwr>; + vdd-bob2-supply = <&vph_pwr>; + vdd-l1-l4-l10-supply = <&vreg_s6g_1p8>; + vdd-l2-l13-l14-supply = <&vreg_bob1>; + vdd-l3-supply = <&vreg_s4g_1p3>; + vdd-l5-l16-supply = <&vreg_bob1>; + vdd-l6-l7-supply = <&vreg_bob1>; + vdd-l8-l9-supply = <&vreg_bob1>; + vdd-l11-supply = <&vreg_s4g_1p3>; + vdd-l12-supply = <&vreg_s6g_1p8>; + vdd-l15-supply = <&vreg_s6g_1p8>; + vdd-l17-supply = <&vreg_bob2>; + + vreg_bob1: bob1 { + regulator-name = "vreg_bob1"; + regulator-min-microvolt = <3296000>; + regulator-max-microvolt = <3960000>; + regulator-initial-mode = ; + }; + + vreg_bob2: bob2 { + regulator-name = "vreg_bob2"; + regulator-min-microvolt = <2720000>; + regulator-max-microvolt = <3960000>; + regulator-initial-mode = ; + }; + + vreg_l1b_1p8: ldo1 { + regulator-name = "vreg_l1b_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-initial-mode = ; + }; + + vreg_l2b_3p0: ldo2 { + regulator-name = "vreg_l2b_3p0"; + regulator-min-microvolt = <3008000>; + regulator-max-microvolt = <3008000>; + regulator-initial-mode = ; + }; + + vreg_l5b_3p1: ldo5 { + regulator-name = "vreg_l5b_3p1"; + regulator-min-microvolt = <3104000>; + regulator-max-microvolt = <3104000>; + regulator-initial-mode = ; + }; + + vreg_l6b_1p8: ldo6 { + regulator-name = "vreg_l6b_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3008000>; + regulator-initial-mode = ; + }; + + vreg_l7b_1p8: ldo7 { + regulator-name = "vreg_l7b_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3008000>; + regulator-initial-mode = ; + }; + + vreg_l8b_1p8: ldo8 { + regulator-name = "vreg_l8b_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3008000>; + regulator-initial-mode = ; + }; + + vreg_l9b_2p9: ldo9 { + regulator-name = "vreg_l9b_2p9"; + regulator-min-microvolt = <2960000>; + regulator-max-microvolt = <3008000>; + regulator-initial-mode = ; + }; + + vreg_l11b_1p2: ldo11 { + regulator-name = "vreg_l11b_1p2"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1504000>; + regulator-initial-mode = ; + }; + + vreg_l12b_1p8: ldo12 { + regulator-name = "vreg_l12b_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-initial-mode = ; + }; + + vreg_l13b_3p0: ldo13 { + regulator-name = "vreg_l13b_3p0"; + regulator-min-microvolt = <3000000>; + regulator-max-microvolt = <3000000>; + regulator-initial-mode = ; + }; + + vreg_l14b_3p2: ldo14 { + regulator-name = "vreg_l14b_3p2"; + regulator-min-microvolt = <3200000>; + regulator-max-microvolt = <3200000>; + regulator-initial-mode = ; + }; + + vreg_l15b_1p8: ldo15 { + regulator-name = "vreg_l15b_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-initial-mode = ; + }; + + vreg_l16b_2p8: ldo16 { + regulator-name = "vreg_l16b_2p8"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + regulator-initial-mode = ; + }; + + vreg_l17b_2p5: ldo17 { + regulator-name = "vreg_l17b_2p5"; + regulator-min-microvolt = <2504000>; + regulator-max-microvolt = <2504000>; + regulator-initial-mode = ; + }; + }; + + regulators-1 { + compatible = "qcom,pm8550vs-rpmh-regulators"; + qcom,pmic-id = "c"; + + vdd-l3-supply = <&vreg_s4e_0p9>; + + vreg_l3c_0p91: ldo3 { + regulator-name = "vreg_l3c_0p9"; + regulator-min-microvolt = <880000>; + regulator-max-microvolt = <912000>; + regulator-initial-mode = ; + }; + }; + + regulators-2 { + compatible = "qcom,pm8550vs-rpmh-regulators"; + qcom,pmic-id = "d"; + + vdd-l1-supply = <&vreg_s4e_0p9>; + + vreg_l1d_0p88: ldo1 { + regulator-name = "vreg_l1d_0p88"; + regulator-min-microvolt = <880000>; + regulator-max-microvolt = <920000>; + regulator-initial-mode = ; + }; + }; + + regulators-3 { + compatible = "qcom,pm8550vs-rpmh-regulators"; + qcom,pmic-id = "e"; + + vdd-l1-supply = <&vreg_s4e_0p9>; + vdd-l2-supply = <&vreg_s4e_0p9>; + vdd-l3-supply = <&vreg_s4g_1p3>; + vdd-s4-supply = <&vph_pwr>; + vdd-s5-supply = <&vph_pwr>; + + vreg_s4e_0p9: smps4 { + regulator-name = "vreg_s4e_0p9"; + regulator-min-microvolt = <904000>; + regulator-max-microvolt = <984000>; + regulator-initial-mode = ; + }; + + vreg_s5e_1p1: smps5 { + regulator-name = "vreg_s5e_1p1"; + regulator-min-microvolt = <1080000>; + regulator-max-microvolt = <1120000>; + regulator-initial-mode = ; + }; + + vreg_l1e_0p88: ldo1 { + regulator-name = "vreg_l1e_0p88"; + regulator-min-microvolt = <880000>; + regulator-max-microvolt = <880000>; + regulator-initial-mode = ; + }; + + vreg_l2e_0p9: ldo2 { + regulator-name = "vreg_l2e_0p9"; + regulator-min-microvolt = <904000>; + regulator-max-microvolt = <970000>; + regulator-initial-mode = ; + }; + + vreg_l3e_1p2: ldo3 { + regulator-name = "vreg_l3e_1p2"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-initial-mode = ; + }; + }; + + regulators-4 { + compatible = "qcom,pm8550ve-rpmh-regulators"; + qcom,pmic-id = "f"; + + vdd-l1-supply = <&vreg_s4e_0p9>; + vdd-l2-supply = <&vreg_s4e_0p9>; + vdd-l3-supply = <&vreg_s4e_0p9>; + vdd-s4-supply = <&vph_pwr>; + + vreg_s4f_0p5: smps4 { + regulator-name = "vreg_s4f_0p5"; + regulator-min-microvolt = <500000>; + regulator-max-microvolt = <700000>; + regulator-initial-mode = ; + }; + + vreg_l1f_0p9: ldo1 { + regulator-name = "vreg_l1f_0p9"; + regulator-min-microvolt = <912000>; + regulator-max-microvolt = <912000>; + regulator-initial-mode = ; + }; + + vreg_l2f_0p88: ldo2 { + regulator-name = "vreg_l2f_0p88"; + regulator-min-microvolt = <880000>; + regulator-max-microvolt = <912000>; + regulator-initial-mode = ; + }; + + vreg_l3f_0p91: ldo3 { + regulator-name = "vreg_l3f_0p91"; + regulator-min-microvolt = <880000>; + regulator-max-microvolt = <912000>; + regulator-initial-mode = ; + }; + }; + + regulators-5 { + compatible = "qcom,pm8550vs-rpmh-regulators"; + qcom,pmic-id = "g"; + + vdd-l1-supply = <&vreg_s4g_1p3>; + vdd-l2-supply = <&vreg_s4g_1p3>; + vdd-l3-supply = <&vreg_s4g_1p3>; + vdd-s1-supply = <&vph_pwr>; + vdd-s2-supply = <&vph_pwr>; + vdd-s3-supply = <&vph_pwr>; + vdd-s4-supply = <&vph_pwr>; + vdd-s5-supply = <&vph_pwr>; + vdd-s6-supply = <&vph_pwr>; + + vreg_s1g_1p2: smps1 { + regulator-name = "vreg_s1g_1p2"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1300000>; + regulator-initial-mode = ; + }; + + vreg_s2g_0p8: smps2 { + regulator-name = "vreg_s2g_0p8"; + regulator-min-microvolt = <800000>; + regulator-max-microvolt = <1000000>; + regulator-initial-mode = ; + }; + + vreg_s3g_0p7: smps3 { + regulator-name = "vreg_s3g_0p7"; + regulator-min-microvolt = <300000>; + regulator-max-microvolt = <1004000>; + regulator-initial-mode = ; + }; + + vreg_s4g_1p3: smps4 { + regulator-name = "vreg_s4g_1p3"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1352000>; + regulator-initial-mode = ; + }; + + vreg_s5g_0p8: smps5 { + regulator-name = "vreg_s5g_0p8"; + regulator-min-microvolt = <500000>; + regulator-max-microvolt = <1004000>; + regulator-initial-mode = ; + }; + + vreg_s6g_1p8: smps6 { + regulator-name = "vreg_s6g_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <2000000>; + regulator-initial-mode = ; + }; + + vreg_l1g_1p2: ldo1 { + regulator-name = "vreg_l1g_1p2"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-initial-mode = ; + }; + + vreg_l2g_1p2: ldo2 { + regulator-name = "vreg_l2g_1p2"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-initial-mode = ; + }; + + vreg_l3g_1p2: ldo3 { + regulator-name = "vreg_l3g_1p2"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-initial-mode = ; + }; + }; +}; + +&pm8550b_eusb2_repeater { + vdd18-supply = <&vreg_l15b_1p8>; + vdd3-supply = <&vreg_l5b_3p1>; +}; + +/* GENI QUP wrapper that hosts the debug UART (uart7) */ +&qupv3_id_1 { + status = "okay"; +}; + +&sdhc_2 { + vmmc-supply = <&vreg_l9b_2p9>; + vqmmc-supply = <&vreg_l8b_1p8>; + bus-width = <4>; + no-sdio; + no-mmc; + /* TODO: card-detect gpio from downstream DT */ + broken-cd; + status = "okay"; +}; + +&sleep_clk { + clock-frequency = <32000>; +}; + +&uart7 { + status = "okay"; +}; + +&ufs_mem_hc { + reset-gpios = <&tlmm 210 GPIO_ACTIVE_LOW>; + vcc-supply = <&vreg_l17b_2p5>; + vcc-max-microamp = <1300000>; + vccq-supply = <&vreg_l1g_1p2>; + vccq-max-microamp = <1200000>; + vdd-hba-supply = <&vreg_l3g_1p2>; + status = "okay"; +}; + +&ufs_mem_phy { + vdda-phy-supply = <&vreg_l1d_0p88>; + vdda-pll-supply = <&vreg_l3e_1p2>; + status = "okay"; +}; + +&usb_1 { + status = "okay"; +}; + +&usb_1_dwc3 { + /* peripheral-only is safest for bring-up (USB networking in initramfs) */ + dr_mode = "peripheral"; + maximum-speed = "high-speed"; +}; + +&usb_1_hsphy { + vdd-supply = <&vreg_l1e_0p88>; + vdda12-supply = <&vreg_l3e_1p2>; + phys = <&pm8550b_eusb2_repeater>; + status = "okay"; +}; + +/* + * The USB3/DP combo PHY is left disabled for now; high-speed gadget mode is + * enough for the initramfs debug shell. Enable &usb_dp_qmpphy and drop + * "maximum-speed" above once SuperSpeed / DisplayPort is needed. + */ + +&xo_board { + clock-frequency = <76800000>; +};