But here lies the rub: While the chip is natively ARM64, official Linux mainline support remains a patchwork quilt. In this post, we’ll unpack what it takes to get an ARM64 Linux distribution (or a custom Android GKI kernel) running on MSM8953, focusing on the driver stack, missing pieces, and community solutions.
For developers, the msm8953 presents an excellent entry point into ARM64 driver development. The hardware is powerful enough to be interesting, widely available, and has a supportive community that has laid much of the groundwork. The work of upstreaming and refining these drivers is not just about supporting old hardware; it is about preserving it and keeping it functional and secure for years to come.
CONFIG_QCOM_QMI_HELPERS=m # Stick to module CONFIG_QCOM_RMTFS_MEM=y # Only if you have rmtfs service in userspace
A typical device tree node for a peripheral—such as an I2C serial engine—looks like this in the ARM64 codebase: msm8953 for arm64 driver
Here is a comprehensive template for a modern MSM8953 platform driver:
: Hexagon QDSP6 V6, which offloads audio, sensor, and cellular modem workflows via Hexagon Peripheral Image Loader (PIL) drivers.
Unlike older 32-bit platforms restricted by the 4GB physical addressing limit, ARM64 handles a massive physical address space. However, the MSM8953 hardware registers remain mapped within the lower 32-bit address space (MMIO regions) for backward compatibility. Key address blocks include: But here lies the rub: While the chip
14 nm FinFET, designed for high energy efficiency and low power dissipation.
Downstream Android kernels use proprietary Qualcomm drivers ( kgsl for graphics, mdss for display). Porting to newer 64-bit environments often requires switching to the open-source DRM stack, which uses standard Linux display frameworks. 5. Challenges in Mainlining and Porting Drivers
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig The hardware is powerful enough to be interesting,
If your driver isn't loading, check dmesg | grep qcom . Often, a driver fails because a dependency (like a specific clock or regulator) wasn't initialized first. Conclusion
Translates the physical address defined in the device tree into a virtual address space that the ARM64 MMU can safely read and write. 4. Cross-Compiling for the ARM64 Architecture
The Snapdragon 625 (system-on-chip model MSM8953) is one of the most successful mid-range mobile processors ever produced. Built on a 14nm FinFET process, it features eight ARM Cortex-A53 cores running up to 2.0 GHz, coupled with an Adreno 506 GPU. While originally shipping with 32-bit (AArch32) Android kernels to optimize RAM usage on early devices, its underlying architecture is fully 64-bit (AArch64).
Create a Makefile in the same directory as your driver code ( msm8953_driver.c ):
The MSM8953 uses the pinctrl-msm driver. If you are developing a driver for a new sensor or button, you must define the pin configuration (bias, drive strength, and function) in the pinctrl section of your ARM64 device tree. 2. Power Management (RPM)