[PATCH 4/4] ath10k: fix spurious tx/rx during boot
Hsu, Ryan
ryanhsu at qca.qualcomm.com
Fri Sep 16 15:37:38 PDT 2016
On 07/19/2016 03:34 AM, Michal Kazior wrote:
>
> +static int ath10k_core_reset_rx_filter(struct ath10k *ar)
> +{
> + int ret;
> + int vdev_id;
> + int vdev_type;
> + int vdev_subtype;
> + const u8 *vdev_addr;
> +
> + vdev_id = 0;
> + vdev_type = WMI_VDEV_TYPE_STA;
> + vdev_subtype = ath10k_wmi_get_vdev_subtype(ar, WMI_VDEV_SUBTYPE_NONE);
> + vdev_addr = ar->mac_addr;
> +
> + ret = ath10k_wmi_vdev_create(ar, vdev_id, vdev_type, vdev_subtype,
> + vdev_addr);
> + if (ret) {
> + ath10k_err(ar, "failed to create dummy vdev: %d\n", ret);
> + return ret;
> + }
> +
> + ret = ath10k_wmi_vdev_delete(ar, vdev_id);
> + if (ret) {
> + ath10k_err(ar, "failed to delete dummy vdev: %d\n", ret);
> + return ret;
> + }
> +
> + /* WMI and HTT may use separate HIF pipes and are not guaranteed to be
> + * serialized properly implicitly.
> + *
> + * Moreover (most) WMI commands have no explicit acknowledges. It is
> + * possible to infer it implicitly by poking firmware with echo
> + * command - getting a reply means all preceding comments have been
> + * (mostly) processed.
> + *
> + * In case of vdev create/delete this is sufficient.
> + *
> + * Without this it's possible to end up with a race when HTT Rx ring is
> + * started before vdev create/delete hack is complete allowing a short
> + * window of opportunity to receive (and Tx ACK) a bunch of frames.
> + */
> + ret = ath10k_wmi_barrier(ar);
QCA6174 UTF firmware seems doesn't support the WMI_ECHO command.
[16460.274822] ath10k_pci 0000:04:00.0: wmi tlv echo value 0x0ba991e9
...
[16463.461970] ath10k_pci 0000:04:00.0: failed to ping firmware: -110
[16463.461975] ath10k_pci 0000:04:00.0: failed to reset rx filter: -110
Has anyone verified any AP solution to see if UTF mode is still working
with after this patch?
Anyway, I would like to exclude the workaround from all solution's UTF mode.
Michal any concerns? (or maybe just for QCA61x4 if any...)
> + if (ret) {
> + ath10k_err(ar, "failed to ping firmware: %d\n", ret);
> + return ret;
> + }
> +
> + return 0;
> +}
>
More information about the ath10k
mailing list