-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #149 from francois-berder-imgtec/update-wifi-driver
Update wifi driver to version 6.8
- Loading branch information
Showing
5 changed files
with
4,441 additions
and
0 deletions.
There are no files selected for viewing
Binary file modified
BIN
+2.36 KB
(100%)
target/linux/pistachio/base-files/lib/firmware/img/uccp420wlan/MAC_LOADER.ldr
100755 → 100644
Binary file not shown.
Binary file modified
BIN
+1.11 KB
(100%)
target/linux/pistachio/base-files/lib/firmware/img/uccp420wlan/MCP_LOADER.ldr
100755 → 100644
Binary file not shown.
113 changes: 113 additions & 0 deletions
113
target/linux/pistachio/patches-4.4/0132-uccp420wlan-Tx-data-path-fixes.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
From 8ac8d331fb755610cfc78ca808b7b58b20b0ddfc Mon Sep 17 00:00:00 2001 | ||
From: Chaitanya Tata <[email protected]> | ||
Date: Fri, 29 Jul 2016 13:39:40 +0530 | ||
Subject: [PATCH 1/3] uccp420wlan: Tx data path fixes | ||
|
||
1) If we get a tx_done for a spare token, but have pending frames for | ||
other than tx_done->queue, adjust the counters of outstanding_tokens | ||
for both queues. This fixes a issue of negative outstanding tokens. | ||
|
||
2) In discard channdel switch path, if there are no pending frames | ||
free the token by holding the tx_lock. This fixes TSMC data issue. | ||
|
||
Change-Id: Iccb4d66935f708be77559ee17953a5c21a5d8cc2 | ||
--- | ||
drivers/net/wireless/uccp420wlan/src/tx.c | 43 +++++++++++++++++++------------ | ||
1 file changed, 27 insertions(+), 16 deletions(-) | ||
mode change 100644 => 100755 drivers/net/wireless/uccp420wlan/src/tx.c | ||
|
||
diff --git a/drivers/net/wireless/uccp420wlan/src/tx.c b/drivers/net/wireless/uccp420wlan/src/tx.c | ||
old mode 100644 | ||
new mode 100755 | ||
index e81ffcc..d883d0d | ||
--- a/drivers/net/wireless/uccp420wlan/src/tx.c | ||
+++ b/drivers/net/wireless/uccp420wlan/src/tx.c | ||
@@ -361,10 +361,10 @@ void free_token(struct mac80211_dev *dev, | ||
|
||
test = tx->outstanding_tokens[queue]; | ||
if (WARN_ON_ONCE(test < 0 || test > 4)) { | ||
- pr_warn("%s: invalid outstanding_tokens: %d, old:%d\n", | ||
- __func__, | ||
- test, | ||
- old_token); | ||
+ UCCP_DEBUG_TX("%s: invalid outstanding_tokens: %d, old:%d\n", | ||
+ __func__, | ||
+ test, | ||
+ old_token); | ||
} | ||
} | ||
|
||
@@ -863,9 +863,9 @@ int uccp420wlan_tx_alloc_token(struct mac80211_dev *dev, | ||
out: | ||
spin_unlock_bh(&tx->lock); | ||
|
||
- UCCP_DEBUG_TX("%s-UMACTX:Alloc buf Result *id= %d\n", | ||
+ UCCP_DEBUG_TX("%s-UMACTX:Alloc buf Result *id= %d out_tok:%d\n", | ||
dev->name, | ||
- token_id); | ||
+ token_id, tx->outstanding_tokens[ac]); | ||
/* If token is available, just return tokenid, list will be sent*/ | ||
return token_id; | ||
} | ||
@@ -985,6 +985,12 @@ int uccp420wlan_tx_free_buff_req(struct mac80211_dev *dev, | ||
|
||
if (pkts_pend) { | ||
*ac = cnt; | ||
+ /* Spare Token Case*/ | ||
+ if (tx_done->queue != *ac) { | ||
+ /*Adjust the counters*/ | ||
+ tx->outstanding_tokens[tx_done->queue]--; | ||
+ tx->outstanding_tokens[*ac]++; | ||
+ } | ||
break; | ||
} | ||
} | ||
@@ -1361,6 +1367,12 @@ unsigned int uccp420wlan_proc_tx_dscrd_chsw(struct mac80211_dev *dev, | ||
desc_id); | ||
if (pkts_pend) { | ||
queue = cnt; | ||
+ if (tx_done->queue != queue) { | ||
+ unsigned int txd_q = tx_done->queue; | ||
+ /*Adjust the counters*/ | ||
+ tx->outstanding_tokens[txd_q]--; | ||
+ tx->outstanding_tokens[queue]++; | ||
+ } | ||
break; | ||
} | ||
} | ||
@@ -1388,16 +1400,6 @@ unsigned int uccp420wlan_proc_tx_dscrd_chsw(struct mac80211_dev *dev, | ||
goto tx_done; | ||
} | ||
|
||
- if (txq_len == 1) | ||
- dev->stats->tx_cmd_send_count_single--; | ||
- else | ||
- dev->stats->tx_cmd_send_count_multi--; | ||
- | ||
-out: | ||
- spin_unlock_bh(&tx->lock); | ||
- | ||
- return pkts_pend; | ||
- | ||
tx_done: | ||
skb_queue_walk_safe(&tx_done_list, skb, tmp) { | ||
tx_status(skb, | ||
@@ -1407,6 +1409,15 @@ tx_done: | ||
tx_info_1st_mpdu); | ||
} | ||
|
||
+ spin_lock_bh(&tx->lock); | ||
+out: | ||
+ if (!pkts_pend) { | ||
+ /* Mark the token as available */ | ||
+ free_token(dev, desc_id, tx_done->queue); | ||
+ dev->tx.desc_chan_map[desc_id] = -1; | ||
+ } | ||
+ spin_unlock_bh(&tx->lock); | ||
+ | ||
return pkts_pend; | ||
} | ||
#endif | ||
-- | ||
2.6.2 | ||
|
Oops, something went wrong.