Skip to content

Add mainline device port for Samsung Galaxy S4 Mini Value Edition (samsung-serranovelte)

Minecrell requested to merge Minecrell/pmaports:serranovelte into master

Note: This is only for the Samsung Galaxy S4 Mini Value Edition (aka GT-I9195I), using the MSM8916 SoC.

Add a mainline device port for samsung-serranovelte. It has similar functionality supported as the existing MSM8916 mainline ports for samsung-a5ulte or wileyfox-crackling:

Status Overview

Most of the bring-up was done on one weekend, which (IMO) shows that MSM8916 is a very nice platform for mainlining.

  • Booting:
  • USB Gadget Mode:
  • Display:
    • Brightness: (TBD)
  • GPU: (Freedreno)
  • Touchscreen:
  • WiFi:
  • Bluetooth:
  • NFC: (with neard)
  • Audio: (Speaker, Headphones, Earpiece, Microphones)
  • Sensors:
    • IMU (Accelerometer + Gyroscope):
    • Magnetometer: (TBD)
    • Proximity/Light Sensor: (TBD)
    • Hall Sensor:
  • Vibrator:
  • Hardware-accelerated video codecs: (Venus)
  • Battery:
  • Charging: Seems to charge without software interaction (same driver as A3/A5)
  • Modem: Partial, works in initial tests (was able to send SMS), not included in this MR
    • GPS:
  • Camera: (TBD)

Limitations

samsung-serranovelte is actually the device I started mainlining first originally. Unfortunately it has a major limitation that complicates running mainline on it:

MSM8916 was the first 64-bit CPU from Qualcomm. Back when it was introduced (together with Android 4.4) there was no support for aarch64 in Android. This means that many MSM8916 devices were actually using armv7 kernel + user-space on downstream, even though the hardware is capable of aarch64. Unfortunately, old firmware versions used together with Android 4.4 do not even support booting aarch64 kernels. That functionality was usually added together with the Android 5.0 update.

On the other hand, mainline Linux only supports MSM8916 on aarch64. This works fine on devices that received an update to Android 5.0, but unfortunately Samsung never bothered to release any update for samsung-serranovelte. Therefore it is stuck on Android 4.4 with armv7, with no way to boot an aarch64 kernel. Even worse, the firmware is signed - so we have no way to update it ourself.

Despite this limitation I've been looking for ways to run mainline on it. So far I haven't been able to come up with any way to make it boot aarch64 kernels (maybe there is none?), so instead I tried to make mainline work on armv7. This works surprisingly well. There were a few fixes needed but now it runs mainline (on armv7) as well as all the other MSM8916 devices. 🎉

Merge request reports