Support for QCA9377

Kalle Valo kvalo at
Wed May 16 11:27:41 PDT 2018

+ linux-wireless

Jay Foster <jayf0ster at> writes:

> On 5/15/2018 9:56 PM, Kalle Valo wrote:
>> Jay Foster <jayf0ster at> writes:
>>> I too have been, off and on, looking for an ath10k driver solution for
>>> a SparkLAN WUBQ-159ACN USB Wi-Fi adapter, so I have been keeping an
>>> eye on this mailing list.  I just tried the latest
>>> ath10k-pending-sdio-usb branch (ath10k-pending-sdio-usb-201804210910
>>> tag), since I could see that support for the SparkLAN USB 0CF3:9378
>>> device was just added.  The driver refers to this as the SparkLAN
>>> WPEQ-160ACN device, but it has the same USB vendor/product ID as my
>>> WUBQ-159ACN.  They both use the QCA9377 chip.
>>> I got a driver to build with the 4.9 kernel and when it boots, it
>>> recognizes my Wi-Fi adapter.  Now, I am trying to sort out what to do
>>> about firmware.  I downloaded the board-2.bin, board.bin,
>>> firmware-5.bin files from
>>> I used the ath10k-fwencoder application from the qca-swiss-army-knife
>>> tools to also build a firmware file, but I am not clear on what files
>>> I should be using.  SparkLAN provided, with the qcacld-2.0 wlan
>>> driver, the following files:
>>> athsetup.bin, athwlan.bin, cfg.dat, fakeboar.bin, otp.bin, and
>>> qcom_cfg.ini.  I used the command:
>>> qca-swiss-army-knife/tools/scripts/ath10k/ath10k-fwencoder --create
>>> --otp ../../../otp.bin --firmware ../../../athwlan.bin
>>> --set-wmi-op-version=tlv --set-htt-op-version=tlv --set-fw-api=6
>>> --features=ignore-otp-result
>>> to create my firmware-usb-6.bin and used the fakeboar.bin for my
>>> board-usb.bin files.  However, when the driver loads, it is looking
>>> for a file called ath10k/cal-usb-1-1.2.bin.  Where do I get that
>>> file?
>> You can ignore that warning. cal-*.bin are optional files containing the
>> calibration data, in case you don't have the calibration data in OTP.
>> But my guess is that in your device you have the calibration data in OTP
>> so you don't need cal-*.bin.
>> Hopefully in 4.18 that warning will be away and users won't get confused anymore.
>>>    I tried using the athsetup.bin file for this, but I do not
>>> think that works.  The driver reports:
>>> /lib/firmware/ath10k/QCA9377/hw1.0# usb 1-1.2: qca9377 hw1.1 SparkLAN
>>> WPEQ-160ACN target 0x05020001 chip_id 0x00000000 sub 0000:0000
>>> usb 1-1.2: kconfig debug 1 debugfs 0 tracing 0 dfs 0 testmode 1
>>> usb 1-1.2: firmware ver  api 6 features ignore-otp crc32 e8985f67
>>> usb 1-1.2: found invalid board magic
>>> usb 1-1.2: board_file api 1 bmi_id N/A crc32 58a139e9
>>> usb 1-1.2: invalid hw_params.n_cipher_suites 0
>>> What does invalid board magic mean?
>> This log means that ath10k first tried to load board-2.bin but it was
>> corrupted for some reason. Then it found and used board.bin instead.
> It seems odd that the board-2.bin file I downloaded from
> is somehow corrupted.  Does the message mean that the board-2.bin file
> itself is bad or that it is not appropriate/useful for my particular
> Wi-Fi device?

I meant that the file itself is bad, but of course there could be a bug
lurking somewhere as well. The md5sum should be:

0234621d41643e46243438b1661c2407  ath10k/QCA9377/hw1.0/board-2.bin

But this does not make any difference for you as the board-2.bin file
does not have any board files for usb devices yet.

> When you say that the driver then used board.bin instead, I think in
> my case this is board-usb.bin (the same as my fakeboar.bin file from
> SparkLAN), since my device is a USB device.  I am just trying to be
> clear on my understanding.

A good point and you are correct. I forgot that Erik's patches are still
using that special board-usb.bin. That should be removed before the
patches get applied upstream as we should get all the board files to
board-2.bin anyway. (board.bin is just for testing purposes)

>>> The Wi-Fi USB adapter may be installed in any number of different USB
>>> locations, so why is the USB location (1-1.2) part of one of the
>>> filenames?
>> Because there needs to be some way to identify multiple devices on the
>> same host. But cal-*.bin is mainly meant for AP devices where the
>> devices have a fixed slot in the PCI bus and the calibration data is
>> stored in host's filesystem (check openwrt to see how it's used).
> I did manage to get a successful Wi-Fi STA mode connection with this
> driver.  One issue that I don't understand is when the driver attempts
> to load a FW file that is not present, it fails with error -2 and then
> reports, "Falling back to user helper".  However, this 'user helper'
> does not exist/work either, but the driver waits quite a while waiting
> for it (about half a minute or so).  This causes a delay loading the
> driver (about half a minute for each missing file).  So, even though
> the cal files are optional, if they are not there, it significantly
> delays loading of the driver.  I need to eliminate this delay.  For
> now, I patched the driver to not attempt to load the
> pre-cal-usb-<bus>.bin or the cal-usb-<bus>.bin files (that do not
> exist for my adapter), but there must be a better way to avoid this
> delay.

Yeah, that delay is a common problem and not ath10k related. IIRC
there's a Kconfig option which you can disable to avoid the delay, maybe
it was CONFIG_FW_LOADER_USER_HELPER_FALLBACK? Not sure though, Google
should be able to help with that.

Kalle Valo

More information about the ath10k mailing list