From 72780e3eac98610bfeacd1e5862a655740899f23 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Wed, 12 Apr 2023 22:06:18 +0200 Subject: [PATCH 01/19] ipq40xx: convert AP-365 to DSA Re-enable the Aruba AP-365 with DSA support. Changes are trvivial, as the board design is pretty much the already updated AP-303. Run-tested on the device. Signed-off-by: David Bauer --- target/linux/ipq40xx/base-files/etc/board.d/02_network | 1 + target/linux/ipq40xx/image/generic.mk | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/target/linux/ipq40xx/base-files/etc/board.d/02_network b/target/linux/ipq40xx/base-files/etc/board.d/02_network index 37b9ca268bf..7c9c2f08278 100644 --- a/target/linux/ipq40xx/base-files/etc/board.d/02_network +++ b/target/linux/ipq40xx/base-files/etc/board.d/02_network @@ -45,6 +45,7 @@ ipq40xx_setup_interfaces() ucidef_set_interfaces_lan_wan "lan" "wan" ;; aruba,ap-303|\ + aruba,ap-365|\ avm,fritzrepeater-1200|\ dlink,dap-2610|\ extreme-networks,ws-ap3915i|\ diff --git a/target/linux/ipq40xx/image/generic.mk b/target/linux/ipq40xx/image/generic.mk index 48514b88416..2f0ca927f01 100644 --- a/target/linux/ipq40xx/image/generic.mk +++ b/target/linux/ipq40xx/image/generic.mk @@ -190,8 +190,7 @@ define Device/aruba_ap-365 DEVICE_MODEL := AP-365 DEVICE_PACKAGES := kmod-hwmon-ad7418 ipq-wifi-aruba_ap-365 endef -# Missing DSA Setup -#TARGET_DEVICES += aruba_ap-365 +TARGET_DEVICES += aruba_ap-365 define Device/asus_map-ac2200 $(call Device/FitImageLzma) From 36c30bee5e8d7821408358fbaf8eade5c8865672 Mon Sep 17 00:00:00 2001 From: Nick Hainke Date: Thu, 13 Apr 2023 11:20:05 +0200 Subject: [PATCH 02/19] tcpdump: update to 4.99.4 Fixes CVE-2023-1801. Changelog can be found here: https://git.tcpdump.org/tcpdump/blob/55bc126b0216cfe409b8d6bd378f65679d136ddf:/CHANGES Signed-off-by: Nick Hainke --- package/network/utils/tcpdump/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package/network/utils/tcpdump/Makefile b/package/network/utils/tcpdump/Makefile index e07e9feb6db..d2e933a1a1a 100644 --- a/package/network/utils/tcpdump/Makefile +++ b/package/network/utils/tcpdump/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=tcpdump -PKG_VERSION:=4.99.3 +PKG_VERSION:=4.99.4 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://www.tcpdump.org/release/ -PKG_HASH:=ad75a6ed3dc0d9732945b2e5483cb41dc8b4b528a169315e499c6861952e73b3 +PKG_HASH:=0232231bb2f29d6bf2426e70a08a7e0c63a0d59a9b44863b7f5e2357a6e49fea PKG_MAINTAINER:=Felix Fietkau PKG_LICENSE:=BSD-3-Clause From 10eb3fa35ab1eaad767308afae71891c554364c9 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Mon, 17 Apr 2023 13:14:41 +0200 Subject: [PATCH 03/19] netifd: update to the latest version 7de5440a520f device: fix segfault when recreating devices Signed-off-by: Felix Fietkau --- package/network/config/netifd/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package/network/config/netifd/Makefile b/package/network/config/netifd/Makefile index 9b5fb08ab03..8dcff7987d2 100644 --- a/package/network/config/netifd/Makefile +++ b/package/network/config/netifd/Makefile @@ -5,9 +5,9 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/netifd.git -PKG_SOURCE_DATE:=2023-02-25 -PKG_SOURCE_VERSION:=463a1207f0766417866e2c28316e58a96f84370b -PKG_MIRROR_HASH:=1d407847282637f6e069b482368f2f8fc0126e66f3b37e4258e1fc1d19dd1ce5 +PKG_SOURCE_DATE:=2023-04-17 +PKG_SOURCE_VERSION:=7de5440a520f9c6687358c7ef88ac4aad0ff98a5 +PKG_MIRROR_HASH:=aaf6aef1c991c67b6ef43b4c7f102ba94319bf522f620e93293d031b8333bd8f PKG_MAINTAINER:=Felix Fietkau PKG_LICENSE:=GPL-2.0 From 998c34d3fee5ef8468595c809f14e21c3016326c Mon Sep 17 00:00:00 2001 From: Oleksandr Zharov Date: Sat, 15 Apr 2023 23:23:41 +0300 Subject: [PATCH 04/19] ramips: add Xiaomi RA75 red signal led RA75 has 5 physical LEDs under 2 indicators, mixed with light pipes: Indicator "System": GPIO0: blue GPIO2: amber Indicator "Signal": GPIO44: blue GPIO37: amber GPIO46: red All except GPIO46 were already added by Jo Deisenhofer. GPIO46 is used for UART1 by default, so it needs additional pin control change in devicetree to be operational. Verified on my RA75. Signed-off-by: Oleksandr Zharov --- target/linux/ramips/dts/mt7628an_xiaomi_mi-ra75.dts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/target/linux/ramips/dts/mt7628an_xiaomi_mi-ra75.dts b/target/linux/ramips/dts/mt7628an_xiaomi_mi-ra75.dts index 78653344896..173bcd992d7 100644 --- a/target/linux/ramips/dts/mt7628an_xiaomi_mi-ra75.dts +++ b/target/linux/ramips/dts/mt7628an_xiaomi_mi-ra75.dts @@ -32,6 +32,10 @@ label = "amber:signal"; gpios = <&gpio 37 GPIO_ACTIVE_LOW>; }; + led_signal_red: signal_red { + label = "red:signal"; + gpios = <&gpio 46 GPIO_ACTIVE_LOW>; + }; }; keys { @@ -51,6 +55,13 @@ }; +&state_default { + gpio { + groups = "gpio", "refclk", "wdt", "wled_an", "uart1"; + function = "gpio"; + }; +}; + &partitions { partition@60000 { label = "overlay"; From 5811db1d0b620b8fd39c85f54554d8ab1ac71833 Mon Sep 17 00:00:00 2001 From: Mark Onstid Date: Fri, 7 Apr 2023 11:21:48 -0400 Subject: [PATCH 05/19] ath79: fix LED pinout for Comfast CF-E314N v2 In addition to standardizing LED names to match the rest of the systems, this commit fixes a possibly erroneous pinout for LEDs in Comfast CF-E314N v2. In particular, rssimediumhigh and rssihigh are moved from pins 13 and 14 to 14 and 16 respectively. In addition to working on a test device, this pinout better matches the one set out in the prototype support patch for the device in Github PR #1873. Signed-off-by: Mark Onstid --- .../linux/ath79/dts/qca9531_comfast_cf-e314n-v2.dts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/target/linux/ath79/dts/qca9531_comfast_cf-e314n-v2.dts b/target/linux/ath79/dts/qca9531_comfast_cf-e314n-v2.dts index c182390b217..92881267885 100644 --- a/target/linux/ath79/dts/qca9531_comfast_cf-e314n-v2.dts +++ b/target/linux/ath79/dts/qca9531_comfast_cf-e314n-v2.dts @@ -33,23 +33,23 @@ }; rssilow { - label = "red:signal1"; + label = "red:rssilow"; gpios = <&gpio 11 GPIO_ACTIVE_LOW>; }; rssimediumlow { - label = "red:signal2"; + label = "red:rssimediumlow"; gpios = <&gpio 12 GPIO_ACTIVE_LOW>; }; rssimediumhigh { - label = "green:signal3"; - gpios = <&gpio 13 GPIO_ACTIVE_LOW>; + label = "green:rssimediumhigh"; + gpios = <&gpio 14 GPIO_ACTIVE_LOW>; }; led_rssihigh: rssihigh { - label = "green:signal4"; - gpios = <&gpio 14 GPIO_ACTIVE_LOW>; + label = "green:rssihigh"; + gpios = <&gpio 16 GPIO_ACTIVE_LOW>; }; wlan { From 3547862d86a6be1d3cb677774f6cf50748af16a4 Mon Sep 17 00:00:00 2001 From: Nick Hainke Date: Thu, 6 Apr 2023 08:37:50 +0200 Subject: [PATCH 06/19] tools/libdeflate: update to 1.18 Release Notes: https://github.com/ebiggers/libdeflate/blob/master/NEWS.md#version-118 Signed-off-by: Nick Hainke --- tools/libdeflate/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/libdeflate/Makefile b/tools/libdeflate/Makefile index 53a674440a8..e0f348196dc 100644 --- a/tools/libdeflate/Makefile +++ b/tools/libdeflate/Makefile @@ -7,13 +7,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=libdeflate -PKG_VERSION:=1.17 -PKG_RELEASE:=2 +PKG_VERSION:=1.18 +PKG_RELEASE:=1 PKG_SOURCE_URL:=https://github.com/ebiggers/libdeflate.git PKG_SOURCE_PROTO:=git PKG_SOURCE_VERSION:=v$(PKG_VERSION) -PKG_MIRROR_HASH:=ee5790cf3140aa6a2e0f0c400d4b32539f13cb270e9357135c51927ba3784dc7 +PKG_MIRROR_HASH:=015cbd33b1382b812f7c035640709186bc5d3d6a0ab177bffa7948f26f64edf9 include $(INCLUDE_DIR)/host-build.mk From d62ae37d845ddfb1af789c1bca548dfd589547a7 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Mon, 17 Apr 2023 18:58:15 +0200 Subject: [PATCH 07/19] firmware-utils: update to latest HEAD e8191eb tplink-safeloader: increase support-list size for AX23 v1 Signed-off-by: David Bauer --- tools/firmware-utils/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/firmware-utils/Makefile b/tools/firmware-utils/Makefile index a8d52f92f84..4efd9ee243a 100644 --- a/tools/firmware-utils/Makefile +++ b/tools/firmware-utils/Makefile @@ -11,9 +11,9 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/firmware-utils.git -PKG_SOURCE_DATE:=2023-04-09 -PKG_SOURCE_VERSION:=6a58f456109008620dd15267a7ff0594095e0d77 -PKG_MIRROR_HASH:=ce2df83e2ef548f5ffab972dd6f78ce274a382543284aecf09b88237566120e4 +PKG_SOURCE_DATE:=2023-04-17 +PKG_SOURCE_VERSION:=e8191eb7efc2804d33feb18573c96e632a6c1086 +PKG_MIRROR_HASH:=5b82fe3aee4b2baffe5e612f182b0fcd09a646aa09ec16b6cadde26749d9e2dc include $(INCLUDE_DIR)/host-build.mk include $(INCLUDE_DIR)/cmake.mk From e11d00d44c66b1534fbc399fda55951cd0a2168a Mon Sep 17 00:00:00 2001 From: David Bauer Date: Mon, 17 Apr 2023 19:15:22 +0200 Subject: [PATCH 08/19] ath79: create Aruba AP-105 APBoot compatible image Alter the Aruba AP-105 image generation process so OpenWrt can be loaded with the vendor Aruba APBoot. This works by prepending the OpenWrt LZMA loader to the uImage and jumping directly to the loader. Aruba does not offer bootm on these boards. This approach keeps compatibility to devices which had their U-Boot replaced. Both bootloaders can boot the same image. The same modification is most likely also possible for the Aruba AP-175. With this patch, new installations do not require replacing the bootloader and can be performed from the serial console without opening the case. Installation ------------ 1. Attach to the serial console of the AP-105. Interrupt autoboot and change the U-Boot env. $ setenv apb_rb_openwrt "setenv ipaddr 192.168.1.1; setenv serverip 192.168.1.66; netget 0x84000000 ap105.bin; go 0x84000040" $ setenv apb_fb_openwrt "cp.b 0xbf040000 0x84000000 0x10000; go 0x84000040" $ setenv bootcmd "run apb_fb_openwrt" $ saveenv 2. Load the OpenWrt initramfs image on the device using TFTP. Place the initramfs image as "ap105.bin" in the TFTP server root directory, connect it to the AP and make the server reachable at 192.168.1.66/24. $ run apb_rb_openwrt 3. Once OpenWrt booted, transfer the sysupgrade image to the device using scp and use sysupgrade to install the firmware. Signed-off-by: David Bauer --- target/linux/ath79/image/generic.mk | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk index 328861de037..68ecba972bd 100644 --- a/target/linux/ath79/image/generic.mk +++ b/target/linux/ath79/image/generic.mk @@ -392,6 +392,12 @@ define Device/aruba_ap-105 DEVICE_MODEL := AP-105 IMAGE_SIZE := 16000k DEVICE_PACKAGES := kmod-i2c-gpio kmod-tpm-i2c-atmel + LOADER_TYPE := bin + LOADER_FLASH_OFFS := 0x42000 + COMPILE := loader-$(1).bin + COMPILE/loader-$(1).bin := loader-okli-compile + KERNEL := kernel-bin | append-dtb | lzma | uImage lzma -M 0x4f4b4c49 | loader-okli $(1) 8128 | uImage none + KERNEL_INITRAMFS := kernel-bin | append-dtb | lzma | loader-kernel | uImage none endef TARGET_DEVICES += aruba_ap-105 From e722b667c5a59bbd5aff787002f7f5457d0bf721 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Mon, 17 Apr 2023 17:17:16 +0200 Subject: [PATCH 09/19] mac80211: update to v6.1.24 Drop patches accepted upstream Signed-off-by: Felix Fietkau --- package/kernel/mac80211/Makefile | 6 +- ...21-ath10k_init_devices_synchronously.patch | 2 +- ...rolling-support-for-various-chipsets.patch | 14 +- ...h10k-Try-to-get-mac-address-from-dts.patch | 2 +- ...-tx-queues-immediately-upon-firmware.patch | 4 +- ...warning-in-dma_free_coherent-of-memo.patch | 139 ------ ...firmware-assert-during-bandwidth-cha.patch | 225 ---------- ...-PME-message-during-wakeup-from-D3co.patch | 39 -- ...qmi_msg_handler-data-structure-initi.patch | 8 +- ...update-ce-configurations-for-IPQ5018.patch | 2 +- ...th11k-fix-monitor-mode-bringup-crash.patch | 79 ---- ...gfs-fix-to-work-with-multiple-PCI-de.patch | 139 ------ ...memory-leak-in-ath11k_peer_rx_frag_s.patch | 28 -- ...low-system-suspend-to-survive-ath11k.patch | 6 +- ...und-bug-with-some-inconsistent-BSSes.patch | 2 +- ...62-brcmfmac-Disable-power-management.patch | 2 +- ...-in-driver-tables-with-country-codes.patch | 2 +- ...d-alternative-firmware-names-from-DT.patch | 12 +- .../patches/build/080-resv_start_op.patch | 2 +- .../build/110-backport_napi_build_skb.patch | 4 +- .../801-libertas-configure-sysfs-links.patch | 2 +- .../110-mac80211_keep_keys_on_stop_ap.patch | 4 +- .../mac80211/patches/subsys/210-ap_scan.patch | 2 +- ...crease-quantum-for-airtime-scheduler.patch | 6 +- ...d-internal-handler-for-wake_tx_queue.patch | 23 +- ...dd-wake_tx_queue-callback-to-drivers.patch | 10 +- ...c80211-Drop-support-for-TX-push-path.patch | 106 +++-- ...x-initialization-of-rx-link-and-rx-l.patch | 410 ------------------ ...-wifi-mac80211-fix-MLO-AP_VLAN-check.patch | 25 -- ...port-for-restricting-netdev-features.patch | 32 +- ...-mac80211-fix-qos-on-mesh-interfaces.patch | 35 -- ...x-race-in-mesh-sequence-number-assig.patch | 2 +- ...wifi-mac80211-mesh-fast-xmit-support.patch | 28 +- ...e-mesh-header-cache-to-speed-up-mesh.patch | 2 +- ...d-VHT-MU-MIMO-related-flags-in-ieee8.patch | 2 +- ...d-HE-MU-MIMO-related-flags-in-ieee80.patch | 2 +- ...troduce-ieee80211_refresh_tx_agg_ses.patch | 4 +- ...fi-mac80211-add-mesh-fast-rx-support.patch | 8 +- ...d-support-for-letting-drivers-regist.patch | 6 +- ...x-invalid-drv_sta_pre_rcu_remove-cal.patch | 25 -- ...orrectly-mark-FTM-frames-non-buffera.patch | 2 +- ...3-wifi-mac80211-add-flush_sta-method.patch | 4 +- ...d-LDPC-related-flags-in-ieee80211_bs.patch | 62 +++ .../500-mac80211_configure_antenna_gain.patch | 10 +- 44 files changed, 233 insertions(+), 1296 deletions(-) delete mode 100644 package/kernel/mac80211/patches/ath11k/0003-wifi-ath11k-fix-warning-in-dma_free_coherent-of-memo.patch delete mode 100644 package/kernel/mac80211/patches/ath11k/0006-wifi-ath11k-fix-firmware-assert-during-bandwidth-cha.patch delete mode 100644 package/kernel/mac80211/patches/ath11k/0009-wifi-ath11k-Send-PME-message-during-wakeup-from-D3co.patch delete mode 100644 package/kernel/mac80211/patches/ath11k/0027-wifi-ath11k-fix-monitor-mode-bringup-crash.patch delete mode 100644 package/kernel/mac80211/patches/ath11k/0028-wifi-ath11k-debugfs-fix-to-work-with-multiple-PCI-de.patch delete mode 100644 package/kernel/mac80211/patches/ath11k/0032-wifi-ath11k-Fix-memory-leak-in-ath11k_peer_rx_frag_s.patch delete mode 100644 package/kernel/mac80211/patches/subsys/307-v6.2-wifi-mac80211-fix-initialization-of-rx-link-and-rx-l.patch delete mode 100644 package/kernel/mac80211/patches/subsys/308-v6.2-wifi-mac80211-fix-MLO-AP_VLAN-check.patch delete mode 100644 package/kernel/mac80211/patches/subsys/317-wifi-mac80211-fix-qos-on-mesh-interfaces.patch delete mode 100644 package/kernel/mac80211/patches/subsys/328-wifi-mac80211-fix-invalid-drv_sta_pre_rcu_remove-cal.patch create mode 100644 package/kernel/mac80211/patches/subsys/335-wifi-mac80211-add-LDPC-related-flags-in-ieee80211_bs.patch diff --git a/package/kernel/mac80211/Makefile b/package/kernel/mac80211/Makefile index b7059fe636c..02cf715d8e0 100644 --- a/package/kernel/mac80211/Makefile +++ b/package/kernel/mac80211/Makefile @@ -10,11 +10,11 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=mac80211 -PKG_VERSION:=6.1-rc8 -PKG_RELEASE:=3 +PKG_VERSION:=6.1.24 +PKG_RELEASE:=1 # PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v5.15.58/ PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources/ -PKG_HASH:=7f3d96c2573183cd79d6a3ebe5e1b7b73c19d1326d443c85b69c4181f14e6e2b +PKG_HASH:=5d39aca7e34c33cb9b3e366117b2e86841b7bdd37933679d6b1e61be6b150648 PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION) diff --git a/package/kernel/mac80211/patches/ath10k/921-ath10k_init_devices_synchronously.patch b/package/kernel/mac80211/patches/ath10k/921-ath10k_init_devices_synchronously.patch index 7819835689e..7a38cf3e4ed 100644 --- a/package/kernel/mac80211/patches/ath10k/921-ath10k_init_devices_synchronously.patch +++ b/package/kernel/mac80211/patches/ath10k/921-ath10k_init_devices_synchronously.patch @@ -14,7 +14,7 @@ Signed-off-by: Sven Eckelmann --- a/drivers/net/wireless/ath/ath10k/core.c +++ b/drivers/net/wireless/ath/ath10k/core.c -@@ -3500,6 +3500,16 @@ int ath10k_core_register(struct ath10k * +@@ -3516,6 +3516,16 @@ int ath10k_core_register(struct ath10k * queue_work(ar->workqueue, &ar->register_work); diff --git a/package/kernel/mac80211/patches/ath10k/974-ath10k_add-LED-and-GPIO-controlling-support-for-various-chipsets.patch b/package/kernel/mac80211/patches/ath10k/974-ath10k_add-LED-and-GPIO-controlling-support-for-various-chipsets.patch index 801afc3fa83..1c1630c0519 100644 --- a/package/kernel/mac80211/patches/ath10k/974-ath10k_add-LED-and-GPIO-controlling-support-for-various-chipsets.patch +++ b/package/kernel/mac80211/patches/ath10k/974-ath10k_add-LED-and-GPIO-controlling-support-for-various-chipsets.patch @@ -140,7 +140,7 @@ v13: .patch_load_addr = QCA988X_HW_2_0_PATCH_LOAD_ADDR, .uart_pin = 7, .cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_ALL, -@@ -144,6 +146,7 @@ static const struct ath10k_hw_params ath +@@ -146,6 +148,7 @@ static const struct ath10k_hw_params ath .dev_id = QCA9887_1_0_DEVICE_ID, .bus = ATH10K_BUS_PCI, .name = "qca9887 hw1.0", @@ -148,7 +148,7 @@ v13: .patch_load_addr = QCA9887_HW_1_0_PATCH_LOAD_ADDR, .uart_pin = 7, .cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_ALL, -@@ -379,6 +382,7 @@ static const struct ath10k_hw_params ath +@@ -387,6 +390,7 @@ static const struct ath10k_hw_params ath .dev_id = QCA99X0_2_0_DEVICE_ID, .bus = ATH10K_BUS_PCI, .name = "qca99x0 hw2.0", @@ -156,7 +156,7 @@ v13: .patch_load_addr = QCA99X0_HW_2_0_PATCH_LOAD_ADDR, .uart_pin = 7, .otp_exe_param = 0x00000700, -@@ -424,6 +428,7 @@ static const struct ath10k_hw_params ath +@@ -433,6 +437,7 @@ static const struct ath10k_hw_params ath .dev_id = QCA9984_1_0_DEVICE_ID, .bus = ATH10K_BUS_PCI, .name = "qca9984/qca9994 hw1.0", @@ -164,7 +164,7 @@ v13: .patch_load_addr = QCA9984_HW_1_0_PATCH_LOAD_ADDR, .uart_pin = 7, .cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH, -@@ -476,6 +481,7 @@ static const struct ath10k_hw_params ath +@@ -486,6 +491,7 @@ static const struct ath10k_hw_params ath .dev_id = QCA9888_2_0_DEVICE_ID, .bus = ATH10K_BUS_PCI, .name = "qca9888 hw2.0", @@ -172,7 +172,7 @@ v13: .patch_load_addr = QCA9888_HW_2_0_PATCH_LOAD_ADDR, .uart_pin = 7, .cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH, -@@ -3215,6 +3221,10 @@ int ath10k_core_start(struct ath10k *ar, +@@ -3231,6 +3237,10 @@ int ath10k_core_start(struct ath10k *ar, goto err_hif_stop; } @@ -183,7 +183,7 @@ v13: return 0; err_hif_stop: -@@ -3473,9 +3483,18 @@ static void ath10k_core_register_work(st +@@ -3489,9 +3499,18 @@ static void ath10k_core_register_work(st goto err_spectral_destroy; } @@ -202,7 +202,7 @@ v13: err_spectral_destroy: ath10k_spectral_destroy(ar); err_debug_destroy: -@@ -3521,6 +3540,8 @@ void ath10k_core_unregister(struct ath10 +@@ -3537,6 +3556,8 @@ void ath10k_core_unregister(struct ath10 if (!test_bit(ATH10K_FLAG_CORE_REGISTERED, &ar->dev_flags)) return; diff --git a/package/kernel/mac80211/patches/ath10k/984-ath10k-Try-to-get-mac-address-from-dts.patch b/package/kernel/mac80211/patches/ath10k/984-ath10k-Try-to-get-mac-address-from-dts.patch index d7187bad8af..084e28a2d92 100644 --- a/package/kernel/mac80211/patches/ath10k/984-ath10k-Try-to-get-mac-address-from-dts.patch +++ b/package/kernel/mac80211/patches/ath10k/984-ath10k-Try-to-get-mac-address-from-dts.patch @@ -26,7 +26,7 @@ Signed-off-by: Ansuel Smith #include #include #include -@@ -3391,6 +3392,8 @@ static int ath10k_core_probe_fw(struct a +@@ -3407,6 +3408,8 @@ static int ath10k_core_probe_fw(struct a device_get_mac_address(ar->dev, ar->mac_addr); diff --git a/package/kernel/mac80211/patches/ath11k/0001-wifi-ath11k-stop-tx-queues-immediately-upon-firmware.patch b/package/kernel/mac80211/patches/ath11k/0001-wifi-ath11k-stop-tx-queues-immediately-upon-firmware.patch index ae8920c62f2..d0dc04febf7 100644 --- a/package/kernel/mac80211/patches/ath11k/0001-wifi-ath11k-stop-tx-queues-immediately-upon-firmware.patch +++ b/package/kernel/mac80211/patches/ath11k/0001-wifi-ath11k-stop-tx-queues-immediately-upon-firmware.patch @@ -56,7 +56,7 @@ Link: https://lore.kernel.org/r/20220923170235.18873-1-quic_adisi@quicinc.com ath11k_err(ab, "failed to reconfigure driver on crash recovery\n"); --- a/drivers/net/wireless/ath/ath11k/core.h +++ b/drivers/net/wireless/ath/ath11k/core.h -@@ -1157,6 +1157,7 @@ int ath11k_core_check_smbios(struct ath1 +@@ -1158,6 +1158,7 @@ int ath11k_core_check_smbios(struct ath1 void ath11k_core_halt(struct ath11k *ar); int ath11k_core_resume(struct ath11k_base *ab); int ath11k_core_suspend(struct ath11k_base *ab); @@ -66,7 +66,7 @@ Link: https://lore.kernel.org/r/20220923170235.18873-1-quic_adisi@quicinc.com const char *filename); --- a/drivers/net/wireless/ath/ath11k/qmi.c +++ b/drivers/net/wireless/ath/ath11k/qmi.c -@@ -3158,6 +3158,9 @@ static void ath11k_qmi_driver_event_work +@@ -3164,6 +3164,9 @@ static void ath11k_qmi_driver_event_work case ATH11K_QMI_EVENT_SERVER_EXIT: set_bit(ATH11K_FLAG_CRASH_FLUSH, &ab->dev_flags); set_bit(ATH11K_FLAG_RECOVERY, &ab->dev_flags); diff --git a/package/kernel/mac80211/patches/ath11k/0003-wifi-ath11k-fix-warning-in-dma_free_coherent-of-memo.patch b/package/kernel/mac80211/patches/ath11k/0003-wifi-ath11k-fix-warning-in-dma_free_coherent-of-memo.patch deleted file mode 100644 index 661f4bbfbf1..00000000000 --- a/package/kernel/mac80211/patches/ath11k/0003-wifi-ath11k-fix-warning-in-dma_free_coherent-of-memo.patch +++ /dev/null @@ -1,139 +0,0 @@ -From f74878433d5ade360447da5d92e9c2e535780d80 Mon Sep 17 00:00:00 2001 -From: Wen Gong -Date: Wed, 28 Sep 2022 03:38:32 -0400 -Subject: [PATCH] wifi: ath11k: fix warning in dma_free_coherent() of memory - chunks while recovery - -Commit 26f3a021b37c ("ath11k: allocate smaller chunks of memory for -firmware") and commit f6f92968e1e5 ("ath11k: qmi: try to allocate a -big block of DMA memory first") change ath11k to allocate the memory -chunks for target twice while wlan load. It fails for the 1st time -because of large memory and then changed to allocate many small chunks -for the 2nd time sometimes as below log. - -1st time failed: -[10411.640620] ath11k_pci 0000:05:00.0: qmi firmware request memory request -[10411.640625] ath11k_pci 0000:05:00.0: qmi mem seg type 1 size 6881280 -[10411.640630] ath11k_pci 0000:05:00.0: qmi mem seg type 4 size 3784704 -[10411.640658] ath11k_pci 0000:05:00.0: qmi dma allocation failed (6881280 B type 1), will try later with small size -[10411.640671] ath11k_pci 0000:05:00.0: qmi delays mem_request 2 -[10411.640677] ath11k_pci 0000:05:00.0: qmi respond memory request delayed 1 -2nd time success: -[10411.642004] ath11k_pci 0000:05:00.0: qmi firmware request memory request -[10411.642008] ath11k_pci 0000:05:00.0: qmi mem seg type 1 size 524288 -[10411.642012] ath11k_pci 0000:05:00.0: qmi mem seg type 1 size 524288 -[10411.642014] ath11k_pci 0000:05:00.0: qmi mem seg type 1 size 524288 -[10411.642016] ath11k_pci 0000:05:00.0: qmi mem seg type 1 size 524288 -[10411.642018] ath11k_pci 0000:05:00.0: qmi mem seg type 1 size 524288 -[10411.642020] ath11k_pci 0000:05:00.0: qmi mem seg type 1 size 524288 -[10411.642022] ath11k_pci 0000:05:00.0: qmi mem seg type 1 size 524288 -[10411.642024] ath11k_pci 0000:05:00.0: qmi mem seg type 1 size 524288 -[10411.642027] ath11k_pci 0000:05:00.0: qmi mem seg type 1 size 524288 -[10411.642029] ath11k_pci 0000:05:00.0: qmi mem seg type 1 size 524288 -[10411.642031] ath11k_pci 0000:05:00.0: qmi mem seg type 1 size 458752 -[10411.642033] ath11k_pci 0000:05:00.0: qmi mem seg type 1 size 131072 -[10411.642035] ath11k_pci 0000:05:00.0: qmi mem seg type 4 size 524288 -[10411.642037] ath11k_pci 0000:05:00.0: qmi mem seg type 4 size 524288 -[10411.642039] ath11k_pci 0000:05:00.0: qmi mem seg type 4 size 524288 -[10411.642041] ath11k_pci 0000:05:00.0: qmi mem seg type 4 size 524288 -[10411.642043] ath11k_pci 0000:05:00.0: qmi mem seg type 4 size 524288 -[10411.642045] ath11k_pci 0000:05:00.0: qmi mem seg type 4 size 524288 -[10411.642047] ath11k_pci 0000:05:00.0: qmi mem seg type 4 size 491520 -[10411.642049] ath11k_pci 0000:05:00.0: qmi mem seg type 1 size 524288 - -And then commit 5962f370ce41 ("ath11k: Reuse the available memory after -firmware reload") skip the ath11k_qmi_free_resource() which frees the -memory chunks while recovery, after that, when run recovery test on -WCN6855, a warning happened every time as below and finally leads fail -for recovery. - -[ 159.570318] BUG: Bad page state in process kworker/u16:5 pfn:33300 -[ 159.570320] page:0000000096ffdbb9 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x33300 -[ 159.570324] flags: 0xfffffc0000000(node=0|zone=1|lastcpupid=0x1fffff) -[ 159.570329] raw: 000fffffc0000000 0000000000000000 dead000000000122 0000000000000000 -[ 159.570332] raw: 0000000000000000 0000000000000000 00000001ffffffff 0000000000000000 -[ 159.570334] page dumped because: nonzero _refcount -[ 159.570440] firewire_ohci syscopyarea sysfillrect psmouse sdhci_pci ahci sysimgblt firewire_core fb_sys_fops libahci crc_itu_t cqhci drm sdhci e1000e wmi video -[ 159.570460] CPU: 2 PID: 217 Comm: kworker/u16:5 Kdump: loaded Tainted: G B 5.19.0-rc1-wt-ath+ #3 -[ 159.570465] Hardware name: LENOVO 418065C/418065C, BIOS 83ET63WW (1.33 ) 07/29/2011 -[ 159.570467] Workqueue: qmi_msg_handler qmi_data_ready_work [qmi_helpers] -[ 159.570475] Call Trace: -[ 159.570476] -[ 159.570478] dump_stack_lvl+0x49/0x5f -[ 159.570486] dump_stack+0x10/0x12 -[ 159.570493] bad_page+0xab/0xf0 -[ 159.570502] check_free_page_bad+0x66/0x70 -[ 159.570511] __free_pages_ok+0x530/0x9a0 -[ 159.570517] ? __dev_printk+0x58/0x6b -[ 159.570525] ? _dev_printk+0x56/0x72 -[ 159.570534] ? qmi_decode+0x119/0x470 [qmi_helpers] -[ 159.570543] __free_pages+0x91/0xd0 -[ 159.570548] dma_free_contiguous+0x50/0x60 -[ 159.570556] dma_direct_free+0xe5/0x140 -[ 159.570564] dma_free_attrs+0x35/0x50 -[ 159.570570] ath11k_qmi_msg_mem_request_cb+0x2ae/0x3c0 [ath11k] -[ 159.570620] qmi_invoke_handler+0xac/0xe0 [qmi_helpers] -[ 159.570630] qmi_handle_message+0x6d/0x180 [qmi_helpers] -[ 159.570643] qmi_data_ready_work+0x2ca/0x440 [qmi_helpers] -[ 159.570656] process_one_work+0x227/0x440 -[ 159.570667] worker_thread+0x31/0x3d0 -[ 159.570676] ? process_one_work+0x440/0x440 -[ 159.570685] kthread+0xfe/0x130 -[ 159.570692] ? kthread_complete_and_exit+0x20/0x20 -[ 159.570701] ret_from_fork+0x22/0x30 -[ 159.570712] - -The reason is because when wlan start to recovery, the type, size and -count is not same for the 1st and 2nd QMI_WLFW_REQUEST_MEM_IND message, -Then it leads the parameter size is not correct for the dma_free_coherent(). -For the chunk[1], the actual dma size is 524288 which allocate in the -2nd time of the initial wlan load phase, and the size which pass to -dma_free_coherent() is 3784704 which is got in the 1st time of recovery -phase, then warning above happened. - -Change to use prev_size of struct target_mem_chunk for the paramter of -dma_free_coherent() since prev_size is the real size of last load/recovery. -Also change to check both type and size of struct target_mem_chunk to -reuse the memory to avoid mismatch buffer size for target. Then the -warning disappear and recovery success. When the 1st QMI_WLFW_REQUEST_MEM_IND -for recovery arrived, the trunk[0] is freed in ath11k_qmi_alloc_target_mem_chunk() -and then dma_alloc_coherent() failed caused by large size, and then -trunk[1] is freed in ath11k_qmi_free_target_mem_chunk(), the left 18 -trunks will be reuse for the 2nd QMI_WLFW_REQUEST_MEM_IND message. - -Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3 - -Fixes: 5962f370ce41 ("ath11k: Reuse the available memory after firmware reload") -Signed-off-by: Wen Gong -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/20220928073832.16251-1-quic_wgong@quicinc.com ---- - drivers/net/wireless/ath/ath11k/qmi.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - ---- a/drivers/net/wireless/ath/ath11k/qmi.c -+++ b/drivers/net/wireless/ath/ath11k/qmi.c -@@ -1961,7 +1961,7 @@ static void ath11k_qmi_free_target_mem_c - continue; - - dma_free_coherent(ab->dev, -- ab->qmi.target_mem[i].size, -+ ab->qmi.target_mem[i].prev_size, - ab->qmi.target_mem[i].vaddr, - ab->qmi.target_mem[i].paddr); - ab->qmi.target_mem[i].vaddr = NULL; -@@ -1982,12 +1982,12 @@ static int ath11k_qmi_alloc_target_mem_c - * in such case, no need to allocate memory for FW again. - */ - if (chunk->vaddr) { -- if (chunk->prev_type == chunk->type || -+ if (chunk->prev_type == chunk->type && - chunk->prev_size == chunk->size) - continue; - - /* cannot reuse the existing chunk */ -- dma_free_coherent(ab->dev, chunk->size, -+ dma_free_coherent(ab->dev, chunk->prev_size, - chunk->vaddr, chunk->paddr); - chunk->vaddr = NULL; - } diff --git a/package/kernel/mac80211/patches/ath11k/0006-wifi-ath11k-fix-firmware-assert-during-bandwidth-cha.patch b/package/kernel/mac80211/patches/ath11k/0006-wifi-ath11k-fix-firmware-assert-during-bandwidth-cha.patch deleted file mode 100644 index f4fedb46ccb..00000000000 --- a/package/kernel/mac80211/patches/ath11k/0006-wifi-ath11k-fix-firmware-assert-during-bandwidth-cha.patch +++ /dev/null @@ -1,225 +0,0 @@ -From 3ff51d7416ee1ea2d771051a0ffa1ec8be054768 Mon Sep 17 00:00:00 2001 -From: Aditya Kumar Singh -Date: Wed, 5 Oct 2022 15:24:30 +0530 -Subject: [PATCH 6/9] wifi: ath11k: fix firmware assert during bandwidth change - for peer sta - -Currently, ath11k sends peer assoc command for each peer to -firmware when bandwidth changes. Peer assoc command is a -bulky command and if many clients are connected, this could -lead to firmware buffer getting overflowed leading to a firmware -assert. - -However, during bandwidth change, only phymode and bandwidth -also can be updated by WMI set peer param command. This makes -the overall command light when compared to peer assoc and for -multi-client cases, firmware buffer overflow also does not -occur. - -Remove sending peer assoc command during sta bandwidth change -and instead add sending WMI set peer param command for phymode -and bandwidth. - -Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.5.0.1-01100-QCAHKSWPL_SILICONZ-1 - -Fixes: f187fe8e3bc65 ("ath11k: fix firmware crash during channel switch") -Signed-off-by: Aditya Kumar Singh -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/20221005095430.19890-1-quic_adisi@quicinc.com ---- - drivers/net/wireless/ath/ath11k/core.h | 2 + - drivers/net/wireless/ath/ath11k/mac.c | 122 +++++++++++++++++-------- - 2 files changed, 87 insertions(+), 37 deletions(-) - ---- a/drivers/net/wireless/ath/ath11k/core.h -+++ b/drivers/net/wireless/ath/ath11k/core.h -@@ -505,6 +505,8 @@ struct ath11k_sta { - u64 ps_start_jiffies; - u64 ps_total_duration; - bool peer_current_ps_valid; -+ -+ u32 bw_prev; - }; - - #define ATH11K_MIN_5G_FREQ 4150 ---- a/drivers/net/wireless/ath/ath11k/mac.c -+++ b/drivers/net/wireless/ath/ath11k/mac.c -@@ -4215,10 +4215,11 @@ static void ath11k_sta_rc_update_wk(stru - const u8 *ht_mcs_mask; - const u16 *vht_mcs_mask; - const u16 *he_mcs_mask; -- u32 changed, bw, nss, smps; -+ u32 changed, bw, nss, smps, bw_prev; - int err, num_vht_rates, num_he_rates; - const struct cfg80211_bitrate_mask *mask; - struct peer_assoc_params peer_arg; -+ enum wmi_phy_mode peer_phymode; - - arsta = container_of(wk, struct ath11k_sta, update_wk); - sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv); -@@ -4239,6 +4240,7 @@ static void ath11k_sta_rc_update_wk(stru - arsta->changed = 0; - - bw = arsta->bw; -+ bw_prev = arsta->bw_prev; - nss = arsta->nss; - smps = arsta->smps; - -@@ -4252,26 +4254,57 @@ static void ath11k_sta_rc_update_wk(stru - ath11k_mac_max_he_nss(he_mcs_mask))); - - if (changed & IEEE80211_RC_BW_CHANGED) { -- /* Send peer assoc command before set peer bandwidth param to -- * avoid the mismatch between the peer phymode and the peer -- * bandwidth. -- */ -- ath11k_peer_assoc_prepare(ar, arvif->vif, sta, &peer_arg, true); -+ /* Get the peer phymode */ -+ ath11k_peer_assoc_h_phymode(ar, arvif->vif, sta, &peer_arg); -+ peer_phymode = peer_arg.peer_phymode; -+ -+ ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "mac update sta %pM peer bw %d phymode %d\n", -+ sta->addr, bw, peer_phymode); -+ -+ if (bw > bw_prev) { -+ /* BW is upgraded. In this case we send WMI_PEER_PHYMODE -+ * followed by WMI_PEER_CHWIDTH -+ */ -+ ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "mac BW upgrade for sta %pM new BW %d, old BW %d\n", -+ sta->addr, bw, bw_prev); -+ -+ err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id, -+ WMI_PEER_PHYMODE, peer_phymode); -+ -+ if (err) { -+ ath11k_warn(ar->ab, "failed to update STA %pM peer phymode %d: %d\n", -+ sta->addr, peer_phymode, err); -+ goto err_rc_bw_changed; -+ } - -- peer_arg.is_assoc = false; -- err = ath11k_wmi_send_peer_assoc_cmd(ar, &peer_arg); -- if (err) { -- ath11k_warn(ar->ab, "failed to send peer assoc for STA %pM vdev %i: %d\n", -- sta->addr, arvif->vdev_id, err); -- } else if (wait_for_completion_timeout(&ar->peer_assoc_done, 1 * HZ)) { - err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id, - WMI_PEER_CHWIDTH, bw); -+ - if (err) - ath11k_warn(ar->ab, "failed to update STA %pM peer bw %d: %d\n", - sta->addr, bw, err); - } else { -- ath11k_warn(ar->ab, "failed to get peer assoc conf event for %pM vdev %i\n", -- sta->addr, arvif->vdev_id); -+ /* BW is downgraded. In this case we send WMI_PEER_CHWIDTH -+ * followed by WMI_PEER_PHYMODE -+ */ -+ ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "mac BW downgrade for sta %pM new BW %d,old BW %d\n", -+ sta->addr, bw, bw_prev); -+ -+ err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id, -+ WMI_PEER_CHWIDTH, bw); -+ -+ if (err) { -+ ath11k_warn(ar->ab, "failed to update STA %pM peer bw %d: %d\n", -+ sta->addr, bw, err); -+ goto err_rc_bw_changed; -+ } -+ -+ err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id, -+ WMI_PEER_PHYMODE, peer_phymode); -+ -+ if (err) -+ ath11k_warn(ar->ab, "failed to update STA %pM peer phymode %d: %d\n", -+ sta->addr, peer_phymode, err); - } - } - -@@ -4352,6 +4385,7 @@ static void ath11k_sta_rc_update_wk(stru - } - } - -+err_rc_bw_changed: - mutex_unlock(&ar->conf_mutex); - } - -@@ -4505,6 +4539,34 @@ exit: - return ret; - } - -+static u32 ath11k_mac_ieee80211_sta_bw_to_wmi(struct ath11k *ar, -+ struct ieee80211_sta *sta) -+{ -+ u32 bw = WMI_PEER_CHWIDTH_20MHZ; -+ -+ switch (sta->deflink.bandwidth) { -+ case IEEE80211_STA_RX_BW_20: -+ bw = WMI_PEER_CHWIDTH_20MHZ; -+ break; -+ case IEEE80211_STA_RX_BW_40: -+ bw = WMI_PEER_CHWIDTH_40MHZ; -+ break; -+ case IEEE80211_STA_RX_BW_80: -+ bw = WMI_PEER_CHWIDTH_80MHZ; -+ break; -+ case IEEE80211_STA_RX_BW_160: -+ bw = WMI_PEER_CHWIDTH_160MHZ; -+ break; -+ default: -+ ath11k_warn(ar->ab, "Invalid bandwidth %d for %pM\n", -+ sta->deflink.bandwidth, sta->addr); -+ bw = WMI_PEER_CHWIDTH_20MHZ; -+ break; -+ } -+ -+ return bw; -+} -+ - static int ath11k_mac_op_sta_state(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - struct ieee80211_sta *sta, -@@ -4590,6 +4652,12 @@ static int ath11k_mac_op_sta_state(struc - if (ret) - ath11k_warn(ar->ab, "Failed to associate station: %pM\n", - sta->addr); -+ -+ spin_lock_bh(&ar->data_lock); -+ /* Set arsta bw and prev bw */ -+ arsta->bw = ath11k_mac_ieee80211_sta_bw_to_wmi(ar, sta); -+ arsta->bw_prev = arsta->bw; -+ spin_unlock_bh(&ar->data_lock); - } else if (old_state == IEEE80211_STA_ASSOC && - new_state == IEEE80211_STA_AUTHORIZED) { - spin_lock_bh(&ar->ab->base_lock); -@@ -4713,28 +4781,8 @@ static void ath11k_mac_op_sta_rc_update( - spin_lock_bh(&ar->data_lock); - - if (changed & IEEE80211_RC_BW_CHANGED) { -- bw = WMI_PEER_CHWIDTH_20MHZ; -- -- switch (sta->deflink.bandwidth) { -- case IEEE80211_STA_RX_BW_20: -- bw = WMI_PEER_CHWIDTH_20MHZ; -- break; -- case IEEE80211_STA_RX_BW_40: -- bw = WMI_PEER_CHWIDTH_40MHZ; -- break; -- case IEEE80211_STA_RX_BW_80: -- bw = WMI_PEER_CHWIDTH_80MHZ; -- break; -- case IEEE80211_STA_RX_BW_160: -- bw = WMI_PEER_CHWIDTH_160MHZ; -- break; -- default: -- ath11k_warn(ar->ab, "Invalid bandwidth %d in rc update for %pM\n", -- sta->deflink.bandwidth, sta->addr); -- bw = WMI_PEER_CHWIDTH_20MHZ; -- break; -- } -- -+ bw = ath11k_mac_ieee80211_sta_bw_to_wmi(ar, sta); -+ arsta->bw_prev = arsta->bw; - arsta->bw = bw; - } - diff --git a/package/kernel/mac80211/patches/ath11k/0009-wifi-ath11k-Send-PME-message-during-wakeup-from-D3co.patch b/package/kernel/mac80211/patches/ath11k/0009-wifi-ath11k-Send-PME-message-during-wakeup-from-D3co.patch deleted file mode 100644 index 1e04c974fe3..00000000000 --- a/package/kernel/mac80211/patches/ath11k/0009-wifi-ath11k-Send-PME-message-during-wakeup-from-D3co.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 3f9b09ccf7d5f23066b02881a737bee42def9d1a Mon Sep 17 00:00:00 2001 -From: Baochen Qiang -Date: Mon, 10 Oct 2022 11:32:37 +0800 -Subject: [PATCH 9/9] wifi: ath11k: Send PME message during wakeup from D3cold - -We are seeing system stuck on some specific platforms due to -WLAN chip fails to wakeup from D3cold state. - -With this flag, firmware will send PME message during wakeup -and this issue is gone. - -Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3 - -Signed-off-by: Baochen Qiang -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/20221010033237.415478-1-quic_bqiang@quicinc.com ---- - drivers/net/wireless/ath/ath11k/qmi.c | 3 +++ - 1 file changed, 3 insertions(+) - ---- a/drivers/net/wireless/ath/ath11k/qmi.c -+++ b/drivers/net/wireless/ath/ath11k/qmi.c -@@ -19,6 +19,7 @@ - #define SLEEP_CLOCK_SELECT_INTERNAL_BIT 0x02 - #define HOST_CSTATE_BIT 0x04 - #define PLATFORM_CAP_PCIE_GLOBAL_RESET 0x08 -+#define PLATFORM_CAP_PCIE_PME_D3COLD 0x10 - - #define FW_BUILD_ID_MASK "QC_IMAGE_VERSION_STRING=" - -@@ -1752,6 +1753,8 @@ static int ath11k_qmi_host_cap_send(stru - if (ab->hw_params.global_reset) - req.nm_modem |= PLATFORM_CAP_PCIE_GLOBAL_RESET; - -+ req.nm_modem |= PLATFORM_CAP_PCIE_PME_D3COLD; -+ - ath11k_dbg(ab, ATH11K_DBG_QMI, "qmi host cap request\n"); - - ret = qmi_txn_init(&ab->qmi.handle, &txn, diff --git a/package/kernel/mac80211/patches/ath11k/0012-wifi-ath11k-Fix-qmi_msg_handler-data-structure-initi.patch b/package/kernel/mac80211/patches/ath11k/0012-wifi-ath11k-Fix-qmi_msg_handler-data-structure-initi.patch index 1f7418ff89f..fccfa4385a7 100644 --- a/package/kernel/mac80211/patches/ath11k/0012-wifi-ath11k-Fix-qmi_msg_handler-data-structure-initi.patch +++ b/package/kernel/mac80211/patches/ath11k/0012-wifi-ath11k-Fix-qmi_msg_handler-data-structure-initi.patch @@ -21,13 +21,13 @@ Link: https://lore.kernel.org/r/20221021090126.28626-1-quic_rbhattac@quicinc.com --- a/drivers/net/wireless/ath/ath11k/qmi.c +++ b/drivers/net/wireless/ath/ath11k/qmi.c -@@ -3090,6 +3090,9 @@ static const struct qmi_msg_handler ath1 - sizeof(struct qmi_wlfw_fw_init_done_ind_msg_v01), - .fn = ath11k_qmi_msg_fw_init_done_cb, +@@ -1702,6 +1702,9 @@ static struct qmi_elem_info qmi_wlfw_fw_ + .data_type = QMI_EOTI, + .array_type = NO_ARRAY, }, + + /* end of list */ + {}, }; - static int ath11k_qmi_ops_new_server(struct qmi_handle *qmi_hdl, + static int ath11k_qmi_host_cap_send(struct ath11k_base *ab) diff --git a/package/kernel/mac80211/patches/ath11k/0020-wifi-ath11k-update-ce-configurations-for-IPQ5018.patch b/package/kernel/mac80211/patches/ath11k/0020-wifi-ath11k-update-ce-configurations-for-IPQ5018.patch index 9a16349b289..95643a95fec 100644 --- a/package/kernel/mac80211/patches/ath11k/0020-wifi-ath11k-update-ce-configurations-for-IPQ5018.patch +++ b/package/kernel/mac80211/patches/ath11k/0020-wifi-ath11k-update-ce-configurations-for-IPQ5018.patch @@ -34,7 +34,7 @@ Link: https://lore.kernel.org/r/20221122132152.17771-4-quic_kathirve@quicinc.com .rx_mac_buf_ring = false, --- a/drivers/net/wireless/ath/ath11k/core.h +++ b/drivers/net/wireless/ath/ath11k/core.h -@@ -1146,6 +1146,9 @@ extern const struct service_to_pipe ath1 +@@ -1145,6 +1145,9 @@ extern const struct service_to_pipe ath1 extern const struct ce_pipe_config ath11k_target_ce_config_wlan_qca6390[]; extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_qca6390[]; diff --git a/package/kernel/mac80211/patches/ath11k/0027-wifi-ath11k-fix-monitor-mode-bringup-crash.patch b/package/kernel/mac80211/patches/ath11k/0027-wifi-ath11k-fix-monitor-mode-bringup-crash.patch deleted file mode 100644 index 62397de7264..00000000000 --- a/package/kernel/mac80211/patches/ath11k/0027-wifi-ath11k-fix-monitor-mode-bringup-crash.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 950b43f8bd8a4d476d2da6d2a083a89bcd3c90d7 Mon Sep 17 00:00:00 2001 -From: Nagarajan Maran -Date: Tue, 29 Nov 2022 19:55:32 +0530 -Subject: [PATCH] wifi: ath11k: fix monitor mode bringup crash - -When the interface is brought up in monitor mode, it leads -to NULL pointer dereference crash. This crash happens when -the packet type is extracted for a SKB. This extraction -which is present in the received msdu delivery path,is -not needed for the monitor ring packets since they are -all RAW packets. Hence appending the flags with -"RX_FLAG_ONLY_MONITOR" to skip that extraction. - -Observed calltrace: - -Unable to handle kernel NULL pointer dereference at virtual address -0000000000000064 -Mem abort info: - ESR = 0x0000000096000004 - EC = 0x25: DABT (current EL), IL = 32 bits - SET = 0, FnV = 0 - EA = 0, S1PTW = 0 - FSC = 0x04: level 0 translation fault -Data abort info: - ISV = 0, ISS = 0x00000004 - CM = 0, WnR = 0 -user pgtable: 4k pages, 48-bit VAs, pgdp=0000000048517000 -[0000000000000064] pgd=0000000000000000, p4d=0000000000000000 -Internal error: Oops: 0000000096000004 [#1] PREEMPT SMP -Modules linked in: ath11k_pci ath11k qmi_helpers -CPU: 2 PID: 1781 Comm: napi/-271 Not tainted -6.1.0-rc5-wt-ath-656295-gef907406320c-dirty #6 -Hardware name: Qualcomm Technologies, Inc. IPQ8074/AP-HK10-C2 (DT) -pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--) -pc : ath11k_hw_qcn9074_rx_desc_get_decap_type+0x34/0x60 [ath11k] -lr : ath11k_hw_qcn9074_rx_desc_get_decap_type+0x5c/0x60 [ath11k] -sp : ffff80000ef5bb10 -x29: ffff80000ef5bb10 x28: 0000000000000000 x27: ffff000007baafa0 -x26: ffff000014a91ed0 x25: 0000000000000000 x24: 0000000000000000 -x23: ffff800002b77378 x22: ffff000014a91ec0 x21: ffff000006c8d600 -x20: 0000000000000000 x19: ffff800002b77740 x18: 0000000000000006 -x17: 736564203634343a x16: 656e694c20657079 x15: 0000000000000143 -x14: 00000000ffffffea x13: ffff80000ef5b8b8 x12: ffff80000ef5b8c8 -x11: ffff80000a591d30 x10: ffff80000a579d40 x9 : c0000000ffffefff -x8 : 0000000000000003 x7 : 0000000000017fe8 x6 : ffff80000a579ce8 -x5 : 0000000000000000 x4 : 0000000000000000 x3 : 0000000000000000 -x2 : 3a35ec12ed7f8900 x1 : 0000000000000000 x0 : 0000000000000052 -Call trace: - ath11k_hw_qcn9074_rx_desc_get_decap_type+0x34/0x60 [ath11k] - ath11k_dp_rx_deliver_msdu.isra.42+0xa4/0x3d0 [ath11k] - ath11k_dp_rx_mon_deliver.isra.43+0x2f8/0x458 [ath11k] - ath11k_dp_rx_process_mon_rings+0x310/0x4c0 [ath11k] - ath11k_dp_service_srng+0x234/0x338 [ath11k] - ath11k_pcic_ext_grp_napi_poll+0x30/0xb8 [ath11k] - __napi_poll+0x5c/0x190 - napi_threaded_poll+0xf0/0x118 - kthread+0xf4/0x110 - ret_from_fork+0x10/0x20 - -Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1 -Reported-by: Florian Schmidt -Link: https://bugzilla.kernel.org/show_bug.cgi?id=216573 -Signed-off-by: Nagarajan Maran -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/20221129142532.23421-1-quic_nmaran@quicinc.com ---- - drivers/net/wireless/ath/ath11k/dp_rx.c | 1 + - 1 file changed, 1 insertion(+) - ---- a/drivers/net/wireless/ath/ath11k/dp_rx.c -+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c -@@ -5022,6 +5022,7 @@ static int ath11k_dp_rx_mon_deliver(stru - } else { - rxs->flag |= RX_FLAG_ALLOW_SAME_PN; - } -+ rxs->flag |= RX_FLAG_ONLY_MONITOR; - ath11k_update_radiotap(ar, ppduinfo, mon_skb, rxs); - - ath11k_dp_rx_deliver_msdu(ar, napi, mon_skb, rxs); diff --git a/package/kernel/mac80211/patches/ath11k/0028-wifi-ath11k-debugfs-fix-to-work-with-multiple-PCI-de.patch b/package/kernel/mac80211/patches/ath11k/0028-wifi-ath11k-debugfs-fix-to-work-with-multiple-PCI-de.patch deleted file mode 100644 index 225c4b4316f..00000000000 --- a/package/kernel/mac80211/patches/ath11k/0028-wifi-ath11k-debugfs-fix-to-work-with-multiple-PCI-de.patch +++ /dev/null @@ -1,139 +0,0 @@ -From 323d91d4684d238f6bc3693fed93caf795378fe0 Mon Sep 17 00:00:00 2001 -From: Kalle Valo -Date: Thu, 22 Dec 2022 19:15:59 +0200 -Subject: [PATCH] wifi: ath11k: debugfs: fix to work with multiple PCI devices - -ath11k fails to load if there are multiple ath11k PCI devices with same name: - - ath11k_pci 0000:01:00.0: Hardware name qcn9074 hw1.0 - debugfs: Directory 'ath11k' with parent '/' already present! - ath11k_pci 0000:01:00.0: failed to create ath11k debugfs - ath11k_pci 0000:01:00.0: failed to create soc core: -17 - ath11k_pci 0000:01:00.0: failed to init core: -17 - ath11k_pci: probe of 0000:01:00.0 failed with error -17 - -Fix this by creating a directory for each ath11k device using schema --, for example "pci-0000:06:00.0". This directory created under -the top-level ath11k directory, for example /sys/kernel/debug/ath11k. - -The reference to the toplevel ath11k directory is not stored anymore within ath11k, instead -it's retrieved using debugfs_lookup(). If the directory does not exist it will -be created. After the last directory from the ath11k directory is removed, for -example when doing rmmod ath11k, the empty ath11k directory is left in place, -it's a minor cosmetic issue anyway. - -Here's an example hierarchy with one WCN6855: - -ath11k -`-- pci-0000:06:00.0 - |-- mac0 - | |-- dfs_block_radar_events - | |-- dfs_simulate_radar - | |-- ext_rx_stats - | |-- ext_tx_stats - | |-- fw_dbglog_config - | |-- fw_stats - | | |-- beacon_stats - | | |-- pdev_stats - | | `-- vdev_stats - | |-- htt_stats - | |-- htt_stats_reset - | |-- htt_stats_type - | `-- pktlog_filter - |-- simulate_fw_crash - `-- soc_dp_stats - -I didn't have a test setup where I could connect multiple ath11k devices to the -same the host, so I have only tested this with one device. - -Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.9 -Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-01208-QCAHKSWPL_SILICONZ-1 -Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.5.0.1-01208-QCAHKSWPL_SILICONZ-1 - -Tested-by: Robert Marko -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/20221220121231.20120-1-kvalo@kernel.org ---- - drivers/net/wireless/ath/ath11k/core.h | 1 - - drivers/net/wireless/ath/ath11k/debugfs.c | 48 +++++++++++++++++++---- - 2 files changed, 40 insertions(+), 9 deletions(-) - ---- a/drivers/net/wireless/ath/ath11k/core.h -+++ b/drivers/net/wireless/ath/ath11k/core.h -@@ -921,7 +921,6 @@ struct ath11k_base { - enum ath11k_dfs_region dfs_region; - #ifdef CPTCFG_ATH11K_DEBUGFS - struct dentry *debugfs_soc; -- struct dentry *debugfs_ath11k; - #endif - struct ath11k_soc_dp_stats soc_stats; - ---- a/drivers/net/wireless/ath/ath11k/debugfs.c -+++ b/drivers/net/wireless/ath/ath11k/debugfs.c -@@ -976,10 +976,6 @@ int ath11k_debugfs_pdev_create(struct at - if (test_bit(ATH11K_FLAG_REGISTERED, &ab->dev_flags)) - return 0; - -- ab->debugfs_soc = debugfs_create_dir(ab->hw_params.name, ab->debugfs_ath11k); -- if (IS_ERR(ab->debugfs_soc)) -- return PTR_ERR(ab->debugfs_soc); -- - debugfs_create_file("simulate_fw_crash", 0600, ab->debugfs_soc, ab, - &fops_simulate_fw_crash); - -@@ -1001,15 +997,51 @@ void ath11k_debugfs_pdev_destroy(struct - - int ath11k_debugfs_soc_create(struct ath11k_base *ab) - { -- ab->debugfs_ath11k = debugfs_create_dir("ath11k", NULL); -+ struct dentry *root; -+ bool dput_needed; -+ char name[64]; -+ int ret; -+ -+ root = debugfs_lookup("ath11k", NULL); -+ if (!root) { -+ root = debugfs_create_dir("ath11k", NULL); -+ if (IS_ERR_OR_NULL(root)) -+ return PTR_ERR(root); -+ -+ dput_needed = false; -+ } else { -+ /* a dentry from lookup() needs dput() after we don't use it */ -+ dput_needed = true; -+ } -+ -+ scnprintf(name, sizeof(name), "%s-%s", ath11k_bus_str(ab->hif.bus), -+ dev_name(ab->dev)); -+ -+ ab->debugfs_soc = debugfs_create_dir(name, root); -+ if (IS_ERR_OR_NULL(ab->debugfs_soc)) { -+ ret = PTR_ERR(ab->debugfs_soc); -+ goto out; -+ } -+ -+ ret = 0; -+ -+out: -+ if (dput_needed) -+ dput(root); - -- return PTR_ERR_OR_ZERO(ab->debugfs_ath11k); -+ return ret; - } - - void ath11k_debugfs_soc_destroy(struct ath11k_base *ab) - { -- debugfs_remove_recursive(ab->debugfs_ath11k); -- ab->debugfs_ath11k = NULL; -+ debugfs_remove_recursive(ab->debugfs_soc); -+ ab->debugfs_soc = NULL; -+ -+ /* We are not removing ath11k directory on purpose, even if it -+ * would be empty. This simplifies the directory handling and it's -+ * a minor cosmetic issue to leave an empty ath11k directory to -+ * debugfs. -+ */ - } - EXPORT_SYMBOL(ath11k_debugfs_soc_destroy); - diff --git a/package/kernel/mac80211/patches/ath11k/0032-wifi-ath11k-Fix-memory-leak-in-ath11k_peer_rx_frag_s.patch b/package/kernel/mac80211/patches/ath11k/0032-wifi-ath11k-Fix-memory-leak-in-ath11k_peer_rx_frag_s.patch deleted file mode 100644 index 40b0630af81..00000000000 --- a/package/kernel/mac80211/patches/ath11k/0032-wifi-ath11k-Fix-memory-leak-in-ath11k_peer_rx_frag_s.patch +++ /dev/null @@ -1,28 +0,0 @@ -From ed3f83b3459a67a3ab9d806490ac304b567b1c2d Mon Sep 17 00:00:00 2001 -From: Miaoqian Lin -Date: Mon, 2 Jan 2023 12:11:42 +0400 -Subject: [PATCH] wifi: ath11k: Fix memory leak in ath11k_peer_rx_frag_setup - -crypto_alloc_shash() allocates resources, which should be released by -crypto_free_shash(). When ath11k_peer_find() fails, there has memory -leak. Add missing crypto_free_shash() to fix this. - -Fixes: 243874c64c81 ("ath11k: handle RX fragments") -Signed-off-by: Miaoqian Lin -Reviewed-by: Leon Romanovsky -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/20230102081142.3937570-1-linmq006@gmail.com ---- - drivers/net/wireless/ath/ath11k/dp_rx.c | 1 + - 1 file changed, 1 insertion(+) - ---- a/drivers/net/wireless/ath/ath11k/dp_rx.c -+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c -@@ -3126,6 +3126,7 @@ int ath11k_peer_rx_frag_setup(struct ath - if (!peer) { - ath11k_warn(ab, "failed to find the peer to set up fragment info\n"); - spin_unlock_bh(&ab->base_lock); -+ crypto_free_shash(tfm); - return -ENOENT; - } - diff --git a/package/kernel/mac80211/patches/ath11k/0037-wifi-ath11k-allow-system-suspend-to-survive-ath11k.patch b/package/kernel/mac80211/patches/ath11k/0037-wifi-ath11k-allow-system-suspend-to-survive-ath11k.patch index cd8ab3dc4ef..fa680954e6f 100644 --- a/package/kernel/mac80211/patches/ath11k/0037-wifi-ath11k-allow-system-suspend-to-survive-ath11k.patch +++ b/package/kernel/mac80211/patches/ath11k/0037-wifi-ath11k-allow-system-suspend-to-survive-ath11k.patch @@ -32,12 +32,12 @@ Link: https://lore.kernel.org/r/20230201183201.14431-1-len.brown@intel.com --- a/drivers/net/wireless/ath/ath11k/pci.c +++ b/drivers/net/wireless/ath/ath11k/pci.c -@@ -981,7 +981,7 @@ static __maybe_unused int ath11k_pci_pm_ +@@ -998,7 +998,7 @@ static __maybe_unused int ath11k_pci_pm_ if (ret) - ath11k_warn(ab, "failed to suspend core: %d\n", ret); + ath11k_warn(ab, "failed to resume core: %d\n", ret); - return ret; + return 0; } - static __maybe_unused int ath11k_pci_pm_resume(struct device *dev) + static SIMPLE_DEV_PM_OPS(ath11k_pci_pm_ops, diff --git a/package/kernel/mac80211/patches/brcm/861-brcmfmac-workaround-bug-with-some-inconsistent-BSSes.patch b/package/kernel/mac80211/patches/brcm/861-brcmfmac-workaround-bug-with-some-inconsistent-BSSes.patch index 4db63f92e69..b82b442a1e1 100644 --- a/package/kernel/mac80211/patches/brcm/861-brcmfmac-workaround-bug-with-some-inconsistent-BSSes.patch +++ b/package/kernel/mac80211/patches/brcm/861-brcmfmac-workaround-bug-with-some-inconsistent-BSSes.patch @@ -10,7 +10,7 @@ Signed-off-by: Rafał Miłecki --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c -@@ -710,8 +710,36 @@ static struct wireless_dev *brcmf_cfg802 +@@ -713,8 +713,36 @@ static struct wireless_dev *brcmf_cfg802 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); struct brcmf_pub *drvr = cfg->pub; struct wireless_dev *wdev; diff --git a/package/kernel/mac80211/patches/brcm/862-brcmfmac-Disable-power-management.patch b/package/kernel/mac80211/patches/brcm/862-brcmfmac-Disable-power-management.patch index 16eef0e105a..080ab8f7efd 100644 --- a/package/kernel/mac80211/patches/brcm/862-brcmfmac-Disable-power-management.patch +++ b/package/kernel/mac80211/patches/brcm/862-brcmfmac-Disable-power-management.patch @@ -14,7 +14,7 @@ Signed-off-by: Phil Elwell --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c -@@ -2973,6 +2973,10 @@ brcmf_cfg80211_set_power_mgmt(struct wip +@@ -2976,6 +2976,10 @@ brcmf_cfg80211_set_power_mgmt(struct wip * preference in cfg struct to apply this to * FW later while initializing the dongle */ diff --git a/package/kernel/mac80211/patches/brcm/863-brcmfmac-add-in-driver-tables-with-country-codes.patch b/package/kernel/mac80211/patches/brcm/863-brcmfmac-add-in-driver-tables-with-country-codes.patch index cd202f65760..25191b6439e 100644 --- a/package/kernel/mac80211/patches/brcm/863-brcmfmac-add-in-driver-tables-with-country-codes.patch +++ b/package/kernel/mac80211/patches/brcm/863-brcmfmac-add-in-driver-tables-with-country-codes.patch @@ -49,7 +49,7 @@ Signed-off-by: Rafał Miłecki void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type, struct brcmf_mp_device *settings) { -@@ -105,6 +135,8 @@ void brcmf_of_probe(struct device *dev, +@@ -106,6 +136,8 @@ void brcmf_of_probe(struct device *dev, of_node_put(root); } diff --git a/package/kernel/mac80211/patches/brcm/865-brcmfmac-Read-alternative-firmware-names-from-DT.patch b/package/kernel/mac80211/patches/brcm/865-brcmfmac-Read-alternative-firmware-names-from-DT.patch index 7d0e730b692..8ed81f600ab 100644 --- a/package/kernel/mac80211/patches/brcm/865-brcmfmac-Read-alternative-firmware-names-from-DT.patch +++ b/package/kernel/mac80211/patches/brcm/865-brcmfmac-Read-alternative-firmware-names-from-DT.patch @@ -24,7 +24,7 @@ Signed-off-by: Phil Elwell #include "of.h" static int brcmf_of_get_country_codes(struct device *dev, -@@ -167,3 +168,38 @@ void brcmf_of_probe(struct device *dev, +@@ -168,3 +169,38 @@ void brcmf_of_probe(struct device *dev, sdio->oob_irq_nr = irq; sdio->oob_irq_flags = irqf; } @@ -111,7 +111,7 @@ Signed-off-by: Phil Elwell #define TXCTL_CREDITS 2 static void pkt_align(struct sk_buff *p, int len, int align) -@@ -4192,6 +4196,9 @@ static const struct brcmf_bus_ops brcmf_ +@@ -4193,6 +4197,9 @@ static const struct brcmf_bus_ops brcmf_ #define BRCMF_SDIO_FW_NVRAM 1 #define BRCMF_SDIO_FW_CLM 2 @@ -121,7 +121,7 @@ Signed-off-by: Phil Elwell static void brcmf_sdio_firmware_callback(struct device *dev, int err, struct brcmf_fw_request *fwreq) { -@@ -4207,6 +4214,22 @@ static void brcmf_sdio_firmware_callback +@@ -4208,6 +4215,22 @@ static void brcmf_sdio_firmware_callback brcmf_dbg(TRACE, "Enter: dev=%s, err=%d\n", dev_name(dev), err); @@ -144,7 +144,7 @@ Signed-off-by: Phil Elwell if (err) goto fail; -@@ -4417,7 +4440,7 @@ brcmf_sdio_prepare_fw_request(struct brc +@@ -4418,7 +4441,7 @@ brcmf_sdio_prepare_fw_request(struct brc fwreq = brcmf_fw_alloc_request(bus->ci->chip, bus->ci->chiprev, brcmf_sdio_fwnames, @@ -153,7 +153,7 @@ Signed-off-by: Phil Elwell fwnames, ARRAY_SIZE(fwnames)); if (!fwreq) return NULL; -@@ -4437,6 +4460,9 @@ struct brcmf_sdio *brcmf_sdio_probe(stru +@@ -4438,6 +4461,9 @@ struct brcmf_sdio *brcmf_sdio_probe(stru struct brcmf_sdio *bus; struct workqueue_struct *wq; struct brcmf_fw_request *fwreq; @@ -163,7 +163,7 @@ Signed-off-by: Phil Elwell brcmf_dbg(TRACE, "Enter\n"); -@@ -4519,6 +4545,21 @@ struct brcmf_sdio *brcmf_sdio_probe(stru +@@ -4520,6 +4546,21 @@ struct brcmf_sdio *brcmf_sdio_probe(stru brcmf_dbg(INFO, "completed!!\n"); diff --git a/package/kernel/mac80211/patches/build/080-resv_start_op.patch b/package/kernel/mac80211/patches/build/080-resv_start_op.patch index 67ccc73a484..40b8e94a201 100644 --- a/package/kernel/mac80211/patches/build/080-resv_start_op.patch +++ b/package/kernel/mac80211/patches/build/080-resv_start_op.patch @@ -12,7 +12,7 @@ }; --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c -@@ -17232,7 +17232,9 @@ static struct genl_family nl80211_fam __ +@@ -17233,7 +17233,9 @@ static struct genl_family nl80211_fam __ .n_ops = ARRAY_SIZE(nl80211_ops), .small_ops = nl80211_small_ops, .n_small_ops = ARRAY_SIZE(nl80211_small_ops), diff --git a/package/kernel/mac80211/patches/build/110-backport_napi_build_skb.patch b/package/kernel/mac80211/patches/build/110-backport_napi_build_skb.patch index e2f6be56334..1e152feceac 100644 --- a/package/kernel/mac80211/patches/build/110-backport_napi_build_skb.patch +++ b/package/kernel/mac80211/patches/build/110-backport_napi_build_skb.patch @@ -1,7 +1,7 @@ --- a/backport-include/linux/skbuff.h +++ b/backport-include/linux/skbuff.h -@@ -140,4 +140,8 @@ static inline u64 skb_get_kcov_handle(st - } +@@ -144,4 +144,8 @@ static inline u64 skb_get_kcov_handle(st + #define napi_build_skb build_skb #endif +#if LINUX_VERSION_IS_LESS(5,11,0) diff --git a/package/kernel/mac80211/patches/mwl/801-libertas-configure-sysfs-links.patch b/package/kernel/mac80211/patches/mwl/801-libertas-configure-sysfs-links.patch index 2c426ab828f..1dbcb1bfef3 100644 --- a/package/kernel/mac80211/patches/mwl/801-libertas-configure-sysfs-links.patch +++ b/package/kernel/mac80211/patches/mwl/801-libertas-configure-sysfs-links.patch @@ -11,7 +11,7 @@ err_wiphy_new: --- a/drivers/net/wireless/marvell/libertas/main.c +++ b/drivers/net/wireless/marvell/libertas/main.c -@@ -934,6 +934,7 @@ struct lbs_private *lbs_add_card(void *c +@@ -935,6 +935,7 @@ struct lbs_private *lbs_add_card(void *c goto err_adapter; } diff --git a/package/kernel/mac80211/patches/subsys/110-mac80211_keep_keys_on_stop_ap.patch b/package/kernel/mac80211/patches/subsys/110-mac80211_keep_keys_on_stop_ap.patch index 4dd26da2ec7..4d4a2a8f5e8 100644 --- a/package/kernel/mac80211/patches/subsys/110-mac80211_keep_keys_on_stop_ap.patch +++ b/package/kernel/mac80211/patches/subsys/110-mac80211_keep_keys_on_stop_ap.patch @@ -9,8 +9,8 @@ Used for AP+STA support in OpenWrt - preserve AP mode keys across STA reconnect --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c -@@ -1512,7 +1512,6 @@ static int ieee80211_stop_ap(struct wiph - link_conf->ftmr_params = NULL; +@@ -1519,7 +1519,6 @@ static int ieee80211_stop_ap(struct wiph + link_conf->bssid_indicator = 0; __sta_info_flush(sdata, true); - ieee80211_free_keys(sdata, true); diff --git a/package/kernel/mac80211/patches/subsys/210-ap_scan.patch b/package/kernel/mac80211/patches/subsys/210-ap_scan.patch index bfbb28c55cc..10b842d9af3 100644 --- a/package/kernel/mac80211/patches/subsys/210-ap_scan.patch +++ b/package/kernel/mac80211/patches/subsys/210-ap_scan.patch @@ -8,7 +8,7 @@ Subject: [PATCH] mac80211: allow scans in access point mode (for site survey) --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c -@@ -2720,6 +2720,8 @@ static int ieee80211_scan(struct wiphy * +@@ -2727,6 +2727,8 @@ static int ieee80211_scan(struct wiphy * */ fallthrough; case NL80211_IFTYPE_AP: diff --git a/package/kernel/mac80211/patches/subsys/305-mac80211-increase-quantum-for-airtime-scheduler.patch b/package/kernel/mac80211/patches/subsys/305-mac80211-increase-quantum-for-airtime-scheduler.patch index d541b621fdb..0ac972955f0 100644 --- a/package/kernel/mac80211/patches/subsys/305-mac80211-increase-quantum-for-airtime-scheduler.patch +++ b/package/kernel/mac80211/patches/subsys/305-mac80211-increase-quantum-for-airtime-scheduler.patch @@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -3976,7 +3976,7 @@ struct ieee80211_txq *ieee80211_next_txq +@@ -3984,7 +3984,7 @@ struct ieee80211_txq *ieee80211_next_txq if (deficit < 0) sta->airtime[txqi->txq.ac].deficit += @@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau if (deficit < 0 || !aql_check) { list_move_tail(&txqi->schedule_order, -@@ -4119,7 +4119,8 @@ bool ieee80211_txq_may_transmit(struct i +@@ -4127,7 +4127,8 @@ bool ieee80211_txq_may_transmit(struct i } sta = container_of(iter->txq.sta, struct sta_info, sta); if (ieee80211_sta_deficit(sta, ac) < 0) @@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau list_move_tail(&iter->schedule_order, &local->active_txqs[ac]); } -@@ -4127,7 +4128,7 @@ bool ieee80211_txq_may_transmit(struct i +@@ -4135,7 +4136,7 @@ bool ieee80211_txq_may_transmit(struct i if (sta->airtime[ac].deficit >= 0) goto out; diff --git a/package/kernel/mac80211/patches/subsys/306-01-v6.2-wifi-mac80211-add-internal-handler-for-wake_tx_queue.patch b/package/kernel/mac80211/patches/subsys/306-01-v6.2-wifi-mac80211-add-internal-handler-for-wake_tx_queue.patch index 76869830ce2..d14ba05e695 100644 --- a/package/kernel/mac80211/patches/subsys/306-01-v6.2-wifi-mac80211-add-internal-handler-for-wake_tx_queue.patch +++ b/package/kernel/mac80211/patches/subsys/306-01-v6.2-wifi-mac80211-add-internal-handler-for-wake_tx_queue.patch @@ -51,16 +51,7 @@ Signed-off-by: Johannes Berg * * Drivers can optionally delegate responsibility for scheduling queues to * mac80211, to take advantage of airtime fairness accounting. In this case, to -@@ -1826,7 +1827,7 @@ struct ieee80211_vif_cfg { - * for this interface. - * @drv_priv: data area for driver use, will always be aligned to - * sizeof(void \*). -- * @txq: the multicast data TX queue (if driver uses the TXQ abstraction) -+ * @txq: the multicast data TX queue - * @txqs_stopped: per AC flag to indicate that intermediate TXQs are stopped, - * protected by fq->lock. - * @offload_flags: 802.3 -> 802.11 enapsulation offload flags, see -@@ -2252,8 +2253,8 @@ struct ieee80211_link_sta { +@@ -2248,8 +2249,8 @@ struct ieee80211_link_sta { * For non MLO STA it will point to the deflink data. For MLO STA * ieee80211_sta_recalc_aggregates() must be called to update it. * @support_p2p_ps: indicates whether the STA supports P2P PS mechanism or not. @@ -71,7 +62,7 @@ Signed-off-by: Johannes Berg * @deflink: This holds the default link STA information, for non MLO STA all link * specific STA information is accessed through @deflink or through * link[0] which points to address of @deflink. For MLO Link STA -@@ -5691,7 +5692,7 @@ void ieee80211_key_replay(struct ieee802 +@@ -5687,7 +5688,7 @@ void ieee80211_key_replay(struct ieee802 * @hw: pointer as obtained from ieee80211_alloc_hw(). * @queue: queue number (counted from zero). * @@ -80,7 +71,7 @@ Signed-off-by: Johannes Berg */ void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue); -@@ -5700,7 +5701,7 @@ void ieee80211_wake_queue(struct ieee802 +@@ -5696,7 +5697,7 @@ void ieee80211_wake_queue(struct ieee802 * @hw: pointer as obtained from ieee80211_alloc_hw(). * @queue: queue number (counted from zero). * @@ -89,7 +80,7 @@ Signed-off-by: Johannes Berg */ void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue); -@@ -5709,7 +5710,7 @@ void ieee80211_stop_queue(struct ieee802 +@@ -5705,7 +5706,7 @@ void ieee80211_stop_queue(struct ieee802 * @hw: pointer as obtained from ieee80211_alloc_hw(). * @queue: queue number (counted from zero). * @@ -98,7 +89,7 @@ Signed-off-by: Johannes Berg * * Return: %true if the queue is stopped. %false otherwise. */ -@@ -5720,7 +5721,7 @@ int ieee80211_queue_stopped(struct ieee8 +@@ -5716,7 +5717,7 @@ int ieee80211_queue_stopped(struct ieee8 * ieee80211_stop_queues - stop all queues * @hw: pointer as obtained from ieee80211_alloc_hw(). * @@ -107,7 +98,7 @@ Signed-off-by: Johannes Berg */ void ieee80211_stop_queues(struct ieee80211_hw *hw); -@@ -5728,7 +5729,7 @@ void ieee80211_stop_queues(struct ieee80 +@@ -5724,7 +5725,7 @@ void ieee80211_stop_queues(struct ieee80 * ieee80211_wake_queues - wake all queues * @hw: pointer as obtained from ieee80211_alloc_hw(). * @@ -116,7 +107,7 @@ Signed-off-by: Johannes Berg */ void ieee80211_wake_queues(struct ieee80211_hw *hw); -@@ -6950,6 +6951,18 @@ static inline struct sk_buff *ieee80211_ +@@ -6946,6 +6947,18 @@ static inline struct sk_buff *ieee80211_ } /** diff --git a/package/kernel/mac80211/patches/subsys/306-02-v6.2-wifi-mac80211-add-wake_tx_queue-callback-to-drivers.patch b/package/kernel/mac80211/patches/subsys/306-02-v6.2-wifi-mac80211-add-wake_tx_queue-callback-to-drivers.patch index 8e2c2050598..fee038d90c5 100644 --- a/package/kernel/mac80211/patches/subsys/306-02-v6.2-wifi-mac80211-add-wake_tx_queue-callback-to-drivers.patch +++ b/package/kernel/mac80211/patches/subsys/306-02-v6.2-wifi-mac80211-add-wake_tx_queue-callback-to-drivers.patch @@ -26,7 +26,7 @@ Signed-off-by: Johannes Berg .add_interface = adm8211_add_interface, --- a/drivers/net/wireless/ath/ar5523/ar5523.c +++ b/drivers/net/wireless/ath/ar5523/ar5523.c -@@ -1355,6 +1355,7 @@ static const struct ieee80211_ops ar5523 +@@ -1361,6 +1361,7 @@ static const struct ieee80211_ops ar5523 .start = ar5523_start, .stop = ar5523_stop, .tx = ar5523_tx, @@ -36,7 +36,7 @@ Signed-off-by: Johannes Berg .remove_interface = ar5523_remove_interface, --- a/drivers/net/wireless/ath/ath11k/mac.c +++ b/drivers/net/wireless/ath/ath11k/mac.c -@@ -8539,6 +8539,7 @@ err_fallback: +@@ -8587,6 +8587,7 @@ err_fallback: static const struct ieee80211_ops ath11k_ops = { .tx = ath11k_mac_op_tx, @@ -126,7 +126,7 @@ Signed-off-by: Johannes Berg .add_interface = brcms_ops_add_interface, --- a/drivers/net/wireless/intel/iwlegacy/3945-mac.c +++ b/drivers/net/wireless/intel/iwlegacy/3945-mac.c -@@ -3435,6 +3435,7 @@ static const struct attribute_group il39 +@@ -3439,6 +3439,7 @@ static const struct attribute_group il39 static struct ieee80211_ops il3945_mac_ops __ro_after_init = { .tx = il3945_mac_tx, @@ -136,7 +136,7 @@ Signed-off-by: Johannes Berg .add_interface = il_mac_add_interface, --- a/drivers/net/wireless/intel/iwlegacy/4965-mac.c +++ b/drivers/net/wireless/intel/iwlegacy/4965-mac.c -@@ -6304,6 +6304,7 @@ il4965_tx_queue_set_status(struct il_pri +@@ -6308,6 +6308,7 @@ il4965_tx_queue_set_status(struct il_pri static const struct ieee80211_ops il4965_mac_ops = { .tx = il4965_mac_tx, @@ -306,7 +306,7 @@ Signed-off-by: Johannes Berg .add_interface = rtl8187_add_interface, --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c -@@ -6561,6 +6561,7 @@ static void rtl8xxxu_stop(struct ieee802 +@@ -6548,6 +6548,7 @@ static void rtl8xxxu_stop(struct ieee802 static const struct ieee80211_ops rtl8xxxu_ops = { .tx = rtl8xxxu_tx, diff --git a/package/kernel/mac80211/patches/subsys/306-03-v6.2-wifi-mac80211-Drop-support-for-TX-push-path.patch b/package/kernel/mac80211/patches/subsys/306-03-v6.2-wifi-mac80211-Drop-support-for-TX-push-path.patch index 9d58345555a..f9f9977cee5 100644 --- a/package/kernel/mac80211/patches/subsys/306-03-v6.2-wifi-mac80211-Drop-support-for-TX-push-path.patch +++ b/package/kernel/mac80211/patches/subsys/306-03-v6.2-wifi-mac80211-Drop-support-for-TX-push-path.patch @@ -11,7 +11,7 @@ Signed-off-by: Johannes Berg --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c -@@ -4339,9 +4339,6 @@ static int ieee80211_get_txq_stats(struc +@@ -4346,9 +4346,6 @@ static int ieee80211_get_txq_stats(struc struct ieee80211_sub_if_data *sdata; int ret = 0; @@ -48,7 +48,7 @@ Signed-off-by: Johannes Berg } --- a/net/mac80211/debugfs_sta.c +++ b/net/mac80211/debugfs_sta.c -@@ -1056,10 +1056,8 @@ void ieee80211_sta_debugfs_add(struct st +@@ -1057,10 +1057,8 @@ void ieee80211_sta_debugfs_add(struct st DEBUGFS_ADD_COUNTER(rx_fragments, deflink.rx_stats.fragments); DEBUGFS_ADD_COUNTER(tx_filtered, deflink.status_stats.filtered); @@ -63,7 +63,7 @@ Signed-off-by: Johannes Berg NL80211_EXT_FEATURE_AQL)) --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h -@@ -2290,7 +2290,6 @@ void ieee80211_wake_queue_by_reason(stru +@@ -2294,7 +2294,6 @@ void ieee80211_wake_queue_by_reason(stru void ieee80211_stop_queue_by_reason(struct ieee80211_hw *hw, int queue, enum queue_stop_reason reason, bool refcounted); @@ -73,7 +73,7 @@ Signed-off-by: Johannes Berg void ieee80211_add_pending_skbs(struct ieee80211_local *local, --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c -@@ -458,12 +458,6 @@ static void ieee80211_do_stop(struct iee +@@ -460,12 +460,6 @@ static void ieee80211_do_stop(struct iee if (cancel_scan) ieee80211_scan_cancel(local); @@ -86,7 +86,7 @@ Signed-off-by: Johannes Berg ieee80211_roc_purge(local, sdata); switch (sdata->vif.type) { -@@ -811,13 +805,6 @@ static void ieee80211_uninit(struct net_ +@@ -813,13 +807,6 @@ static void ieee80211_uninit(struct net_ ieee80211_teardown_sdata(IEEE80211_DEV_TO_SUB_IF(dev)); } @@ -100,7 +100,7 @@ Signed-off-by: Johannes Berg static void ieee80211_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats) { -@@ -831,7 +818,6 @@ static const struct net_device_ops ieee8 +@@ -833,7 +820,6 @@ static const struct net_device_ops ieee8 .ndo_start_xmit = ieee80211_subif_start_xmit, .ndo_set_rx_mode = ieee80211_set_multicast_list, .ndo_set_mac_address = ieee80211_change_mac, @@ -108,7 +108,7 @@ Signed-off-by: Johannes Berg .ndo_get_stats64 = ieee80211_get_stats64, }; -@@ -939,7 +925,6 @@ static const struct net_device_ops ieee8 +@@ -941,7 +927,6 @@ static const struct net_device_ops ieee8 .ndo_start_xmit = ieee80211_subif_start_xmit_8023, .ndo_set_rx_mode = ieee80211_set_multicast_list, .ndo_set_mac_address = ieee80211_change_mac, @@ -116,7 +116,7 @@ Signed-off-by: Johannes Berg .ndo_get_stats64 = ieee80211_get_stats64, .ndo_fill_forward_path = ieee80211_netdev_fill_forward_path, }; -@@ -1441,35 +1426,6 @@ int ieee80211_do_open(struct wireless_de +@@ -1443,35 +1428,6 @@ int ieee80211_do_open(struct wireless_de ieee80211_recalc_ps(local); @@ -152,7 +152,7 @@ Signed-off-by: Johannes Berg set_bit(SDATA_STATE_RUNNING, &sdata->state); return 0; -@@ -1499,17 +1455,12 @@ static void ieee80211_if_setup(struct ne +@@ -1501,17 +1457,12 @@ static void ieee80211_if_setup(struct ne { ether_setup(dev); dev->priv_flags &= ~IFF_TX_SKB_SHARING; @@ -171,7 +171,7 @@ Signed-off-by: Johannes Berg static void ieee80211_iface_process_skb(struct ieee80211_local *local, struct ieee80211_sub_if_data *sdata, struct sk_buff *skb) -@@ -2094,9 +2045,7 @@ int ieee80211_if_add(struct ieee80211_lo +@@ -2096,9 +2047,7 @@ int ieee80211_if_add(struct ieee80211_lo struct net_device *ndev = NULL; struct ieee80211_sub_if_data *sdata = NULL; struct txq_info *txqi; @@ -181,7 +181,7 @@ Signed-off-by: Johannes Berg ASSERT_RTNL(); -@@ -2119,30 +2068,18 @@ int ieee80211_if_add(struct ieee80211_lo +@@ -2121,30 +2070,18 @@ int ieee80211_if_add(struct ieee80211_lo sizeof(void *)); int txq_size = 0; @@ -346,7 +346,7 @@ Signed-off-by: Johannes Berg free: sta_info_free_link(&sta->deflink); #ifdef CPTCFG_MAC80211_MESH -@@ -1959,9 +1954,6 @@ ieee80211_sta_ps_deliver_response(struct +@@ -1960,9 +1955,6 @@ ieee80211_sta_ps_deliver_response(struct * TIM recalculation. */ @@ -356,7 +356,7 @@ Signed-off-by: Johannes Berg for (tid = 0; tid < ARRAY_SIZE(sta->sta.txq); tid++) { if (!sta->sta.txq[tid] || !(driver_release_tids & BIT(tid)) || -@@ -2446,7 +2438,7 @@ static void sta_set_tidstats(struct sta_ +@@ -2447,7 +2439,7 @@ static void sta_set_tidstats(struct sta_ tidstats->tx_msdu_failed = sta->deflink.status_stats.msdu_failed[tid]; } @@ -365,7 +365,7 @@ Signed-off-by: Johannes Berg spin_lock_bh(&local->fq.lock); rcu_read_lock(); -@@ -2774,9 +2766,6 @@ unsigned long ieee80211_sta_last_active( +@@ -2775,9 +2767,6 @@ unsigned long ieee80211_sta_last_active( static void sta_update_codel_params(struct sta_info *sta, u32 thr) { @@ -387,7 +387,7 @@ Signed-off-by: Johannes Berg * Set the WLAN_TDLS_TEARDOWN flag to indicate a teardown in progress. --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -1599,9 +1599,6 @@ int ieee80211_txq_setup_flows(struct iee +@@ -1600,9 +1600,6 @@ int ieee80211_txq_setup_flows(struct iee bool supp_vht = false; enum nl80211_band band; @@ -397,7 +397,7 @@ Signed-off-by: Johannes Berg ret = fq_init(fq, 4096); if (ret) return ret; -@@ -1649,9 +1646,6 @@ void ieee80211_txq_teardown_flows(struct +@@ -1650,9 +1647,6 @@ void ieee80211_txq_teardown_flows(struct { struct fq *fq = &local->fq; @@ -407,7 +407,7 @@ Signed-off-by: Johannes Berg kfree(local->cvars); local->cvars = NULL; -@@ -1668,8 +1662,7 @@ static bool ieee80211_queue_skb(struct i +@@ -1669,8 +1663,7 @@ static bool ieee80211_queue_skb(struct i struct ieee80211_vif *vif; struct txq_info *txqi; @@ -417,7 +417,7 @@ Signed-off-by: Johannes Berg return false; if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) -@@ -4185,12 +4178,7 @@ void __ieee80211_subif_start_xmit(struct +@@ -4193,12 +4186,7 @@ void __ieee80211_subif_start_xmit(struct if (IS_ERR(sta)) sta = NULL; @@ -431,7 +431,7 @@ Signed-off-by: Johannes Berg ieee80211_aggr_check(sdata, sta, skb); sk_pacing_shift_update(skb->sk, sdata->local->hw.tx_sk_pacing_shift); -@@ -4501,11 +4489,7 @@ static void ieee80211_8023_xmit(struct i +@@ -4509,11 +4497,7 @@ static void ieee80211_8023_xmit(struct i struct tid_ampdu_tx *tid_tx; u8 tid; @@ -444,7 +444,7 @@ Signed-off-by: Johannes Berg if (unlikely(test_bit(SCAN_SW_SCANNING, &local->scanning)) && test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state)) -@@ -4759,9 +4743,6 @@ void ieee80211_tx_pending(struct tasklet +@@ -4767,9 +4751,6 @@ void ieee80211_tx_pending(struct tasklet if (!txok) break; } @@ -454,7 +454,7 @@ Signed-off-by: Johannes Berg } spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); -@@ -5954,10 +5935,9 @@ int ieee80211_tx_control_port(struct wip +@@ -5962,10 +5943,9 @@ int ieee80211_tx_control_port(struct wip } if (!IS_ERR(sta)) { @@ -468,7 +468,7 @@ Signed-off-by: Johannes Berg * for MLO STA, the SA should be the AP MLD address, but --- a/net/mac80211/util.c +++ b/net/mac80211/util.c -@@ -446,39 +446,6 @@ void ieee80211_wake_txqs(struct tasklet_ +@@ -444,39 +444,6 @@ void ieee80211_wake_txqs(struct tasklet_ spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); } @@ -508,7 +508,7 @@ Signed-off-by: Johannes Berg static void __ieee80211_wake_queue(struct ieee80211_hw *hw, int queue, enum queue_stop_reason reason, bool refcounted, -@@ -509,11 +476,7 @@ static void __ieee80211_wake_queue(struc +@@ -507,11 +474,7 @@ static void __ieee80211_wake_queue(struc /* someone still has this queue stopped */ return; @@ -521,7 +521,7 @@ Signed-off-by: Johannes Berg tasklet_schedule(&local->tx_pending_tasklet); /* -@@ -523,12 +486,10 @@ static void __ieee80211_wake_queue(struc +@@ -521,12 +484,10 @@ static void __ieee80211_wake_queue(struc * release someone's lock, but it is fine because all the callers of * __ieee80211_wake_queue call it right before releasing the lock. */ @@ -538,17 +538,44 @@ Signed-off-by: Johannes Berg } void ieee80211_wake_queue_by_reason(struct ieee80211_hw *hw, int queue, -@@ -585,10 +546,6 @@ static void __ieee80211_stop_queue(struc - for (ac = 0; ac < n_acs; ac++) { - if (sdata->vif.hw_queue[ac] == queue || - sdata->vif.cab_queue == queue) { -- if (!local->ops->wake_tx_queue) { -- netif_stop_subqueue(sdata->dev, ac); -- continue; -- } - spin_lock(&local->fq.lock); - sdata->vif.txqs_stopped[ac] = true; - spin_unlock(&local->fq.lock); +@@ -554,8 +515,6 @@ static void __ieee80211_stop_queue(struc + bool refcounted) + { + struct ieee80211_local *local = hw_to_local(hw); +- struct ieee80211_sub_if_data *sdata; +- int n_acs = IEEE80211_NUM_ACS; + + trace_stop_queue(local, queue, reason); + +@@ -567,27 +526,7 @@ static void __ieee80211_stop_queue(struc + else + local->q_stop_reasons[queue][reason]++; + +- if (__test_and_set_bit(reason, &local->queue_stop_reasons[queue])) +- return; +- +- if (local->hw.queues < IEEE80211_NUM_ACS) +- n_acs = 1; +- +- rcu_read_lock(); +- list_for_each_entry_rcu(sdata, &local->interfaces, list) { +- int ac; +- +- if (!sdata->dev) +- continue; +- +- for (ac = 0; ac < n_acs; ac++) { +- if (!local->ops->wake_tx_queue && +- (sdata->vif.hw_queue[ac] == queue || +- sdata->vif.cab_queue == queue)) +- netif_stop_subqueue(sdata->dev, ac); +- } +- } +- rcu_read_unlock(); ++ set_bit(reason, &local->queue_stop_reasons[queue]); + } + + void ieee80211_stop_queue_by_reason(struct ieee80211_hw *hw, int queue, --- a/net/mac80211/wme.c +++ b/net/mac80211/wme.c @@ -122,6 +122,9 @@ u16 ieee80211_select_queue_80211(struct @@ -561,7 +588,7 @@ Signed-off-by: Johannes Berg if ((info->control.flags & IEEE80211_TX_CTRL_DONT_REORDER) || local->hw.queues < IEEE80211_NUM_ACS) return 0; -@@ -141,12 +144,15 @@ u16 ieee80211_select_queue_80211(struct +@@ -141,13 +144,16 @@ u16 ieee80211_select_queue_80211(struct return ieee80211_downgrade_queue(sdata, NULL, skb); } @@ -570,6 +597,7 @@ Signed-off-by: Johannes Berg +u16 ieee80211_select_queue(struct ieee80211_sub_if_data *sdata, + struct sta_info *sta, struct sk_buff *skb) { + const struct ethhdr *eth = (void *)skb->data; struct mac80211_qos_map *qos_map; bool qos; @@ -577,9 +605,9 @@ Signed-off-by: Johannes Berg + skb_get_hash(skb); + /* all mesh/ocb stations are required to support WME */ - if (sta && (sdata->vif.type == NL80211_IFTYPE_MESH_POINT || - sdata->vif.type == NL80211_IFTYPE_OCB)) -@@ -176,59 +182,6 @@ u16 __ieee80211_select_queue(struct ieee + if ((sdata->vif.type == NL80211_IFTYPE_MESH_POINT && + !is_multicast_ether_addr(eth->h_dest)) || +@@ -178,59 +184,6 @@ u16 __ieee80211_select_queue(struct ieee return ieee80211_downgrade_queue(sdata, sta, skb); } diff --git a/package/kernel/mac80211/patches/subsys/307-v6.2-wifi-mac80211-fix-initialization-of-rx-link-and-rx-l.patch b/package/kernel/mac80211/patches/subsys/307-v6.2-wifi-mac80211-fix-initialization-of-rx-link-and-rx-l.patch deleted file mode 100644 index 0201eeadb16..00000000000 --- a/package/kernel/mac80211/patches/subsys/307-v6.2-wifi-mac80211-fix-initialization-of-rx-link-and-rx-l.patch +++ /dev/null @@ -1,410 +0,0 @@ -From: Felix Fietkau -Date: Tue, 13 Dec 2022 21:03:19 +0100 -Subject: [PATCH] wifi: mac80211: fix initialization of rx->link and - rx->link_sta - -There are some codepaths that do not initialize rx->link_sta properly. This -causes a crash in places which assume that rx->link_sta is valid if rx->sta -is valid. -One known instance is triggered by __ieee80211_rx_h_amsdu being called from -fast-rx. - -Since the initialization of rx->link and rx->link_sta is rather convoluted -and duplicated in many places, clean it up by using a helper function to -set it. - -Fixes: ccdde7c74ffd ("wifi: mac80211: properly implement MLO key handling") -Fixes: b320d6c456ff ("wifi: mac80211: use correct rx link_sta instead of default") -Signed-off-by: Felix Fietkau ---- - ---- a/net/mac80211/rx.c -+++ b/net/mac80211/rx.c -@@ -4067,6 +4067,58 @@ static void ieee80211_invoke_rx_handlers - #undef CALL_RXH - } - -+static bool -+ieee80211_rx_is_valid_sta_link_id(struct ieee80211_sta *sta, u8 link_id) -+{ -+ if (!sta->mlo) -+ return false; -+ -+ return !!(sta->valid_links & BIT(link_id)); -+} -+ -+static bool ieee80211_rx_data_set_link(struct ieee80211_rx_data *rx, -+ u8 link_id) -+{ -+ rx->link_id = link_id; -+ rx->link = rcu_dereference(rx->sdata->link[link_id]); -+ -+ if (!rx->sta || !rx->sta->sta.mlo) -+ return rx->link; -+ -+ if (!ieee80211_rx_is_valid_sta_link_id(&rx->sta->sta, link_id)) -+ return false; -+ -+ rx->link_sta = rcu_dereference(rx->sta->link[link_id]); -+ -+ return rx->link && rx->link_sta; -+} -+ -+static bool ieee80211_rx_data_set_sta(struct ieee80211_rx_data *rx, -+ struct ieee80211_sta *pubsta, -+ int link_id) -+{ -+ struct sta_info *sta; -+ -+ sta = container_of(pubsta, struct sta_info, sta); -+ -+ rx->link_id = link_id; -+ rx->sta = sta; -+ -+ if (sta) { -+ rx->local = sta->sdata->local; -+ if (!rx->sdata) -+ rx->sdata = sta->sdata; -+ rx->link_sta = &sta->deflink; -+ } -+ -+ if (link_id < 0) -+ rx->link = &rx->sdata->deflink; -+ else if (!ieee80211_rx_data_set_link(rx, link_id)) -+ return false; -+ -+ return true; -+} -+ - /* - * This function makes calls into the RX path, therefore - * it has to be invoked under RCU read lock. -@@ -4075,16 +4127,19 @@ void ieee80211_release_reorder_timeout(s - { - struct sk_buff_head frames; - struct ieee80211_rx_data rx = { -- .sta = sta, -- .sdata = sta->sdata, -- .local = sta->local, - /* This is OK -- must be QoS data frame */ - .security_idx = tid, - .seqno_idx = tid, -- .link_id = -1, - }; - struct tid_ampdu_rx *tid_agg_rx; -- u8 link_id; -+ int link_id = -1; -+ -+ /* FIXME: statistics won't be right with this */ -+ if (sta->sta.valid_links) -+ link_id = ffs(sta->sta.valid_links) - 1; -+ -+ if (!ieee80211_rx_data_set_sta(&rx, &sta->sta, link_id)) -+ return; - - tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]); - if (!tid_agg_rx) -@@ -4104,10 +4159,6 @@ void ieee80211_release_reorder_timeout(s - }; - drv_event_callback(rx.local, rx.sdata, &event); - } -- /* FIXME: statistics won't be right with this */ -- link_id = sta->sta.valid_links ? ffs(sta->sta.valid_links) - 1 : 0; -- rx.link = rcu_dereference(sta->sdata->link[link_id]); -- rx.link_sta = rcu_dereference(sta->link[link_id]); - - ieee80211_rx_handlers(&rx, &frames); - } -@@ -4123,7 +4174,6 @@ void ieee80211_mark_rx_ba_filtered_frame - /* This is OK -- must be QoS data frame */ - .security_idx = tid, - .seqno_idx = tid, -- .link_id = -1, - }; - int i, diff; - -@@ -4134,10 +4184,8 @@ void ieee80211_mark_rx_ba_filtered_frame - - sta = container_of(pubsta, struct sta_info, sta); - -- rx.sta = sta; -- rx.sdata = sta->sdata; -- rx.link = &rx.sdata->deflink; -- rx.local = sta->local; -+ if (!ieee80211_rx_data_set_sta(&rx, pubsta, -1)) -+ return; - - rcu_read_lock(); - tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]); -@@ -4524,15 +4572,6 @@ void ieee80211_check_fast_rx_iface(struc - mutex_unlock(&local->sta_mtx); - } - --static bool --ieee80211_rx_is_valid_sta_link_id(struct ieee80211_sta *sta, u8 link_id) --{ -- if (!sta->mlo) -- return false; -- -- return !!(sta->valid_links & BIT(link_id)); --} -- - static void ieee80211_rx_8023(struct ieee80211_rx_data *rx, - struct ieee80211_fast_rx *fast_rx, - int orig_len) -@@ -4643,7 +4682,6 @@ static bool ieee80211_invoke_fast_rx(str - struct sk_buff *skb = rx->skb; - struct ieee80211_hdr *hdr = (void *)skb->data; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); -- struct sta_info *sta = rx->sta; - int orig_len = skb->len; - int hdrlen = ieee80211_hdrlen(hdr->frame_control); - int snap_offs = hdrlen; -@@ -4655,7 +4693,6 @@ static bool ieee80211_invoke_fast_rx(str - u8 da[ETH_ALEN]; - u8 sa[ETH_ALEN]; - } addrs __aligned(2); -- struct link_sta_info *link_sta; - struct ieee80211_sta_rx_stats *stats; - - /* for parallel-rx, we need to have DUP_VALIDATED, otherwise we write -@@ -4758,18 +4795,10 @@ static bool ieee80211_invoke_fast_rx(str - drop: - dev_kfree_skb(skb); - -- if (rx->link_id >= 0) { -- link_sta = rcu_dereference(sta->link[rx->link_id]); -- if (!link_sta) -- return true; -- } else { -- link_sta = &sta->deflink; -- } -- - if (fast_rx->uses_rss) -- stats = this_cpu_ptr(link_sta->pcpu_rx_stats); -+ stats = this_cpu_ptr(rx->link_sta->pcpu_rx_stats); - else -- stats = &link_sta->rx_stats; -+ stats = &rx->link_sta->rx_stats; - - stats->dropped++; - return true; -@@ -4787,8 +4816,8 @@ static bool ieee80211_prepare_and_rx_han - struct ieee80211_local *local = rx->local; - struct ieee80211_sub_if_data *sdata = rx->sdata; - struct ieee80211_hdr *hdr = (void *)skb->data; -- struct link_sta_info *link_sta = NULL; -- struct ieee80211_link_data *link; -+ struct link_sta_info *link_sta = rx->link_sta; -+ struct ieee80211_link_data *link = rx->link; - - rx->skb = skb; - -@@ -4810,35 +4839,6 @@ static bool ieee80211_prepare_and_rx_han - if (!ieee80211_accept_frame(rx)) - return false; - -- if (rx->link_id >= 0) { -- link = rcu_dereference(rx->sdata->link[rx->link_id]); -- -- /* we might race link removal */ -- if (!link) -- return true; -- rx->link = link; -- -- if (rx->sta) { -- rx->link_sta = -- rcu_dereference(rx->sta->link[rx->link_id]); -- if (!rx->link_sta) -- return true; -- } -- } else { -- if (rx->sta) -- rx->link_sta = &rx->sta->deflink; -- -- rx->link = &sdata->deflink; -- } -- -- if (unlikely(!is_multicast_ether_addr(hdr->addr1) && -- rx->link_id >= 0 && rx->sta && rx->sta->sta.mlo)) { -- link_sta = rcu_dereference(rx->sta->link[rx->link_id]); -- -- if (WARN_ON_ONCE(!link_sta)) -- return true; -- } -- - if (!consume) { - struct skb_shared_hwtstamps *shwt; - -@@ -4858,7 +4858,7 @@ static bool ieee80211_prepare_and_rx_han - shwt->hwtstamp = skb_hwtstamps(skb)->hwtstamp; - } - -- if (unlikely(link_sta)) { -+ if (unlikely(rx->sta && rx->sta->sta.mlo)) { - /* translate to MLD addresses */ - if (ether_addr_equal(link->conf->addr, hdr->addr1)) - ether_addr_copy(hdr->addr1, rx->sdata->vif.addr); -@@ -4888,6 +4888,7 @@ static void __ieee80211_rx_handle_8023(s - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - struct ieee80211_fast_rx *fast_rx; - struct ieee80211_rx_data rx; -+ int link_id = -1; - - memset(&rx, 0, sizeof(rx)); - rx.skb = skb; -@@ -4904,12 +4905,8 @@ static void __ieee80211_rx_handle_8023(s - if (!pubsta) - goto drop; - -- rx.sta = container_of(pubsta, struct sta_info, sta); -- rx.sdata = rx.sta->sdata; -- -- if (status->link_valid && -- !ieee80211_rx_is_valid_sta_link_id(pubsta, status->link_id)) -- goto drop; -+ if (status->link_valid) -+ link_id = status->link_id; - - /* - * TODO: Should the frame be dropped if the right link_id is not -@@ -4918,19 +4915,8 @@ static void __ieee80211_rx_handle_8023(s - * link_id is used only for stats purpose and updating the stats on - * the deflink is fine? - */ -- if (status->link_valid) -- rx.link_id = status->link_id; -- -- if (rx.link_id >= 0) { -- struct ieee80211_link_data *link; -- -- link = rcu_dereference(rx.sdata->link[rx.link_id]); -- if (!link) -- goto drop; -- rx.link = link; -- } else { -- rx.link = &rx.sdata->deflink; -- } -+ if (!ieee80211_rx_data_set_sta(&rx, pubsta, link_id)) -+ goto drop; - - fast_rx = rcu_dereference(rx.sta->fast_rx); - if (!fast_rx) -@@ -4948,6 +4934,8 @@ static bool ieee80211_rx_for_interface(s - { - struct link_sta_info *link_sta; - struct ieee80211_hdr *hdr = (void *)skb->data; -+ struct sta_info *sta; -+ int link_id = -1; - - /* - * Look up link station first, in case there's a -@@ -4957,24 +4945,19 @@ static bool ieee80211_rx_for_interface(s - */ - link_sta = link_sta_info_get_bss(rx->sdata, hdr->addr2); - if (link_sta) { -- rx->sta = link_sta->sta; -- rx->link_id = link_sta->link_id; -+ sta = link_sta->sta; -+ link_id = link_sta->link_id; - } else { - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - -- rx->sta = sta_info_get_bss(rx->sdata, hdr->addr2); -- if (rx->sta) { -- if (status->link_valid && -- !ieee80211_rx_is_valid_sta_link_id(&rx->sta->sta, -- status->link_id)) -- return false; -- -- rx->link_id = status->link_valid ? status->link_id : -1; -- } else { -- rx->link_id = -1; -- } -+ sta = sta_info_get_bss(rx->sdata, hdr->addr2); -+ if (status->link_valid) -+ link_id = status->link_id; - } - -+ if (!ieee80211_rx_data_set_sta(rx, &sta->sta, link_id)) -+ return false; -+ - return ieee80211_prepare_and_rx_handle(rx, skb, consume); - } - -@@ -5033,19 +5016,15 @@ static void __ieee80211_rx_handle_packet - - if (ieee80211_is_data(fc)) { - struct sta_info *sta, *prev_sta; -- u8 link_id = status->link_id; -+ int link_id = -1; - -- if (pubsta) { -- rx.sta = container_of(pubsta, struct sta_info, sta); -- rx.sdata = rx.sta->sdata; -+ if (status->link_valid) -+ link_id = status->link_id; - -- if (status->link_valid && -- !ieee80211_rx_is_valid_sta_link_id(pubsta, link_id)) -+ if (pubsta) { -+ if (!ieee80211_rx_data_set_sta(&rx, pubsta, link_id)) - goto out; - -- if (status->link_valid) -- rx.link_id = status->link_id; -- - /* - * In MLO connection, fetch the link_id using addr2 - * when the driver does not pass link_id in status. -@@ -5063,7 +5042,7 @@ static void __ieee80211_rx_handle_packet - if (!link_sta) - goto out; - -- rx.link_id = link_sta->link_id; -+ ieee80211_rx_data_set_link(&rx, link_sta->link_id); - } - - if (ieee80211_prepare_and_rx_handle(&rx, skb, true)) -@@ -5079,30 +5058,27 @@ static void __ieee80211_rx_handle_packet - continue; - } - -- if ((status->link_valid && -- !ieee80211_rx_is_valid_sta_link_id(&prev_sta->sta, -- link_id)) || -- (!status->link_valid && prev_sta->sta.mlo)) -+ rx.sdata = prev_sta->sdata; -+ if (!ieee80211_rx_data_set_sta(&rx, &prev_sta->sta, -+ link_id)) -+ goto out; -+ -+ if (!status->link_valid && prev_sta->sta.mlo) - continue; - -- rx.link_id = status->link_valid ? link_id : -1; -- rx.sta = prev_sta; -- rx.sdata = prev_sta->sdata; - ieee80211_prepare_and_rx_handle(&rx, skb, false); - - prev_sta = sta; - } - - if (prev_sta) { -- if ((status->link_valid && -- !ieee80211_rx_is_valid_sta_link_id(&prev_sta->sta, -- link_id)) || -- (!status->link_valid && prev_sta->sta.mlo)) -+ rx.sdata = prev_sta->sdata; -+ if (!ieee80211_rx_data_set_sta(&rx, &prev_sta->sta, -+ link_id)) - goto out; - -- rx.link_id = status->link_valid ? link_id : -1; -- rx.sta = prev_sta; -- rx.sdata = prev_sta->sdata; -+ if (!status->link_valid && prev_sta->sta.mlo) -+ goto out; - - if (ieee80211_prepare_and_rx_handle(&rx, skb, true)) - return; diff --git a/package/kernel/mac80211/patches/subsys/308-v6.2-wifi-mac80211-fix-MLO-AP_VLAN-check.patch b/package/kernel/mac80211/patches/subsys/308-v6.2-wifi-mac80211-fix-MLO-AP_VLAN-check.patch deleted file mode 100644 index 2d181e3a68e..00000000000 --- a/package/kernel/mac80211/patches/subsys/308-v6.2-wifi-mac80211-fix-MLO-AP_VLAN-check.patch +++ /dev/null @@ -1,25 +0,0 @@ -From: Felix Fietkau -Date: Wed, 14 Dec 2022 13:46:38 +0100 -Subject: [PATCH] wifi: mac80211: fix MLO + AP_VLAN check - -Instead of preventing adding AP_VLAN to MLO enabled APs, this check was -preventing adding more than one 4-addr AP_VLAN regardless of the MLO status. -Fix this by adding missing extra checks. - -Fixes: ae960ee90bb1 ("wifi: mac80211: prevent VLANs on MLDs") -Signed-off-by: Felix Fietkau ---- - ---- a/net/mac80211/iface.c -+++ b/net/mac80211/iface.c -@@ -364,7 +364,9 @@ static int ieee80211_check_concurrent_if - - /* No support for VLAN with MLO yet */ - if (iftype == NL80211_IFTYPE_AP_VLAN && -- nsdata->wdev.use_4addr) -+ sdata->wdev.use_4addr && -+ nsdata->vif.type == NL80211_IFTYPE_AP && -+ nsdata->vif.valid_links) - return -EOPNOTSUPP; - - /* diff --git a/package/kernel/mac80211/patches/subsys/310-v6.2-mac80211-add-support-for-restricting-netdev-features.patch b/package/kernel/mac80211/patches/subsys/310-v6.2-mac80211-add-support-for-restricting-netdev-features.patch index 3d286d080d3..812b12189c4 100644 --- a/package/kernel/mac80211/patches/subsys/310-v6.2-mac80211-add-support-for-restricting-netdev-features.patch +++ b/package/kernel/mac80211/patches/subsys/310-v6.2-mac80211-add-support-for-restricting-netdev-features.patch @@ -70,7 +70,7 @@ Signed-off-by: Felix Fietkau * @driver_flags: flags/capabilities the driver has for this interface, * these need to be set (or cleared) when the interface is added * or, if supported by the driver, the interface type is changed -@@ -1848,6 +1852,7 @@ struct ieee80211_vif { +@@ -1846,6 +1850,7 @@ struct ieee80211_vif { struct ieee80211_txq *txq; @@ -90,7 +90,7 @@ Signed-off-by: Felix Fietkau --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -1355,7 +1355,11 @@ static struct txq_info *ieee80211_get_tx +@@ -1356,7 +1356,11 @@ static struct txq_info *ieee80211_get_tx static void ieee80211_set_skb_enqueue_time(struct sk_buff *skb) { @@ -103,7 +103,7 @@ Signed-off-by: Felix Fietkau } static u32 codel_skb_len_func(const struct sk_buff *skb) -@@ -3578,55 +3582,79 @@ ieee80211_xmit_fast_finish(struct ieee80 +@@ -3579,55 +3583,79 @@ ieee80211_xmit_fast_finish(struct ieee80 return TX_CONTINUE; } @@ -219,7 +219,7 @@ Signed-off-by: Felix Fietkau /* will not be crypto-handled beyond what we do here, so use false * as the may-encrypt argument for the resize to not account for -@@ -3635,10 +3663,8 @@ static bool ieee80211_xmit_fast(struct i +@@ -3636,10 +3664,8 @@ static bool ieee80211_xmit_fast(struct i if (unlikely(ieee80211_skb_resize(sdata, skb, max_t(int, extra_head + hw_headroom - skb_headroom(skb), 0), @@ -232,7 +232,7 @@ Signed-off-by: Felix Fietkau memcpy(ð, skb->data, ETH_HLEN - 2); hdr = skb_push(skb, extra_head); -@@ -3652,7 +3678,7 @@ static bool ieee80211_xmit_fast(struct i +@@ -3653,7 +3679,7 @@ static bool ieee80211_xmit_fast(struct i info->control.vif = &sdata->vif; info->flags = IEEE80211_TX_CTL_FIRST_FRAGMENT | IEEE80211_TX_CTL_DONTFRAG | @@ -241,7 +241,7 @@ Signed-off-by: Felix Fietkau info->control.flags = IEEE80211_TX_CTRL_FAST_XMIT | u32_encode_bits(IEEE80211_LINK_UNSPECIFIED, IEEE80211_TX_CTRL_MLO_LINK); -@@ -3676,16 +3702,14 @@ static bool ieee80211_xmit_fast(struct i +@@ -3677,16 +3703,14 @@ static bool ieee80211_xmit_fast(struct i tx.key = fast_tx->key; if (ieee80211_queue_skb(local, sdata, sta, skb)) @@ -261,7 +261,7 @@ Signed-off-by: Felix Fietkau if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) sdata = container_of(sdata->bss, -@@ -3693,6 +3717,56 @@ static bool ieee80211_xmit_fast(struct i +@@ -3694,6 +3718,56 @@ static bool ieee80211_xmit_fast(struct i __skb_queue_tail(&tx.skbs, skb); ieee80211_tx_frags(local, &sdata->vif, sta, &tx.skbs, false); @@ -318,7 +318,7 @@ Signed-off-by: Felix Fietkau return true; } -@@ -4193,31 +4267,14 @@ void __ieee80211_subif_start_xmit(struct +@@ -4201,31 +4275,14 @@ void __ieee80211_subif_start_xmit(struct goto out; } @@ -358,7 +358,7 @@ Signed-off-by: Felix Fietkau } skb_list_walk_safe(skb, skb, next) { -@@ -4435,9 +4492,11 @@ normal: +@@ -4443,9 +4500,11 @@ normal: return NETDEV_TX_OK; } @@ -373,7 +373,7 @@ Signed-off-by: Felix Fietkau { struct ieee80211_local *local = sdata->local; struct ieee80211_tx_control control = {}; -@@ -4446,14 +4505,6 @@ static bool ieee80211_tx_8023(struct iee +@@ -4454,14 +4513,6 @@ static bool ieee80211_tx_8023(struct iee unsigned long flags; int q = info->hw_queue; @@ -388,7 +388,7 @@ Signed-off-by: Felix Fietkau spin_lock_irqsave(&local->queue_stop_reason_lock, flags); if (local->queue_stop_reasons[q] || -@@ -4480,6 +4531,26 @@ static bool ieee80211_tx_8023(struct iee +@@ -4488,6 +4539,26 @@ static bool ieee80211_tx_8023(struct iee return true; } @@ -415,7 +415,7 @@ Signed-off-by: Felix Fietkau static void ieee80211_8023_xmit(struct ieee80211_sub_if_data *sdata, struct net_device *dev, struct sta_info *sta, struct ieee80211_key *key, struct sk_buff *skb) -@@ -4487,9 +4558,13 @@ static void ieee80211_8023_xmit(struct i +@@ -4495,9 +4566,13 @@ static void ieee80211_8023_xmit(struct i struct ieee80211_tx_info *info; struct ieee80211_local *local = sdata->local; struct tid_ampdu_tx *tid_tx; @@ -430,7 +430,7 @@ Signed-off-by: Felix Fietkau if (unlikely(test_bit(SCAN_SW_SCANNING, &local->scanning)) && test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state)) -@@ -4499,9 +4574,6 @@ static void ieee80211_8023_xmit(struct i +@@ -4507,9 +4582,6 @@ static void ieee80211_8023_xmit(struct i if (unlikely(!skb)) return; @@ -440,7 +440,7 @@ Signed-off-by: Felix Fietkau ieee80211_aggr_check(sdata, sta, skb); tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK; -@@ -4515,22 +4587,20 @@ static void ieee80211_8023_xmit(struct i +@@ -4523,22 +4595,20 @@ static void ieee80211_8023_xmit(struct i return; } @@ -471,7 +471,7 @@ Signed-off-by: Felix Fietkau if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) sdata = container_of(sdata->bss, -@@ -4542,6 +4612,24 @@ static void ieee80211_8023_xmit(struct i +@@ -4550,6 +4620,24 @@ static void ieee80211_8023_xmit(struct i if (key) info->control.hw_key = &key->conf; @@ -496,7 +496,7 @@ Signed-off-by: Felix Fietkau ieee80211_tx_8023(sdata, skb, sta, false); return; -@@ -4583,6 +4671,7 @@ netdev_tx_t ieee80211_subif_start_xmit_8 +@@ -4591,6 +4679,7 @@ netdev_tx_t ieee80211_subif_start_xmit_8 key->conf.cipher == WLAN_CIPHER_SUITE_TKIP)) goto skip_offload; diff --git a/package/kernel/mac80211/patches/subsys/317-wifi-mac80211-fix-qos-on-mesh-interfaces.patch b/package/kernel/mac80211/patches/subsys/317-wifi-mac80211-fix-qos-on-mesh-interfaces.patch deleted file mode 100644 index c60a88d2a65..00000000000 --- a/package/kernel/mac80211/patches/subsys/317-wifi-mac80211-fix-qos-on-mesh-interfaces.patch +++ /dev/null @@ -1,35 +0,0 @@ -From: Felix Fietkau -Date: Wed, 15 Feb 2023 15:11:54 +0100 -Subject: [PATCH] wifi: mac80211: fix qos on mesh interfaces - -When ieee80211_select_queue is called for mesh, the sta pointer is usually -NULL, since the nexthop is looked up much later in the tx path. -Explicitly check for unicast address in that case in order to make qos work -again. - -Fixes: 50e2ab392919 ("wifi: mac80211: fix queue selection for mesh/OCB interfaces") -Signed-off-by: Felix Fietkau ---- - ---- a/net/mac80211/wme.c -+++ b/net/mac80211/wme.c -@@ -147,6 +147,7 @@ u16 ieee80211_select_queue_80211(struct - u16 ieee80211_select_queue(struct ieee80211_sub_if_data *sdata, - struct sta_info *sta, struct sk_buff *skb) - { -+ const struct ethhdr *eth = (void *)skb->data; - struct mac80211_qos_map *qos_map; - bool qos; - -@@ -154,8 +155,9 @@ u16 ieee80211_select_queue(struct ieee80 - skb_get_hash(skb); - - /* all mesh/ocb stations are required to support WME */ -- if (sta && (sdata->vif.type == NL80211_IFTYPE_MESH_POINT || -- sdata->vif.type == NL80211_IFTYPE_OCB)) -+ if ((sdata->vif.type == NL80211_IFTYPE_MESH_POINT && -+ !is_multicast_ether_addr(eth->h_dest)) || -+ (sdata->vif.type == NL80211_IFTYPE_OCB && sta)) - qos = true; - else if (sta) - qos = sta->sta.wme; diff --git a/package/kernel/mac80211/patches/subsys/318-wifi-mac80211-fix-race-in-mesh-sequence-number-assig.patch b/package/kernel/mac80211/patches/subsys/318-wifi-mac80211-fix-race-in-mesh-sequence-number-assig.patch index 05e368cd2ed..7d01ffdfff0 100644 --- a/package/kernel/mac80211/patches/subsys/318-wifi-mac80211-fix-race-in-mesh-sequence-number-assig.patch +++ b/package/kernel/mac80211/patches/subsys/318-wifi-mac80211-fix-race-in-mesh-sequence-number-assig.patch @@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h -@@ -695,7 +695,7 @@ struct ieee80211_if_mesh { +@@ -696,7 +696,7 @@ struct ieee80211_if_mesh { struct mesh_stats mshstats; struct mesh_config mshcfg; atomic_t estab_plinks; diff --git a/package/kernel/mac80211/patches/subsys/319-wifi-mac80211-mesh-fast-xmit-support.patch b/package/kernel/mac80211/patches/subsys/319-wifi-mac80211-mesh-fast-xmit-support.patch index 12e9cf5744b..968d2885f2a 100644 --- a/package/kernel/mac80211/patches/subsys/319-wifi-mac80211-mesh-fast-xmit-support.patch +++ b/package/kernel/mac80211/patches/subsys/319-wifi-mac80211-mesh-fast-xmit-support.patch @@ -40,7 +40,7 @@ Signed-off-by: Felix Fietkau /* Maximum number of broadcast/multicast frames to buffer when some of the * associated stations are using power saving. */ -@@ -655,6 +656,19 @@ struct mesh_table { +@@ -656,6 +657,19 @@ struct mesh_table { atomic_t entries; /* Up to MAX_MESH_NEIGHBOURS */ }; @@ -60,7 +60,7 @@ Signed-off-by: Felix Fietkau struct ieee80211_if_mesh { struct timer_list housekeeping_timer; struct timer_list mesh_path_timer; -@@ -733,6 +747,7 @@ struct ieee80211_if_mesh { +@@ -734,6 +748,7 @@ struct ieee80211_if_mesh { struct mesh_table mpp_paths; /* Store paths for MPP&MAP */ int mesh_paths_generation; int mpp_paths_generation; @@ -68,7 +68,7 @@ Signed-off-by: Felix Fietkau }; #ifdef CPTCFG_MAC80211_MESH -@@ -1998,6 +2013,11 @@ int ieee80211_tx_control_port(struct wip +@@ -2002,6 +2017,11 @@ int ieee80211_tx_control_port(struct wip int link_id, u64 *cookie); int ieee80211_probe_mesh_link(struct wiphy *wiphy, struct net_device *dev, const u8 *buf, size_t len); @@ -728,7 +728,7 @@ Signed-off-by: Felix Fietkau --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -3021,6 +3021,9 @@ void ieee80211_check_fast_xmit(struct st +@@ -3022,6 +3022,9 @@ void ieee80211_check_fast_xmit(struct st if (!ieee80211_hw_check(&local->hw, SUPPORT_FAST_XMIT)) return; @@ -738,7 +738,7 @@ Signed-off-by: Felix Fietkau /* Locking here protects both the pointer itself, and against concurrent * invocations winning data access races to, e.g., the key pointer that * is used. -@@ -3402,6 +3405,9 @@ static bool ieee80211_amsdu_aggregate(st +@@ -3403,6 +3406,9 @@ static bool ieee80211_amsdu_aggregate(st if (sdata->vif.offload_flags & IEEE80211_OFFLOAD_ENCAP_ENABLED) return false; @@ -748,7 +748,7 @@ Signed-off-by: Felix Fietkau if (skb_is_gso(skb)) return false; -@@ -3634,10 +3640,11 @@ free: +@@ -3635,10 +3641,11 @@ free: return NULL; } @@ -764,7 +764,7 @@ Signed-off-by: Felix Fietkau { struct ieee80211_local *local = sdata->local; struct ieee80211_hdr *hdr = (void *)fast_tx->hdr; -@@ -3646,7 +3653,6 @@ static void __ieee80211_xmit_fast(struct +@@ -3647,7 +3654,6 @@ static void __ieee80211_xmit_fast(struct ieee80211_tx_result r; int hw_headroom = sdata->local->hw.extra_tx_headroom; int extra_head = fast_tx->hdr_len - (ETH_HLEN - 2); @@ -772,7 +772,7 @@ Signed-off-by: Felix Fietkau skb = skb_share_check(skb, GFP_ATOMIC); if (unlikely(!skb)) -@@ -3666,11 +3672,10 @@ static void __ieee80211_xmit_fast(struct +@@ -3667,11 +3673,10 @@ static void __ieee80211_xmit_fast(struct ENCRYPT_NO))) goto free; @@ -786,7 +786,7 @@ Signed-off-by: Felix Fietkau info = IEEE80211_SKB_CB(skb); memset(info, 0, sizeof(*info)); -@@ -3689,7 +3694,8 @@ static void __ieee80211_xmit_fast(struct +@@ -3690,7 +3695,8 @@ static void __ieee80211_xmit_fast(struct #endif if (hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_QOS_DATA)) { @@ -796,7 +796,7 @@ Signed-off-by: Felix Fietkau *ieee80211_get_qos_ctl(hdr) = tid; } -@@ -3732,6 +3738,7 @@ static bool ieee80211_xmit_fast(struct i +@@ -3733,6 +3739,7 @@ static bool ieee80211_xmit_fast(struct i struct ieee80211_hdr *hdr = (void *)fast_tx->hdr; struct tid_ampdu_tx *tid_tx = NULL; struct sk_buff *next; @@ -804,7 +804,7 @@ Signed-off-by: Felix Fietkau u8 tid = IEEE80211_NUM_TIDS; /* control port protocol needs a lot of special handling */ -@@ -3757,6 +3764,8 @@ static bool ieee80211_xmit_fast(struct i +@@ -3758,6 +3765,8 @@ static bool ieee80211_xmit_fast(struct i } } @@ -813,7 +813,7 @@ Signed-off-by: Felix Fietkau /* after this point (skb is modified) we cannot return false */ skb = ieee80211_tx_skb_fixup(skb, ieee80211_sdata_netdev_features(sdata)); if (!skb) -@@ -3764,7 +3773,8 @@ static bool ieee80211_xmit_fast(struct i +@@ -3765,7 +3774,8 @@ static bool ieee80211_xmit_fast(struct i skb_list_walk_safe(skb, skb, next) { skb_mark_not_on_list(skb); @@ -823,7 +823,7 @@ Signed-off-by: Felix Fietkau } return true; -@@ -4244,8 +4254,15 @@ void __ieee80211_subif_start_xmit(struct +@@ -4252,8 +4262,15 @@ void __ieee80211_subif_start_xmit(struct return; } @@ -839,7 +839,7 @@ Signed-off-by: Felix Fietkau if (ieee80211_lookup_ra_sta(sdata, skb, &sta)) goto out_free; -@@ -4255,8 +4272,6 @@ void __ieee80211_subif_start_xmit(struct +@@ -4263,8 +4280,6 @@ void __ieee80211_subif_start_xmit(struct skb_set_queue_mapping(skb, ieee80211_select_queue(sdata, sta, skb)); ieee80211_aggr_check(sdata, sta, skb); diff --git a/package/kernel/mac80211/patches/subsys/320-wifi-mac80211-use-mesh-header-cache-to-speed-up-mesh.patch b/package/kernel/mac80211/patches/subsys/320-wifi-mac80211-use-mesh-header-cache-to-speed-up-mesh.patch index 7ec8f3db1a0..28b1ff11068 100644 --- a/package/kernel/mac80211/patches/subsys/320-wifi-mac80211-use-mesh-header-cache-to-speed-up-mesh.patch +++ b/package/kernel/mac80211/patches/subsys/320-wifi-mac80211-use-mesh-header-cache-to-speed-up-mesh.patch @@ -106,7 +106,7 @@ Signed-off-by: Felix Fietkau rx_accept: --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h -@@ -2018,6 +2018,8 @@ void __ieee80211_xmit_fast(struct ieee80 +@@ -2022,6 +2022,8 @@ void __ieee80211_xmit_fast(struct ieee80 struct ieee80211_fast_tx *fast_tx, struct sk_buff *skb, bool ampdu, const u8 *da, const u8 *sa); diff --git a/package/kernel/mac80211/patches/subsys/323-v6.3-wifi-mac80211-Add-VHT-MU-MIMO-related-flags-in-ieee8.patch b/package/kernel/mac80211/patches/subsys/323-v6.3-wifi-mac80211-Add-VHT-MU-MIMO-related-flags-in-ieee8.patch index 2310593635c..e23dc4d226a 100644 --- a/package/kernel/mac80211/patches/subsys/323-v6.3-wifi-mac80211-Add-VHT-MU-MIMO-related-flags-in-ieee8.patch +++ b/package/kernel/mac80211/patches/subsys/323-v6.3-wifi-mac80211-Add-VHT-MU-MIMO-related-flags-in-ieee8.patch @@ -44,7 +44,7 @@ Signed-off-by: Johannes Berg /** --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c -@@ -1251,6 +1251,21 @@ static int ieee80211_start_ap(struct wip +@@ -1252,6 +1252,21 @@ static int ieee80211_start_ap(struct wip prev_beacon_int = link_conf->beacon_int; link_conf->beacon_int = params->beacon_interval; diff --git a/package/kernel/mac80211/patches/subsys/324-v6.3-wifi-mac80211-Add-HE-MU-MIMO-related-flags-in-ieee80.patch b/package/kernel/mac80211/patches/subsys/324-v6.3-wifi-mac80211-Add-HE-MU-MIMO-related-flags-in-ieee80.patch index a3c44531bde..f843dba1235 100644 --- a/package/kernel/mac80211/patches/subsys/324-v6.3-wifi-mac80211-Add-HE-MU-MIMO-related-flags-in-ieee80.patch +++ b/package/kernel/mac80211/patches/subsys/324-v6.3-wifi-mac80211-Add-HE-MU-MIMO-related-flags-in-ieee80.patch @@ -44,7 +44,7 @@ Signed-off-by: Johannes Berg /** --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c -@@ -1280,6 +1280,21 @@ static int ieee80211_start_ap(struct wip +@@ -1281,6 +1281,21 @@ static int ieee80211_start_ap(struct wip changed |= BSS_CHANGED_HE_BSS_COLOR; } diff --git a/package/kernel/mac80211/patches/subsys/325-wifi-mac80211-introduce-ieee80211_refresh_tx_agg_ses.patch b/package/kernel/mac80211/patches/subsys/325-wifi-mac80211-introduce-ieee80211_refresh_tx_agg_ses.patch index f6d3d78d7c7..1be5fcfbfa1 100644 --- a/package/kernel/mac80211/patches/subsys/325-wifi-mac80211-introduce-ieee80211_refresh_tx_agg_ses.patch +++ b/package/kernel/mac80211/patches/subsys/325-wifi-mac80211-introduce-ieee80211_refresh_tx_agg_ses.patch @@ -13,7 +13,7 @@ Signed-off-by: Ryder Lee --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -5968,6 +5968,18 @@ void ieee80211_queue_delayed_work(struct +@@ -5964,6 +5964,18 @@ void ieee80211_queue_delayed_work(struct unsigned long delay); /** @@ -34,7 +34,7 @@ Signed-off-by: Ryder Lee * @tid: the TID to BA on. --- a/net/mac80211/agg-tx.c +++ b/net/mac80211/agg-tx.c -@@ -552,6 +552,23 @@ void ieee80211_tx_ba_session_handle_star +@@ -554,6 +554,23 @@ void ieee80211_tx_ba_session_handle_star ieee80211_send_addba_with_timeout(sta, tid_tx); } diff --git a/package/kernel/mac80211/patches/subsys/326-wifi-mac80211-add-mesh-fast-rx-support.patch b/package/kernel/mac80211/patches/subsys/326-wifi-mac80211-add-mesh-fast-rx-support.patch index b2b94d026b7..11f39c2d109 100644 --- a/package/kernel/mac80211/patches/subsys/326-wifi-mac80211-add-mesh-fast-rx-support.patch +++ b/package/kernel/mac80211/patches/subsys/326-wifi-mac80211-add-mesh-fast-rx-support.patch @@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c -@@ -4572,6 +4572,12 @@ void ieee80211_check_fast_rx(struct sta_ +@@ -4564,6 +4564,12 @@ void ieee80211_check_fast_rx(struct sta_ } break; @@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau default: goto clear; } -@@ -4780,6 +4786,7 @@ static bool ieee80211_invoke_fast_rx(str +@@ -4772,6 +4778,7 @@ static bool ieee80211_invoke_fast_rx(str struct sk_buff *skb = rx->skb; struct ieee80211_hdr *hdr = (void *)skb->data; struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); @@ -31,7 +31,7 @@ Signed-off-by: Felix Fietkau int orig_len = skb->len; int hdrlen = ieee80211_hdrlen(hdr->frame_control); int snap_offs = hdrlen; -@@ -4841,7 +4848,8 @@ static bool ieee80211_invoke_fast_rx(str +@@ -4833,7 +4840,8 @@ static bool ieee80211_invoke_fast_rx(str snap_offs += IEEE80211_CCMP_HDR_LEN; } @@ -41,7 +41,7 @@ Signed-off-by: Felix Fietkau if (!pskb_may_pull(skb, snap_offs + sizeof(*payload))) return false; -@@ -4880,13 +4888,29 @@ static bool ieee80211_invoke_fast_rx(str +@@ -4872,13 +4880,29 @@ static bool ieee80211_invoke_fast_rx(str /* do the header conversion - first grab the addresses */ ether_addr_copy(addrs.da, skb->data + fast_rx->da_offs); ether_addr_copy(addrs.sa, skb->data + fast_rx->sa_offs); diff --git a/package/kernel/mac80211/patches/subsys/327-wifi-mac80211-add-support-for-letting-drivers-regist.patch b/package/kernel/mac80211/patches/subsys/327-wifi-mac80211-add-support-for-letting-drivers-regist.patch index f1807bdc8a2..ac290b5360a 100644 --- a/package/kernel/mac80211/patches/subsys/327-wifi-mac80211-add-support-for-letting-drivers-regist.patch +++ b/package/kernel/mac80211/patches/subsys/327-wifi-mac80211-add-support-for-letting-drivers-regist.patch @@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -4196,6 +4196,10 @@ struct ieee80211_prep_tx_info { +@@ -4192,6 +4192,10 @@ struct ieee80211_prep_tx_info { * Note that a sta can also be inserted or removed with valid links, * i.e. passed to @sta_add/@sta_state with sta->valid_links not zero. * In fact, cannot change from having valid_links and not having them. @@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau */ struct ieee80211_ops { void (*tx)(struct ieee80211_hw *hw, -@@ -4551,6 +4555,11 @@ struct ieee80211_ops { +@@ -4547,6 +4551,11 @@ struct ieee80211_ops { struct ieee80211_vif *vif, struct ieee80211_sta *sta, u16 old_links, u16 new_links); @@ -63,7 +63,7 @@ Signed-off-by: Felix Fietkau u16 old_links, u16 new_links, --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h -@@ -1935,7 +1935,8 @@ void ieee80211_color_change_finalize_wor +@@ -1939,7 +1939,8 @@ void ieee80211_color_collision_detection /* interface handling */ #define MAC80211_SUPPORTED_FEATURES_TX (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | \ NETIF_F_HW_CSUM | NETIF_F_SG | \ diff --git a/package/kernel/mac80211/patches/subsys/328-wifi-mac80211-fix-invalid-drv_sta_pre_rcu_remove-cal.patch b/package/kernel/mac80211/patches/subsys/328-wifi-mac80211-fix-invalid-drv_sta_pre_rcu_remove-cal.patch deleted file mode 100644 index 289906c88c6..00000000000 --- a/package/kernel/mac80211/patches/subsys/328-wifi-mac80211-fix-invalid-drv_sta_pre_rcu_remove-cal.patch +++ /dev/null @@ -1,25 +0,0 @@ -From: Felix Fietkau -Date: Fri, 24 Mar 2023 13:04:17 +0100 -Subject: [PATCH] wifi: mac80211: fix invalid drv_sta_pre_rcu_remove calls for - non-uploaded sta - -Avoid potential data corruption issues caused by uninitialized driver -private data structures. - -Reported-by: Brian Coverstone -Fixes: 6a9d1b91f34d ("mac80211: add pre-RCU-sync sta removal driver operation") -Signed-off-by: Felix Fietkau ---- - ---- a/net/mac80211/sta_info.c -+++ b/net/mac80211/sta_info.c -@@ -1241,7 +1241,8 @@ static int __must_check __sta_info_destr - list_del_rcu(&sta->list); - sta->removed = true; - -- drv_sta_pre_rcu_remove(local, sta->sdata, sta); -+ if (sta->uploaded) -+ drv_sta_pre_rcu_remove(local, sta->sdata, sta); - - if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN && - rcu_access_pointer(sdata->u.vlan.sta) == sta) diff --git a/package/kernel/mac80211/patches/subsys/330-wifi-ieee80211-correctly-mark-FTM-frames-non-buffera.patch b/package/kernel/mac80211/patches/subsys/330-wifi-ieee80211-correctly-mark-FTM-frames-non-buffera.patch index 9c98d9e6d93..079dd2a8686 100644 --- a/package/kernel/mac80211/patches/subsys/330-wifi-ieee80211-correctly-mark-FTM-frames-non-buffera.patch +++ b/package/kernel/mac80211/patches/subsys/330-wifi-ieee80211-correctly-mark-FTM-frames-non-buffera.patch @@ -123,7 +123,7 @@ Reviewed-by: Peer, Ilan info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; return TX_CONTINUE; } -@@ -1325,7 +1325,7 @@ static struct txq_info *ieee80211_get_tx +@@ -1326,7 +1326,7 @@ static struct txq_info *ieee80211_get_tx if (!(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP) && unlikely(!ieee80211_is_data_present(hdr->frame_control))) { if ((!ieee80211_is_mgmt(hdr->frame_control) || diff --git a/package/kernel/mac80211/patches/subsys/333-wifi-mac80211-add-flush_sta-method.patch b/package/kernel/mac80211/patches/subsys/333-wifi-mac80211-add-flush_sta-method.patch index 300a2b65c6e..3bba0b7e66f 100644 --- a/package/kernel/mac80211/patches/subsys/333-wifi-mac80211-add-flush_sta-method.patch +++ b/package/kernel/mac80211/patches/subsys/333-wifi-mac80211-add-flush_sta-method.patch @@ -12,7 +12,7 @@ Reviewed-by: Greenman, Gregory --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -3922,6 +3922,10 @@ struct ieee80211_prep_tx_info { +@@ -3918,6 +3918,10 @@ struct ieee80211_prep_tx_info { * Note that vif can be NULL. * The callback can sleep. * @@ -23,7 +23,7 @@ Reviewed-by: Greenman, Gregory * @channel_switch: Drivers that need (or want) to offload the channel * switch operation for CSAs received from the AP may implement this * callback. They must then call ieee80211_chswitch_done() to indicate -@@ -4376,6 +4380,8 @@ struct ieee80211_ops { +@@ -4372,6 +4376,8 @@ struct ieee80211_ops { #endif void (*flush)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u32 queues, bool drop); diff --git a/package/kernel/mac80211/patches/subsys/335-wifi-mac80211-add-LDPC-related-flags-in-ieee80211_bs.patch b/package/kernel/mac80211/patches/subsys/335-wifi-mac80211-add-LDPC-related-flags-in-ieee80211_bs.patch new file mode 100644 index 00000000000..1b379b76ae9 --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/335-wifi-mac80211-add-LDPC-related-flags-in-ieee80211_bs.patch @@ -0,0 +1,62 @@ +From: Ryder Lee +Date: Sat, 18 Feb 2023 01:49:25 +0800 +Subject: [PATCH] wifi: mac80211: add LDPC related flags in ieee80211_bss_conf + +This is utilized to pass LDPC configurations from user space +(i.e. hostapd) to driver. + +Signed-off-by: Ryder Lee +Link: https://lore.kernel.org/r/1de696aaa34efd77a926eb657b8c0fda05aaa177.1676628065.git.ryder.lee@mediatek.com +Signed-off-by: Johannes Berg +--- + +--- a/include/net/mac80211.h ++++ b/include/net/mac80211.h +@@ -653,6 +653,9 @@ struct ieee80211_fils_discovery { + * write-protected by sdata_lock and local->mtx so holding either is fine + * for read access. + * @color_change_color: the bss color that will be used after the change. ++ * @ht_ldpc: in AP mode, indicates interface has HT LDPC capability. ++ * @vht_ldpc: in AP mode, indicates interface has VHT LDPC capability. ++ * @he_ldpc: in AP mode, indicates interface has HE LDPC capability. + * @vht_su_beamformer: in AP mode, does this BSS support operation as an VHT SU + * beamformer + * @vht_su_beamformee: in AP mode, does this BSS support operation as an VHT SU +@@ -744,6 +747,9 @@ struct ieee80211_bss_conf { + bool color_change_active; + u8 color_change_color; + ++ bool ht_ldpc; ++ bool vht_ldpc; ++ bool he_ldpc; + bool vht_su_beamformer; + bool vht_su_beamformee; + bool vht_mu_beamformer; +--- a/net/mac80211/cfg.c ++++ b/net/mac80211/cfg.c +@@ -1252,7 +1252,15 @@ static int ieee80211_start_ap(struct wip + prev_beacon_int = link_conf->beacon_int; + link_conf->beacon_int = params->beacon_interval; + ++ if (params->ht_cap) ++ link_conf->ht_ldpc = ++ params->ht_cap->cap_info & ++ cpu_to_le16(IEEE80211_HT_CAP_LDPC_CODING); ++ + if (params->vht_cap) { ++ link_conf->vht_ldpc = ++ params->vht_cap->vht_cap_info & ++ cpu_to_le32(IEEE80211_VHT_CAP_RXLDPC); + link_conf->vht_su_beamformer = + params->vht_cap->vht_cap_info & + cpu_to_le32(IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE); +@@ -1282,6 +1290,9 @@ static int ieee80211_start_ap(struct wip + } + + if (params->he_cap) { ++ link_conf->he_ldpc = ++ params->he_cap->phy_cap_info[1] & ++ IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD; + link_conf->he_su_beamformer = + params->he_cap->phy_cap_info[3] & + IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER; diff --git a/package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch b/package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch index d7ee33bebc0..b1e84e2ef28 100644 --- a/package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch +++ b/package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch @@ -18,7 +18,7 @@ --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -1671,6 +1671,7 @@ enum ieee80211_smps_mode { +@@ -1677,6 +1677,7 @@ enum ieee80211_smps_mode { * * @power_level: requested transmit power (in dBm), backward compatibility * value only that is set to the minimum of all interfaces @@ -26,7 +26,7 @@ * * @chandef: the channel definition to tune to * @radar_enabled: whether radar detection is enabled -@@ -1691,6 +1692,7 @@ enum ieee80211_smps_mode { +@@ -1697,6 +1698,7 @@ enum ieee80211_smps_mode { struct ieee80211_conf { u32 flags; int power_level, dynamic_ps_timeout; @@ -57,7 +57,7 @@ __NL80211_ATTR_AFTER_LAST, --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c -@@ -3028,6 +3028,19 @@ static int ieee80211_get_tx_power(struct +@@ -3046,6 +3046,19 @@ static int ieee80211_get_tx_power(struct return 0; } @@ -77,7 +77,7 @@ static void ieee80211_rfkill_poll(struct wiphy *wiphy) { struct ieee80211_local *local = wiphy_priv(wiphy); -@@ -4911,6 +4924,7 @@ const struct cfg80211_ops mac80211_confi +@@ -4953,6 +4966,7 @@ const struct cfg80211_ops mac80211_confi .set_wiphy_params = ieee80211_set_wiphy_params, .set_tx_power = ieee80211_set_tx_power, .get_tx_power = ieee80211_get_tx_power, @@ -87,7 +87,7 @@ CFG80211_TESTMODE_DUMP(ieee80211_testmode_dump) --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h -@@ -1535,6 +1535,7 @@ struct ieee80211_local { +@@ -1538,6 +1538,7 @@ struct ieee80211_local { int dynamic_ps_forced_timeout; int user_power_level; /* in dBm, for all interfaces */ From 3d110053f80be9d118cdc499e25076c202f79945 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= Date: Fri, 31 Mar 2023 12:40:31 +0200 Subject: [PATCH 10/19] ath79: mikrotik: drop unused files from ramdisk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The ramdisk used by sysupgrade on MikroTik devices currently includes U-Boot fw_* files that are not necessary for performing a system upgrade on that platform. The relevant lines were added to target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh by commit a66eee6336 ("ath79: add mikrotik subtarget"), likely because they also existed in target/linux/ath79/nand/base-files/lib/upgrade/platform.sh, where the platform_do_upgrade_mikrotik_nand() function moved by commit a66eee6336 originally lived. However, these lines were added to target/linux/ath79/nand/base-files/lib/upgrade/platform.sh by commit 55e6c903ae ("ath79: GL-AR300M: provide NAND support; increase to 4 MB kernel"), which is not related to MikroTik devices in any way. Remove the code adding unused U-Boot fw_* files to the ramdisk used by sysupgrade on MikroTik devices. Signed-off-by: Michał Kępień --- target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh b/target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh index 6962c6fdcc5..3ffe01cb23d 100644 --- a/target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh +++ b/target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh @@ -7,8 +7,7 @@ platform_check_image() { return 0 } -RAMFS_COPY_BIN='fw_printenv fw_setenv nandwrite' -RAMFS_COPY_DATA='/etc/fw_env.config /var/lock/fw_printenv.lock' +RAMFS_COPY_BIN='nandwrite' platform_do_upgrade_mikrotik_nand() { CI_KERNPART=none From fa4dc86e980851f01e243f94ffe7e0a928f6c16d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= Date: Fri, 31 Mar 2023 12:40:31 +0200 Subject: [PATCH 11/19] kernel: backport MEMREAD ioctl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MEMREAD is a new ioctl for MTD character devices that was first included in Linux 6.1. It allows userspace applications to use the Linux kernel's OOB autoplacement mechanism while reading data from NAND devices. The Yafut tool needs this ioctl to do its job. Signed-off-by: Michał Kępień --- ...m-number-of-bitflips-for-each-read-r.patch | 73 ++++ ...itialize-stats-in-struct-mtd_oob_ops.patch | 325 ++++++++++++++++++ ...ror-accounting-for-each-read-request.patch | 172 +++++++++ ...-v6.1-0004-mtdchar-add-MEMREAD-ioctl.patch | 321 +++++++++++++++++ .../400-mtd-mtdsplit-support.patch | 4 +- ...support-for-minor-aligned-partitions.patch | 2 +- ...nand-add-support-for-ESMT-F50x1G41LB.patch | 2 +- ...nd-Add-support-for-Etron-EM73D044VCx.patch | 2 +- ...lay-a-little-bit-the-dirmap-creation.patch | 4 +- ...te-direct-mapping-descriptors-for-EC.patch | 2 +- .../121-hack-spi-nand-1b-bbm.patch | 4 +- .../330-snand-mtk-bmt-support.patch | 6 +- ...Add-support-for-the-Fidelix-FM35X1GA.patch | 2 +- ...and-Add-calibration-support-for-spin.patch | 4 +- ...nor-Add-calibration-support-for-spi-.patch | 2 +- 15 files changed, 908 insertions(+), 17 deletions(-) create mode 100644 target/linux/generic/backport-5.15/423-v6.1-0001-mtd-track-maximum-number-of-bitflips-for-each-read-r.patch create mode 100644 target/linux/generic/backport-5.15/423-v6.1-0002-mtd-always-initialize-stats-in-struct-mtd_oob_ops.patch create mode 100644 target/linux/generic/backport-5.15/423-v6.1-0003-mtd-add-ECC-error-accounting-for-each-read-request.patch create mode 100644 target/linux/generic/backport-5.15/423-v6.1-0004-mtdchar-add-MEMREAD-ioctl.patch diff --git a/target/linux/generic/backport-5.15/423-v6.1-0001-mtd-track-maximum-number-of-bitflips-for-each-read-r.patch b/target/linux/generic/backport-5.15/423-v6.1-0001-mtd-track-maximum-number-of-bitflips-for-each-read-r.patch new file mode 100644 index 00000000000..10e61602c87 --- /dev/null +++ b/target/linux/generic/backport-5.15/423-v6.1-0001-mtd-track-maximum-number-of-bitflips-for-each-read-r.patch @@ -0,0 +1,73 @@ +From e237285113963bd1dd2e925770aa8b3aa8a1894c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= +Date: Wed, 29 Jun 2022 14:57:34 +0200 +Subject: [PATCH 1/4] mtd: track maximum number of bitflips for each read + request +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +mtd_read_oob() callers are currently oblivious to the details of ECC +errors detected during the read operation - they only learn (through the +return value) whether any corrected bitflips or uncorrectable errors +occurred. More detailed ECC information can be useful to user-space +applications for making better-informed choices about moving data +around. + +Extend struct mtd_oob_ops with a pointer to a newly-introduced struct +mtd_req_stats and set its 'max_bitflips' field to the maximum number of +bitflips found in a single ECC step during the read operation performed +by mtd_read_oob(). This is a prerequisite for ultimately passing that +value back to user space. + +Suggested-by: Boris Brezillon +Signed-off-by: Michał Kępień +Signed-off-by: Miquel Raynal +Link: https://lore.kernel.org/linux-mtd/20220629125737.14418-2-kernel@kempniu.pl +--- + drivers/mtd/mtdcore.c | 5 +++++ + include/linux/mtd/mtd.h | 5 +++++ + 2 files changed, 10 insertions(+) + +--- a/drivers/mtd/mtdcore.c ++++ b/drivers/mtd/mtdcore.c +@@ -1669,6 +1669,9 @@ int mtd_read_oob(struct mtd_info *mtd, l + if (!master->_read_oob && (!master->_read || ops->oobbuf)) + return -EOPNOTSUPP; + ++ if (ops->stats) ++ memset(ops->stats, 0, sizeof(*ops->stats)); ++ + if (mtd->flags & MTD_SLC_ON_MLC_EMULATION) + ret_code = mtd_io_emulated_slc(mtd, from, true, ops); + else +@@ -1686,6 +1689,8 @@ int mtd_read_oob(struct mtd_info *mtd, l + return ret_code; + if (mtd->ecc_strength == 0) + return 0; /* device lacks ecc */ ++ if (ops->stats) ++ ops->stats->max_bitflips = ret_code; + return ret_code >= mtd->bitflip_threshold ? -EUCLEAN : 0; + } + EXPORT_SYMBOL_GPL(mtd_read_oob); +--- a/include/linux/mtd/mtd.h ++++ b/include/linux/mtd/mtd.h +@@ -40,6 +40,10 @@ struct mtd_erase_region_info { + unsigned long *lockmap; /* If keeping bitmap of locks */ + }; + ++struct mtd_req_stats { ++ unsigned int max_bitflips; ++}; ++ + /** + * struct mtd_oob_ops - oob operation operands + * @mode: operation mode +@@ -70,6 +74,7 @@ struct mtd_oob_ops { + uint32_t ooboffs; + uint8_t *datbuf; + uint8_t *oobbuf; ++ struct mtd_req_stats *stats; + }; + + #define MTD_MAX_OOBFREE_ENTRIES_LARGE 32 diff --git a/target/linux/generic/backport-5.15/423-v6.1-0002-mtd-always-initialize-stats-in-struct-mtd_oob_ops.patch b/target/linux/generic/backport-5.15/423-v6.1-0002-mtd-always-initialize-stats-in-struct-mtd_oob_ops.patch new file mode 100644 index 00000000000..1484624e4e5 --- /dev/null +++ b/target/linux/generic/backport-5.15/423-v6.1-0002-mtd-always-initialize-stats-in-struct-mtd_oob_ops.patch @@ -0,0 +1,325 @@ +From e97709c9d18903f5acd5fbe2985dd054da0432b1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= +Date: Wed, 29 Jun 2022 14:57:35 +0200 +Subject: [PATCH 2/4] mtd: always initialize 'stats' in struct mtd_oob_ops +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +As the 'stats' field in struct mtd_oob_ops is used in conditional +expressions, ensure it is always zero-initialized in all such structures +to prevent random stack garbage from being interpreted as a pointer. + +Strictly speaking, this problem currently only needs to be fixed for +struct mtd_oob_ops structures subsequently passed to mtd_read_oob(). +However, this commit goes a step further and makes all instances of +struct mtd_oob_ops in the tree zero-initialized, in hope of preventing +future problems, e.g. if struct mtd_req_stats gets extended with write +statistics at some point. + +Signed-off-by: Michał Kępień +Signed-off-by: Miquel Raynal +Link: https://lore.kernel.org/linux-mtd/20220629125737.14418-3-kernel@kempniu.pl +--- + drivers/mtd/inftlcore.c | 6 +++--- + drivers/mtd/mtdswap.c | 6 +++--- + drivers/mtd/nand/onenand/onenand_base.c | 4 ++-- + drivers/mtd/nand/onenand/onenand_bbt.c | 2 +- + drivers/mtd/nand/raw/nand_bbt.c | 8 ++++---- + drivers/mtd/nand/raw/sm_common.c | 2 +- + drivers/mtd/nftlcore.c | 6 +++--- + drivers/mtd/sm_ftl.c | 4 ++-- + drivers/mtd/ssfdc.c | 2 +- + drivers/mtd/tests/nandbiterrs.c | 2 +- + drivers/mtd/tests/oobtest.c | 8 ++++---- + drivers/mtd/tests/readtest.c | 2 +- + fs/jffs2/wbuf.c | 6 +++--- + 13 files changed, 29 insertions(+), 29 deletions(-) + +--- a/drivers/mtd/inftlcore.c ++++ b/drivers/mtd/inftlcore.c +@@ -136,7 +136,7 @@ static void inftl_remove_dev(struct mtd_ + int inftl_read_oob(struct mtd_info *mtd, loff_t offs, size_t len, + size_t *retlen, uint8_t *buf) + { +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + int res; + + ops.mode = MTD_OPS_PLACE_OOB; +@@ -156,7 +156,7 @@ int inftl_read_oob(struct mtd_info *mtd, + int inftl_write_oob(struct mtd_info *mtd, loff_t offs, size_t len, + size_t *retlen, uint8_t *buf) + { +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + int res; + + ops.mode = MTD_OPS_PLACE_OOB; +@@ -176,7 +176,7 @@ int inftl_write_oob(struct mtd_info *mtd + static int inftl_write(struct mtd_info *mtd, loff_t offs, size_t len, + size_t *retlen, uint8_t *buf, uint8_t *oob) + { +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + int res; + + ops.mode = MTD_OPS_PLACE_OOB; +--- a/drivers/mtd/mtdswap.c ++++ b/drivers/mtd/mtdswap.c +@@ -323,7 +323,7 @@ static int mtdswap_read_markers(struct m + struct mtdswap_oobdata *data, *data2; + int ret; + loff_t offset; +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + + offset = mtdswap_eb_offset(d, eb); + +@@ -370,7 +370,7 @@ static int mtdswap_write_marker(struct m + struct mtdswap_oobdata n; + int ret; + loff_t offset; +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + + ops.ooboffs = 0; + ops.oobbuf = (uint8_t *)&n; +@@ -879,7 +879,7 @@ static unsigned int mtdswap_eblk_passes( + loff_t base, pos; + unsigned int *p1 = (unsigned int *)d->page_buf; + unsigned char *p2 = (unsigned char *)d->oob_buf; +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + int ret; + + ops.mode = MTD_OPS_AUTO_OOB; +--- a/drivers/mtd/nand/onenand/onenand_base.c ++++ b/drivers/mtd/nand/onenand/onenand_base.c +@@ -2935,7 +2935,7 @@ static int do_otp_write(struct mtd_info + struct onenand_chip *this = mtd->priv; + unsigned char *pbuf = buf; + int ret; +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + + /* Force buffer page aligned */ + if (len < mtd->writesize) { +@@ -2977,7 +2977,7 @@ static int do_otp_lock(struct mtd_info * + size_t *retlen, u_char *buf) + { + struct onenand_chip *this = mtd->priv; +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + int ret; + + if (FLEXONENAND(this)) { +--- a/drivers/mtd/nand/onenand/onenand_bbt.c ++++ b/drivers/mtd/nand/onenand/onenand_bbt.c +@@ -61,7 +61,7 @@ static int create_bbt(struct mtd_info *m + int startblock; + loff_t from; + size_t readlen, ooblen; +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + int rgn; + + printk(KERN_INFO "Scanning device for bad blocks\n"); +--- a/drivers/mtd/nand/raw/nand_bbt.c ++++ b/drivers/mtd/nand/raw/nand_bbt.c +@@ -313,7 +313,7 @@ static int scan_read_oob(struct nand_chi + size_t len) + { + struct mtd_info *mtd = nand_to_mtd(this); +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + int res, ret = 0; + + ops.mode = MTD_OPS_PLACE_OOB; +@@ -354,7 +354,7 @@ static int scan_write_bbt(struct nand_ch + uint8_t *buf, uint8_t *oob) + { + struct mtd_info *mtd = nand_to_mtd(this); +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + + ops.mode = MTD_OPS_PLACE_OOB; + ops.ooboffs = 0; +@@ -416,7 +416,7 @@ static int scan_block_fast(struct nand_c + { + struct mtd_info *mtd = nand_to_mtd(this); + +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + int ret, page_offset; + + ops.ooblen = mtd->oobsize; +@@ -756,7 +756,7 @@ static int write_bbt(struct nand_chip *t + uint8_t rcode = td->reserved_block_code; + size_t retlen, len = 0; + loff_t to; +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + + ops.ooblen = mtd->oobsize; + ops.ooboffs = 0; +--- a/drivers/mtd/nand/raw/sm_common.c ++++ b/drivers/mtd/nand/raw/sm_common.c +@@ -99,7 +99,7 @@ static const struct mtd_ooblayout_ops oo + static int sm_block_markbad(struct nand_chip *chip, loff_t ofs) + { + struct mtd_info *mtd = nand_to_mtd(chip); +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + struct sm_oob oob; + int ret; + +--- a/drivers/mtd/nftlcore.c ++++ b/drivers/mtd/nftlcore.c +@@ -124,7 +124,7 @@ int nftl_read_oob(struct mtd_info *mtd, + size_t *retlen, uint8_t *buf) + { + loff_t mask = mtd->writesize - 1; +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + int res; + + ops.mode = MTD_OPS_PLACE_OOB; +@@ -145,7 +145,7 @@ int nftl_write_oob(struct mtd_info *mtd, + size_t *retlen, uint8_t *buf) + { + loff_t mask = mtd->writesize - 1; +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + int res; + + ops.mode = MTD_OPS_PLACE_OOB; +@@ -168,7 +168,7 @@ static int nftl_write(struct mtd_info *m + size_t *retlen, uint8_t *buf, uint8_t *oob) + { + loff_t mask = mtd->writesize - 1; +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + int res; + + ops.mode = MTD_OPS_PLACE_OOB; +--- a/drivers/mtd/sm_ftl.c ++++ b/drivers/mtd/sm_ftl.c +@@ -239,7 +239,7 @@ static int sm_read_sector(struct sm_ftl + uint8_t *buffer, struct sm_oob *oob) + { + struct mtd_info *mtd = ftl->trans->mtd; +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + struct sm_oob tmp_oob; + int ret = -EIO; + int try = 0; +@@ -323,7 +323,7 @@ static int sm_write_sector(struct sm_ftl + int zone, int block, int boffset, + uint8_t *buffer, struct sm_oob *oob) + { +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + struct mtd_info *mtd = ftl->trans->mtd; + int ret; + +--- a/drivers/mtd/ssfdc.c ++++ b/drivers/mtd/ssfdc.c +@@ -163,7 +163,7 @@ static int read_physical_sector(struct m + /* Read redundancy area (wrapper to MTD_READ_OOB */ + static int read_raw_oob(struct mtd_info *mtd, loff_t offs, uint8_t *buf) + { +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + int ret; + + ops.mode = MTD_OPS_RAW; +--- a/drivers/mtd/tests/nandbiterrs.c ++++ b/drivers/mtd/tests/nandbiterrs.c +@@ -99,7 +99,7 @@ static int write_page(int log) + static int rewrite_page(int log) + { + int err = 0; +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + + if (log) + pr_info("rewrite page\n"); +--- a/drivers/mtd/tests/oobtest.c ++++ b/drivers/mtd/tests/oobtest.c +@@ -56,7 +56,7 @@ static void do_vary_offset(void) + static int write_eraseblock(int ebnum) + { + int i; +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + int err = 0; + loff_t addr = (loff_t)ebnum * mtd->erasesize; + +@@ -165,7 +165,7 @@ static size_t memffshow(loff_t addr, lof + static int verify_eraseblock(int ebnum) + { + int i; +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + int err = 0; + loff_t addr = (loff_t)ebnum * mtd->erasesize; + size_t bitflips; +@@ -260,7 +260,7 @@ static int verify_eraseblock(int ebnum) + + static int verify_eraseblock_in_one_go(int ebnum) + { +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + int err = 0; + loff_t addr = (loff_t)ebnum * mtd->erasesize; + size_t len = mtd->oobavail * pgcnt; +@@ -338,7 +338,7 @@ static int __init mtd_oobtest_init(void) + int err = 0; + unsigned int i; + uint64_t tmp; +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + loff_t addr = 0, addr0; + + printk(KERN_INFO "\n"); +--- a/drivers/mtd/tests/readtest.c ++++ b/drivers/mtd/tests/readtest.c +@@ -47,7 +47,7 @@ static int read_eraseblock_by_page(int e + err = ret; + } + if (mtd->oobsize) { +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + + ops.mode = MTD_OPS_PLACE_OOB; + ops.len = 0; +--- a/fs/jffs2/wbuf.c ++++ b/fs/jffs2/wbuf.c +@@ -1035,7 +1035,7 @@ int jffs2_check_oob_empty(struct jffs2_s + { + int i, ret; + int cmlen = min_t(int, c->oobavail, OOB_CM_SIZE); +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + + ops.mode = MTD_OPS_AUTO_OOB; + ops.ooblen = NR_OOB_SCAN_PAGES * c->oobavail; +@@ -1076,7 +1076,7 @@ int jffs2_check_oob_empty(struct jffs2_s + int jffs2_check_nand_cleanmarker(struct jffs2_sb_info *c, + struct jffs2_eraseblock *jeb) + { +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + int ret, cmlen = min_t(int, c->oobavail, OOB_CM_SIZE); + + ops.mode = MTD_OPS_AUTO_OOB; +@@ -1101,7 +1101,7 @@ int jffs2_write_nand_cleanmarker(struct + struct jffs2_eraseblock *jeb) + { + int ret; +- struct mtd_oob_ops ops; ++ struct mtd_oob_ops ops = { }; + int cmlen = min_t(int, c->oobavail, OOB_CM_SIZE); + + ops.mode = MTD_OPS_AUTO_OOB; diff --git a/target/linux/generic/backport-5.15/423-v6.1-0003-mtd-add-ECC-error-accounting-for-each-read-request.patch b/target/linux/generic/backport-5.15/423-v6.1-0003-mtd-add-ECC-error-accounting-for-each-read-request.patch new file mode 100644 index 00000000000..f2f45eb7bc7 --- /dev/null +++ b/target/linux/generic/backport-5.15/423-v6.1-0003-mtd-add-ECC-error-accounting-for-each-read-request.patch @@ -0,0 +1,172 @@ +From 2ed18d818d1f7492172f8dd5904344c7d367e8ed Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= +Date: Wed, 29 Jun 2022 14:57:36 +0200 +Subject: [PATCH 3/4] mtd: add ECC error accounting for each read request +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Extend struct mtd_req_stats with two new fields holding the number of +corrected bitflips and uncorrectable errors detected during a read +operation. This is a prerequisite for ultimately passing those counters +to user space, where they can be useful to applications for making +better-informed choices about moving data around. + +Unlike 'max_bitflips' (which is set - in a common code path - to the +return value of a function called while the MTD device's mutex is held), +these counters have to be maintained in each MTD driver which defines +the '_read_oob' callback because the statistics need to be calculated +while the MTD device's mutex is held. + +Suggested-by: Boris Brezillon +Signed-off-by: Michał Kępień +Signed-off-by: Miquel Raynal +Link: https://lore.kernel.org/linux-mtd/20220629125737.14418-4-kernel@kempniu.pl +--- + drivers/mtd/devices/docg3.c | 8 ++++++++ + drivers/mtd/nand/onenand/onenand_base.c | 12 ++++++++++++ + drivers/mtd/nand/raw/nand_base.c | 10 ++++++++++ + drivers/mtd/nand/spi/core.c | 10 ++++++++++ + include/linux/mtd/mtd.h | 2 ++ + 5 files changed, 42 insertions(+) + +--- a/drivers/mtd/devices/docg3.c ++++ b/drivers/mtd/devices/docg3.c +@@ -871,6 +871,7 @@ static int doc_read_oob(struct mtd_info + u8 *buf = ops->datbuf; + size_t len, ooblen, nbdata, nboob; + u8 hwecc[DOC_ECC_BCH_SIZE], eccconf1; ++ struct mtd_ecc_stats old_stats; + int max_bitflips = 0; + + if (buf) +@@ -895,6 +896,7 @@ static int doc_read_oob(struct mtd_info + ret = 0; + skip = from % DOC_LAYOUT_PAGE_SIZE; + mutex_lock(&docg3->cascade->lock); ++ old_stats = mtd->ecc_stats; + while (ret >= 0 && (len > 0 || ooblen > 0)) { + calc_block_sector(from - skip, &block0, &block1, &page, &ofs, + docg3->reliable); +@@ -966,6 +968,12 @@ static int doc_read_oob(struct mtd_info + } + + out: ++ if (ops->stats) { ++ ops->stats->uncorrectable_errors += ++ mtd->ecc_stats.failed - old_stats.failed; ++ ops->stats->corrected_bitflips += ++ mtd->ecc_stats.corrected - old_stats.corrected; ++ } + mutex_unlock(&docg3->cascade->lock); + return ret; + err_in_read: +--- a/drivers/mtd/nand/onenand/onenand_base.c ++++ b/drivers/mtd/nand/onenand/onenand_base.c +@@ -1440,6 +1440,7 @@ static int onenand_read_oob(struct mtd_i + struct mtd_oob_ops *ops) + { + struct onenand_chip *this = mtd->priv; ++ struct mtd_ecc_stats old_stats; + int ret; + + switch (ops->mode) { +@@ -1453,12 +1454,23 @@ static int onenand_read_oob(struct mtd_i + } + + onenand_get_device(mtd, FL_READING); ++ ++ old_stats = mtd->ecc_stats; ++ + if (ops->datbuf) + ret = ONENAND_IS_4KB_PAGE(this) ? + onenand_mlc_read_ops_nolock(mtd, from, ops) : + onenand_read_ops_nolock(mtd, from, ops); + else + ret = onenand_read_oob_nolock(mtd, from, ops); ++ ++ if (ops->stats) { ++ ops->stats->uncorrectable_errors += ++ mtd->ecc_stats.failed - old_stats.failed; ++ ops->stats->corrected_bitflips += ++ mtd->ecc_stats.corrected - old_stats.corrected; ++ } ++ + onenand_release_device(mtd); + + return ret; +--- a/drivers/mtd/nand/raw/nand_base.c ++++ b/drivers/mtd/nand/raw/nand_base.c +@@ -3815,6 +3815,7 @@ static int nand_read_oob(struct mtd_info + struct mtd_oob_ops *ops) + { + struct nand_chip *chip = mtd_to_nand(mtd); ++ struct mtd_ecc_stats old_stats; + int ret; + + ops->retlen = 0; +@@ -3826,11 +3827,20 @@ static int nand_read_oob(struct mtd_info + + nand_get_device(chip); + ++ old_stats = mtd->ecc_stats; ++ + if (!ops->datbuf) + ret = nand_do_read_oob(chip, from, ops); + else + ret = nand_do_read_ops(chip, from, ops); + ++ if (ops->stats) { ++ ops->stats->uncorrectable_errors += ++ mtd->ecc_stats.failed - old_stats.failed; ++ ops->stats->corrected_bitflips += ++ mtd->ecc_stats.corrected - old_stats.corrected; ++ } ++ + nand_release_device(chip); + return ret; + } +--- a/drivers/mtd/nand/spi/core.c ++++ b/drivers/mtd/nand/spi/core.c +@@ -629,6 +629,7 @@ static int spinand_mtd_read(struct mtd_i + { + struct spinand_device *spinand = mtd_to_spinand(mtd); + struct nand_device *nand = mtd_to_nanddev(mtd); ++ struct mtd_ecc_stats old_stats; + unsigned int max_bitflips = 0; + struct nand_io_iter iter; + bool disable_ecc = false; +@@ -640,6 +641,8 @@ static int spinand_mtd_read(struct mtd_i + + mutex_lock(&spinand->lock); + ++ old_stats = mtd->ecc_stats; ++ + nanddev_io_for_each_page(nand, NAND_PAGE_READ, from, ops, &iter) { + if (disable_ecc) + iter.req.mode = MTD_OPS_RAW; +@@ -662,6 +665,13 @@ static int spinand_mtd_read(struct mtd_i + ops->oobretlen += iter.req.ooblen; + } + ++ if (ops->stats) { ++ ops->stats->uncorrectable_errors += ++ mtd->ecc_stats.failed - old_stats.failed; ++ ops->stats->corrected_bitflips += ++ mtd->ecc_stats.corrected - old_stats.corrected; ++ } ++ + mutex_unlock(&spinand->lock); + + if (ecc_failed && !ret) +--- a/include/linux/mtd/mtd.h ++++ b/include/linux/mtd/mtd.h +@@ -41,6 +41,8 @@ struct mtd_erase_region_info { + }; + + struct mtd_req_stats { ++ unsigned int uncorrectable_errors; ++ unsigned int corrected_bitflips; + unsigned int max_bitflips; + }; + diff --git a/target/linux/generic/backport-5.15/423-v6.1-0004-mtdchar-add-MEMREAD-ioctl.patch b/target/linux/generic/backport-5.15/423-v6.1-0004-mtdchar-add-MEMREAD-ioctl.patch new file mode 100644 index 00000000000..182e4f6ab56 --- /dev/null +++ b/target/linux/generic/backport-5.15/423-v6.1-0004-mtdchar-add-MEMREAD-ioctl.patch @@ -0,0 +1,321 @@ +From 2c9745d36e04ac27161acd78514f647b9b587ad4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= +Date: Wed, 29 Jun 2022 14:57:37 +0200 +Subject: [PATCH 4/4] mtdchar: add MEMREAD ioctl +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +User-space applications making use of MTD devices via /dev/mtd* +character devices currently have limited capabilities for reading data: + + - only deprecated methods of accessing OOB layout information exist, + + - there is no way to explicitly specify MTD operation mode to use; it + is auto-selected based on the MTD file mode (MTD_FILE_MODE_*) set + for the character device; in particular, this prevents using + MTD_OPS_AUTO_OOB for reads, + + - all existing user-space interfaces which cause mtd_read() or + mtd_read_oob() to be called (via mtdchar_read() and + mtdchar_read_oob(), respectively) return success even when those + functions return -EUCLEAN or -EBADMSG; this renders user-space + applications using these interfaces unaware of any corrected + bitflips or uncorrectable ECC errors detected during reads. + +Note that the existing MEMWRITE ioctl allows the MTD operation mode to +be explicitly set, allowing user-space applications to write page data +and OOB data without requiring them to know anything about the OOB +layout of the MTD device they are writing to (MTD_OPS_AUTO_OOB). Also, +the MEMWRITE ioctl does not mangle the return value of mtd_write_oob(). + +Add a new ioctl, MEMREAD, which addresses the above issues. It is +intended to be a read-side counterpart of the existing MEMWRITE ioctl. +Similarly to the latter, the read operation is performed in a loop which +processes at most mtd->erasesize bytes in each iteration. This is done +to prevent unbounded memory allocations caused by calling kmalloc() with +the 'size' argument taken directly from the struct mtd_read_req provided +by user space. However, the new ioctl is implemented so that the values +it returns match those that would have been returned if just a single +mtd_read_oob() call was issued to handle the entire read operation in +one go. + +Note that while just returning -EUCLEAN or -EBADMSG to user space would +already be a valid and useful indication of the ECC algorithm detecting +errors during a read operation, that signal would not be granular enough +to cover all use cases. For example, knowing the maximum number of +bitflips detected in a single ECC step during a read operation performed +on a given page may be useful when dealing with an MTD partition whose +ECC layout varies across pages (e.g. a partition consisting of a +bootloader area using a "custom" ECC layout followed by data pages using +a "standard" ECC layout). To address that, include ECC statistics in +the structure returned to user space by the new MEMREAD ioctl. + +Link: https://www.infradead.org/pipermail/linux-mtd/2016-April/067085.html + +Suggested-by: Boris Brezillon +Signed-off-by: Michał Kępień +Acked-by: Richard Weinberger +Signed-off-by: Miquel Raynal +Link: https://lore.kernel.org/linux-mtd/20220629125737.14418-5-kernel@kempniu.pl +--- + drivers/mtd/mtdchar.c | 139 +++++++++++++++++++++++++++++++++++++ + include/uapi/mtd/mtd-abi.h | 64 +++++++++++++++-- + 2 files changed, 198 insertions(+), 5 deletions(-) + +--- a/drivers/mtd/mtdchar.c ++++ b/drivers/mtd/mtdchar.c +@@ -621,6 +621,137 @@ static int mtdchar_write_ioctl(struct mt + return ret; + } + ++static int mtdchar_read_ioctl(struct mtd_info *mtd, ++ struct mtd_read_req __user *argp) ++{ ++ struct mtd_info *master = mtd_get_master(mtd); ++ struct mtd_read_req req; ++ void __user *usr_data, *usr_oob; ++ uint8_t *datbuf = NULL, *oobbuf = NULL; ++ size_t datbuf_len, oobbuf_len; ++ size_t orig_len, orig_ooblen; ++ int ret = 0; ++ ++ if (copy_from_user(&req, argp, sizeof(req))) ++ return -EFAULT; ++ ++ orig_len = req.len; ++ orig_ooblen = req.ooblen; ++ ++ usr_data = (void __user *)(uintptr_t)req.usr_data; ++ usr_oob = (void __user *)(uintptr_t)req.usr_oob; ++ ++ if (!master->_read_oob) ++ return -EOPNOTSUPP; ++ ++ if (!usr_data) ++ req.len = 0; ++ ++ if (!usr_oob) ++ req.ooblen = 0; ++ ++ req.ecc_stats.uncorrectable_errors = 0; ++ req.ecc_stats.corrected_bitflips = 0; ++ req.ecc_stats.max_bitflips = 0; ++ ++ req.len &= 0xffffffff; ++ req.ooblen &= 0xffffffff; ++ ++ if (req.start + req.len > mtd->size) { ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ datbuf_len = min_t(size_t, req.len, mtd->erasesize); ++ if (datbuf_len > 0) { ++ datbuf = kvmalloc(datbuf_len, GFP_KERNEL); ++ if (!datbuf) { ++ ret = -ENOMEM; ++ goto out; ++ } ++ } ++ ++ oobbuf_len = min_t(size_t, req.ooblen, mtd->erasesize); ++ if (oobbuf_len > 0) { ++ oobbuf = kvmalloc(oobbuf_len, GFP_KERNEL); ++ if (!oobbuf) { ++ ret = -ENOMEM; ++ goto out; ++ } ++ } ++ ++ while (req.len > 0 || (!usr_data && req.ooblen > 0)) { ++ struct mtd_req_stats stats; ++ struct mtd_oob_ops ops = { ++ .mode = req.mode, ++ .len = min_t(size_t, req.len, datbuf_len), ++ .ooblen = min_t(size_t, req.ooblen, oobbuf_len), ++ .datbuf = datbuf, ++ .oobbuf = oobbuf, ++ .stats = &stats, ++ }; ++ ++ /* ++ * Shorten non-page-aligned, eraseblock-sized reads so that the ++ * read ends on an eraseblock boundary. This is necessary in ++ * order to prevent OOB data for some pages from being ++ * duplicated in the output of non-page-aligned reads requiring ++ * multiple mtd_read_oob() calls to be completed. ++ */ ++ if (ops.len == mtd->erasesize) ++ ops.len -= mtd_mod_by_ws(req.start + ops.len, mtd); ++ ++ ret = mtd_read_oob(mtd, (loff_t)req.start, &ops); ++ ++ req.ecc_stats.uncorrectable_errors += ++ stats.uncorrectable_errors; ++ req.ecc_stats.corrected_bitflips += stats.corrected_bitflips; ++ req.ecc_stats.max_bitflips = ++ max(req.ecc_stats.max_bitflips, stats.max_bitflips); ++ ++ if (ret && !mtd_is_bitflip_or_eccerr(ret)) ++ break; ++ ++ if (copy_to_user(usr_data, ops.datbuf, ops.retlen) || ++ copy_to_user(usr_oob, ops.oobbuf, ops.oobretlen)) { ++ ret = -EFAULT; ++ break; ++ } ++ ++ req.start += ops.retlen; ++ req.len -= ops.retlen; ++ usr_data += ops.retlen; ++ ++ req.ooblen -= ops.oobretlen; ++ usr_oob += ops.oobretlen; ++ } ++ ++ /* ++ * As multiple iterations of the above loop (and therefore multiple ++ * mtd_read_oob() calls) may be necessary to complete the read request, ++ * adjust the final return code to ensure it accounts for all detected ++ * ECC errors. ++ */ ++ if (!ret || mtd_is_bitflip(ret)) { ++ if (req.ecc_stats.uncorrectable_errors > 0) ++ ret = -EBADMSG; ++ else if (req.ecc_stats.corrected_bitflips > 0) ++ ret = -EUCLEAN; ++ } ++ ++out: ++ req.len = orig_len - req.len; ++ req.ooblen = orig_ooblen - req.ooblen; ++ ++ if (copy_to_user(argp, &req, sizeof(req))) ++ ret = -EFAULT; ++ ++ kvfree(datbuf); ++ kvfree(oobbuf); ++ ++ return ret; ++} ++ + static int mtdchar_ioctl(struct file *file, u_int cmd, u_long arg) + { + struct mtd_file_info *mfi = file->private_data; +@@ -643,6 +774,7 @@ static int mtdchar_ioctl(struct file *fi + case MEMGETINFO: + case MEMREADOOB: + case MEMREADOOB64: ++ case MEMREAD: + case MEMISLOCKED: + case MEMGETOOBSEL: + case MEMGETBADBLOCK: +@@ -817,6 +949,13 @@ static int mtdchar_ioctl(struct file *fi + break; + } + ++ case MEMREAD: ++ { ++ ret = mtdchar_read_ioctl(mtd, ++ (struct mtd_read_req __user *)arg); ++ break; ++ } ++ + case MEMLOCK: + { + struct erase_info_user einfo; +--- a/include/uapi/mtd/mtd-abi.h ++++ b/include/uapi/mtd/mtd-abi.h +@@ -55,9 +55,9 @@ struct mtd_oob_buf64 { + * @MTD_OPS_RAW: data are transferred as-is, with no error correction; + * this mode implies %MTD_OPS_PLACE_OOB + * +- * These modes can be passed to ioctl(MEMWRITE) and are also used internally. +- * See notes on "MTD file modes" for discussion on %MTD_OPS_RAW vs. +- * %MTD_FILE_MODE_RAW. ++ * These modes can be passed to ioctl(MEMWRITE) and ioctl(MEMREAD); they are ++ * also used internally. See notes on "MTD file modes" for discussion on ++ * %MTD_OPS_RAW vs. %MTD_FILE_MODE_RAW. + */ + enum { + MTD_OPS_PLACE_OOB = 0, +@@ -91,6 +91,53 @@ struct mtd_write_req { + __u8 padding[7]; + }; + ++/** ++ * struct mtd_read_req_ecc_stats - ECC statistics for a read operation ++ * ++ * @uncorrectable_errors: the number of uncorrectable errors that happened ++ * during the read operation ++ * @corrected_bitflips: the number of bitflips corrected during the read ++ * operation ++ * @max_bitflips: the maximum number of bitflips detected in any single ECC ++ * step for the data read during the operation; this information ++ * can be used to decide whether the data stored in a specific ++ * region of the MTD device should be moved somewhere else to ++ * avoid data loss. ++ */ ++struct mtd_read_req_ecc_stats { ++ __u32 uncorrectable_errors; ++ __u32 corrected_bitflips; ++ __u32 max_bitflips; ++}; ++ ++/** ++ * struct mtd_read_req - data structure for requesting a read operation ++ * ++ * @start: start address ++ * @len: length of data buffer (only lower 32 bits are used) ++ * @ooblen: length of OOB buffer (only lower 32 bits are used) ++ * @usr_data: user-provided data buffer ++ * @usr_oob: user-provided OOB buffer ++ * @mode: MTD mode (see "MTD operation modes") ++ * @padding: reserved, must be set to 0 ++ * @ecc_stats: ECC statistics for the read operation ++ * ++ * This structure supports ioctl(MEMREAD) operations, allowing data and/or OOB ++ * reads in various modes. To read from OOB-only, set @usr_data == NULL, and to ++ * read data-only, set @usr_oob == NULL. However, setting both @usr_data and ++ * @usr_oob to NULL is not allowed. ++ */ ++struct mtd_read_req { ++ __u64 start; ++ __u64 len; ++ __u64 ooblen; ++ __u64 usr_data; ++ __u64 usr_oob; ++ __u8 mode; ++ __u8 padding[7]; ++ struct mtd_read_req_ecc_stats ecc_stats; ++}; ++ + #define MTD_ABSENT 0 + #define MTD_RAM 1 + #define MTD_ROM 2 +@@ -207,6 +254,12 @@ struct otp_info { + #define MEMWRITE _IOWR('M', 24, struct mtd_write_req) + /* Erase a given range of user data (must be in mode %MTD_FILE_MODE_OTP_USER) */ + #define OTPERASE _IOW('M', 25, struct otp_info) ++/* ++ * Most generic read interface; can read in-band and/or out-of-band in various ++ * modes (see "struct mtd_read_req"). This ioctl is not supported for flashes ++ * without OOB, e.g., NOR flash. ++ */ ++#define MEMREAD _IOWR('M', 26, struct mtd_read_req) + + /* + * Obsolete legacy interface. Keep it in order not to break userspace +@@ -270,8 +323,9 @@ struct mtd_ecc_stats { + * Note: %MTD_FILE_MODE_RAW provides the same functionality as %MTD_OPS_RAW - + * raw access to the flash, without error correction or autoplacement schemes. + * Wherever possible, the MTD_OPS_* mode will override the MTD_FILE_MODE_* mode +- * (e.g., when using ioctl(MEMWRITE)), but in some cases, the MTD_FILE_MODE is +- * used out of necessity (e.g., `write()', ioctl(MEMWRITEOOB64)). ++ * (e.g., when using ioctl(MEMWRITE) or ioctl(MEMREAD)), but in some cases, the ++ * MTD_FILE_MODE is used out of necessity (e.g., `write()', ++ * ioctl(MEMWRITEOOB64)). + */ + enum mtd_file_modes { + MTD_FILE_MODE_NORMAL = MTD_OTP_OFF, diff --git a/target/linux/generic/pending-5.15/400-mtd-mtdsplit-support.patch b/target/linux/generic/pending-5.15/400-mtd-mtdsplit-support.patch index bf82bb39506..46ef15d127d 100644 --- a/target/linux/generic/pending-5.15/400-mtd-mtdsplit-support.patch +++ b/target/linux/generic/pending-5.15/400-mtd-mtdsplit-support.patch @@ -264,7 +264,7 @@ Subject: [PATCH] mtd: mtdsplit support * one chunk. Do that by default. --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h -@@ -613,6 +613,24 @@ static inline void mtd_align_erase_req(s +@@ -620,6 +620,24 @@ static inline void mtd_align_erase_req(s req->len += mtd->erasesize - mod; } @@ -289,7 +289,7 @@ Subject: [PATCH] mtd: mtdsplit support static inline uint32_t mtd_div_by_ws(uint64_t sz, struct mtd_info *mtd) { if (mtd->writesize_shift) -@@ -686,6 +704,13 @@ extern struct mtd_info *of_get_mtd_devic +@@ -693,6 +711,13 @@ extern struct mtd_info *of_get_mtd_devic extern struct mtd_info *get_mtd_device_nm(const char *name); extern void put_mtd_device(struct mtd_info *mtd); diff --git a/target/linux/generic/pending-5.15/402-mtd-spi-nor-write-support-for-minor-aligned-partitions.patch b/target/linux/generic/pending-5.15/402-mtd-spi-nor-write-support-for-minor-aligned-partitions.patch index de76d6918b7..d12bc9c3d59 100644 --- a/target/linux/generic/pending-5.15/402-mtd-spi-nor-write-support-for-minor-aligned-partitions.patch +++ b/target/linux/generic/pending-5.15/402-mtd-spi-nor-write-support-for-minor-aligned-partitions.patch @@ -234,7 +234,7 @@ Reported-by: Dan Carpenter --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h -@@ -243,6 +243,8 @@ struct mtd_info { +@@ -250,6 +250,8 @@ struct mtd_info { * information below if they desire */ uint32_t erasesize; diff --git a/target/linux/generic/pending-5.15/486-01-mtd-spinand-add-support-for-ESMT-F50x1G41LB.patch b/target/linux/generic/pending-5.15/486-01-mtd-spinand-add-support-for-ESMT-F50x1G41LB.patch index c170fedc67b..d117cfe0a3a 100644 --- a/target/linux/generic/pending-5.15/486-01-mtd-spinand-add-support-for-ESMT-F50x1G41LB.patch +++ b/target/linux/generic/pending-5.15/486-01-mtd-spinand-add-support-for-ESMT-F50x1G41LB.patch @@ -31,7 +31,7 @@ Signed-off-by: Chuanhong Guo obj-$(CONFIG_MTD_SPI_NAND) += spinand.o --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c -@@ -896,6 +896,7 @@ static const struct nand_ops spinand_ops +@@ -906,6 +906,7 @@ static const struct nand_ops spinand_ops }; static const struct spinand_manufacturer *spinand_manufacturers[] = { diff --git a/target/linux/generic/pending-5.15/487-mtd-spinand-Add-support-for-Etron-EM73D044VCx.patch b/target/linux/generic/pending-5.15/487-mtd-spinand-Add-support-for-Etron-EM73D044VCx.patch index 2f604cfa986..7e20e14bb62 100644 --- a/target/linux/generic/pending-5.15/487-mtd-spinand-Add-support-for-Etron-EM73D044VCx.patch +++ b/target/linux/generic/pending-5.15/487-mtd-spinand-Add-support-for-Etron-EM73D044VCx.patch @@ -47,7 +47,7 @@ Submitted-by: Daniel Danzberger obj-$(CONFIG_MTD_SPI_NAND) += spinand.o --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c -@@ -898,6 +898,7 @@ static const struct nand_ops spinand_ops +@@ -908,6 +908,7 @@ static const struct nand_ops spinand_ops static const struct spinand_manufacturer *spinand_manufacturers[] = { &esmt_c8_spinand_manufacturer, &gigadevice_spinand_manufacturer, diff --git a/target/linux/mediatek/patches-5.15/120-08-v5.18-mtd-spinand-Delay-a-little-bit-the-dirmap-creation.patch b/target/linux/mediatek/patches-5.15/120-08-v5.18-mtd-spinand-Delay-a-little-bit-the-dirmap-creation.patch index 0f69b30e947..87c7b7cd297 100644 --- a/target/linux/mediatek/patches-5.15/120-08-v5.18-mtd-spinand-Delay-a-little-bit-the-dirmap-creation.patch +++ b/target/linux/mediatek/patches-5.15/120-08-v5.18-mtd-spinand-Delay-a-little-bit-the-dirmap-creation.patch @@ -18,7 +18,7 @@ Link: https://lore.kernel.org/linux-mtd/20220127091808.1043392-8-miquel.raynal@b --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c -@@ -1211,14 +1211,6 @@ static int spinand_init(struct spinand_d +@@ -1221,14 +1221,6 @@ static int spinand_init(struct spinand_d if (ret) goto err_free_bufs; @@ -33,7 +33,7 @@ Link: https://lore.kernel.org/linux-mtd/20220127091808.1043392-8-miquel.raynal@b ret = nanddev_init(nand, &spinand_ops, THIS_MODULE); if (ret) goto err_manuf_cleanup; -@@ -1253,6 +1245,14 @@ static int spinand_init(struct spinand_d +@@ -1263,6 +1255,14 @@ static int spinand_init(struct spinand_d mtd->ecc_strength = nanddev_get_ecc_conf(nand)->strength; mtd->ecc_step_size = nanddev_get_ecc_conf(nand)->step_size; diff --git a/target/linux/mediatek/patches-5.15/120-09-v5.18-mtd-spinand-Create-direct-mapping-descriptors-for-EC.patch b/target/linux/mediatek/patches-5.15/120-09-v5.18-mtd-spinand-Create-direct-mapping-descriptors-for-EC.patch index 1188872bd78..35912cd2cd6 100644 --- a/target/linux/mediatek/patches-5.15/120-09-v5.18-mtd-spinand-Create-direct-mapping-descriptors-for-EC.patch +++ b/target/linux/mediatek/patches-5.15/120-09-v5.18-mtd-spinand-Create-direct-mapping-descriptors-for-EC.patch @@ -53,7 +53,7 @@ Link: https://lore.kernel.org/linux-mtd/20220127091808.1043392-9-miquel.raynal@b while (nbytes) { ret = spi_mem_dirmap_write(wdesc, column, nbytes, buf); -@@ -865,6 +871,31 @@ static int spinand_create_dirmap(struct +@@ -875,6 +881,31 @@ static int spinand_create_dirmap(struct spinand->dirmaps[plane].rdesc = desc; diff --git a/target/linux/mediatek/patches-5.15/121-hack-spi-nand-1b-bbm.patch b/target/linux/mediatek/patches-5.15/121-hack-spi-nand-1b-bbm.patch index 770a7ff9bd9..ff5521c44ea 100644 --- a/target/linux/mediatek/patches-5.15/121-hack-spi-nand-1b-bbm.patch +++ b/target/linux/mediatek/patches-5.15/121-hack-spi-nand-1b-bbm.patch @@ -1,6 +1,6 @@ --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c -@@ -714,7 +714,7 @@ static int spinand_mtd_write(struct mtd_ +@@ -724,7 +724,7 @@ static int spinand_mtd_write(struct mtd_ static bool spinand_isbad(struct nand_device *nand, const struct nand_pos *pos) { struct spinand_device *spinand = nand_to_spinand(nand); @@ -9,7 +9,7 @@ struct nand_page_io_req req = { .pos = *pos, .ooblen = sizeof(marker), -@@ -725,7 +725,7 @@ static bool spinand_isbad(struct nand_de +@@ -735,7 +735,7 @@ static bool spinand_isbad(struct nand_de spinand_select_target(spinand, pos->target); spinand_read_page(spinand, &req); diff --git a/target/linux/mediatek/patches-5.15/330-snand-mtk-bmt-support.patch b/target/linux/mediatek/patches-5.15/330-snand-mtk-bmt-support.patch index cd1745dd7a2..6814e5f5e98 100644 --- a/target/linux/mediatek/patches-5.15/330-snand-mtk-bmt-support.patch +++ b/target/linux/mediatek/patches-5.15/330-snand-mtk-bmt-support.patch @@ -8,7 +8,7 @@ static int spinand_read_reg_op(struct spinand_device *spinand, u8 reg, u8 *val) { -@@ -1333,6 +1334,7 @@ static int spinand_probe(struct spi_mem +@@ -1343,6 +1344,7 @@ static int spinand_probe(struct spi_mem if (ret) return ret; @@ -16,7 +16,7 @@ ret = mtd_device_register(mtd, NULL, 0); if (ret) goto err_spinand_cleanup; -@@ -1340,6 +1342,7 @@ static int spinand_probe(struct spi_mem +@@ -1350,6 +1352,7 @@ static int spinand_probe(struct spi_mem return 0; err_spinand_cleanup: @@ -24,7 +24,7 @@ spinand_cleanup(spinand); return ret; -@@ -1358,6 +1361,7 @@ static int spinand_remove(struct spi_mem +@@ -1368,6 +1371,7 @@ static int spinand_remove(struct spi_mem if (ret) return ret; diff --git a/target/linux/mediatek/patches-5.15/340-mtd-spinand-Add-support-for-the-Fidelix-FM35X1GA.patch b/target/linux/mediatek/patches-5.15/340-mtd-spinand-Add-support-for-the-Fidelix-FM35X1GA.patch index 823630b3c42..6baa32879bf 100644 --- a/target/linux/mediatek/patches-5.15/340-mtd-spinand-Add-support-for-the-Fidelix-FM35X1GA.patch +++ b/target/linux/mediatek/patches-5.15/340-mtd-spinand-Add-support-for-the-Fidelix-FM35X1GA.patch @@ -23,7 +23,7 @@ Signed-off-by: Davide Fioravanti obj-$(CONFIG_MTD_SPI_NAND) += spinand.o --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c -@@ -929,6 +929,7 @@ static const struct nand_ops spinand_ops +@@ -939,6 +939,7 @@ static const struct nand_ops spinand_ops static const struct spinand_manufacturer *spinand_manufacturers[] = { &esmt_c8_spinand_manufacturer, diff --git a/target/linux/mediatek/patches-5.15/435-drivers-mtd-spinand-Add-calibration-support-for-spin.patch b/target/linux/mediatek/patches-5.15/435-drivers-mtd-spinand-Add-calibration-support-for-spin.patch index f71a1d2d589..e2684eebb74 100644 --- a/target/linux/mediatek/patches-5.15/435-drivers-mtd-spinand-Add-calibration-support-for-spin.patch +++ b/target/linux/mediatek/patches-5.15/435-drivers-mtd-spinand-Add-calibration-support-for-spin.patch @@ -11,7 +11,7 @@ Signed-off-by: SkyLake.Huang --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c -@@ -967,6 +967,56 @@ static int spinand_manufacturer_match(st +@@ -977,6 +977,56 @@ static int spinand_manufacturer_match(st return -ENOTSUPP; } @@ -68,7 +68,7 @@ Signed-off-by: SkyLake.Huang static int spinand_id_detect(struct spinand_device *spinand) { u8 *id = spinand->id.data; -@@ -1217,6 +1267,10 @@ static int spinand_init(struct spinand_d +@@ -1227,6 +1277,10 @@ static int spinand_init(struct spinand_d if (!spinand->scratchbuf) return -ENOMEM; diff --git a/target/linux/mediatek/patches-5.15/436-drivers-mtd-spi-nor-Add-calibration-support-for-spi-.patch b/target/linux/mediatek/patches-5.15/436-drivers-mtd-spi-nor-Add-calibration-support-for-spi-.patch index a08b19870cc..25a7cd38614 100644 --- a/target/linux/mediatek/patches-5.15/436-drivers-mtd-spi-nor-Add-calibration-support-for-spi-.patch +++ b/target/linux/mediatek/patches-5.15/436-drivers-mtd-spi-nor-Add-calibration-support-for-spi-.patch @@ -12,7 +12,7 @@ Signed-off-by: SkyLake.Huang --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c -@@ -1008,7 +1008,10 @@ int spinand_cal_read(void *priv, u32 *ad +@@ -1018,7 +1018,10 @@ int spinand_cal_read(void *priv, u32 *ad if (ret) return ret; From 27acf2413e91247e16e4f52c6008ec0f5a5cf4a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= Date: Fri, 31 Mar 2023 12:40:31 +0200 Subject: [PATCH 12/19] yafut: add a kernel update tool for MikroTik NAND MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Commit 9d96b6fb72 ("ath79/mikrotik: disable building NAND images") disabled building images for MikroTik devices with NAND flash due to a less than satisfactory method used for updating the kernel on those devices back then. To address the problem, add support for updating the kernel on MikroTik devices with NAND flash using a new tool, Yafut, which enables copying files from/to Yaffs file systems even if the kernel does not have native support for the Yaffs file system compiled in. Instead of erasing the entire NAND partition holding the kernel during every system upgrade (which is what the previously-used approach employing kernel2minor involved), Yafut preserves the Yaffs filesystem present on that partition and only replaces the kernel executable. This allows bad block information to be preserved across sysupgrade runs and also enables wear leveling on the NAND partition holding the kernel. Yafut does not rely on kernel2minor in any way and intends to eventually supersede the latter for NAND devices. Signed-off-by: Michał Kępień --- package/utils/yafut/Makefile | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 package/utils/yafut/Makefile diff --git a/package/utils/yafut/Makefile b/package/utils/yafut/Makefile new file mode 100644 index 00000000000..fe27db97d22 --- /dev/null +++ b/package/utils/yafut/Makefile @@ -0,0 +1,35 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=yafut +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL=https://github.com/kempniu/yafut.git +PKG_SOURCE_DATE:=2023-03-31 +PKG_SOURCE_VERSION:=16435e89d449f953712983315e1a89cdb678620d + +PKG_LICENSE:=GPL-2.0 +PKG_LICENSE_FILES:=LICENSE + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/cmake.mk + +CMAKE_INSTALL:=1 + +define Package/yafut + SECTION:=utils + CATEGORY:=Utilities + TITLE:=Yet Another File UTility + DEPENDS:=@NAND_SUPPORT +endef + +define Package/yafut/description + A program for copying files from/to Yaffs file systems from userspace. +endef + +define Package/yafut/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/yafut $(1)/usr/bin +endef + +$(eval $(call BuildPackage,yafut)) From 5264296ce480e46c7cd6228502b48ea944a6459b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= Date: Sat, 1 Apr 2023 20:54:14 +0200 Subject: [PATCH 13/19] ath79: mikrotik: update kernel on NAND using Yafut MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of erasing the entire NAND partition holding the kernel during every system upgrade and then flashing a Yaffs file system image prepared using kernel2minor (not accounting for bad blocks in the process), use the Yafut utility to replace the kernel executable on MikroTik NAND devices, preserving the existing Yaffs file system (including bad block information) on the partition holding the kernel. Add Yafut to DEFAULT_PACKAGES for the ath79/mikrotik target, so that the tool is included in the initramfs images created when building for multiple profiles. However, exclude Yafut from the images built for MikroTik devices with NOR flash as the tool is currently only meant to be used on devices with NAND flash. As this addresses the concerns for MikroTik NAND devices discussed in commit 9d96b6fb72 ("ath79/mikrotik: disable building NAND images"), re-enable building images for these devices. Signed-off-by: Michał Kępień --- target/linux/ath79/image/common-mikrotik.mk | 6 ++---- .../linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh | 5 ++--- target/linux/ath79/mikrotik/target.mk | 2 +- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/target/linux/ath79/image/common-mikrotik.mk b/target/linux/ath79/image/common-mikrotik.mk index fb3dc782266..ce349b60b1d 100644 --- a/target/linux/ath79/image/common-mikrotik.mk +++ b/target/linux/ath79/image/common-mikrotik.mk @@ -9,6 +9,7 @@ endef define Device/mikrotik_nor $(Device/mikrotik) + DEVICE_PACKAGES := -yafut IMAGE/sysupgrade.bin := append-kernel | kernel2minor -s 1024 -e | \ pad-to $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | \ check-size | append-metadata @@ -16,8 +17,5 @@ endef define Device/mikrotik_nand $(Device/mikrotik) - IMAGE/sysupgrade.bin = append-kernel | kernel2minor -s 2048 -e -c | \ - sysupgrade-tar kernel=$$$$@ | append-metadata - DEVICE_PACKAGES := nand-utils - DEFAULT := n + IMAGE/sysupgrade.bin = append-kernel | sysupgrade-tar | append-metadata endef diff --git a/target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh b/target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh index 3ffe01cb23d..93a9c3a855e 100644 --- a/target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh +++ b/target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh @@ -7,7 +7,7 @@ platform_check_image() { return 0 } -RAMFS_COPY_BIN='nandwrite' +RAMFS_COPY_BIN='yafut' platform_do_upgrade_mikrotik_nand() { CI_KERNPART=none @@ -20,8 +20,7 @@ platform_do_upgrade_mikrotik_nand() { board_dir=${board_dir%/} [ -n "$board_dir" ] || return - mtd erase kernel - tar xf "$1" ${board_dir}/kernel -O | nandwrite -o "$fw_mtd" - + tar xf "$1" ${board_dir}/kernel -O | yafut -d "$fw_mtd" -w -i - -o kernel -m 0755 || return nand_do_upgrade "$1" } diff --git a/target/linux/ath79/mikrotik/target.mk b/target/linux/ath79/mikrotik/target.mk index bfc8cceac61..a3c876d7a79 100644 --- a/target/linux/ath79/mikrotik/target.mk +++ b/target/linux/ath79/mikrotik/target.mk @@ -3,7 +3,7 @@ FEATURES += minor nand KERNELNAME := vmlinux vmlinuz IMAGES_DIR := ../../.. -DEFAULT_PACKAGES += wpad-basic-mbedtls +DEFAULT_PACKAGES += wpad-basic-mbedtls yafut define Target/Description Build firmware images for MikroTik devices based on Qualcomm Atheros From 394d7134ec42f14ddb91769c737098753fa68266 Mon Sep 17 00:00:00 2001 From: Tony Butler Date: Wed, 30 Nov 2022 06:19:37 -0800 Subject: [PATCH 14/19] tools/bzip2: add `bzip2` binaries `bzip2` is the standard executable for bzip2 compression this includes development includes and both static and shared libs (libbz2) which can be used by other packages the initramfs generator offers the BZIP2 option but there was no executable to support it, and worked only via side effect of having a system-installed version of bzip2, which could be less predictable Signed-off-by: Tony Butler --- tools/Makefile | 5 +- tools/bzip2/Makefile | 52 +++ tools/bzip2/patches/020-no-utime.patch | 27 ++ .../021-merge-and-improve-makefiles.patch | 401 ++++++++++++++++++ 4 files changed, 484 insertions(+), 1 deletion(-) create mode 100644 tools/bzip2/Makefile create mode 100644 tools/bzip2/patches/020-no-utime.patch create mode 100644 tools/bzip2/patches/021-merge-and-improve-makefiles.patch diff --git a/tools/Makefile b/tools/Makefile index bdd9f0a2570..251ca2c4607 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -20,6 +20,9 @@ endif ifneq ($(CONFIG_SDK)$(CONFIG_PACKAGE_kmod-b43)$(CONFIG_BRCMSMAC_USE_FW_FROM_WL),) BUILD_B43_TOOLS = y endif +ifneq ($(CONFIG_SDK)$(CONFIG_TARGET_INITRAMFS_COMPRESSION_BZIP2),) + BUILD_BZIP2_TOOLS = y +endif ifneq ($(CONFIG_SDK)$(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZ4),) BUILD_LZ4_TOOLS = y endif @@ -64,8 +67,8 @@ tools-y += sstrip tools-y += zip tools-y += zlib tools-y += zstd -tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS),y) += liblzo tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_B43_TOOLS),y) += b43-tools +tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_BZIP2_TOOLS),y) += bzip2 tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_ISL),y) += isl tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_LZ4_TOOLS),y) += lz4 tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_LZO_TOOLS),y) += lzop diff --git a/tools/bzip2/Makefile b/tools/bzip2/Makefile new file mode 100644 index 00000000000..0c5a92849ad --- /dev/null +++ b/tools/bzip2/Makefile @@ -0,0 +1,52 @@ +# +# Copyright (C) 2022 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=bzip2 +PKG_VERSION:=1.0.8 +PKG_RELEASE:=1 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://sourceware.org/pub/bzip2 +PKG_HASH:=ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269 + +PKG_LICENSE:=bzip2-1.0.8 +PKG_LICENSE_FILES:=LICENSE +PKG_CPE_ID:=cpe:/a:bzip:bzip2 + +HOST_BUILD_PARALLEL:=1 + +include $(INCLUDE_DIR)/host-build.mk + +HOSTCC := $(HOSTCC_NOCACHE) +HOST_CFLAGS += $(HOST_FPIC) + +HOST_MAKE_FLAGS+= \ + CFLAGS="$(HOST_CFLAGS)" \ + LDFLAGS="$(HOST_LDFLAGS)" \ + ENABLE_BIN_SHARED=1 \ + ENABLE_BIN_STATIC=0 \ + ENABLE_LIB_SHARED=1 \ + ENABLE_LIB_STATIC=1 \ + ENABLE_DEV=1 \ + ENABLE_DOCS=1 \ + ENABLE_TESTS=0 \ + PREFIX="$(HOST_BUILD_PREFIX)" + +define Host/Configure +endef + +define Host/Uninstall + $(call Host/Compile/Default,uninstall) + $(call Host/Compile/Default,clean) +endef + +define Host/Clean +endef + +$(eval $(call HostBuild)) diff --git a/tools/bzip2/patches/020-no-utime.patch b/tools/bzip2/patches/020-no-utime.patch new file mode 100644 index 00000000000..d0cd4f0e35e --- /dev/null +++ b/tools/bzip2/patches/020-no-utime.patch @@ -0,0 +1,27 @@ +--- a/bzip2.c ++++ b/bzip2.c +@@ -69,7 +69,6 @@ + #if BZ_UNIX + # include + # include +-# include + # include + # include + # include +@@ -1051,12 +1050,12 @@ void applySavedTimeInfoToOutputFile ( Ch + { + # if BZ_UNIX + IntNative retVal; +- struct utimbuf uTimBuf; ++ struct timespec uTimBuf[2] = {}; + +- uTimBuf.actime = fileMetaInfo.st_atime; +- uTimBuf.modtime = fileMetaInfo.st_mtime; ++ uTimBuf[0].tv_sec = fileMetaInfo.st_atime; ++ uTimBuf[1].tv_sec = fileMetaInfo.st_mtime; + +- retVal = utime ( dstName, &uTimBuf ); ++ retVal = utimensat ( AT_FDCWD, dstName, uTimBuf , 0 ); + ERROR_IF_NOT_ZERO ( retVal ); + # endif + } diff --git a/tools/bzip2/patches/021-merge-and-improve-makefiles.patch b/tools/bzip2/patches/021-merge-and-improve-makefiles.patch new file mode 100644 index 00000000000..9d98c34bdbb --- /dev/null +++ b/tools/bzip2/patches/021-merge-and-improve-makefiles.patch @@ -0,0 +1,401 @@ +--- a/bzip2.c ++++ b/bzip2.c +@@ -54,7 +54,7 @@ + #include + #include + #include +-#include "bzlib.h" ++#include + + #define ERROR_IF_EOF(i) { if ((i) == EOF) ioError(); } + #define ERROR_IF_NOT_ZERO(i) { if ((i) != 0) ioError(); } +--- a/bzlib_private.h ++++ b/bzlib_private.h +@@ -30,7 +30,7 @@ + #include + #endif + +-#include "bzlib.h" ++#include + + + +--- a/Makefile ++++ b/Makefile +@@ -21,11 +21,38 @@ + LDFLAGS= + + BIGFILES=-D_FILE_OFFSET_BITS=64 +-CFLAGS=-Wall -Winline -O2 -g $(BIGFILES) ++CFLAGS_COMMON=-Wall -Winline -O2 -g $(BIGFILES) -I. ++CFLAGS_NOPIC=$(filter-out -O%,$(CFLAGS)) $(CFLAGS_COMMON) ++CFLAGS_PIC=$(filter-out -O%,$(CFLAGS)) -fpic -fPIC $(CFLAGS_COMMON) + + # Where you want it installed when you do 'make install' +-PREFIX=/usr/local +- ++PREFIX?=/usr/local ++ENABLE_BIN_STATIC?=1 ++ENABLE_BIN_SHARED?=1 ++ENABLE_LIB_STATIC?=1 ++ENABLE_LIB_SHARED?=1 ++ENABLE_DEV?=1 ++ENABLE_DOCS?=1 ++ENABLE_TESTS?=1 ++ ++ifeq ($(ENABLE_BIN_STATIC),1) ++ ENABLE_BIN=1 ++ ifneq ($(ENABLE_LIB_STATIC),1) ++ ENABLE_LIB_STATIC=1 ++ endif ++endif ++ifeq ($(ENABLE_BIN_SHARED),1) ++ ENABLE_BIN=1 ++ ifneq ($(ENABLE_LIB_SHARED),1) ++ ENABLE_LIB_STATIC=1 ++ endif ++endif ++ifeq ($(ENABLE_LIB_STATIC),1) ++ ENABLE_LIB=1 ++endif ++ifeq ($(ENABLE_LIB_SHARED),1) ++ ENABLE_LIB=1 ++endif + + OBJS= blocksort.o \ + huffman.o \ +@@ -35,15 +62,38 @@ + decompress.o \ + bzlib.o + +-all: libbz2.a bzip2 bzip2recover test +- +-bzip2: libbz2.a bzip2.o +- $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2 ++TGTS_all:= ++TGTS_bzip2:=bzip2.o ++TGTS_check:= ++TGTS_install:= ++ifeq ($(ENABLE_LIB),1) ++ TGTS_all+=libbz2 ++ TGTS_bzip2+=libbz2 ++endif ++ifeq ($(ENABLE_BIN),1) ++ TGTS_all+=bzip2 bzip2recover ++ TGTS_install+=bzip2 bzip2recover ++endif ++ifeq ($(ENABLE_TESTS),1) ++ TGTS_all+=test ++ TGTS_check+=test ++endif ++ ++all: $(TGTS_all) ++ ++bzip2: $(TGTS_bzip2) ++ifeq ($(ENABLE_BIN_STATIC),1) ++ $(CC) $(CFLAGS_NOPIC) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2 ++endif ++ifeq ($(ENABLE_BIN_SHARED),1) ++ $(CC) $(CFLAGS_PIC) -o bzip2-shared bzip2.o libbz2.so.1.0 ++endif + + bzip2recover: bzip2recover.o +- $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2recover bzip2recover.o ++ $(CC) $(CFLAGS_NOPIC) $(LDFLAGS) -o bzip2recover bzip2recover.o + +-libbz2.a: $(OBJS) ++libbz2: $(OBJS) ++ifeq ($(ENABLE_LIB_STATIC),1) + rm -f libbz2.a + $(AR) cq libbz2.a $(OBJS) + @if ( test -f $(RANLIB) -o -f /usr/bin/ranlib -o \ +@@ -51,8 +101,18 @@ + echo $(RANLIB) libbz2.a ; \ + $(RANLIB) libbz2.a ; \ + fi ++endif ++ifeq ($(ENABLE_LIB_SHARED),1) ++ $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 $(LDFLAGS) -o libbz2.so.1.0.8 $(OBJS) ++ rm -f libbz2.so.1.0 ++ rm -f libbz2.so.1 ++ rm -f libbz2.so ++ ln -s libbz2.so.1.0.8 libbz2.so.1.0 ++ ln -s libbz2.so.1.0 libbz2.so.1 ++ ln -s libbz2.so.1 libbz2.so ++endif + +-check: test ++check: $(TGTS_check) + test: bzip2 + @cat words1 + ./bzip2 -1 < sample1.ref > sample1.rb2 +@@ -69,69 +129,153 @@ + cmp sample3.tst sample3.ref + @cat words3 + +-install: bzip2 bzip2recover ++install: $(TGTS_install) ++ifeq ($(ENABLE_BIN),1) + if ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi ++endif ++ifeq ($(ENABLE_LIB),1) + if ( test ! -d $(PREFIX)/lib ) ; then mkdir -p $(PREFIX)/lib ; fi ++endif ++ifeq ($(ENABLE_DEV),1) ++ if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi ++endif ++ifeq ($(ENABLE_DOCS),1) + if ( test ! -d $(PREFIX)/man ) ; then mkdir -p $(PREFIX)/man ; fi + if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir -p $(PREFIX)/man/man1 ; fi +- if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi ++endif ++ifeq ($(ENABLE_BIN),1) ++ ifeq ($(ENABLE_BIN_STATIC),1) + cp -f bzip2 $(PREFIX)/bin/bzip2 +- cp -f bzip2 $(PREFIX)/bin/bunzip2 +- cp -f bzip2 $(PREFIX)/bin/bzcat ++ chmod a+rx $(PREFIX)/bin/bzip2 ++ endif ++ ifeq ($(ENABLE_BIN_SHARED),1) ++ ifeq ($(ENABLE_BIN_STATIC),1) ++ cp -f bzip2-shared $(PREFIX)/bin/bzip2-shared ++ chmod a+rx $(PREFIX)/bin/bzip2-shared ++ else ++ cp -f bzip2-shared $(PREFIX)/bin/bzip2 ++ endif ++ endif ++ rm -f $(PREFIX)/bin/bunzip2 ++ rm -f $(PREFIX)/bin/bzcat ++ ( cd $(PREFIX)/bin && ln -s bzip2 bunzip2 ) ++ ( cd $(PREFIX)/bin && ln -s bzip2 bzcat ) ++ rm -f $(PREFIX)/bin/bunzip2-shared ++ rm -f $(PREFIX)/bin/bzcat-shared ++ ifeq ($(ENABLE_BIN_SHARED),1) ++ ifeq ($(ENABLE_BIN_STATIC),1) ++ ( cd $(PREFIX)/bin && ln -s bzip2-shared bunzip2-shared ) ++ ( cd $(PREFIX)/bin && ln -s bzip2-shared bzcat-shared ) ++ endif ++ endif + cp -f bzip2recover $(PREFIX)/bin/bzip2recover +- chmod a+x $(PREFIX)/bin/bzip2 +- chmod a+x $(PREFIX)/bin/bunzip2 +- chmod a+x $(PREFIX)/bin/bzcat +- chmod a+x $(PREFIX)/bin/bzip2recover +- cp -f bzip2.1 $(PREFIX)/man/man1 +- chmod a+r $(PREFIX)/man/man1/bzip2.1 +- cp -f bzlib.h $(PREFIX)/include +- chmod a+r $(PREFIX)/include/bzlib.h +- cp -f libbz2.a $(PREFIX)/lib +- chmod a+r $(PREFIX)/lib/libbz2.a ++ chmod a+rx $(PREFIX)/bin/bzip2recover + cp -f bzgrep $(PREFIX)/bin/bzgrep +- ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzegrep +- ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzfgrep +- chmod a+x $(PREFIX)/bin/bzgrep ++ chmod a+rx $(PREFIX)/bin/bzgrep ++ rm -f $(PREFIX)/bin/bzegrep ++ rm -f $(PREFIX)/bin/bzfgrep ++ ( cd $(PREFIX)/bin && ln -s bzgrep bzegrep ) ++ ( cd $(PREFIX)/bin && ln -s bzgrep bzfgrep ) + cp -f bzmore $(PREFIX)/bin/bzmore +- ln -s -f $(PREFIX)/bin/bzmore $(PREFIX)/bin/bzless +- chmod a+x $(PREFIX)/bin/bzmore ++ chmod a+rx $(PREFIX)/bin/bzmore ++ rm -f $(PREFIX)/bin/bzless ++ ( cd $(PREFIX)/bin && ln -s bzmore bzless ) ++ rm -f $(PREFIX)/bin/bzcmp + cp -f bzdiff $(PREFIX)/bin/bzdiff +- ln -s -f $(PREFIX)/bin/bzdiff $(PREFIX)/bin/bzcmp +- chmod a+x $(PREFIX)/bin/bzdiff +- cp -f bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1 +- chmod a+r $(PREFIX)/man/man1/bzgrep.1 +- chmod a+r $(PREFIX)/man/man1/bzmore.1 +- chmod a+r $(PREFIX)/man/man1/bzdiff.1 ++ chmod a+rx $(PREFIX)/bin/bzdiff ++ ( cd $(PREFIX)/bin && ln -s bzdiff bzcmp ) ++endif ++ifeq ($(ENABLE_DEV),1) ++ cp -f bzlib.h $(PREFIX)/include ++ chmod a+r $(PREFIX)/include/bzlib.h ++endif ++ifeq ($(ENABLE_DOCS),1) ++ cp -f bzip2.1 bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1 + echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzegrep.1 + echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzfgrep.1 + echo ".so man1/bzmore.1" > $(PREFIX)/man/man1/bzless.1 + echo ".so man1/bzdiff.1" > $(PREFIX)/man/man1/bzcmp.1 ++ chmod a+r $(PREFIX)/man/man1/bzip2.1 ++ chmod a+r $(PREFIX)/man/man1/bzgrep.1 ++ chmod a+r $(PREFIX)/man/man1/bzmore.1 ++ chmod a+r $(PREFIX)/man/man1/bzdiff.1 ++ chmod a+r $(PREFIX)/man/man1/bzegrep.1 ++ chmod a+r $(PREFIX)/man/man1/bzfgrep.1 ++ chmod a+r $(PREFIX)/man/man1/bzless.1 ++ chmod a+r $(PREFIX)/man/man1/bzcmp.1 ++endif ++ifeq ($(ENABLE_LIB_SHARED),1) ++ cp -f libbz2.so.1.0.8 $(PREFIX)/lib ++ chmod a+r $(PREFIX)/lib/libbz2.so.1.0.8 ++ rm -f $(PREFIX)/lib/libbz2.so.1.0 ++ rm -f $(PREFIX)/lib/libbz2.so.1 ++ rm -f $(PREFIX)/lib/libbz2.so ++ ( cd $(PREFIX)/lib && ln -s libbz2.so.1.0.8 libbz2.so.1.0 ) ++ ( cd $(PREFIX)/lib && ln -s libbz2.so.1.0 libbz2.so.1 ) ++ ( cd $(PREFIX)/lib && ln -s libbz2.so.1 libbz2.so ) ++endif ++ifeq ($(ENABLE_LIB_STATIC),1) ++ cp -f libbz2.a $(PREFIX)/lib ++ chmod a+r $(PREFIX)/lib/libbz2.a ++endif ++ ++uninstall: ++ rm -f $(PREFIX)/bin/bzip2 ++ rm -f $(PREFIX)/bin/bzip2-shared ++ rm -f $(PREFIX)/bin/bunzip2 ++ rm -f $(PREFIX)/bin/bzcat ++ rm -f $(PREFIX)/bin/bunzip2-shared ++ rm -f $(PREFIX)/bin/bzcat-shared ++ rm -f $(PREFIX)/bin/bzip2recover ++ rm -f $(PREFIX)/bin/bzgrep ++ rm -f $(PREFIX)/bin/bzegrep ++ rm -f $(PREFIX)/bin/bzfgrep ++ rm -f $(PREFIX)/bin/bzmore ++ rm -f $(PREFIX)/bin/bzless ++ rm -f $(PREFIX)/bin/bzdiff ++ rm -f $(PREFIX)/bin/bzcmp ++ rm -f $(PREFIX)/include/bzlib.h ++ rm -f $(PREFIX)/lib/libbz2.so.1.0.8 ++ rm -f $(PREFIX)/lib/libbz2.so.1.0 ++ rm -f $(PREFIX)/lib/libbz2.so.1 ++ rm -f $(PREFIX)/lib/libbz2.so ++ rm -f $(PREFIX)/lib/libbz2.a ++ rm -f $(PREFIX)/man/man1/bzip2.1 ++ rm -f $(PREFIX)/man/man1/bzgrep.1 ++ rm -f $(PREFIX)/man/man1/bzmore.1 ++ rm -f $(PREFIX)/man/man1/bzdiff.1 ++ rm -f $(PREFIX)/man/man1/bzegrep.1 ++ rm -f $(PREFIX)/man/man1/bzfgrep.1 ++ rm -f $(PREFIX)/man/man1/bzless.1 ++ rm -f $(PREFIX)/man/man1/bzcmp.1 ++ (rmdir $(PREFIX)/bin $(PREFIX)/include $(PREFIX)/lib $(PREFIX)/man/man1 $(PREFIX)/man || true ) 2> /dev/null + + clean: +- rm -f *.o libbz2.a bzip2 bzip2recover \ ++ rm -f $(OBJS) bzip2.o \ ++ libbz2.so.1.0.8 libbz2.so.1.0 libbz2.so.1 libbz2.so \ ++ libbz2.a bzip2 bzip2-shared bzip2recover \ + sample1.rb2 sample2.rb2 sample3.rb2 \ + sample1.tst sample2.tst sample3.tst + + blocksort.o: blocksort.c + @cat words0 +- $(CC) $(CFLAGS) -c blocksort.c ++ $(CC) $(CFLAGS_NOPIC) -c blocksort.c + huffman.o: huffman.c +- $(CC) $(CFLAGS) -c huffman.c ++ $(CC) $(CFLAGS_NOPIC) -c huffman.c + crctable.o: crctable.c +- $(CC) $(CFLAGS) -c crctable.c ++ $(CC) $(CFLAGS_NOPIC) -c crctable.c + randtable.o: randtable.c +- $(CC) $(CFLAGS) -c randtable.c ++ $(CC) $(CFLAGS_NOPIC) -c randtable.c + compress.o: compress.c +- $(CC) $(CFLAGS) -c compress.c ++ $(CC) $(CFLAGS_NOPIC) -c compress.c + decompress.o: decompress.c +- $(CC) $(CFLAGS) -c decompress.c ++ $(CC) $(CFLAGS_NOPIC) -c decompress.c + bzlib.o: bzlib.c +- $(CC) $(CFLAGS) -c bzlib.c ++ $(CC) $(CFLAGS_NOPIC) -c bzlib.c + bzip2.o: bzip2.c +- $(CC) $(CFLAGS) -c bzip2.c ++ $(CC) $(CFLAGS_NOPIC) -c bzip2.c + bzip2recover.o: bzip2recover.c +- $(CC) $(CFLAGS) -c bzip2recover.c ++ $(CC) $(CFLAGS_NOPIC) -c bzip2recover.c + + + distclean: clean +@@ -189,7 +333,6 @@ + $(DISTNAME)/bzmore.1 \ + $(DISTNAME)/bzgrep \ + $(DISTNAME)/bzgrep.1 \ +- $(DISTNAME)/Makefile-libbz2_so \ + $(DISTNAME)/bz-common.xsl \ + $(DISTNAME)/bz-fo.xsl \ + $(DISTNAME)/bz-html.xsl \ +--- a/Makefile-libbz2_so ++++ b/Makefile-libbz2_so +@@ -1,59 +0,0 @@ +- +-# This Makefile builds a shared version of the library, +-# libbz2.so.1.0.8, with soname libbz2.so.1.0, +-# at least on x86-Linux (RedHat 7.2), +-# with gcc-2.96 20000731 (Red Hat Linux 7.1 2.96-98). +-# Please see the README file for some important info +-# about building the library like this. +- +-# ------------------------------------------------------------------ +-# This file is part of bzip2/libbzip2, a program and library for +-# lossless, block-sorting data compression. +-# +-# bzip2/libbzip2 version 1.0.8 of 13 July 2019 +-# Copyright (C) 1996-2019 Julian Seward +-# +-# Please read the WARNING, DISCLAIMER and PATENTS sections in the +-# README file. +-# +-# This program is released under the terms of the license contained +-# in the file LICENSE. +-# ------------------------------------------------------------------ +- +- +-SHELL=/bin/sh +-CC=gcc +-BIGFILES=-D_FILE_OFFSET_BITS=64 +-CFLAGS=-fpic -fPIC -Wall -Winline -O2 -g $(BIGFILES) +- +-OBJS= blocksort.o \ +- huffman.o \ +- crctable.o \ +- randtable.o \ +- compress.o \ +- decompress.o \ +- bzlib.o +- +-all: $(OBJS) +- $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.8 $(OBJS) +- $(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.so.1.0.8 +- rm -f libbz2.so.1.0 +- ln -s libbz2.so.1.0.8 libbz2.so.1.0 +- +-clean: +- rm -f $(OBJS) bzip2.o libbz2.so.1.0.8 libbz2.so.1.0 bzip2-shared +- +-blocksort.o: blocksort.c +- $(CC) $(CFLAGS) -c blocksort.c +-huffman.o: huffman.c +- $(CC) $(CFLAGS) -c huffman.c +-crctable.o: crctable.c +- $(CC) $(CFLAGS) -c crctable.c +-randtable.o: randtable.c +- $(CC) $(CFLAGS) -c randtable.c +-compress.o: compress.c +- $(CC) $(CFLAGS) -c compress.c +-decompress.o: decompress.c +- $(CC) $(CFLAGS) -c decompress.c +-bzlib.o: bzlib.c +- $(CC) $(CFLAGS) -c bzlib.c +--- a/unzcrash.c ++++ b/unzcrash.c +@@ -30,7 +30,7 @@ + + #include + #include +-#include "bzlib.h" ++#include + + #define M_BLOCK 1000000 + From 69bc620180d2ec670e7a936171262fc3e9e99179 Mon Sep 17 00:00:00 2001 From: Tony Butler Date: Mon, 17 Apr 2023 19:28:36 -0700 Subject: [PATCH 15/19] build: fix incorrect initramfs bzip2 compression Requires: tools/bzip2 fix consistency of executable to use `$(STAGING_DIR_HOST)/bin/bzip2`, and not system-installed ones from the usual environment `PATH`; this affects option `CONFIG_KERNEL_INITRAMFS_COMPRESSION_BZIP2` this may have worked in the past but only via side effect of having the binaries on the host system (and whatever unpredictable version or patchset those might be) Fixes: 330bd380e8b6 ("image: allow building FIT and uImage with ramdisk") Signed-off-by: Tony Butler --- include/kernel-defaults.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/kernel-defaults.mk b/include/kernel-defaults.mk index 37c11411395..c1976ee6c74 100644 --- a/include/kernel-defaults.mk +++ b/include/kernel-defaults.mk @@ -177,7 +177,7 @@ else ( cd $(TARGET_DIR); find . | LC_ALL=C sort | $(STAGING_DIR_HOST)/bin/cpio --reproducible -o -H newc -R 0:0 > $(KERNEL_BUILD_DIR)/initrd.cpio ) endif $(if $(SOURCE_DATE_EPOCH),touch -hcd "@$(SOURCE_DATE_EPOCH)" $(KERNEL_BUILD_DIR)/initrd.cpio) - $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_BZIP2),bzip2 -9 -c < $(KERNEL_BUILD_DIR)/initrd.cpio > $(KERNEL_BUILD_DIR)/initrd.cpio.bzip2) + $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_BZIP2),$(STAGING_DIR_HOST)/bin/bzip2 -9 -c < $(KERNEL_BUILD_DIR)/initrd.cpio > $(KERNEL_BUILD_DIR)/initrd.cpio.bzip2) $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_GZIP),gzip -n -f -S .gzip -9n $(KERNEL_BUILD_DIR)/initrd.cpio) $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZ4),$(STAGING_DIR_HOST)/bin/lz4c -l -c1 -fz --favor-decSpeed $(KERNEL_BUILD_DIR)/initrd.cpio) $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZMA),$(STAGING_DIR_HOST)/bin/lzma e -lc1 -lp2 -pb2 $(KERNEL_BUILD_DIR)/initrd.cpio $(KERNEL_BUILD_DIR)/initrd.cpio.lzma) From 4ab4b9ea818d24b66df146ef1c34ea7e9096b775 Mon Sep 17 00:00:00 2001 From: Tony Butler Date: Mon, 17 Apr 2023 19:32:18 -0700 Subject: [PATCH 16/19] build: fix incorrect initramfs gzip compression Requires: tools/libdeflate fix consistency of executable to use `$(STAGING_DIR_HOST)/bin/libdeflate-gzip`, and not system-installed ones from the usual environment `PATH`; this affects option `CONFIG_KERNEL_INITRAMFS_COMPRESSION_GZIP` this may have worked in the past but only via side effect of having the binaries on the host system (and whatever unpredictable version or patchset those might be), and did not use the improved but totally compatible libdeflate-gzip Fixes: 330bd380e8b6 ("image: allow building FIT and uImage with ramdisk") Signed-off-by: Tony Butler --- include/kernel-defaults.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/kernel-defaults.mk b/include/kernel-defaults.mk index c1976ee6c74..4029dad7387 100644 --- a/include/kernel-defaults.mk +++ b/include/kernel-defaults.mk @@ -178,7 +178,7 @@ else endif $(if $(SOURCE_DATE_EPOCH),touch -hcd "@$(SOURCE_DATE_EPOCH)" $(KERNEL_BUILD_DIR)/initrd.cpio) $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_BZIP2),$(STAGING_DIR_HOST)/bin/bzip2 -9 -c < $(KERNEL_BUILD_DIR)/initrd.cpio > $(KERNEL_BUILD_DIR)/initrd.cpio.bzip2) - $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_GZIP),gzip -n -f -S .gzip -9n $(KERNEL_BUILD_DIR)/initrd.cpio) + $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_GZIP),$(STAGING_DIR_HOST)/bin/libdeflate-gzip -n -f -S .gzip -12 $(KERNEL_BUILD_DIR)/initrd.cpio) $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZ4),$(STAGING_DIR_HOST)/bin/lz4c -l -c1 -fz --favor-decSpeed $(KERNEL_BUILD_DIR)/initrd.cpio) $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZMA),$(STAGING_DIR_HOST)/bin/lzma e -lc1 -lp2 -pb2 $(KERNEL_BUILD_DIR)/initrd.cpio $(KERNEL_BUILD_DIR)/initrd.cpio.lzma) $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZO),$(STAGING_DIR_HOST)/bin/lzop -9 -f $(KERNEL_BUILD_DIR)/initrd.cpio) From f7f47b1369917273b5a21a9fbacfaea80c60c16d Mon Sep 17 00:00:00 2001 From: Robert Marko Date: Tue, 18 Apr 2023 10:35:47 +0200 Subject: [PATCH 17/19] mac80211: ath11k: replace 160MHz fix with upstream pending one QCA has finally sent a proper fixup for the 160MHz regression upstream, so lets use the pending fix which also properly sets center frequency 2 in case 80+80 MHz is used. Signed-off-by: Robert Marko --- ...emove-disabling-of-80-80-and-160-MHz.patch | 130 ++++++++++++++++++ ...4-wifi-ath11k-restore-160MHz-support.patch | 29 ---- ...tersection-support-for-regulatory-ru.patch | 4 +- 3 files changed, 132 insertions(+), 31 deletions(-) create mode 100644 package/kernel/mac80211/patches/ath11k/101-wifi-ath11k-Remove-disabling-of-80-80-and-160-MHz.patch delete mode 100644 package/kernel/mac80211/patches/ath11k/904-wifi-ath11k-restore-160MHz-support.patch diff --git a/package/kernel/mac80211/patches/ath11k/101-wifi-ath11k-Remove-disabling-of-80-80-and-160-MHz.patch b/package/kernel/mac80211/patches/ath11k/101-wifi-ath11k-Remove-disabling-of-80-80-and-160-MHz.patch new file mode 100644 index 00000000000..6fcd76b1a7a --- /dev/null +++ b/package/kernel/mac80211/patches/ath11k/101-wifi-ath11k-Remove-disabling-of-80-80-and-160-MHz.patch @@ -0,0 +1,130 @@ +From patchwork Mon Apr 17 20:22:27 2023 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Muna Sinada +X-Patchwork-Id: 13214540 +X-Patchwork-Delegate: kvalo@adurom.com +Return-Path: +X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on + aws-us-west-2-korg-lkml-1.web.codeaurora.org +Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) + by smtp.lore.kernel.org (Postfix) with ESMTP id 8C359C77B76 + for ; + Mon, 17 Apr 2023 20:26:40 +0000 (UTC) +Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand + id S230070AbjDQU0j (ORCPT + ); + Mon, 17 Apr 2023 16:26:39 -0400 +Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53306 "EHLO + lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org + with ESMTP id S229914AbjDQU0h (ORCPT + ); + Mon, 17 Apr 2023 16:26:37 -0400 +Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com + [205.220.180.131]) + by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 67CE24C33 + for ; + Mon, 17 Apr 2023 13:26:24 -0700 (PDT) +Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) + by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id + 33HIsf5q010173; + Mon, 17 Apr 2023 20:22:47 GMT +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; + h=from : to : cc : + subject : date : message-id : mime-version : content-type; s=qcppdkim1; + bh=FGtbeAR6pG0KxyEKVLIRzkq1RXlKfaVfRT1iixzMcII=; + b=jSdZBeFj4RAdCiUPrL/F9n+ufnpxT1pJNfZuA0tfEnUf54SCGUuHT5LtRdojYVh31YSS + aAGDRFvl7tIKqq/c6h4tm7SDdlhWF+MU3sH1YJNrwDeMAUZD+RnviJjo+GfgnEtp9+z7 + PA75vGkpKiuMh6M8QFYB+/XxrJmx/XJBNESfMdAjBuMXnQf4S2yJ/IMwSxPkYKMU3lC6 + DNnUAcgC/8wawYt8T1d8gKWq5CgWls4i1quveZghsbGUuL01i7SRXdKVianDJJsHEa0G + /brUp6LMMeJUgEI8wBfFAtcknzN0ADMVEqsJr+AHvQXnb1iHZyafl6BAeupXNS+Yi+fJ sw== +Received: from nalasppmta05.qualcomm.com (Global_NAT1.qualcomm.com + [129.46.96.20]) + by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3q171gh1hb-1 + (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 + verify=NOT); + Mon, 17 Apr 2023 20:22:47 +0000 +Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com + [10.47.209.196]) + by NALASPPMTA05.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id + 33HKMjHs007640 + (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 + verify=NOT); + Mon, 17 Apr 2023 20:22:46 GMT +Received: from msinada-linux.qualcomm.com (10.80.80.8) by + nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server + (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id + 15.2.986.42; Mon, 17 Apr 2023 13:22:44 -0700 +From: Muna Sinada +To: +CC: , + Muna Sinada , + P Praneesh +Subject: [PATCH] wifi: ath11k: Remove disabling of 80+80 and 160 MHz +Date: Mon, 17 Apr 2023 13:22:27 -0700 +Message-ID: <1681762947-13882-1-git-send-email-quic_msinada@quicinc.com> +X-Mailer: git-send-email 2.7.4 +MIME-Version: 1.0 +X-Originating-IP: [10.80.80.8] +X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To + nalasex01a.na.qualcomm.com (10.47.209.196) +X-QCInternal: smtphost +X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 + signatures=585085 +X-Proofpoint-GUID: wqGG1zw0KpXNYk_yFYb16HwLWt9V-6o4 +X-Proofpoint-ORIG-GUID: wqGG1zw0KpXNYk_yFYb16HwLWt9V-6o4 +X-Proofpoint-Virus-Version: vendor=baseguard + engine=ICAP:2.0.254,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 + definitions=2023-04-17_13,2023-04-17_01,2023-02-09_01 +X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 + priorityscore=1501 mlxscore=0 + mlxlogscore=796 suspectscore=0 impostorscore=0 bulkscore=0 spamscore=0 + clxscore=1015 phishscore=0 lowpriorityscore=0 malwarescore=0 adultscore=0 + classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 + definitions=main-2304170181 +Precedence: bulk +List-ID: +X-Mailing-List: linux-wireless@vger.kernel.org + +This is a regression fix for 80+80 and 160 MHz support bits being +cleared, therefore not adverised. Remove disable of 80+80 and 160 MHz +capability flags and assign valid center frequency 2 similar to +VHT80_80. + +Fixes: 38dfe775d0ab ("wifi: ath11k: push MU-MIMO params from hostapd to hardware") +Reported-by: Robert Marko +Link: https://bugzilla.kernel.org/show_bug.cgi?id=217299 +Co-developed-by: P Praneesh +Signed-off-by: P Praneesh +Signed-off-by: Muna Sinada +--- + drivers/net/wireless/ath/ath11k/mac.c | 4 ---- + drivers/net/wireless/ath/ath11k/wmi.c | 3 ++- + 2 files changed, 2 insertions(+), 5 deletions(-) + +--- a/drivers/net/wireless/ath/ath11k/mac.c ++++ b/drivers/net/wireless/ath/ath11k/mac.c +@@ -5585,10 +5585,6 @@ static int ath11k_mac_copy_he_cap(struct + + he_cap_elem->mac_cap_info[1] &= + IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_MASK; +- he_cap_elem->phy_cap_info[0] &= +- ~IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G; +- he_cap_elem->phy_cap_info[0] &= +- ~IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G; + + he_cap_elem->phy_cap_info[5] &= + ~IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK; +--- a/drivers/net/wireless/ath/ath11k/wmi.c ++++ b/drivers/net/wireless/ath/ath11k/wmi.c +@@ -871,7 +871,8 @@ static void ath11k_wmi_put_wmi_channel(s + + chan->band_center_freq2 = arg->channel.band_center_freq1; + +- } else if (arg->channel.mode == MODE_11AC_VHT80_80) { ++ } else if ((arg->channel.mode == MODE_11AC_VHT80_80) || ++ (arg->channel.mode == MODE_11AX_HE80_80)) { + chan->band_center_freq2 = arg->channel.band_center_freq2; + } else { + chan->band_center_freq2 = 0; diff --git a/package/kernel/mac80211/patches/ath11k/904-wifi-ath11k-restore-160MHz-support.patch b/package/kernel/mac80211/patches/ath11k/904-wifi-ath11k-restore-160MHz-support.patch deleted file mode 100644 index b5d94735975..00000000000 --- a/package/kernel/mac80211/patches/ath11k/904-wifi-ath11k-restore-160MHz-support.patch +++ /dev/null @@ -1,29 +0,0 @@ -From e0edb3ac33694ab6a2705f7b053948a926520d81 Mon Sep 17 00:00:00 2001 -From: Robert Marko -Date: Tue, 28 Mar 2023 13:30:30 +0200 -Subject: [PATCH] wifi: ath11k: restore 160MHz support - -The blamed commit started clearing 80+80 and 160MHz support flags for 5G. -This is preventing those modes from being advertised and thus used causing -a regression, so until this is properly sorted out lets remove the flag -clearing to restore 160MHz support. - -Fixes: 38dfe775d0ab ("wifi: ath11k: push MU-MIMO params from hostapd to hardware") -Signed-off-by: Robert Marko ---- - drivers/net/wireless/ath/ath11k/mac.c | 4 ---- - 1 file changed, 4 deletions(-) - ---- a/drivers/net/wireless/ath/ath11k/mac.c -+++ b/drivers/net/wireless/ath/ath11k/mac.c -@@ -5585,10 +5585,6 @@ static int ath11k_mac_copy_he_cap(struct - - he_cap_elem->mac_cap_info[1] &= - IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_MASK; -- he_cap_elem->phy_cap_info[0] &= -- ~IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G; -- he_cap_elem->phy_cap_info[0] &= -- ~IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G; - - he_cap_elem->phy_cap_info[5] &= - ~IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK; diff --git a/package/kernel/mac80211/patches/ath11k/905-ath11k-remove-intersection-support-for-regulatory-ru.patch b/package/kernel/mac80211/patches/ath11k/905-ath11k-remove-intersection-support-for-regulatory-ru.patch index 18e1b8a8ce9..40dc9d56f79 100644 --- a/package/kernel/mac80211/patches/ath11k/905-ath11k-remove-intersection-support-for-regulatory-ru.patch +++ b/package/kernel/mac80211/patches/ath11k/905-ath11k-remove-intersection-support-for-regulatory-ru.patch @@ -271,7 +271,7 @@ Signed-off-by: Aditya Kumar Singh #endif --- a/drivers/net/wireless/ath/ath11k/wmi.c +++ b/drivers/net/wireless/ath/ath11k/wmi.c -@@ -6979,24 +6979,12 @@ static void ath11k_wmi_htc_tx_complete(s +@@ -6980,24 +6980,12 @@ static void ath11k_wmi_htc_tx_complete(s wake_up(&wmi->tx_ce_desc_wq); } @@ -296,7 +296,7 @@ Signed-off-by: Aditya Kumar Singh int ret = 0, pdev_idx, i, j; struct ath11k *ar; -@@ -7058,17 +7046,7 @@ static int ath11k_reg_chan_list_event(st +@@ -7059,17 +7047,7 @@ static int ath11k_reg_chan_list_event(st (char *)reg_info->alpha2, 2)) goto mem_free; From b691362d1dbe2c07e83c3e703f093dfd8e14145c Mon Sep 17 00:00:00 2001 From: Christian Marangi Date: Tue, 18 Apr 2023 15:22:48 +0200 Subject: [PATCH 18/19] Revert "tools/bzip2: add `bzip2` binaries" This reverts commit 394d7134ec42f14ddb91769c737098753fa68266. The commit has unintentded change that cause compilation error with SDK or LZO compression. Signed-off-by: Christian Marangi --- tools/Makefile | 5 +- tools/bzip2/Makefile | 52 --- tools/bzip2/patches/020-no-utime.patch | 27 -- .../021-merge-and-improve-makefiles.patch | 401 ------------------ 4 files changed, 1 insertion(+), 484 deletions(-) delete mode 100644 tools/bzip2/Makefile delete mode 100644 tools/bzip2/patches/020-no-utime.patch delete mode 100644 tools/bzip2/patches/021-merge-and-improve-makefiles.patch diff --git a/tools/Makefile b/tools/Makefile index 251ca2c4607..bdd9f0a2570 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -20,9 +20,6 @@ endif ifneq ($(CONFIG_SDK)$(CONFIG_PACKAGE_kmod-b43)$(CONFIG_BRCMSMAC_USE_FW_FROM_WL),) BUILD_B43_TOOLS = y endif -ifneq ($(CONFIG_SDK)$(CONFIG_TARGET_INITRAMFS_COMPRESSION_BZIP2),) - BUILD_BZIP2_TOOLS = y -endif ifneq ($(CONFIG_SDK)$(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZ4),) BUILD_LZ4_TOOLS = y endif @@ -67,8 +64,8 @@ tools-y += sstrip tools-y += zip tools-y += zlib tools-y += zstd +tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS),y) += liblzo tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_B43_TOOLS),y) += b43-tools -tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_BZIP2_TOOLS),y) += bzip2 tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_ISL),y) += isl tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_LZ4_TOOLS),y) += lz4 tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_LZO_TOOLS),y) += lzop diff --git a/tools/bzip2/Makefile b/tools/bzip2/Makefile deleted file mode 100644 index 0c5a92849ad..00000000000 --- a/tools/bzip2/Makefile +++ /dev/null @@ -1,52 +0,0 @@ -# -# Copyright (C) 2022 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=bzip2 -PKG_VERSION:=1.0.8 -PKG_RELEASE:=1 - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://sourceware.org/pub/bzip2 -PKG_HASH:=ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269 - -PKG_LICENSE:=bzip2-1.0.8 -PKG_LICENSE_FILES:=LICENSE -PKG_CPE_ID:=cpe:/a:bzip:bzip2 - -HOST_BUILD_PARALLEL:=1 - -include $(INCLUDE_DIR)/host-build.mk - -HOSTCC := $(HOSTCC_NOCACHE) -HOST_CFLAGS += $(HOST_FPIC) - -HOST_MAKE_FLAGS+= \ - CFLAGS="$(HOST_CFLAGS)" \ - LDFLAGS="$(HOST_LDFLAGS)" \ - ENABLE_BIN_SHARED=1 \ - ENABLE_BIN_STATIC=0 \ - ENABLE_LIB_SHARED=1 \ - ENABLE_LIB_STATIC=1 \ - ENABLE_DEV=1 \ - ENABLE_DOCS=1 \ - ENABLE_TESTS=0 \ - PREFIX="$(HOST_BUILD_PREFIX)" - -define Host/Configure -endef - -define Host/Uninstall - $(call Host/Compile/Default,uninstall) - $(call Host/Compile/Default,clean) -endef - -define Host/Clean -endef - -$(eval $(call HostBuild)) diff --git a/tools/bzip2/patches/020-no-utime.patch b/tools/bzip2/patches/020-no-utime.patch deleted file mode 100644 index d0cd4f0e35e..00000000000 --- a/tools/bzip2/patches/020-no-utime.patch +++ /dev/null @@ -1,27 +0,0 @@ ---- a/bzip2.c -+++ b/bzip2.c -@@ -69,7 +69,6 @@ - #if BZ_UNIX - # include - # include --# include - # include - # include - # include -@@ -1051,12 +1050,12 @@ void applySavedTimeInfoToOutputFile ( Ch - { - # if BZ_UNIX - IntNative retVal; -- struct utimbuf uTimBuf; -+ struct timespec uTimBuf[2] = {}; - -- uTimBuf.actime = fileMetaInfo.st_atime; -- uTimBuf.modtime = fileMetaInfo.st_mtime; -+ uTimBuf[0].tv_sec = fileMetaInfo.st_atime; -+ uTimBuf[1].tv_sec = fileMetaInfo.st_mtime; - -- retVal = utime ( dstName, &uTimBuf ); -+ retVal = utimensat ( AT_FDCWD, dstName, uTimBuf , 0 ); - ERROR_IF_NOT_ZERO ( retVal ); - # endif - } diff --git a/tools/bzip2/patches/021-merge-and-improve-makefiles.patch b/tools/bzip2/patches/021-merge-and-improve-makefiles.patch deleted file mode 100644 index 9d98c34bdbb..00000000000 --- a/tools/bzip2/patches/021-merge-and-improve-makefiles.patch +++ /dev/null @@ -1,401 +0,0 @@ ---- a/bzip2.c -+++ b/bzip2.c -@@ -54,7 +54,7 @@ - #include - #include - #include --#include "bzlib.h" -+#include - - #define ERROR_IF_EOF(i) { if ((i) == EOF) ioError(); } - #define ERROR_IF_NOT_ZERO(i) { if ((i) != 0) ioError(); } ---- a/bzlib_private.h -+++ b/bzlib_private.h -@@ -30,7 +30,7 @@ - #include - #endif - --#include "bzlib.h" -+#include - - - ---- a/Makefile -+++ b/Makefile -@@ -21,11 +21,38 @@ - LDFLAGS= - - BIGFILES=-D_FILE_OFFSET_BITS=64 --CFLAGS=-Wall -Winline -O2 -g $(BIGFILES) -+CFLAGS_COMMON=-Wall -Winline -O2 -g $(BIGFILES) -I. -+CFLAGS_NOPIC=$(filter-out -O%,$(CFLAGS)) $(CFLAGS_COMMON) -+CFLAGS_PIC=$(filter-out -O%,$(CFLAGS)) -fpic -fPIC $(CFLAGS_COMMON) - - # Where you want it installed when you do 'make install' --PREFIX=/usr/local -- -+PREFIX?=/usr/local -+ENABLE_BIN_STATIC?=1 -+ENABLE_BIN_SHARED?=1 -+ENABLE_LIB_STATIC?=1 -+ENABLE_LIB_SHARED?=1 -+ENABLE_DEV?=1 -+ENABLE_DOCS?=1 -+ENABLE_TESTS?=1 -+ -+ifeq ($(ENABLE_BIN_STATIC),1) -+ ENABLE_BIN=1 -+ ifneq ($(ENABLE_LIB_STATIC),1) -+ ENABLE_LIB_STATIC=1 -+ endif -+endif -+ifeq ($(ENABLE_BIN_SHARED),1) -+ ENABLE_BIN=1 -+ ifneq ($(ENABLE_LIB_SHARED),1) -+ ENABLE_LIB_STATIC=1 -+ endif -+endif -+ifeq ($(ENABLE_LIB_STATIC),1) -+ ENABLE_LIB=1 -+endif -+ifeq ($(ENABLE_LIB_SHARED),1) -+ ENABLE_LIB=1 -+endif - - OBJS= blocksort.o \ - huffman.o \ -@@ -35,15 +62,38 @@ - decompress.o \ - bzlib.o - --all: libbz2.a bzip2 bzip2recover test -- --bzip2: libbz2.a bzip2.o -- $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2 -+TGTS_all:= -+TGTS_bzip2:=bzip2.o -+TGTS_check:= -+TGTS_install:= -+ifeq ($(ENABLE_LIB),1) -+ TGTS_all+=libbz2 -+ TGTS_bzip2+=libbz2 -+endif -+ifeq ($(ENABLE_BIN),1) -+ TGTS_all+=bzip2 bzip2recover -+ TGTS_install+=bzip2 bzip2recover -+endif -+ifeq ($(ENABLE_TESTS),1) -+ TGTS_all+=test -+ TGTS_check+=test -+endif -+ -+all: $(TGTS_all) -+ -+bzip2: $(TGTS_bzip2) -+ifeq ($(ENABLE_BIN_STATIC),1) -+ $(CC) $(CFLAGS_NOPIC) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2 -+endif -+ifeq ($(ENABLE_BIN_SHARED),1) -+ $(CC) $(CFLAGS_PIC) -o bzip2-shared bzip2.o libbz2.so.1.0 -+endif - - bzip2recover: bzip2recover.o -- $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2recover bzip2recover.o -+ $(CC) $(CFLAGS_NOPIC) $(LDFLAGS) -o bzip2recover bzip2recover.o - --libbz2.a: $(OBJS) -+libbz2: $(OBJS) -+ifeq ($(ENABLE_LIB_STATIC),1) - rm -f libbz2.a - $(AR) cq libbz2.a $(OBJS) - @if ( test -f $(RANLIB) -o -f /usr/bin/ranlib -o \ -@@ -51,8 +101,18 @@ - echo $(RANLIB) libbz2.a ; \ - $(RANLIB) libbz2.a ; \ - fi -+endif -+ifeq ($(ENABLE_LIB_SHARED),1) -+ $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 $(LDFLAGS) -o libbz2.so.1.0.8 $(OBJS) -+ rm -f libbz2.so.1.0 -+ rm -f libbz2.so.1 -+ rm -f libbz2.so -+ ln -s libbz2.so.1.0.8 libbz2.so.1.0 -+ ln -s libbz2.so.1.0 libbz2.so.1 -+ ln -s libbz2.so.1 libbz2.so -+endif - --check: test -+check: $(TGTS_check) - test: bzip2 - @cat words1 - ./bzip2 -1 < sample1.ref > sample1.rb2 -@@ -69,69 +129,153 @@ - cmp sample3.tst sample3.ref - @cat words3 - --install: bzip2 bzip2recover -+install: $(TGTS_install) -+ifeq ($(ENABLE_BIN),1) - if ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi -+endif -+ifeq ($(ENABLE_LIB),1) - if ( test ! -d $(PREFIX)/lib ) ; then mkdir -p $(PREFIX)/lib ; fi -+endif -+ifeq ($(ENABLE_DEV),1) -+ if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi -+endif -+ifeq ($(ENABLE_DOCS),1) - if ( test ! -d $(PREFIX)/man ) ; then mkdir -p $(PREFIX)/man ; fi - if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir -p $(PREFIX)/man/man1 ; fi -- if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi -+endif -+ifeq ($(ENABLE_BIN),1) -+ ifeq ($(ENABLE_BIN_STATIC),1) - cp -f bzip2 $(PREFIX)/bin/bzip2 -- cp -f bzip2 $(PREFIX)/bin/bunzip2 -- cp -f bzip2 $(PREFIX)/bin/bzcat -+ chmod a+rx $(PREFIX)/bin/bzip2 -+ endif -+ ifeq ($(ENABLE_BIN_SHARED),1) -+ ifeq ($(ENABLE_BIN_STATIC),1) -+ cp -f bzip2-shared $(PREFIX)/bin/bzip2-shared -+ chmod a+rx $(PREFIX)/bin/bzip2-shared -+ else -+ cp -f bzip2-shared $(PREFIX)/bin/bzip2 -+ endif -+ endif -+ rm -f $(PREFIX)/bin/bunzip2 -+ rm -f $(PREFIX)/bin/bzcat -+ ( cd $(PREFIX)/bin && ln -s bzip2 bunzip2 ) -+ ( cd $(PREFIX)/bin && ln -s bzip2 bzcat ) -+ rm -f $(PREFIX)/bin/bunzip2-shared -+ rm -f $(PREFIX)/bin/bzcat-shared -+ ifeq ($(ENABLE_BIN_SHARED),1) -+ ifeq ($(ENABLE_BIN_STATIC),1) -+ ( cd $(PREFIX)/bin && ln -s bzip2-shared bunzip2-shared ) -+ ( cd $(PREFIX)/bin && ln -s bzip2-shared bzcat-shared ) -+ endif -+ endif - cp -f bzip2recover $(PREFIX)/bin/bzip2recover -- chmod a+x $(PREFIX)/bin/bzip2 -- chmod a+x $(PREFIX)/bin/bunzip2 -- chmod a+x $(PREFIX)/bin/bzcat -- chmod a+x $(PREFIX)/bin/bzip2recover -- cp -f bzip2.1 $(PREFIX)/man/man1 -- chmod a+r $(PREFIX)/man/man1/bzip2.1 -- cp -f bzlib.h $(PREFIX)/include -- chmod a+r $(PREFIX)/include/bzlib.h -- cp -f libbz2.a $(PREFIX)/lib -- chmod a+r $(PREFIX)/lib/libbz2.a -+ chmod a+rx $(PREFIX)/bin/bzip2recover - cp -f bzgrep $(PREFIX)/bin/bzgrep -- ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzegrep -- ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzfgrep -- chmod a+x $(PREFIX)/bin/bzgrep -+ chmod a+rx $(PREFIX)/bin/bzgrep -+ rm -f $(PREFIX)/bin/bzegrep -+ rm -f $(PREFIX)/bin/bzfgrep -+ ( cd $(PREFIX)/bin && ln -s bzgrep bzegrep ) -+ ( cd $(PREFIX)/bin && ln -s bzgrep bzfgrep ) - cp -f bzmore $(PREFIX)/bin/bzmore -- ln -s -f $(PREFIX)/bin/bzmore $(PREFIX)/bin/bzless -- chmod a+x $(PREFIX)/bin/bzmore -+ chmod a+rx $(PREFIX)/bin/bzmore -+ rm -f $(PREFIX)/bin/bzless -+ ( cd $(PREFIX)/bin && ln -s bzmore bzless ) -+ rm -f $(PREFIX)/bin/bzcmp - cp -f bzdiff $(PREFIX)/bin/bzdiff -- ln -s -f $(PREFIX)/bin/bzdiff $(PREFIX)/bin/bzcmp -- chmod a+x $(PREFIX)/bin/bzdiff -- cp -f bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1 -- chmod a+r $(PREFIX)/man/man1/bzgrep.1 -- chmod a+r $(PREFIX)/man/man1/bzmore.1 -- chmod a+r $(PREFIX)/man/man1/bzdiff.1 -+ chmod a+rx $(PREFIX)/bin/bzdiff -+ ( cd $(PREFIX)/bin && ln -s bzdiff bzcmp ) -+endif -+ifeq ($(ENABLE_DEV),1) -+ cp -f bzlib.h $(PREFIX)/include -+ chmod a+r $(PREFIX)/include/bzlib.h -+endif -+ifeq ($(ENABLE_DOCS),1) -+ cp -f bzip2.1 bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1 - echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzegrep.1 - echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzfgrep.1 - echo ".so man1/bzmore.1" > $(PREFIX)/man/man1/bzless.1 - echo ".so man1/bzdiff.1" > $(PREFIX)/man/man1/bzcmp.1 -+ chmod a+r $(PREFIX)/man/man1/bzip2.1 -+ chmod a+r $(PREFIX)/man/man1/bzgrep.1 -+ chmod a+r $(PREFIX)/man/man1/bzmore.1 -+ chmod a+r $(PREFIX)/man/man1/bzdiff.1 -+ chmod a+r $(PREFIX)/man/man1/bzegrep.1 -+ chmod a+r $(PREFIX)/man/man1/bzfgrep.1 -+ chmod a+r $(PREFIX)/man/man1/bzless.1 -+ chmod a+r $(PREFIX)/man/man1/bzcmp.1 -+endif -+ifeq ($(ENABLE_LIB_SHARED),1) -+ cp -f libbz2.so.1.0.8 $(PREFIX)/lib -+ chmod a+r $(PREFIX)/lib/libbz2.so.1.0.8 -+ rm -f $(PREFIX)/lib/libbz2.so.1.0 -+ rm -f $(PREFIX)/lib/libbz2.so.1 -+ rm -f $(PREFIX)/lib/libbz2.so -+ ( cd $(PREFIX)/lib && ln -s libbz2.so.1.0.8 libbz2.so.1.0 ) -+ ( cd $(PREFIX)/lib && ln -s libbz2.so.1.0 libbz2.so.1 ) -+ ( cd $(PREFIX)/lib && ln -s libbz2.so.1 libbz2.so ) -+endif -+ifeq ($(ENABLE_LIB_STATIC),1) -+ cp -f libbz2.a $(PREFIX)/lib -+ chmod a+r $(PREFIX)/lib/libbz2.a -+endif -+ -+uninstall: -+ rm -f $(PREFIX)/bin/bzip2 -+ rm -f $(PREFIX)/bin/bzip2-shared -+ rm -f $(PREFIX)/bin/bunzip2 -+ rm -f $(PREFIX)/bin/bzcat -+ rm -f $(PREFIX)/bin/bunzip2-shared -+ rm -f $(PREFIX)/bin/bzcat-shared -+ rm -f $(PREFIX)/bin/bzip2recover -+ rm -f $(PREFIX)/bin/bzgrep -+ rm -f $(PREFIX)/bin/bzegrep -+ rm -f $(PREFIX)/bin/bzfgrep -+ rm -f $(PREFIX)/bin/bzmore -+ rm -f $(PREFIX)/bin/bzless -+ rm -f $(PREFIX)/bin/bzdiff -+ rm -f $(PREFIX)/bin/bzcmp -+ rm -f $(PREFIX)/include/bzlib.h -+ rm -f $(PREFIX)/lib/libbz2.so.1.0.8 -+ rm -f $(PREFIX)/lib/libbz2.so.1.0 -+ rm -f $(PREFIX)/lib/libbz2.so.1 -+ rm -f $(PREFIX)/lib/libbz2.so -+ rm -f $(PREFIX)/lib/libbz2.a -+ rm -f $(PREFIX)/man/man1/bzip2.1 -+ rm -f $(PREFIX)/man/man1/bzgrep.1 -+ rm -f $(PREFIX)/man/man1/bzmore.1 -+ rm -f $(PREFIX)/man/man1/bzdiff.1 -+ rm -f $(PREFIX)/man/man1/bzegrep.1 -+ rm -f $(PREFIX)/man/man1/bzfgrep.1 -+ rm -f $(PREFIX)/man/man1/bzless.1 -+ rm -f $(PREFIX)/man/man1/bzcmp.1 -+ (rmdir $(PREFIX)/bin $(PREFIX)/include $(PREFIX)/lib $(PREFIX)/man/man1 $(PREFIX)/man || true ) 2> /dev/null - - clean: -- rm -f *.o libbz2.a bzip2 bzip2recover \ -+ rm -f $(OBJS) bzip2.o \ -+ libbz2.so.1.0.8 libbz2.so.1.0 libbz2.so.1 libbz2.so \ -+ libbz2.a bzip2 bzip2-shared bzip2recover \ - sample1.rb2 sample2.rb2 sample3.rb2 \ - sample1.tst sample2.tst sample3.tst - - blocksort.o: blocksort.c - @cat words0 -- $(CC) $(CFLAGS) -c blocksort.c -+ $(CC) $(CFLAGS_NOPIC) -c blocksort.c - huffman.o: huffman.c -- $(CC) $(CFLAGS) -c huffman.c -+ $(CC) $(CFLAGS_NOPIC) -c huffman.c - crctable.o: crctable.c -- $(CC) $(CFLAGS) -c crctable.c -+ $(CC) $(CFLAGS_NOPIC) -c crctable.c - randtable.o: randtable.c -- $(CC) $(CFLAGS) -c randtable.c -+ $(CC) $(CFLAGS_NOPIC) -c randtable.c - compress.o: compress.c -- $(CC) $(CFLAGS) -c compress.c -+ $(CC) $(CFLAGS_NOPIC) -c compress.c - decompress.o: decompress.c -- $(CC) $(CFLAGS) -c decompress.c -+ $(CC) $(CFLAGS_NOPIC) -c decompress.c - bzlib.o: bzlib.c -- $(CC) $(CFLAGS) -c bzlib.c -+ $(CC) $(CFLAGS_NOPIC) -c bzlib.c - bzip2.o: bzip2.c -- $(CC) $(CFLAGS) -c bzip2.c -+ $(CC) $(CFLAGS_NOPIC) -c bzip2.c - bzip2recover.o: bzip2recover.c -- $(CC) $(CFLAGS) -c bzip2recover.c -+ $(CC) $(CFLAGS_NOPIC) -c bzip2recover.c - - - distclean: clean -@@ -189,7 +333,6 @@ - $(DISTNAME)/bzmore.1 \ - $(DISTNAME)/bzgrep \ - $(DISTNAME)/bzgrep.1 \ -- $(DISTNAME)/Makefile-libbz2_so \ - $(DISTNAME)/bz-common.xsl \ - $(DISTNAME)/bz-fo.xsl \ - $(DISTNAME)/bz-html.xsl \ ---- a/Makefile-libbz2_so -+++ b/Makefile-libbz2_so -@@ -1,59 +0,0 @@ -- --# This Makefile builds a shared version of the library, --# libbz2.so.1.0.8, with soname libbz2.so.1.0, --# at least on x86-Linux (RedHat 7.2), --# with gcc-2.96 20000731 (Red Hat Linux 7.1 2.96-98). --# Please see the README file for some important info --# about building the library like this. -- --# ------------------------------------------------------------------ --# This file is part of bzip2/libbzip2, a program and library for --# lossless, block-sorting data compression. --# --# bzip2/libbzip2 version 1.0.8 of 13 July 2019 --# Copyright (C) 1996-2019 Julian Seward --# --# Please read the WARNING, DISCLAIMER and PATENTS sections in the --# README file. --# --# This program is released under the terms of the license contained --# in the file LICENSE. --# ------------------------------------------------------------------ -- -- --SHELL=/bin/sh --CC=gcc --BIGFILES=-D_FILE_OFFSET_BITS=64 --CFLAGS=-fpic -fPIC -Wall -Winline -O2 -g $(BIGFILES) -- --OBJS= blocksort.o \ -- huffman.o \ -- crctable.o \ -- randtable.o \ -- compress.o \ -- decompress.o \ -- bzlib.o -- --all: $(OBJS) -- $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.8 $(OBJS) -- $(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.so.1.0.8 -- rm -f libbz2.so.1.0 -- ln -s libbz2.so.1.0.8 libbz2.so.1.0 -- --clean: -- rm -f $(OBJS) bzip2.o libbz2.so.1.0.8 libbz2.so.1.0 bzip2-shared -- --blocksort.o: blocksort.c -- $(CC) $(CFLAGS) -c blocksort.c --huffman.o: huffman.c -- $(CC) $(CFLAGS) -c huffman.c --crctable.o: crctable.c -- $(CC) $(CFLAGS) -c crctable.c --randtable.o: randtable.c -- $(CC) $(CFLAGS) -c randtable.c --compress.o: compress.c -- $(CC) $(CFLAGS) -c compress.c --decompress.o: decompress.c -- $(CC) $(CFLAGS) -c decompress.c --bzlib.o: bzlib.c -- $(CC) $(CFLAGS) -c bzlib.c ---- a/unzcrash.c -+++ b/unzcrash.c -@@ -30,7 +30,7 @@ - - #include - #include --#include "bzlib.h" -+#include - - #define M_BLOCK 1000000 - From 36150ff6ffb252ccd4147ffb140d682f58fc19e8 Mon Sep 17 00:00:00 2001 From: Tony Butler Date: Wed, 30 Nov 2022 06:19:37 -0800 Subject: [PATCH 19/19] tools/bzip2: add `bzip2` binaries `bzip2` is the standard executable for bzip2 compression this includes development includes and both static and shared libs (libbz2) which can be used by other packages the initramfs generator offers the BZIP2 option but there was no executable to support it, and worked only via side effect of having a system-installed version of bzip2, which could be less predictable Signed-off-by: Tony Butler [ remove unintended change ] Signed-off-by: Christian Marangi --- tools/Makefile | 4 + tools/bzip2/Makefile | 52 +++ tools/bzip2/patches/020-no-utime.patch | 27 ++ .../021-merge-and-improve-makefiles.patch | 401 ++++++++++++++++++ 4 files changed, 484 insertions(+) create mode 100644 tools/bzip2/Makefile create mode 100644 tools/bzip2/patches/020-no-utime.patch create mode 100644 tools/bzip2/patches/021-merge-and-improve-makefiles.patch diff --git a/tools/Makefile b/tools/Makefile index bdd9f0a2570..722d42b2c27 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -20,6 +20,9 @@ endif ifneq ($(CONFIG_SDK)$(CONFIG_PACKAGE_kmod-b43)$(CONFIG_BRCMSMAC_USE_FW_FROM_WL),) BUILD_B43_TOOLS = y endif +ifneq ($(CONFIG_SDK)$(CONFIG_TARGET_INITRAMFS_COMPRESSION_BZIP2),) + BUILD_BZIP2_TOOLS = y +endif ifneq ($(CONFIG_SDK)$(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZ4),) BUILD_LZ4_TOOLS = y endif @@ -66,6 +69,7 @@ tools-y += zlib tools-y += zstd tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS),y) += liblzo tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_B43_TOOLS),y) += b43-tools +tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_BZIP2_TOOLS),y) += bzip2 tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_ISL),y) += isl tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_LZ4_TOOLS),y) += lz4 tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_LZO_TOOLS),y) += lzop diff --git a/tools/bzip2/Makefile b/tools/bzip2/Makefile new file mode 100644 index 00000000000..0c5a92849ad --- /dev/null +++ b/tools/bzip2/Makefile @@ -0,0 +1,52 @@ +# +# Copyright (C) 2022 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=bzip2 +PKG_VERSION:=1.0.8 +PKG_RELEASE:=1 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://sourceware.org/pub/bzip2 +PKG_HASH:=ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269 + +PKG_LICENSE:=bzip2-1.0.8 +PKG_LICENSE_FILES:=LICENSE +PKG_CPE_ID:=cpe:/a:bzip:bzip2 + +HOST_BUILD_PARALLEL:=1 + +include $(INCLUDE_DIR)/host-build.mk + +HOSTCC := $(HOSTCC_NOCACHE) +HOST_CFLAGS += $(HOST_FPIC) + +HOST_MAKE_FLAGS+= \ + CFLAGS="$(HOST_CFLAGS)" \ + LDFLAGS="$(HOST_LDFLAGS)" \ + ENABLE_BIN_SHARED=1 \ + ENABLE_BIN_STATIC=0 \ + ENABLE_LIB_SHARED=1 \ + ENABLE_LIB_STATIC=1 \ + ENABLE_DEV=1 \ + ENABLE_DOCS=1 \ + ENABLE_TESTS=0 \ + PREFIX="$(HOST_BUILD_PREFIX)" + +define Host/Configure +endef + +define Host/Uninstall + $(call Host/Compile/Default,uninstall) + $(call Host/Compile/Default,clean) +endef + +define Host/Clean +endef + +$(eval $(call HostBuild)) diff --git a/tools/bzip2/patches/020-no-utime.patch b/tools/bzip2/patches/020-no-utime.patch new file mode 100644 index 00000000000..d0cd4f0e35e --- /dev/null +++ b/tools/bzip2/patches/020-no-utime.patch @@ -0,0 +1,27 @@ +--- a/bzip2.c ++++ b/bzip2.c +@@ -69,7 +69,6 @@ + #if BZ_UNIX + # include + # include +-# include + # include + # include + # include +@@ -1051,12 +1050,12 @@ void applySavedTimeInfoToOutputFile ( Ch + { + # if BZ_UNIX + IntNative retVal; +- struct utimbuf uTimBuf; ++ struct timespec uTimBuf[2] = {}; + +- uTimBuf.actime = fileMetaInfo.st_atime; +- uTimBuf.modtime = fileMetaInfo.st_mtime; ++ uTimBuf[0].tv_sec = fileMetaInfo.st_atime; ++ uTimBuf[1].tv_sec = fileMetaInfo.st_mtime; + +- retVal = utime ( dstName, &uTimBuf ); ++ retVal = utimensat ( AT_FDCWD, dstName, uTimBuf , 0 ); + ERROR_IF_NOT_ZERO ( retVal ); + # endif + } diff --git a/tools/bzip2/patches/021-merge-and-improve-makefiles.patch b/tools/bzip2/patches/021-merge-and-improve-makefiles.patch new file mode 100644 index 00000000000..9d98c34bdbb --- /dev/null +++ b/tools/bzip2/patches/021-merge-and-improve-makefiles.patch @@ -0,0 +1,401 @@ +--- a/bzip2.c ++++ b/bzip2.c +@@ -54,7 +54,7 @@ + #include + #include + #include +-#include "bzlib.h" ++#include + + #define ERROR_IF_EOF(i) { if ((i) == EOF) ioError(); } + #define ERROR_IF_NOT_ZERO(i) { if ((i) != 0) ioError(); } +--- a/bzlib_private.h ++++ b/bzlib_private.h +@@ -30,7 +30,7 @@ + #include + #endif + +-#include "bzlib.h" ++#include + + + +--- a/Makefile ++++ b/Makefile +@@ -21,11 +21,38 @@ + LDFLAGS= + + BIGFILES=-D_FILE_OFFSET_BITS=64 +-CFLAGS=-Wall -Winline -O2 -g $(BIGFILES) ++CFLAGS_COMMON=-Wall -Winline -O2 -g $(BIGFILES) -I. ++CFLAGS_NOPIC=$(filter-out -O%,$(CFLAGS)) $(CFLAGS_COMMON) ++CFLAGS_PIC=$(filter-out -O%,$(CFLAGS)) -fpic -fPIC $(CFLAGS_COMMON) + + # Where you want it installed when you do 'make install' +-PREFIX=/usr/local +- ++PREFIX?=/usr/local ++ENABLE_BIN_STATIC?=1 ++ENABLE_BIN_SHARED?=1 ++ENABLE_LIB_STATIC?=1 ++ENABLE_LIB_SHARED?=1 ++ENABLE_DEV?=1 ++ENABLE_DOCS?=1 ++ENABLE_TESTS?=1 ++ ++ifeq ($(ENABLE_BIN_STATIC),1) ++ ENABLE_BIN=1 ++ ifneq ($(ENABLE_LIB_STATIC),1) ++ ENABLE_LIB_STATIC=1 ++ endif ++endif ++ifeq ($(ENABLE_BIN_SHARED),1) ++ ENABLE_BIN=1 ++ ifneq ($(ENABLE_LIB_SHARED),1) ++ ENABLE_LIB_STATIC=1 ++ endif ++endif ++ifeq ($(ENABLE_LIB_STATIC),1) ++ ENABLE_LIB=1 ++endif ++ifeq ($(ENABLE_LIB_SHARED),1) ++ ENABLE_LIB=1 ++endif + + OBJS= blocksort.o \ + huffman.o \ +@@ -35,15 +62,38 @@ + decompress.o \ + bzlib.o + +-all: libbz2.a bzip2 bzip2recover test +- +-bzip2: libbz2.a bzip2.o +- $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2 ++TGTS_all:= ++TGTS_bzip2:=bzip2.o ++TGTS_check:= ++TGTS_install:= ++ifeq ($(ENABLE_LIB),1) ++ TGTS_all+=libbz2 ++ TGTS_bzip2+=libbz2 ++endif ++ifeq ($(ENABLE_BIN),1) ++ TGTS_all+=bzip2 bzip2recover ++ TGTS_install+=bzip2 bzip2recover ++endif ++ifeq ($(ENABLE_TESTS),1) ++ TGTS_all+=test ++ TGTS_check+=test ++endif ++ ++all: $(TGTS_all) ++ ++bzip2: $(TGTS_bzip2) ++ifeq ($(ENABLE_BIN_STATIC),1) ++ $(CC) $(CFLAGS_NOPIC) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2 ++endif ++ifeq ($(ENABLE_BIN_SHARED),1) ++ $(CC) $(CFLAGS_PIC) -o bzip2-shared bzip2.o libbz2.so.1.0 ++endif + + bzip2recover: bzip2recover.o +- $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2recover bzip2recover.o ++ $(CC) $(CFLAGS_NOPIC) $(LDFLAGS) -o bzip2recover bzip2recover.o + +-libbz2.a: $(OBJS) ++libbz2: $(OBJS) ++ifeq ($(ENABLE_LIB_STATIC),1) + rm -f libbz2.a + $(AR) cq libbz2.a $(OBJS) + @if ( test -f $(RANLIB) -o -f /usr/bin/ranlib -o \ +@@ -51,8 +101,18 @@ + echo $(RANLIB) libbz2.a ; \ + $(RANLIB) libbz2.a ; \ + fi ++endif ++ifeq ($(ENABLE_LIB_SHARED),1) ++ $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 $(LDFLAGS) -o libbz2.so.1.0.8 $(OBJS) ++ rm -f libbz2.so.1.0 ++ rm -f libbz2.so.1 ++ rm -f libbz2.so ++ ln -s libbz2.so.1.0.8 libbz2.so.1.0 ++ ln -s libbz2.so.1.0 libbz2.so.1 ++ ln -s libbz2.so.1 libbz2.so ++endif + +-check: test ++check: $(TGTS_check) + test: bzip2 + @cat words1 + ./bzip2 -1 < sample1.ref > sample1.rb2 +@@ -69,69 +129,153 @@ + cmp sample3.tst sample3.ref + @cat words3 + +-install: bzip2 bzip2recover ++install: $(TGTS_install) ++ifeq ($(ENABLE_BIN),1) + if ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi ++endif ++ifeq ($(ENABLE_LIB),1) + if ( test ! -d $(PREFIX)/lib ) ; then mkdir -p $(PREFIX)/lib ; fi ++endif ++ifeq ($(ENABLE_DEV),1) ++ if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi ++endif ++ifeq ($(ENABLE_DOCS),1) + if ( test ! -d $(PREFIX)/man ) ; then mkdir -p $(PREFIX)/man ; fi + if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir -p $(PREFIX)/man/man1 ; fi +- if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi ++endif ++ifeq ($(ENABLE_BIN),1) ++ ifeq ($(ENABLE_BIN_STATIC),1) + cp -f bzip2 $(PREFIX)/bin/bzip2 +- cp -f bzip2 $(PREFIX)/bin/bunzip2 +- cp -f bzip2 $(PREFIX)/bin/bzcat ++ chmod a+rx $(PREFIX)/bin/bzip2 ++ endif ++ ifeq ($(ENABLE_BIN_SHARED),1) ++ ifeq ($(ENABLE_BIN_STATIC),1) ++ cp -f bzip2-shared $(PREFIX)/bin/bzip2-shared ++ chmod a+rx $(PREFIX)/bin/bzip2-shared ++ else ++ cp -f bzip2-shared $(PREFIX)/bin/bzip2 ++ endif ++ endif ++ rm -f $(PREFIX)/bin/bunzip2 ++ rm -f $(PREFIX)/bin/bzcat ++ ( cd $(PREFIX)/bin && ln -s bzip2 bunzip2 ) ++ ( cd $(PREFIX)/bin && ln -s bzip2 bzcat ) ++ rm -f $(PREFIX)/bin/bunzip2-shared ++ rm -f $(PREFIX)/bin/bzcat-shared ++ ifeq ($(ENABLE_BIN_SHARED),1) ++ ifeq ($(ENABLE_BIN_STATIC),1) ++ ( cd $(PREFIX)/bin && ln -s bzip2-shared bunzip2-shared ) ++ ( cd $(PREFIX)/bin && ln -s bzip2-shared bzcat-shared ) ++ endif ++ endif + cp -f bzip2recover $(PREFIX)/bin/bzip2recover +- chmod a+x $(PREFIX)/bin/bzip2 +- chmod a+x $(PREFIX)/bin/bunzip2 +- chmod a+x $(PREFIX)/bin/bzcat +- chmod a+x $(PREFIX)/bin/bzip2recover +- cp -f bzip2.1 $(PREFIX)/man/man1 +- chmod a+r $(PREFIX)/man/man1/bzip2.1 +- cp -f bzlib.h $(PREFIX)/include +- chmod a+r $(PREFIX)/include/bzlib.h +- cp -f libbz2.a $(PREFIX)/lib +- chmod a+r $(PREFIX)/lib/libbz2.a ++ chmod a+rx $(PREFIX)/bin/bzip2recover + cp -f bzgrep $(PREFIX)/bin/bzgrep +- ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzegrep +- ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzfgrep +- chmod a+x $(PREFIX)/bin/bzgrep ++ chmod a+rx $(PREFIX)/bin/bzgrep ++ rm -f $(PREFIX)/bin/bzegrep ++ rm -f $(PREFIX)/bin/bzfgrep ++ ( cd $(PREFIX)/bin && ln -s bzgrep bzegrep ) ++ ( cd $(PREFIX)/bin && ln -s bzgrep bzfgrep ) + cp -f bzmore $(PREFIX)/bin/bzmore +- ln -s -f $(PREFIX)/bin/bzmore $(PREFIX)/bin/bzless +- chmod a+x $(PREFIX)/bin/bzmore ++ chmod a+rx $(PREFIX)/bin/bzmore ++ rm -f $(PREFIX)/bin/bzless ++ ( cd $(PREFIX)/bin && ln -s bzmore bzless ) ++ rm -f $(PREFIX)/bin/bzcmp + cp -f bzdiff $(PREFIX)/bin/bzdiff +- ln -s -f $(PREFIX)/bin/bzdiff $(PREFIX)/bin/bzcmp +- chmod a+x $(PREFIX)/bin/bzdiff +- cp -f bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1 +- chmod a+r $(PREFIX)/man/man1/bzgrep.1 +- chmod a+r $(PREFIX)/man/man1/bzmore.1 +- chmod a+r $(PREFIX)/man/man1/bzdiff.1 ++ chmod a+rx $(PREFIX)/bin/bzdiff ++ ( cd $(PREFIX)/bin && ln -s bzdiff bzcmp ) ++endif ++ifeq ($(ENABLE_DEV),1) ++ cp -f bzlib.h $(PREFIX)/include ++ chmod a+r $(PREFIX)/include/bzlib.h ++endif ++ifeq ($(ENABLE_DOCS),1) ++ cp -f bzip2.1 bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1 + echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzegrep.1 + echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzfgrep.1 + echo ".so man1/bzmore.1" > $(PREFIX)/man/man1/bzless.1 + echo ".so man1/bzdiff.1" > $(PREFIX)/man/man1/bzcmp.1 ++ chmod a+r $(PREFIX)/man/man1/bzip2.1 ++ chmod a+r $(PREFIX)/man/man1/bzgrep.1 ++ chmod a+r $(PREFIX)/man/man1/bzmore.1 ++ chmod a+r $(PREFIX)/man/man1/bzdiff.1 ++ chmod a+r $(PREFIX)/man/man1/bzegrep.1 ++ chmod a+r $(PREFIX)/man/man1/bzfgrep.1 ++ chmod a+r $(PREFIX)/man/man1/bzless.1 ++ chmod a+r $(PREFIX)/man/man1/bzcmp.1 ++endif ++ifeq ($(ENABLE_LIB_SHARED),1) ++ cp -f libbz2.so.1.0.8 $(PREFIX)/lib ++ chmod a+r $(PREFIX)/lib/libbz2.so.1.0.8 ++ rm -f $(PREFIX)/lib/libbz2.so.1.0 ++ rm -f $(PREFIX)/lib/libbz2.so.1 ++ rm -f $(PREFIX)/lib/libbz2.so ++ ( cd $(PREFIX)/lib && ln -s libbz2.so.1.0.8 libbz2.so.1.0 ) ++ ( cd $(PREFIX)/lib && ln -s libbz2.so.1.0 libbz2.so.1 ) ++ ( cd $(PREFIX)/lib && ln -s libbz2.so.1 libbz2.so ) ++endif ++ifeq ($(ENABLE_LIB_STATIC),1) ++ cp -f libbz2.a $(PREFIX)/lib ++ chmod a+r $(PREFIX)/lib/libbz2.a ++endif ++ ++uninstall: ++ rm -f $(PREFIX)/bin/bzip2 ++ rm -f $(PREFIX)/bin/bzip2-shared ++ rm -f $(PREFIX)/bin/bunzip2 ++ rm -f $(PREFIX)/bin/bzcat ++ rm -f $(PREFIX)/bin/bunzip2-shared ++ rm -f $(PREFIX)/bin/bzcat-shared ++ rm -f $(PREFIX)/bin/bzip2recover ++ rm -f $(PREFIX)/bin/bzgrep ++ rm -f $(PREFIX)/bin/bzegrep ++ rm -f $(PREFIX)/bin/bzfgrep ++ rm -f $(PREFIX)/bin/bzmore ++ rm -f $(PREFIX)/bin/bzless ++ rm -f $(PREFIX)/bin/bzdiff ++ rm -f $(PREFIX)/bin/bzcmp ++ rm -f $(PREFIX)/include/bzlib.h ++ rm -f $(PREFIX)/lib/libbz2.so.1.0.8 ++ rm -f $(PREFIX)/lib/libbz2.so.1.0 ++ rm -f $(PREFIX)/lib/libbz2.so.1 ++ rm -f $(PREFIX)/lib/libbz2.so ++ rm -f $(PREFIX)/lib/libbz2.a ++ rm -f $(PREFIX)/man/man1/bzip2.1 ++ rm -f $(PREFIX)/man/man1/bzgrep.1 ++ rm -f $(PREFIX)/man/man1/bzmore.1 ++ rm -f $(PREFIX)/man/man1/bzdiff.1 ++ rm -f $(PREFIX)/man/man1/bzegrep.1 ++ rm -f $(PREFIX)/man/man1/bzfgrep.1 ++ rm -f $(PREFIX)/man/man1/bzless.1 ++ rm -f $(PREFIX)/man/man1/bzcmp.1 ++ (rmdir $(PREFIX)/bin $(PREFIX)/include $(PREFIX)/lib $(PREFIX)/man/man1 $(PREFIX)/man || true ) 2> /dev/null + + clean: +- rm -f *.o libbz2.a bzip2 bzip2recover \ ++ rm -f $(OBJS) bzip2.o \ ++ libbz2.so.1.0.8 libbz2.so.1.0 libbz2.so.1 libbz2.so \ ++ libbz2.a bzip2 bzip2-shared bzip2recover \ + sample1.rb2 sample2.rb2 sample3.rb2 \ + sample1.tst sample2.tst sample3.tst + + blocksort.o: blocksort.c + @cat words0 +- $(CC) $(CFLAGS) -c blocksort.c ++ $(CC) $(CFLAGS_NOPIC) -c blocksort.c + huffman.o: huffman.c +- $(CC) $(CFLAGS) -c huffman.c ++ $(CC) $(CFLAGS_NOPIC) -c huffman.c + crctable.o: crctable.c +- $(CC) $(CFLAGS) -c crctable.c ++ $(CC) $(CFLAGS_NOPIC) -c crctable.c + randtable.o: randtable.c +- $(CC) $(CFLAGS) -c randtable.c ++ $(CC) $(CFLAGS_NOPIC) -c randtable.c + compress.o: compress.c +- $(CC) $(CFLAGS) -c compress.c ++ $(CC) $(CFLAGS_NOPIC) -c compress.c + decompress.o: decompress.c +- $(CC) $(CFLAGS) -c decompress.c ++ $(CC) $(CFLAGS_NOPIC) -c decompress.c + bzlib.o: bzlib.c +- $(CC) $(CFLAGS) -c bzlib.c ++ $(CC) $(CFLAGS_NOPIC) -c bzlib.c + bzip2.o: bzip2.c +- $(CC) $(CFLAGS) -c bzip2.c ++ $(CC) $(CFLAGS_NOPIC) -c bzip2.c + bzip2recover.o: bzip2recover.c +- $(CC) $(CFLAGS) -c bzip2recover.c ++ $(CC) $(CFLAGS_NOPIC) -c bzip2recover.c + + + distclean: clean +@@ -189,7 +333,6 @@ + $(DISTNAME)/bzmore.1 \ + $(DISTNAME)/bzgrep \ + $(DISTNAME)/bzgrep.1 \ +- $(DISTNAME)/Makefile-libbz2_so \ + $(DISTNAME)/bz-common.xsl \ + $(DISTNAME)/bz-fo.xsl \ + $(DISTNAME)/bz-html.xsl \ +--- a/Makefile-libbz2_so ++++ b/Makefile-libbz2_so +@@ -1,59 +0,0 @@ +- +-# This Makefile builds a shared version of the library, +-# libbz2.so.1.0.8, with soname libbz2.so.1.0, +-# at least on x86-Linux (RedHat 7.2), +-# with gcc-2.96 20000731 (Red Hat Linux 7.1 2.96-98). +-# Please see the README file for some important info +-# about building the library like this. +- +-# ------------------------------------------------------------------ +-# This file is part of bzip2/libbzip2, a program and library for +-# lossless, block-sorting data compression. +-# +-# bzip2/libbzip2 version 1.0.8 of 13 July 2019 +-# Copyright (C) 1996-2019 Julian Seward +-# +-# Please read the WARNING, DISCLAIMER and PATENTS sections in the +-# README file. +-# +-# This program is released under the terms of the license contained +-# in the file LICENSE. +-# ------------------------------------------------------------------ +- +- +-SHELL=/bin/sh +-CC=gcc +-BIGFILES=-D_FILE_OFFSET_BITS=64 +-CFLAGS=-fpic -fPIC -Wall -Winline -O2 -g $(BIGFILES) +- +-OBJS= blocksort.o \ +- huffman.o \ +- crctable.o \ +- randtable.o \ +- compress.o \ +- decompress.o \ +- bzlib.o +- +-all: $(OBJS) +- $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.8 $(OBJS) +- $(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.so.1.0.8 +- rm -f libbz2.so.1.0 +- ln -s libbz2.so.1.0.8 libbz2.so.1.0 +- +-clean: +- rm -f $(OBJS) bzip2.o libbz2.so.1.0.8 libbz2.so.1.0 bzip2-shared +- +-blocksort.o: blocksort.c +- $(CC) $(CFLAGS) -c blocksort.c +-huffman.o: huffman.c +- $(CC) $(CFLAGS) -c huffman.c +-crctable.o: crctable.c +- $(CC) $(CFLAGS) -c crctable.c +-randtable.o: randtable.c +- $(CC) $(CFLAGS) -c randtable.c +-compress.o: compress.c +- $(CC) $(CFLAGS) -c compress.c +-decompress.o: decompress.c +- $(CC) $(CFLAGS) -c decompress.c +-bzlib.o: bzlib.c +- $(CC) $(CFLAGS) -c bzlib.c +--- a/unzcrash.c ++++ b/unzcrash.c +@@ -30,7 +30,7 @@ + + #include + #include +-#include "bzlib.h" ++#include + + #define M_BLOCK 1000000 +