* [PATCH 0/4] wil6210 patches
@ 2015-10-25 13:59 Vladimir Kondratiev
2015-10-25 13:59 ` [PATCH 1/4] wil6210: ignore selected WMI events Vladimir Kondratiev
` (4 more replies)
0 siblings, 5 replies; 8+ messages in thread
From: Vladimir Kondratiev @ 2015-10-25 13:59 UTC (permalink / raw)
To: Kalle Valo; +Cc: Vladimir Kondratiev, linux-wireless, wil6210
Collection of small fixes
Hamad Kadmany (1):
wil6210: Fix TSO overflow handling
Vladimir Kondratiev (3):
wil6210: ignore selected WMI events
wil6210: fix device ready detection
wil6210: handle failure in Tx vring config
drivers/net/wireless/ath/wil6210/interrupt.c | 6 +++---
drivers/net/wireless/ath/wil6210/main.c | 2 +-
drivers/net/wireless/ath/wil6210/txrx.c | 30 ++++++++++++++--------------
drivers/net/wireless/ath/wil6210/wil6210.h | 4 ++--
drivers/net/wireless/ath/wil6210/wmi.c | 20 +++++++++++--------
5 files changed, 33 insertions(+), 29 deletions(-)
--
2.1.4
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/4] wil6210: ignore selected WMI events
2015-10-25 13:59 [PATCH 0/4] wil6210 patches Vladimir Kondratiev
@ 2015-10-25 13:59 ` Vladimir Kondratiev
2015-10-25 13:59 ` [PATCH 2/4] wil6210: Fix TSO overflow handling Vladimir Kondratiev
` (3 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Vladimir Kondratiev @ 2015-10-25 13:59 UTC (permalink / raw)
To: Kalle Valo; +Cc: Vladimir Kondratiev, linux-wireless, wil6210
Some events are ignored for purpose; such events should not
be treated as "unhandled events". Replace info message
saying "unhandled" with debug one saying "ignore", to reduce
dmesg pollution
Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
---
drivers/net/wireless/ath/wil6210/wmi.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/net/wireless/ath/wil6210/wmi.c b/drivers/net/wireless/ath/wil6210/wmi.c
index 6112189..361f3d8 100644
--- a/drivers/net/wireless/ath/wil6210/wmi.c
+++ b/drivers/net/wireless/ath/wil6210/wmi.c
@@ -684,6 +684,15 @@ __acquires(&sta->tid_rx_lock) __releases(&sta->tid_rx_lock)
spin_unlock_bh(&sta->tid_rx_lock);
}
+/**
+ * Some events are ignored for purpose; and need not be interpreted as
+ * "unhandled events"
+ */
+static void wmi_evt_ignore(struct wil6210_priv *wil, int id, void *d, int len)
+{
+ wil_dbg_wmi(wil, "Ignore event 0x%04x len %d\n", id, len);
+}
+
static const struct {
int eventid;
void (*handler)(struct wil6210_priv *wil, int eventid,
@@ -701,6 +710,7 @@ static const struct {
{WMI_RCP_ADDBA_REQ_EVENTID, wmi_evt_addba_rx_req},
{WMI_DELBA_EVENTID, wmi_evt_delba},
{WMI_VRING_EN_EVENTID, wmi_evt_vring_en},
+ {WMI_DATA_PORT_OPEN_EVENTID, wmi_evt_ignore},
};
/*
--
2.1.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/4] wil6210: Fix TSO overflow handling
2015-10-25 13:59 [PATCH 0/4] wil6210 patches Vladimir Kondratiev
2015-10-25 13:59 ` [PATCH 1/4] wil6210: ignore selected WMI events Vladimir Kondratiev
@ 2015-10-25 13:59 ` Vladimir Kondratiev
2015-10-25 13:59 ` [PATCH 3/4] wil6210: fix device ready detection Vladimir Kondratiev
` (2 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Vladimir Kondratiev @ 2015-10-25 13:59 UTC (permalink / raw)
To: Kalle Valo; +Cc: Hamad Kadmany, linux-wireless, wil6210, Vladimir Kondratiev
From: Hamad Kadmany <qca_hkadmany@qca.qualcomm.com>
When Tx ring full is encountered with TSO,
printout of "DMA error" was wrongly printed.
In addition, in case of Tx ring full return
proper error code so that NETDEV_TX_BUSY is
returned to network stack in order not to
drop the packets and retry transmission of the
packets when ring is emptied.
Signed-off-by: Hamad Kadmany <qca_hkadmany@qca.qualcomm.com>
Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
---
drivers/net/wireless/ath/wil6210/txrx.c | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/drivers/net/wireless/ath/wil6210/txrx.c b/drivers/net/wireless/ath/wil6210/txrx.c
index 0f8b687..3bc9bc0 100644
--- a/drivers/net/wireless/ath/wil6210/txrx.c
+++ b/drivers/net/wireless/ath/wil6210/txrx.c
@@ -1242,6 +1242,7 @@ static int __wil_tx_vring_tso(struct wil6210_priv *wil, struct vring *vring,
int tcp_hdr_len;
int skb_net_hdr_len;
int gso_type;
+ int rc = -EINVAL;
wil_dbg_txrx(wil, "%s() %d bytes to vring %d\n",
__func__, skb->len, vring_index);
@@ -1333,8 +1334,9 @@ static int __wil_tx_vring_tso(struct wil6210_priv *wil, struct vring *vring,
len, rem_data, descs_used);
if (descs_used == avail) {
- wil_err(wil, "TSO: ring overflow\n");
- goto dma_error;
+ wil_err_ratelimited(wil, "TSO: ring overflow\n");
+ rc = -ENOMEM;
+ goto mem_error;
}
lenmss = min_t(int, rem_data, len);
@@ -1356,8 +1358,10 @@ static int __wil_tx_vring_tso(struct wil6210_priv *wil, struct vring *vring,
headlen -= lenmss;
}
- if (unlikely(dma_mapping_error(dev, pa)))
- goto dma_error;
+ if (unlikely(dma_mapping_error(dev, pa))) {
+ wil_err(wil, "TSO: DMA map page error\n");
+ goto mem_error;
+ }
_desc = &vring->va[i].tx;
@@ -1456,8 +1460,8 @@ static int __wil_tx_vring_tso(struct wil6210_priv *wil, struct vring *vring,
}
/* advance swhead */
- wil_dbg_txrx(wil, "TSO: Tx swhead %d -> %d\n", swhead, vring->swhead);
wil_vring_advance_head(vring, descs_used);
+ wil_dbg_txrx(wil, "TSO: Tx swhead %d -> %d\n", swhead, vring->swhead);
/* make sure all writes to descriptors (shared memory) are done before
* committing them to HW
@@ -1467,8 +1471,7 @@ static int __wil_tx_vring_tso(struct wil6210_priv *wil, struct vring *vring,
wil_w(wil, vring->hwtail, vring->swhead);
return 0;
-dma_error:
- wil_err(wil, "TSO: DMA map page error\n");
+mem_error:
while (descs_used > 0) {
struct wil_ctx *ctx;
@@ -1479,14 +1482,11 @@ dma_error:
_desc->dma.status = TX_DMA_STATUS_DU;
ctx = &vring->ctx[i];
wil_txdesc_unmap(dev, d, ctx);
- if (ctx->skb)
- dev_kfree_skb_any(ctx->skb);
memset(ctx, 0, sizeof(*ctx));
descs_used--;
}
-
err_exit:
- return -EINVAL;
+ return rc;
}
static int __wil_tx_vring(struct wil6210_priv *wil, struct vring *vring,
@@ -1562,8 +1562,11 @@ static int __wil_tx_vring(struct wil6210_priv *wil, struct vring *vring,
_d = &vring->va[i].tx;
pa = skb_frag_dma_map(dev, frag, 0, skb_frag_size(frag),
DMA_TO_DEVICE);
- if (unlikely(dma_mapping_error(dev, pa)))
+ if (unlikely(dma_mapping_error(dev, pa))) {
+ wil_err(wil, "Tx[%2d] failed to map fragment\n",
+ vring_index);
goto dma_error;
+ }
vring->ctx[i].mapped_as = wil_mapped_as_page;
wil_tx_desc_map(d, pa, len, vring_index);
/* no need to check return code -
@@ -1623,9 +1626,6 @@ static int __wil_tx_vring(struct wil6210_priv *wil, struct vring *vring,
_d->dma.status = TX_DMA_STATUS_DU;
wil_txdesc_unmap(dev, d, ctx);
- if (ctx->skb)
- dev_kfree_skb_any(ctx->skb);
-
memset(ctx, 0, sizeof(*ctx));
}
--
2.1.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/4] wil6210: fix device ready detection
2015-10-25 13:59 [PATCH 0/4] wil6210 patches Vladimir Kondratiev
2015-10-25 13:59 ` [PATCH 1/4] wil6210: ignore selected WMI events Vladimir Kondratiev
2015-10-25 13:59 ` [PATCH 2/4] wil6210: Fix TSO overflow handling Vladimir Kondratiev
@ 2015-10-25 13:59 ` Vladimir Kondratiev
2015-10-25 13:59 ` [PATCH 4/4] wil6210: handle failure in Tx vring config Vladimir Kondratiev
2015-10-29 11:36 ` [PATCH 0/4] wil6210 patches Kalle Valo
4 siblings, 0 replies; 8+ messages in thread
From: Vladimir Kondratiev @ 2015-10-25 13:59 UTC (permalink / raw)
To: Kalle Valo; +Cc: Vladimir Kondratiev, linux-wireless, wil6210
Adjust driver behavior during FW boot. Proper sequence of
events after reset and FW download, is as following:
- FW prepares mailbox structure and reports IRQ "FW_READY"
- driver caches mailbox registers, marks mailbox readiness
- FW sends WMI_FW_READY event, ignore it
- FW sends WMI_READY event with some data
- driver stores relevant data marks FW is operational
Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
---
drivers/net/wireless/ath/wil6210/interrupt.c | 6 +++---
drivers/net/wireless/ath/wil6210/wil6210.h | 4 ++--
drivers/net/wireless/ath/wil6210/wmi.c | 10 ++--------
3 files changed, 7 insertions(+), 13 deletions(-)
diff --git a/drivers/net/wireless/ath/wil6210/interrupt.c b/drivers/net/wireless/ath/wil6210/interrupt.c
index 06fc46f..50c136e 100644
--- a/drivers/net/wireless/ath/wil6210/interrupt.c
+++ b/drivers/net/wireless/ath/wil6210/interrupt.c
@@ -236,7 +236,7 @@ static irqreturn_t wil6210_irq_rx(int irq, void *cookie)
isr &= ~(BIT_DMA_EP_RX_ICR_RX_DONE |
BIT_DMA_EP_RX_ICR_RX_HTRSH);
- if (likely(test_bit(wil_status_reset_done, wil->status))) {
+ if (likely(test_bit(wil_status_fwready, wil->status))) {
if (likely(test_bit(wil_status_napi_en, wil->status))) {
wil_dbg_txrx(wil, "NAPI(Rx) schedule\n");
need_unmask = false;
@@ -286,7 +286,7 @@ static irqreturn_t wil6210_irq_tx(int irq, void *cookie)
isr &= ~BIT_DMA_EP_TX_ICR_TX_DONE;
/* clear also all VRING interrupts */
isr &= ~(BIT(25) - 1UL);
- if (likely(test_bit(wil_status_reset_done, wil->status))) {
+ if (likely(test_bit(wil_status_fwready, wil->status))) {
wil_dbg_txrx(wil, "NAPI(Tx) schedule\n");
need_unmask = false;
napi_schedule(&wil->napi_tx);
@@ -364,7 +364,7 @@ static irqreturn_t wil6210_irq_misc(int irq, void *cookie)
if (isr & ISR_MISC_FW_READY) {
wil_dbg_irq(wil, "IRQ: FW ready\n");
wil_cache_mbox_regs(wil);
- set_bit(wil_status_reset_done, wil->status);
+ set_bit(wil_status_mbox_ready, wil->status);
/**
* Actual FW ready indicated by the
* WMI_FW_READY_EVENTID
diff --git a/drivers/net/wireless/ath/wil6210/wil6210.h b/drivers/net/wireless/ath/wil6210/wil6210.h
index f619bf2..ade5f3b8 100644
--- a/drivers/net/wireless/ath/wil6210/wil6210.h
+++ b/drivers/net/wireless/ath/wil6210/wil6210.h
@@ -402,11 +402,11 @@ struct vring_tx_data {
};
enum { /* for wil6210_priv.status */
- wil_status_fwready = 0,
+ wil_status_fwready = 0, /* FW operational */
wil_status_fwconnecting,
wil_status_fwconnected,
wil_status_dontscan,
- wil_status_reset_done,
+ wil_status_mbox_ready, /* MBOX structures ready */
wil_status_irqen, /* FIXME: interrupts enabled - for debug */
wil_status_napi_en, /* NAPI enabled protected by wil->mutex */
wil_status_resetting, /* reset in progress */
diff --git a/drivers/net/wireless/ath/wil6210/wmi.c b/drivers/net/wireless/ath/wil6210/wmi.c
index 361f3d8..6ed26ba 100644
--- a/drivers/net/wireless/ath/wil6210/wmi.c
+++ b/drivers/net/wireless/ath/wil6210/wmi.c
@@ -293,12 +293,6 @@ static void wmi_evt_ready(struct wil6210_priv *wil, int id, void *d, int len)
/* ignore MAC address, we already have it from the boot loader */
snprintf(wdev->wiphy->fw_version, sizeof(wdev->wiphy->fw_version),
"%d", wil->fw_version);
-}
-
-static void wmi_evt_fw_ready(struct wil6210_priv *wil, int id, void *d,
- int len)
-{
- wil_dbg_wmi(wil, "WMI: got FW ready event\n");
wil_set_recovery_state(wil, fw_recovery_idle);
set_bit(wil_status_fwready, wil->status);
@@ -699,7 +693,7 @@ static const struct {
void *data, int data_len);
} wmi_evt_handlers[] = {
{WMI_READY_EVENTID, wmi_evt_ready},
- {WMI_FW_READY_EVENTID, wmi_evt_fw_ready},
+ {WMI_FW_READY_EVENTID, wmi_evt_ignore},
{WMI_RX_MGMT_PACKET_EVENTID, wmi_evt_rx_mgmt},
{WMI_TX_MGMT_PACKET_EVENTID, wmi_evt_tx_mgmt},
{WMI_SCAN_COMPLETE_EVENTID, wmi_evt_scan_complete},
@@ -730,7 +724,7 @@ void wmi_recv_cmd(struct wil6210_priv *wil)
ulong flags;
unsigned n;
- if (!test_bit(wil_status_reset_done, wil->status)) {
+ if (!test_bit(wil_status_mbox_ready, wil->status)) {
wil_err(wil, "Reset in progress. Cannot handle WMI event\n");
return;
}
--
2.1.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 4/4] wil6210: handle failure in Tx vring config
2015-10-25 13:59 [PATCH 0/4] wil6210 patches Vladimir Kondratiev
` (2 preceding siblings ...)
2015-10-25 13:59 ` [PATCH 3/4] wil6210: fix device ready detection Vladimir Kondratiev
@ 2015-10-25 13:59 ` Vladimir Kondratiev
2015-10-29 11:36 ` [PATCH 0/4] wil6210 patches Kalle Valo
4 siblings, 0 replies; 8+ messages in thread
From: Vladimir Kondratiev @ 2015-10-25 13:59 UTC (permalink / raw)
To: Kalle Valo; +Cc: Vladimir Kondratiev, linux-wireless, wil6210
When configuring Tx vring for new connection,
WMI call to the firmware may fail. In this case, need to
clean up properly. In particular, need to call
cfg80211_del_sta() in case of AP like interface.
Perform full "disconnect" procedure for proper clean up
Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
---
drivers/net/wireless/ath/wil6210/main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/ath/wil6210/main.c b/drivers/net/wireless/ath/wil6210/main.c
index aade16b..bb69a59 100644
--- a/drivers/net/wireless/ath/wil6210/main.c
+++ b/drivers/net/wireless/ath/wil6210/main.c
@@ -422,7 +422,7 @@ static void wil_connect_worker(struct work_struct *work)
wil->sta[cid].status = wil_sta_connected;
netif_tx_wake_all_queues(ndev);
} else {
- wil->sta[cid].status = wil_sta_unused;
+ wil_disconnect_cid(wil, cid, WLAN_REASON_UNSPECIFIED, true);
}
}
--
2.1.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 0/4] wil6210 patches
2015-10-25 13:59 [PATCH 0/4] wil6210 patches Vladimir Kondratiev
` (3 preceding siblings ...)
2015-10-25 13:59 ` [PATCH 4/4] wil6210: handle failure in Tx vring config Vladimir Kondratiev
@ 2015-10-29 11:36 ` Kalle Valo
4 siblings, 0 replies; 8+ messages in thread
From: Kalle Valo @ 2015-10-29 11:36 UTC (permalink / raw)
To: Vladimir Kondratiev; +Cc: linux-wireless, wil6210
Vladimir Kondratiev <QCA_vkondrat@QCA.qualcomm.com> writes:
> Collection of small fixes
>
> Hamad Kadmany (1):
> wil6210: Fix TSO overflow handling
>
> Vladimir Kondratiev (3):
> wil6210: ignore selected WMI events
> wil6210: fix device ready detection
> wil6210: handle failure in Tx vring config
All four applied, thanks.
--
Kalle Valo
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 0/4] wil6210 patches
@ 2016-11-28 11:48 Maya Erez
0 siblings, 0 replies; 8+ messages in thread
From: Maya Erez @ 2016-11-28 11:48 UTC (permalink / raw)
To: Kalle Valo; +Cc: Maya Erez, linux-wireless, wil6210
Various wil6210 bug fixes.
Lior David (3):
wil6210: delay remain on channel when scan is active
wil6210: add debugfs blobs for UCODE code and data
wil6210: align to latest auto generated wmi.h
Maya Erez (1):
wil6210: validate wil_pmc_alloc parameters
drivers/net/wireless/ath/wil6210/cfg80211.c | 45 ++-
drivers/net/wireless/ath/wil6210/main.c | 2 +
drivers/net/wireless/ath/wil6210/p2p.c | 150 +++++++--
drivers/net/wireless/ath/wil6210/pmc.c | 55 ++-
drivers/net/wireless/ath/wil6210/wil6210.h | 12 +-
drivers/net/wireless/ath/wil6210/wil_crash_dump.c | 6 +
drivers/net/wireless/ath/wil6210/wmi.c | 43 ++-
drivers/net/wireless/ath/wil6210/wmi.h | 392 +++++++++++++++-------
8 files changed, 495 insertions(+), 210 deletions(-)
--
1.9.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 0/4] wil6210 patches
@ 2016-08-22 9:42 Maya Erez
0 siblings, 0 replies; 8+ messages in thread
From: Maya Erez @ 2016-08-22 9:42 UTC (permalink / raw)
To: Kalle Valo; +Cc: Maya Erez, linux-wireless, wil6210
Various wil6210 fixes
Lior David (4):
wil6210: fix protection of wil->scan_request
wil6210: align to latest auto generated wmi.h
wil6210: extract firmware capabilities from FW file
wil6210: extract firmware version from file header
drivers/net/wireless/ath/wil6210/cfg80211.c | 3 +
drivers/net/wireless/ath/wil6210/debugfs.c | 53 ++++-
drivers/net/wireless/ath/wil6210/fw.h | 14 +-
drivers/net/wireless/ath/wil6210/fw_inc.c | 92 ++++++---
drivers/net/wireless/ath/wil6210/main.c | 9 +-
drivers/net/wireless/ath/wil6210/netdev.c | 2 +
drivers/net/wireless/ath/wil6210/pcie_bus.c | 4 +
drivers/net/wireless/ath/wil6210/wil6210.h | 9 +-
drivers/net/wireless/ath/wil6210/wmi.c | 12 +-
drivers/net/wireless/ath/wil6210/wmi.h | 292 ++++++++++++++++++++++++++++
10 files changed, 454 insertions(+), 36 deletions(-)
--
1.9.1
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2016-11-28 11:49 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-25 13:59 [PATCH 0/4] wil6210 patches Vladimir Kondratiev
2015-10-25 13:59 ` [PATCH 1/4] wil6210: ignore selected WMI events Vladimir Kondratiev
2015-10-25 13:59 ` [PATCH 2/4] wil6210: Fix TSO overflow handling Vladimir Kondratiev
2015-10-25 13:59 ` [PATCH 3/4] wil6210: fix device ready detection Vladimir Kondratiev
2015-10-25 13:59 ` [PATCH 4/4] wil6210: handle failure in Tx vring config Vladimir Kondratiev
2015-10-29 11:36 ` [PATCH 0/4] wil6210 patches Kalle Valo
2016-08-22 9:42 Maya Erez
2016-11-28 11:48 Maya Erez
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.