aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/rt2x00
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2019-07-07 00:08:20 +0200
committerPetr Štetiar <ynezz@true.cz>2019-07-18 00:22:04 +0200
commit0b2c42ced21a7bc053e0d729f85041f1e3b54fbc (patch)
tree5b461df94bf6d46f2700310b3d27a7b5c39e3728 /package/kernel/mac80211/patches/rt2x00
parentd616b2c906690d2e471144ca12b0a9ed28de21c2 (diff)
downloadupstream-0b2c42ced21a7bc053e0d729f85041f1e3b54fbc.tar.gz
upstream-0b2c42ced21a7bc053e0d729f85041f1e3b54fbc.tar.bz2
upstream-0b2c42ced21a7bc053e0d729f85041f1e3b54fbc.zip
mac80211: Update to version 5.2-rc7
This updates mac80211 to version 5.2-rc7, this contains all the changes to the wireless subsystem up to Linux 5.2-rc7. * The removed patches are applied upstream * b43 now uses kmod-lib-cordic * Update the nl80211.h file in iw to match backports version. * Remove the two backports from kernel 4.9, they were needed for mt76, but that can use the version from backports now, otherwise they collide and cause compile errors. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Diffstat (limited to 'package/kernel/mac80211/patches/rt2x00')
-rw-r--r--package/kernel/mac80211/patches/rt2x00/001-rt2x00-use-simple_read_from_buffer.patch59
-rw-r--r--package/kernel/mac80211/patches/rt2x00/002-rt2800-move-usb-specific-txdone-txstatus-routines-to.patch357
-rw-r--r--package/kernel/mac80211/patches/rt2x00/003-rt2800mmio-use-txdone-txstatus-routines-from-lib.patch244
-rw-r--r--package/kernel/mac80211/patches/rt2x00/004-rt2x00-do-not-check-for-txstatus-timeout-every-time-.patch72
-rw-r--r--package/kernel/mac80211/patches/rt2x00/005-rt2x00-use-different-txstatus-timeouts-when-flushing.patch112
-rw-r--r--package/kernel/mac80211/patches/rt2x00/006-rt2800-flush-and-txstatus-rework-for-rt2800mmio.patch238
-rw-r--r--package/kernel/mac80211/patches/rt2x00/007-rt2x00-rt2400pci-mark-expected-switch-fall-through.patch25
-rw-r--r--package/kernel/mac80211/patches/rt2x00/008-rt2x00-rt2500pci-mark-expected-switch-fall-through.patch25
-rw-r--r--package/kernel/mac80211/patches/rt2x00/009-rt2x00-rt2800lib-mark-expected-switch-fall-throughs.patch44
-rw-r--r--package/kernel/mac80211/patches/rt2x00/010-rt2x00-rt61pci-mark-expected-switch-fall-through.patch25
-rw-r--r--package/kernel/mac80211/patches/rt2x00/011-cross-tree-phase-out-dma_zalloc_coherent.patch40
-rw-r--r--package/kernel/mac80211/patches/rt2x00/012-rt2x00-reduce-tx-power-to-nominal-level-on-RT6352.patch32
-rw-r--r--package/kernel/mac80211/patches/rt2x00/013-rt2x00-Work-around-a-firmware-bug-with-shared-keys.patch143
-rw-r--r--package/kernel/mac80211/patches/rt2x00/014-rt2x00-no-need-to-check-return-value-of-debugfs_crea.patch107
-rw-r--r--package/kernel/mac80211/patches/rt2x00/015-rt2x00-remove-unneeded-check.patch137
-rw-r--r--package/kernel/mac80211/patches/rt2x00/016-rt2x00-remove-confusing-AGC-register.patch34
-rw-r--r--package/kernel/mac80211/patches/rt2x00/017-rt2800-enable-TX_PIN_CFG_LNA_PE_-bits-per-band.patch47
-rw-r--r--package/kernel/mac80211/patches/rt2x00/018-rt2800-enable-TX_PIN_CFG_RFRX_EN-only-for-MT7620.patch41
-rw-r--r--package/kernel/mac80211/patches/rt2x00/019-rt2800-comment-and-simplify-AGC-init-for-RT6352.patch33
-rw-r--r--package/kernel/mac80211/patches/rt2x00/020-cfg80211-add-ratelimited-variants-of-err-and-warn.patch39
-rw-r--r--package/kernel/mac80211/patches/rt2x00/021-rt2x00-use-ratelimited-variants-dev_warn-dev_err.patch42
-rw-r--r--package/kernel/mac80211/patches/rt2x00/022-rt2x00-check-number-of-EPROTO-errors.patch96
-rw-r--r--package/kernel/mac80211/patches/rt2x00/023-rt2x00-do-not-print-error-when-queue-is-full.patch43
-rw-r--r--package/kernel/mac80211/patches/rt2x00/024-rt2800-partially-restore-old-mmio-txstatus-behaviour.patch128
-rw-r--r--package/kernel/mac80211/patches/rt2x00/025-rt2800-new-flush-implementation-for-SoC-devices.patch27
-rw-r--r--package/kernel/mac80211/patches/rt2x00/026-rt2800-move-txstatus-pending-routine.patch106
-rw-r--r--package/kernel/mac80211/patches/rt2x00/027-rt2800mmio-fetch-tx-status-changes.patch61
-rw-r--r--package/kernel/mac80211/patches/rt2x00/028-rt2800mmio-use-timer-and-work-for-handling-tx-status.patch194
-rw-r--r--package/kernel/mac80211/patches/rt2x00/029-rt2x00-remove-last_nostatus_check.patch57
-rw-r--r--package/kernel/mac80211/patches/rt2x00/030-rt2x00-remove-not-used-entry-field.patch34
-rw-r--r--package/kernel/mac80211/patches/rt2x00/031-rt2x00mmio-remove-legacy-comment.patch26
-rw-r--r--package/kernel/mac80211/patches/rt2x00/032-rt2x00-do-not-increment-sequence-number-while-re-tra.patch94
-rw-r--r--package/kernel/mac80211/patches/rt2x00/050-rt2x00-add-RT3883-support.patch959
-rw-r--r--package/kernel/mac80211/patches/rt2x00/100-rt2x00_options.patch2
-rw-r--r--package/kernel/mac80211/patches/rt2x00/501-rt2x00-allow-to-build-rt2800soc-module-for-RT3883.patch4
-rw-r--r--package/kernel/mac80211/patches/rt2x00/601-rt2x00-introduce-rt2x00_platform_h.patch2
-rw-r--r--package/kernel/mac80211/patches/rt2x00/602-rt2x00-introduce-rt2x00eeprom.patch28
-rw-r--r--package/kernel/mac80211/patches/rt2x00/604-rt2x00-load-eeprom-on-SoC-from-a-mtd-device-defines-.patch2
-rw-r--r--package/kernel/mac80211/patches/rt2x00/606-rt2x00-allow_disabling_bands_through_platform_data.patch4
-rw-r--r--package/kernel/mac80211/patches/rt2x00/607-rt2x00-add_platform_data_mac_addr.patch4
-rw-r--r--package/kernel/mac80211/patches/rt2x00/608-rt2x00-allow_disabling_bands_through_dts.patch2
-rw-r--r--package/kernel/mac80211/patches/rt2x00/609-rt2x00-make-wmac-loadable-via-OF-on-rt288x-305x-SoC.patch2
-rw-r--r--package/kernel/mac80211/patches/rt2x00/610-rt2x00-change-led-polarity-from-OF.patch6
-rw-r--r--package/kernel/mac80211/patches/rt2x00/611-rt2x00-add-AP+STA-support.patch2
-rw-r--r--package/kernel/mac80211/patches/rt2x00/650-rt2x00-add-support-for-external-PA-on-MT7620.patch8
-rw-r--r--package/kernel/mac80211/patches/rt2x00/982-rt2x00-add-rf-self-txdc-calibration.patch8
-rw-r--r--package/kernel/mac80211/patches/rt2x00/983-rt2x00-add-r-calibration.patch8
-rw-r--r--package/kernel/mac80211/patches/rt2x00/984-rt2x00-add-rxdcoc-calibration.patch8
-rw-r--r--package/kernel/mac80211/patches/rt2x00/985-rt2x00-add-rxiq-calibration.patch8
-rw-r--r--package/kernel/mac80211/patches/rt2x00/986-rt2x00-add-TX-LOFT-calibration.patch10
50 files changed, 54 insertions, 3775 deletions
diff --git a/package/kernel/mac80211/patches/rt2x00/001-rt2x00-use-simple_read_from_buffer.patch b/package/kernel/mac80211/patches/rt2x00/001-rt2x00-use-simple_read_from_buffer.patch
deleted file mode 100644
index 1319cc244c..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/001-rt2x00-use-simple_read_from_buffer.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From f483039cf51acf30494cd754194562c22cf98764 Mon Sep 17 00:00:00 2001
-From: Dan Carpenter <dan.carpenter@oracle.com>
-Date: Wed, 22 Aug 2018 13:41:26 +0300
-Subject: [PATCH 01/28] rt2x00: use simple_read_from_buffer()
-
-The problem with this copy_to_user() calls is that they don't ensure
-that "size" is less than the "length" which the user provided.
-
-Obviously, this is debugfs and "size" is normally going to be very small
-so it probably doesn't matter, but this is the correct thing to do.
-
-Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
-Acked-by: Stanislaw Gruszka <sgruszka@redhat.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- .../net/wireless/ralink/rt2x00/rt2x00debug.c | 18 +++---------------
- 1 file changed, 3 insertions(+), 15 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00debug.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00debug.c
-@@ -464,11 +464,7 @@ static ssize_t rt2x00debug_read_##__name
- \
- size = sprintf(line, __format, value); \
- \
-- if (copy_to_user(buf, line, size)) \
-- return -EFAULT; \
-- \
-- *offset += size; \
-- return size; \
-+ return simple_read_from_buffer(buf, length, offset, line, size); \
- }
-
- #define RT2X00DEBUGFS_OPS_WRITE(__name, __type) \
-@@ -545,11 +541,7 @@ static ssize_t rt2x00debug_read_dev_flag
-
- size = sprintf(line, "0x%.8x\n", (unsigned int)intf->rt2x00dev->flags);
-
-- if (copy_to_user(buf, line, size))
-- return -EFAULT;
--
-- *offset += size;
-- return size;
-+ return simple_read_from_buffer(buf, length, offset, line, size);
- }
-
- static const struct file_operations rt2x00debug_fop_dev_flags = {
-@@ -574,11 +566,7 @@ static ssize_t rt2x00debug_read_cap_flag
-
- size = sprintf(line, "0x%.8x\n", (unsigned int)intf->rt2x00dev->cap_flags);
-
-- if (copy_to_user(buf, line, size))
-- return -EFAULT;
--
-- *offset += size;
-- return size;
-+ return simple_read_from_buffer(buf, length, offset, line, size);
- }
-
- static const struct file_operations rt2x00debug_fop_cap_flags = {
diff --git a/package/kernel/mac80211/patches/rt2x00/002-rt2800-move-usb-specific-txdone-txstatus-routines-to.patch b/package/kernel/mac80211/patches/rt2x00/002-rt2800-move-usb-specific-txdone-txstatus-routines-to.patch
deleted file mode 100644
index a883258a4c..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/002-rt2800-move-usb-specific-txdone-txstatus-routines-to.patch
+++ /dev/null
@@ -1,357 +0,0 @@
-From 5c656c71b1bf5611ce8262bab338104e04d10b8d Mon Sep 17 00:00:00 2001
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-Date: Wed, 26 Sep 2018 12:24:53 +0200
-Subject: [PATCH 02/28] rt2800: move usb specific txdone/txstatus routines to
- rt2800lib
-
-In order to reuse usb txdone/txstatus routines for mmio, move them
-to common rt2800lib.c file.
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- .../net/wireless/ralink/rt2x00/rt2800lib.c | 138 +++++++++++++++++
- .../net/wireless/ralink/rt2x00/rt2800lib.h | 3 +
- .../net/wireless/ralink/rt2x00/rt2800usb.c | 143 +-----------------
- 3 files changed, 145 insertions(+), 139 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -957,6 +957,47 @@ static void rt2800_rate_from_status(stru
- skbdesc->tx_rate_flags = flags;
- }
-
-+static bool rt2800_txdone_entry_check(struct queue_entry *entry, u32 reg)
-+{
-+ __le32 *txwi;
-+ u32 word;
-+ int wcid, ack, pid;
-+ int tx_wcid, tx_ack, tx_pid, is_agg;
-+
-+ /*
-+ * This frames has returned with an IO error,
-+ * so the status report is not intended for this
-+ * frame.
-+ */
-+ if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags))
-+ return false;
-+
-+ wcid = rt2x00_get_field32(reg, TX_STA_FIFO_WCID);
-+ ack = rt2x00_get_field32(reg, TX_STA_FIFO_TX_ACK_REQUIRED);
-+ pid = rt2x00_get_field32(reg, TX_STA_FIFO_PID_TYPE);
-+ is_agg = rt2x00_get_field32(reg, TX_STA_FIFO_TX_AGGRE);
-+
-+ /*
-+ * Validate if this TX status report is intended for
-+ * this entry by comparing the WCID/ACK/PID fields.
-+ */
-+ txwi = rt2800_drv_get_txwi(entry);
-+
-+ word = rt2x00_desc_read(txwi, 1);
-+ tx_wcid = rt2x00_get_field32(word, TXWI_W1_WIRELESS_CLI_ID);
-+ tx_ack = rt2x00_get_field32(word, TXWI_W1_ACK);
-+ tx_pid = rt2x00_get_field32(word, TXWI_W1_PACKETID);
-+
-+ if (wcid != tx_wcid || ack != tx_ack || (!is_agg && pid != tx_pid)) {
-+ rt2x00_dbg(entry->queue->rt2x00dev,
-+ "TX status report missed for queue %d entry %d\n",
-+ entry->queue->qid, entry->entry_idx);
-+ return false;
-+ }
-+
-+ return true;
-+}
-+
- void rt2800_txdone_entry(struct queue_entry *entry, u32 status, __le32 *txwi,
- bool match)
- {
-@@ -1059,6 +1100,103 @@ void rt2800_txdone_entry(struct queue_en
- }
- EXPORT_SYMBOL_GPL(rt2800_txdone_entry);
-
-+void rt2800_txdone(struct rt2x00_dev *rt2x00dev)
-+{
-+ struct data_queue *queue;
-+ struct queue_entry *entry;
-+ u32 reg;
-+ u8 qid;
-+ bool match;
-+
-+ while (kfifo_get(&rt2x00dev->txstatus_fifo, &reg)) {
-+ /*
-+ * TX_STA_FIFO_PID_QUEUE is a 2-bit field, thus qid is
-+ * guaranteed to be one of the TX QIDs .
-+ */
-+ qid = rt2x00_get_field32(reg, TX_STA_FIFO_PID_QUEUE);
-+ queue = rt2x00queue_get_tx_queue(rt2x00dev, qid);
-+
-+ if (unlikely(rt2x00queue_empty(queue))) {
-+ rt2x00_dbg(rt2x00dev, "Got TX status for an empty queue %u, dropping\n",
-+ qid);
-+ break;
-+ }
-+
-+ entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE);
-+
-+ if (unlikely(test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) ||
-+ !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags))) {
-+ rt2x00_warn(rt2x00dev, "Data pending for entry %u in queue %u\n",
-+ entry->entry_idx, qid);
-+ break;
-+ }
-+
-+ match = rt2800_txdone_entry_check(entry, reg);
-+ rt2800_txdone_entry(entry, reg, rt2800_drv_get_txwi(entry), match);
-+ }
-+}
-+EXPORT_SYMBOL_GPL(rt2800_txdone);
-+
-+static inline bool rt2800_entry_txstatus_timeout(struct queue_entry *entry)
-+{
-+ bool tout;
-+
-+ if (!test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags))
-+ return false;
-+
-+ tout = time_after(jiffies, entry->last_action + msecs_to_jiffies(500));
-+ if (unlikely(tout))
-+ rt2x00_dbg(entry->queue->rt2x00dev,
-+ "TX status timeout for entry %d in queue %d\n",
-+ entry->entry_idx, entry->queue->qid);
-+ return tout;
-+
-+}
-+
-+bool rt2800_txstatus_timeout(struct rt2x00_dev *rt2x00dev)
-+{
-+ struct data_queue *queue;
-+ struct queue_entry *entry;
-+
-+ tx_queue_for_each(rt2x00dev, queue) {
-+ entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE);
-+ if (rt2800_entry_txstatus_timeout(entry))
-+ return true;
-+ }
-+ return false;
-+}
-+EXPORT_SYMBOL_GPL(rt2800_txstatus_timeout);
-+
-+void rt2800_txdone_nostatus(struct rt2x00_dev *rt2x00dev)
-+{
-+ struct data_queue *queue;
-+ struct queue_entry *entry;
-+
-+ /*
-+ * Process any trailing TX status reports for IO failures,
-+ * we loop until we find the first non-IO error entry. This
-+ * can either be a frame which is free, is being uploaded,
-+ * or has completed the upload but didn't have an entry
-+ * in the TX_STAT_FIFO register yet.
-+ */
-+ tx_queue_for_each(rt2x00dev, queue) {
-+ while (!rt2x00queue_empty(queue)) {
-+ entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE);
-+
-+ if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) ||
-+ !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags))
-+ break;
-+
-+ if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags) ||
-+ rt2800_entry_txstatus_timeout(entry))
-+ rt2x00lib_txdone_noinfo(entry, TXDONE_FAILURE);
-+ else
-+ break;
-+ }
-+ }
-+}
-+EXPORT_SYMBOL_GPL(rt2800_txdone_nostatus);
-+
- static unsigned int rt2800_hw_beacon_base(struct rt2x00_dev *rt2x00dev,
- unsigned int index)
- {
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
-@@ -195,6 +195,9 @@ void rt2800_process_rxwi(struct queue_en
-
- void rt2800_txdone_entry(struct queue_entry *entry, u32 status, __le32 *txwi,
- bool match);
-+void rt2800_txdone(struct rt2x00_dev *rt2x00dev);
-+void rt2800_txdone_nostatus(struct rt2x00_dev *rt2x00dev);
-+bool rt2800_txstatus_timeout(struct rt2x00_dev *rt2x00dev);
-
- void rt2800_write_beacon(struct queue_entry *entry, struct txentry_desc *txdesc);
- void rt2800_clear_beacon(struct queue_entry *entry);
---- a/drivers/net/wireless/ralink/rt2x00/rt2800usb.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800usb.c
-@@ -116,35 +116,6 @@ static bool rt2800usb_txstatus_pending(s
- return false;
- }
-
--static inline bool rt2800usb_entry_txstatus_timeout(struct queue_entry *entry)
--{
-- bool tout;
--
-- if (!test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags))
-- return false;
--
-- tout = time_after(jiffies, entry->last_action + msecs_to_jiffies(500));
-- if (unlikely(tout))
-- rt2x00_dbg(entry->queue->rt2x00dev,
-- "TX status timeout for entry %d in queue %d\n",
-- entry->entry_idx, entry->queue->qid);
-- return tout;
--
--}
--
--static bool rt2800usb_txstatus_timeout(struct rt2x00_dev *rt2x00dev)
--{
-- struct data_queue *queue;
-- struct queue_entry *entry;
--
-- tx_queue_for_each(rt2x00dev, queue) {
-- entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE);
-- if (rt2800usb_entry_txstatus_timeout(entry))
-- return true;
-- }
-- return false;
--}
--
- #define TXSTATUS_READ_INTERVAL 1000000
-
- static bool rt2800usb_tx_sta_fifo_read_completed(struct rt2x00_dev *rt2x00dev,
-@@ -171,7 +142,7 @@ static bool rt2800usb_tx_sta_fifo_read_c
- }
-
- /* Check if there is any entry that timedout waiting on TX status */
-- if (rt2800usb_txstatus_timeout(rt2x00dev))
-+ if (rt2800_txstatus_timeout(rt2x00dev))
- queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work);
-
- if (rt2800usb_txstatus_pending(rt2x00dev)) {
-@@ -501,123 +472,17 @@ static int rt2800usb_get_tx_data_len(str
- /*
- * TX control handlers
- */
--static bool rt2800usb_txdone_entry_check(struct queue_entry *entry, u32 reg)
--{
-- __le32 *txwi;
-- u32 word;
-- int wcid, ack, pid;
-- int tx_wcid, tx_ack, tx_pid, is_agg;
--
-- /*
-- * This frames has returned with an IO error,
-- * so the status report is not intended for this
-- * frame.
-- */
-- if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags))
-- return false;
--
-- wcid = rt2x00_get_field32(reg, TX_STA_FIFO_WCID);
-- ack = rt2x00_get_field32(reg, TX_STA_FIFO_TX_ACK_REQUIRED);
-- pid = rt2x00_get_field32(reg, TX_STA_FIFO_PID_TYPE);
-- is_agg = rt2x00_get_field32(reg, TX_STA_FIFO_TX_AGGRE);
--
-- /*
-- * Validate if this TX status report is intended for
-- * this entry by comparing the WCID/ACK/PID fields.
-- */
-- txwi = rt2800usb_get_txwi(entry);
--
-- word = rt2x00_desc_read(txwi, 1);
-- tx_wcid = rt2x00_get_field32(word, TXWI_W1_WIRELESS_CLI_ID);
-- tx_ack = rt2x00_get_field32(word, TXWI_W1_ACK);
-- tx_pid = rt2x00_get_field32(word, TXWI_W1_PACKETID);
--
-- if (wcid != tx_wcid || ack != tx_ack || (!is_agg && pid != tx_pid)) {
-- rt2x00_dbg(entry->queue->rt2x00dev,
-- "TX status report missed for queue %d entry %d\n",
-- entry->queue->qid, entry->entry_idx);
-- return false;
-- }
--
-- return true;
--}
--
--static void rt2800usb_txdone(struct rt2x00_dev *rt2x00dev)
--{
-- struct data_queue *queue;
-- struct queue_entry *entry;
-- u32 reg;
-- u8 qid;
-- bool match;
--
-- while (kfifo_get(&rt2x00dev->txstatus_fifo, &reg)) {
-- /*
-- * TX_STA_FIFO_PID_QUEUE is a 2-bit field, thus qid is
-- * guaranteed to be one of the TX QIDs .
-- */
-- qid = rt2x00_get_field32(reg, TX_STA_FIFO_PID_QUEUE);
-- queue = rt2x00queue_get_tx_queue(rt2x00dev, qid);
--
-- if (unlikely(rt2x00queue_empty(queue))) {
-- rt2x00_dbg(rt2x00dev, "Got TX status for an empty queue %u, dropping\n",
-- qid);
-- break;
-- }
--
-- entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE);
--
-- if (unlikely(test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) ||
-- !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags))) {
-- rt2x00_warn(rt2x00dev, "Data pending for entry %u in queue %u\n",
-- entry->entry_idx, qid);
-- break;
-- }
--
-- match = rt2800usb_txdone_entry_check(entry, reg);
-- rt2800_txdone_entry(entry, reg, rt2800usb_get_txwi(entry), match);
-- }
--}
--
--static void rt2800usb_txdone_nostatus(struct rt2x00_dev *rt2x00dev)
--{
-- struct data_queue *queue;
-- struct queue_entry *entry;
--
-- /*
-- * Process any trailing TX status reports for IO failures,
-- * we loop until we find the first non-IO error entry. This
-- * can either be a frame which is free, is being uploaded,
-- * or has completed the upload but didn't have an entry
-- * in the TX_STAT_FIFO register yet.
-- */
-- tx_queue_for_each(rt2x00dev, queue) {
-- while (!rt2x00queue_empty(queue)) {
-- entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE);
--
-- if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) ||
-- !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags))
-- break;
--
-- if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags) ||
-- rt2800usb_entry_txstatus_timeout(entry))
-- rt2x00lib_txdone_noinfo(entry, TXDONE_FAILURE);
-- else
-- break;
-- }
-- }
--}
--
- static void rt2800usb_work_txdone(struct work_struct *work)
- {
- struct rt2x00_dev *rt2x00dev =
- container_of(work, struct rt2x00_dev, txdone_work);
-
- while (!kfifo_is_empty(&rt2x00dev->txstatus_fifo) ||
-- rt2800usb_txstatus_timeout(rt2x00dev)) {
-+ rt2800_txstatus_timeout(rt2x00dev)) {
-
-- rt2800usb_txdone(rt2x00dev);
-+ rt2800_txdone(rt2x00dev);
-
-- rt2800usb_txdone_nostatus(rt2x00dev);
-+ rt2800_txdone_nostatus(rt2x00dev);
-
- /*
- * The hw may delay sending the packet after DMA complete
diff --git a/package/kernel/mac80211/patches/rt2x00/003-rt2800mmio-use-txdone-txstatus-routines-from-lib.patch b/package/kernel/mac80211/patches/rt2x00/003-rt2800mmio-use-txdone-txstatus-routines-from-lib.patch
deleted file mode 100644
index 48f0c27011..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/003-rt2800mmio-use-txdone-txstatus-routines-from-lib.patch
+++ /dev/null
@@ -1,244 +0,0 @@
-From 0b0d556e0ebb6c966bc993e21a22a156812d8fdf Mon Sep 17 00:00:00 2001
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-Date: Wed, 26 Sep 2018 12:24:54 +0200
-Subject: [PATCH 03/28] rt2800mmio: use txdone/txstatus routines from lib
-
-Use usb txdone/txstatus routines (now in rt2800libc) for mmio devices.
-
-Note this also change how we handle INT_SOURCE_CSR_TX_FIFO_STATUS
-interrupt. Now it is disabled since IRQ routine till end of the txstatus
-tasklet (the same behaviour like others interrupts). Reason to do not
-disable this interrupt was not to miss any tx status from 16 entries
-FIFO register. Now, since we check for tx status timeout, we can
-allow to miss some tx statuses. However this will be improved in further
-patch where I also implement read status FIFO register in the tasklet.
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- .../net/wireless/ralink/rt2x00/rt2800mmio.c | 180 +-----------------
- .../net/wireless/ralink/rt2x00/rt2x00queue.c | 1 +
- 2 files changed, 9 insertions(+), 172 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
-@@ -175,161 +175,6 @@ static void rt2800mmio_wakeup(struct rt2
- rt2800_config(rt2x00dev, &libconf, IEEE80211_CONF_CHANGE_PS);
- }
-
--static bool rt2800mmio_txdone_entry_check(struct queue_entry *entry, u32 status)
--{
-- __le32 *txwi;
-- u32 word;
-- int wcid, tx_wcid;
--
-- wcid = rt2x00_get_field32(status, TX_STA_FIFO_WCID);
--
-- txwi = rt2800_drv_get_txwi(entry);
-- word = rt2x00_desc_read(txwi, 1);
-- tx_wcid = rt2x00_get_field32(word, TXWI_W1_WIRELESS_CLI_ID);
--
-- return (tx_wcid == wcid);
--}
--
--static bool rt2800mmio_txdone_find_entry(struct queue_entry *entry, void *data)
--{
-- u32 status = *(u32 *)data;
--
-- /*
-- * rt2800pci hardware might reorder frames when exchanging traffic
-- * with multiple BA enabled STAs.
-- *
-- * For example, a tx queue
-- * [ STA1 | STA2 | STA1 | STA2 ]
-- * can result in tx status reports
-- * [ STA1 | STA1 | STA2 | STA2 ]
-- * when the hw decides to aggregate the frames for STA1 into one AMPDU.
-- *
-- * To mitigate this effect, associate the tx status to the first frame
-- * in the tx queue with a matching wcid.
-- */
-- if (rt2800mmio_txdone_entry_check(entry, status) &&
-- !test_bit(ENTRY_DATA_STATUS_SET, &entry->flags)) {
-- /*
-- * Got a matching frame, associate the tx status with
-- * the frame
-- */
-- entry->status = status;
-- set_bit(ENTRY_DATA_STATUS_SET, &entry->flags);
-- return true;
-- }
--
-- /* Check the next frame */
-- return false;
--}
--
--static bool rt2800mmio_txdone_match_first(struct queue_entry *entry, void *data)
--{
-- u32 status = *(u32 *)data;
--
-- /*
-- * Find the first frame without tx status and assign this status to it
-- * regardless if it matches or not.
-- */
-- if (!test_bit(ENTRY_DATA_STATUS_SET, &entry->flags)) {
-- /*
-- * Got a matching frame, associate the tx status with
-- * the frame
-- */
-- entry->status = status;
-- set_bit(ENTRY_DATA_STATUS_SET, &entry->flags);
-- return true;
-- }
--
-- /* Check the next frame */
-- return false;
--}
--static bool rt2800mmio_txdone_release_entries(struct queue_entry *entry,
-- void *data)
--{
-- if (test_bit(ENTRY_DATA_STATUS_SET, &entry->flags)) {
-- rt2800_txdone_entry(entry, entry->status,
-- rt2800mmio_get_txwi(entry), true);
-- return false;
-- }
--
-- /* No more frames to release */
-- return true;
--}
--
--static bool rt2800mmio_txdone(struct rt2x00_dev *rt2x00dev)
--{
-- struct data_queue *queue;
-- u32 status;
-- u8 qid;
-- int max_tx_done = 16;
--
-- while (kfifo_get(&rt2x00dev->txstatus_fifo, &status)) {
-- qid = rt2x00_get_field32(status, TX_STA_FIFO_PID_QUEUE);
-- if (unlikely(qid >= QID_RX)) {
-- /*
-- * Unknown queue, this shouldn't happen. Just drop
-- * this tx status.
-- */
-- rt2x00_warn(rt2x00dev, "Got TX status report with unexpected pid %u, dropping\n",
-- qid);
-- break;
-- }
--
-- queue = rt2x00queue_get_tx_queue(rt2x00dev, qid);
-- if (unlikely(queue == NULL)) {
-- /*
-- * The queue is NULL, this shouldn't happen. Stop
-- * processing here and drop the tx status
-- */
-- rt2x00_warn(rt2x00dev, "Got TX status for an unavailable queue %u, dropping\n",
-- qid);
-- break;
-- }
--
-- if (unlikely(rt2x00queue_empty(queue))) {
-- /*
-- * The queue is empty. Stop processing here
-- * and drop the tx status.
-- */
-- rt2x00_warn(rt2x00dev, "Got TX status for an empty queue %u, dropping\n",
-- qid);
-- break;
-- }
--
-- /*
-- * Let's associate this tx status with the first
-- * matching frame.
-- */
-- if (!rt2x00queue_for_each_entry(queue, Q_INDEX_DONE,
-- Q_INDEX, &status,
-- rt2800mmio_txdone_find_entry)) {
-- /*
-- * We cannot match the tx status to any frame, so just
-- * use the first one.
-- */
-- if (!rt2x00queue_for_each_entry(queue, Q_INDEX_DONE,
-- Q_INDEX, &status,
-- rt2800mmio_txdone_match_first)) {
-- rt2x00_warn(rt2x00dev, "No frame found for TX status on queue %u, dropping\n",
-- qid);
-- break;
-- }
-- }
--
-- /*
-- * Release all frames with a valid tx status.
-- */
-- rt2x00queue_for_each_entry(queue, Q_INDEX_DONE,
-- Q_INDEX, NULL,
-- rt2800mmio_txdone_release_entries);
--
-- if (--max_tx_done == 0)
-- break;
-- }
--
-- return !max_tx_done;
--}
--
- static inline void rt2800mmio_enable_interrupt(struct rt2x00_dev *rt2x00dev,
- struct rt2x00_field32 irq_field)
- {
-@@ -349,14 +194,14 @@ static inline void rt2800mmio_enable_int
- void rt2800mmio_txstatus_tasklet(unsigned long data)
- {
- struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
-- if (rt2800mmio_txdone(rt2x00dev))
-- tasklet_schedule(&rt2x00dev->txstatus_tasklet);
-
-- /*
-- * No need to enable the tx status interrupt here as we always
-- * leave it enabled to minimize the possibility of a tx status
-- * register overflow. See comment in interrupt handler.
-- */
-+ rt2800_txdone(rt2x00dev);
-+
-+ rt2800_txdone_nostatus(rt2x00dev);
-+
-+ if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
-+ rt2800mmio_enable_interrupt(rt2x00dev,
-+ INT_SOURCE_CSR_TX_FIFO_STATUS);
- }
- EXPORT_SYMBOL_GPL(rt2800mmio_txstatus_tasklet);
-
-@@ -440,10 +285,6 @@ static void rt2800mmio_txstatus_interrup
- * because we can schedule the tasklet multiple times (when the
- * interrupt fires again during tx status processing).
- *
-- * Furthermore we don't disable the TX_FIFO_STATUS
-- * interrupt here but leave it enabled so that the TX_STA_FIFO
-- * can also be read while the tx status tasklet gets executed.
-- *
- * Since we have only one producer and one consumer we don't
- * need to lock the kfifo.
- */
-@@ -485,13 +326,8 @@ irqreturn_t rt2800mmio_interrupt(int irq
- */
- mask = ~reg;
-
-- if (rt2x00_get_field32(reg, INT_SOURCE_CSR_TX_FIFO_STATUS)) {
-+ if (rt2x00_get_field32(reg, INT_SOURCE_CSR_TX_FIFO_STATUS))
- rt2800mmio_txstatus_interrupt(rt2x00dev);
-- /*
-- * Never disable the TX_FIFO_STATUS interrupt.
-- */
-- rt2x00_set_field32(&mask, INT_MASK_CSR_TX_FIFO_STATUS, 1);
-- }
-
- if (rt2x00_get_field32(reg, INT_SOURCE_CSR_PRE_TBTT))
- tasklet_hi_schedule(&rt2x00dev->pretbtt_tasklet);
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
-@@ -113,6 +113,7 @@ int rt2x00queue_map_txskb(struct queue_e
- return -ENOMEM;
-
- skbdesc->flags |= SKBDESC_DMA_MAPPED_TX;
-+ rt2x00lib_dmadone(entry);
- return 0;
- }
- EXPORT_SYMBOL_GPL(rt2x00queue_map_txskb);
diff --git a/package/kernel/mac80211/patches/rt2x00/004-rt2x00-do-not-check-for-txstatus-timeout-every-time-.patch b/package/kernel/mac80211/patches/rt2x00/004-rt2x00-do-not-check-for-txstatus-timeout-every-time-.patch
deleted file mode 100644
index 832768d042..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/004-rt2x00-do-not-check-for-txstatus-timeout-every-time-.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-From 5022efb50f625d11fdf18b1fee0f64ebb1863664 Mon Sep 17 00:00:00 2001
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-Date: Wed, 26 Sep 2018 12:24:55 +0200
-Subject: [PATCH 04/28] rt2x00: do not check for txstatus timeout every time on
- tasklet
-
-Do not check for tx status timeout everytime we perform txstatus tasklet.
-Perform check once per half a second.
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 7 +++++++
- drivers/net/wireless/ralink/rt2x00/rt2800mmio.c | 3 ++-
- drivers/net/wireless/ralink/rt2x00/rt2x00.h | 2 ++
- drivers/net/wireless/ralink/rt2x00/rt2x00queue.c | 1 +
- 4 files changed, 12 insertions(+), 1 deletion(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -1158,11 +1158,18 @@ bool rt2800_txstatus_timeout(struct rt2x
- struct data_queue *queue;
- struct queue_entry *entry;
-
-+ if (time_before(jiffies,
-+ rt2x00dev->last_nostatus_check + msecs_to_jiffies(500)))
-+ return false;
-+
-+ rt2x00dev->last_nostatus_check = jiffies;
-+
- tx_queue_for_each(rt2x00dev, queue) {
- entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE);
- if (rt2800_entry_txstatus_timeout(entry))
- return true;
- }
-+
- return false;
- }
- EXPORT_SYMBOL_GPL(rt2800_txstatus_timeout);
---- a/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
-@@ -197,7 +197,8 @@ void rt2800mmio_txstatus_tasklet(unsigne
-
- rt2800_txdone(rt2x00dev);
-
-- rt2800_txdone_nostatus(rt2x00dev);
-+ if (rt2800_txstatus_timeout(rt2x00dev))
-+ rt2800_txdone_nostatus(rt2x00dev);
-
- if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
- rt2800mmio_enable_interrupt(rt2x00dev,
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-@@ -980,6 +980,8 @@ struct rt2x00_dev {
- */
- DECLARE_KFIFO_PTR(txstatus_fifo, u32);
-
-+ unsigned long last_nostatus_check;
-+
- /*
- * Timer to ensure tx status reports are read (rt2800usb).
- */
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
-@@ -1039,6 +1039,7 @@ void rt2x00queue_start_queues(struct rt2
- */
- tx_queue_for_each(rt2x00dev, queue)
- rt2x00queue_start_queue(queue);
-+ rt2x00dev->last_nostatus_check = jiffies;
-
- rt2x00queue_start_queue(rt2x00dev->rx);
- }
diff --git a/package/kernel/mac80211/patches/rt2x00/005-rt2x00-use-different-txstatus-timeouts-when-flushing.patch b/package/kernel/mac80211/patches/rt2x00/005-rt2x00-use-different-txstatus-timeouts-when-flushing.patch
deleted file mode 100644
index 0f29026373..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/005-rt2x00-use-different-txstatus-timeouts-when-flushing.patch
+++ /dev/null
@@ -1,112 +0,0 @@
-From adf26a356f132e35093585521ea3e36cd185af83 Mon Sep 17 00:00:00 2001
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-Date: Wed, 26 Sep 2018 12:24:56 +0200
-Subject: [PATCH 05/28] rt2x00: use different txstatus timeouts when flushing
-
-Use different tx status timeouts for normal operation and when flushing.
-This increase timeout to 2s for normal operation as when there are bad
-radio conditions and frames are reposted many times device can not provide
-the status for quite long. With new timeout we can still get valid status
-on such bad conditions.
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- .../net/wireless/ralink/rt2x00/rt2800lib.c | 31 +++++++++++++------
- drivers/net/wireless/ralink/rt2x00/rt2x00.h | 1 +
- .../net/wireless/ralink/rt2x00/rt2x00mac.c | 4 +++
- 3 files changed, 26 insertions(+), 10 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -1137,36 +1137,47 @@ void rt2800_txdone(struct rt2x00_dev *rt
- }
- EXPORT_SYMBOL_GPL(rt2800_txdone);
-
--static inline bool rt2800_entry_txstatus_timeout(struct queue_entry *entry)
-+static inline bool rt2800_entry_txstatus_timeout(struct rt2x00_dev *rt2x00dev,
-+ struct queue_entry *entry)
- {
-- bool tout;
-+ bool ret;
-+ unsigned long tout;
-
- if (!test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags))
- return false;
-
-- tout = time_after(jiffies, entry->last_action + msecs_to_jiffies(500));
-- if (unlikely(tout))
-+ if (test_bit(DEVICE_STATE_FLUSHING, &rt2x00dev->flags))
-+ tout = msecs_to_jiffies(100);
-+ else
-+ tout = msecs_to_jiffies(2000);
-+
-+ ret = time_after(jiffies, entry->last_action + tout);
-+ if (unlikely(ret))
- rt2x00_dbg(entry->queue->rt2x00dev,
- "TX status timeout for entry %d in queue %d\n",
- entry->entry_idx, entry->queue->qid);
-- return tout;
--
-+ return ret;
- }
-
- bool rt2800_txstatus_timeout(struct rt2x00_dev *rt2x00dev)
- {
- struct data_queue *queue;
- struct queue_entry *entry;
-+ unsigned long tout;
-+
-+ if (test_bit(DEVICE_STATE_FLUSHING, &rt2x00dev->flags))
-+ tout = msecs_to_jiffies(50);
-+ else
-+ tout = msecs_to_jiffies(1000);
-
-- if (time_before(jiffies,
-- rt2x00dev->last_nostatus_check + msecs_to_jiffies(500)))
-+ if (time_before(jiffies, rt2x00dev->last_nostatus_check + tout))
- return false;
-
- rt2x00dev->last_nostatus_check = jiffies;
-
- tx_queue_for_each(rt2x00dev, queue) {
- entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE);
-- if (rt2800_entry_txstatus_timeout(entry))
-+ if (rt2800_entry_txstatus_timeout(rt2x00dev, entry))
- return true;
- }
-
-@@ -1195,7 +1206,7 @@ void rt2800_txdone_nostatus(struct rt2x0
- break;
-
- if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags) ||
-- rt2800_entry_txstatus_timeout(entry))
-+ rt2800_entry_txstatus_timeout(rt2x00dev, entry))
- rt2x00lib_txdone_noinfo(entry, TXDONE_FAILURE);
- else
- break;
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-@@ -665,6 +665,7 @@ enum rt2x00_state_flags {
- DEVICE_STATE_STARTED,
- DEVICE_STATE_ENABLED_RADIO,
- DEVICE_STATE_SCANNING,
-+ DEVICE_STATE_FLUSHING,
-
- /*
- * Driver configuration
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c
-@@ -720,8 +720,12 @@ void rt2x00mac_flush(struct ieee80211_hw
- if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
- return;
-
-+ set_bit(DEVICE_STATE_FLUSHING, &rt2x00dev->flags);
-+
- tx_queue_for_each(rt2x00dev, queue)
- rt2x00queue_flush_queue(queue, drop);
-+
-+ clear_bit(DEVICE_STATE_FLUSHING, &rt2x00dev->flags);
- }
- EXPORT_SYMBOL_GPL(rt2x00mac_flush);
-
diff --git a/package/kernel/mac80211/patches/rt2x00/006-rt2800-flush-and-txstatus-rework-for-rt2800mmio.patch b/package/kernel/mac80211/patches/rt2x00/006-rt2800-flush-and-txstatus-rework-for-rt2800mmio.patch
deleted file mode 100644
index 784fbb16f1..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/006-rt2800-flush-and-txstatus-rework-for-rt2800mmio.patch
+++ /dev/null
@@ -1,238 +0,0 @@
-From 0240564430c0697d8fde3743d70346a922466b36 Mon Sep 17 00:00:00 2001
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-Date: Wed, 26 Sep 2018 12:24:57 +0200
-Subject: [PATCH 06/28] rt2800: flush and txstatus rework for rt2800mmio
-
-Implement custom rt2800mmio flush routine and change txstatus
-routine to read TX_STA_FIFO also in the tasklet.
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- .../net/wireless/ralink/rt2x00/rt2800lib.c | 14 +--
- .../net/wireless/ralink/rt2x00/rt2800mmio.c | 118 +++++++++++++-----
- .../net/wireless/ralink/rt2x00/rt2800mmio.h | 1 +
- .../net/wireless/ralink/rt2x00/rt2800pci.c | 2 +-
- 4 files changed, 97 insertions(+), 38 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -1147,7 +1147,7 @@ static inline bool rt2800_entry_txstatus
- return false;
-
- if (test_bit(DEVICE_STATE_FLUSHING, &rt2x00dev->flags))
-- tout = msecs_to_jiffies(100);
-+ tout = msecs_to_jiffies(50);
- else
- tout = msecs_to_jiffies(2000);
-
-@@ -1163,15 +1163,13 @@ bool rt2800_txstatus_timeout(struct rt2x
- {
- struct data_queue *queue;
- struct queue_entry *entry;
-- unsigned long tout;
-
-- if (test_bit(DEVICE_STATE_FLUSHING, &rt2x00dev->flags))
-- tout = msecs_to_jiffies(50);
-- else
-- tout = msecs_to_jiffies(1000);
-+ if (!test_bit(DEVICE_STATE_FLUSHING, &rt2x00dev->flags)) {
-+ unsigned long tout = msecs_to_jiffies(1000);
-
-- if (time_before(jiffies, rt2x00dev->last_nostatus_check + tout))
-- return false;
-+ if (time_before(jiffies, rt2x00dev->last_nostatus_check + tout))
-+ return false;
-+ }
-
- rt2x00dev->last_nostatus_check = jiffies;
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
-@@ -191,21 +191,6 @@ static inline void rt2800mmio_enable_int
- spin_unlock_irq(&rt2x00dev->irqmask_lock);
- }
-
--void rt2800mmio_txstatus_tasklet(unsigned long data)
--{
-- struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
--
-- rt2800_txdone(rt2x00dev);
--
-- if (rt2800_txstatus_timeout(rt2x00dev))
-- rt2800_txdone_nostatus(rt2x00dev);
--
-- if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
-- rt2800mmio_enable_interrupt(rt2x00dev,
-- INT_SOURCE_CSR_TX_FIFO_STATUS);
--}
--EXPORT_SYMBOL_GPL(rt2800mmio_txstatus_tasklet);
--
- void rt2800mmio_pretbtt_tasklet(unsigned long data)
- {
- struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
-@@ -270,12 +255,26 @@ void rt2800mmio_autowake_tasklet(unsigne
- }
- EXPORT_SYMBOL_GPL(rt2800mmio_autowake_tasklet);
-
--static void rt2800mmio_txstatus_interrupt(struct rt2x00_dev *rt2x00dev)
-+static void rt2800mmio_txdone(struct rt2x00_dev *rt2x00dev)
-+{
-+ bool timeout = false;
-+
-+ while (!kfifo_is_empty(&rt2x00dev->txstatus_fifo) ||
-+ (timeout = rt2800_txstatus_timeout(rt2x00dev))) {
-+
-+ rt2800_txdone(rt2x00dev);
-+
-+ if (timeout)
-+ rt2800_txdone_nostatus(rt2x00dev);
-+ }
-+}
-+
-+static bool rt2800mmio_fetch_txstatus(struct rt2x00_dev *rt2x00dev)
- {
- u32 status;
-- int i;
-+ bool more = false;
-
-- /*
-+ /* FIXEME: rewrite this comment
- * The TX_FIFO_STATUS interrupt needs special care. We should
- * read TX_STA_FIFO but we should do it immediately as otherwise
- * the register can overflow and we would lose status reports.
-@@ -286,25 +285,37 @@ static void rt2800mmio_txstatus_interrup
- * because we can schedule the tasklet multiple times (when the
- * interrupt fires again during tx status processing).
- *
-- * Since we have only one producer and one consumer we don't
-+ * txstatus tasklet is called with INT_SOURCE_CSR_TX_FIFO_STATUS
-+ * disabled so have only one producer and one consumer - we don't
- * need to lock the kfifo.
- */
-- for (i = 0; i < rt2x00dev->tx->limit; i++) {
-+ while (!kfifo_is_full(&rt2x00dev->txstatus_fifo)) {
- status = rt2x00mmio_register_read(rt2x00dev, TX_STA_FIFO);
--
- if (!rt2x00_get_field32(status, TX_STA_FIFO_VALID))
- break;
-
-- if (!kfifo_put(&rt2x00dev->txstatus_fifo, status)) {
-- rt2x00_warn(rt2x00dev, "TX status FIFO overrun, drop tx status report\n");
-- break;
-- }
-+ kfifo_put(&rt2x00dev->txstatus_fifo, status);
-+ more = true;
- }
-
-- /* Schedule the tasklet for processing the tx status. */
-- tasklet_schedule(&rt2x00dev->txstatus_tasklet);
-+ return more;
- }
-
-+void rt2800mmio_txstatus_tasklet(unsigned long data)
-+{
-+ struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
-+
-+ do {
-+ rt2800mmio_txdone(rt2x00dev);
-+
-+ } while (rt2800mmio_fetch_txstatus(rt2x00dev));
-+
-+ if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
-+ rt2800mmio_enable_interrupt(rt2x00dev,
-+ INT_SOURCE_CSR_TX_FIFO_STATUS);
-+}
-+EXPORT_SYMBOL_GPL(rt2800mmio_txstatus_tasklet);
-+
- irqreturn_t rt2800mmio_interrupt(int irq, void *dev_instance)
- {
- struct rt2x00_dev *rt2x00dev = dev_instance;
-@@ -327,8 +338,10 @@ irqreturn_t rt2800mmio_interrupt(int irq
- */
- mask = ~reg;
-
-- if (rt2x00_get_field32(reg, INT_SOURCE_CSR_TX_FIFO_STATUS))
-- rt2800mmio_txstatus_interrupt(rt2x00dev);
-+ if (rt2x00_get_field32(reg, INT_SOURCE_CSR_TX_FIFO_STATUS)) {
-+ rt2800mmio_fetch_txstatus(rt2x00dev);
-+ tasklet_schedule(&rt2x00dev->txstatus_tasklet);
-+ }
-
- if (rt2x00_get_field32(reg, INT_SOURCE_CSR_PRE_TBTT))
- tasklet_hi_schedule(&rt2x00dev->pretbtt_tasklet);
-@@ -453,6 +466,53 @@ void rt2800mmio_kick_queue(struct data_q
- }
- EXPORT_SYMBOL_GPL(rt2800mmio_kick_queue);
-
-+void rt2800mmio_flush_queue(struct data_queue *queue, bool drop)
-+{
-+ struct rt2x00_dev *rt2x00dev = queue->rt2x00dev;
-+ bool tx_queue = false;
-+ unsigned int i;
-+
-+ switch (queue->qid) {
-+ case QID_AC_VO:
-+ case QID_AC_VI:
-+ case QID_AC_BE:
-+ case QID_AC_BK:
-+ tx_queue = true;
-+ break;
-+ case QID_RX:
-+ break;
-+ default:
-+ return;
-+ }
-+
-+ for (i = 0; i < 5; i++) {
-+ /*
-+ * Check if the driver is already done, otherwise we
-+ * have to sleep a little while to give the driver/hw
-+ * the oppurtunity to complete interrupt process itself.
-+ */
-+ if (rt2x00queue_empty(queue))
-+ break;
-+
-+ /*
-+ * For TX queues schedule completion tasklet to catch
-+ * tx status timeouts, othewise just wait.
-+ */
-+ if (tx_queue) {
-+ tasklet_disable(&rt2x00dev->txstatus_tasklet);
-+ rt2800mmio_txdone(rt2x00dev);
-+ tasklet_enable(&rt2x00dev->txstatus_tasklet);
-+ }
-+
-+ /*
-+ * Wait for a little while to give the driver
-+ * the oppurtunity to recover itself.
-+ */
-+ msleep(50);
-+ }
-+}
-+EXPORT_SYMBOL_GPL(rt2800mmio_flush_queue);
-+
- void rt2800mmio_stop_queue(struct data_queue *queue)
- {
- struct rt2x00_dev *rt2x00dev = queue->rt2x00dev;
---- a/drivers/net/wireless/ralink/rt2x00/rt2800mmio.h
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800mmio.h
-@@ -148,6 +148,7 @@ void rt2800mmio_toggle_irq(struct rt2x00
- /* Queue handlers */
- void rt2800mmio_start_queue(struct data_queue *queue);
- void rt2800mmio_kick_queue(struct data_queue *queue);
-+void rt2800mmio_flush_queue(struct data_queue *queue, bool drop);
- void rt2800mmio_stop_queue(struct data_queue *queue);
- void rt2800mmio_queue_init(struct data_queue *queue);
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800pci.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800pci.c
-@@ -364,7 +364,7 @@ static const struct rt2x00lib_ops rt2800
- .start_queue = rt2800mmio_start_queue,
- .kick_queue = rt2800mmio_kick_queue,
- .stop_queue = rt2800mmio_stop_queue,
-- .flush_queue = rt2x00mmio_flush_queue,
-+ .flush_queue = rt2800mmio_flush_queue,
- .write_tx_desc = rt2800mmio_write_tx_desc,
- .write_tx_data = rt2800_write_tx_data,
- .write_beacon = rt2800_write_beacon,
diff --git a/package/kernel/mac80211/patches/rt2x00/007-rt2x00-rt2400pci-mark-expected-switch-fall-through.patch b/package/kernel/mac80211/patches/rt2x00/007-rt2x00-rt2400pci-mark-expected-switch-fall-through.patch
deleted file mode 100644
index 2161ad9ef3..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/007-rt2x00-rt2400pci-mark-expected-switch-fall-through.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 6eba8fd2235237784dfd01da55c3210d493aebdb Mon Sep 17 00:00:00 2001
-From: "Gustavo A. R. Silva" <gustavo@embeddedor.com>
-Date: Mon, 22 Oct 2018 22:44:34 +0200
-Subject: [PATCH 07/28] rt2x00: rt2400pci: mark expected switch fall-through
-
-In preparation to enabling -Wimplicit-fallthrough, mark switch cases
-where we are expecting to fall through.
-
-Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- drivers/net/wireless/ralink/rt2x00/rt2400pci.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2400pci.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2400pci.c
-@@ -1302,7 +1302,7 @@ static void rt2400pci_txdone(struct rt2x
- break;
- case 2: /* Failure, excessive retries */
- __set_bit(TXDONE_EXCESSIVE_RETRY, &txdesc.flags);
-- /* Don't break, this is a failed frame! */
-+ /* Fall through - this is a failed frame! */
- default: /* Failure */
- __set_bit(TXDONE_FAILURE, &txdesc.flags);
- }
diff --git a/package/kernel/mac80211/patches/rt2x00/008-rt2x00-rt2500pci-mark-expected-switch-fall-through.patch b/package/kernel/mac80211/patches/rt2x00/008-rt2x00-rt2500pci-mark-expected-switch-fall-through.patch
deleted file mode 100644
index d10de6b0e5..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/008-rt2x00-rt2500pci-mark-expected-switch-fall-through.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 10bb92217747c3384a01ebec005faa2f5e72bbd8 Mon Sep 17 00:00:00 2001
-From: "Gustavo A. R. Silva" <gustavo@embeddedor.com>
-Date: Mon, 22 Oct 2018 22:45:19 +0200
-Subject: [PATCH 08/28] rt2x00: rt2500pci: mark expected switch fall-through
-
-In preparation to enabling -Wimplicit-fallthrough, mark switch cases
-where we are expecting to fall through.
-
-Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- drivers/net/wireless/ralink/rt2x00/rt2500pci.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2500pci.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2500pci.c
-@@ -1430,7 +1430,7 @@ static void rt2500pci_txdone(struct rt2x
- break;
- case 2: /* Failure, excessive retries */
- __set_bit(TXDONE_EXCESSIVE_RETRY, &txdesc.flags);
-- /* Don't break, this is a failed frame! */
-+ /* Fall through - this is a failed frame! */
- default: /* Failure */
- __set_bit(TXDONE_FAILURE, &txdesc.flags);
- }
diff --git a/package/kernel/mac80211/patches/rt2x00/009-rt2x00-rt2800lib-mark-expected-switch-fall-throughs.patch b/package/kernel/mac80211/patches/rt2x00/009-rt2x00-rt2800lib-mark-expected-switch-fall-throughs.patch
deleted file mode 100644
index 99f971b95f..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/009-rt2x00-rt2800lib-mark-expected-switch-fall-throughs.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 916e6bbcfcff6cc5d7d33bba8557a30f3af50326 Mon Sep 17 00:00:00 2001
-From: "Gustavo A. R. Silva" <gustavo@embeddedor.com>
-Date: Mon, 22 Oct 2018 22:46:03 +0200
-Subject: [PATCH 09/28] rt2x00: rt2800lib: mark expected switch fall-throughs
-
-In preparation to enabling -Wimplicit-fallthrough, mark switch cases
-where we are expecting to fall through.
-
-Addresses-Coverity-ID: 145198 ("Missing break in switch")
-Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -2482,6 +2482,7 @@ static void rt2800_config_channel_rf3052
- switch (rt2x00dev->default_ant.tx_chain_num) {
- case 1:
- rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 1);
-+ /* fall through */
- case 2:
- rt2x00_set_field8(&rfcsr, RFCSR1_TX2_PD, 1);
- break;
-@@ -2490,6 +2491,7 @@ static void rt2800_config_channel_rf3052
- switch (rt2x00dev->default_ant.rx_chain_num) {
- case 1:
- rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 1);
-+ /* fall through */
- case 2:
- rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD, 1);
- break;
-@@ -9457,8 +9459,10 @@ static int rt2800_probe_hw_mode(struct r
- switch (rx_chains) {
- case 3:
- spec->ht.mcs.rx_mask[2] = 0xff;
-+ /* fall through */
- case 2:
- spec->ht.mcs.rx_mask[1] = 0xff;
-+ /* fall through */
- case 1:
- spec->ht.mcs.rx_mask[0] = 0xff;
- spec->ht.mcs.rx_mask[4] = 0x1; /* MCS32 */
diff --git a/package/kernel/mac80211/patches/rt2x00/010-rt2x00-rt61pci-mark-expected-switch-fall-through.patch b/package/kernel/mac80211/patches/rt2x00/010-rt2x00-rt61pci-mark-expected-switch-fall-through.patch
deleted file mode 100644
index 5b0f96d293..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/010-rt2x00-rt61pci-mark-expected-switch-fall-through.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 641dd8068ecb078e7d12efe465df202bc16ca5eb Mon Sep 17 00:00:00 2001
-From: "Gustavo A. R. Silva" <gustavo@embeddedor.com>
-Date: Mon, 22 Oct 2018 22:46:47 +0200
-Subject: [PATCH 10/28] rt2x00: rt61pci: mark expected switch fall-through
-
-In preparation to enabling -Wimplicit-fallthrough, mark switch cases
-where we are expecting to fall through.
-
-Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- drivers/net/wireless/ralink/rt2x00/rt61pci.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt61pci.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt61pci.c
-@@ -2226,7 +2226,7 @@ static void rt61pci_txdone(struct rt2x00
- break;
- case 6: /* Failure, excessive retries */
- __set_bit(TXDONE_EXCESSIVE_RETRY, &txdesc.flags);
-- /* Don't break, this is a failed frame! */
-+ /* Fall through - this is a failed frame! */
- default: /* Failure */
- __set_bit(TXDONE_FAILURE, &txdesc.flags);
- }
diff --git a/package/kernel/mac80211/patches/rt2x00/011-cross-tree-phase-out-dma_zalloc_coherent.patch b/package/kernel/mac80211/patches/rt2x00/011-cross-tree-phase-out-dma_zalloc_coherent.patch
deleted file mode 100644
index 8100eb063b..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/011-cross-tree-phase-out-dma_zalloc_coherent.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 750afb08ca71310fcf0c4e2cb1565c63b8235b60 Mon Sep 17 00:00:00 2001
-From: Luis Chamberlain <mcgrof@kernel.org>
-Date: Fri, 4 Jan 2019 09:23:09 +0100
-Subject: [PATCH 11/28] cross-tree: phase out dma_zalloc_coherent()
-
-We already need to zero out memory for dma_alloc_coherent(), as such
-using dma_zalloc_coherent() is superflous. Phase it out.
-
-This change was generated with the following Coccinelle SmPL patch:
-
-@ replace_dma_zalloc_coherent @
-expression dev, size, data, handle, flags;
-@@
-
--dma_zalloc_coherent(dev, size, handle, flags)
-+dma_alloc_coherent(dev, size, handle, flags)
-
-Suggested-by: Christoph Hellwig <hch@lst.de>
-Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
-[hch: re-ran the script on the latest tree]
-Signed-off-by: Christoph Hellwig <hch@lst.de>
----
- drivers/net/wireless/ralink/rt2x00/rt2x00mmio.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00mmio.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00mmio.c
-@@ -119,9 +119,9 @@ static int rt2x00mmio_alloc_queue_dma(st
- /*
- * Allocate DMA memory for descriptor and buffer.
- */
-- addr = dma_zalloc_coherent(rt2x00dev->dev,
-- queue->limit * queue->desc_size, &dma,
-- GFP_KERNEL);
-+ addr = dma_alloc_coherent(rt2x00dev->dev,
-+ queue->limit * queue->desc_size, &dma,
-+ GFP_KERNEL);
- if (!addr)
- return -ENOMEM;
-
diff --git a/package/kernel/mac80211/patches/rt2x00/012-rt2x00-reduce-tx-power-to-nominal-level-on-RT6352.patch b/package/kernel/mac80211/patches/rt2x00/012-rt2x00-reduce-tx-power-to-nominal-level-on-RT6352.patch
deleted file mode 100644
index a07832e97c..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/012-rt2x00-reduce-tx-power-to-nominal-level-on-RT6352.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From c2e28ef7711ffcb083474ee5f154264c6ec1ec07 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Tomislav=20Po=C5=BEega?= <pozega.tomislav@gmail.com>
-Date: Thu, 27 Dec 2018 15:05:25 +0100
-Subject: [PATCH 12/28] rt2x00: reduce tx power to nominal level on RT6352
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Current implementation of RT6352 support provides too high tx power
-at least on iPA/eLNA devices. Reduce amplification of variable gain
-amplifier by 6dB to match board target power of 17dBm.
-Transmited signal strength with this patch is similar to that of
-stock firmware or pandorabox firmware. Throughput measured with iperf
-improves. Device tested: Xiaomi Miwifi Mini.
-
-Signed-off-by: Tomislav Požega <pozega.tomislav@gmail.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -5477,7 +5477,7 @@ static int rt2800_init_registers(struct
- rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000);
- rt2800_register_write(rt2x00dev, MIMO_PS_CFG, 0x00000002);
- rt2800_register_write(rt2x00dev, TX_PIN_CFG, 0x00150F0F);
-- rt2800_register_write(rt2x00dev, TX_ALC_VGA3, 0x06060606);
-+ rt2800_register_write(rt2x00dev, TX_ALC_VGA3, 0x00000000);
- rt2800_register_write(rt2x00dev, TX0_BB_GAIN_ATTEN, 0x0);
- rt2800_register_write(rt2x00dev, TX1_BB_GAIN_ATTEN, 0x0);
- rt2800_register_write(rt2x00dev, TX0_RF_GAIN_ATTEN, 0x6C6C666C);
diff --git a/package/kernel/mac80211/patches/rt2x00/013-rt2x00-Work-around-a-firmware-bug-with-shared-keys.patch b/package/kernel/mac80211/patches/rt2x00/013-rt2x00-Work-around-a-firmware-bug-with-shared-keys.patch
deleted file mode 100644
index dc884c17d2..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/013-rt2x00-Work-around-a-firmware-bug-with-shared-keys.patch
+++ /dev/null
@@ -1,143 +0,0 @@
-From a4296994eb8061ee3455721a296c387c639bf635 Mon Sep 17 00:00:00 2001
-From: Bernd Edlinger <bernd.edlinger@hotmail.de>
-Date: Tue, 15 Jan 2019 14:01:29 +0000
-Subject: [PATCH 13/28] rt2x00: Work around a firmware bug with shared keys
-
-Apparently the rt2x61 firmware fails temporarily to decode
-broadcast packets if the shared keys are not assigned
-in the "correct" sequence. At the same time unicast
-packets work fine, since they are encrypted with the
-pairwise key.
-
-At least with WPA2 CCMP mode the shared keys are
-set in the following sequence: keyidx=1, 2, 1, 2.
-After a while only keyidx 2 gets decrypted, and
-keyidx 1 is ignored, probably because there is never
-a keyidx 3.
-
-Symptoms are arping -b works for 10 minutes, since
-keyidx=2 is used for broadcast, and then it stops
-working for 10 minutes, because keyidx=1 is used.
-That failure mode repeats forever.
-
-Note, the firmware does not even know which keyidx
-corresponds to which hw_key_idx so the firmware is
-trying to be smarter than the driver, which is bound
-to fail.
-
-As workaround the function rt61pci_config_shared_key
-requests software decryption of the shared keys,
-by returning EOPNOTSUPP. However, pairwise keys are
-still handled by hardware which works just fine.
-
-Signed-off-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
-Acked-by: Stanislaw Gruszka <sgruszka@redhat.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- drivers/net/wireless/ralink/rt2x00/rt61pci.c | 93 +-------------------
- 1 file changed, 4 insertions(+), 89 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt61pci.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt61pci.c
-@@ -321,97 +321,12 @@ static int rt61pci_config_shared_key(str
- struct rt2x00lib_crypto *crypto,
- struct ieee80211_key_conf *key)
- {
-- struct hw_key_entry key_entry;
-- struct rt2x00_field32 field;
-- u32 mask;
-- u32 reg;
--
-- if (crypto->cmd == SET_KEY) {
-- /*
-- * rt2x00lib can't determine the correct free
-- * key_idx for shared keys. We have 1 register
-- * with key valid bits. The goal is simple, read
-- * the register, if that is full we have no slots
-- * left.
-- * Note that each BSS is allowed to have up to 4
-- * shared keys, so put a mask over the allowed
-- * entries.
-- */
-- mask = (0xf << crypto->bssidx);
--
-- reg = rt2x00mmio_register_read(rt2x00dev, SEC_CSR0);
-- reg &= mask;
--
-- if (reg && reg == mask)
-- return -ENOSPC;
--
-- key->hw_key_idx += reg ? ffz(reg) : 0;
--
-- /*
-- * Upload key to hardware
-- */
-- memcpy(key_entry.key, crypto->key,
-- sizeof(key_entry.key));
-- memcpy(key_entry.tx_mic, crypto->tx_mic,
-- sizeof(key_entry.tx_mic));
-- memcpy(key_entry.rx_mic, crypto->rx_mic,
-- sizeof(key_entry.rx_mic));
--
-- reg = SHARED_KEY_ENTRY(key->hw_key_idx);
-- rt2x00mmio_register_multiwrite(rt2x00dev, reg,
-- &key_entry, sizeof(key_entry));
--
-- /*
-- * The cipher types are stored over 2 registers.
-- * bssidx 0 and 1 keys are stored in SEC_CSR1 and
-- * bssidx 1 and 2 keys are stored in SEC_CSR5.
-- * Using the correct defines correctly will cause overhead,
-- * so just calculate the correct offset.
-- */
-- if (key->hw_key_idx < 8) {
-- field.bit_offset = (3 * key->hw_key_idx);
-- field.bit_mask = 0x7 << field.bit_offset;
--
-- reg = rt2x00mmio_register_read(rt2x00dev, SEC_CSR1);
-- rt2x00_set_field32(&reg, field, crypto->cipher);
-- rt2x00mmio_register_write(rt2x00dev, SEC_CSR1, reg);
-- } else {
-- field.bit_offset = (3 * (key->hw_key_idx - 8));
-- field.bit_mask = 0x7 << field.bit_offset;
--
-- reg = rt2x00mmio_register_read(rt2x00dev, SEC_CSR5);
-- rt2x00_set_field32(&reg, field, crypto->cipher);
-- rt2x00mmio_register_write(rt2x00dev, SEC_CSR5, reg);
-- }
--
-- /*
-- * The driver does not support the IV/EIV generation
-- * in hardware. However it doesn't support the IV/EIV
-- * inside the ieee80211 frame either, but requires it
-- * to be provided separately for the descriptor.
-- * rt2x00lib will cut the IV/EIV data out of all frames
-- * given to us by mac80211, but we must tell mac80211
-- * to generate the IV/EIV data.
-- */
-- key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
-- }
--
- /*
-- * SEC_CSR0 contains only single-bit fields to indicate
-- * a particular key is valid. Because using the FIELD32()
-- * defines directly will cause a lot of overhead, we use
-- * a calculation to determine the correct bit directly.
-+ * Let the software handle the shared keys,
-+ * since the hardware decryption does not work reliably,
-+ * because the firmware does not know the key's keyidx.
- */
-- mask = 1 << key->hw_key_idx;
--
-- reg = rt2x00mmio_register_read(rt2x00dev, SEC_CSR0);
-- if (crypto->cmd == SET_KEY)
-- reg |= mask;
-- else if (crypto->cmd == DISABLE_KEY)
-- reg &= ~mask;
-- rt2x00mmio_register_write(rt2x00dev, SEC_CSR0, reg);
--
-- return 0;
-+ return -EOPNOTSUPP;
- }
-
- static int rt61pci_config_pairwise_key(struct rt2x00_dev *rt2x00dev,
diff --git a/package/kernel/mac80211/patches/rt2x00/014-rt2x00-no-need-to-check-return-value-of-debugfs_crea.patch b/package/kernel/mac80211/patches/rt2x00/014-rt2x00-no-need-to-check-return-value-of-debugfs_crea.patch
deleted file mode 100644
index 26f2df10e0..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/014-rt2x00-no-need-to-check-return-value-of-debugfs_crea.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-From 2587791d57588562c21e5ef7e678f02ab2f3eb82 Mon Sep 17 00:00:00 2001
-From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Date: Tue, 22 Jan 2019 16:21:34 +0100
-Subject: [PATCH 14/28] rt2x00: no need to check return value of debugfs_create
- functions
-
-When calling debugfs functions, there is no need to ever check the
-return value. The function can work or not, but the code logic should
-never do something different based on this.
-
-Cc: Stanislaw Gruszka <sgruszka@redhat.com>
-Cc: Helmut Schaa <helmut.schaa@googlemail.com>
-Cc: Kalle Valo <kvalo@codeaurora.org>
-Cc: linux-wireless@vger.kernel.org
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Acked-by: Stanislaw Gruszka <sgruszka@redhat.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- .../net/wireless/ralink/rt2x00/rt2x00debug.c | 27 -------------------
- 1 file changed, 27 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00debug.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00debug.c
-@@ -656,36 +656,24 @@ void rt2x00debug_register(struct rt2x00_
- intf->driver_folder =
- debugfs_create_dir(intf->rt2x00dev->ops->name,
- rt2x00dev->hw->wiphy->debugfsdir);
-- if (IS_ERR(intf->driver_folder) || !intf->driver_folder)
-- goto exit;
-
- intf->driver_entry =
- rt2x00debug_create_file_driver("driver", intf, &intf->driver_blob);
-- if (IS_ERR(intf->driver_entry) || !intf->driver_entry)
-- goto exit;
-
- intf->chipset_entry =
- rt2x00debug_create_file_chipset("chipset",
- intf, &intf->chipset_blob);
-- if (IS_ERR(intf->chipset_entry) || !intf->chipset_entry)
-- goto exit;
-
- intf->dev_flags = debugfs_create_file("dev_flags", 0400,
- intf->driver_folder, intf,
- &rt2x00debug_fop_dev_flags);
-- if (IS_ERR(intf->dev_flags) || !intf->dev_flags)
-- goto exit;
-
- intf->cap_flags = debugfs_create_file("cap_flags", 0400,
- intf->driver_folder, intf,
- &rt2x00debug_fop_cap_flags);
-- if (IS_ERR(intf->cap_flags) || !intf->cap_flags)
-- goto exit;
-
- intf->register_folder =
- debugfs_create_dir("register", intf->driver_folder);
-- if (IS_ERR(intf->register_folder) || !intf->register_folder)
-- goto exit;
-
- #define RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(__intf, __name) \
- ({ \
-@@ -695,9 +683,6 @@ void rt2x00debug_register(struct rt2x00_
- 0600, \
- (__intf)->register_folder, \
- &(__intf)->offset_##__name); \
-- if (IS_ERR((__intf)->__name##_off_entry) || \
-- !(__intf)->__name##_off_entry) \
-- goto exit; \
- \
- (__intf)->__name##_val_entry = \
- debugfs_create_file(__stringify(__name) "_value", \
-@@ -705,9 +690,6 @@ void rt2x00debug_register(struct rt2x00_
- (__intf)->register_folder, \
- (__intf), \
- &rt2x00debug_fop_##__name); \
-- if (IS_ERR((__intf)->__name##_val_entry) || \
-- !(__intf)->__name##_val_entry) \
-- goto exit; \
- } \
- })
-
-@@ -721,15 +703,10 @@ void rt2x00debug_register(struct rt2x00_
-
- intf->queue_folder =
- debugfs_create_dir("queue", intf->driver_folder);
-- if (IS_ERR(intf->queue_folder) || !intf->queue_folder)
-- goto exit;
-
- intf->queue_frame_dump_entry =
- debugfs_create_file("dump", 0400, intf->queue_folder,
- intf, &rt2x00debug_fop_queue_dump);
-- if (IS_ERR(intf->queue_frame_dump_entry)
-- || !intf->queue_frame_dump_entry)
-- goto exit;
-
- skb_queue_head_init(&intf->frame_dump_skbqueue);
- init_waitqueue_head(&intf->frame_dump_waitqueue);
-@@ -747,10 +724,6 @@ void rt2x00debug_register(struct rt2x00_
- #endif
-
- return;
--
--exit:
-- rt2x00debug_deregister(rt2x00dev);
-- rt2x00_err(rt2x00dev, "Failed to register debug handler\n");
- }
-
- void rt2x00debug_deregister(struct rt2x00_dev *rt2x00dev)
diff --git a/package/kernel/mac80211/patches/rt2x00/015-rt2x00-remove-unneeded-check.patch b/package/kernel/mac80211/patches/rt2x00/015-rt2x00-remove-unneeded-check.patch
deleted file mode 100644
index 50e7de0855..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/015-rt2x00-remove-unneeded-check.patch
+++ /dev/null
@@ -1,137 +0,0 @@
-From 17ae2acd1a6f5148edd80d84194e5d7c80be360e Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Tomislav=20Po=C5=BEega?= <pozega.tomislav@gmail.com>
-Date: Wed, 13 Feb 2019 11:09:12 +0100
-Subject: [PATCH 15/28] rt2x00: remove unneeded check
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Remove band check from rf53xx channel config routine since all chips
-using it are single band.
-
-Signed-off-by: Tomislav Požega <pozega.tomislav@gmail.com>
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- .../net/wireless/ralink/rt2x00/rt2800lib.c | 103 +++++++++---------
- 1 file changed, 50 insertions(+), 53 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -2966,6 +2966,7 @@ static void rt2800_config_channel_rf53xx
- struct channel_info *info)
- {
- u8 rfcsr;
-+ int idx = rf->channel-1;
-
- rt2800_rfcsr_write(rt2x00dev, 8, rf->rf1);
- rt2800_rfcsr_write(rt2x00dev, 9, rf->rf3);
-@@ -3003,60 +3004,56 @@ static void rt2800_config_channel_rf53xx
-
- rt2800_freq_cal_mode1(rt2x00dev);
-
-- if (rf->channel <= 14) {
-- int idx = rf->channel-1;
-+ if (rt2x00_has_cap_bt_coexist(rt2x00dev)) {
-+ if (rt2x00_rt_rev_gte(rt2x00dev, RT5390, REV_RT5390F)) {
-+ /* r55/r59 value array of channel 1~14 */
-+ static const char r55_bt_rev[] = {0x83, 0x83,
-+ 0x83, 0x73, 0x73, 0x63, 0x53, 0x53,
-+ 0x53, 0x43, 0x43, 0x43, 0x43, 0x43};
-+ static const char r59_bt_rev[] = {0x0e, 0x0e,
-+ 0x0e, 0x0e, 0x0e, 0x0b, 0x0a, 0x09,
-+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x07};
-+
-+ rt2800_rfcsr_write(rt2x00dev, 55,
-+ r55_bt_rev[idx]);
-+ rt2800_rfcsr_write(rt2x00dev, 59,
-+ r59_bt_rev[idx]);
-+ } else {
-+ static const char r59_bt[] = {0x8b, 0x8b, 0x8b,
-+ 0x8b, 0x8b, 0x8b, 0x8b, 0x8a, 0x89,
-+ 0x88, 0x88, 0x86, 0x85, 0x84};
-
-- if (rt2x00_has_cap_bt_coexist(rt2x00dev)) {
-- if (rt2x00_rt_rev_gte(rt2x00dev, RT5390, REV_RT5390F)) {
-- /* r55/r59 value array of channel 1~14 */
-- static const char r55_bt_rev[] = {0x83, 0x83,
-- 0x83, 0x73, 0x73, 0x63, 0x53, 0x53,
-- 0x53, 0x43, 0x43, 0x43, 0x43, 0x43};
-- static const char r59_bt_rev[] = {0x0e, 0x0e,
-- 0x0e, 0x0e, 0x0e, 0x0b, 0x0a, 0x09,
-- 0x07, 0x07, 0x07, 0x07, 0x07, 0x07};
--
-- rt2800_rfcsr_write(rt2x00dev, 55,
-- r55_bt_rev[idx]);
-- rt2800_rfcsr_write(rt2x00dev, 59,
-- r59_bt_rev[idx]);
-- } else {
-- static const char r59_bt[] = {0x8b, 0x8b, 0x8b,
-- 0x8b, 0x8b, 0x8b, 0x8b, 0x8a, 0x89,
-- 0x88, 0x88, 0x86, 0x85, 0x84};
-+ rt2800_rfcsr_write(rt2x00dev, 59, r59_bt[idx]);
-+ }
-+ } else {
-+ if (rt2x00_rt_rev_gte(rt2x00dev, RT5390, REV_RT5390F)) {
-+ static const char r55_nonbt_rev[] = {0x23, 0x23,
-+ 0x23, 0x23, 0x13, 0x13, 0x03, 0x03,
-+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03};
-+ static const char r59_nonbt_rev[] = {0x07, 0x07,
-+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-+ 0x07, 0x07, 0x06, 0x05, 0x04, 0x04};
-+
-+ rt2800_rfcsr_write(rt2x00dev, 55,
-+ r55_nonbt_rev[idx]);
-+ rt2800_rfcsr_write(rt2x00dev, 59,
-+ r59_nonbt_rev[idx]);
-+ } else if (rt2x00_rt(rt2x00dev, RT5390) ||
-+ rt2x00_rt(rt2x00dev, RT5392) ||
-+ rt2x00_rt(rt2x00dev, RT6352)) {
-+ static const char r59_non_bt[] = {0x8f, 0x8f,
-+ 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8d,
-+ 0x8a, 0x88, 0x88, 0x87, 0x87, 0x86};
-+
-+ rt2800_rfcsr_write(rt2x00dev, 59,
-+ r59_non_bt[idx]);
-+ } else if (rt2x00_rt(rt2x00dev, RT5350)) {
-+ static const char r59_non_bt[] = {0x0b, 0x0b,
-+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a,
-+ 0x0a, 0x09, 0x08, 0x07, 0x07, 0x06};
-
-- rt2800_rfcsr_write(rt2x00dev, 59, r59_bt[idx]);
-- }
-- } else {
-- if (rt2x00_rt_rev_gte(rt2x00dev, RT5390, REV_RT5390F)) {
-- static const char r55_nonbt_rev[] = {0x23, 0x23,
-- 0x23, 0x23, 0x13, 0x13, 0x03, 0x03,
-- 0x03, 0x03, 0x03, 0x03, 0x03, 0x03};
-- static const char r59_nonbt_rev[] = {0x07, 0x07,
-- 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-- 0x07, 0x07, 0x06, 0x05, 0x04, 0x04};
--
-- rt2800_rfcsr_write(rt2x00dev, 55,
-- r55_nonbt_rev[idx]);
-- rt2800_rfcsr_write(rt2x00dev, 59,
-- r59_nonbt_rev[idx]);
-- } else if (rt2x00_rt(rt2x00dev, RT5390) ||
-- rt2x00_rt(rt2x00dev, RT5392) ||
-- rt2x00_rt(rt2x00dev, RT6352)) {
-- static const char r59_non_bt[] = {0x8f, 0x8f,
-- 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8d,
-- 0x8a, 0x88, 0x88, 0x87, 0x87, 0x86};
--
-- rt2800_rfcsr_write(rt2x00dev, 59,
-- r59_non_bt[idx]);
-- } else if (rt2x00_rt(rt2x00dev, RT5350)) {
-- static const char r59_non_bt[] = {0x0b, 0x0b,
-- 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a,
-- 0x0a, 0x09, 0x08, 0x07, 0x07, 0x06};
--
-- rt2800_rfcsr_write(rt2x00dev, 59,
-- r59_non_bt[idx]);
-- }
-+ rt2800_rfcsr_write(rt2x00dev, 59,
-+ r59_non_bt[idx]);
- }
- }
- }
diff --git a/package/kernel/mac80211/patches/rt2x00/016-rt2x00-remove-confusing-AGC-register.patch b/package/kernel/mac80211/patches/rt2x00/016-rt2x00-remove-confusing-AGC-register.patch
deleted file mode 100644
index 8f3791d2ce..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/016-rt2x00-remove-confusing-AGC-register.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 5991a2ecd070ce5ef646b4e8e0bc8d99110604ed Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Tomislav=20Po=C5=BEega?= <pozega.tomislav@gmail.com>
-Date: Wed, 13 Feb 2019 11:09:13 +0100
-Subject: [PATCH 16/28] rt2x00: remove confusing AGC register
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Register 66 was causing issues on RT6352 if set to the same value as
-in MTK driver. With 1c reg value device was working fine in both HT20
-and HT40 modes.
-
-Signed-off-by: Tomislav Požega <pozega.tomislav@gmail.com>
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 6 +-----
- 1 file changed, 1 insertion(+), 5 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -3983,11 +3983,7 @@ static void rt2800_config_channel(struct
- rt2800_bbp_write(rt2x00dev, 196, reg);
-
- /* AGC init */
-- if (rt2x00_rt(rt2x00dev, RT6352))
-- reg = 0x04;
-- else
-- reg = rf->channel <= 14 ? 0x1c : 0x24;
--
-+ reg = rf->channel <= 14 ? 0x1c : 0x24;
- reg += 2 * rt2x00dev->lna_gain;
- rt2800_bbp_write_with_rx_chain(rt2x00dev, 66, reg);
-
diff --git a/package/kernel/mac80211/patches/rt2x00/017-rt2800-enable-TX_PIN_CFG_LNA_PE_-bits-per-band.patch b/package/kernel/mac80211/patches/rt2x00/017-rt2800-enable-TX_PIN_CFG_LNA_PE_-bits-per-band.patch
deleted file mode 100644
index eb82d6275b..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/017-rt2800-enable-TX_PIN_CFG_LNA_PE_-bits-per-band.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 9ad3b55654455258a9463384edb40077439d879f Mon Sep 17 00:00:00 2001
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-Date: Wed, 13 Feb 2019 11:09:14 +0100
-Subject: [PATCH 17/28] rt2800: enable TX_PIN_CFG_LNA_PE_ bits per band
-
-Do not enable TX_PIN_CFG_LNA_PE_A* bits for 2.4GHz band and
-vice versa TX_PIN_CFG_LNA_PE_G* bits for 5GHz.
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -3893,18 +3893,24 @@ static void rt2800_config_channel(struct
- switch (rt2x00dev->default_ant.rx_chain_num) {
- case 3:
- /* Turn on tertiary LNAs */
-- rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A2_EN, 1);
-- rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G2_EN, 1);
-+ rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A2_EN,
-+ rf->channel > 14);
-+ rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G2_EN,
-+ rf->channel <= 14);
- /* fall-through */
- case 2:
- /* Turn on secondary LNAs */
-- rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A1_EN, 1);
-- rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G1_EN, 1);
-+ rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A1_EN,
-+ rf->channel > 14);
-+ rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G1_EN,
-+ rf->channel <= 14);
- /* fall-through */
- case 1:
- /* Turn on primary LNAs */
-- rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A0_EN, 1);
-- rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G0_EN, 1);
-+ rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A0_EN,
-+ rf->channel > 14);
-+ rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G0_EN,
-+ rf->channel <= 14);
- break;
- }
-
diff --git a/package/kernel/mac80211/patches/rt2x00/018-rt2800-enable-TX_PIN_CFG_RFRX_EN-only-for-MT7620.patch b/package/kernel/mac80211/patches/rt2x00/018-rt2800-enable-TX_PIN_CFG_RFRX_EN-only-for-MT7620.patch
deleted file mode 100644
index 3a4c2cd8e5..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/018-rt2800-enable-TX_PIN_CFG_RFRX_EN-only-for-MT7620.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 7aca14885edeab536a8cbe1e7cfeadd4c3310b9b Mon Sep 17 00:00:00 2001
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-Date: Wed, 13 Feb 2019 11:09:15 +0100
-Subject: [PATCH 18/28] rt2800: enable TX_PIN_CFG_RFRX_EN only for MT7620
-
-The TX_PIN_CFG_RFRX_EN bit was not set on other devices than MT7620,
-restore old behavaviour since setting this bit maight not be
-correct for older devices.
-
-Fixes: 41977e86c984 ("rt2x00: add support for MT7620")
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 7 ++++---
- 1 file changed, 4 insertions(+), 3 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -3858,10 +3858,12 @@ static void rt2800_config_channel(struct
- if (rt2x00_rt(rt2x00dev, RT3572))
- rt2800_rfcsr_write(rt2x00dev, 8, 0);
-
-- if (rt2x00_rt(rt2x00dev, RT6352))
-+ if (rt2x00_rt(rt2x00dev, RT6352)) {
- tx_pin = rt2800_register_read(rt2x00dev, TX_PIN_CFG);
-- else
-+ rt2x00_set_field32(&tx_pin, TX_PIN_CFG_RFRX_EN, 1);
-+ } else {
- tx_pin = 0;
-+ }
-
- switch (rt2x00dev->default_ant.tx_chain_num) {
- case 3:
-@@ -3916,7 +3918,6 @@ static void rt2800_config_channel(struct
-
- rt2x00_set_field32(&tx_pin, TX_PIN_CFG_RFTR_EN, 1);
- rt2x00_set_field32(&tx_pin, TX_PIN_CFG_TRSW_EN, 1);
-- rt2x00_set_field32(&tx_pin, TX_PIN_CFG_RFRX_EN, 1); /* mt7620 */
-
- rt2800_register_write(rt2x00dev, TX_PIN_CFG, tx_pin);
-
diff --git a/package/kernel/mac80211/patches/rt2x00/019-rt2800-comment-and-simplify-AGC-init-for-RT6352.patch b/package/kernel/mac80211/patches/rt2x00/019-rt2800-comment-and-simplify-AGC-init-for-RT6352.patch
deleted file mode 100644
index 4d0beb263d..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/019-rt2800-comment-and-simplify-AGC-init-for-RT6352.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From c7ff1bfeaf1ca69e3e401be211b55d1738d0c5fc Mon Sep 17 00:00:00 2001
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-Date: Wed, 13 Feb 2019 11:09:16 +0100
-Subject: [PATCH 19/28] rt2800: comment and simplify AGC init for RT6352
-
-We do not need separate lines for calculating register values.
-Also add comment that value is different than in vendor driver.
-
-Suggested-by: Daniel Golle <daniel@makrotopia.org>
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 9 ++++++---
- 1 file changed, 6 insertions(+), 3 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -3989,9 +3989,12 @@ static void rt2800_config_channel(struct
- rt2800_bbp_write(rt2x00dev, 195, 141);
- rt2800_bbp_write(rt2x00dev, 196, reg);
-
-- /* AGC init */
-- reg = rf->channel <= 14 ? 0x1c : 0x24;
-- reg += 2 * rt2x00dev->lna_gain;
-+ /* AGC init.
-+ * Despite the vendor driver using different values here for
-+ * RT6352 chip, we use 0x1c for now. This may have to be changed
-+ * once TSSI got implemented.
-+ */
-+ reg = (rf->channel <= 14 ? 0x1c : 0x24) + 2*rt2x00dev->lna_gain;
- rt2800_bbp_write_with_rx_chain(rt2x00dev, 66, reg);
-
- rt2800_iq_calibrate(rt2x00dev, rf->channel);
diff --git a/package/kernel/mac80211/patches/rt2x00/020-cfg80211-add-ratelimited-variants-of-err-and-warn.patch b/package/kernel/mac80211/patches/rt2x00/020-cfg80211-add-ratelimited-variants-of-err-and-warn.patch
deleted file mode 100644
index bea1884489..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/020-cfg80211-add-ratelimited-variants-of-err-and-warn.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From patchwork Tue Mar 12 09:51:40 2019
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-X-Patchwork-Submitter: Stanislaw Gruszka <sgruszka@redhat.com>
-X-Patchwork-Id: 10848957
-X-Patchwork-Delegate: johannes@sipsolutions.net
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-To: linux-wireless@vger.kernel.org
-Cc: =?utf-8?q?Tomislav_Po=C5=BEega?= <pozega.tomislav@gmail.com>,
- Daniel Golle <daniel@makrotopia.org>, Felix Fietkau <nbd@nbd.name>,
- Mathias Kresin <dev@kresin.me>
-Subject: [PATCH v3 1/4] cfg80211: add ratelimited variants of err and warn
-Date: Tue, 12 Mar 2019 10:51:40 +0100
-Message-Id: <1552384303-29529-2-git-send-email-sgruszka@redhat.com>
-In-Reply-To: <1552384303-29529-1-git-send-email-sgruszka@redhat.com>
-References: <1552384303-29529-1-git-send-email-sgruszka@redhat.com>
-
-wiphy_{err,warn}_ratelimited will be used by rt2x00
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
----
- include/net/cfg80211.h | 5 +++++
- 1 file changed, 5 insertions(+)
-
---- a/include/net/cfg80211.h
-+++ b/include/net/cfg80211.h
-@@ -6597,6 +6597,11 @@ int cfg80211_external_auth_request(struc
- #define wiphy_info(wiphy, format, args...) \
- dev_info(&(wiphy)->dev, format, ##args)
-
-+#define wiphy_err_ratelimited(wiphy, format, args...) \
-+ dev_err_ratelimited(&(wiphy)->dev, format, ##args)
-+#define wiphy_warn_ratelimited(wiphy, format, args...) \
-+ dev_warn_ratelimited(&(wiphy)->dev, format, ##args)
-+
- #define wiphy_debug(wiphy, format, args...) \
- wiphy_printk(KERN_DEBUG, wiphy, format, ##args)
-
diff --git a/package/kernel/mac80211/patches/rt2x00/021-rt2x00-use-ratelimited-variants-dev_warn-dev_err.patch b/package/kernel/mac80211/patches/rt2x00/021-rt2x00-use-ratelimited-variants-dev_warn-dev_err.patch
deleted file mode 100644
index 2d74a71e1f..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/021-rt2x00-use-ratelimited-variants-dev_warn-dev_err.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From patchwork Tue Mar 12 09:51:41 2019
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-X-Patchwork-Submitter: Stanislaw Gruszka <sgruszka@redhat.com>
-X-Patchwork-Id: 10848959
-X-Patchwork-Delegate: kvalo@adurom.com
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-To: linux-wireless@vger.kernel.org
-Cc: =?utf-8?q?Tomislav_Po=C5=BEega?= <pozega.tomislav@gmail.com>,
- Daniel Golle <daniel@makrotopia.org>, Felix Fietkau <nbd@nbd.name>,
- Mathias Kresin <dev@kresin.me>
-Subject: [PATCH v3 2/4] rt2x00: use ratelimited variants dev_warn/dev_err
-Date: Tue, 12 Mar 2019 10:51:41 +0100
-Message-Id: <1552384303-29529-3-git-send-email-sgruszka@redhat.com>
-In-Reply-To: <1552384303-29529-1-git-send-email-sgruszka@redhat.com>
-References: <1552384303-29529-1-git-send-email-sgruszka@redhat.com>
-
-As reported by Randy we can overwhelm logs on some USB error conditions.
-To avoid that use dev_warn_ratelimited() and dev_err_ratelimitd().
-
-Reported-and-tested-by: Randy Oostdyk <linux-kernel@oostdyk.com>
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
----
- drivers/net/wireless/ralink/rt2x00/rt2x00.h | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-@@ -69,10 +69,10 @@
- printk(KERN_ERR KBUILD_MODNAME ": %s: Error - " fmt, \
- __func__, ##__VA_ARGS__)
- #define rt2x00_err(dev, fmt, ...) \
-- wiphy_err((dev)->hw->wiphy, "%s: Error - " fmt, \
-+ wiphy_err_ratelimited((dev)->hw->wiphy, "%s: Error - " fmt, \
- __func__, ##__VA_ARGS__)
- #define rt2x00_warn(dev, fmt, ...) \
-- wiphy_warn((dev)->hw->wiphy, "%s: Warning - " fmt, \
-+ wiphy_warn_ratelimited((dev)->hw->wiphy, "%s: Warning - " fmt, \
- __func__, ##__VA_ARGS__)
- #define rt2x00_info(dev, fmt, ...) \
- wiphy_info((dev)->hw->wiphy, "%s: Info - " fmt, \
diff --git a/package/kernel/mac80211/patches/rt2x00/022-rt2x00-check-number-of-EPROTO-errors.patch b/package/kernel/mac80211/patches/rt2x00/022-rt2x00-check-number-of-EPROTO-errors.patch
deleted file mode 100644
index 251ac287bf..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/022-rt2x00-check-number-of-EPROTO-errors.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-From patchwork Tue Mar 12 09:51:42 2019
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-X-Patchwork-Submitter: Stanislaw Gruszka <sgruszka@redhat.com>
-X-Patchwork-Id: 10848961
-X-Patchwork-Delegate: kvalo@adurom.com
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-To: linux-wireless@vger.kernel.org
-Cc: =?utf-8?q?Tomislav_Po=C5=BEega?= <pozega.tomislav@gmail.com>,
- Daniel Golle <daniel@makrotopia.org>, Felix Fietkau <nbd@nbd.name>,
- Mathias Kresin <dev@kresin.me>
-Subject: [PATCH v3 3/4] rt2x00: check number of EPROTO errors
-Date: Tue, 12 Mar 2019 10:51:42 +0100
-Message-Id: <1552384303-29529-4-git-send-email-sgruszka@redhat.com>
-In-Reply-To: <1552384303-29529-1-git-send-email-sgruszka@redhat.com>
-References: <1552384303-29529-1-git-send-email-sgruszka@redhat.com>
-
-Some USB host devices/drivers on some conditions can always return
-EPROTO error on submitted URBs. That can cause infinity loop in the
-rt2x00 driver.
-
-Since we can have single EPROTO errors we can not mark as device as
-removed to avoid infinity loop. However we can count consecutive
-EPROTO errors and mark device as removed if get lot of it.
-I choose number 10 as threshold.
-
-Reported-and-tested-by: Randy Oostdyk <linux-kernel@oostdyk.com>
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
----
- drivers/net/wireless/ralink/rt2x00/rt2x00.h | 1 +
- drivers/net/wireless/ralink/rt2x00/rt2x00usb.c | 22 +++++++++++++++++++---
- 2 files changed, 20 insertions(+), 3 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-@@ -1017,6 +1017,7 @@ struct rt2x00_dev {
- unsigned int extra_tx_headroom;
-
- struct usb_anchor *anchor;
-+ unsigned int num_proto_errs;
-
- /* Clock for System On Chip devices. */
- struct clk *clk;
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
-@@ -31,6 +31,22 @@
- #include "rt2x00.h"
- #include "rt2x00usb.h"
-
-+static bool rt2x00usb_check_usb_error(struct rt2x00_dev *rt2x00dev, int status)
-+{
-+ if (status == -ENODEV || status == -ENOENT)
-+ return true;
-+
-+ if (status == -EPROTO || status == -ETIMEDOUT)
-+ rt2x00dev->num_proto_errs++;
-+ else
-+ rt2x00dev->num_proto_errs = 0;
-+
-+ if (rt2x00dev->num_proto_errs > 3)
-+ return true;
-+
-+ return false;
-+}
-+
- /*
- * Interfacing with the HW.
- */
-@@ -57,7 +73,7 @@ int rt2x00usb_vendor_request(struct rt2x
- if (status >= 0)
- return 0;
-
-- if (status == -ENODEV || status == -ENOENT) {
-+ if (rt2x00usb_check_usb_error(rt2x00dev, status)) {
- /* Device has disappeared. */
- clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
- break;
-@@ -321,7 +337,7 @@ static bool rt2x00usb_kick_tx_entry(stru
-
- status = usb_submit_urb(entry_priv->urb, GFP_ATOMIC);
- if (status) {
-- if (status == -ENODEV || status == -ENOENT)
-+ if (rt2x00usb_check_usb_error(rt2x00dev, status))
- clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
- set_bit(ENTRY_DATA_IO_FAILED, &entry->flags);
- rt2x00lib_dmadone(entry);
-@@ -410,7 +426,7 @@ static bool rt2x00usb_kick_rx_entry(stru
-
- status = usb_submit_urb(entry_priv->urb, GFP_ATOMIC);
- if (status) {
-- if (status == -ENODEV || status == -ENOENT)
-+ if (rt2x00usb_check_usb_error(rt2x00dev, status))
- clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
- set_bit(ENTRY_DATA_IO_FAILED, &entry->flags);
- rt2x00lib_dmadone(entry);
diff --git a/package/kernel/mac80211/patches/rt2x00/023-rt2x00-do-not-print-error-when-queue-is-full.patch b/package/kernel/mac80211/patches/rt2x00/023-rt2x00-do-not-print-error-when-queue-is-full.patch
deleted file mode 100644
index 7e2f2193be..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/023-rt2x00-do-not-print-error-when-queue-is-full.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From patchwork Tue Mar 12 09:51:43 2019
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-X-Patchwork-Submitter: Stanislaw Gruszka <sgruszka@redhat.com>
-X-Patchwork-Id: 10848963
-X-Patchwork-Delegate: kvalo@adurom.com
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-To: linux-wireless@vger.kernel.org
-Cc: =?utf-8?q?Tomislav_Po=C5=BEega?= <pozega.tomislav@gmail.com>,
- Daniel Golle <daniel@makrotopia.org>, Felix Fietkau <nbd@nbd.name>,
- Mathias Kresin <dev@kresin.me>
-Subject: [PATCH v3 4/4] rt2x00: do not print error when queue is full
-Date: Tue, 12 Mar 2019 10:51:43 +0100
-Message-Id: <1552384303-29529-5-git-send-email-sgruszka@redhat.com>
-In-Reply-To: <1552384303-29529-1-git-send-email-sgruszka@redhat.com>
-References: <1552384303-29529-1-git-send-email-sgruszka@redhat.com>
-
-For unknown reasons printk() on some context can cause CPU hung on
-embedded MT7620 AP/router MIPS platforms. What can result on wifi
-disconnects.
-
-This patch move queue full messages to debug level what is consistent
-with other mac80211 drivers which drop packet silently if tx queue is
-full. This make MT7620 OpenWRT routers more stable, what was reported
-by various users.
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
----
- drivers/net/wireless/ralink/rt2x00/rt2x00queue.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
-@@ -671,7 +671,7 @@ int rt2x00queue_write_tx_frame(struct da
- spin_lock(&queue->tx_lock);
-
- if (unlikely(rt2x00queue_full(queue))) {
-- rt2x00_err(queue->rt2x00dev, "Dropping frame due to full tx queue %d\n",
-+ rt2x00_dbg(queue->rt2x00dev, "Dropping frame due to full tx queue %d\n",
- queue->qid);
- ret = -ENOBUFS;
- goto out;
diff --git a/package/kernel/mac80211/patches/rt2x00/024-rt2800-partially-restore-old-mmio-txstatus-behaviour.patch b/package/kernel/mac80211/patches/rt2x00/024-rt2800-partially-restore-old-mmio-txstatus-behaviour.patch
deleted file mode 100644
index 52314a79ae..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/024-rt2800-partially-restore-old-mmio-txstatus-behaviour.patch
+++ /dev/null
@@ -1,128 +0,0 @@
-From 91a5340db0526b7263bc8da14b120ea3129b5f28 Mon Sep 17 00:00:00 2001
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-Date: Sat, 9 Feb 2019 12:08:31 +0100
-X-Patchwork-Submitter: Stanislaw Gruszka <sgruszka@redhat.com>
-X-Patchwork-Id: 10804437
-X-Patchwork-Delegate: kvalo@adurom.com
-Subject: [PATCH 21/28] rt2800: partially restore old mmio txstatus behaviour
-
-Do not disable txstatus interrupt and add quota of processed tx statuses in
-one tasklet. Quota is needed to allow to fed device with new frames during
-processing of tx statuses.
-
-Patch fixes about 15% performance degradation on some scenarios coused by
-0b0d556e0ebb ("rt2800mmio: use txdone/txstatus routines from lib").
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
----
- .../net/wireless/ralink/rt2x00/rt2800lib.c | 4 +--
- .../net/wireless/ralink/rt2x00/rt2800lib.h | 2 +-
- .../net/wireless/ralink/rt2x00/rt2800mmio.c | 30 +++++--------------
- .../net/wireless/ralink/rt2x00/rt2800usb.c | 2 +-
- 4 files changed, 12 insertions(+), 26 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -1100,7 +1100,7 @@ void rt2800_txdone_entry(struct queue_en
- }
- EXPORT_SYMBOL_GPL(rt2800_txdone_entry);
-
--void rt2800_txdone(struct rt2x00_dev *rt2x00dev)
-+void rt2800_txdone(struct rt2x00_dev *rt2x00dev, unsigned int quota)
- {
- struct data_queue *queue;
- struct queue_entry *entry;
-@@ -1108,7 +1108,7 @@ void rt2800_txdone(struct rt2x00_dev *rt
- u8 qid;
- bool match;
-
-- while (kfifo_get(&rt2x00dev->txstatus_fifo, &reg)) {
-+ while (quota-- > 0 && kfifo_get(&rt2x00dev->txstatus_fifo, &reg)) {
- /*
- * TX_STA_FIFO_PID_QUEUE is a 2-bit field, thus qid is
- * guaranteed to be one of the TX QIDs .
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
-@@ -195,7 +195,7 @@ void rt2800_process_rxwi(struct queue_en
-
- void rt2800_txdone_entry(struct queue_entry *entry, u32 status, __le32 *txwi,
- bool match);
--void rt2800_txdone(struct rt2x00_dev *rt2x00dev);
-+void rt2800_txdone(struct rt2x00_dev *rt2x00dev, unsigned int quota);
- void rt2800_txdone_nostatus(struct rt2x00_dev *rt2x00dev);
- bool rt2800_txstatus_timeout(struct rt2x00_dev *rt2x00dev);
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
-@@ -255,20 +255,6 @@ void rt2800mmio_autowake_tasklet(unsigne
- }
- EXPORT_SYMBOL_GPL(rt2800mmio_autowake_tasklet);
-
--static void rt2800mmio_txdone(struct rt2x00_dev *rt2x00dev)
--{
-- bool timeout = false;
--
-- while (!kfifo_is_empty(&rt2x00dev->txstatus_fifo) ||
-- (timeout = rt2800_txstatus_timeout(rt2x00dev))) {
--
-- rt2800_txdone(rt2x00dev);
--
-- if (timeout)
-- rt2800_txdone_nostatus(rt2x00dev);
-- }
--}
--
- static bool rt2800mmio_fetch_txstatus(struct rt2x00_dev *rt2x00dev)
- {
- u32 status;
-@@ -305,14 +291,11 @@ void rt2800mmio_txstatus_tasklet(unsigne
- {
- struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
-
-- do {
-- rt2800mmio_txdone(rt2x00dev);
-+ rt2800_txdone(rt2x00dev, 16);
-
-- } while (rt2800mmio_fetch_txstatus(rt2x00dev));
-+ if (!kfifo_is_empty(&rt2x00dev->txstatus_fifo))
-+ tasklet_schedule(&rt2x00dev->txstatus_tasklet);
-
-- if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
-- rt2800mmio_enable_interrupt(rt2x00dev,
-- INT_SOURCE_CSR_TX_FIFO_STATUS);
- }
- EXPORT_SYMBOL_GPL(rt2800mmio_txstatus_tasklet);
-
-@@ -339,8 +322,10 @@ irqreturn_t rt2800mmio_interrupt(int irq
- mask = ~reg;
-
- if (rt2x00_get_field32(reg, INT_SOURCE_CSR_TX_FIFO_STATUS)) {
-+ rt2x00_set_field32(&mask, INT_MASK_CSR_TX_FIFO_STATUS, 1);
- rt2800mmio_fetch_txstatus(rt2x00dev);
-- tasklet_schedule(&rt2x00dev->txstatus_tasklet);
-+ if (!kfifo_is_empty(&rt2x00dev->txstatus_fifo))
-+ tasklet_schedule(&rt2x00dev->txstatus_tasklet);
- }
-
- if (rt2x00_get_field32(reg, INT_SOURCE_CSR_PRE_TBTT))
-@@ -500,7 +485,8 @@ void rt2800mmio_flush_queue(struct data_
- */
- if (tx_queue) {
- tasklet_disable(&rt2x00dev->txstatus_tasklet);
-- rt2800mmio_txdone(rt2x00dev);
-+ rt2800_txdone(rt2x00dev, UINT_MAX);
-+ rt2800_txdone_nostatus(rt2x00dev);
- tasklet_enable(&rt2x00dev->txstatus_tasklet);
- }
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800usb.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800usb.c
-@@ -480,7 +480,7 @@ static void rt2800usb_work_txdone(struct
- while (!kfifo_is_empty(&rt2x00dev->txstatus_fifo) ||
- rt2800_txstatus_timeout(rt2x00dev)) {
-
-- rt2800_txdone(rt2x00dev);
-+ rt2800_txdone(rt2x00dev, UINT_MAX);
-
- rt2800_txdone_nostatus(rt2x00dev);
-
diff --git a/package/kernel/mac80211/patches/rt2x00/025-rt2800-new-flush-implementation-for-SoC-devices.patch b/package/kernel/mac80211/patches/rt2x00/025-rt2800-new-flush-implementation-for-SoC-devices.patch
deleted file mode 100644
index e3a914a0fa..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/025-rt2800-new-flush-implementation-for-SoC-devices.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 11f8ad1656035176bad9d89de7ea0e7fe6d82c32 Mon Sep 17 00:00:00 2001
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-Date: Sat, 9 Feb 2019 12:08:32 +0100
-X-Patchwork-Submitter: Stanislaw Gruszka <sgruszka@redhat.com>
-X-Patchwork-Id: 10804439
-X-Patchwork-Delegate: kvalo@adurom.com
-Subject: [PATCH 22/28] rt2800: new flush implementation for SoC devices
-
-Use new flush_queue() calback for SoC devices, what was already done for
-PCIe devices.
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
----
- drivers/net/wireless/ralink/rt2x00/rt2800soc.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800soc.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800soc.c
-@@ -203,7 +203,7 @@ static const struct rt2x00lib_ops rt2800
- .start_queue = rt2800mmio_start_queue,
- .kick_queue = rt2800mmio_kick_queue,
- .stop_queue = rt2800mmio_stop_queue,
-- .flush_queue = rt2x00mmio_flush_queue,
-+ .flush_queue = rt2800mmio_flush_queue,
- .write_tx_desc = rt2800mmio_write_tx_desc,
- .write_tx_data = rt2800_write_tx_data,
- .write_beacon = rt2800_write_beacon,
diff --git a/package/kernel/mac80211/patches/rt2x00/026-rt2800-move-txstatus-pending-routine.patch b/package/kernel/mac80211/patches/rt2x00/026-rt2800-move-txstatus-pending-routine.patch
deleted file mode 100644
index e5bfbecd1e..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/026-rt2800-move-txstatus-pending-routine.patch
+++ /dev/null
@@ -1,106 +0,0 @@
-From 2bbea7645c3d095014a080db170941818650e141 Mon Sep 17 00:00:00 2001
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-Date: Sat, 9 Feb 2019 12:08:33 +0100
-X-Patchwork-Submitter: Stanislaw Gruszka <sgruszka@redhat.com>
-X-Patchwork-Id: 10804441
-X-Patchwork-Delegate: kvalo@adurom.com
-Subject: [PATCH 23/28] rt2800: move txstatus pending routine
-
-Move rt2800usb_txstatus_pending routine to rt2800lib. It will be reused
-by rt2800mmio code.
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
----
- .../net/wireless/ralink/rt2x00/rt2800lib.c | 17 ++++++++++++++
- .../net/wireless/ralink/rt2x00/rt2800lib.h | 1 +
- .../net/wireless/ralink/rt2x00/rt2800usb.c | 22 +++----------------
- 3 files changed, 21 insertions(+), 19 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -1183,6 +1183,23 @@ bool rt2800_txstatus_timeout(struct rt2x
- }
- EXPORT_SYMBOL_GPL(rt2800_txstatus_timeout);
-
-+/*
-+ * test if there is an entry in any TX queue for which DMA is done
-+ * but the TX status has not been returned yet
-+ */
-+bool rt2800_txstatus_pending(struct rt2x00_dev *rt2x00dev)
-+{
-+ struct data_queue *queue;
-+
-+ tx_queue_for_each(rt2x00dev, queue) {
-+ if (rt2x00queue_get_entry(queue, Q_INDEX_DMA_DONE) !=
-+ rt2x00queue_get_entry(queue, Q_INDEX_DONE))
-+ return true;
-+ }
-+ return false;
-+}
-+EXPORT_SYMBOL_GPL(rt2800_txstatus_pending);
-+
- void rt2800_txdone_nostatus(struct rt2x00_dev *rt2x00dev)
- {
- struct data_queue *queue;
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
-@@ -198,6 +198,7 @@ void rt2800_txdone_entry(struct queue_en
- void rt2800_txdone(struct rt2x00_dev *rt2x00dev, unsigned int quota);
- void rt2800_txdone_nostatus(struct rt2x00_dev *rt2x00dev);
- bool rt2800_txstatus_timeout(struct rt2x00_dev *rt2x00dev);
-+bool rt2800_txstatus_pending(struct rt2x00_dev *rt2x00dev);
-
- void rt2800_write_beacon(struct queue_entry *entry, struct txentry_desc *txdesc);
- void rt2800_clear_beacon(struct queue_entry *entry);
---- a/drivers/net/wireless/ralink/rt2x00/rt2800usb.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800usb.c
-@@ -100,22 +100,6 @@ static void rt2800usb_stop_queue(struct
- }
- }
-
--/*
-- * test if there is an entry in any TX queue for which DMA is done
-- * but the TX status has not been returned yet
-- */
--static bool rt2800usb_txstatus_pending(struct rt2x00_dev *rt2x00dev)
--{
-- struct data_queue *queue;
--
-- tx_queue_for_each(rt2x00dev, queue) {
-- if (rt2x00queue_get_entry(queue, Q_INDEX_DMA_DONE) !=
-- rt2x00queue_get_entry(queue, Q_INDEX_DONE))
-- return true;
-- }
-- return false;
--}
--
- #define TXSTATUS_READ_INTERVAL 1000000
-
- static bool rt2800usb_tx_sta_fifo_read_completed(struct rt2x00_dev *rt2x00dev,
-@@ -145,7 +129,7 @@ static bool rt2800usb_tx_sta_fifo_read_c
- if (rt2800_txstatus_timeout(rt2x00dev))
- queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work);
-
-- if (rt2800usb_txstatus_pending(rt2x00dev)) {
-+ if (rt2800_txstatus_pending(rt2x00dev)) {
- /* Read register after 1 ms */
- hrtimer_start(&rt2x00dev->txstatus_timer,
- TXSTATUS_READ_INTERVAL,
-@@ -160,7 +144,7 @@ stop_reading:
- * clear_bit someone could do rt2x00usb_interrupt_txdone, so recheck
- * here again if status reading is needed.
- */
-- if (rt2800usb_txstatus_pending(rt2x00dev) &&
-+ if (rt2800_txstatus_pending(rt2x00dev) &&
- !test_and_set_bit(TX_STATUS_READING, &rt2x00dev->flags))
- return true;
- else
-@@ -489,7 +473,7 @@ static void rt2800usb_work_txdone(struct
- * if the medium is busy, thus the TX_STA_FIFO entry is
- * also delayed -> use a timer to retrieve it.
- */
-- if (rt2800usb_txstatus_pending(rt2x00dev))
-+ if (rt2800_txstatus_pending(rt2x00dev))
- rt2800usb_async_read_tx_status(rt2x00dev);
- }
- }
diff --git a/package/kernel/mac80211/patches/rt2x00/027-rt2800mmio-fetch-tx-status-changes.patch b/package/kernel/mac80211/patches/rt2x00/027-rt2800mmio-fetch-tx-status-changes.patch
deleted file mode 100644
index 4bb62c2288..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/027-rt2800mmio-fetch-tx-status-changes.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From f6a9618198e190a2ba09ce3f0aa8e9ee1763bd38 Mon Sep 17 00:00:00 2001
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-Date: Sat, 9 Feb 2019 12:08:34 +0100
-X-Patchwork-Submitter: Stanislaw Gruszka <sgruszka@redhat.com>
-X-Patchwork-Id: 10804443
-X-Patchwork-Delegate: kvalo@adurom.com
-Subject: [PATCH 24/28] rt2800mmio: fetch tx status changes
-
-Prepare to use rt2800mmio_fetch_txstatus() in concurrent manner and drop
-return value since is not longer needed.
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
----
- drivers/net/wireless/ralink/rt2x00/rt2800mmio.c | 17 +++++++++--------
- 1 file changed, 9 insertions(+), 8 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
-@@ -255,12 +255,12 @@ void rt2800mmio_autowake_tasklet(unsigne
- }
- EXPORT_SYMBOL_GPL(rt2800mmio_autowake_tasklet);
-
--static bool rt2800mmio_fetch_txstatus(struct rt2x00_dev *rt2x00dev)
-+static void rt2800mmio_fetch_txstatus(struct rt2x00_dev *rt2x00dev)
- {
- u32 status;
-- bool more = false;
-+ unsigned long flags;
-
-- /* FIXEME: rewrite this comment
-+ /*
- * The TX_FIFO_STATUS interrupt needs special care. We should
- * read TX_STA_FIFO but we should do it immediately as otherwise
- * the register can overflow and we would lose status reports.
-@@ -271,20 +271,21 @@ static bool rt2800mmio_fetch_txstatus(st
- * because we can schedule the tasklet multiple times (when the
- * interrupt fires again during tx status processing).
- *
-- * txstatus tasklet is called with INT_SOURCE_CSR_TX_FIFO_STATUS
-- * disabled so have only one producer and one consumer - we don't
-- * need to lock the kfifo.
-+ * We also read statuses from tx status timeout timer, use
-+ * lock to prevent concurent writes to fifo.
- */
-+
-+ spin_lock_irqsave(&rt2x00dev->irqmask_lock, flags);
-+
- while (!kfifo_is_full(&rt2x00dev->txstatus_fifo)) {
- status = rt2x00mmio_register_read(rt2x00dev, TX_STA_FIFO);
- if (!rt2x00_get_field32(status, TX_STA_FIFO_VALID))
- break;
-
- kfifo_put(&rt2x00dev->txstatus_fifo, status);
-- more = true;
- }
-
-- return more;
-+ spin_unlock_irqrestore(&rt2x00dev->irqmask_lock, flags);
- }
-
- void rt2800mmio_txstatus_tasklet(unsigned long data)
diff --git a/package/kernel/mac80211/patches/rt2x00/028-rt2800mmio-use-timer-and-work-for-handling-tx-status.patch b/package/kernel/mac80211/patches/rt2x00/028-rt2800mmio-use-timer-and-work-for-handling-tx-status.patch
deleted file mode 100644
index bf038a5991..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/028-rt2800mmio-use-timer-and-work-for-handling-tx-status.patch
+++ /dev/null
@@ -1,194 +0,0 @@
-From 175c2548332b45b144af673e70fdbb1a947d7aba Mon Sep 17 00:00:00 2001
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-Date: Sat, 9 Feb 2019 12:08:35 +0100
-X-Patchwork-Submitter: Stanislaw Gruszka <sgruszka@redhat.com>
-X-Patchwork-Id: 10804445
-X-Patchwork-Delegate: kvalo@adurom.com
-Subject: [PATCH 25/28] rt2800mmio: use timer and work for handling tx statuses
- timeouts
-
-Sometimes we can get into situation when there are pending statuses,
-but we do not get INT_SOURCE_CSR_TX_FIFO_STATUS. Handle this situation
-by arming timeout timer and read statuses (it will fix case when
-we just do not have irq) and queue work to handle case we missed
-statues from hardware FIFO.
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
----
- .../net/wireless/ralink/rt2x00/rt2800mmio.c | 81 +++++++++++++++++--
- .../net/wireless/ralink/rt2x00/rt2800mmio.h | 1 +
- .../net/wireless/ralink/rt2x00/rt2800pci.c | 2 +-
- .../net/wireless/ralink/rt2x00/rt2800soc.c | 2 +-
- .../net/wireless/ralink/rt2x00/rt2x00dev.c | 4 +
- 5 files changed, 82 insertions(+), 8 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
-@@ -426,6 +426,9 @@ void rt2800mmio_start_queue(struct data_
- }
- EXPORT_SYMBOL_GPL(rt2800mmio_start_queue);
-
-+/* 200 ms */
-+#define TXSTATUS_TIMEOUT 200000000
-+
- void rt2800mmio_kick_queue(struct data_queue *queue)
- {
- struct rt2x00_dev *rt2x00dev = queue->rt2x00dev;
-@@ -440,6 +443,8 @@ void rt2800mmio_kick_queue(struct data_q
- entry = rt2x00queue_get_entry(queue, Q_INDEX);
- rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX(queue->qid),
- entry->entry_idx);
-+ hrtimer_start(&rt2x00dev->txstatus_timer,
-+ TXSTATUS_TIMEOUT, HRTIMER_MODE_REL);
- break;
- case QID_MGMT:
- entry = rt2x00queue_get_entry(queue, Q_INDEX);
-@@ -484,12 +489,8 @@ void rt2800mmio_flush_queue(struct data_
- * For TX queues schedule completion tasklet to catch
- * tx status timeouts, othewise just wait.
- */
-- if (tx_queue) {
-- tasklet_disable(&rt2x00dev->txstatus_tasklet);
-- rt2800_txdone(rt2x00dev, UINT_MAX);
-- rt2800_txdone_nostatus(rt2x00dev);
-- tasklet_enable(&rt2x00dev->txstatus_tasklet);
-- }
-+ if (tx_queue)
-+ queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work);
-
- /*
- * Wait for a little while to give the driver
-@@ -627,6 +628,10 @@ void rt2800mmio_clear_entry(struct queue
- word = rt2x00_desc_read(entry_priv->desc, 1);
- rt2x00_set_field32(&word, TXD_W1_DMA_DONE, 1);
- rt2x00_desc_write(entry_priv->desc, 1, word);
-+
-+ /* If last entry stop txstatus timer */
-+ if (entry->queue->length == 1)
-+ hrtimer_cancel(&rt2x00dev->txstatus_timer);
- }
- }
- EXPORT_SYMBOL_GPL(rt2800mmio_clear_entry);
-@@ -759,6 +764,70 @@ int rt2800mmio_enable_radio(struct rt2x0
- }
- EXPORT_SYMBOL_GPL(rt2800mmio_enable_radio);
-
-+static void rt2800mmio_work_txdone(struct work_struct *work)
-+{
-+ struct rt2x00_dev *rt2x00dev =
-+ container_of(work, struct rt2x00_dev, txdone_work);
-+
-+ if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
-+ return;
-+
-+ while (!kfifo_is_empty(&rt2x00dev->txstatus_fifo) ||
-+ rt2800_txstatus_timeout(rt2x00dev)) {
-+
-+ tasklet_disable(&rt2x00dev->txstatus_tasklet);
-+ rt2800_txdone(rt2x00dev, UINT_MAX);
-+ rt2800_txdone_nostatus(rt2x00dev);
-+ tasklet_enable(&rt2x00dev->txstatus_tasklet);
-+ }
-+
-+ if (rt2800_txstatus_pending(rt2x00dev))
-+ hrtimer_start(&rt2x00dev->txstatus_timer,
-+ TXSTATUS_TIMEOUT, HRTIMER_MODE_REL);
-+}
-+
-+static enum hrtimer_restart rt2800mmio_tx_sta_fifo_timeout(struct hrtimer *timer)
-+{
-+ struct rt2x00_dev *rt2x00dev =
-+ container_of(timer, struct rt2x00_dev, txstatus_timer);
-+
-+ if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
-+ goto out;
-+
-+ if (!rt2800_txstatus_pending(rt2x00dev))
-+ goto out;
-+
-+ rt2800mmio_fetch_txstatus(rt2x00dev);
-+ if (!kfifo_is_empty(&rt2x00dev->txstatus_fifo))
-+ tasklet_schedule(&rt2x00dev->txstatus_tasklet);
-+ else
-+ queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work);
-+out:
-+ return HRTIMER_NORESTART;
-+}
-+
-+int rt2800mmio_probe_hw(struct rt2x00_dev *rt2x00dev)
-+{
-+ int retval;
-+
-+ retval = rt2800_probe_hw(rt2x00dev);
-+ if (retval)
-+ return retval;
-+
-+ /*
-+ * Set txstatus timer function.
-+ */
-+ rt2x00dev->txstatus_timer.function = rt2800mmio_tx_sta_fifo_timeout;
-+
-+ /*
-+ * Overwrite TX done handler
-+ */
-+ INIT_WORK(&rt2x00dev->txdone_work, rt2800mmio_work_txdone);
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(rt2800mmio_probe_hw);
-+
- MODULE_AUTHOR(DRV_PROJECT);
- MODULE_VERSION(DRV_VERSION);
- MODULE_DESCRIPTION("rt2800 MMIO library");
---- a/drivers/net/wireless/ralink/rt2x00/rt2800mmio.h
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800mmio.h
-@@ -153,6 +153,7 @@ void rt2800mmio_stop_queue(struct data_q
- void rt2800mmio_queue_init(struct data_queue *queue);
-
- /* Initialization functions */
-+int rt2800mmio_probe_hw(struct rt2x00_dev *rt2x00dev);
- bool rt2800mmio_get_entry_state(struct queue_entry *entry);
- void rt2800mmio_clear_entry(struct queue_entry *entry);
- int rt2800mmio_init_queues(struct rt2x00_dev *rt2x00dev);
---- a/drivers/net/wireless/ralink/rt2x00/rt2800pci.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800pci.c
-@@ -346,7 +346,7 @@ static const struct rt2x00lib_ops rt2800
- .tbtt_tasklet = rt2800mmio_tbtt_tasklet,
- .rxdone_tasklet = rt2800mmio_rxdone_tasklet,
- .autowake_tasklet = rt2800mmio_autowake_tasklet,
-- .probe_hw = rt2800_probe_hw,
-+ .probe_hw = rt2800mmio_probe_hw,
- .get_firmware_name = rt2800pci_get_firmware_name,
- .check_firmware = rt2800_check_firmware,
- .load_firmware = rt2800_load_firmware,
---- a/drivers/net/wireless/ralink/rt2x00/rt2800soc.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800soc.c
-@@ -185,7 +185,7 @@ static const struct rt2x00lib_ops rt2800
- .tbtt_tasklet = rt2800mmio_tbtt_tasklet,
- .rxdone_tasklet = rt2800mmio_rxdone_tasklet,
- .autowake_tasklet = rt2800mmio_autowake_tasklet,
-- .probe_hw = rt2800_probe_hw,
-+ .probe_hw = rt2800mmio_probe_hw,
- .get_firmware_name = rt2800soc_get_firmware_name,
- .check_firmware = rt2800soc_check_firmware,
- .load_firmware = rt2800soc_load_firmware,
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
-@@ -1391,6 +1391,8 @@ int rt2x00lib_probe_dev(struct rt2x00_de
- mutex_init(&rt2x00dev->conf_mutex);
- INIT_LIST_HEAD(&rt2x00dev->bar_list);
- spin_lock_init(&rt2x00dev->bar_list_lock);
-+ hrtimer_init(&rt2x00dev->txstatus_timer, CLOCK_MONOTONIC,
-+ HRTIMER_MODE_REL);
-
- set_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
-
-@@ -1515,6 +1517,8 @@ void rt2x00lib_remove_dev(struct rt2x00_
- cancel_delayed_work_sync(&rt2x00dev->autowakeup_work);
- cancel_work_sync(&rt2x00dev->sleep_work);
-
-+ hrtimer_cancel(&rt2x00dev->txstatus_timer);
-+
- /*
- * Kill the tx status tasklet.
- */
diff --git a/package/kernel/mac80211/patches/rt2x00/029-rt2x00-remove-last_nostatus_check.patch b/package/kernel/mac80211/patches/rt2x00/029-rt2x00-remove-last_nostatus_check.patch
deleted file mode 100644
index 0daaef5e8b..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/029-rt2x00-remove-last_nostatus_check.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 6013a91f15c9dabd668d5736652b9bcfb0ef0378 Mon Sep 17 00:00:00 2001
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-Date: Sat, 9 Feb 2019 12:08:36 +0100
-X-Patchwork-Submitter: Stanislaw Gruszka <sgruszka@redhat.com>
-X-Patchwork-Id: 10804447
-X-Patchwork-Delegate: kvalo@adurom.com
-Subject: [PATCH 26/28] rt2x00: remove last_nostatus_check
-
-We do not any longer check txstatus timeout from tasklet, so do not need
-this optimization.
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
----
- drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 9 ---------
- drivers/net/wireless/ralink/rt2x00/rt2x00.h | 2 --
- drivers/net/wireless/ralink/rt2x00/rt2x00queue.c | 1 -
- 3 files changed, 12 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -1164,15 +1164,6 @@ bool rt2800_txstatus_timeout(struct rt2x
- struct data_queue *queue;
- struct queue_entry *entry;
-
-- if (!test_bit(DEVICE_STATE_FLUSHING, &rt2x00dev->flags)) {
-- unsigned long tout = msecs_to_jiffies(1000);
--
-- if (time_before(jiffies, rt2x00dev->last_nostatus_check + tout))
-- return false;
-- }
--
-- rt2x00dev->last_nostatus_check = jiffies;
--
- tx_queue_for_each(rt2x00dev, queue) {
- entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE);
- if (rt2800_entry_txstatus_timeout(rt2x00dev, entry))
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-@@ -981,8 +981,6 @@ struct rt2x00_dev {
- */
- DECLARE_KFIFO_PTR(txstatus_fifo, u32);
-
-- unsigned long last_nostatus_check;
--
- /*
- * Timer to ensure tx status reports are read (rt2800usb).
- */
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
-@@ -1039,7 +1039,6 @@ void rt2x00queue_start_queues(struct rt2
- */
- tx_queue_for_each(rt2x00dev, queue)
- rt2x00queue_start_queue(queue);
-- rt2x00dev->last_nostatus_check = jiffies;
-
- rt2x00queue_start_queue(rt2x00dev->rx);
- }
diff --git a/package/kernel/mac80211/patches/rt2x00/030-rt2x00-remove-not-used-entry-field.patch b/package/kernel/mac80211/patches/rt2x00/030-rt2x00-remove-not-used-entry-field.patch
deleted file mode 100644
index 53134a5bc3..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/030-rt2x00-remove-not-used-entry-field.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 2758f09b22bc08e89e0391486b2d707ad2479599 Mon Sep 17 00:00:00 2001
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-Date: Sat, 9 Feb 2019 12:08:37 +0100
-X-Patchwork-Submitter: Stanislaw Gruszka <sgruszka@redhat.com>
-X-Patchwork-Id: 10804449
-X-Patchwork-Delegate: kvalo@adurom.com
-Subject: [PATCH 27/28] rt2x00: remove not used entry field
-
-Remove not used any longer queue_entry field and flag.
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
----
- drivers/net/wireless/ralink/rt2x00/rt2x00queue.h | 3 ---
- 1 file changed, 3 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
-@@ -361,7 +361,6 @@ enum queue_entry_flags {
- ENTRY_DATA_PENDING,
- ENTRY_DATA_IO_FAILED,
- ENTRY_DATA_STATUS_PENDING,
-- ENTRY_DATA_STATUS_SET,
- };
-
- /**
-@@ -387,8 +386,6 @@ struct queue_entry {
-
- unsigned int entry_idx;
-
-- u32 status;
--
- void *priv_data;
- };
-
diff --git a/package/kernel/mac80211/patches/rt2x00/031-rt2x00mmio-remove-legacy-comment.patch b/package/kernel/mac80211/patches/rt2x00/031-rt2x00mmio-remove-legacy-comment.patch
deleted file mode 100644
index 199a6e3255..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/031-rt2x00mmio-remove-legacy-comment.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From f44e145869bb517460648e4ed71b7e9001964d06 Mon Sep 17 00:00:00 2001
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-Date: Sat, 9 Feb 2019 12:08:38 +0100
-X-Patchwork-Submitter: Stanislaw Gruszka <sgruszka@redhat.com>
-X-Patchwork-Id: 10804451
-X-Patchwork-Delegate: kvalo@adurom.com
-Subject: [PATCH 28/28] rt2x00mmio: remove legacy comment
-
-Remove comment about fields that ware removed.
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
----
- drivers/net/wireless/ralink/rt2x00/rt2x00mmio.h | 2 --
- 1 file changed, 2 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00mmio.h
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00mmio.h
-@@ -80,8 +80,6 @@ int rt2x00mmio_regbusy_read(struct rt2x0
- *
- * @desc: Pointer to device descriptor
- * @desc_dma: DMA pointer to &desc.
-- * @data: Pointer to device's entry memory.
-- * @data_dma: DMA pointer to &data.
- */
- struct queue_entry_priv_mmio {
- __le32 *desc;
diff --git a/package/kernel/mac80211/patches/rt2x00/032-rt2x00-do-not-increment-sequence-number-while-re-tra.patch b/package/kernel/mac80211/patches/rt2x00/032-rt2x00-do-not-increment-sequence-number-while-re-tra.patch
deleted file mode 100644
index c1f3815998..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/032-rt2x00-do-not-increment-sequence-number-while-re-tra.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From 746ba11f170603bf1eaade817553a6c2e9135bbe Mon Sep 17 00:00:00 2001
-From: Vijayakumar Durai <vijayakumar.durai1@vivint.com>
-Date: Wed, 27 Mar 2019 11:03:17 +0100
-Subject: [PATCH] rt2x00: do not increment sequence number while
- re-transmitting
-
-Currently rt2x00 devices retransmit the management frames with
-incremented sequence number if hardware is assigning the sequence.
-
-This is HW bug fixed already for non-QOS data frames, but it should
-be fixed for management frames except beacon.
-
-Without fix retransmitted frames have wrong SN:
-
- AlphaNet_e8:fb:36 Vivotek_52:31:51 Authentication, SN=1648, FN=0, Flags=........C Frame is not being retransmitted 1648 1
- AlphaNet_e8:fb:36 Vivotek_52:31:51 Authentication, SN=1649, FN=0, Flags=....R...C Frame is being retransmitted 1649 1
- AlphaNet_e8:fb:36 Vivotek_52:31:51 Authentication, SN=1650, FN=0, Flags=....R...C Frame is being retransmitted 1650 1
-
-With the fix SN stays correctly the same:
-
- 88:6a:e3:e8:f9:a2 8c:f5:a3:88:76:87 Authentication, SN=1450, FN=0, Flags=........C
- 88:6a:e3:e8:f9:a2 8c:f5:a3:88:76:87 Authentication, SN=1450, FN=0, Flags=....R...C
- 88:6a:e3:e8:f9:a2 8c:f5:a3:88:76:87 Authentication, SN=1450, FN=0, Flags=....R...C
-
-Cc: stable@vger.kernel.org
-Signed-off-by: Vijayakumar Durai <vijayakumar.durai1@vivint.com>
-[sgruszka: simplify code, change comments and changelog]
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- drivers/net/wireless/ralink/rt2x00/rt2x00.h | 1 -
- drivers/net/wireless/ralink/rt2x00/rt2x00mac.c | 10 ----------
- drivers/net/wireless/ralink/rt2x00/rt2x00queue.c | 15 +++++++++------
- 3 files changed, 9 insertions(+), 17 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-@@ -673,7 +673,6 @@ enum rt2x00_state_flags {
- CONFIG_CHANNEL_HT40,
- CONFIG_POWERSAVING,
- CONFIG_HT_DISABLED,
-- CONFIG_QOS_DISABLED,
- CONFIG_MONITORING,
-
- /*
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c
-@@ -642,19 +642,9 @@ void rt2x00mac_bss_info_changed(struct i
- rt2x00dev->intf_associated--;
-
- rt2x00leds_led_assoc(rt2x00dev, !!rt2x00dev->intf_associated);
--
-- clear_bit(CONFIG_QOS_DISABLED, &rt2x00dev->flags);
- }
-
- /*
-- * Check for access point which do not support 802.11e . We have to
-- * generate data frames sequence number in S/W for such AP, because
-- * of H/W bug.
-- */
-- if (changes & BSS_CHANGED_QOS && !bss_conf->qos)
-- set_bit(CONFIG_QOS_DISABLED, &rt2x00dev->flags);
--
-- /*
- * When the erp information has changed, we should perform
- * additional configuration steps. For all other changes we are done.
- */
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
-@@ -201,15 +201,18 @@ static void rt2x00queue_create_tx_descri
- if (!rt2x00_has_cap_flag(rt2x00dev, REQUIRE_SW_SEQNO)) {
- /*
- * rt2800 has a H/W (or F/W) bug, device incorrectly increase
-- * seqno on retransmited data (non-QOS) frames. To workaround
-- * the problem let's generate seqno in software if QOS is
-- * disabled.
-+ * seqno on retransmitted data (non-QOS) and management frames.
-+ * To workaround the problem let's generate seqno in software.
-+ * Except for beacons which are transmitted periodically by H/W
-+ * hence hardware has to assign seqno for them.
- */
-- if (test_bit(CONFIG_QOS_DISABLED, &rt2x00dev->flags))
-- __clear_bit(ENTRY_TXD_GENERATE_SEQ, &txdesc->flags);
-- else
-+ if (ieee80211_is_beacon(hdr->frame_control)) {
-+ __set_bit(ENTRY_TXD_GENERATE_SEQ, &txdesc->flags);
- /* H/W will generate sequence number */
- return;
-+ }
-+
-+ __clear_bit(ENTRY_TXD_GENERATE_SEQ, &txdesc->flags);
- }
-
- /*
diff --git a/package/kernel/mac80211/patches/rt2x00/050-rt2x00-add-RT3883-support.patch b/package/kernel/mac80211/patches/rt2x00/050-rt2x00-add-RT3883-support.patch
deleted file mode 100644
index 162a20155d..0000000000
--- a/package/kernel/mac80211/patches/rt2x00/050-rt2x00-add-RT3883-support.patch
+++ /dev/null
@@ -1,959 +0,0 @@
-From d0e61a0f7cca51ce340a5a73595189972122ff25 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Wed, 24 Apr 2019 09:49:24 +0200
-Subject: [PATCH] rt2x00: add RT3883 support
-
-Patch add support for RT3883 chip. Code was taken direclty
-from openwrt project and merge into one patch.
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- drivers/net/wireless/ralink/rt2x00/rt2800.h | 19 +-
- .../net/wireless/ralink/rt2x00/rt2800lib.c | 598 +++++++++++++++++-
- .../net/wireless/ralink/rt2x00/rt2800soc.c | 9 +-
- 3 files changed, 607 insertions(+), 19 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2800.h
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800.h
-@@ -48,7 +48,8 @@
- * RF2853 2.4G/5G 3T3R
- * RF3320 2.4G 1T1R(RT3350/RT3370/RT3390)
- * RF3322 2.4G 2T2R(RT3352/RT3371/RT3372/RT3391/RT3392)
-- * RF3053 2.4G/5G 3T3R(RT3883/RT3563/RT3573/RT3593/RT3662)
-+ * RF3053 2.4G/5G 3T3R(RT3563/RT3573/RT3593)
-+ * RF3853 2.4G/5G 3T3R(RT3883/RT3662)
- * RF5592 2.4G/5G 2T2R
- * RF3070 2.4G 1T1R
- * RF5360 2.4G 1T1R
-@@ -72,6 +73,7 @@
- #define RF5592 0x000f
- #define RF3070 0x3070
- #define RF3290 0x3290
-+#define RF3853 0x3853
- #define RF5350 0x5350
- #define RF5360 0x5360
- #define RF5362 0x5362
-@@ -1726,6 +1728,20 @@
- #define TX_PWR_CFG_9B_STBC_MCS7 FIELD32(0x000000ff)
-
- /*
-+ * TX_TXBF_CFG:
-+ */
-+#define TX_TXBF_CFG_0 0x138c
-+#define TX_TXBF_CFG_1 0x13a4
-+#define TX_TXBF_CFG_2 0x13a8
-+#define TX_TXBF_CFG_3 0x13ac
-+
-+/*
-+ * TX_FBK_CFG_3S:
-+ */
-+#define TX_FBK_CFG_3S_0 0x13c4
-+#define TX_FBK_CFG_3S_1 0x13c8
-+
-+/*
- * RX_FILTER_CFG: RX configuration register.
- */
- #define RX_FILTER_CFG 0x1400
-@@ -2296,6 +2312,7 @@ struct mac_iveiv_entry {
- /*
- * RFCSR 2:
- */
-+#define RFCSR2_RESCAL_BP FIELD8(0x40)
- #define RFCSR2_RESCAL_EN FIELD8(0x80)
- #define RFCSR2_RX2_EN_MT7620 FIELD8(0x02)
- #define RFCSR2_TX2_EN_MT7620 FIELD8(0x20)
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -381,7 +381,8 @@ static unsigned int rt2800_eeprom_word_i
- wiphy_name(rt2x00dev->hw->wiphy), word))
- return 0;
-
-- if (rt2x00_rt(rt2x00dev, RT3593))
-+ if (rt2x00_rt(rt2x00dev, RT3593) ||
-+ rt2x00_rt(rt2x00dev, RT3883))
- map = rt2800_eeprom_map_ext;
- else
- map = rt2800_eeprom_map;
-@@ -590,6 +591,7 @@ void rt2800_get_txwi_rxwi_size(struct rt
- {
- switch (rt2x00dev->chip.rt) {
- case RT3593:
-+ case RT3883:
- *txwi_size = TXWI_DESC_SIZE_4WORDS;
- *rxwi_size = RXWI_DESC_SIZE_5WORDS;
- break;
-@@ -2180,7 +2182,8 @@ void rt2800_config_ant(struct rt2x00_dev
- rt2800_bbp_write(rt2x00dev, 3, r3);
- rt2800_bbp_write(rt2x00dev, 1, r1);
-
-- if (rt2x00_rt(rt2x00dev, RT3593)) {
-+ if (rt2x00_rt(rt2x00dev, RT3593) ||
-+ rt2x00_rt(rt2x00dev, RT3883)) {
- if (ant->rx_chain_num == 1)
- rt2800_bbp_write(rt2x00dev, 86, 0x00);
- else
-@@ -2202,7 +2205,8 @@ static void rt2800_config_lna_gain(struc
- eeprom = rt2800_eeprom_read(rt2x00dev, EEPROM_LNA);
- lna_gain = rt2x00_get_field16(eeprom, EEPROM_LNA_A0);
- } else if (libconf->rf.channel <= 128) {
-- if (rt2x00_rt(rt2x00dev, RT3593)) {
-+ if (rt2x00_rt(rt2x00dev, RT3593) ||
-+ rt2x00_rt(rt2x00dev, RT3883)) {
- eeprom = rt2800_eeprom_read(rt2x00dev, EEPROM_EXT_LNA2);
- lna_gain = rt2x00_get_field16(eeprom,
- EEPROM_EXT_LNA2_A1);
-@@ -2212,7 +2216,8 @@ static void rt2800_config_lna_gain(struc
- EEPROM_RSSI_BG2_LNA_A1);
- }
- } else {
-- if (rt2x00_rt(rt2x00dev, RT3593)) {
-+ if (rt2x00_rt(rt2x00dev, RT3593) ||
-+ rt2x00_rt(rt2x00dev, RT3883)) {
- eeprom = rt2800_eeprom_read(rt2x00dev, EEPROM_EXT_LNA2);
- lna_gain = rt2x00_get_field16(eeprom,
- EEPROM_EXT_LNA2_A2);
-@@ -2880,6 +2885,211 @@ static void rt2800_config_channel_rf3053
- }
- }
-
-+static void rt2800_config_channel_rf3853(struct rt2x00_dev *rt2x00dev,
-+ struct ieee80211_conf *conf,
-+ struct rf_channel *rf,
-+ struct channel_info *info)
-+{
-+ u8 rfcsr;
-+ u8 bbp;
-+ u8 pwr1, pwr2, pwr3;
-+
-+ const bool txbf_enabled = false; /* TODO */
-+
-+ /* TODO: add band selection */
-+
-+ if (rf->channel <= 14)
-+ rt2800_rfcsr_write(rt2x00dev, 6, 0x40);
-+ else if (rf->channel < 132)
-+ rt2800_rfcsr_write(rt2x00dev, 6, 0x80);
-+ else
-+ rt2800_rfcsr_write(rt2x00dev, 6, 0x40);
-+
-+ rt2800_rfcsr_write(rt2x00dev, 8, rf->rf1);
-+ rt2800_rfcsr_write(rt2x00dev, 9, rf->rf3);
-+
-+ if (rf->channel <= 14)
-+ rt2800_rfcsr_write(rt2x00dev, 11, 0x46);
-+ else
-+ rt2800_rfcsr_write(rt2x00dev, 11, 0x48);
-+
-+ if (rf->channel <= 14)
-+ rt2800_rfcsr_write(rt2x00dev, 12, 0x1a);
-+ else
-+ rt2800_rfcsr_write(rt2x00dev, 12, 0x52);
-+
-+ rt2800_rfcsr_write(rt2x00dev, 13, 0x12);
-+
-+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 1);
-+ rt2x00_set_field8(&rfcsr, RFCSR1_RX0_PD, 0);
-+ rt2x00_set_field8(&rfcsr, RFCSR1_TX0_PD, 0);
-+ rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 0);
-+ rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 0);
-+ rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD, 0);
-+ rt2x00_set_field8(&rfcsr, RFCSR1_TX2_PD, 0);
-+ rt2x00_set_field8(&rfcsr, RFCSR1_RF_BLOCK_EN, 1);
-+ rt2x00_set_field8(&rfcsr, RFCSR1_PLL_PD, 1);
-+
-+ switch (rt2x00dev->default_ant.tx_chain_num) {
-+ case 3:
-+ rt2x00_set_field8(&rfcsr, RFCSR1_TX2_PD, 1);
-+ /* fallthrough */
-+ case 2:
-+ rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 1);
-+ /* fallthrough */
-+ case 1:
-+ rt2x00_set_field8(&rfcsr, RFCSR1_TX0_PD, 1);
-+ break;
-+ }
-+
-+ switch (rt2x00dev->default_ant.rx_chain_num) {
-+ case 3:
-+ rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD, 1);
-+ /* fallthrough */
-+ case 2:
-+ rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 1);
-+ /* fallthrough */
-+ case 1:
-+ rt2x00_set_field8(&rfcsr, RFCSR1_RX0_PD, 1);
-+ break;
-+ }
-+ rt2800_rfcsr_write(rt2x00dev, 1, rfcsr);
-+
-+ rt2800_freq_cal_mode1(rt2x00dev);
-+
-+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 30);
-+ if (!conf_is_ht40(conf))
-+ rfcsr &= ~(0x06);
-+ else
-+ rfcsr |= 0x06;
-+ rt2800_rfcsr_write(rt2x00dev, 30, rfcsr);
-+
-+ if (rf->channel <= 14)
-+ rt2800_rfcsr_write(rt2x00dev, 31, 0xa0);
-+ else
-+ rt2800_rfcsr_write(rt2x00dev, 31, 0x80);
-+
-+ if (conf_is_ht40(conf))
-+ rt2800_rfcsr_write(rt2x00dev, 32, 0x80);
-+ else
-+ rt2800_rfcsr_write(rt2x00dev, 32, 0xd8);
-+
-+ if (rf->channel <= 14)
-+ rt2800_rfcsr_write(rt2x00dev, 34, 0x3c);
-+ else
-+ rt2800_rfcsr_write(rt2x00dev, 34, 0x20);
-+
-+ /* loopback RF_BS */
-+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 36);
-+ if (rf->channel <= 14)
-+ rt2x00_set_field8(&rfcsr, RFCSR36_RF_BS, 1);
-+ else
-+ rt2x00_set_field8(&rfcsr, RFCSR36_RF_BS, 0);
-+ rt2800_rfcsr_write(rt2x00dev, 36, rfcsr);
-+
-+ if (rf->channel <= 14)
-+ rfcsr = 0x23;
-+ else if (rf->channel < 100)
-+ rfcsr = 0x36;
-+ else if (rf->channel < 132)
-+ rfcsr = 0x32;
-+ else
-+ rfcsr = 0x30;
-+
-+ if (txbf_enabled)
-+ rfcsr |= 0x40;
-+
-+ rt2800_rfcsr_write(rt2x00dev, 39, rfcsr);
-+
-+ if (rf->channel <= 14)
-+ rt2800_rfcsr_write(rt2x00dev, 44, 0x93);
-+ else
-+ rt2800_rfcsr_write(rt2x00dev, 44, 0x9b);
-+
-+ if (rf->channel <= 14)
-+ rfcsr = 0xbb;
-+ else if (rf->channel < 100)
-+ rfcsr = 0xeb;
-+ else if (rf->channel < 132)
-+ rfcsr = 0xb3;
-+ else
-+ rfcsr = 0x9b;
-+ rt2800_rfcsr_write(rt2x00dev, 45, rfcsr);
-+
-+ if (rf->channel <= 14)
-+ rfcsr = 0x8e;
-+ else
-+ rfcsr = 0x8a;
-+
-+ if (txbf_enabled)
-+ rfcsr |= 0x20;
-+
-+ rt2800_rfcsr_write(rt2x00dev, 49, rfcsr);
-+
-+ rt2800_rfcsr_write(rt2x00dev, 50, 0x86);
-+
-+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 51);
-+ if (rf->channel <= 14)
-+ rt2800_rfcsr_write(rt2x00dev, 51, 0x75);
-+ else
-+ rt2800_rfcsr_write(rt2x00dev, 51, 0x51);
-+
-+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 52);
-+ if (rf->channel <= 14)
-+ rt2800_rfcsr_write(rt2x00dev, 52, 0x45);
-+ else
-+ rt2800_rfcsr_write(rt2x00dev, 52, 0x05);
-+
-+ if (rf->channel <= 14) {
-+ pwr1 = info->default_power1 & 0x1f;
-+ pwr2 = info->default_power2 & 0x1f;
-+ pwr3 = info->default_power3 & 0x1f;
-+ } else {
-+ pwr1 = 0x48 | ((info->default_power1 & 0x18) << 1) |
-+ (info->default_power1 & 0x7);
-+ pwr2 = 0x48 | ((info->default_power2 & 0x18) << 1) |
-+ (info->default_power2 & 0x7);
-+ pwr3 = 0x48 | ((info->default_power3 & 0x18) << 1) |
-+ (info->default_power3 & 0x7);
-+ }
-+
-+ rt2800_rfcsr_write(rt2x00dev, 53, pwr1);
-+ rt2800_rfcsr_write(rt2x00dev, 54, pwr2);
-+ rt2800_rfcsr_write(rt2x00dev, 55, pwr3);
-+
-+ rt2x00_dbg(rt2x00dev, "Channel:%d, pwr1:%02x, pwr2:%02x, pwr3:%02x\n",
-+ rf->channel, pwr1, pwr2, pwr3);
-+
-+ bbp = (info->default_power1 >> 5) |
-+ ((info->default_power2 & 0xe0) >> 1);
-+ rt2800_bbp_write(rt2x00dev, 109, bbp);
-+
-+ bbp = rt2800_bbp_read(rt2x00dev, 110);
-+ bbp &= 0x0f;
-+ bbp |= (info->default_power3 & 0xe0) >> 1;
-+ rt2800_bbp_write(rt2x00dev, 110, bbp);
-+
-+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 57);
-+ if (rf->channel <= 14)
-+ rt2800_rfcsr_write(rt2x00dev, 57, 0x6e);
-+ else
-+ rt2800_rfcsr_write(rt2x00dev, 57, 0x3e);
-+
-+ /* Enable RF tuning */
-+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 3);
-+ rt2x00_set_field8(&rfcsr, RFCSR3_VCOCAL_EN, 1);
-+ rt2800_rfcsr_write(rt2x00dev, 3, rfcsr);
-+
-+ udelay(2000);
-+
-+ bbp = rt2800_bbp_read(rt2x00dev, 49);
-+ /* clear update flag */
-+ rt2800_bbp_write(rt2x00dev, 49, bbp & 0xfe);
-+ rt2800_bbp_write(rt2x00dev, 49, bbp);
-+
-+ /* TODO: add calibration for TxBF */
-+}
-+
- #define POWER_BOUND 0x27
- #define POWER_BOUND_5G 0x2b
-
-@@ -3683,19 +3893,51 @@ static char rt2800_txpower_to_dev(struct
- unsigned int channel,
- char txpower)
- {
-- if (rt2x00_rt(rt2x00dev, RT3593))
-+ if (rt2x00_rt(rt2x00dev, RT3593) ||
-+ rt2x00_rt(rt2x00dev, RT3883))
- txpower = rt2x00_get_field8(txpower, EEPROM_TXPOWER_ALC);
-
- if (channel <= 14)
- return clamp_t(char, txpower, MIN_G_TXPOWER, MAX_G_TXPOWER);
-
-- if (rt2x00_rt(rt2x00dev, RT3593))
-+ if (rt2x00_rt(rt2x00dev, RT3593) ||
-+ rt2x00_rt(rt2x00dev, RT3883))
- return clamp_t(char, txpower, MIN_A_TXPOWER_3593,
- MAX_A_TXPOWER_3593);
- else
- return clamp_t(char, txpower, MIN_A_TXPOWER, MAX_A_TXPOWER);
- }
-
-+static void rt3883_bbp_adjust(struct rt2x00_dev *rt2x00dev,
-+ struct rf_channel *rf)
-+{
-+ u8 bbp;
-+
-+ bbp = (rf->channel > 14) ? 0x48 : 0x38;
-+ rt2800_bbp_write_with_rx_chain(rt2x00dev, 66, bbp);
-+
-+ rt2800_bbp_write(rt2x00dev, 69, 0x12);
-+
-+ if (rf->channel <= 14) {
-+ rt2800_bbp_write(rt2x00dev, 70, 0x0a);
-+ } else {
-+ /* Disable CCK packet detection */
-+ rt2800_bbp_write(rt2x00dev, 70, 0x00);
-+ }
-+
-+ rt2800_bbp_write(rt2x00dev, 73, 0x10);
-+
-+ if (rf->channel > 14) {
-+ rt2800_bbp_write(rt2x00dev, 62, 0x1d);
-+ rt2800_bbp_write(rt2x00dev, 63, 0x1d);
-+ rt2800_bbp_write(rt2x00dev, 64, 0x1d);
-+ } else {
-+ rt2800_bbp_write(rt2x00dev, 62, 0x2d);
-+ rt2800_bbp_write(rt2x00dev, 63, 0x2d);
-+ rt2800_bbp_write(rt2x00dev, 64, 0x2d);
-+ }
-+}
-+
- static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
- struct ieee80211_conf *conf,
- struct rf_channel *rf,
-@@ -3714,6 +3956,12 @@ static void rt2800_config_channel(struct
- rt2800_txpower_to_dev(rt2x00dev, rf->channel,
- info->default_power3);
-
-+ switch (rt2x00dev->chip.rt) {
-+ case RT3883:
-+ rt3883_bbp_adjust(rt2x00dev, rf);
-+ break;
-+ }
-+
- switch (rt2x00dev->chip.rf) {
- case RF2020:
- case RF3020:
-@@ -3734,6 +3982,9 @@ static void rt2800_config_channel(struct
- case RF3322:
- rt2800_config_channel_rf3322(rt2x00dev, conf, rf, info);
- break;
-+ case RF3853:
-+ rt2800_config_channel_rf3853(rt2x00dev, conf, rf, info);
-+ break;
- case RF3070:
- case RF5350:
- case RF5360:
-@@ -3815,6 +4066,15 @@ static void rt2800_config_channel(struct
- rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain);
- rt2800_bbp_write(rt2x00dev, 64, 0x37 - rt2x00dev->lna_gain);
- rt2800_bbp_write(rt2x00dev, 77, 0x98);
-+ } else if (rt2x00_rt(rt2x00dev, RT3883)) {
-+ rt2800_bbp_write(rt2x00dev, 62, 0x37 - rt2x00dev->lna_gain);
-+ rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain);
-+ rt2800_bbp_write(rt2x00dev, 64, 0x37 - rt2x00dev->lna_gain);
-+
-+ if (rt2x00dev->default_ant.rx_chain_num > 1)
-+ rt2800_bbp_write(rt2x00dev, 86, 0x46);
-+ else
-+ rt2800_bbp_write(rt2x00dev, 86, 0);
- } else {
- rt2800_bbp_write(rt2x00dev, 62, 0x37 - rt2x00dev->lna_gain);
- rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain);
-@@ -3828,6 +4088,7 @@ static void rt2800_config_channel(struct
- !rt2x00_rt(rt2x00dev, RT6352)) {
- if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
- rt2800_bbp_write(rt2x00dev, 82, 0x62);
-+ rt2800_bbp_write(rt2x00dev, 82, 0x62);
- rt2800_bbp_write(rt2x00dev, 75, 0x46);
- } else {
- if (rt2x00_rt(rt2x00dev, RT3593))
-@@ -3836,19 +4097,22 @@ static void rt2800_config_channel(struct
- rt2800_bbp_write(rt2x00dev, 82, 0x84);
- rt2800_bbp_write(rt2x00dev, 75, 0x50);
- }
-- if (rt2x00_rt(rt2x00dev, RT3593))
-+ if (rt2x00_rt(rt2x00dev, RT3593) ||
-+ rt2x00_rt(rt2x00dev, RT3883))
- rt2800_bbp_write(rt2x00dev, 83, 0x8a);
- }
-
- } else {
- if (rt2x00_rt(rt2x00dev, RT3572))
- rt2800_bbp_write(rt2x00dev, 82, 0x94);
-- else if (rt2x00_rt(rt2x00dev, RT3593))
-+ else if (rt2x00_rt(rt2x00dev, RT3593) ||
-+ rt2x00_rt(rt2x00dev, RT3883))
- rt2800_bbp_write(rt2x00dev, 82, 0x82);
- else if (!rt2x00_rt(rt2x00dev, RT6352))
- rt2800_bbp_write(rt2x00dev, 82, 0xf2);
-
-- if (rt2x00_rt(rt2x00dev, RT3593))
-+ if (rt2x00_rt(rt2x00dev, RT3593) ||
-+ rt2x00_rt(rt2x00dev, RT3883))
- rt2800_bbp_write(rt2x00dev, 83, 0x9a);
-
- if (rt2x00_has_cap_external_lna_a(rt2x00dev))
-@@ -3984,6 +4248,23 @@ static void rt2800_config_channel(struct
- usleep_range(1000, 1500);
- }
-
-+ if (rt2x00_rt(rt2x00dev, RT3883)) {
-+ if (!conf_is_ht40(conf))
-+ rt2800_bbp_write(rt2x00dev, 105, 0x34);
-+ else
-+ rt2800_bbp_write(rt2x00dev, 105, 0x04);
-+
-+ /* AGC init */
-+ if (rf->channel <= 14)
-+ reg = 0x2e + rt2x00dev->lna_gain;
-+ else
-+ reg = 0x20 + ((rt2x00dev->lna_gain * 5) / 3);
-+
-+ rt2800_bbp_write_with_rx_chain(rt2x00dev, 66, reg);
-+
-+ usleep_range(1000, 1500);
-+ }
-+
- if (rt2x00_rt(rt2x00dev, RT5592) || rt2x00_rt(rt2x00dev, RT6352)) {
- reg = 0x10;
- if (!conf_is_ht40(conf)) {
-@@ -4243,6 +4524,9 @@ static u8 rt2800_compensate_txpower(stru
- if (rt2x00_rt(rt2x00dev, RT3593))
- return min_t(u8, txpower, 0xc);
-
-+ if (rt2x00_rt(rt2x00dev, RT3883))
-+ return min_t(u8, txpower, 0xf);
-+
- if (rt2x00_has_cap_power_limit(rt2x00dev)) {
- /*
- * Check if eirp txpower exceed txpower_limit.
-@@ -5004,7 +5288,8 @@ static void rt2800_config_txpower(struct
- struct ieee80211_channel *chan,
- int power_level)
- {
-- if (rt2x00_rt(rt2x00dev, RT3593))
-+ if (rt2x00_rt(rt2x00dev, RT3593) ||
-+ rt2x00_rt(rt2x00dev, RT3883))
- rt2800_config_txpower_rt3593(rt2x00dev, chan, power_level);
- else if (rt2x00_rt(rt2x00dev, RT6352))
- rt2800_config_txpower_rt6352(rt2x00dev, chan, power_level);
-@@ -5051,6 +5336,7 @@ void rt2800_vco_calibration(struct rt2x0
- case RF3053:
- case RF3070:
- case RF3290:
-+ case RF3853:
- case RF5350:
- case RF5360:
- case RF5362:
-@@ -5251,7 +5537,8 @@ static u8 rt2800_get_default_vgc(struct
- else
- vgc = 0x2e + rt2x00dev->lna_gain;
- } else { /* 5GHZ band */
-- if (rt2x00_rt(rt2x00dev, RT3593))
-+ if (rt2x00_rt(rt2x00dev, RT3593) ||
-+ rt2x00_rt(rt2x00dev, RT3883))
- vgc = 0x20 + (rt2x00dev->lna_gain * 5) / 3;
- else if (rt2x00_rt(rt2x00dev, RT5592))
- vgc = 0x24 + (2 * rt2x00dev->lna_gain);
-@@ -5271,7 +5558,8 @@ static inline void rt2800_set_vgc(struct
- {
- if (qual->vgc_level != vgc_level) {
- if (rt2x00_rt(rt2x00dev, RT3572) ||
-- rt2x00_rt(rt2x00dev, RT3593)) {
-+ rt2x00_rt(rt2x00dev, RT3593) ||
-+ rt2x00_rt(rt2x00dev, RT3883)) {
- rt2800_bbp_write_with_rx_chain(rt2x00dev, 66,
- vgc_level);
- } else if (rt2x00_rt(rt2x00dev, RT5592)) {
-@@ -5318,6 +5606,11 @@ void rt2800_link_tuner(struct rt2x00_dev
- }
- break;
-
-+ case RT3883:
-+ if (qual->rssi > -65)
-+ vgc += 0x10;
-+ break;
-+
- case RT5592:
- if (qual->rssi > -65)
- vgc += 0x20;
-@@ -5470,6 +5763,12 @@ static int rt2800_init_registers(struct
- rt2800_register_write(rt2x00dev, TX_SW_CFG2,
- 0x00000000);
- }
-+ } else if (rt2x00_rt(rt2x00dev, RT3883)) {
-+ rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000402);
-+ rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00000000);
-+ rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00040000);
-+ rt2800_register_write(rt2x00dev, TX_TXBF_CFG_0, 0x8000fc21);
-+ rt2800_register_write(rt2x00dev, TX_TXBF_CFG_3, 0x00009c40);
- } else if (rt2x00_rt(rt2x00dev, RT5390) ||
- rt2x00_rt(rt2x00dev, RT5392) ||
- rt2x00_rt(rt2x00dev, RT6352)) {
-@@ -5683,6 +5982,11 @@ static int rt2800_init_registers(struct
- reg = rt2x00_rt(rt2x00dev, RT5592) ? 0x00000082 : 0x00000002;
- rt2800_register_write(rt2x00dev, TXOP_HLDR_ET, reg);
-
-+ if (rt2x00_rt(rt2x00dev, RT3883)) {
-+ rt2800_register_write(rt2x00dev, TX_FBK_CFG_3S_0, 0x12111008);
-+ rt2800_register_write(rt2x00dev, TX_FBK_CFG_3S_1, 0x16151413);
-+ }
-+
- reg = rt2800_register_read(rt2x00dev, TX_RTS_CFG);
- rt2x00_set_field32(&reg, TX_RTS_CFG_AUTO_RTS_RETRY_LIMIT, 7);
- rt2x00_set_field32(&reg, TX_RTS_CFG_RTS_THRES,
-@@ -6299,6 +6603,47 @@ static void rt2800_init_bbp_3593(struct
- rt2800_bbp_write(rt2x00dev, 103, 0xc0);
- }
-
-+static void rt2800_init_bbp_3883(struct rt2x00_dev *rt2x00dev)
-+{
-+ rt2800_init_bbp_early(rt2x00dev);
-+
-+ rt2800_bbp_write(rt2x00dev, 4, 0x50);
-+ rt2800_bbp_write(rt2x00dev, 47, 0x48);
-+
-+ rt2800_bbp_write(rt2x00dev, 86, 0x46);
-+ rt2800_bbp_write(rt2x00dev, 88, 0x90);
-+
-+ rt2800_bbp_write(rt2x00dev, 92, 0x02);
-+
-+ rt2800_bbp_write(rt2x00dev, 103, 0xc0);
-+ rt2800_bbp_write(rt2x00dev, 104, 0x92);
-+ rt2800_bbp_write(rt2x00dev, 105, 0x34);
-+ rt2800_bbp_write(rt2x00dev, 106, 0x12);
-+ rt2800_bbp_write(rt2x00dev, 120, 0x50);
-+ rt2800_bbp_write(rt2x00dev, 137, 0x0f);
-+ rt2800_bbp_write(rt2x00dev, 163, 0x9d);
-+
-+ /* Set ITxBF timeout to 0x9C40=1000msec */
-+ rt2800_bbp_write(rt2x00dev, 179, 0x02);
-+ rt2800_bbp_write(rt2x00dev, 180, 0x00);
-+ rt2800_bbp_write(rt2x00dev, 182, 0x40);
-+ rt2800_bbp_write(rt2x00dev, 180, 0x01);
-+ rt2800_bbp_write(rt2x00dev, 182, 0x9c);
-+
-+ rt2800_bbp_write(rt2x00dev, 179, 0x00);
-+
-+ /* Reprogram the inband interface to put right values in RXWI */
-+ rt2800_bbp_write(rt2x00dev, 142, 0x04);
-+ rt2800_bbp_write(rt2x00dev, 143, 0x3b);
-+ rt2800_bbp_write(rt2x00dev, 142, 0x06);
-+ rt2800_bbp_write(rt2x00dev, 143, 0xa0);
-+ rt2800_bbp_write(rt2x00dev, 142, 0x07);
-+ rt2800_bbp_write(rt2x00dev, 143, 0xa1);
-+ rt2800_bbp_write(rt2x00dev, 142, 0x08);
-+ rt2800_bbp_write(rt2x00dev, 143, 0xa2);
-+ rt2800_bbp_write(rt2x00dev, 148, 0xc8);
-+}
-+
- static void rt2800_init_bbp_53xx(struct rt2x00_dev *rt2x00dev)
- {
- int ant, div_mode;
-@@ -6743,6 +7088,9 @@ static void rt2800_init_bbp(struct rt2x0
- case RT3593:
- rt2800_init_bbp_3593(rt2x00dev);
- return;
-+ case RT3883:
-+ rt2800_init_bbp_3883(rt2x00dev);
-+ return;
- case RT5390:
- case RT5392:
- rt2800_init_bbp_53xx(rt2x00dev);
-@@ -7614,6 +7962,144 @@ static void rt2800_init_rfcsr_5350(struc
- rt2800_rfcsr_write(rt2x00dev, 63, 0x00);
- }
-
-+static void rt2800_init_rfcsr_3883(struct rt2x00_dev *rt2x00dev)
-+{
-+ u8 rfcsr;
-+
-+ /* TODO: get the actual ECO value from the SoC */
-+ const unsigned int eco = 5;
-+
-+ rt2800_rf_init_calibration(rt2x00dev, 2);
-+
-+ rt2800_rfcsr_write(rt2x00dev, 0, 0xe0);
-+ rt2800_rfcsr_write(rt2x00dev, 1, 0x03);
-+ rt2800_rfcsr_write(rt2x00dev, 2, 0x50);
-+ rt2800_rfcsr_write(rt2x00dev, 3, 0x20);
-+ rt2800_rfcsr_write(rt2x00dev, 4, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 5, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 6, 0x40);
-+ rt2800_rfcsr_write(rt2x00dev, 7, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 8, 0x5b);
-+ rt2800_rfcsr_write(rt2x00dev, 9, 0x08);
-+ rt2800_rfcsr_write(rt2x00dev, 10, 0xd3);
-+ rt2800_rfcsr_write(rt2x00dev, 11, 0x48);
-+ rt2800_rfcsr_write(rt2x00dev, 12, 0x1a);
-+ rt2800_rfcsr_write(rt2x00dev, 13, 0x12);
-+ rt2800_rfcsr_write(rt2x00dev, 14, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 15, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 16, 0x00);
-+
-+ /* RFCSR 17 will be initialized later based on the
-+ * frequency offset stored in the EEPROM
-+ */
-+
-+ rt2800_rfcsr_write(rt2x00dev, 18, 0x40);
-+ rt2800_rfcsr_write(rt2x00dev, 19, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 20, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 21, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 22, 0x20);
-+ rt2800_rfcsr_write(rt2x00dev, 23, 0xc0);
-+ rt2800_rfcsr_write(rt2x00dev, 24, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 25, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 26, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 27, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 28, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 29, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 30, 0x10);
-+ rt2800_rfcsr_write(rt2x00dev, 31, 0x80);
-+ rt2800_rfcsr_write(rt2x00dev, 32, 0x80);
-+ rt2800_rfcsr_write(rt2x00dev, 33, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 34, 0x20);
-+ rt2800_rfcsr_write(rt2x00dev, 35, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 36, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 37, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 38, 0x86);
-+ rt2800_rfcsr_write(rt2x00dev, 39, 0x23);
-+ rt2800_rfcsr_write(rt2x00dev, 40, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 41, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 42, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 43, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 44, 0x93);
-+ rt2800_rfcsr_write(rt2x00dev, 45, 0xbb);
-+ rt2800_rfcsr_write(rt2x00dev, 46, 0x60);
-+ rt2800_rfcsr_write(rt2x00dev, 47, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 48, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 49, 0x8e);
-+ rt2800_rfcsr_write(rt2x00dev, 50, 0x86);
-+ rt2800_rfcsr_write(rt2x00dev, 51, 0x51);
-+ rt2800_rfcsr_write(rt2x00dev, 52, 0x05);
-+ rt2800_rfcsr_write(rt2x00dev, 53, 0x76);
-+ rt2800_rfcsr_write(rt2x00dev, 54, 0x76);
-+ rt2800_rfcsr_write(rt2x00dev, 55, 0x76);
-+ rt2800_rfcsr_write(rt2x00dev, 56, 0xdb);
-+ rt2800_rfcsr_write(rt2x00dev, 57, 0x3e);
-+ rt2800_rfcsr_write(rt2x00dev, 58, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 59, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 60, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 61, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 62, 0x00);
-+ rt2800_rfcsr_write(rt2x00dev, 63, 0x00);
-+
-+ /* TODO: rx filter calibration? */
-+
-+ rt2800_bbp_write(rt2x00dev, 137, 0x0f);
-+
-+ rt2800_bbp_write(rt2x00dev, 163, 0x9d);
-+
-+ rt2800_bbp_write(rt2x00dev, 105, 0x05);
-+
-+ rt2800_bbp_write(rt2x00dev, 179, 0x02);
-+ rt2800_bbp_write(rt2x00dev, 180, 0x00);
-+ rt2800_bbp_write(rt2x00dev, 182, 0x40);
-+ rt2800_bbp_write(rt2x00dev, 180, 0x01);
-+ rt2800_bbp_write(rt2x00dev, 182, 0x9c);
-+
-+ rt2800_bbp_write(rt2x00dev, 179, 0x00);
-+
-+ rt2800_bbp_write(rt2x00dev, 142, 0x04);
-+ rt2800_bbp_write(rt2x00dev, 143, 0x3b);
-+ rt2800_bbp_write(rt2x00dev, 142, 0x06);
-+ rt2800_bbp_write(rt2x00dev, 143, 0xa0);
-+ rt2800_bbp_write(rt2x00dev, 142, 0x07);
-+ rt2800_bbp_write(rt2x00dev, 143, 0xa1);
-+ rt2800_bbp_write(rt2x00dev, 142, 0x08);
-+ rt2800_bbp_write(rt2x00dev, 143, 0xa2);
-+ rt2800_bbp_write(rt2x00dev, 148, 0xc8);
-+
-+ if (eco == 5) {
-+ rt2800_rfcsr_write(rt2x00dev, 32, 0xd8);
-+ rt2800_rfcsr_write(rt2x00dev, 33, 0x32);
-+ }
-+
-+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 2);
-+ rt2x00_set_field8(&rfcsr, RFCSR2_RESCAL_BP, 0);
-+ rt2x00_set_field8(&rfcsr, RFCSR2_RESCAL_EN, 1);
-+ rt2800_rfcsr_write(rt2x00dev, 2, rfcsr);
-+ msleep(1);
-+ rt2x00_set_field8(&rfcsr, RFCSR2_RESCAL_EN, 0);
-+ rt2800_rfcsr_write(rt2x00dev, 2, rfcsr);
-+
-+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 1);
-+ rt2x00_set_field8(&rfcsr, RFCSR1_RF_BLOCK_EN, 1);
-+ rt2800_rfcsr_write(rt2x00dev, 1, rfcsr);
-+
-+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 6);
-+ rfcsr |= 0xc0;
-+ rt2800_rfcsr_write(rt2x00dev, 6, rfcsr);
-+
-+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 22);
-+ rfcsr |= 0x20;
-+ rt2800_rfcsr_write(rt2x00dev, 22, rfcsr);
-+
-+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 46);
-+ rfcsr |= 0x20;
-+ rt2800_rfcsr_write(rt2x00dev, 46, rfcsr);
-+
-+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 20);
-+ rfcsr &= ~0xee;
-+ rt2800_rfcsr_write(rt2x00dev, 20, rfcsr);
-+}
-+
- static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev)
- {
- rt2800_rf_init_calibration(rt2x00dev, 2);
-@@ -8456,6 +8942,9 @@ static void rt2800_init_rfcsr(struct rt2
- case RT3390:
- rt2800_init_rfcsr_3390(rt2x00dev);
- break;
-+ case RT3883:
-+ rt2800_init_rfcsr_3883(rt2x00dev);
-+ break;
- case RT3572:
- rt2800_init_rfcsr_3572(rt2x00dev);
- break;
-@@ -8661,7 +9150,8 @@ static u8 rt2800_get_txmixer_gain_24g(st
- {
- u16 word;
-
-- if (rt2x00_rt(rt2x00dev, RT3593))
-+ if (rt2x00_rt(rt2x00dev, RT3593) ||
-+ rt2x00_rt(rt2x00dev, RT3883))
- return 0;
-
- word = rt2800_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_BG);
-@@ -8675,7 +9165,8 @@ static u8 rt2800_get_txmixer_gain_5g(str
- {
- u16 word;
-
-- if (rt2x00_rt(rt2x00dev, RT3593))
-+ if (rt2x00_rt(rt2x00dev, RT3593) ||
-+ rt2x00_rt(rt2x00dev, RT3883))
- return 0;
-
- word = rt2800_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_A);
-@@ -8781,7 +9272,8 @@ static int rt2800_validate_eeprom(struct
- word = rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2);
- if (abs(rt2x00_get_field16(word, EEPROM_RSSI_BG2_OFFSET2)) > 10)
- rt2x00_set_field16(&word, EEPROM_RSSI_BG2_OFFSET2, 0);
-- if (!rt2x00_rt(rt2x00dev, RT3593)) {
-+ if (!rt2x00_rt(rt2x00dev, RT3593) &&
-+ !rt2x00_rt(rt2x00dev, RT3883)) {
- if (rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0x00 ||
- rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0xff)
- rt2x00_set_field16(&word, EEPROM_RSSI_BG2_LNA_A1,
-@@ -8801,7 +9293,8 @@ static int rt2800_validate_eeprom(struct
- word = rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A2);
- if (abs(rt2x00_get_field16(word, EEPROM_RSSI_A2_OFFSET2)) > 10)
- rt2x00_set_field16(&word, EEPROM_RSSI_A2_OFFSET2, 0);
-- if (!rt2x00_rt(rt2x00dev, RT3593)) {
-+ if (!rt2x00_rt(rt2x00dev, RT3593) &&
-+ !rt2x00_rt(rt2x00dev, RT3883)) {
- if (rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0x00 ||
- rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0xff)
- rt2x00_set_field16(&word, EEPROM_RSSI_A2_LNA_A2,
-@@ -8809,7 +9302,8 @@ static int rt2800_validate_eeprom(struct
- }
- rt2800_eeprom_write(rt2x00dev, EEPROM_RSSI_A2, word);
-
-- if (rt2x00_rt(rt2x00dev, RT3593)) {
-+ if (rt2x00_rt(rt2x00dev, RT3593) ||
-+ rt2x00_rt(rt2x00dev, RT3883)) {
- word = rt2800_eeprom_read(rt2x00dev, EEPROM_EXT_LNA2);
- if (rt2x00_get_field16(word, EEPROM_EXT_LNA2_A1) == 0x00 ||
- rt2x00_get_field16(word, EEPROM_EXT_LNA2_A1) == 0xff)
-@@ -8848,6 +9342,8 @@ static int rt2800_init_eeprom(struct rt2
- rf = rt2800_eeprom_read(rt2x00dev, EEPROM_CHIP_ID);
- else if (rt2x00_rt(rt2x00dev, RT3352))
- rf = RF3322;
-+ else if (rt2x00_rt(rt2x00dev, RT3883))
-+ rf = RF3853;
- else if (rt2x00_rt(rt2x00dev, RT5350))
- rf = RF5350;
- else
-@@ -8868,6 +9364,7 @@ static int rt2800_init_eeprom(struct rt2
- case RF3290:
- case RF3320:
- case RF3322:
-+ case RF3853:
- case RF5350:
- case RF5360:
- case RF5362:
-@@ -9154,6 +9651,66 @@ static const struct rf_channel rf_vals_3
- {14, 0xF0, 2, 0x18},
- };
-
-+static const struct rf_channel rf_vals_3853[] = {
-+ {1, 241, 6, 2},
-+ {2, 241, 6, 7},
-+ {3, 242, 6, 2},
-+ {4, 242, 6, 7},
-+ {5, 243, 6, 2},
-+ {6, 243, 6, 7},
-+ {7, 244, 6, 2},
-+ {8, 244, 6, 7},
-+ {9, 245, 6, 2},
-+ {10, 245, 6, 7},
-+ {11, 246, 6, 2},
-+ {12, 246, 6, 7},
-+ {13, 247, 6, 2},
-+ {14, 248, 6, 4},
-+
-+ {36, 0x56, 8, 4},
-+ {38, 0x56, 8, 6},
-+ {40, 0x56, 8, 8},
-+ {44, 0x57, 8, 0},
-+ {46, 0x57, 8, 2},
-+ {48, 0x57, 8, 4},
-+ {52, 0x57, 8, 8},
-+ {54, 0x57, 8, 10},
-+ {56, 0x58, 8, 0},
-+ {60, 0x58, 8, 4},
-+ {62, 0x58, 8, 6},
-+ {64, 0x58, 8, 8},
-+
-+ {100, 0x5b, 8, 8},
-+ {102, 0x5b, 8, 10},
-+ {104, 0x5c, 8, 0},
-+ {108, 0x5c, 8, 4},
-+ {110, 0x5c, 8, 6},
-+ {112, 0x5c, 8, 8},
-+ {114, 0x5c, 8, 10},
-+ {116, 0x5d, 8, 0},
-+ {118, 0x5d, 8, 2},
-+ {120, 0x5d, 8, 4},
-+ {124, 0x5d, 8, 8},
-+ {126, 0x5d, 8, 10},
-+ {128, 0x5e, 8, 0},
-+ {132, 0x5e, 8, 4},
-+ {134, 0x5e, 8, 6},
-+ {136, 0x5e, 8, 8},
-+ {140, 0x5f, 8, 0},
-+
-+ {149, 0x5f, 8, 9},
-+ {151, 0x5f, 8, 11},
-+ {153, 0x60, 8, 1},
-+ {157, 0x60, 8, 5},
-+ {159, 0x60, 8, 7},
-+ {161, 0x60, 8, 9},
-+ {165, 0x61, 8, 1},
-+ {167, 0x61, 8, 3},
-+ {169, 0x61, 8, 5},
-+ {171, 0x61, 8, 7},
-+ {173, 0x61, 8, 9},
-+};
-+
- static const struct rf_channel rf_vals_5592_xtal20[] = {
- /* Channel, N, K, mod, R */
- {1, 482, 4, 10, 3},
-@@ -9417,6 +9974,11 @@ static int rt2800_probe_hw_mode(struct r
- spec->channels = rf_vals_3x;
- break;
-
-+ case RF3853:
-+ spec->num_channels = ARRAY_SIZE(rf_vals_3853);
-+ spec->channels = rf_vals_3853;
-+ break;
-+
- case RF5592:
- reg = rt2800_register_read(rt2x00dev, MAC_DEBUG_INDEX);
- if (rt2x00_get_field32(reg, MAC_DEBUG_INDEX_XTAL)) {
-@@ -9536,6 +10098,7 @@ static int rt2800_probe_hw_mode(struct r
- case RF3053:
- case RF3070:
- case RF3290:
-+ case RF3853:
- case RF5350:
- case RF5360:
- case RF5362:
-@@ -9578,6 +10141,7 @@ static int rt2800_probe_rt(struct rt2x00
- case RT3390:
- case RT3572:
- case RT3593:
-+ case RT3883:
- case RT5350:
- case RT5390:
- case RT5392:
---- a/drivers/net/wireless/ralink/rt2x00/rt2800soc.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800soc.c
-@@ -51,9 +51,16 @@ static bool rt2800soc_hwcrypt_disabled(s
-
- static void rt2800soc_disable_radio(struct rt2x00_dev *rt2x00dev)
- {
-+ u32 reg;
-+
- rt2800_disable_radio(rt2x00dev);
- rt2x00mmio_register_write(rt2x00dev, PWR_PIN_CFG, 0);
-- rt2x00mmio_register_write(rt2x00dev, TX_PIN_CFG, 0);
-+
-+ reg = 0;
-+ if (rt2x00_rt(rt2x00dev, RT3883))
-+ rt2x00_set_field32(&reg, TX_PIN_CFG_RFTR_EN, 1);
-+
-+ rt2x00mmio_register_write(rt2x00dev, TX_PIN_CFG, reg);
- }
-
- static int rt2800soc_set_device_state(struct rt2x00_dev *rt2x00dev,
diff --git a/package/kernel/mac80211/patches/rt2x00/100-rt2x00_options.patch b/package/kernel/mac80211/patches/rt2x00/100-rt2x00_options.patch
index 9dd348151c..295904c64e 100644
--- a/package/kernel/mac80211/patches/rt2x00/100-rt2x00_options.patch
+++ b/package/kernel/mac80211/patches/rt2x00/100-rt2x00_options.patch
@@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ralink/rt2x00/Kconfig
+++ b/drivers/net/wireless/ralink/rt2x00/Kconfig
-@@ -225,36 +225,37 @@ config RT2800SOC
+@@ -226,36 +226,37 @@ config RT2800SOC
config RT2800_LIB
diff --git a/package/kernel/mac80211/patches/rt2x00/501-rt2x00-allow-to-build-rt2800soc-module-for-RT3883.patch b/package/kernel/mac80211/patches/rt2x00/501-rt2x00-allow-to-build-rt2800soc-module-for-RT3883.patch
index 699989baa0..b4106b0197 100644
--- a/package/kernel/mac80211/patches/rt2x00/501-rt2x00-allow-to-build-rt2800soc-module-for-RT3883.patch
+++ b/package/kernel/mac80211/patches/rt2x00/501-rt2x00-allow-to-build-rt2800soc-module-for-RT3883.patch
@@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
--- a/drivers/net/wireless/ralink/rt2x00/Kconfig
+++ b/drivers/net/wireless/ralink/rt2x00/Kconfig
-@@ -210,7 +210,7 @@ endif
+@@ -211,7 +211,7 @@ endif
config RT2800SOC
tristate "Ralink WiSoC support"
depends on m
@@ -19,7 +19,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
select RT2X00_LIB_SOC
select RT2X00_LIB_MMIO
select RT2X00_LIB_CRYPTO
-@@ -245,7 +245,7 @@ config RT2X00_LIB_PCI
+@@ -246,7 +246,7 @@ config RT2X00_LIB_PCI
config RT2X00_LIB_SOC
tristate "RT2x00 SoC support"
diff --git a/package/kernel/mac80211/patches/rt2x00/601-rt2x00-introduce-rt2x00_platform_h.patch b/package/kernel/mac80211/patches/rt2x00/601-rt2x00-introduce-rt2x00_platform_h.patch
index 9d47076ff6..f9d48b2b31 100644
--- a/package/kernel/mac80211/patches/rt2x00/601-rt2x00-introduce-rt2x00_platform_h.patch
+++ b/package/kernel/mac80211/patches/rt2x00/601-rt2x00-introduce-rt2x00_platform_h.patch
@@ -22,7 +22,7 @@
+#endif /* _RT2X00_PLATFORM_H */
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-@@ -40,6 +40,7 @@
+@@ -29,6 +29,7 @@
#include <linux/average.h>
#include <linux/usb.h>
#include <linux/clk.h>
diff --git a/package/kernel/mac80211/patches/rt2x00/602-rt2x00-introduce-rt2x00eeprom.patch b/package/kernel/mac80211/patches/rt2x00/602-rt2x00-introduce-rt2x00eeprom.patch
index 697d8188f0..417ef32b3d 100644
--- a/package/kernel/mac80211/patches/rt2x00/602-rt2x00-introduce-rt2x00eeprom.patch
+++ b/package/kernel/mac80211/patches/rt2x00/602-rt2x00-introduce-rt2x00eeprom.patch
@@ -1,6 +1,6 @@
--- a/local-symbols
+++ b/local-symbols
-@@ -305,6 +305,7 @@ RT2X00_LIB_FIRMWARE=
+@@ -311,6 +311,7 @@ RT2X00_LIB_FIRMWARE=
RT2X00_LIB_CRYPTO=
RT2X00_LIB_LEDS=
RT2X00_LIB_DEBUGFS=
@@ -10,7 +10,7 @@
RTL8180=
--- a/drivers/net/wireless/ralink/rt2x00/Kconfig
+++ b/drivers/net/wireless/ralink/rt2x00/Kconfig
-@@ -69,6 +69,7 @@ config RT2800PCI
+@@ -70,6 +70,7 @@ config RT2800PCI
select RT2X00_LIB_MMIO
select RT2X00_LIB_PCI
select RT2X00_LIB_FIRMWARE
@@ -18,7 +18,7 @@
select RT2X00_LIB_CRYPTO
depends on CRC_CCITT
depends on EEPROM_93CX6
-@@ -215,6 +216,7 @@ config RT2800SOC
+@@ -216,6 +217,7 @@ config RT2800SOC
select RT2X00_LIB_MMIO
select RT2X00_LIB_CRYPTO
select RT2X00_LIB_FIRMWARE
@@ -26,7 +26,7 @@
select RT2800_LIB
select RT2800_LIB_MMIO
---help---
-@@ -265,6 +267,9 @@ config RT2X00_LIB_FIRMWARE
+@@ -266,6 +268,9 @@ config RT2X00_LIB_FIRMWARE
config RT2X00_LIB_CRYPTO
bool
@@ -48,7 +48,7 @@
obj-$(CPTCFG_RT2X00_LIB_MMIO) += rt2x00mmio.o
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
-@@ -48,6 +48,8 @@ struct rt2800_drv_data {
+@@ -37,6 +37,8 @@ struct rt2800_drv_data {
struct ieee80211_sta *wcid_to_sta[STA_IDS_SIZE];
};
@@ -57,7 +57,7 @@
struct rt2800_ops {
u32 (*register_read)(struct rt2x00_dev *rt2x00dev,
const unsigned int offset);
-@@ -145,6 +147,15 @@ static inline int rt2800_read_eeprom(str
+@@ -134,6 +136,15 @@ static inline int rt2800_read_eeprom(str
{
const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
@@ -75,7 +75,7 @@
--- a/drivers/net/wireless/ralink/rt2x00/rt2800soc.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800soc.c
-@@ -102,19 +102,6 @@ static int rt2800soc_set_device_state(st
+@@ -90,19 +90,6 @@ static int rt2800soc_set_device_state(st
return retval;
}
@@ -95,7 +95,7 @@
/* Firmware functions */
static char *rt2800soc_get_firmware_name(struct rt2x00_dev *rt2x00dev)
{
-@@ -178,7 +165,6 @@ static const struct rt2800_ops rt2800soc
+@@ -166,7 +153,6 @@ static const struct rt2800_ops rt2800soc
.register_multiread = rt2x00mmio_register_multiread,
.register_multiwrite = rt2x00mmio_register_multiwrite,
.regbusy_read = rt2x00mmio_regbusy_read,
@@ -105,7 +105,7 @@
.drv_init_registers = rt2800mmio_init_registers,
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-@@ -702,6 +702,7 @@ enum rt2x00_capability_flags {
+@@ -691,6 +691,7 @@ enum rt2x00_capability_flags {
REQUIRE_HT_TX_DESC,
REQUIRE_PS_AUTOWAKE,
REQUIRE_DELAYED_RFKILL,
@@ -113,7 +113,7 @@
/*
* Capabilities
-@@ -977,6 +978,11 @@ struct rt2x00_dev {
+@@ -966,6 +967,11 @@ struct rt2x00_dev {
const struct firmware *fw;
/*
@@ -127,7 +127,7 @@
DECLARE_KFIFO_PTR(txstatus_fifo, u32);
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
-@@ -1423,6 +1423,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de
+@@ -1412,6 +1412,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de
INIT_DELAYED_WORK(&rt2x00dev->autowakeup_work, rt2x00lib_autowakeup);
INIT_WORK(&rt2x00dev->sleep_work, rt2x00lib_sleep);
@@ -138,7 +138,7 @@
/*
* Let the driver probe the device to detect the capabilities.
*/
-@@ -1566,6 +1570,11 @@ void rt2x00lib_remove_dev(struct rt2x00_
+@@ -1555,6 +1559,11 @@ void rt2x00lib_remove_dev(struct rt2x00_
* Free the driver data.
*/
kfree(rt2x00dev->drv_data);
@@ -261,7 +261,7 @@
+}
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00lib.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00lib.h
-@@ -297,6 +297,22 @@ static inline void rt2x00lib_free_firmwa
+@@ -286,6 +286,22 @@ static inline void rt2x00lib_free_firmwa
#endif /* CPTCFG_RT2X00_LIB_FIRMWARE */
/*
@@ -286,7 +286,7 @@
#ifdef CPTCFG_RT2X00_LIB_DEBUGFS
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00soc.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00soc.c
-@@ -97,6 +97,7 @@ int rt2x00soc_probe(struct platform_devi
+@@ -86,6 +86,7 @@ int rt2x00soc_probe(struct platform_devi
if (IS_ERR(rt2x00dev->clk))
rt2x00dev->clk = NULL;
diff --git a/package/kernel/mac80211/patches/rt2x00/604-rt2x00-load-eeprom-on-SoC-from-a-mtd-device-defines-.patch b/package/kernel/mac80211/patches/rt2x00/604-rt2x00-load-eeprom-on-SoC-from-a-mtd-device-defines-.patch
index b3e1220b60..08ca7c96fd 100644
--- a/package/kernel/mac80211/patches/rt2x00/604-rt2x00-load-eeprom-on-SoC-from-a-mtd-device-defines-.patch
+++ b/package/kernel/mac80211/patches/rt2x00/604-rt2x00-load-eeprom-on-SoC-from-a-mtd-device-defines-.patch
@@ -12,7 +12,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
--- a/drivers/net/wireless/ralink/rt2x00/Kconfig
+++ b/drivers/net/wireless/ralink/rt2x00/Kconfig
-@@ -219,6 +219,7 @@ config RT2800SOC
+@@ -220,6 +220,7 @@ config RT2800SOC
select RT2X00_LIB_EEPROM
select RT2800_LIB
select RT2800_LIB_MMIO
diff --git a/package/kernel/mac80211/patches/rt2x00/606-rt2x00-allow_disabling_bands_through_platform_data.patch b/package/kernel/mac80211/patches/rt2x00/606-rt2x00-allow_disabling_bands_through_platform_data.patch
index 202dfc0b89..3372e0b3ab 100644
--- a/package/kernel/mac80211/patches/rt2x00/606-rt2x00-allow_disabling_bands_through_platform_data.patch
+++ b/package/kernel/mac80211/patches/rt2x00/606-rt2x00-allow_disabling_bands_through_platform_data.patch
@@ -12,7 +12,7 @@
#endif /* _RT2X00_PLATFORM_H */
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
-@@ -1026,6 +1026,22 @@ static int rt2x00lib_probe_hw_modes(stru
+@@ -1015,6 +1015,22 @@ static int rt2x00lib_probe_hw_modes(stru
unsigned int num_rates;
unsigned int i;
@@ -37,7 +37,7 @@
num_rates += 4;
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-@@ -409,6 +409,7 @@ struct hw_mode_spec {
+@@ -398,6 +398,7 @@ struct hw_mode_spec {
unsigned int supported_bands;
#define SUPPORT_BAND_2GHZ 0x00000001
#define SUPPORT_BAND_5GHZ 0x00000002
diff --git a/package/kernel/mac80211/patches/rt2x00/607-rt2x00-add_platform_data_mac_addr.patch b/package/kernel/mac80211/patches/rt2x00/607-rt2x00-add_platform_data_mac_addr.patch
index b8b0188040..f694b061d8 100644
--- a/package/kernel/mac80211/patches/rt2x00/607-rt2x00-add_platform_data_mac_addr.patch
+++ b/package/kernel/mac80211/patches/rt2x00/607-rt2x00-add_platform_data_mac_addr.patch
@@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
-@@ -1004,8 +1004,13 @@ static void rt2x00lib_rate(struct ieee80
+@@ -993,8 +993,13 @@ static void rt2x00lib_rate(struct ieee80
void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr)
{
@@ -12,7 +12,7 @@
+ ether_addr_copy(eeprom_mac_addr, pdata->mac_address);
+
mac_addr = of_get_mac_address(rt2x00dev->dev->of_node);
- if (mac_addr)
+ if (!IS_ERR(mac_addr))
ether_addr_copy(eeprom_mac_addr, mac_addr);
--- a/include/linux/rt2x00_platform.h
+++ b/include/linux/rt2x00_platform.h
diff --git a/package/kernel/mac80211/patches/rt2x00/608-rt2x00-allow_disabling_bands_through_dts.patch b/package/kernel/mac80211/patches/rt2x00/608-rt2x00-allow_disabling_bands_through_dts.patch
index ca66aa8e3b..07f7d34941 100644
--- a/package/kernel/mac80211/patches/rt2x00/608-rt2x00-allow_disabling_bands_through_dts.patch
+++ b/package/kernel/mac80211/patches/rt2x00/608-rt2x00-allow_disabling_bands_through_dts.patch
@@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
-@@ -1030,6 +1030,16 @@ static int rt2x00lib_probe_hw_modes(stru
+@@ -1019,6 +1019,16 @@ static int rt2x00lib_probe_hw_modes(stru
struct ieee80211_rate *rates;
unsigned int num_rates;
unsigned int i;
diff --git a/package/kernel/mac80211/patches/rt2x00/609-rt2x00-make-wmac-loadable-via-OF-on-rt288x-305x-SoC.patch b/package/kernel/mac80211/patches/rt2x00/609-rt2x00-make-wmac-loadable-via-OF-on-rt288x-305x-SoC.patch
index ed219c801e..4cb892b3df 100644
--- a/package/kernel/mac80211/patches/rt2x00/609-rt2x00-make-wmac-loadable-via-OF-on-rt288x-305x-SoC.patch
+++ b/package/kernel/mac80211/patches/rt2x00/609-rt2x00-make-wmac-loadable-via-OF-on-rt288x-305x-SoC.patch
@@ -13,7 +13,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
--- a/drivers/net/wireless/ralink/rt2x00/rt2800soc.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800soc.c
-@@ -232,10 +232,17 @@ static int rt2800soc_probe(struct platfo
+@@ -220,10 +220,17 @@ static int rt2800soc_probe(struct platfo
return rt2x00soc_probe(pdev, &rt2800soc_ops);
}
diff --git a/package/kernel/mac80211/patches/rt2x00/610-rt2x00-change-led-polarity-from-OF.patch b/package/kernel/mac80211/patches/rt2x00/610-rt2x00-change-led-polarity-from-OF.patch
index f0c079b62b..5ea402f5da 100644
--- a/package/kernel/mac80211/patches/rt2x00/610-rt2x00-change-led-polarity-from-OF.patch
+++ b/package/kernel/mac80211/patches/rt2x00/610-rt2x00-change-led-polarity-from-OF.patch
@@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -36,6 +36,7 @@
+@@ -25,6 +25,7 @@
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/slab.h>
@@ -8,7 +8,7 @@
#include "rt2x00.h"
#include "rt2800lib.h"
-@@ -9458,6 +9459,17 @@ static int rt2800_init_eeprom(struct rt2
+@@ -9447,6 +9448,17 @@ static int rt2800_init_eeprom(struct rt2
rt2800_init_led(rt2x00dev, &rt2x00dev->led_assoc, LED_TYPE_ASSOC);
rt2800_init_led(rt2x00dev, &rt2x00dev->led_qual, LED_TYPE_QUALITY);
@@ -28,7 +28,7 @@
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00leds.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00leds.c
-@@ -109,6 +109,9 @@ static int rt2x00leds_register_led(struc
+@@ -98,6 +98,9 @@ static int rt2x00leds_register_led(struc
led->led_dev.name = name;
led->led_dev.brightness = LED_OFF;
diff --git a/package/kernel/mac80211/patches/rt2x00/611-rt2x00-add-AP+STA-support.patch b/package/kernel/mac80211/patches/rt2x00/611-rt2x00-add-AP+STA-support.patch
index 062b18a63b..453129d66a 100644
--- a/package/kernel/mac80211/patches/rt2x00/611-rt2x00-add-AP+STA-support.patch
+++ b/package/kernel/mac80211/patches/rt2x00/611-rt2x00-add-AP+STA-support.patch
@@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
-@@ -1361,7 +1361,7 @@ static inline void rt2x00lib_set_if_comb
+@@ -1350,7 +1350,7 @@ static inline void rt2x00lib_set_if_comb
*/
if_limit = &rt2x00dev->if_limits_ap;
if_limit->max = rt2x00dev->ops->max_ap_intf;
diff --git a/package/kernel/mac80211/patches/rt2x00/650-rt2x00-add-support-for-external-PA-on-MT7620.patch b/package/kernel/mac80211/patches/rt2x00/650-rt2x00-add-support-for-external-PA-on-MT7620.patch
index 2b6aa43c2d..98eb8c0b7e 100644
--- a/package/kernel/mac80211/patches/rt2x00/650-rt2x00-add-support-for-external-PA-on-MT7620.patch
+++ b/package/kernel/mac80211/patches/rt2x00/650-rt2x00-add-support-for-external-PA-on-MT7620.patch
@@ -20,7 +20,7 @@ Signed-off-by: Tomislav Po=C5=BEega <pozega.tomislav@gmail.com>
--- a/drivers/net/wireless/ralink/rt2x00/rt2800.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800.h
-@@ -2750,6 +2750,7 @@ enum rt2800_eeprom_word {
+@@ -2739,6 +2739,7 @@ enum rt2800_eeprom_word {
#define EEPROM_NIC_CONF2_RX_STREAM FIELD16(0x000f)
#define EEPROM_NIC_CONF2_TX_STREAM FIELD16(0x00f0)
#define EEPROM_NIC_CONF2_CRYSTAL FIELD16(0x0600)
@@ -30,7 +30,7 @@ Signed-off-by: Tomislav Po=C5=BEega <pozega.tomislav@gmail.com>
* EEPROM LNA
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -4290,6 +4290,45 @@ static void rt2800_config_channel(struct
+@@ -4279,6 +4279,45 @@ static void rt2800_config_channel(struct
rt2800_iq_calibrate(rt2x00dev, rf->channel);
}
@@ -76,7 +76,7 @@ Signed-off-by: Tomislav Po=C5=BEega <pozega.tomislav@gmail.com>
bbp = rt2800_bbp_read(rt2x00dev, 4);
rt2x00_set_field8(&bbp, BBP4_BANDWIDTH, 2 * conf_is_ht40(conf));
rt2800_bbp_write(rt2x00dev, 4, bbp);
-@@ -9487,7 +9526,8 @@ static int rt2800_init_eeprom(struct rt2
+@@ -9476,7 +9515,8 @@ static int rt2800_init_eeprom(struct rt2
*/
eeprom = rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1);
@@ -86,7 +86,7 @@ Signed-off-by: Tomislav Po=C5=BEega <pozega.tomislav@gmail.com>
if (rt2x00_get_field16(eeprom,
EEPROM_NIC_CONF1_EXTERNAL_TX0_PA_3352))
__set_bit(CAPABILITY_EXTERNAL_PA_TX0,
-@@ -9498,6 +9538,18 @@ static int rt2800_init_eeprom(struct rt2
+@@ -9487,6 +9527,18 @@ static int rt2800_init_eeprom(struct rt2
&rt2x00dev->cap_flags);
}
diff --git a/package/kernel/mac80211/patches/rt2x00/982-rt2x00-add-rf-self-txdc-calibration.patch b/package/kernel/mac80211/patches/rt2x00/982-rt2x00-add-rf-self-txdc-calibration.patch
index 454f55b1cf..ceec92d928 100644
--- a/package/kernel/mac80211/patches/rt2x00/982-rt2x00-add-rf-self-txdc-calibration.patch
+++ b/package/kernel/mac80211/patches/rt2x00/982-rt2x00-add-rf-self-txdc-calibration.patch
@@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -8349,6 +8349,58 @@ static void rt2800_init_rfcsr_5592(struc
+@@ -8338,6 +8338,58 @@ static void rt2800_init_rfcsr_5592(struc
rt2800_led_open_drain_enable(rt2x00dev);
}
@@ -59,7 +59,7 @@
static void rt2800_bbp_core_soft_reset(struct rt2x00_dev *rt2x00dev,
bool set_bw, bool is_ht40)
{
-@@ -8956,6 +9008,7 @@ static void rt2800_init_rfcsr_6352(struc
+@@ -8945,6 +8997,7 @@ static void rt2800_init_rfcsr_6352(struc
rt2800_rfcsr_write_dccal(rt2x00dev, 5, 0x00);
rt2800_rfcsr_write_dccal(rt2x00dev, 17, 0x7C);
@@ -69,7 +69,7 @@
}
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
-@@ -243,6 +243,7 @@ void rt2800_link_tuner(struct rt2x00_dev
+@@ -232,6 +232,7 @@ void rt2800_link_tuner(struct rt2x00_dev
const u32 count);
void rt2800_gain_calibration(struct rt2x00_dev *rt2x00dev);
void rt2800_vco_calibration(struct rt2x00_dev *rt2x00dev);
@@ -79,7 +79,7 @@
void rt2800_disable_radio(struct rt2x00_dev *rt2x00dev);
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-@@ -572,6 +572,7 @@ struct rt2x00lib_ops {
+@@ -561,6 +561,7 @@ struct rt2x00lib_ops {
struct link_qual *qual, const u32 count);
void (*gain_calibration) (struct rt2x00_dev *rt2x00dev);
void (*vco_calibration) (struct rt2x00_dev *rt2x00dev);
diff --git a/package/kernel/mac80211/patches/rt2x00/983-rt2x00-add-r-calibration.patch b/package/kernel/mac80211/patches/rt2x00/983-rt2x00-add-r-calibration.patch
index 6f0d5b577f..45edee8644 100644
--- a/package/kernel/mac80211/patches/rt2x00/983-rt2x00-add-r-calibration.patch
+++ b/package/kernel/mac80211/patches/rt2x00/983-rt2x00-add-r-calibration.patch
@@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -8401,6 +8401,160 @@ void rt2800_rf_self_txdc_cal(struct rt2x
+@@ -8390,6 +8390,160 @@ void rt2800_rf_self_txdc_cal(struct rt2x
}
EXPORT_SYMBOL_GPL(rt2800_rf_self_txdc_cal);
@@ -161,7 +161,7 @@
static void rt2800_bbp_core_soft_reset(struct rt2x00_dev *rt2x00dev,
bool set_bw, bool is_ht40)
{
-@@ -9008,6 +9162,7 @@ static void rt2800_init_rfcsr_6352(struc
+@@ -8997,6 +9151,7 @@ static void rt2800_init_rfcsr_6352(struc
rt2800_rfcsr_write_dccal(rt2x00dev, 5, 0x00);
rt2800_rfcsr_write_dccal(rt2x00dev, 17, 0x7C);
@@ -171,7 +171,7 @@
rt2800_bw_filter_calibration(rt2x00dev, false);
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
-@@ -244,6 +244,8 @@ void rt2800_link_tuner(struct rt2x00_dev
+@@ -233,6 +233,8 @@ void rt2800_link_tuner(struct rt2x00_dev
void rt2800_gain_calibration(struct rt2x00_dev *rt2x00dev);
void rt2800_vco_calibration(struct rt2x00_dev *rt2x00dev);
void rt2800_rf_self_txdc_cal(struct rt2x00_dev *rt2x00dev);
@@ -182,7 +182,7 @@
void rt2800_disable_radio(struct rt2x00_dev *rt2x00dev);
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-@@ -573,6 +573,8 @@ struct rt2x00lib_ops {
+@@ -562,6 +562,8 @@ struct rt2x00lib_ops {
void (*gain_calibration) (struct rt2x00_dev *rt2x00dev);
void (*vco_calibration) (struct rt2x00_dev *rt2x00dev);
void (*rf_self_txdc_cal) (struct rt2x00_dev *rt2x00dev);
diff --git a/package/kernel/mac80211/patches/rt2x00/984-rt2x00-add-rxdcoc-calibration.patch b/package/kernel/mac80211/patches/rt2x00/984-rt2x00-add-rxdcoc-calibration.patch
index fbeace27da..c6b996782c 100644
--- a/package/kernel/mac80211/patches/rt2x00/984-rt2x00-add-rxdcoc-calibration.patch
+++ b/package/kernel/mac80211/patches/rt2x00/984-rt2x00-add-rxdcoc-calibration.patch
@@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -8555,6 +8555,71 @@ void rt2800_r_calibration(struct rt2x00_
+@@ -8544,6 +8544,71 @@ void rt2800_r_calibration(struct rt2x00_
}
EXPORT_SYMBOL_GPL(rt2800_r_calibration);
@@ -72,7 +72,7 @@
static void rt2800_bbp_core_soft_reset(struct rt2x00_dev *rt2x00dev,
bool set_bw, bool is_ht40)
{
-@@ -9164,6 +9229,7 @@ static void rt2800_init_rfcsr_6352(struc
+@@ -9153,6 +9218,7 @@ static void rt2800_init_rfcsr_6352(struc
rt2800_r_calibration(rt2x00dev);
rt2800_rf_self_txdc_cal(rt2x00dev);
@@ -82,7 +82,7 @@
}
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
-@@ -246,6 +246,7 @@ void rt2800_vco_calibration(struct rt2x0
+@@ -235,6 +235,7 @@ void rt2800_vco_calibration(struct rt2x0
void rt2800_rf_self_txdc_cal(struct rt2x00_dev *rt2x00dev);
int rt2800_calcrcalibrationcode(struct rt2x00_dev *rt2x00dev, int d1, int d2);
void rt2800_r_calibration(struct rt2x00_dev *rt2x00dev);
@@ -92,7 +92,7 @@
void rt2800_disable_radio(struct rt2x00_dev *rt2x00dev);
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-@@ -575,6 +575,7 @@ struct rt2x00lib_ops {
+@@ -564,6 +564,7 @@ struct rt2x00lib_ops {
void (*rf_self_txdc_cal) (struct rt2x00_dev *rt2x00dev);
int (*calcrcalibrationcode) (struct rt2x00_dev *rt2x00dev, int d1, int d2);
void (*r_calibration) (struct rt2x00_dev *rt2x00dev);
diff --git a/package/kernel/mac80211/patches/rt2x00/985-rt2x00-add-rxiq-calibration.patch b/package/kernel/mac80211/patches/rt2x00/985-rt2x00-add-rxiq-calibration.patch
index f469c4ebc7..9881469d99 100644
--- a/package/kernel/mac80211/patches/rt2x00/985-rt2x00-add-rxiq-calibration.patch
+++ b/package/kernel/mac80211/patches/rt2x00/985-rt2x00-add-rxiq-calibration.patch
@@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -8620,6 +8620,386 @@ void rt2800_rxdcoc_calibration(struct rt
+@@ -8609,6 +8609,386 @@ void rt2800_rxdcoc_calibration(struct rt
}
EXPORT_SYMBOL_GPL(rt2800_rxdcoc_calibration);
@@ -387,7 +387,7 @@
static void rt2800_bbp_core_soft_reset(struct rt2x00_dev *rt2x00dev,
bool set_bw, bool is_ht40)
{
-@@ -9232,6 +9612,7 @@ static void rt2800_init_rfcsr_6352(struc
+@@ -9221,6 +9601,7 @@ static void rt2800_init_rfcsr_6352(struc
rt2800_rxdcoc_calibration(rt2x00dev);
rt2800_bw_filter_calibration(rt2x00dev, true);
rt2800_bw_filter_calibration(rt2x00dev, false);
@@ -397,7 +397,7 @@
static void rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev)
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
-@@ -247,6 +247,7 @@ void rt2800_rf_self_txdc_cal(struct rt2x
+@@ -236,6 +236,7 @@ void rt2800_rf_self_txdc_cal(struct rt2x
int rt2800_calcrcalibrationcode(struct rt2x00_dev *rt2x00dev, int d1, int d2);
void rt2800_r_calibration(struct rt2x00_dev *rt2x00dev);
void rt2800_rxdcoc_calibration(struct rt2x00_dev *rt2x00dev);
@@ -407,7 +407,7 @@
void rt2800_disable_radio(struct rt2x00_dev *rt2x00dev);
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-@@ -576,6 +576,7 @@ struct rt2x00lib_ops {
+@@ -565,6 +565,7 @@ struct rt2x00lib_ops {
int (*calcrcalibrationcode) (struct rt2x00_dev *rt2x00dev, int d1, int d2);
void (*r_calibration) (struct rt2x00_dev *rt2x00dev);
void (*rxdcoc_calibration) (struct rt2x00_dev *rt2x00dev);
diff --git a/package/kernel/mac80211/patches/rt2x00/986-rt2x00-add-TX-LOFT-calibration.patch b/package/kernel/mac80211/patches/rt2x00/986-rt2x00-add-TX-LOFT-calibration.patch
index 31a860c1a7..d3118ebb3b 100644
--- a/package/kernel/mac80211/patches/rt2x00/986-rt2x00-add-TX-LOFT-calibration.patch
+++ b/package/kernel/mac80211/patches/rt2x00/986-rt2x00-add-TX-LOFT-calibration.patch
@@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -9000,6 +9000,954 @@ restore_value:
+@@ -8989,6 +8989,954 @@ restore_value:
}
EXPORT_SYMBOL_GPL(rt2800_rxiq_calibration);
@@ -955,7 +955,7 @@
static void rt2800_bbp_core_soft_reset(struct rt2x00_dev *rt2x00dev,
bool set_bw, bool is_ht40)
{
-@@ -9612,6 +10560,7 @@ static void rt2800_init_rfcsr_6352(struc
+@@ -9601,6 +10549,7 @@ static void rt2800_init_rfcsr_6352(struc
rt2800_rxdcoc_calibration(rt2x00dev);
rt2800_bw_filter_calibration(rt2x00dev, true);
rt2800_bw_filter_calibration(rt2x00dev, false);
@@ -965,7 +965,7 @@
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
-@@ -28,6 +28,16 @@
+@@ -17,6 +17,16 @@
#define WCID_START 33
#define WCID_END 222
#define STA_IDS_SIZE (WCID_END - WCID_START + 2)
@@ -982,7 +982,7 @@
/* RT2800 driver data structure */
struct rt2800_drv_data {
-@@ -248,6 +258,7 @@ int rt2800_calcrcalibrationcode(struct r
+@@ -237,6 +247,7 @@ int rt2800_calcrcalibrationcode(struct r
void rt2800_r_calibration(struct rt2x00_dev *rt2x00dev);
void rt2800_rxdcoc_calibration(struct rt2x00_dev *rt2x00dev);
void rt2800_rxiq_calibration(struct rt2x00_dev *rt2x00dev);
@@ -992,7 +992,7 @@
void rt2800_disable_radio(struct rt2x00_dev *rt2x00dev);
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-@@ -577,6 +577,7 @@ struct rt2x00lib_ops {
+@@ -566,6 +566,7 @@ struct rt2x00lib_ops {
void (*r_calibration) (struct rt2x00_dev *rt2x00dev);
void (*rxdcoc_calibration) (struct rt2x00_dev *rt2x00dev);
void (*rxiq_calibration) (struct rt2x00_dev *rt2x00dev);