Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2acb4220 authored by Vladimir Kondratiev's avatar Vladimir Kondratiev Committed by John W. Linville
Browse files

wil6210: Never delete Rx chain with firmware



Firmware crash on attempt to delete Rx chain.
Driver part of Rx chain removed only in preparation for the target reset;
as reset is the only flow that removes Rx chain in the firmware.

Signed-off-by: default avatarVladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent afda8bb5
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -511,11 +511,9 @@ void wil_rx_fini(struct wil6210_priv *wil)
{
	struct vring *vring = &wil->vring_rx;

	if (vring->va) {
		wmi_rx_chain_del(wil);
	if (vring->va)
		wil_vring_free(wil, vring, 0);
}
}

int wil_vring_init_tx(struct wil6210_priv *wil, int id, int size,
		      int cid, int tid)
+0 −1
Original line number Diff line number Diff line
@@ -327,7 +327,6 @@ int wmi_add_cipher_key(struct wil6210_priv *wil, u8 key_index,
		       const void *mac_addr, int key_len, const void *key);
int wmi_echo(struct wil6210_priv *wil);
int wmi_set_ie(struct wil6210_priv *wil, u8 type, u16 ie_len, const void *ie);
int wmi_rx_chain_del(struct wil6210_priv *wil);
int wmi_rx_chain_add(struct wil6210_priv *wil, struct vring *vring);

int wil6210_init_irq(struct wil6210_priv *wil, int irq);
+0 −22
Original line number Diff line number Diff line
@@ -902,28 +902,6 @@ int wmi_rx_chain_add(struct wil6210_priv *wil, struct vring *vring)
	return rc;
}

int wmi_rx_chain_del(struct wil6210_priv *wil)
{
	int rc;
	struct wmi_cfg_rx_chain_cmd cmd = {
		.action = cpu_to_le32(WMI_RX_CHAIN_DEL),
		.rx_sw_ring = {
			.max_mpdu_size = cpu_to_le16(RX_BUF_LEN),
		},
	};
	struct {
		struct wil6210_mbox_hdr_wmi wmi;
		struct wmi_cfg_rx_chain_done_event cfg;
	} __packed wmi_rx_cfg_reply;

	rc = wmi_call(wil, WMI_CFG_RX_CHAIN_CMDID, &cmd, sizeof(cmd),
		      WMI_CFG_RX_CHAIN_DONE_EVENTID,
		      &wmi_rx_cfg_reply, sizeof(wmi_rx_cfg_reply),
		      100);

	return rc;
}

void wmi_event_flush(struct wil6210_priv *wil)
{
	struct pending_wmi_event *evt, *t;