Skip to content
Snippets Groups Projects
Verified Commit 8b455932 authored by Pan Ortiz's avatar Pan Ortiz Committed by Alexey Minnekhanov
Browse files

xiaomi-nabu: new device (MR 5804)

This adds Xiaomi Pad 5, it uses a close to mainline kernel on 6.12.0
the firmware is packaged and supported, although hexagonrpcd is not working yet.
this is a continuation from
https://github.com/map220v/postmarket_xiaomi_nabu/tree/test
updating its config and updating its components.
i based the hexagonrpcd bringup from xiaomi-elish and google-sargo

[ci:skip-build]: already built successfully in CI
parent ec7a77f7
Branches
No related tags found
1 merge request!5804xiaomi-nabu: new device
Pipeline #212109 passed
Showing
with 8942 additions and 0 deletions
/lib/firmware/qcom/a630_sqe.fw
/lib/firmware/qcom/a640_gmu.bin
/lib/firmware/qcom/sm8150/xiaomi/nabu/a640_zap.mbn
\ No newline at end of file
# iio-sensor-proxy with libssc: accelerometer mount matrix
SUBSYSTEM=="misc", KERNEL=="fastrpc-*", ENV{ACCEL_MOUNT_MATRIX}+="-1, 0, 0; 0, -1, 0; 0, 0, -1"
# Be compatible with the fix to CVE 2024-41024.
SUBSYSTEM=="misc", KERNEL=="fastrpc-sdsp-secure", SYMLINK="fastrpc-sdsp"
# Reference: <https://postmarketos.org/devicepkg>
pkgname=device-xiaomi-nabu
pkgdesc="Xiaomi Pad 5"
pkgver=1
pkgrel=0
url="https://postmarketos.org"
license="MIT"
arch="aarch64"
options="!check !archcheck"
depends="
linux-postmarketos-qcom-sm8150-nabu
hexagonrpcd
make-dynpart-mappings
mesa-vulkan-freedreno
mkbootimg
postmarketos-base
swclock-offset
"
makedepends="devicepkg-dev"
replaces="hexagonrpcd-openrc"
source="
deviceinfo
30-gpu-firmware.files
XiaomiPad5.conf
HiFi.conf
pulse-xiaomi_nabu.conf
nabu.pa
hexagonrpcd.confd
81-libssc-xiaomi-nabu.rules
no-hexagonrpcd-on-suspend.sh
"
subpackages="
$pkgname-nonfree-firmware:nonfree_firmware
$pkgname-nonfree-firmware-openrc:nonfree_firmware_openrc
$pkgname-mainline-firmware:mainline_firmware
$pkgname-alsa:alsa
$pkgname-pulseaudio:pulseaudio
"
build() {
devicepkg_build $startdir $pkgname
}
package() {
devicepkg_package $startdir $pkgname
install -Dm644 "$srcdir"/81-libssc-xiaomi-nabu.rules \
"$pkgdir"/usr/lib/udev/rules.d/81-libssc-xiaomi-nabu.rules
}
mainline_firmware() {
pkgdesc="Firmware support packages for mainline kernel"
depends="firmware-xiaomi-nabu-adreno"
install_if="linux-postmarketos-qcom-sm8150-nabu $pkgname-nonfree-firmware"
mkdir "$subpkgdir"
install -Dm64 "$srcdir/30-gpu-firmware.files" \
"$subpkgdir/usr/share/mkinitfs/files/30-gpu-firmware.files"
}
nonfree_firmware() {
pkgdesc="Firmware for GPU, Touschreen, Audio, Bluetooth, WiFi, etc."
depends="
firmware-xiaomi-nabu-adreno
firmware-xiaomi-nabu-adsp
firmware-xiaomi-nabu-cdsp
firmware-xiaomi-nabu-cirrus
firmware-xiaomi-nabu-modem
firmware-xiaomi-nabu-wlan
firmware-xiaomi-nabu-hexagonfs
firmware-xiaomi-nabu-slpi
firmware-xiaomi-nabu-venus
firmware-xiaomi-nabu-touchscreen
linux-firmware-qca
msm-modem
hexagonrpcd
tqftpserv
"
mkdir "$subpkgdir"
}
nonfree_firmware_openrc() {
install_if="$pkgname-nonfree-firmware=$pkgver-r$pkgrel openrc"
install="$subpkgname.post-install"
replaces="hexagonrpcd-openrc"
install -Dm755 "$srcdir"/no-hexagonrpcd-on-suspend.sh \
"$subpkgdir"/etc/elogind/system-sleep/no-hexagonrpcd-on-suspend.sh
install -Dm644 "$srcdir"/hexagonrpcd.confd \
"$subpkgdir"/etc/conf.d/hexagonrpcd-sdsp
}
alsa() {
pkgdesc="Audio configuration files"
depends="alsa-ucm-conf"
install_if="linux-postmarketos-qcom-sm8150-nabu $pkgname-nonfree-firmware"
mkdir "$subpkgdir"
install -Dm644 "$srcdir/XiaomiPad5.conf" "$subpkgdir/usr/share/alsa/ucm2/conf.d/sm8150/Xiaomi Pad 5.conf"
install -Dm644 "$srcdir/HiFi.conf" "$subpkgdir/usr/share/alsa/ucm2/Xiaomi/nabu/HiFi.conf"
}
pulseaudio() {
pkgdesc="Pulseaudio configuration files"
depends="pulseaudio"
install_if="linux-postmarketos-qcom-sm8150-nabu $pkgname-nonfree-firmware"
mkdir "$subpkgdir"
install -Dm644 "$srcdir/pulse-xiaomi_nabu.conf" "$subpkgdir/etc/pulse/daemon.conf.d/89-xiaomi_nabu.conf"
install -Dm644 "$srcdir/nabu.pa" "$subpkgdir/etc/pulse/default.pa.d/nabu.pa"
}
sha512sums="
9c99b80f35e17298ca5848bcb0ae1a9d612b34a8479c8959de351fb785cb3bd60261d74f998a49ca3a933c6f74f82d586a9606d4a82aa8b414d6a52f87e8deaf deviceinfo
ed5788faaa0b70b0fd1d7702ce9e1991749aae4226ae1aac12c73c705541880c8fd7715b3da1abbdb8b0e469081744e92822e0ec3f56ad0160405a6fdfac5806 30-gpu-firmware.files
7b0b16f02b59b74cef7d82ae4e33f8d0c4ea12515824abb3392891eb75c365d19efec685f6f6248b7fec1e2698caca741bba01687673914d0f9de188444e0b37 XiaomiPad5.conf
2f493f47aa0fc421a467fd16e878f2a40963111a4581fd0ceb9606c9c529ed017cb29045961780d9785afe1fcc8aa476b6c954dabbf63b8b2309e686476f5036 HiFi.conf
02e2600514fc29ab83d056ada3d1fb0b8a598dc47c9848aebdeef3f0f67bb78cd45c5b23d3158fb3a0826f47061161bbc7ee8cd9ac5c408c1de37cdbe5d8e9ba pulse-xiaomi_nabu.conf
d66d6f2129f8aef4449137a1506fb3b3a1275c98502238537ac4dd0c174145706bac971e7e100d3599c9b8aa9c62319c302884d39aad5ba99c9bdcbe1e54bc23 nabu.pa
76c563e54842b46ce534e04f3d4838ec75c5a86a850ffaf423902be3db77fbf1bcb3aaf1534bce5b6ae60fe99630b2db1a5389a7dcc185bf5d84a7e4a20d95fc hexagonrpcd.confd
8b36861501e089a2e60deae27f56b58496ffef49e91677cf61b404abc2bf77fb0325c897b513a0d3962a0d3436b250e4408daf67b7dd6640bc0e0a1031d3a2d4 81-libssc-xiaomi-nabu.rules
0795934d0d572e5785051b89acd5dc7aa36831121424c330886e8068c8709ec6a2477b6b63b54cac10f344511271fe617f8240b7bcfde3297129b3b21198fffb no-hexagonrpcd-on-suspend.sh
"
# Use case configuration for Xiaomi Pad 5
# Author: map220v <map220v300@gmail.com>
#
# Playback Devices
# - Internal Speakers : CS35L41 driver : MultiMedia1 <-> QUAT_TDM_RX_0
# Capture Devices
# - Internal Bottom Mic : WCD9341 driver : MultiMedia2 <-> SLIMBUS_0_TX (AIF1_CAP, ADC1, TX6)
# - Internal Top Mic : WCD9341 driver : MultiMedia2 <-> SLIMBUS_0_TX (AIF1_CAP, ADC3, TX5)
SectionVerb {
EnableSequence [
# SPEAKER PLAYBACK
cset "name='BR PCM Soft Ramp' 4ms"
cset "name='TR PCM Soft Ramp' 4ms"
cset "name='BL PCM Soft Ramp' 4ms"
cset "name='TL PCM Soft Ramp' 4ms"
cset "name='BR Analog PCM Volume' 8"
cset "name='TR Analog PCM Volume' 8"
cset "name='BL Analog PCM Volume' 8"
cset "name='TL Analog PCM Volume' 8"
# Enable Quaternary TDM0 mixer on MultiMedia1
cset "name='QUAT_TDM_RX_0 Audio Mixer MultiMedia1' 1"
# Bottom Mic
cset "name='ADC1 Volume' 8"
cset "name='AIF1_CAP Mixer SLIM TX6' 1"
cset "name='CDC_IF TX6 MUX' DEC6"
# Top Mic
cset "name='ADC3 Volume' 8"
cset "name='AIF1_CAP Mixer SLIM TX5' 1"
cset "name='CDC_IF TX5 MUX' DEC5"
cset "name='AMIC4_5 SEL' AMIC4"
cset "name='MultiMedia2 Mixer SLIMBUS_0_TX' 1"
]
DisableSequence [
# Disable Quaternary TDM0 mixer on MultiMedia1
cset "name='QUAT_TDM_RX_0 Audio Mixer MultiMedia1' 0"
cset "name='MultiMedia2 Mixer SLIMBUS_0_TX' 0"
cset "name='CDC_IF TX6 MUX' ZERO"
cset "name='CDC_IF TX5 MUX' ZERO"
]
# Set initial volumes
BootSequence [
]
Value {
TQ "HiFi"
}
}
SectionDevice."Speaker" {
Comment "Speaker playback"
Value {
PlaybackPriority 150
PlaybackPCM "hw:${CardId},0"
PlaybackChannels 2
}
}
SectionDevice."Mic" {
Comment "Internal Microphones"
EnableSequence [
cset "name='ADC MUX6' AMIC"
cset "name='ADC MUX5' AMIC"
cset "name='AMIC MUX6' ADC1"
cset "name='AMIC MUX5' ADC3"
cset "name='ADC1 Volume' 8"
cset "name='ADC3 Volume' 8"
]
DisableSequence [
cset "name='AMIC MUX6' ZERO"
cset "name='AMIC MUX5' ZERO"
cset "name='ADC1 Volume' 0"
cset "name='ADC3 Volume' 0"
]
Value {
CapturePriority 200
CapturePCM "hw:${CardId},1" # MultiMedia2
PlaybackChannels 2
}
}
# Use case configuration for Xiaomi Pad 5
# Author: map220v <map220v300@gmail.com>
Syntax 3
SectionUseCase."HiFi" {
File "/Xiaomi/nabu/HiFi.conf"
Comment "HiFi quality Music."
}
#!/bin/sh
rc-update add tqftpserv boot
rc-update add hexagonrpcd-sdsp default
# Reference: <https://postmarketos.org/deviceinfo>
# Please use double quotes only. You can source this file in shell
# scripts.
deviceinfo_format_version="0"
deviceinfo_name="Xiaomi Pad 5"
deviceinfo_manufacturer="Xiaomi"
deviceinfo_codename="xiaomi-nabu"
deviceinfo_year="2021"
deviceinfo_dtb="qcom/sm8150-xiaomi-nabu"
deviceinfo_append_dtb="true"
deviceinfo_arch="aarch64"
deviceinfo_flash_kernel_on_update="true"
# Device related
deviceinfo_chassis="tablet"
deviceinfo_keyboard="false"
deviceinfo_external_storage="false"
deviceinfo_screen_width="1600"
deviceinfo_screen_height="2560"
deviceinfo_gpu_accelerated="true"
# Bootloader related
deviceinfo_flash_method="fastboot"
deviceinfo_kernel_cmdline="pd_ignore_unused,clk_ignore_unused,console=ttyMSM0,115200"
deviceinfo_generate_bootimg="true"
deviceinfo_bootimg_qcdt="false"
deviceinfo_bootimg_mtk_mkimage="false"
deviceinfo_bootimg_dtb_second="false"
deviceinfo_flash_offset_base="0x00000000"
deviceinfo_flash_offset_kernel="0x00008000"
deviceinfo_flash_offset_ramdisk="0x01000000"
deviceinfo_flash_offset_second="0x00f00000"
deviceinfo_flash_offset_tags="0x00000100"
deviceinfo_flash_pagesize="4096"
deviceinfo_flash_sparse="true"
# Required for devices using UFS as storage (instead of e.g. eMMC)
deviceinfo_rootfs_image_sector_size="4096"
# Support super partition flashing
deviceinfo_super_partitions="/dev/sda23 /dev/sda23"
# Xiaomi Mi Pad 5 specific hexagonrpcd firmware directory
hexagonrpcd_fw_dir="/usr/share/qcom/sm8150/xiaomi/nabu/"
unload-module module-suspend-on-idle
#!/bin/sh
if [ "$1" = "pre" ]
then
# If HexagonRPCD listens for a remote method call while the device is
# waking up, the DSP may crash. Assume that HexagonRPCD has fulfilled
# all incoming remote method invocations, and stop it.
rc-service hexagonrpcd-sdsp stop
fi
default-sample-format = s24le
default-sample-rate = 48000
\ No newline at end of file
pkgname=firmware-xiaomi-nabu
pkgver=20241112
pkgrel=0
pkgdesc="Firmware for Xiaomi Pad 5"
subpackages="
$pkgname-adreno
$pkgname-adsp
$pkgname-cdsp
$pkgname-cirrus
$pkgname-modem
$pkgname-venus
$pkgname-wlan
$pkgname-touchscreen
$pkgname-hexagonfs
$pkgname-slpi
"
url="https://gitlab.postmarketos.org/panpanpanpan/nabu-firmware"
arch="aarch64"
license="proprietary"
options="!check !strip !archcheck !tracedeps pmb:cross-native"
_commit="b17a3ce0f08871f1c4553351b2f64b2c6969cd5c"
source="https://gitlab.postmarketos.org/panpanpanpan/nabu-firmware/-/archive/$_commit/nabu-firmware-main.tar.gz"
builddir="$srcdir/nabu-firmware-$_commit"
package() {
#parent package is empty
mkdir -p "$pkgdir"
}
adreno() {
pkgdesc="Xiaomi Pad 5 adreno firmware"
install -Dm644 "$builddir"/a630_sqe.fw -t \
"$subpkgdir/lib/firmware/qcom/"
install -Dm644 "$builddir"/a640_gmu.bin -t \
"$subpkgdir/lib/firmware/qcom/"
install -Dm644 "$builddir"/a640_zap.mbn -t \
"$subpkgdir/lib/firmware/qcom/sm8150/xiaomi/nabu/"
}
adsp() {
pkgdesc="Xiaomi Pad 5 adsp firmware"
install -Dm644 "$builddir"/adsp.mbn -t \
"$subpkgdir/lib/firmware/qcom/sm8150/xiaomi/nabu/"
}
cdsp() {
pkgdesc="Xiaomi Pad 5 cdsp firmware"
install -Dm644 "$builddir"/cdsp.mbn -t \
"$subpkgdir/lib/firmware/qcom/sm8150/xiaomi/nabu/"
}
cirrus() {
pkgdesc="Xiaomi Pad 5 cirrus firmware"
install -Dm644 "$builddir"/cs35l41* -t \
"$subpkgdir/lib/firmware/cirrus/"
}
modem() {
pkgdesc="Xiaomi Pad 5 modem firmware"
# cp because of the modem_pr directory
mkdir -p "$subpkgdir/lib/firmware/qcom/sm8150/xiaomi/nabu/"
cp -r "$builddir"/modem* \
"$subpkgdir/lib/firmware/qcom/sm8150/xiaomi/nabu/"
find "$subpkgdir/lib/firmware/qcom/sm8150/xiaomi/nabu/" \
-type f -exec chmod 0644 {} \;
}
venus() {
pkgdesc="Xiaomi Pad 5 venus firmware"
install -Dm644 "$builddir"/venus.mbn -t \
"$subpkgdir/lib/firmware/qcom/sm8150/xiaomi/nabu/"
}
wlan() {
pkgdesc="Xiaomi Pad 5 wlan firmware"
depends="linux-firmware-ath10k"
install -Dm644 "$builddir"/wlanmdsp.mbn -t \
"$subpkgdir/lib/firmware/qcom/sm8150/xiaomi/nabu/"
}
touchscreen() {
pkgdesc="Xiaomi Pad 5 touchscreen firmware"
install -Dm644 "$builddir"/novatek_nt36523_fw.bin -t \
"$subpkgdir/lib/firmware/novatek/"
}
slpi() {
pkgdesc="Xiaomi Pad 5 slpi firmware"
install -Dm644 "$builddir"/slpi_nb.mbn -t \
"$subpkgdir/lib/firmware/qcom/sm8150/xiaomi/nabu/"
}
hexagonfs() {
pkgdesc="Xiaomi Pad 5 hexagonfs files"
mkdir -p "$subpkgdir"/usr/share/qcom/sm8150/xiaomi
cp -r "$builddir"/hexagonfs/ \
"$subpkgdir"/usr/share/qcom/sm8150/xiaomi/nabu
}
sha512sums="
4cff180e0c765dd8d7c9b643699a685ec1394dbbca6420ca21ae4da005320f9aaade033fa5a348111457c7a141b2abc1112abee06d9d6f14f573ed78344587ac nabu-firmware-main.tar.gz
"
_flavor="postmarketos-qcom-sm8150-nabu"
pkgname=linux-$_flavor
pkgver=6.12.0
pkgrel=0
pkgdesc="Mainline Kernel fork for SM8150 devices"
arch="aarch64"
_carch="arm64"
url="https://gitlab.postmarketos.org/panpanpanpan/sm8150-mainline"
license="GPL-2.0-only"
options="!strip !check !tracedeps
pmb:cross-native
pmb:kconfigcheck-nftables
"
makedepends="
postmarketos-installkernel
bash
bison
findutils
flex
installkernel
openssl-dev
perl
python3
"
_repo="sm8150-mainline"
_config="config-$_flavor.$arch"
_commit="c4e7de505964a69e2757523fd25343a2bf832b98"
# Source
source="
$_repo-$_commit.tar.gz::https://gitlab.postmarketos.org/panpanpanpan/sm8150-mainline/-/archive/$_commit/$_repo.tar.gz
$_config
"
builddir="$srcdir/$_repo-$_commit"
prepare() {
default_prepare
cp "$srcdir/config-$_flavor.$arch" .config
}
build() {
unset LDFLAGS
make ARCH="$_carch" CC="${CC:-gcc}" \
KBUILD_BUILD_VERSION="$((pkgrel+ 1 ))-$_flavor"
}
package() {
mkdir -p "$pkgdir"/boot
make zinstall modules_install dtbs_install \
ARCH="$_carch" \
INSTALL_PATH="$pkgdir"/boot/ \
INSTALL_MOD_PATH="$pkgdir" \
INSTALL_MOD_STRIP=1 \
INSTALL_DTBS_PATH="$pkgdir"/boot/dtbs
rm -f "$pkgdir"/lib/modules/*/build "$pkgdir"/lib/modules/*/source
install -D "$builddir"/include/config/kernel.release \
"$pkgdir"/usr/share/kernel/$_flavor/kernel.release
}
sha512sums="
6f1ffea0322415b3e6a0176ad6a16a4accb7c611581ffc2bb772ddfdc04af677a5b5f955d19b29f7baf1c6a9b7297273f55c818cec981b2b8960c781dbb8bb56 sm8150-mainline-c4e7de505964a69e2757523fd25343a2bf832b98.tar.gz
b94e0227abf1eb2fa016f2fcae935c4357fe2a61d3c0ff8131ffb45eea0be49836b8447106e4c343d081341eebe86f578566b624d92df2986dda3674d19c9ee7 config-postmarketos-qcom-sm8150-nabu.aarch64
"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment