From 2b3bae0a498cef0ff9d02e6d351bb2f5e9d91c0a Mon Sep 17 00:00:00 2001 From: snlavaise Date: Tue, 8 Sep 2026 15:05:50 -0300 Subject: [PATCH] motorola-rtwo: add framebuffer console + pstore for bring-up debugging The device resets right after 'fastboot boot' with no output. Add tools to see why: - rtwo.config kernel fragment: PSTORE_RAM=y + PSTORE_CONSOLE=y (capture the kernel log in ramoops at 0xae000000, readable afterwards from stock Android or a later pmOS boot), QCOM_WDT=y (pet the APSS watchdog early in case the bootloader armed it), FB_SIMPLE/FRAMEBUFFER_CONSOLE on. - .dts: simple-framebuffer at 0xb8000000 reworked (x8r8g8b8, 1080x2400) - reuses the bootloader framebuffer, no panel driver needed. - deviceinfo cmdline: console=tty0 (framebuffer console), ignore_loglevel, clk_ignore_unused + pd_ignore_unused (keep the bootloader display path powered so the framebuffer does not freeze). Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01QF5HebjUsRaxbW4cBX6HJP --- device/testing/device-motorola-rtwo/APKBUILD | 4 +-- .../testing/device-motorola-rtwo/deviceinfo | 2 +- .../linux-postmarketos-qcom-sm8550/APKBUILD | 12 ++++--- .../rtwo.config | 31 +++++++++++++++++++ .../sm8550-motorola-rtwo.dts | 15 ++++++--- 5 files changed, 52 insertions(+), 12 deletions(-) create mode 100644 device/testing/linux-postmarketos-qcom-sm8550/rtwo.config diff --git a/device/testing/device-motorola-rtwo/APKBUILD b/device/testing/device-motorola-rtwo/APKBUILD index b1495d27c..59ccfe889 100644 --- a/device/testing/device-motorola-rtwo/APKBUILD +++ b/device/testing/device-motorola-rtwo/APKBUILD @@ -2,7 +2,7 @@ maintainer="snlavaise " pkgname=device-motorola-rtwo pkgver=1 -pkgrel=1 +pkgrel=2 pkgdesc="Motorola Moto Edge 40 Pro" url="https://postmarketos.org" arch="aarch64" @@ -36,6 +36,6 @@ package() { } sha512sums=" -32c5054a403dc98169061e7aae2bab06b014089f7563ab65515923b1b07ead8832476107f87ecbd94575c69c92ea91eef6db9effe788b0b71e893cfb62e8963b deviceinfo +90b9cef36ae91c1c640cc32f878ad8ea2e66fa22ae472fdaafa8c3a34bc77c59612daabf9688a7d2bb7b0051d48cb298fe6c8388a1de3434a387ed48c7fd4f65 deviceinfo c572e21cb0624b554a22a218b0c4faab9b6412654bed6bfef530f3068d076b21c573bd7f4b3ca65f510f8756f636a861191cce925ef49587db7d68d09558826c modules-initfs " diff --git a/device/testing/device-motorola-rtwo/deviceinfo b/device/testing/device-motorola-rtwo/deviceinfo index b911cdca6..ecf3e300d 100644 --- a/device/testing/device-motorola-rtwo/deviceinfo +++ b/device/testing/device-motorola-rtwo/deviceinfo @@ -27,7 +27,7 @@ deviceinfo_no_framebuffer="false" # Bootloader related deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="console=ttyMSM0,115200n8 earlycon" +deviceinfo_kernel_cmdline="console=tty0 console=ttyMSM0,115200n8 earlycon clk_ignore_unused pd_ignore_unused ignore_loglevel" deviceinfo_generate_bootimg="true" deviceinfo_bootimg_qcdt="false" deviceinfo_header_version="4" diff --git a/device/testing/linux-postmarketos-qcom-sm8550/APKBUILD b/device/testing/linux-postmarketos-qcom-sm8550/APKBUILD index f1127bc80..e6fd79975 100644 --- a/device/testing/linux-postmarketos-qcom-sm8550/APKBUILD +++ b/device/testing/linux-postmarketos-qcom-sm8550/APKBUILD @@ -4,7 +4,7 @@ maintainer="snlavaise " _flavor="postmarketos-qcom-sm8550" pkgname=linux-$_flavor pkgver=6.13_rc3 -pkgrel=0 +pkgrel=1 pkgdesc="Mainline kernel fork for Qualcomm SM8550 (Snapdragon 8 Gen 2) devices" arch="aarch64" _carch="arm64" @@ -42,6 +42,7 @@ _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 + rtwo.config " builddir="$srcdir/linux-$_commit" @@ -58,12 +59,14 @@ prepare() { fi # Generate .config from the in-tree upstream defconfig plus the postmarketOS - # and device config fragments shipped by the kernel repo. + # and device config fragments shipped by the kernel repo, then merge the + # rtwo bring-up fragment on top. # 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). + cp "$srcdir/rtwo.config" arch/$_carch/configs/rtwo.config make ARCH="$_carch" LLVM=1 HOSTLDFLAGS="-fuse-ld=lld" \ - defconfig pmos.config devices.config + defconfig pmos.config devices.config rtwo.config } build() { @@ -105,5 +108,6 @@ package() { # 'pmbootstrap checksum linux-postmarketos-qcom-sm8550' (it downloads ~250 MB). sha512sums=" 19f6d0ee8481e34b0b8c27f07f3023182cda9e2a3d67e40989b1f300b7e82d7ea606fb112599dd9399e0d5f973d43b289d8932a4b578b6ffe4168af05e19f795 linux-postmarketos-qcom-sm8550-22591bbc21da5cc0c6e37503b77bd2d852fe241c.tar.gz -11210b15854d92754b7bc801c1e807497b3336585498770d62d5aec6f81bc5b0b0ad6f775421e3af34edaece04f2b81e9bbc01381b78d1030d97598902d6fb11 sm8550-motorola-rtwo.dts +71270b409e4fc5b6f5ddd164629c937e5ad783761c8a290d46d36a3ba21a96702c1861bfc20e0a1225b2af6d88d21333b5a9c82149f125ed42385c9c7dd207cf sm8550-motorola-rtwo.dts +91cebe340d9e1a3f308725ced37d2f6c4695869100e198d693317f476b1123128b1b24a0604f4aa132d6269de68a87017485149df7d2924cf3a09241b999ffcf rtwo.config " diff --git a/device/testing/linux-postmarketos-qcom-sm8550/rtwo.config b/device/testing/linux-postmarketos-qcom-sm8550/rtwo.config new file mode 100644 index 000000000..3f59088e4 --- /dev/null +++ b/device/testing/linux-postmarketos-qcom-sm8550/rtwo.config @@ -0,0 +1,31 @@ +# Extra kernel config for the Motorola rtwo bring-up. +# Merged on top of defconfig + pmos.config + devices.config. +# Purpose: get diagnostic output on a device with no working display/UART yet. + +# --- pstore / ramoops ------------------------------------------------------- +# Capture the kernel console into the reserved ramoops region (0xae000000, +# same address the stock firmware uses) so that after a failed boot the log +# can be read back - from a later pmOS boot, or from stock Android +# (/sys/fs/pstore/console-ramoops-0). +CONFIG_PSTORE=y +CONFIG_PSTORE_RAM=y +CONFIG_PSTORE_CONSOLE=y +CONFIG_PSTORE_PMSG=y +CONFIG_PSTORE_COMPRESS=y + +# --- watchdog ------------------------------------------------------------- +# The bootloader may hand off with the APSS watchdog armed; build the driver +# in so the kernel starts petting it early instead of getting reset. +CONFIG_QCOM_WDT=y + +# --- framebuffer console ------------------------------------------------- +# Show the boot log on the panel by reusing the bootloader's framebuffer +# (simple-framebuffer node in the .dts). No panel driver required. +CONFIG_FB=y +CONFIG_FB_SIMPLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y + +# --- misc bring-up aids ------------------------------------------------- +CONFIG_MAGIC_SYSRQ=y +CONFIG_LOG_BUF_SHIFT=18 diff --git a/device/testing/linux-postmarketos-qcom-sm8550/sm8550-motorola-rtwo.dts b/device/testing/linux-postmarketos-qcom-sm8550/sm8550-motorola-rtwo.dts index 93dfb1cf8..5a0006c0e 100644 --- a/device/testing/linux-postmarketos-qcom-sm8550/sm8550-motorola-rtwo.dts +++ b/device/testing/linux-postmarketos-qcom-sm8550/sm8550-motorola-rtwo.dts @@ -57,10 +57,15 @@ stdout-path = "serial0:115200n8"; /* - * Bootloader continuous-splash framebuffer. Geometry is a best - * guess (1080x2400, 32bpp) from the stock cont_splash / - * disp_rdump region. If the display stays black or garbled, - * adjust format/stride or drop this node. + * Bootloader continuous-splash framebuffer, reused as an early + * console (CONFIG_FB_SIMPLE). Needs no panel driver. + * + * Panel is 1080x2400 (NT37705). Format/base are a best guess + * from the stock cont_splash / disp_rdump regions. If the screen + * is garbled: try format "x8r8g8b8" -> "r5g6b5" (and stride + * 1080*2) -> drop the node. If it is offset/torn, the stride is + * wrong. If it shows briefly then freezes, the display clocks + * got gated - add "clk_ignore_unused" to the kernel cmdline. */ framebuffer0: framebuffer@b8000000 { compatible = "simple-framebuffer"; @@ -68,7 +73,7 @@ width = <1080>; height = <2400>; stride = <(1080 * 4)>; - format = "a8r8g8b8"; + format = "x8r8g8b8"; }; };