From: Kalle Valo <kvalo@kernel.org>
To: Marc Gonzalez <mgonzalez@freebox.fr>
Cc: Jeff Johnson <quic_jjohnson@quicinc.com>,
ath10k <ath10k@lists.infradead.org>,
wireless <linux-wireless@vger.kernel.org>,
DT <devicetree@vger.kernel.org>,
Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Conor Dooley <conor+dt@kernel.org>,
Pierre-Hugues Husson <phhusson@freebox.fr>,
Jami Kettunen <jamipkettunen@gmail.com>,
Jeffrey Hugo <quic_jhugo@quicinc.com>,
Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Subject: Re: [PATCH 1/2] dt-bindings: net: wireless: ath10k: add qcom,no-msa-ready-indicator prop
Date: Tue, 05 Mar 2024 16:31:47 +0200 [thread overview]
Message-ID: <87plw87nsc.fsf@kernel.org> (raw)
In-Reply-To: <6d4b1381-c121-4cda-a8c9-9ccac56bd447@freebox.fr> (Marc Gonzalez's message of "Mon, 4 Mar 2024 16:51:37 +0100")
Marc Gonzalez <mgonzalez@freebox.fr> writes:
> On 01/03/2024 09:10, Kalle Valo wrote:
>
>> Marc Gonzalez wrote:
>>
>>> Kalle Valo wrote:
>>>
>>>> Here's one example where in ath10k we use a feature bit as a workaround:
>>>>
>>>> /* Don't trust error code from otp.bin */
>>>> ATH10K_FW_FEATURE_IGNORE_OTP_RESULT = 7,
>>>>
>>>> ....
>>>>
>>>> if (!(skip_otp || test_bit(ATH10K_FW_FEATURE_IGNORE_OTP_RESULT,
>>>> ar->running_fw->fw_file.fw_features)) &&
>>>> result != 0) {
>>>> ath10k_err(ar, "otp calibration failed: %d", result);
>>>> return -EINVAL;
>>>> }
>>>>
>>>> BTW for modifying firmware-N.bin files we have a script here:
>>>>
>>>> https://github.com/qca/qca-swiss-army-knife/blob/master/tools/scripts/ath10k/ath10k-fwencoder
>>>
>>> If I understand correctly, you are saying that there is
>>> (maybe... probably) a bug in the FW, so it makes sense to
>>> tag that specific FW file with a special bit which the kernel
>>> will interpret as "this FW is broken in a specific way;
>>> and here's how to work around the issue."
>>>
>>> So this bit would serve the same purpose as my proposed
>>> "qcom,no-msa-ready-indicator" bit (that bit existed instead
>>> in my board's device tree).
>>>
>>> The problem I see is that the firmware files are signed.
>>> Thus, changing a single bit breaks the verification...
>>> UNLESS the FW format allows for a signed section ALONG-SIDE
>>> an unsigned section?
>>
>> firmware-N.bin is ath10k specific container file format and we (the
>> Linux community) have full access to it using ath10k-fwencoder, there's
>> no signing or anything like that. One of the major reasons why it was
>> designed was to handle differences between firmware branches, just like
>> in this case.
>>
>> Of course plan A should be to fix the firmware but if that doesn't work
>> out then plan B could be using the feature bit in firmware-N.bin.
>>
>> BTW related to this Dmitry is extending firmware-N.bin handling for
>> WCN3990, you will most likely need to use that:
>>
>> https://patchwork.kernel.org/project/linux-wireless/cover/20240130-wcn3990-firmware-path-v1-0-826b93202964@linaro.org/
>
>
> If I understand correctly (happy to have anyone correct any
> misunderstandings), if the FW cannot be fixed (for any reason),
> then we would have to do something like this:
Thanks, this is exactly what I'm proposing.
> diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
> index 0032f8aa892ff..c8778ebe922af 100644
> --- a/drivers/net/wireless/ath/ath10k/core.c
> +++ b/drivers/net/wireless/ath/ath10k/core.c
> @@ -769,6 +769,7 @@ static const char *const ath10k_core_fw_feature_str[] = {
> [ATH10K_FW_FEATURE_SINGLE_CHAN_INFO_PER_CHANNEL] = "single-chan-info-per-channel",
> [ATH10K_FW_FEATURE_PEER_FIXED_RATE] = "peer-fixed-rate",
> [ATH10K_FW_FEATURE_IRAM_RECOVERY] = "iram-recovery",
> + [ATH10K_FW_FEATURE_NO_MSA_READY] = "no-msa-ready-indicator",
For consistency I would have just "no-msa-ready".
> @@ -1151,6 +1154,9 @@ struct ath10k {
> u8 cfg_tx_chainmask;
> u8 cfg_rx_chainmask;
>
> + /* FW does not send MSA_READY indicator. Fake it */
> + bool fake_msa_ready; /* bool or u8? or s8? or bitfield? */
Hopefully not needed, see below.
> struct completion install_key_done;
>
> int last_wmi_vdev_start_status;
> diff --git a/drivers/net/wireless/ath/ath10k/qmi.c b/drivers/net/wireless/ath/ath10k/qmi.c
> index 38e939f572a9e..0776e79b25f3a 100644
> --- a/drivers/net/wireless/ath/ath10k/qmi.c
> +++ b/drivers/net/wireless/ath/ath10k/qmi.c
> @@ -1040,6 +1040,8 @@ static void ath10k_qmi_driver_event_work(struct work_struct *work)
> switch (event->type) {
> case ATH10K_QMI_EVENT_SERVER_ARRIVE:
> ath10k_qmi_event_server_arrive(qmi);
> + if (ar->fake_msa_ready)
> + ath10k_qmi_event_msa_ready(qmi);
Unless I'm missing something I would use here test_bit() directly:
if (test_bit(ATH10K_FW_FEATURE_NO_MSA_READY, ar->running_fw->fw_file.fw_features))
ath10k_qmi_event_msa_ready(qmi);
--
https://patchwork.kernel.org/project/linux-wireless/list/
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
next prev parent reply other threads:[~2024-03-05 14:32 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-28 13:22 [PATCH 0/2] Work around missing MSA_READY indicator from ath10k FW Marc Gonzalez
2024-02-28 13:24 ` [PATCH 1/2] dt-bindings: net: wireless: ath10k: add qcom,no-msa-ready-indicator prop Marc Gonzalez
2024-02-28 14:03 ` Kalle Valo
2024-02-28 16:12 ` Marc Gonzalez
2024-02-28 16:37 ` Kalle Valo
2024-02-28 17:19 ` Marc Gonzalez
2024-03-01 8:10 ` Kalle Valo
2024-03-04 15:51 ` Marc Gonzalez
2024-03-05 14:31 ` Kalle Valo [this message]
2024-03-05 17:32 ` Marc Gonzalez
2024-03-05 19:20 ` Kalle Valo
2024-03-13 15:09 ` Marc Gonzalez
2024-03-13 15:48 ` Konrad Dybcio
2024-03-13 15:53 ` Dmitry Baryshkov
2024-03-14 12:31 ` Marc Gonzalez
2024-03-14 12:52 ` Dmitry Baryshkov
2024-03-18 16:56 ` Marc Gonzalez
2024-03-19 13:47 ` Marc Gonzalez
2024-03-19 14:39 ` Marc Gonzalez
2024-03-19 17:05 ` Marc Gonzalez
2024-03-26 15:04 ` Marc Gonzalez
2024-03-26 17:45 ` Marc Gonzalez
2024-03-26 17:51 ` Dmitry Baryshkov
2024-03-26 20:21 ` Jeff Johnson
2024-03-28 17:09 ` Marc Gonzalez
2024-02-29 18:40 ` Conor Dooley
2024-02-29 19:46 ` Jeff Johnson
2024-03-07 15:29 ` Marc Gonzalez
2024-03-07 16:46 ` Jeff Johnson
2024-03-14 14:33 ` Jeff Johnson
2024-03-14 17:52 ` Marc Gonzalez
2024-03-14 19:28 ` Jeff Johnson
2024-03-04 16:21 ` Marc Gonzalez
2024-03-04 19:34 ` Conor Dooley
2024-03-04 19:37 ` Dmitry Baryshkov
2024-03-04 19:45 ` Conor Dooley
2024-03-04 19:59 ` Dmitry Baryshkov
2024-03-04 20:17 ` Conor Dooley
2024-03-04 20:21 ` Dmitry Baryshkov
2024-03-05 8:04 ` Krzysztof Kozlowski
2024-03-05 13:41 ` Marc Gonzalez
2024-03-05 15:02 ` Kalle Valo
2024-03-05 14:45 ` Kalle Valo
2024-02-28 14:59 ` Jeff Johnson
2024-02-28 16:00 ` Marc Gonzalez
2024-02-29 15:49 ` Marc Gonzalez
2024-02-28 13:25 ` [PATCH 2/2] wifi: ath10k: work around missing MSA_READY indicator Marc Gonzalez
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=87plw87nsc.fsf@kernel.org \
--to=kvalo@kernel.org \
--cc=ath10k@lists.infradead.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dmitry.baryshkov@linaro.org \
--cc=jamipkettunen@gmail.com \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-wireless@vger.kernel.org \
--cc=mgonzalez@freebox.fr \
--cc=phhusson@freebox.fr \
--cc=quic_jhugo@quicinc.com \
--cc=quic_jjohnson@quicinc.com \
--cc=robh+dt@kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.