A month of upstreaming phones based on Snapdragon 845

Intro

My dissatisfaction with very slow "mainlining" in the sdm845-mainline project grew stronger and stronger.

Few points which made me unhappy:

  • the project enforced no mainlining policy, e.g. patches has been added, but never sent upstream
  • various quality ‒ some "premium" patches, but also many of hacked-up ugly ones, and hacks without clear path to mainline
  • very slow progress due to maintainers not having time.

I understand,

  • that getting devices work is important (even in questionable quality), but there also needs to be effort to guide people to contribute to mainline
  • that rebases are sometimes pain and very hard to do, when debugging multiple devices issues at the time, but I would definitely love to see higher quality rebase and maintainance of the tree, where I believe maintainers have the experience to get there, but that get us to the third point...
  • maintainers may not have that much free time to focus on sdm845-mainline. As far I know, it's volunteer work, so I understand no-one (!) should demand time of the people volunteering to do something nice for community, but then it's the duty of maintainers to find someone who will.

More than a month ago I decided to not rely on mercy of others (giving access to the project), but proactively push towards the future I was hoping will happen few years ago.

The power of open-source I believe is in forking. When you see something doesn't work for you or the community, you're free to fork. It's also double-edged sword. Multiple forks may hurt the community. Luckily here, we have one mainline kernel, where interests of everyone meets!


Week 0 (14. ‒ 20. 11.)

Needed to setup the basics, communication channels, invite people interested in progress, and get the repository running.

Code won't compile, many bugs. We need to sort out patches. Moved multiple commits supporting devices I don't posses into MR aside, to get basics working first.

The toughest week. Nothing works. There will be dragons.

Many patches needs big re-bases and rework, everything conflict with anything. This needs to be addressed.

David Heidelberg
Vasiliy "NekoCWD" Doylov
  • Discussed focus for the main camera.
  • Shared focus coil (lc898217xc) patches and send to mailing list!
agx
  • Did lot of build-testing :)
  • Hit another compilation issue from the imported sdm845-mainline patches, where things didn't worked with gcc, but only clang.
Petr Hodina
  • Did initial testing and found we still don't have display working on OP6/6T.
  • Insight into Pixel 3 Citadel/Titan/SPI stuff.
Sam
  • Proposed more transparency, room is visible outside.
  • Contributed to the CI discussion and focusing of the sdm845-next project.

Week 1 (21. ‒ 27. 11.)

Something working, we're not there yet.

We have stability issues such as

disp_cc_mdss_pclk0_clk_src: rcg didn't update its configuration.

and consequent crashes (Pixel 3) or Qualcomm Crashdumps (OnePlus 6/6T).

Haptics is broken as the upstream sent patches doesn't work.

No cameras currently working.

David Heidelberg
  • Started writing a changelog for the PMI8998 Fuel Gauge patchset, which had many different revisions and changes on top of.
    • Thanks to clean-up done by Barnabás Czémán (barni2000), the chances to get mainlined rised a lot. Thank you Barni!
  • Asked Stephan Gerhold about the qdsp6 patchset series.
    • I got feedback that these patches needs full rewrite and more work
    • 2 ‒ 3 months of paid work likely, discussion being done regarding to financing (outside of current scope sdm845-next)
  • More cleanups and polishing. (I can write this forever...ever...ever).
  • Ongoing discussion on handling firmware bug on Xiaomi Poco F1,
    • ath10k: Introduce a devicetree quirk to skip host cap QMI requests
    • started from device-tree quirk, but maintainers wants to have firmware quirk. Make sense.
    • ath10k: Introduce a firmware quirk to skip host cap QMI requests
    • Driver needs to know firmware quirk before firmware is loaded. OOOPS.
    • We need to figure out what's next. Paul Sajna (sajattack) has same problem on LG G7 and V35, we need to find the right solution.
  • Discussion started on mailing lists:
  • Patches polished and sent:
agx
  • Started testing Shift 6MQ and found out display won't initialize, later provided patch to hack around the initialization (use the panel driver as module =m).
Petr Hodina
  • Experimented with touchscreen driver for Pixel 3, found alternation to existing driver to run touchscreen, thou it works a bit weird.
Vasiliy "NekoCWD" Doylov
  • Actuator discussions, Most of OnePlus enchiladas have lc* actuators, fajitas - sa* or a mix.
longnoserob
Marco Mattiolo (Tiol)
  • Started working on 6.18 kernel for Mobian using some of our polished patches, asked mostly about the C-PHY patchset for enablement of the main rear camera (imx519 driver).

Week 2 (28. 11. ‒ 4. 12.)

Upstream wants to have all new firmware paths in format

sdm845/Vendor/codename instead of our usual sdm845/codename. Make sense, but we'll going to make unpleasant changes to the distributions.

📝 Made a small helper function, for cherry-picking from b4 branches, as the merging is not so convinient as it creates the merge commit and re-sort commits when rebased.

  1. We find a tag (thus we assume b4 branch is based on next, linus, or just something tagged.
  2. Print range of the commits, so we see what is being picked and wait for conformation.
  3. Just cherry-pick, but we want to keep "empty" b4 commits, which provides nice separator, changelog, and links to the previously sent version.
$ cat ~/.config/fish/functions/cpick.fish
function cpick
  set base_tag $(git describe $argv[1] --no-abbrev)
  set range $base_tag..$argv[1]
  git log --oneline $range
  read -P "Cherry pick into current tree $(set_color green; git describe --all)$(set_color normal). y/n?" -l confirm     
  switch $confirm
    case y Y
      git cherry-pick --empty=keep $range
  end
end
$ cpick b4/qcom-cphy  # picks commit from the given branch

cpick workflow screenshot

David Heidelberg
Petr Hodina
  • Worked on getting upstream ftmsts driver work with Pixel 3.
NekoCWD
Marco Mattiolo (Tiol)
  • Figured out, why main rear camera didn't work for him on 6.18 ‒ old C-PHY patch (most likely my early patch included in sdm845-mainline).
Pavel Píša and Sam
  • Had nice discussion regarding to multi-function compose gadget, g_ether and other USB configuration options.

Week 3 (5. ‒ 12. 12.)

We're getting stable.

David Heidelberg
  • Thanks to Konrad, improved C-PHY initialization sequence for C-PHY patchset.
  • Pixel 3 XL boots into framebuffer, so screen works now (disabled dispcc which interfered with framebuffer)
  • Cleaned up of Xiaomi Mi Mix 3 (perseus).
  • Firmware sent:
  • Reviewed:
    • [PATCH v4 00/12] arm64: dts: qcom: sdm845-lg-{common, judyln}: Improve HW support in dts
longnoserob
  • Sent v2 of SLPI enablement on Xiaomi Poco F1 patches.
    • Including firmware paths change.
Vasiliy "NekoCWD" Doylov
  • Small build fixes.
Petr Hodina
  • Porting stuff from older trees to get Sony Xperia XZ3 (akatsuki) working again on `-next`.

Next month

There is long journey ahead of us. Mainlining fuel gauge will likely bring more stability and better charging, on other hand I assume it'll ask for another month of work.

EOM ‒ End of Month

Journey

We started with hardly booting -next tree. After month, we're close to having fully functional phones and numbers of patches are increasing (due to good people fixing issues), but also decreasing, as we having no-keep, everything to upstream policy.

Except rare or patches not meant to be upstream, we preparing and sending patches where they belong. Mainline.

I hope, one day this community will turn into direct kernel contributors and maintainers. Hopefully our effort will lead to the state, where patches contained in sdm845-next a top of actual -next repository can be counted on one hand.

Devices

🗒️ keep in mind we started with hardly booting kernel.

Device Works Work-in-progress (WIP) Doesn't work
OnePlus 6 Hopefully everything calls
OnePlus 6T Hopefully everything calls
Xiaomi Poco F1 Something should work. calls
SHIFT 6MQ Boots, display works.
Pixel 3 WiFi, framebuffer, display (only one way -> on) Display stability and touchscreen (Petr Hodina)
Pixel 3 XL WiFi, framebuffer Display (David Heidelberg)

Ending titles

I would like to thank to everyone who contributed within the sdm845-next project, but also to everyone who contributed outside of our channel, as f.e. Paul Sajna (sajattack) who worked on LG G7 ThinQ and V35 ThinQ mainline improvements.

There's an upcoming hackday planned for January 2026 (most likely between 12th and 16th Jan) in Prague. Stay tuned for more information!

Join us!

If you want to contribute, learn, or being curious, everyone with our goals in mind is welcome to join!

Expenses report

Category Time spent
David Heidelberg (donate with LiberaPay) Development 10 člověkodnů
Review 6 člověkodnů
Q&A 4 člověkodnů
Events / Meetings 1.5 člověkodne
Petr Hodina (done with LiberaPay) Development 5 člověkodnů
Research 1.5 člověkodne
Q&A 12.5 člověkodnů
Events/ Meetings 1.5 člověkodne
Vasiliy "NekoCWD" Doylov Development 5 člověkodnů
Review 7 člověkohodin
Q&A 7 člověkohodin
longnoserob Development 3 člověkohodiny
Events / Meetings 1 člověkohodina
agx (contribute to Phosh e.v.) Q&A 0.5 člověkohodiny
Marco "Tiol" Mattiolo Q&A 4 člověkohodiny
  • Development ‒ writing new code, fixing and rebasing existing one, writing the documentation.
  • Review ‒ trying to understand existing code, helping other with preparation of their code for upstreaming.
  • Q&A ‒ flashing images & testing them on DUT, debugging issues
  • Events / Meeting ‒ organizing, attending, and contributing to the events and occasional sync-up meetings.
  • Time spent, measured in "člověkoden" (also knows as work-day, man-day / MD, or a cat-day) or "člověkohodina" .