wl1251: NVS firmware data

Pali Rohár
2014-11-27T14:06:26Z

[-- Attachment #1: Type: Text/Plain, Size: 1673 bytes --]

Hello,

wifi driver wl1251 needs NVS calibration data for working. These
data are loaded by driver via request_firmware from userspace
file: ti-connectivity/wl1251-nvs.bin. In linux-fimrware git tree
there is generic wl1251-nvs.bin file which is used by default.

Driver wl1251 is used on Nokia N900 cellphone for its wifi chip.
This cellphone has one special MTD partition (called CAL) where
are stored some configuration data in special binary (key-value)
format. And there is also stored correct calibration data for
specific device (each device has different data). It is preferred
to use those data instead generic one (provided by linux-firmware
git tree).

Now my question is: How to correctly load calibration data from
special Nokia N900 CAL partition into wl1251 kernel driver?

By default kernel reads ti-connectivity/wl1251-nvs.bin file from
VFS if exists without any userspace support. If it fails then it
fallback to loading via udev.

Reading correct data from CAL partition is not easy (structure is
difficult), but there is open source program which can parse CAL
partition and write NVS data to stdout. So adding this CAL parser
into kernel is not good idea (program is GPLv3+ code --
incompatible with kernel).

So how to solve this problem? How to load correct NVS data from
CAL partition into wl1251 driver?

It is possible to tell kernel to use some helper userspace
program for loading data and if it fails then fallback to direct
loading? E.g first try to use model specific data and if it fails
for some reasons then fallback to reading genetic data.

--
Pali Rohár
pali.rohar@gmail.com

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]