diff --git a/package/firmware/linux-firmware/Makefile b/package/firmware/linux-firmware/Makefile index f256a1efe4..43a9833555 100644 --- a/package/firmware/linux-firmware/Makefile +++ b/package/firmware/linux-firmware/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=linux-firmware -PKG_VERSION:=20240513 +PKG_VERSION:=20240909 PKG_RELEASE:=1 PKG_SOURCE_URL:=@KERNEL/linux/kernel/firmware PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz -PKG_HASH:=9f05edb99668135d37cedc4fdd18aac2802dc9e4566e086e6c6c2e321f3ecc4e +PKG_HASH:=943fbd19883cf8eadf89e0b22422549db056557b1ecd30a56400615971369671 PKG_MAINTAINER:=Felix Fietkau diff --git a/package/kernel/gpio-button-hotplug/Makefile b/package/kernel/gpio-button-hotplug/Makefile index 04cbb69ada..5b4085887d 100644 --- a/package/kernel/gpio-button-hotplug/Makefile +++ b/package/kernel/gpio-button-hotplug/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=gpio-button-hotplug -PKG_RELEASE:=3 +PKG_RELEASE:=4 PKG_LICENSE:=GPL-2.0 include $(INCLUDE_DIR)/package.mk diff --git a/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c b/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c index 17748219e8..de100777f2 100644 --- a/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c +++ b/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c @@ -525,10 +525,9 @@ static int gpio_keys_button_probe(struct platform_device *pdev, button->active_low ? GPIOF_ACTIVE_LOW : 0), desc); if (error) { - if (error != -EPROBE_DEFER) { - dev_err(dev, "unable to claim gpio %d, err=%d\n", - button->gpio, error); - } + dev_err_probe(dev, error, + "unable to claim gpio %d", + button->gpio); goto out; } diff --git a/package/kernel/mac80211/patches/subsys/350-wifi-mac80211-introduce-EHT-rate-support-in-AQL-airt.patch b/package/kernel/mac80211/patches/subsys/350-wifi-mac80211-introduce-EHT-rate-support-in-AQL-airt.patch new file mode 100644 index 0000000000..0a3c8ec53b --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/350-wifi-mac80211-introduce-EHT-rate-support-in-AQL-airt.patch @@ -0,0 +1,233 @@ +From: Ming Yen Hsieh +Date: Wed, 4 Sep 2024 19:12:56 +0800 +Subject: [PATCH] wifi: mac80211: introduce EHT rate support in AQL airtime + +Add definitions related to EHT mode and airtime calculation +according to the 802.11BE_D4.0. + +Co-developed-by: Bo Jiao +Signed-off-by: Bo Jiao +Signed-off-by: Deren Wu +Signed-off-by: Quan Zhou +Signed-off-by: Ming Yen Hsieh +Link: https://patch.msgid.link/20240904111256.11734-1-mingyen.hsieh@mediatek.com +Signed-off-by: Johannes Berg +--- + +--- a/net/mac80211/airtime.c ++++ b/net/mac80211/airtime.c +@@ -55,10 +55,21 @@ + #define HE_DURATION_S(shift, streams, gi, bps) \ + (HE_DURATION(streams, gi, bps) >> shift) + ++/* gi in HE/EHT is identical. It matches enum nl80211_eht_gi as well */ ++#define EHT_GI_08 HE_GI_08 ++#define EHT_GI_16 HE_GI_16 ++#define EHT_GI_32 HE_GI_32 ++ ++#define EHT_DURATION(streams, gi, bps) \ ++ HE_DURATION(streams, gi, bps) ++#define EHT_DURATION_S(shift, streams, gi, bps) \ ++ HE_DURATION_S(shift, streams, gi, bps) ++ + #define BW_20 0 + #define BW_40 1 + #define BW_80 2 + #define BW_160 3 ++#define BW_320 4 + + /* + * Define group sort order: HT40 -> SGI -> #streams +@@ -68,17 +79,26 @@ + #define IEEE80211_VHT_STREAM_GROUPS 8 /* BW(=4) * SGI(=2) */ + + #define IEEE80211_HE_MAX_STREAMS 8 ++#define IEEE80211_HE_STREAM_GROUPS 12 /* BW(=4) * GI(=3) */ ++ ++#define IEEE80211_EHT_MAX_STREAMS 8 ++#define IEEE80211_EHT_STREAM_GROUPS 15 /* BW(=5) * GI(=3) */ + + #define IEEE80211_HT_GROUPS_NB (IEEE80211_MAX_STREAMS * \ + IEEE80211_HT_STREAM_GROUPS) + #define IEEE80211_VHT_GROUPS_NB (IEEE80211_MAX_STREAMS * \ + IEEE80211_VHT_STREAM_GROUPS) ++#define IEEE80211_HE_GROUPS_NB (IEEE80211_HE_MAX_STREAMS * \ ++ IEEE80211_HE_STREAM_GROUPS) ++#define IEEE80211_EHT_GROUPS_NB (IEEE80211_EHT_MAX_STREAMS * \ ++ IEEE80211_EHT_STREAM_GROUPS) + + #define IEEE80211_HT_GROUP_0 0 + #define IEEE80211_VHT_GROUP_0 (IEEE80211_HT_GROUP_0 + IEEE80211_HT_GROUPS_NB) + #define IEEE80211_HE_GROUP_0 (IEEE80211_VHT_GROUP_0 + IEEE80211_VHT_GROUPS_NB) ++#define IEEE80211_EHT_GROUP_0 (IEEE80211_HE_GROUP_0 + IEEE80211_HE_GROUPS_NB) + +-#define MCS_GROUP_RATES 12 ++#define MCS_GROUP_RATES 14 + + #define HT_GROUP_IDX(_streams, _sgi, _ht40) \ + IEEE80211_HT_GROUP_0 + \ +@@ -203,6 +223,69 @@ + #define HE_GROUP(_streams, _gi, _bw) \ + __HE_GROUP(_streams, _gi, _bw, \ + HE_GROUP_SHIFT(_streams, _gi, _bw)) ++ ++#define EHT_BW2VBPS(_bw, r5, r4, r3, r2, r1) \ ++ ((_bw) == BW_320 ? r5 : BW2VBPS(_bw, r4, r3, r2, r1)) ++ ++#define EHT_GROUP_IDX(_streams, _gi, _bw) \ ++ (IEEE80211_EHT_GROUP_0 + \ ++ IEEE80211_EHT_MAX_STREAMS * 3 * (_bw) + \ ++ IEEE80211_EHT_MAX_STREAMS * (_gi) + \ ++ (_streams) - 1) ++ ++#define __EHT_GROUP(_streams, _gi, _bw, _s) \ ++ [EHT_GROUP_IDX(_streams, _gi, _bw)] = { \ ++ .shift = _s, \ ++ .duration = { \ ++ EHT_DURATION_S(_s, _streams, _gi, \ ++ EHT_BW2VBPS(_bw, 1960, 980, 490, 234, 117)), \ ++ EHT_DURATION_S(_s, _streams, _gi, \ ++ EHT_BW2VBPS(_bw, 3920, 1960, 980, 468, 234)), \ ++ EHT_DURATION_S(_s, _streams, _gi, \ ++ EHT_BW2VBPS(_bw, 5880, 2937, 1470, 702, 351)), \ ++ EHT_DURATION_S(_s, _streams, _gi, \ ++ EHT_BW2VBPS(_bw, 7840, 3920, 1960, 936, 468)), \ ++ EHT_DURATION_S(_s, _streams, _gi, \ ++ EHT_BW2VBPS(_bw, 11760, 5880, 2940, 1404, 702)), \ ++ EHT_DURATION_S(_s, _streams, _gi, \ ++ EHT_BW2VBPS(_bw, 15680, 7840, 3920, 1872, 936)), \ ++ EHT_DURATION_S(_s, _streams, _gi, \ ++ EHT_BW2VBPS(_bw, 17640, 8820, 4410, 2106, 1053)), \ ++ EHT_DURATION_S(_s, _streams, _gi, \ ++ EHT_BW2VBPS(_bw, 19600, 9800, 4900, 2340, 1170)), \ ++ EHT_DURATION_S(_s, _streams, _gi, \ ++ EHT_BW2VBPS(_bw, 23520, 11760, 5880, 2808, 1404)), \ ++ EHT_DURATION_S(_s, _streams, _gi, \ ++ EHT_BW2VBPS(_bw, 26133, 13066, 6533, 3120, 1560)), \ ++ EHT_DURATION_S(_s, _streams, _gi, \ ++ EHT_BW2VBPS(_bw, 29400, 14700, 7350, 3510, 1755)), \ ++ EHT_DURATION_S(_s, _streams, _gi, \ ++ EHT_BW2VBPS(_bw, 32666, 16333, 8166, 3900, 1950)), \ ++ EHT_DURATION_S(_s, _streams, _gi, \ ++ EHT_BW2VBPS(_bw, 35280, 17640, 8820, 4212, 2106)), \ ++ EHT_DURATION_S(_s, _streams, _gi, \ ++ EHT_BW2VBPS(_bw, 39200, 19600, 9800, 4680, 2340)) \ ++ } \ ++} ++ ++#define EHT_GROUP_SHIFT(_streams, _gi, _bw) \ ++ GROUP_SHIFT(EHT_DURATION(_streams, _gi, \ ++ EHT_BW2VBPS(_bw, 1960, 980, 490, 234, 117))) ++ ++#define EHT_GROUP(_streams, _gi, _bw) \ ++ __EHT_GROUP(_streams, _gi, _bw, \ ++ EHT_GROUP_SHIFT(_streams, _gi, _bw)) ++ ++#define EHT_GROUP_RANGE(_gi, _bw) \ ++ EHT_GROUP(1, _gi, _bw), \ ++ EHT_GROUP(2, _gi, _bw), \ ++ EHT_GROUP(3, _gi, _bw), \ ++ EHT_GROUP(4, _gi, _bw), \ ++ EHT_GROUP(5, _gi, _bw), \ ++ EHT_GROUP(6, _gi, _bw), \ ++ EHT_GROUP(7, _gi, _bw), \ ++ EHT_GROUP(8, _gi, _bw) ++ + struct mcs_group { + u8 shift; + u16 duration[MCS_GROUP_RATES]; +@@ -376,6 +459,26 @@ static const struct mcs_group airtime_mc + HE_GROUP(6, HE_GI_32, BW_160), + HE_GROUP(7, HE_GI_32, BW_160), + HE_GROUP(8, HE_GI_32, BW_160), ++ ++ EHT_GROUP_RANGE(EHT_GI_08, BW_20), ++ EHT_GROUP_RANGE(EHT_GI_16, BW_20), ++ EHT_GROUP_RANGE(EHT_GI_32, BW_20), ++ ++ EHT_GROUP_RANGE(EHT_GI_08, BW_40), ++ EHT_GROUP_RANGE(EHT_GI_16, BW_40), ++ EHT_GROUP_RANGE(EHT_GI_32, BW_40), ++ ++ EHT_GROUP_RANGE(EHT_GI_08, BW_80), ++ EHT_GROUP_RANGE(EHT_GI_16, BW_80), ++ EHT_GROUP_RANGE(EHT_GI_32, BW_80), ++ ++ EHT_GROUP_RANGE(EHT_GI_08, BW_160), ++ EHT_GROUP_RANGE(EHT_GI_16, BW_160), ++ EHT_GROUP_RANGE(EHT_GI_32, BW_160), ++ ++ EHT_GROUP_RANGE(EHT_GI_08, BW_320), ++ EHT_GROUP_RANGE(EHT_GI_16, BW_320), ++ EHT_GROUP_RANGE(EHT_GI_32, BW_320), + }; + + static u32 +@@ -422,6 +525,9 @@ static u32 ieee80211_get_rate_duration(s + case RATE_INFO_BW_160: + bw = BW_160; + break; ++ case RATE_INFO_BW_320: ++ bw = BW_320; ++ break; + default: + WARN_ON_ONCE(1); + return 0; +@@ -443,14 +549,27 @@ static u32 ieee80211_get_rate_duration(s + idx = status->rate_idx; + group = HE_GROUP_IDX(streams, status->he_gi, bw); + break; ++ case RX_ENC_EHT: ++ streams = status->nss; ++ idx = status->rate_idx; ++ group = EHT_GROUP_IDX(streams, status->eht.gi, bw); ++ break; + default: + WARN_ON_ONCE(1); + return 0; + } + +- if (WARN_ON_ONCE((status->encoding != RX_ENC_HE && streams > 4) || +- (status->encoding == RX_ENC_HE && streams > 8))) +- return 0; ++ switch (status->encoding) { ++ case RX_ENC_EHT: ++ case RX_ENC_HE: ++ if (WARN_ON_ONCE(streams > 8)) ++ return 0; ++ break; ++ default: ++ if (WARN_ON_ONCE(streams > 4)) ++ return 0; ++ break; ++ } + + if (idx >= MCS_GROUP_RATES) + return 0; +@@ -517,7 +636,9 @@ static bool ieee80211_fill_rate_info(str + stat->nss = ri->nss; + stat->rate_idx = ri->mcs; + +- if (ri->flags & RATE_INFO_FLAGS_HE_MCS) ++ if (ri->flags & RATE_INFO_FLAGS_EHT_MCS) ++ stat->encoding = RX_ENC_EHT; ++ else if (ri->flags & RATE_INFO_FLAGS_HE_MCS) + stat->encoding = RX_ENC_HE; + else if (ri->flags & RATE_INFO_FLAGS_VHT_MCS) + stat->encoding = RX_ENC_VHT; +@@ -529,7 +650,14 @@ static bool ieee80211_fill_rate_info(str + if (ri->flags & RATE_INFO_FLAGS_SHORT_GI) + stat->enc_flags |= RX_ENC_FLAG_SHORT_GI; + +- stat->he_gi = ri->he_gi; ++ switch (stat->encoding) { ++ case RX_ENC_EHT: ++ stat->eht.gi = ri->eht_gi; ++ break; ++ default: ++ stat->he_gi = ri->he_gi; ++ break; ++ } + + if (stat->encoding != RX_ENC_LEGACY) + return true; diff --git a/target/linux/generic/config-6.6 b/target/linux/generic/config-6.6 index b1a467fc17..42e965510a 100644 --- a/target/linux/generic/config-6.6 +++ b/target/linux/generic/config-6.6 @@ -5167,6 +5167,7 @@ CONFIG_RTC_SYSTOHC_DEVICE="rtc0" # CONFIG_RTL_CARDS is not set # CONFIG_RTS5208 is not set CONFIG_RT_MUTEXES=y +# CONFIG_RUST is not set CONFIG_RUNTIME_TESTING_MENU=y # CONFIG_RV is not set CONFIG_RXKAD=y diff --git a/target/linux/generic/pending-6.6/752-net-phy-aquantia-allow-forcing-order-of-MDI-pairs.patch b/target/linux/generic/pending-6.6/752-net-phy-aquantia-allow-forcing-order-of-MDI-pairs.patch index 97e2953a50..f3ae893b32 100644 --- a/target/linux/generic/pending-6.6/752-net-phy-aquantia-allow-forcing-order-of-MDI-pairs.patch +++ b/target/linux/generic/pending-6.6/752-net-phy-aquantia-allow-forcing-order-of-MDI-pairs.patch @@ -74,7 +74,7 @@ Signed-off-by: Daniel Golle + ret = of_property_read_u32(np, "marvell,mdi-cfg-order", &mdi_conf); + + /* Do nothing in case property "marvell,mdi-cfg-order" is not present */ -+ if (ret == -ENOENT) ++ if (ret == -EINVAL) + return 0; + + if (ret) diff --git a/target/linux/qualcommax/image/ipq807x.mk b/target/linux/qualcommax/image/ipq807x.mk index bd7b17a2ef..ea58c26738 100644 --- a/target/linux/qualcommax/image/ipq807x.mk +++ b/target/linux/qualcommax/image/ipq807x.mk @@ -351,7 +351,7 @@ define Device/spectrum_sax1v1k DEVICE_DTS_CONFIG := config@rt5010w-d187-rev6 SOC := ipq8072 IMAGES := sysupgrade.bin - DEVICE_PACKAGES := ipq-wifi-spectrum_sax1v1k + DEVICE_PACKAGES := kmod-fs-f2fs f2fs-tools ipq-wifi-spectrum_sax1v1k endef TARGET_DEVICES += spectrum_sax1v1k diff --git a/target/linux/qualcommax/ipq807x/base-files/lib/upgrade/platform.sh b/target/linux/qualcommax/ipq807x/base-files/lib/upgrade/platform.sh index f417fd918e..462d16b3f5 100644 --- a/target/linux/qualcommax/ipq807x/base-files/lib/upgrade/platform.sh +++ b/target/linux/qualcommax/ipq807x/base-files/lib/upgrade/platform.sh @@ -184,8 +184,7 @@ platform_do_upgrade() { nand_do_upgrade "$1" ;; prpl,haze|\ - qnap,301w|\ - spectrum,sax1v1k) + qnap,301w) kernelname="0:HLOS" rootfsname="rootfs" mmc_do_upgrade "$1" @@ -239,6 +238,12 @@ platform_do_upgrade() { nand_do_upgrade "$1" ;; + spectrum,sax1v1k) + CI_KERNPART="0:HLOS" + CI_ROOTPART="rootfs" + CI_DATAPART="rootfs_data" + emmc_do_upgrade "$1" + ;; yuncore,ax880) active="$(fw_printenv -n active)" if [ "$active" -eq "1" ]; then @@ -291,3 +296,11 @@ platform_do_upgrade() { ;; esac } + +platform_copy_config() { + case "$(board_name)" in + spectrum,sax1v1k) + emmc_copy_config + ;; + esac +}