Files
besser/patches/staging-prep-series-danctnix/0000-cover-letter.patch
T
test0r a677ac0404 Add danctnix-layout patch series (drivers/staging/bes2600/)
Danctnix is the de-facto upstream for PineTab2 Arch Linux ARM images and
carries the bes2600 driver in-tree at drivers/staging/bes2600/ in
codeberg.org/DanctNIX/linux-pinetab2 (tag v6.19.10-danctnix1).

Same 6 commits as the Mobian series (staging-prep-series/), regenerated
with paths rooted at drivers/staging/bes2600/ so 'git am' applies
cleanly onto a fresh v6.19.10-danctnix1 clone with no path mangling.
Per-patch content is byte-identical to the Mobian series; the
commit-message bodies are preserved. checkpatch.pl --no-tree --strict
passes for all six.

UPSTREAM.md extended with a 'Near-term alt: danctnix linux-pinetab2
(codeberg)' section covering the submission route (codeberg fork +
PR, or Danct12-direct).

Signed-off-by: Markus Fritsche <fritsche.markus@gmail.com>
2026-04-22 14:28:37 +02:00

136 lines
6.5 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
From f1d22ab0000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Wed, 22 Apr 2026 14:27:00 +0200
Subject: [PATCH 0/6] bes2600: staging-prep cleanup for PineTab2 (BES2600WM)
This is the danctnix-layout variant of the bes2600 staging-prep series.
All six patches target `drivers/staging/bes2600/` in
`codeberg.org/DanctNIX/linux-pinetab2` at tag `v6.19.10-danctnix1`. Apply
cleanly, `checkpatch.pl --no-tree --strict` clean.
The Mobian `bes2600-dkms` variant of this series (same content, paths
rooted at `bes2600/` rather than `drivers/staging/bes2600/`) lives at
`git.reauktion.de/marfrit/bes2600-dkms` branch
`bes2600/staging-prep-series`. If you maintain both trees, you may
prefer to apply there and propagate to the danctnix in-tree copy.
## Background
The BES2600 Linux driver descends from the ST-Ericsson CW1200 driver in
mainline (`drivers/net/wireless/st/cw1200/`). Same author — Dmitry
Tarnyagin; shared WSM host↔firmware protocol plumbing; shared SDIO bus
backend. Kconfig ancestry markers survive: `CONFIG_BES2600_USE_STE_EXTENSIONS`
(STE = ST-Ericsson), `CONFIG_BES2600_WSM_DEBUG` (WSM). ST-Ericsson was
wound down in 2013; Bestechnic (founded 2015) appears to have inherited
or licensed the CW1200 IP. No linux-wireless RFC has ever linked the two
chips.
The series fixes observable defects on a PineTab2 running the danctnix
kernel 6.19.10-danctnix1-1 and removes two upstream blockers. Each
patch is independently testable and bisectable; the order below
preserves dependencies.
## What the series does
* 1/6 — Replace `filp_open()` + `kernel_read()` in the factory-
calibration read path with `request_firmware()`. Repoint the
FACTORY_PATH macro to the firmware-class name
(`bes2600/bes2600_factory.txt`). Kills a kernel-mainline anti-pattern
and the `(NULL device *): read and check /lib/firmware/bes2600_factory.txt
error` boot spam.
* 2/6 — Default `STANDARD_FACTORY_EFUSE_FLAG` from y to n. The shipped
`bes2600_factory.txt` on PineTab2 contains 30 calibration fields; the
driver was expecting 31 (including a `##select_efuse_flag` section
absent from this firmware). Also unguards the
`wsm_save_factory_txt_to_mcu()` prototype in `wsm.h` which was
inconsistently wrapped in `#if defined(STANDARD_FACTORY_EFUSE_FLAG)`
while its definition in `wsm.c` and its call site in `sta.c` were
ungated.
* 3/6 — Thread `struct device *` through `factory_section_read_file()`
via a module-local setter invoked at SDIO probe. `request_firmware()`
now receives a real device pointer; `(NULL device *):` no longer
prefixes factory-related diagnostics.
* 4/6 — Gate the device-end of the low-power transition on successful
per-VIF firmware handshake. Pre-patch: `bes2600_pwr_enter_lp_mode()`
called `bes2600_pwr_device_enter_lp_mode()` unconditionally even when
`wait_for_completion_timeout()` returned 0. On PineTab2 this recurred
every 510 s in idle-associated state, flooded dmesg, and cascaded
into `sdio_tx_work` WARN splats. Post-patch: `-ETIMEDOUT` returned
cleanly, dmesg silent, SDIO stable.
* 5/6 — Remove the custom `/dev/bes2600` character-device interface.
`file_operations`, open/read/write/release, `bes2600_op_*` command-
dispatch table, `bes2600_load_uevent`, cdev registration in the init
path — 519 lines deleted. In-kernel accessors (`is_signal_mode`,
`get_fw_type`, etc., 13 call sites) and the `fw_type` module
parameter are preserved.
* 6/6 — Flip `CONFIG_BES2600_TESTMODE` default from n to y. Also fixes
accumulated bit-rot revealed by enabling the flag: shim macros in
`bes_log.h` for the legacy `bes2600_info/err/warn/dbg/err_with_cond`
family, `BES2600_DBG_*` constants defined as 0, 3 TSM/roam-delay
helpers marked `static`.
## Testing
Reference hardware: Pine64 PineTab2 (BES2600WM + Rockchip RK3566,
MAC `8a:2e:77:1f:ec:05`). Host kernel: linux-pinetab2
6.19.10-danctnix1-1 with `CONFIG_NL80211_TESTMODE=y`. Full stack
applied, verified over 3+ reboots: WiFi associates and passes traffic
on both 2.4 GHz (newton / ch11) and 5 GHz (TelekomHotspot@ERGO / ch36).
Per-patch outcomes in post-reboot dmesg:
- 1/6: `read and check /lib/firmware/bes2600_factory.txt error` — gone
- 2/6: `bes2600_factory.txt parse fail` / `factory cali data get failed.` — gone
- 3/6: `(NULL device *):` prefix on factory lines — gone
- 4/6: `wait pm ind timeout` (pre-patch 2030 msgs / 5 min) — 0 per 5 min;
`sdio_tx_work` WARN splat (pre-patch 2+ / 5 min) — 0 per 5 min;
`[RX] Receive failure: 4.` — gone
- 5/6: `/dev/bes2600` — absent; driver continues to associate
- 6/6: `iw phy0` lists `testmode` under *Supported commands*
## Known limitations / out of scope
- `factory_section_write_file()` still uses `kernel_write()` + `filp_open()`
for calibration persistence. Conversion to debugfs/nl80211 is a
follow-up.
- `bes_chardev.c` still contains DPD-to-file read/write paths (gated by
`BES2600_WRITE_DPD_TO_FILE`, off by default — dead code in default
builds). Same treatment needed.
- `bes_fw.c:587` unconditionally creates
`/lib/firmware/bes2002_fw_write.bin` via `filp_open()` for debug
observation. Must go before a future drivers/net/wireless/st/
promotion.
- `bes_cdev` singleton still holds `sig_mode`/`fw_type`. Migrating
fw_type from module_param to per-phy debugfs knob or nl80211 testmode
is the next architectural step.
- Residual benign dmesg: `bes2600_wlan mmc2:0001:1: PS Mode Error,
Reason:1` at T+40 s on fresh boot. Distinct from the pre-4/6 timeout
cascade; driver recovers, WiFi stays up.
Markus Fritsche (6):
bes2600: use request_firmware() for factory.txt read
bes2600: default STANDARD_FACTORY_EFUSE_FLAG off for PineTab2 factory.txt format
bes2600: thread struct device * through factory request_firmware() call
bes2600: gate device LP-mode entry on successful per-VIF firmware handshake
bes2600: remove userspace /dev/bes2600 character device interface
bes2600: enable CONFIG_BES2600_TESTMODE by default + fix bit-rotted testmode plumbing
drivers/staging/bes2600/Makefile | 6 +-
drivers/staging/bes2600/bes2600_factory.c | 45 +--
drivers/staging/bes2600/bes2600_factory.h | 3 +
drivers/staging/bes2600/bes2600_sdio.c | 4 +
drivers/staging/bes2600/bes_chardev.c | 519 --------------------------------
drivers/staging/bes2600/bes_log.h | 23 ++
drivers/staging/bes2600/bes_pwr.c | 20 +-
drivers/staging/bes2600/sta.c | 6 +-
drivers/staging/bes2600/wsm.h | 2 -
9 files changed, 79 insertions(+), 549 deletions(-)
--
2.53.0