linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kalle Valo <kvalo@codeaurora.org>
To: "Jérôme Pouiller" <jerome.pouiller@silabs.com>
Cc: linux-wireless@vger.kernel.org, netdev@vger.kernel.org,
	devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"David S . Miller" <davem@davemloft.net>,
	devicetree@vger.kernel.org, "Rob Herring" <robh+dt@kernel.org>,
	linux-mmc@vger.kernel.org, "Pali Rohár" <pali@kernel.org>,
	"Ulf Hansson" <ulf.hansson@linaro.org>
Subject: Re: [PATCH v7 05/24] wfx: add main.c/main.h
Date: Thu, 07 Oct 2021 11:35:43 +0300	[thread overview]
Message-ID: <875yu9cjvk.fsf@codeaurora.org> (raw)
In-Reply-To: <3570035.Z1gqkuQO5x@pc-42> (=?utf-8?B?IkrDqXLDtG1l?= Pouiller"'s message of "Wed, 06 Oct 2021 09:32:49 +0200")

Jérôme Pouiller <jerome.pouiller@silabs.com> writes:

> Hi Kalle,
>
> On Friday 1 October 2021 14:18:04 CEST Kalle Valo wrote:
>> Jérôme Pouiller <jerome.pouiller@silabs.com> writes:
>> 
>> > On Friday 1 October 2021 11:22:08 CEST Kalle Valo wrote:
>> >> Jerome Pouiller <Jerome.Pouiller@silabs.com> writes:
>> >> 
>> >> > From: Jérôme Pouiller <jerome.pouiller@silabs.com>
>> >> >
>> >> > Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
>> >> 
>> >> [...]
>> >> 
>> >> > +/* The device needs data about the antenna configuration. This information in
>> >> > + * provided by PDS (Platform Data Set, this is the wording used in WF200
>> >> > + * documentation) files. For hardware integrators, the full process to create
>> >> > + * PDS files is described here:
>> >> > + *   https:github.com/SiliconLabs/wfx-firmware/blob/master/PDS/README.md
>> >> > + *
>> >> > + * So this function aims to send PDS to the device. However, the PDS file is
>> >> > + * often bigger than Rx buffers of the chip, so it has to be sent in multiple
>> >> > + * parts.
>> >> > + *
>> >> > + * In add, the PDS data cannot be split anywhere. The PDS files contains tree
>> >> > + * structures. Braces are used to enter/leave a level of the tree (in a JSON
>> >> > + * fashion). PDS files can only been split between root nodes.
>> >> > + */
>> >> > +int wfx_send_pds(struct wfx_dev *wdev, u8 *buf, size_t len)
>> >> > +{
>> >> > +     int ret;
>> >> > +     int start, brace_level, i;
>> >> > +
>> >> > +     start = 0;
>> >> > +     brace_level = 0;
>> >> > +     if (buf[0] != '{') {
>> >> > + dev_err(wdev->dev, "valid PDS start with '{'. Did you forget to
>> >> > compress it?\n");
>> >> > +             return -EINVAL;
>> >> > +     }
>> >> > +     for (i = 1; i < len - 1; i++) {
>> >> > +             if (buf[i] == '{')
>> >> > +                     brace_level++;
>> >> > +             if (buf[i] == '}')
>> >> > +                     brace_level--;
>> >> > +             if (buf[i] == '}' && !brace_level) {
>> >> > +                     i++;
>> >> > +                     if (i - start + 1 > WFX_PDS_MAX_SIZE)
>> >> > +                             return -EFBIG;
>> >> > +                     buf[start] = '{';
>> >> > +                     buf[i] = 0;
>> >> > +                     dev_dbg(wdev->dev, "send PDS '%s}'\n", buf + start);
>> >> > +                     buf[i] = '}';
>> >> > +                     ret = hif_configuration(wdev, buf + start,
>> >> > +                                             i - start + 1);
>> >> > +                     if (ret > 0) {
>> >> > + dev_err(wdev->dev, "PDS bytes %d to %d: invalid data (unsupported
>> >> > options?)\n",
>> >> > +                                     start, i);
>> >> > +                             return -EINVAL;
>> >> > +                     }
>> >> > +                     if (ret == -ETIMEDOUT) {
>> >> > + dev_err(wdev->dev, "PDS bytes %d to %d: chip didn't reply (corrupted
>> >> > file?)\n",
>> >> > +                                     start, i);
>> >> > +                             return ret;
>> >> > +                     }
>> >> > +                     if (ret) {
>> >> > + dev_err(wdev->dev, "PDS bytes %d to %d: chip returned an unknown
>> >> > error\n",
>> >> > +                                     start, i);
>> >> > +                             return -EIO;
>> >> > +                     }
>> >> > +                     buf[i] = ',';
>> >> > +                     start = i;
>> >> > +             }
>> >> > +     }
>> >> > +     return 0;
>> >> > +}
>> >> 
>> >> I'm not really fond of having this kind of ASCII based parser in the
>> >> kernel. Do you have an example compressed file somewhere?
>> >
>> > An example of uncompressed configuration file can be found here[1]. Once
>> > compressed with [2], you get:
>> >
>> >     {a:{a:4,b:1},b:{a:{a:4,b:0,c:0,d:0,e:A},b:{a:4,b:0,c:0,d:0,e:B},c:{a:4,b:0,c:0,d:0,e:C},d:{a:4,b:0,c:0,d:0,e:D},e:{a:4,b:0,c:0,d:0,e:E},f:{a:4,b:0,c:0,d:0,e:F},g:{a:4,b:0,c:0,d:0,e:G},h:{a:4,b:0,c:0,d:0,e:H},i:{a:4,b:0,c:0,d:0,e:I},j:{a:4,b:0,c:0,d:0,e:J},k:{a:4,b:0,c:0,d:0,e:K},l:{a:4,b:0,c:0,d:1,e:L},m:{a:4,b:0,c:0,d:1,e:M}},c:{a:{a:4},b:{a:6},c:{a:6,c:0},d:{a:6},e:{a:6},f:{a:6}},e:{b:0,c:1},h:{e:0,a:50,b:0,d:0,c:[{a:1,b:[0,0,0,0,0,0]},{a:2,b:[0,0,0,0,0,0]},{a:[3,9],b:[0,0,0,0,0,0]},{a:A,b:[0,0,0,0,0,0]},{a:B,b:[0,0,0,0,0,0]},{a:[C,D],b:[0,0,0,0,0,0]},{a:E,b:[0,0,0,0,0,0]}]},j:{a:0,b:0}}
>> 
>> So what's the grand idea with this braces format? I'm not getting it.
>
>   - It allows to describe a tree structure
>   - It is ascii (easy to dump, easy to copy-paste)
>   - It is small (as I explain below, size matters)
>   - Since it is similar to JSON, the structure is obvious to many people
>
> Anyway, I am not the author of that and I have to deal with it.

I'm a supported for JSON like formats, flexibility and all that. But
they belong to user space, not kernel.

>> Usually the drivers just consider this kind of firmware configuration
>> data as a binary blob and dump it to the firmware, without knowing what
>> the data contains. Can't you do the same?
>
> [I didn't had received this mail :( ]
>
> The idea was also to send it as a binary blob. However, the firmware use
> a limited buffer (1500 bytes) to parse it. In most of case the PDS exceeds
> this size. So, we have to split the PDS before to send it.
>
> Unfortunately, we can't split it anywhere. The PDS is a tree structure and
> the firmware expects to receive a well formatted tree.
>
> So, the easiest way to send it to the firmware is to split the tree
> between each root nodes and send each subtree separately (see also the
> comment above wfx_send_pds()).
>
> Anyway, someone has to cook this configuration before to send it to the
> firmware. This could be done by a script outside of the kernel. Then we
> could change the input format to simplify a bit the processing in the
> kernel.

I think a binary file with TLV format would be much better, but I'm sure
there also other good choises.

> However, the driver has already some users and I worry that changing
> the input format would lead to a mess.

You can implement a script which converts the old format to the new
format. And you can use different naming scheme in the new format so
that we don't accidentally load the old format. And even better if you
add a some kind of signature in the new format and give a proper error
from the driver if it doesn't match.

-- 
https://patchwork.kernel.org/project/linux-wireless/list/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches

  reply	other threads:[~2021-10-07  8:35 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-20 16:11 [PATCH v7 00/24] wfx: get out from the staging area Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 01/24] mmc: sdio: add SDIO IDs for Silabs WF200 chip Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 02/24] dt-bindings: introduce silabs,wfx.yaml Jerome Pouiller
2021-09-23 17:09   ` Rob Herring
2021-09-20 16:11 ` [PATCH v7 03/24] wfx: add Makefile/Kconfig Jerome Pouiller
2021-10-01  9:04   ` Kalle Valo
2021-10-01  9:06   ` Kalle Valo
2021-09-20 16:11 ` [PATCH v7 04/24] wfx: add wfx.h Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 05/24] wfx: add main.c/main.h Jerome Pouiller
2021-10-01  9:22   ` Kalle Valo
2021-10-01  9:44     ` Jérôme Pouiller
2021-10-01 12:18       ` Kalle Valo
2021-10-06  7:32         ` Jérôme Pouiller
2021-10-07  8:35           ` Kalle Valo [this message]
2021-10-07 10:00             ` Jérôme Pouiller
2021-10-07 10:41               ` Kalle Valo
2021-10-07 10:49                 ` Kalle Valo
2021-10-07 11:22                   ` Jérôme Pouiller
2021-11-10  9:58                     ` Kalle Valo
2021-11-10 11:10                       ` Jérôme Pouiller
2021-10-01 15:29     ` Jérôme Pouiller
2021-10-05  5:56       ` Kalle Valo
2021-10-05  8:12         ` Jérôme Pouiller
2021-09-20 16:11 ` [PATCH v7 06/24] wfx: add bus.h Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 07/24] wfx: add bus_spi.c Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 08/24] wfx: add bus_sdio.c Jerome Pouiller
2021-09-30 10:07   ` Ulf Hansson
2021-09-30 16:51     ` Jérôme Pouiller
2021-09-30 17:06       ` Pali Rohár
2021-10-01 15:23         ` Ulf Hansson
2021-10-05  8:14           ` Jérôme Pouiller
2021-10-06 15:02             ` Ulf Hansson
2021-10-06 15:42               ` Jérôme Pouiller
2021-10-07  8:26                 ` Kalle Valo
2021-10-07 10:24                   ` Pali Rohár
2021-10-01 15:37       ` Ulf Hansson
2021-10-05  5:59         ` Kalle Valo
2021-09-20 16:11 ` [PATCH v7 09/24] wfx: add hwio.c/hwio.h Jerome Pouiller
2021-10-01  9:52   ` Kalle Valo
2021-10-01 12:39     ` Kalle Valo
2021-09-20 16:11 ` [PATCH v7 10/24] wfx: add fwio.c/fwio.h Jerome Pouiller
2021-10-01 11:58   ` Kalle Valo
2021-10-01 15:09     ` Jérôme Pouiller
2021-10-01 16:08       ` Pali Rohár
2021-10-01 16:46         ` Jérôme Pouiller
2021-10-07  8:19           ` Kalle Valo
2021-10-07 10:10             ` Pali Rohár
2021-10-07  8:16         ` Kalle Valo
2021-10-07 10:13           ` Pali Rohár
2021-10-07  8:08       ` Kalle Valo
2021-10-07  9:35         ` Jérôme Pouiller
2021-09-20 16:11 ` [PATCH v7 11/24] wfx: add bh.c/bh.h Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 12/24] wfx: add hif_api_*.h Jerome Pouiller
2021-10-01 11:41   ` Kalle Valo
2021-10-01 11:52     ` Jérôme Pouiller
2021-10-01 12:45       ` Kalle Valo
2021-10-01 11:45   ` Kalle Valo
2021-10-01 11:48   ` Kalle Valo
2021-09-20 16:11 ` [PATCH v7 13/24] wfx: add hif_tx*.c/hif_tx*.h Jerome Pouiller
2021-10-01  9:55   ` Kalle Valo
2021-10-01 15:17     ` Jérôme Pouiller
2021-10-01 16:13       ` Pali Rohár
2021-10-05  6:12         ` Kalle Valo
2021-10-05  6:44           ` Greg Kroah-Hartman
2021-10-05  8:17           ` Jérôme Pouiller
2021-10-05  8:21             ` Greg Kroah-Hartman
2021-10-05  9:18               ` Jérôme Pouiller
2021-10-05 14:02           ` Jakub Kicinski
2021-09-20 16:11 ` [PATCH v7 14/24] wfx: add key.c/key.h Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 15/24] wfx: add hif_rx.c/hif_rx.h Jerome Pouiller
2021-10-01 10:09   ` Kalle Valo
2021-09-20 16:11 ` [PATCH v7 16/24] wfx: add data_rx.c/data_rx.h Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 17/24] wfx: add queue.c/queue.h Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 18/24] wfx: add data_tx.c/data_tx.h Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 19/24] wfx: add sta.c/sta.h Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 20/24] wfx: add scan.c/scan.h Jerome Pouiller
2021-10-01  9:35   ` Kalle Valo
2021-09-20 16:11 ` [PATCH v7 21/24] wfx: add debug.c/debug.h Jerome Pouiller
2021-10-01 12:01   ` Kalle Valo
2021-09-20 16:11 ` [PATCH v7 22/24] wfx: add traces.h Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 23/24] wfx: remove from the staging area Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 24/24] wfx: get out " Jerome Pouiller
2021-10-01 12:42 ` [PATCH v7 00/24] " Kalle Valo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=875yu9cjvk.fsf@codeaurora.org \
    --to=kvalo@codeaurora.org \
    --cc=davem@davemloft.net \
    --cc=devel@driverdev.osuosl.org \
    --cc=devicetree@vger.kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jerome.pouiller@silabs.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pali@kernel.org \
    --cc=robh+dt@kernel.org \
    --cc=ulf.hansson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).