From the stock LineageOS images:
- boot.img carries a raw uncompressed arm64 Image (MZ header), not
Image.gz. Install arch/arm64/boot/Image as vmlinuz.
- dtbo.img is an 8-entry overlay table; the bootloader applies overlay
#7 (androidboot.dtbo_idx=7, 87 fragments) onto the base DTB by
phandle. Against our mainline DTB that produces a corrupt merged tree
-> instant panic. Ship an empty dtbo (0 entries) to flash to dtbo_b,
and set deviceinfo_flash_fastboot_partition_dtbo.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QF5HebjUsRaxbW4cBX6HJP
append_dtb=true makes boot-deploy concatenate the raw DTB onto the
gzip'd kernel Image inside boot.img. arm64 has no appended-DTB support;
the trailing bytes corrupt the kernel load -> instant panic. GKI v4
devices put the DTB only in vendor_boot (--dtb); the kernel stays plain.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QF5HebjUsRaxbW4cBX6HJP
pmbootstrap's boot-deploy calls mkbootimg for header v4 without --base or
any --*_offset, so it uses the mkbootimg default base 0x10000000: the DTB
lands at dtb_addr 0x11f00000, well outside RAM (starts at 0x80000000).
LineageOS/Motorola build with base 0. Pass the stock offsets via
deviceinfo_bootimg_custom_args.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QF5HebjUsRaxbW4cBX6HJP
The Motorola bootloader does Qualcomm-style DTB selection: it matches
qcom,msm-id / qcom,board-id from each FDT in vendor_boot against the
detected SoC/board and passes only the match to the kernel. Mainline
qcom DTs dropped these props, so ours had none -> no match -> the ABL
hands the kernel no DTB -> instant panic, no console, <2s bootloop
(seen on every kernel version tried). Values from the stock live DT
(SM8550 = 0x218, board-id 0x241/0xb1b0). Mainline ignores them.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QF5HebjUsRaxbW4cBX6HJP
Full .dts + fixed 7.2 kernel still resets in <2s with no output. Cut the
.dts to SoC + regulators + debug UART + HS-peripheral USB only - no
reserved-memory, no simple-framebuffer, no touch/SD/UFS/keys. If this
reaches the initramfs the fault was in a removed node; if it also resets
the problem is the kernel/config/boot image.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QF5HebjUsRaxbW4cBX6HJP
The 7.2 build installed vmlinuz.efi (EFI ZBOOT self-decompressor) into
the Android boot.img; the Motorola bootloader can't execute it and
resets in <2s. Disable CONFIG_EFI_ZBOOT, install arch/arm64/boot/Image.gz
as vmlinuz, and drop pmb:kconfigcheck-uefi (which mandates ZBOOT and is
irrelevant for an Android-boot.img device).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QF5HebjUsRaxbW4cBX6HJP
The full initramfs (12.8 MB) does not fit init_boot (8 MB), and stock
init_boot's /init overrides pmOS's in vendor_boot. Splitting produces a
small base initramfs that fits, so it can be flashed to init_boot too.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QF5HebjUsRaxbW4cBX6HJP
7.2 flattened the qcom dwc3 nodes: no more usb_1_dwc3 label, usb_1 is the
dwc3 itself. Move dr_mode/maximum-speed onto &usb_1 and drop the
SuperSpeed phy + usb-role-switch so it comes up as a plain HS gadget
without pmic-glink.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QF5HebjUsRaxbW4cBX6HJP
The Dec-2024 sm8550 bring-up snapshot (6.13-rc3) black-screen bootloops
on rtwo with no output. Switch to plain upstream 7.2 (kernel.org, same
tarball as linux-postmarketos-mainline) which has ~18 months of SM8550
fixes (SPMI, watchdog node, USB, UFS, display, ...).
- config base is now config-mainline.aarch64 (copied as
config-motorola-rtwo.aarch64) + the rtwo.config fragment appended.
- rtwo.config: disable RUST + DEBUG_INFO + non-Qualcomm ARCH_* to keep
the build within disk; add SIMPLEDRM/SYSFB_SIMPLEFB alongside FB_SIMPLE.
- drop the hand-added APSS watchdog node from the .dts (upstream
sm8550.dtsi has it since 6.8).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QF5HebjUsRaxbW4cBX6HJP
The generic arm64 defconfig builds modules for every SoC family; the
build tree blew past the disk (SIGBUS in modfinal). Disable DEBUG_INFO
and every non-Qualcomm ARCH_* family in rtwo.config.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QF5HebjUsRaxbW4cBX6HJP
'fastboot boot' hands off cleanly (OKAY / booting) and the device then
resets - classic unpetted APSS watchdog. sm8550.dtsi at 6.13-rc3 has no
watchdog node; add it for rtwo so qcom_wdt binds and keeps it fed.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QF5HebjUsRaxbW4cBX6HJP
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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QF5HebjUsRaxbW4cBX6HJP
boot-deploy needs the AOSP mkbootimg (from android-tools) to build the
header v4 boot.img + vendor_boot.img pair; mkbootimg-osm0sis does not
handle GKI/vendor_boot. Matches the other header-v4 devices (Pixel 6).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QF5HebjUsRaxbW4cBX6HJP
The reference-design rail voltages that both sm8550-mtp and the rtwo
downstream share are unchanged, but three rails carry board-specific
ranges in the Motorola DT / device DTB dump:
L11B (panel VDD): 1.20-1.50 V -> 1.23-1.28 V
L1E (USB HS phy): fixed 0.88 V -> 0.88-0.912 V
L1G (UFS VCCQ): fixed 1.20 V -> 1.144-1.256 V
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QF5HebjUsRaxbW4cBX6HJP
Cross-referenced the LineageOS 23.2 sources (android_device_motorola_rtwo,
sm8550-common, sm8550-devicetrees) and the DTB dumped from the device:
- Fix debug UART: it is GENI SE7 under qupv3_id_0 (@ac0000), not qupv3_id_1.
- Add ramoops (0xae000000/0x60000) and a cont_splash reserved region
(0xb8000000), both matching the stock reserved-memory map.
- Add a simple-framebuffer at 0xb8000000 (1080x2400) so there is an early
console on the panel; deviceinfo screen size corrected to 1080x2400.
- Goodix GT9916 touchscreen on spi4 (SE4), reset TLMM24 / irq TLMM25,
avdd = pm8550 L9B, vddio = pm8550 L10B (new rails L8B/L10B added).
- gpio-keys: volume-up on pm8550 GPIO6; enable PMIC pwrkey + resin
(volume-down).
- SD card: real card-detect on pm8550 GPIO12, vqmmc = L8B.
- modules-initfs: add goodix-berlin + eusb2 phy modules.
Panel/DRM, GPU, modem, WiFi/BT (WCN7850), charger and camera are documented
as TODO in the .dts.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QF5HebjUsRaxbW4cBX6HJP
Bring-up for the Motorola Moto Edge 40 Pro (codename "rtwo", SM8550 /
Snapdragon 8 Gen 2).
New linux-postmarketos-qcom-sm8550 aport:
- Built from the postmarketOS soc/qcom-sm8550 tree (branch bringup,
6.13-rc3, commit 22591bbc).
- Kernel config is generated at build time from the in-tree upstream
defconfig plus the repo's pmos.config and devices.config fragments.
- Ships a WIP sm8550-motorola-rtwo.dts: SoC + PMICs + the sm8550-mtp
regulator tree, UART7 debug console, USB in high-speed peripheral mode,
UFS and SD card. Display panel, touchscreen, modem, WiFi/BT, GPU zap
shader and reserved-memory carveouts still need to be described from
Motorola's downstream sources.
device-motorola-rtwo:
- deviceinfo completed from bootimg analysis of the stock boot.img:
Android boot header v4, 4096-byte pages, no qcdt, fastboot flashing.
Added screen geometry, UFS sector size and a serial getty; framebuffer
disabled until the panel works.
- Depends on the new kernel, soc-qcom and mkbootimg.
Both packages still need 'pmbootstrap checksum' for the kernel tarball and
a real boot test; see the TODO comments in the APKBUILDs and the .dts.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QF5HebjUsRaxbW4cBX6HJP
The config was for an older version of Linux, so was getting new
defaults applied when being built. Now the committed config is the same
as Linux was actually using to build.
Apparently the compression changed slightly for the Github tar,
producing a different sha.
Part-of: <https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/9421>
devices.config being dropped from linux-next partially broke expressatt
as the mainline kernels do not enable peripherals that are needed
by expressatt. Let's instead add it to kconfig-generic.toml and use
postmarketOS's generic kernels instead of Alpine's.
Signed-off-by: Rudraksha Gupta <guptarud@gmail.com>
Part-of: <https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/9463>
Bump the kernel, regenerated config from fragments with
pmbootstrap kconfig generate linux-postmarketos-stericsson.
The kernel is looking for firmware in /lib/firmware, so I had
to fix this in the firmware package as well, was weird with a
subfolder to begin with, I have no idea why we were doing that.
Signed-off-by: Linus Walleij <linusw@kernel.org>
Part-of: <https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/9437>