Skip to content

tb323fu-linux t46

Choose a tag to compare

@joonhoekim joonhoekim released this 08 Oct 12:13

tb323fu-linux t46 — kernel for the Lenovo Legion Tab Y700 gen 5 (TB323FU)

Kernel: 7.3.0-rc4-tb323fu-t46 — Linux version 7.3.0-rc4-tb323fu-t46 (tb323fu@build) (Ubuntu clang version 18.1.3 (1ubuntu1), Ubuntu LLD 18.1.3) #1 SMP PREEMPT Thu Oct 8 11:06:33 UTC 2026

Mainline Linux v7.3-rc4 with the 128 patches 0001–0129 of kernel/patches,
built from tb323fu-linux commit db7f8a9c3ab3d25550a51aed910bda8f1a77c08c. What works and what does not: docs/hardware-status.md.

Read this first

  • Fixes a storage hang that restarted the tablet (patch 0129). Clock scaling of the storage controller and a
    storage management command (a query from the kernel or from sysfs) could wait for each other forever: all storage
    I/O stopped, and about a minute later the hung task check restarted the tablet. It happened after hours of normal
    use on kernel-t43; a stress test (load bursts that make the clock scale, plus back-to-back queries) hung
    kernel-t43 within 10 s. 0129 takes the clock scaling lock before stopping the queues; every earlier
    kernel of this project has the bug (it came with Linux 6.19). Tested: the same stress test, 2 × 600 s and
    about 700 clock changes, without a hang or a storage error. Upstream status of each patch:
    kernel/PROVENANCE.md.
  • CPU cluster idle state left out of runtime idle (patch 0118). With it the tablet reset when left idle
    (twice in 78 minutes); this kernel's built-in command line sets cpuidle_psci_domain.allow_cluster_off=0, and the
    tablet then ran 3 hours idle without a reset at the same display-off power. Suspend (s2idle) still uses the state;
    the cause in its power-down path is not fixed.
  • CPU capacities (patch 0117): the device tree describes the big and little cores, so the scheduler places
    tasks by capacity (energy-aware scheduling).
  • No USB root shell. Development images open a root shell without password on the USB serial port and telnet
    over USB networking while the initramfs runs; this release does not (the USB gadget itself is still set up, so a
    root's serial getty and usb0 networking work). To turn it on for recovery work, build your own image: the
    initramfs with kernel/initramfs/build.sh -u, or the kernel with tb323fu.usbshell=1 added to CONFIG_CMDLINE
    (kernel/initramfs/README.md). Anyone with a cable
    gets root while that shell runs.
  • If it does not boot: the boot summary on the panel says how far it got. Holding volume up + down for 10 s
    restores Android from boot_b (needs the Android image hash, below). Otherwise write your saved Android boot.img
    back to boot_a from a PC in EDL mode (fastboot is read-only on this bootloader):
    docs/recovery.md.

What is in this release

File What
Image-tb323fu-t46 the kernel as a raw arm64 Image, with its device tree, command line and initramfs built in — and all its modules: the initramfs carries lib/modules/7.3.0-rc4-tb323fu-t46 (782 modules, the out-of-tree speaker amplifier driver in extra/) as a squashfs and mounts it on /lib/modules/7.3.0-rc4-tb323fu-t46 of the root it boots, so the roots need no modules of their own
Image-tb323fu-t46.gz the same kernel, gzip-compressed (the bootloader decompresses it); the helper's kernel updates download this one
modules-tb323fu-t46.tar.gz the same modules tree as a tarball — only for a root that opts out of the shared modules (own in its /etc/tb323fu/modules); normally not needed
boot-repack-kernel.py puts Image-tb323fu-t46 into your own stock boot image (Python 3, no dependencies; same as tools/boot-repack-kernel.py)
config-tb323fu-t46 the kernel .config
initramfs-t46.list, initramfs-t46.files the initramfs: gen_init_cpio list and file list
busybox-1.36.1.config configuration of the BusyBox binary in the initramfs
busybox-1.36.1.tar.bz2 the complete source of that BusyBox binary (the unmodified upstream tarball)
THIRD-PARTY-NOTICES.txt copyright and license texts of the third-party files in the initramfs (BusyBox, wireless-regdb, Terminus Font)
SHA256SUMS checksums of all of the above (they catch a damaged download; they are not a signature)

There is no ready-made boot.img, on purpose. A boot image for this tablet is the stock image with only the kernel
replaced: its header, Lenovo's GKI boot signature and the vbmeta/AVB footer are copied from a stock boot.img. Those
blobs are Lenovo's, not ours to redistribute, and they have to match the firmware version and region of your
tablet. So you build the image yourself, from the stock boot.img you saved during the backup step:

python3 boot-repack-kernel.py stock-boot.img Image-tb323fu-t46 linux-boot.img

tools/install/install.sh boot does this for you. Install: see docs/install.md
(repacked image → boot_a; nothing is installed into the roots).

Already running Linux with Open Device Helper? tb323fu-ctl kernel update (or About → Kernel Updates in the
settings app) installs this release the same way, runs it on trial and goes back to the previous kernel by itself if
it does not start (docs/helper.md).

What you must provide

  • Firmware — none is included. Vendor firmware may not be redistributed. Extract it from your own tablet with
    firmware/extract-on-device.sh
    (the list is firmware/manifest.tsv) and put it into each root's /lib/firmware (the root builders do this).
    The initramfs carries only regulatory.db (wireless-regdb, ISC).
  • The Android image hash for the emergency way back (volume up + down held 10 s): /etc/tb323fu/android-boot.sha256
    on baldur-root (or baldur-root-sd). Without it the chord does nothing in the initramfs.
  • Your own stock boot.img (saved in the backup step, docs/install.md) to repack Image-tb323fu-t46 into.

Firmware-free initramfs: what that means

Drivers that probe before a root is mounted cannot find their firmware in this image (measured on the tablet; table in
kernel/initramfs/README.md):

  • Wi-Fi (ath12k) is a module: udev loads it from the root, where the firmware is, so it comes up with the root
    (no Wi-Fi in the initramfs itself).
  • GPU and Bluetooth log a missing-firmware error in the initramfs and recover after the root is mounted.
  • Touch is loaded by the root (udev), not by the initramfs; the initramfs' touch echo is not available.
  • The boot summary's GPU line is empty (the GPU has no firmware yet at that point).

Source code (GPL)

  • Kernel: upstream torvalds/linux v7.3-rc4 (93f51579e7df248780214094418f205253383cc5) + the patch series in
    kernel/patches of tb323fu-linux kernel-t46
    (commit db7f8a9c3ab3d25550a51aed910bda8f1a77c08c); configuration: config-tb323fu-t46 (= defconfig + kaanapali-oneplus-infiniti_defconfig
    • kernel/config/baldur.fragment + kernel/config/baldur-display.fragment + kernel/config/baldur-netfilter.fragment, CONFIG_LOCALVERSION="-tb323fu-t46",
      built with make LOCALVERSION=). Origins of every patch: kernel/PROVENANCE.md.
  • Out-of-tree module snd-soc-aw882xx (GPL-2.0, Awinic): kernel/out-of-tree/aw882xx.
  • Initramfs: kernel/initramfs (init, build.sh; gpu-probe.c GPL-2.0),
    userspace/platform/src/keyhold.c, android/back-to-android; file list initramfs-t46.list.
  • BusyBox 1.36.1 (GPL-2.0), unmodified: the source is attached to this release as busybox-1.36.1.tar.bz2
    (sha256 b8cc24c9574d809e7279c3be349795c5d5ceb6fdf19ca709f80cde50e47de314, the same file as https://busybox.net/downloads/busybox-1.36.1.tar.bz2),
    configuration busybox-1.36.1.config, static aarch64 build (binary sha256 9ebb421890774102b38919eced19cd3ccd51a984ac0599cbc763f1b09dad11e7).
  • Console font: console-setup Lat15-Terminus28x14 (Terminus Font, SIL OFL 1.1).
  • regulatory.db: wireless-regdb (ISC), sha256 2fb33ca0074db573e05ef7dd50bb45b63c0ff98b7e852e1105ebad536fae8e6b.

Copyright and license texts of these third-party files: THIRD-PARTY-NOTICES.txt.

Licenses of the repository's parts: NOTICE.
Redistributors: modified builds use their own name, see TRADEMARKS.md.

Checksums

4ba9b9addfbc73f85e96278d09380c94cfbc9643d4dcf9895decf4f9202be705  Image-tb323fu-t46
b2fbeaf3749f42b491bcd7dc683dde98240d0658f286b136d59f118e20f55b5e  Image-tb323fu-t46.gz
7122b5d7cda1fbf548b94dea64fffa70d4788a73d5afe8594ecb5069ad0ea212  modules-tb323fu-t46.tar.gz
5c1f7fc458a6481062a1c42d37af0da6646648e4a0ca6dbe6e4f07640d906bbb  config-tb323fu-t46
eee071dcb3fc3ea90fbd7e68692ead0e7c5dcca4ea3ecceee0a266ef8cee755d  initramfs-t46.list
d15f0119d2e6282d121267d650a0895f1b1514df591990d776d5b4c9c16f48e1  initramfs-t46.files
5bea14190056e80da14cafb633fd483374441aea80dbf5b3f8e58acbec2ebd26  busybox-1.36.1.config
b8cc24c9574d809e7279c3be349795c5d5ceb6fdf19ca709f80cde50e47de314  busybox-1.36.1.tar.bz2
9040c24022a88c6262e68e804d38c3aef1efa94ccf751395df0573db44249485  THIRD-PARTY-NOTICES.txt
48a1eddea802e3ea3cc8c16a59cb4c51185d05132d65397bc521dc09ee3c49cc  boot-repack-kernel.py