Target meson (amlogic, aarch64), kernel-5.10.41, qca9377 (SDIO) wifi

Openwrt Version: trunk r16840 (2021-05-29)
uname -a: Linux SecureOffice-aarch64 5.10.41 #0 SMP PREEMPT Sat May 29 12:47:07 2021 aarch64 GNU/Linux

I know I am far beyond bleeding edge both in terms of kernel, arch and wifi device. I Have it working for kernel 5.4, but need additional H/W provided with kernel-5.10

Using backports-5.10.34-1

What I am seeing:

[   23.099353] Loading modules backported from Linux version v5.10.34-0-g0aa66717f684
[   23.102076] Backport generated by backports.git v5.10.34-1-0-g7b5533e1
[   23.207362] ath10k_sdio mmc0:0001:1: qca9377 hw1.1 sdio target 0x05020001 chip_id 0x00000000 sub 0000:0000
[   23.212551] ath10k_sdio mmc0:0001:1: kconfig debug 0 debugfs 1 tracing 0 dfs 1 testmode 0
[   23.221061] ath10k_sdio mmc0:0001:1: firmware ver WLAN.TF.1.1.1-00061-QCATFSWPZ-1 api 5 features ignore-otp crc32 7746e551
This is normal: [   23.376822] ath10k_sdio mmc0:0001:1: failed to fetch board data for bus=sdio,vendor=0271,device=0701,subsystem-vendor=0000,subsystem-device=0000 from ath10k/QCA9377/hw1.0/board-2.bin
[   23.388461] ath10k_sdio mmc0:0001:1: board_file api 1 bmi_id N/A crc32 544289f7
[   24.486212] ------------[ cut here ]------------
[   24.486478] kernel BUG at kernel/time/timer.c:965!
[   24.490143] Internal error: Oops - BUG: 0 [#1] PREEMPT SMP

Discussion: suspect this is some sorta startup race condition:
+995 linux-5.4.50/kernel/time/timer.c "BUG_ON(!timer->function);" not
initialized at call time, which may be a consequence of
"flush_workqueue(ar->workqueue); " call in
backports-5.10.34-1/drivers/net/wireless/ath/ath10k/core.c used for
openwrt compatability. (init phy's first, differs from mainline linux)

If I patch out the above "flush_workqueue" call, execution proceeds to other DMA alloc related sigsegv's

My suspicion is this is a startup issue, when the ath10k_sdio module is loaded. Playing around with the filename order in /etc/modules.d has no effect, since the module is loaded as part of auto H/W detect.

I have a few questions that may help resolve this:

  • How can I delay module load to after kernel resources (such as timer->function) init is complete?
  • Can I add dependencies and / or init calls to insure the kernel is ready for this module?

If someone with requisite interest skills is available to work with me on this, I can

provide SSH access and or ship hardware (Tanix TX92)

Thanks + Regards;
Bill

Thanks for sharing, I found out that removing this patch made it work: