community/soc-qcom-msm8916: introduce more flexible rproc selection (MR 2632)

Add a replacement for the current "mainline" and "mainline-modem"
kernel variants used for the MSM8916 devices. At the moment this is
implemented using separate DTBs that are all maintained in the kernel.

Unfortunately, this does not seem likely to be accepted upstream in
the mainline kernel. They will expect to have only a single DTB that
enables all available functionality. The "no-modem" variant is a minor
but still very useful use case because it changes the audio routing:
It allows audio to work without any firmware, with more control on
sample rates, latency etc for advanced audio use cases. However,
having a potentially enabled modem requires routing all audio through
the modem. There are two separate DTBs needed for these two setups.

To avoid burdening mainline with this use case, the idea is to apply
the necessary DTB transformations as part of the lk2nd boot process.
Mainline only contains the DTB with the full functionality (audio
routed through modem). The soc-qcom-msm8916-rproc packages place
a magic file at /boot/lk2nd_rproc_mode that is read by lk2nd. When
the file contains "no-modem" lk2nd will transform the DTB to disable
the modem and change the audio routing to bypass the modem.

That way, this feature does not need to be considered in mainline
at all but can still be offered as "nice to have" by lk2nd. It also
simplifies the device packages because the selection is now common
as part of the soc-qcom-msm8916 package.

Together with a related pmbootstrap change there is a nice prompt
for selecting one of these "rproc" providers:

     $ pmbootstrap init
     [...]
     Available providers for soc-qcom-msm8916-rproc (3):
      * all: Enable all remote processors (audio goes through modem) (**default**)
      * no-modem: Disable only modem (audio bypasses modem, ~80 MiB more RAM)
      * none: Disable all remote processors (no WiFi/BT/modem, ~90 MiB more RAM)
     Provider [default]: ...
This commit is contained in:
Minecrell 2021-10-24 12:15:55 +02:00
parent 674c7f63ad
commit a9412824ea
No known key found for this signature in database
GPG key ID: B77CE638A6C2E562
2 changed files with 32 additions and 3 deletions

View file

@ -2,14 +2,19 @@
# Co-Maintainer: Nikita Travkin <nikita@trvn.ru>
pkgname=soc-qcom-msm8916
pkgdesc="Common package for Qualcomm MSM8916 devices"
pkgver=12
pkgver=13
pkgrel=0
url="https://postmarketos.org"
license="BSD-3-Clause"
arch="aarch64 armv7"
options="!check !archcheck !tracedeps pmb:cross-native"
depends="mesa-dri-gallium $pkgname-ucm swclock-offset"
subpackages="$pkgname-ucm $pkgname-modem"
subpackages="
$pkgname-ucm
$pkgname-rproc-none:rproc_none
$pkgname-rproc-no-modem:rproc_no_modem
$pkgname-rproc-all:rproc_all
"
_ucm_commit="d9c15108e4301e0dc0192fa15fddc83f623bca97"
source="$pkgname-$_ucm_commit.tar.gz::https://github.com/msm8916-mainline/alsa-ucm-conf/archive/$_ucm_commit.tar.gz
@ -35,10 +40,34 @@ ucm() {
cp -r ucm2 "$subpkgdir"/usr/share/alsa
}
modem() {
rproc_none() {
pkgdesc="Disable all remote processors (no WiFi/BT/modem, ~90 MiB more RAM)"
provides="soc-qcom-msm8916-rproc=$pkgver-r$pkgrel"
mkdir -p "$subpkgdir"/boot
echo none > "$subpkgdir"/boot/lk2nd_rproc_mode
}
rproc_no_modem() {
pkgdesc="Disable only modem (audio bypasses modem, ~80 MiB more RAM)"
provides="soc-qcom-msm8916-rproc=$pkgver-r$pkgrel"
provider_priority=50
mkdir -p "$subpkgdir"/boot
echo no-modem > "$subpkgdir"/boot/lk2nd_rproc_mode
}
rproc_all() {
pkgdesc="Enable all remote processors (audio goes through modem)"
provides="soc-qcom-msm8916-rproc=$pkgver-r$pkgrel"
provider_priority=100
depends="msm-modem msm-modem-uim-selection q6voiced"
install="$subpkgname.post-install"
replaces="soc-qcom-msm8916-modem"
mkdir -p "$subpkgdir"/boot
echo all > "$subpkgdir"/boot/lk2nd_rproc_mode
install -Dm644 q6voiced.conf "$subpkgdir"/etc/conf.d/q6voiced
}