QCA4019: calibration files and board files

Christian Lamparter chunkeey at googlemail.com
Wed Mar 1 04:51:12 PST 2017

On Tuesday, February 28, 2017 7:22:32 PM CET Rajkumar Manoharan wrote:
> On 2017-02-27 23:58, Sven Eckelmann wrote:
> > It looks to me now that this information is contradicting your 
> > implementation
> > (which now loads the data from 0:ART partition [1] like pre-cal data 
> > [2] and
> > then loads the board-2.bin [3]).
> > 
> Both reading from ART and loading pre-cal data file are same.
> > I have doubt regarding his explanation but I got no actual spec - only
> > information which seems to be contradicting (or to vague) . Is is 
> > possible
> > to get some confirmation from you about whether the data from the 0:ART
> > partition is pre-cal data or not and whether the board-2.bin should be
> > used when the data from 0:ART is used.
> > 
> In QCA4019 platform, only radio specific calibration (pre-cal-data) is 
> stored in flash.
> Board specific contents are read from board-2.bin. For each radio 
> appropriate board data should be loaded. To fetch correct board data
> from board-2.bin bundle, pre-cal/radio specific caldata should be
> loaded first to get proper board id.
> > My understanding until now was that:
> > 
> >  * pre-cal data + board-2.bin info == actual calibration data
> > 
> Correct.
> >  * pre-cal data == some incomplete calibration data from somewhere else
> >                    (he never specified it - just that it exists)
> >  * calibration data == incomplete calibration data from 0:ART
> >                        (what I've described in the past as pre-cal 
> > data)
> >  * (pre-cal or calibration data) + board-2.bin info == actual 
> > calibration data
> > 
> > Would be nice if this confusion could be cleared up by you.
> > 
> Following methods are used to read radio specific caldata.
> 1) In some platform which lags DT support, init.d script is used to read
> the calibrations content from flash memory and write it in file system 
> at boot time.
> This is done by dd command.
> 2) DT entry “qcom,ath10k-pre-calibration-data" is used to pass 
> calibration data
> from flash to driver. But it needs CoreBSB support to transfer the 
> contents from flash to device tree.
> qcom,pre-calibration-data ==> only radio specific calibration.
> qcom,calibration-data ==> {radio specific + board specific calibration}.
> 3) Reading calibration data directly from ART partition by mtd_read 
> operation. This one can be removed from QSDK either by init script
> or by DT support.
> "qcom,calibration-data" is used for qca988x on AP148 plaform. 
> Here calibration data mean both radio + board contents.
> Always calibration content are stored in ART partition.

Ok. Thanks for the clarification.

So, pre-cal data (from flash) + board-2 (from fs) is the 
right way for now.

However, this is a bit of a problem for LEDE/OpenWRT.

You see: The board-2.bin will have to be baked into the rootfs-image
of the LEDE/OpenWRT firmware.
But in order to do that, the board-2.bin needs to be extracted from
the vendor's binary firmware image (via unsquashfs). Or if we are 
lucky: from the source archive, if the vendor left them in there.

The problem is: these raw board.bin files sourced from the binary
firmware image lack a redistributable license.
And therefore they can't be shipped with LEDE/OpenWRT. 
(The raw board.bin files from the source archive [1] are usually
in the  madwifi-11n directory, which has a redistributable 
license file [2] and can be converted to board-2.bin with the 
ath10k-bdencoder [3]. But there's no explicit statement that
this is possible.)

The way I see it atm, developers would need to ask the vendors
for  permission and LEDE/OpenWRT needs to setup something like
a board-2.bin repository (similar to linux-firmware [0]) for 
all the IPQ40XX devices (and future devices?)...


Is there a way around this problem? 
Can somebody ask around in the Legal Department? And clarify if:

1. Whenever the board-2.bin are copyright-able in the first place?
   INAL. These files just contain calibration values/parameters
   and no programs. From what I know facts/numbers are not copyright-able.
   But I don't know if it applies here or not. And if there is a
   difference between US/Europe/China/... laws.

2. What license these board.bin files should have.
   They are generated by the halphy_tools' eepromUtil utility.
   Are these files all original, or do they classify as
   derived works?

3. Most importantly: Can this be handled differently for future devices?
   Like adding a redistributable license text inside the board.bin files?
   (Like a header or trailer. A trailer would have the advantage that if
   the caldata length is fixed (like 12064 bytes for IPQ40XX), the trailer
   won't be uploaded to the device. So a trailer can be easily added to 
   existing files).

(4. Any workaround?
    Like trying to get by with just the precal-data from flash like in [4]?)


[0] <https://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git/tree/README>
[1] <https://github.com/paul-chambers/netgear-r7800/tree/master/git_home/madwifi-11n.git/halphy_tools/host/eepromUtil/release_ipq4019>
[2] <https://github.com/paul-chambers/netgear-r7800/blob/master/git_home/madwifi-11n.git/COPYING>
[3] <https://github.com/qca/qca-swiss-army-knife/blob/master/tools/scripts/ath10k/ath10k-bdencoder>
[4] <https://www.mail-archive.com/ath10k@lists.infradead.org/msg05911.html>

More information about the ath10k mailing list