a677ac0404
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>
136 lines
6.5 KiB
Diff
136 lines
6.5 KiB
Diff
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 5–10 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 20–30 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
|
||
|