diff --git a/package/kernel/mac80211/patches/subsys/373-mac80211-support-Rx-timestamp-calculation-for-all-pr.patch b/package/kernel/mac80211/patches/subsys/373-mac80211-support-Rx-timestamp-calculation-for-all-pr.patch new file mode 100644 index 0000000000..c432d77b2e --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/373-mac80211-support-Rx-timestamp-calculation-for-all-pr.patch @@ -0,0 +1,134 @@ +From: Avraham Stern +Date: Sun, 6 Dec 2020 14:54:45 +0200 +Subject: [PATCH] mac80211: support Rx timestamp calculation for all preamble + types + +Add support for calculating the Rx timestamp for HE frames. +Since now all frame types are supported, allow setting the Rx +timestamp regardless of the frame type. + +Signed-off-by: Avraham Stern +Signed-off-by: Luca Coelho +Link: https://lore.kernel.org/r/iwlwifi.20201206145305.4786559af475.Ia54486bb0a12e5351f9d5c60ef6fcda7c9e7141c@changeid +Signed-off-by: Johannes Berg +--- + +--- a/net/mac80211/ieee80211_i.h ++++ b/net/mac80211/ieee80211_i.h +@@ -1600,13 +1600,8 @@ ieee80211_have_rx_timestamp(struct ieee8 + { + WARN_ON_ONCE(status->flag & RX_FLAG_MACTIME_START && + status->flag & RX_FLAG_MACTIME_END); +- if (status->flag & (RX_FLAG_MACTIME_START | RX_FLAG_MACTIME_END)) +- return true; +- /* can't handle non-legacy preamble yet */ +- if (status->flag & RX_FLAG_MACTIME_PLCP_START && +- status->encoding == RX_ENC_LEGACY) +- return true; +- return false; ++ return !!(status->flag & (RX_FLAG_MACTIME_START | RX_FLAG_MACTIME_END | ++ RX_FLAG_MACTIME_PLCP_START)); + } + + void ieee80211_vif_inc_num_mcast(struct ieee80211_sub_if_data *sdata); +--- a/net/mac80211/util.c ++++ b/net/mac80211/util.c +@@ -3665,6 +3665,7 @@ u64 ieee80211_calculate_rx_timestamp(str + u64 ts = status->mactime; + struct rate_info ri; + u16 rate; ++ u8 n_ltf; + + if (WARN_ON(!ieee80211_have_rx_timestamp(status))) + return 0; +@@ -3675,11 +3676,58 @@ u64 ieee80211_calculate_rx_timestamp(str + + /* Fill cfg80211 rate info */ + switch (status->encoding) { ++ case RX_ENC_HE: ++ ri.flags |= RATE_INFO_FLAGS_HE_MCS; ++ ri.mcs = status->rate_idx; ++ ri.nss = status->nss; ++ ri.he_ru_alloc = status->he_ru; ++ if (status->enc_flags & RX_ENC_FLAG_SHORT_GI) ++ ri.flags |= RATE_INFO_FLAGS_SHORT_GI; ++ ++ /* ++ * See P802.11ax_D6.0, section 27.3.4 for ++ * VHT PPDU format. ++ */ ++ if (status->flag & RX_FLAG_MACTIME_PLCP_START) { ++ mpdu_offset += 2; ++ ts += 36; ++ ++ /* ++ * TODO: ++ * For HE MU PPDU, add the HE-SIG-B. ++ * For HE ER PPDU, add 8us for the HE-SIG-A. ++ * For HE TB PPDU, add 4us for the HE-STF. ++ * Add the HE-LTF durations - variable. ++ */ ++ } ++ ++ break; + case RX_ENC_HT: + ri.mcs = status->rate_idx; + ri.flags |= RATE_INFO_FLAGS_MCS; + if (status->enc_flags & RX_ENC_FLAG_SHORT_GI) + ri.flags |= RATE_INFO_FLAGS_SHORT_GI; ++ ++ /* ++ * See P802.11REVmd_D3.0, section 19.3.2 for ++ * HT PPDU format. ++ */ ++ if (status->flag & RX_FLAG_MACTIME_PLCP_START) { ++ mpdu_offset += 2; ++ if (status->enc_flags & RX_ENC_FLAG_HT_GF) ++ ts += 24; ++ else ++ ts += 32; ++ ++ /* ++ * Add Data HT-LTFs per streams ++ * TODO: add Extension HT-LTFs, 4us per LTF ++ */ ++ n_ltf = ((ri.mcs >> 3) & 3) + 1; ++ n_ltf = n_ltf == 3 ? 4 : n_ltf; ++ ts += n_ltf * 4; ++ } ++ + break; + case RX_ENC_VHT: + ri.flags |= RATE_INFO_FLAGS_VHT_MCS; +@@ -3687,6 +3735,23 @@ u64 ieee80211_calculate_rx_timestamp(str + ri.nss = status->nss; + if (status->enc_flags & RX_ENC_FLAG_SHORT_GI) + ri.flags |= RATE_INFO_FLAGS_SHORT_GI; ++ ++ /* ++ * See P802.11REVmd_D3.0, section 21.3.2 for ++ * VHT PPDU format. ++ */ ++ if (status->flag & RX_FLAG_MACTIME_PLCP_START) { ++ mpdu_offset += 2; ++ ts += 36; ++ ++ /* ++ * Add VHT-LTFs per streams ++ */ ++ n_ltf = (ri.nss != 1) && (ri.nss % 2) ? ++ ri.nss + 1 : ri.nss; ++ ts += 4 * n_ltf; ++ } ++ + break; + default: + WARN_ON(1); +@@ -3710,7 +3775,6 @@ u64 ieee80211_calculate_rx_timestamp(str + ri.legacy = DIV_ROUND_UP(bitrate, (1 << shift)); + + if (status->flag & RX_FLAG_MACTIME_PLCP_START) { +- /* TODO: handle HT/VHT preambles */ + if (status->band == NL80211_BAND_5GHZ) { + ts += 20 << shift; + mpdu_offset += 2; diff --git a/package/kernel/mac80211/patches/subsys/374-mac80211-fix-time-is-after-bug-in-mlme.patch b/package/kernel/mac80211/patches/subsys/374-mac80211-fix-time-is-after-bug-in-mlme.patch new file mode 100644 index 0000000000..0573aece64 --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/374-mac80211-fix-time-is-after-bug-in-mlme.patch @@ -0,0 +1,31 @@ +From: Ben Greear +Date: Tue, 30 Mar 2021 16:07:49 -0700 +Subject: [PATCH] mac80211: fix time-is-after bug in mlme + +The incorrect timeout check caused probing to happen when it did +not need to happen. This in turn caused tx performance drop +for around 5 seconds in ath10k-ct driver. Possibly that tx drop +is due to a secondary issue, but fixing the probe to not happen +when traffic is running fixes the symptom. + +Signed-off-by: Ben Greear +Fixes: 9abf4e49830d ("mac80211: optimize station connection monitor") +Acked-by: Felix Fietkau +Link: https://lore.kernel.org/r/20210330230749.14097-1-greearb@candelatech.com +Signed-off-by: Johannes Berg +--- + +--- a/net/mac80211/mlme.c ++++ b/net/mac80211/mlme.c +@@ -4691,7 +4691,10 @@ static void ieee80211_sta_conn_mon_timer + timeout = sta->rx_stats.last_rx; + timeout += IEEE80211_CONNECTION_IDLE_TIME; + +- if (time_is_before_jiffies(timeout)) { ++ /* If timeout is after now, then update timer to fire at ++ * the later date, but do not actually probe at this time. ++ */ ++ if (time_is_after_jiffies(timeout)) { + mod_timer(&ifmgd->conn_mon_timer, round_jiffies_up(timeout)); + return; + } diff --git a/package/kernel/mt76/Makefile b/package/kernel/mt76/Makefile index 45375ef564..e9e95fa9b3 100644 --- a/package/kernel/mt76/Makefile +++ b/package/kernel/mt76/Makefile @@ -8,9 +8,9 @@ PKG_LICENSE_FILES:= PKG_SOURCE_URL:=https://github.com/openwrt/mt76 PKG_SOURCE_PROTO:=git -PKG_SOURCE_DATE:=2021-02-14 -PKG_SOURCE_VERSION:=289cd7804587dc48f776d450db9cd3762692a370 -PKG_MIRROR_HASH:=91885feca9d935586c6e33a8e3734bfa61991d869bf42ac0d1c8c3b19bfa9653 +PKG_SOURCE_DATE:=2021-04-11 +PKG_SOURCE_VERSION:=bf45b30d891961dd7c4139dddb58b909ea2c2b5a +PKG_MIRROR_HASH:=431cecf80dafa986e805f809522721c2bb26289867d6770695d49baf8b471bea PKG_MAINTAINER:=Felix Fietkau PKG_BUILD_PARALLEL:=1 @@ -407,6 +407,14 @@ define KernelPackage/mt7915e/install $(1)/lib/firmware/mediatek endef +define KernelPackage/mt7921e/install + $(INSTALL_DIR) $(1)/lib/firmware/mediatek + cp \ + $(PKG_BUILD_DIR)/firmware/WIFI_MT7961_patch_mcu_1_2_hdr.bin \ + $(PKG_BUILD_DIR)/firmware/WIFI_RAM_CODE_MT7961_1.bin \ + $(1)/lib/firmware/mediatek +endef + define Package/mt76-test/install mkdir -p $(1)/usr/sbin $(INSTALL_BIN) $(PKG_BUILD_DIR)/tools/mt76-test $(1)/usr/sbin diff --git a/target/linux/ath79/dts/qca9558_mikrotik_routerboard-922uags-5hpacd.dts b/target/linux/ath79/dts/qca9558_mikrotik_routerboard-922uags-5hpacd.dts index 34cc35735f..8ad834fe61 100644 --- a/target/linux/ath79/dts/qca9558_mikrotik_routerboard-922uags-5hpacd.dts +++ b/target/linux/ath79/dts/qca9558_mikrotik_routerboard-922uags-5hpacd.dts @@ -47,3 +47,11 @@ &usb_phy0 { status = "okay"; }; + +&usb1 { + status = "okay"; +}; + +&usb_phy1 { + status = "okay"; +};