mirror of
				https://github.com/Telecominfraproject/wlan-ap.git
				synced 2025-10-31 18:38:10 +00:00 
			
		
		
		
	Compare commits
	
		
			16 Commits
		
	
	
		
			v2.5.0-rc1
			...
			v2.5.0-rc3
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | e3b1fe36e5 | ||
|   | 5af7e1e7d8 | ||
|   | 057ebb8660 | ||
|   | 17fe72c6e9 | ||
|   | 834ff2fe4f | ||
|   | ce3849e131 | ||
|   | 66640cdd1a | ||
|   | 300924a4be | ||
|   | 8fb088bcc8 | ||
|   | b08455228f | ||
|   | 09563eadaf | ||
|   | 2df46a2c77 | ||
|   | e4fa57b4d0 | ||
|   | 48677a6943 | ||
|   | e79970ce04 | ||
|   | b4d1d58fc9 | 
							
								
								
									
										2
									
								
								.github/workflows/build-dev.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/build-dev.yml
									
									
									
									
										vendored
									
									
								
							| @@ -11,7 +11,7 @@ jobs: | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         target: ['actiontec_web7200', 'cig_wf188n', 'cig_wf194c', 'cig_wf194c4', 'cig_wf160d', 'cig_wf808', 'cybertan_eww622-a1', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_ecs4100-12ph', 'edgecore_ecw5211', 'edgecore_ecw5410', 'edgecore_oap100', 'edgecore_ssw2ac2600', 'edgecore_spw2ac1200', 'edgecore_spw2ac1200-lan-poe', 'hfcl_ion4', 'hfcl_ion4xe', 'hfcl_ion4xi', 'indio_um-305ac', 'linksys_ea6350-v4', 'linksys_e8450-ubi', 'linksys_ea8300', 'tp-link_ec420-g1', 'tplink_ex227', 'tplink_ex228', 'tplink_ex447', 'wallys_dr40x9', 'wallys_dr6018', 'wallys_dr6018_v4' ] | ||||
|         target: ['actiontec_web7200', 'cig_wf188n', 'cig_wf194c', 'cig_wf194c4', 'cig_wf196', 'cig_wf160d', 'cig_wf808', 'cybertan_eww622-a1', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_ecs4100-12ph', 'edgecore_ecw5211', 'edgecore_ecw5410', 'edgecore_oap100', 'edgecore_ssw2ac2600', 'edgecore_spw2ac1200', 'edgecore_spw2ac1200-lan-poe', 'hfcl_ion4', 'hfcl_ion4xe', 'hfcl_ion4xi', 'indio_um-305ac', 'linksys_ea6350-v4', 'linksys_e8450-ubi', 'linksys_ea8300', 'tp-link_ec420-g1', 'tplink_ex227', 'tplink_ex228', 'tplink_ex447', 'wallys_dr40x9', 'wallys_dr6018', 'wallys_dr6018_v4' ] | ||||
|  | ||||
|     steps: | ||||
|     - uses: actions/checkout@v2 | ||||
|   | ||||
| @@ -37,6 +37,9 @@ define Package/cc2652/install | ||||
|  | ||||
| 	$(INSTALL_DIR) $(1)/etc/config | ||||
| 	$(INSTALL_BIN) ./files/tisbl.config $(1)/etc/config/tisbl | ||||
|  | ||||
| 	$(INSTALL_DIR) $(1)/etc/uci-defaults | ||||
| 	$(INSTALL_BIN) ./files/tisbl.defaults $(1)/etc/uci-defaults | ||||
| endef | ||||
|  | ||||
| $(eval $(call BuildPackage,cc2652)) | ||||
|   | ||||
| @@ -1,9 +1,7 @@ | ||||
| config tisbl 'tisbl' | ||||
| 	option firmware '/etc/tifirmware/ble5_host_test_bd9.bin' | ||||
|     option tty '/dev/ttyMSM1'	# for EAP101 board | ||||
| #    option tty '/dev/ttyACM0'	# for virtualbox openwrt 19.07 with TI CC26X2R launchpad | ||||
| 	option tty '/dev/ttyMSM1' | ||||
| 	option tichip '2652' | ||||
| 	option baudrate '115200' | ||||
| 	option resetpin '79' | ||||
|     option backdoorpin '34' 	#EAP101-R1 | ||||
| #    option backdoorpin '67'	#EAP101-R0A-HW-modification | ||||
| 	option backdoorpin '34' | ||||
|   | ||||
							
								
								
									
										13
									
								
								feeds/bluetooth-cc2652/cc2652/files/tisbl.defaults
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										13
									
								
								feeds/bluetooth-cc2652/cc2652/files/tisbl.defaults
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| . /lib/functions.sh | ||||
| . /lib/functions/system.sh | ||||
|  | ||||
| board=$(board_name) | ||||
|  | ||||
| case $board in | ||||
| edgecore,eap104) | ||||
|         uci set tisbl.tisbl.backdoorpin=31 | ||||
|         uci set tisbl.tisbl.resetpin=35 | ||||
|         ;; | ||||
| esac | ||||
| @@ -17,9 +17,6 @@ cig,wf194c4) | ||||
|         ucidef_set_led_wlan "wlan5g" "WLAN5G" "green:wifi5" "phy0tpt" | ||||
|         ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy1tpt" | ||||
| 	;; | ||||
| esac | ||||
|  | ||||
| case "$board" in | ||||
| edgecore,eap101) | ||||
|         ucidef_set_led_wlan "wlan5g" "WLAN5G" "green:wifi5" "phy0tpt" | ||||
|         ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy1tpt" | ||||
| @@ -32,6 +29,11 @@ edgecore,eap102) | ||||
|         ucidef_set_led_wlan "wlan5g" "WLAN5G" "green:wifi5" "phy0tpt" | ||||
|         ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy1tpt" | ||||
| 	;; | ||||
| edgecore,eap104) | ||||
|         ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy0tpt" | ||||
|         ucidef_set_led_wlan "wlan5g" "WLAN5G" "green:wifi5" "phy1tpt" | ||||
| 	ucidef_set_led_netdev "wan" "wan" "yellow:uplink" "eth0" | ||||
| 	;; | ||||
| hfcl,ion4xi|\ | ||||
| hfcl,ion4xe) | ||||
|         ucidef_set_led_wlan "wlan5g" "WLAN5G" "blue:wifi5" "phy0tpt" | ||||
|   | ||||
| @@ -41,6 +41,7 @@ qcom_setup_interfaces() | ||||
| 		ucidef_set_interface_wan "eth0" | ||||
| 		;; | ||||
| 	edgecore,eap102|\ | ||||
| 	edgecore,eap104|\ | ||||
| 	wallys,dr6018|\ | ||||
| 	cig,wf188n|\ | ||||
| 	cig,wf196) | ||||
| @@ -91,7 +92,6 @@ qcom_setup_macs() | ||||
|  | ||||
| board_config_update | ||||
| board=$(board_name) | ||||
| ucidef_set_bridge_device bridge | ||||
| qcom_setup_interfaces $board | ||||
| qcom_setup_macs $board | ||||
| board_config_flush | ||||
|   | ||||
| @@ -104,11 +104,19 @@ case "$FIRMWARE" in | ||||
| ath11k/IPQ5018/hw1.0/caldata.bin) | ||||
| 	case "$board" in | ||||
| 	cybertan,eww622-a1|\ | ||||
| 	edgecore,eap104|\ | ||||
| 	qcom,ipq5018-mp03.1) | ||||
|                 caldata_extract "0:ART" 0x1000 0x20000   | ||||
| 		;; | ||||
| 	esac | ||||
| 	;; | ||||
| ath11k/qcn6122/hw1.0/caldata_2.bin) | ||||
| 	case "$board" in | ||||
| 	edgecore,eap104) | ||||
|                 caldata_extract "0:ART" 0x4c000 0x20000   | ||||
| 		;; | ||||
| 	esac | ||||
| 	;; | ||||
| ath11k/QCN9074/hw1.0/caldata_1.bin) | ||||
| 	case "$board" in | ||||
| 	cig,wf196|\ | ||||
|   | ||||
| @@ -1,67 +0,0 @@ | ||||
| #!/bin/sh | ||||
| [ "$ACTION" = add ] || exit | ||||
|  | ||||
| NPROCS="$(grep -c "^processor.*:" /proc/cpuinfo)" | ||||
| [ "$NPROCS" -gt 1 ] || exit | ||||
|  | ||||
| PROC_MASK="$(( (1 << $NPROCS) - 1 ))" | ||||
|  | ||||
| find_irq_cpu() { | ||||
| 	local dev="$1" | ||||
| 	local match="$(grep -m 1 "$dev\$" /proc/interrupts)" | ||||
| 	local cpu=0 | ||||
|  | ||||
| 	[ -n "$match" ] && { | ||||
| 		set -- $match | ||||
| 		shift | ||||
| 		for cur in `seq 1 $NPROCS`; do | ||||
| 			[ "$1" -gt 0 ] && { | ||||
| 				cpu=$(($cur - 1)) | ||||
| 				break | ||||
| 			} | ||||
| 			shift | ||||
| 		done | ||||
| 	} | ||||
|  | ||||
| 	echo "$cpu" | ||||
| } | ||||
|  | ||||
| set_hex_val() { | ||||
| 	local file="$1" | ||||
| 	local val="$2" | ||||
| 	val="$(printf %x "$val")" | ||||
| 	[ -n "$DEBUG" ] && echo "$file = $val" | ||||
| 	echo "$val" > "$file" | ||||
| } | ||||
|  | ||||
| default_ps="$(uci get "network.@globals[0].default_ps")" | ||||
| [ -n "$default_ps" -a "$default_ps" != 1 ] && exit 0 | ||||
|  | ||||
| exec 512>/var/lock/smp_tune.lock | ||||
| flock 512 || exit 1 | ||||
|  | ||||
| for dev in /sys/class/net/*; do | ||||
| 	[ -d "$dev" ] || continue | ||||
|  | ||||
| 	# ignore virtual interfaces | ||||
| 	[ -n "$(ls "${dev}/" | grep '^lower_')" ] && continue | ||||
| 	[ -d "${dev}/device" ] || continue | ||||
|  | ||||
| 	device="$(readlink "${dev}/device")" | ||||
| 	device="$(basename "$device")" | ||||
| 	irq_cpu="$(find_irq_cpu "$device")" | ||||
| 	irq_cpu_mask="$((1 << $irq_cpu))" | ||||
|  | ||||
| 	for q in ${dev}/queues/rx-*; do | ||||
| 		set_hex_val "$q/rps_cpus" "$(($PROC_MASK & ~$irq_cpu_mask))" | ||||
| 	done | ||||
|  | ||||
| 	ntxq="$(ls -d ${dev}/queues/tx-* | wc -l)" | ||||
|  | ||||
| 	idx=$(($irq_cpu + 1)) | ||||
| 	for q in ${dev}/queues/tx-*; do | ||||
| 		set_hex_val "$q/xps_cpus" "$((1 << $idx))" | ||||
| 		let "idx = idx + 1" | ||||
| 		[ "$idx" -ge "$NPROCS" ] && idx=0 | ||||
| 	done | ||||
| done | ||||
| @@ -1,58 +0,0 @@ | ||||
| #!/bin/sh /etc/rc.common | ||||
|  | ||||
| START=80 | ||||
|  | ||||
| set_affinity() { | ||||
| 	local affinity=$1 | ||||
| 	local name=$2 | ||||
| 	local irq=`grep -E -m1 $name /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '` | ||||
|         [ -n "$irq" ] && { | ||||
| 		logger ath11k setting affinity for $name/$irq to $affinity | ||||
| 		echo $affinity > /proc/irq/$irq/smp_affinity | ||||
| 	} | ||||
| } | ||||
|  | ||||
| boot() { | ||||
| 	. /lib/functions/system.sh | ||||
|  | ||||
| 	board=$(board_name) | ||||
| 	case $board in | ||||
| 	cig,wf196) | ||||
| 		set_affinity 1 reo2host-destination-ring2 | ||||
| 		set_affinity 2 reo2host-destination-ring1 | ||||
| 		;; | ||||
| 	*) | ||||
| 		set_affinity 2 reo2host-destination-ring2 | ||||
| 		set_affinity 1 reo2host-destination-ring1 | ||||
| 		;; | ||||
| 	esac | ||||
|  | ||||
| 	case $board in | ||||
| 	maple) | ||||
| 		;; | ||||
| 	*) | ||||
| 		set_affinity 8 reo2host-destination-ring4 | ||||
| 		set_affinity 4 reo2host-destination-ring3 | ||||
| 	 | ||||
| 		set_affinity 8 wbm2host-tx-completions-ring3 | ||||
| 		set_affinity 4 wbm2host-tx-completions-ring2 | ||||
| 		set_affinity 2 wbm2host-tx-completions-ring1 | ||||
|  | ||||
| 		set_affinity 8 ppdu-end-interrupts-mac1 | ||||
| 		set_affinity 8 rxdma2host-monitor-status-ring-mac1 | ||||
| 		set_affinity 8 rxdma2host-monitor-destination-mac1 | ||||
| 		set_affinity 8 host2rxdma-monitor-ring1 | ||||
| 		;; | ||||
| 	esac | ||||
|  | ||||
| 	set_affinity 4 ppdu-end-interrupts-mac2 | ||||
| 	set_affinity 4 rxdma2host-monitor-status-ring-mac2 | ||||
| 	set_affinity 4 rxdma2host-monitor-destination-mac2 | ||||
| 	set_affinity 4 host2rxdma-monitor-ring2 | ||||
|  | ||||
| 	set_affinity 2 ppdu-end-interrupts-mac3 | ||||
| 	set_affinity 2 rxdma2host-monitor-status-ring-mac3 | ||||
| 	set_affinity 2 rxdma2host-monitor-destination-mac3 | ||||
| 	set_affinity 2 host2rxdma-monitor-ring3 | ||||
| } | ||||
|  | ||||
| @@ -30,6 +30,7 @@ platform_check_image() { | ||||
| 	wallys,dr6018-v4|\ | ||||
| 	edgecore,eap101|\ | ||||
| 	edgecore,eap102|\ | ||||
| 	edgecore,eap104|\ | ||||
| 	edgecore,eap106|\ | ||||
| 	hfcl,ion4xi|\ | ||||
| 	hfcl,ion4xe|\ | ||||
| @@ -60,6 +61,7 @@ platform_do_upgrade() { | ||||
| 	cig,wf194c4|\ | ||||
| 	cig,wf196|\ | ||||
| 	cybertan,eww622-a1|\ | ||||
| 	edgecore,eap104|\ | ||||
| 	hfcl,ion4xi|\ | ||||
| 	hfcl,ion4xe|\ | ||||
| 	qcom,ipq6018-cp01|\ | ||||
|   | ||||
| @@ -0,0 +1,23 @@ | ||||
| /* | ||||
|  * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. | ||||
|  * | ||||
|  * Permission to use, copy, modify, and/or distribute this software for any | ||||
|  * purpose with or without fee is hereby granted, provided that the above | ||||
|  * copyright notice and this permission notice appear in all copies. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||||
|  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||||
|  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||||
|  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||||
|  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||||
|  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||||
|  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include "../../../arm64/boot/dts/qcom/qcom-ipq5018-eap104.dts" | ||||
|  | ||||
| / { | ||||
| 	pmuv8: pmu { | ||||
| 		compatible = "arm,cortex-a7-pmu"; | ||||
| 	}; | ||||
| }; | ||||
							
								
								
									
										1015
									
								
								feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq5018-eap104.dts
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										1015
									
								
								feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq5018-eap104.dts
									
									
									
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -39,6 +39,11 @@ | ||||
| 		ethernet3 = "/soc/dp4"; | ||||
| 		ethernet4 = "/soc/dp5"; | ||||
| 		ethernet5 = "/soc/dp6"; | ||||
|  | ||||
| 		led-boot = &led_power; | ||||
| 		led-failsafe = &led_power; | ||||
| 		led-running = &led_power; | ||||
| 		led-upgrade = &led_power; | ||||
| 	}; | ||||
|  | ||||
| 	chosen { | ||||
| @@ -325,15 +330,22 @@ | ||||
| 	}; | ||||
|  | ||||
| 	led_pins: led_pins { | ||||
| 		led_2g { | ||||
| 			pins = "gpio42"; | ||||
| 		led_red { | ||||
| 			pins = "gpio25"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
|  | ||||
| 		led_5g { | ||||
| 			pins = "gpio43"; | ||||
| 		led_green { | ||||
| 			pins = "gpio26"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
|  | ||||
| 		led_blue { | ||||
| 			pins = "gpio27"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| @@ -379,7 +391,7 @@ | ||||
|                 pinctrl-0 = <&pwm_pins>; | ||||
|                 pinctrl-names = "default"; | ||||
|                 used-pwm-indices = <1>, <1>, <1>, <0>; | ||||
|                 status = "ok"; | ||||
|          //       status = "ok"; | ||||
|         }; | ||||
| 	gpio_keys { | ||||
| 		compatible = "gpio-keys"; | ||||
| @@ -810,15 +822,21 @@ | ||||
| 		pinctrl-0 = <&led_pins>; | ||||
| 		pinctrl-names = "default"; | ||||
|  | ||||
| 		led_2g { | ||||
| 			label = "led_2g"; | ||||
| 			gpio = <&tlmm 42 GPIO_ACTIVE_HIGH>; | ||||
| 		led_red { | ||||
| 			label = "red:status"; | ||||
| 			gpio = <&tlmm 25 GPIO_ACTIVE_HIGH>; | ||||
| 			default-state = "off"; | ||||
| 		}; | ||||
|  | ||||
| 		led_5g { | ||||
| 			label = "led_5g"; | ||||
| 			gpio = <&tlmm 43 GPIO_ACTIVE_HIGH>; | ||||
| 		led_power: led_green { | ||||
| 			label = "green:status"; | ||||
| 			gpio = <&tlmm 26 GPIO_ACTIVE_HIGH>; | ||||
| 			default-state = "on"; | ||||
| 		}; | ||||
|  | ||||
| 		led_blue { | ||||
| 			label = "blue:status"; | ||||
| 			gpio = <&tlmm 27 GPIO_ACTIVE_HIGH>; | ||||
| 			default-state = "off"; | ||||
| 		}; | ||||
| 	}; | ||||
|   | ||||
| @@ -9,6 +9,15 @@ define Device/cybertan_eww622_a1 | ||||
| endef | ||||
| TARGET_DEVICES += cybertan_eww622_a1 | ||||
|  | ||||
| define Device/edgecore_eap104 | ||||
|   DEVICE_TITLE := EdgeCore EAP104 | ||||
|   DEVICE_DTS := qcom-ipq5018-eap104 | ||||
|   SUPPORTED_DEVICES := edgecore,eap104 | ||||
|   DEVICE_PACKAGES := ath11k-wifi-edgecore-eap104 ath11k-firmware-ipq50xx-spruce ath11k-firmware-qcn6122 | ||||
|   DEVICE_DTS_CONFIG := config@mp03.5-c1 | ||||
| endef | ||||
| TARGET_DEVICES += edgecore_eap104 | ||||
|  | ||||
| define Device/qcom_mp03_1 | ||||
|   DEVICE_TITLE := Qualcomm Maple 03.1 | ||||
|   DEVICE_DTS := qcom-ipq5018-mp03.1 | ||||
|   | ||||
| @@ -3,7 +3,7 @@ SUBTARGET:=ipq50xx | ||||
| BOARDNAME:=IPQ50XX | ||||
| CPU_TYPE:=cortex-a7 | ||||
|  | ||||
| DEFAULT_PACKAGES += ath11k-firmware-ipq50xx qca-nss-fw-ipq50xx | ||||
| DEFAULT_PACKAGES += qca-nss-fw-ipq50xx | ||||
|  | ||||
| define Target/Description | ||||
| 	Build firmware image for IPQ50xx SoC devices. | ||||
|   | ||||
							
								
								
									
										14
									
								
								feeds/ipq807x/ipq807x/patches/108-add-W25N01GW.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								feeds/ipq807x/ipq807x/patches/108-add-W25N01GW.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| Index: linux-4.4.60-qsdk-11f09717303ecd83c3a64e9efe23f25921dc1016/drivers/mtd/nand/qcom_nandc.c | ||||
| =================================================================== | ||||
| --- linux-4.4.60-qsdk-11f09717303ecd83c3a64e9efe23f25921dc1016.orig/drivers/mtd/nand/qcom_nandc.c | ||||
| +++ linux-4.4.60-qsdk-11f09717303ecd83c3a64e9efe23f25921dc1016/drivers/mtd/nand/qcom_nandc.c | ||||
| @@ -405,6 +405,9 @@ struct nand_flash_dev qspinand_flash_ids | ||||
|  	{"MX35UF1GE4AC SPI NAND 1G 1.8V", | ||||
|  		{ .id = {0xc2, 0x92} }, | ||||
|  		SZ_2K, SZ_128, SZ_128K, 0, 2, 64, NAND_ECC_INFO(4, SZ_512), 0}, | ||||
| +	{"W25N01GW SPI NAND 1.8V 1G-BIT", | ||||
| +		{ .id = {0xef, 0xba} }, | ||||
| +		SZ_2K, SZ_128, SZ_128K, 0, 2, 64, NAND_ECC_INFO(4, SZ_512), 0}, | ||||
|  	{NULL} | ||||
|  }; | ||||
|   | ||||
| @@ -1,88 +0,0 @@ | ||||
| From: Felix Fietkau <nbd@nbd.name> | ||||
| Date: Mon, 8 Feb 2021 11:34:08 -0800 | ||||
| Subject: [PATCH] net: extract napi poll functionality to __napi_poll() | ||||
|  | ||||
| This commit introduces a new function __napi_poll() which does the main | ||||
| logic of the existing napi_poll() function, and will be called by other | ||||
| functions in later commits. | ||||
| This idea and implementation is done by Felix Fietkau <nbd@nbd.name> and | ||||
| is proposed as part of the patch to move napi work to work_queue | ||||
| context. | ||||
| This commit by itself is a code restructure. | ||||
|  | ||||
| Signed-off-by: Felix Fietkau <nbd@nbd.name> | ||||
| Signed-off-by: Wei Wang <weiwan@google.com> | ||||
| Reviewed-by: Alexander Duyck <alexanderduyck@fb.com> | ||||
| Signed-off-by: David S. Miller <davem@davemloft.net> | ||||
| --- | ||||
|  | ||||
| --- a/net/core/dev.c | ||||
| +++ b/net/core/dev.c | ||||
| @@ -6322,15 +6322,10 @@ void netif_napi_del(struct napi_struct * | ||||
|  } | ||||
|  EXPORT_SYMBOL(netif_napi_del); | ||||
|   | ||||
| -static int napi_poll(struct napi_struct *n, struct list_head *repoll) | ||||
| +static int __napi_poll(struct napi_struct *n, bool *repoll) | ||||
|  { | ||||
| -	void *have; | ||||
|  	int work, weight; | ||||
|   | ||||
| -	list_del_init(&n->poll_list); | ||||
| - | ||||
| -	have = netpoll_poll_lock(n); | ||||
| - | ||||
|  	weight = n->weight; | ||||
|   | ||||
|  	/* This NAPI_STATE_SCHED test is for avoiding a race | ||||
| @@ -6348,7 +6343,7 @@ static int napi_poll(struct napi_struct | ||||
|  	WARN_ON_ONCE(work > weight); | ||||
|   | ||||
|  	if (likely(work < weight)) | ||||
| -		goto out_unlock; | ||||
| +		return work; | ||||
|   | ||||
|  	/* Drivers must not modify the NAPI state if they | ||||
|  	 * consume the entire weight.  In such cases this code | ||||
| @@ -6357,7 +6352,7 @@ static int napi_poll(struct napi_struct | ||||
|  	 */ | ||||
|  	if (unlikely(napi_disable_pending(n))) { | ||||
|  		napi_complete(n); | ||||
| -		goto out_unlock; | ||||
| +		return work; | ||||
|  	} | ||||
|   | ||||
|  	if (n->gro_bitmask) { | ||||
| @@ -6375,12 +6370,29 @@ static int napi_poll(struct napi_struct | ||||
|  	if (unlikely(!list_empty(&n->poll_list))) { | ||||
|  		pr_warn_once("%s: Budget exhausted after napi rescheduled\n", | ||||
|  			     n->dev ? n->dev->name : "backlog"); | ||||
| -		goto out_unlock; | ||||
| +		return work; | ||||
|  	} | ||||
|   | ||||
| -	list_add_tail(&n->poll_list, repoll); | ||||
| +	*repoll = true; | ||||
| + | ||||
| +	return work; | ||||
| +} | ||||
| + | ||||
| +static int napi_poll(struct napi_struct *n, struct list_head *repoll) | ||||
| +{ | ||||
| +	bool do_repoll = false; | ||||
| +	void *have; | ||||
| +	int work; | ||||
| + | ||||
| +	list_del_init(&n->poll_list); | ||||
| + | ||||
| +	have = netpoll_poll_lock(n); | ||||
| + | ||||
| +	work = __napi_poll(n, &do_repoll); | ||||
| + | ||||
| +	if (do_repoll) | ||||
| +		list_add_tail(&n->poll_list, repoll); | ||||
|   | ||||
| -out_unlock: | ||||
|  	netpoll_poll_unlock(have); | ||||
|   | ||||
|  	return work; | ||||
| @@ -1,245 +0,0 @@ | ||||
| From: Wei Wang <weiwan@google.com> | ||||
| Date: Mon, 8 Feb 2021 11:34:09 -0800 | ||||
| Subject: [PATCH] net: implement threaded-able napi poll loop support | ||||
|  | ||||
| This patch allows running each napi poll loop inside its own | ||||
| kernel thread. | ||||
| The kthread is created during netif_napi_add() if dev->threaded | ||||
| is set. And threaded mode is enabled in napi_enable(). We will | ||||
| provide a way to set dev->threaded and enable threaded mode | ||||
| without a device up/down in the following patch. | ||||
|  | ||||
| Once that threaded mode is enabled and the kthread is | ||||
| started, napi_schedule() will wake-up such thread instead | ||||
| of scheduling the softirq. | ||||
|  | ||||
| The threaded poll loop behaves quite likely the net_rx_action, | ||||
| but it does not have to manipulate local irqs and uses | ||||
| an explicit scheduling point based on netdev_budget. | ||||
|  | ||||
| Co-developed-by: Paolo Abeni <pabeni@redhat.com> | ||||
| Signed-off-by: Paolo Abeni <pabeni@redhat.com> | ||||
| Co-developed-by: Hannes Frederic Sowa <hannes@stressinduktion.org> | ||||
| Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org> | ||||
| Co-developed-by: Jakub Kicinski <kuba@kernel.org> | ||||
| Signed-off-by: Jakub Kicinski <kuba@kernel.org> | ||||
| Signed-off-by: Wei Wang <weiwan@google.com> | ||||
| Reviewed-by: Alexander Duyck <alexanderduyck@fb.com> | ||||
| Signed-off-by: David S. Miller <davem@davemloft.net> | ||||
| --- | ||||
|  | ||||
| --- a/include/linux/netdevice.h | ||||
| +++ b/include/linux/netdevice.h | ||||
| @@ -319,6 +319,7 @@ struct napi_struct { | ||||
|  	struct list_head	dev_list; | ||||
|  	struct hlist_node	napi_hash_node; | ||||
|  	unsigned int		napi_id; | ||||
| +	struct task_struct	*thread; | ||||
|  }; | ||||
|   | ||||
|  enum { | ||||
| @@ -326,6 +327,7 @@ enum { | ||||
|  	NAPI_STATE_DISABLE,	/* Disable pending */ | ||||
|  	NAPI_STATE_NPSVC,	/* Netpoll - don't dequeue from poll_list */ | ||||
|  	NAPI_STATE_HASHED,	/* In NAPI hash */ | ||||
| +	NAPI_STATE_THREADED,	/* The poll is performed inside its own thread*/ | ||||
|  }; | ||||
|   | ||||
|  enum gro_result { | ||||
| @@ -501,13 +503,7 @@ void napi_disable(struct napi_struct *n) | ||||
|   * Resume NAPI from being scheduled on this context. | ||||
|   * Must be paired with napi_disable. | ||||
|   */ | ||||
| -static inline void napi_enable(struct napi_struct *n) | ||||
| -{ | ||||
| -	BUG_ON(!test_bit(NAPI_STATE_SCHED, &n->state)); | ||||
| -	smp_mb__before_atomic(); | ||||
| -	clear_bit(NAPI_STATE_SCHED, &n->state); | ||||
| -	clear_bit(NAPI_STATE_NPSVC, &n->state); | ||||
| -} | ||||
| +void napi_enable(struct napi_struct *n); | ||||
|   | ||||
|  /** | ||||
|   *	napi_synchronize - wait until NAPI is not running | ||||
| @@ -1573,6 +1569,8 @@ enum netdev_priv_flags_ext { | ||||
|   *			switch driver and used to set the phys state of the | ||||
|   *			switch port. | ||||
|   * | ||||
| + *	@threaded:	napi threaded mode is enabled | ||||
| + * | ||||
|   *	FIXME: cleanup struct net_device such that network protocol info | ||||
|   *	moves out. | ||||
|   */ | ||||
| @@ -1852,6 +1850,7 @@ struct net_device { | ||||
|  	struct phy_device *phydev; | ||||
|  	struct lock_class_key *qdisc_tx_busylock; | ||||
|  	bool proto_down; | ||||
| +	unsigned		threaded:1; | ||||
|  }; | ||||
|  #define to_net_dev(d) container_of(d, struct net_device, dev) | ||||
|   | ||||
| --- a/net/core/dev.c | ||||
| +++ b/net/core/dev.c | ||||
| @@ -94,6 +94,7 @@ | ||||
|  #include <linux/ethtool.h> | ||||
|  #include <linux/notifier.h> | ||||
|  #include <linux/skbuff.h> | ||||
| +#include <linux/kthread.h> | ||||
|  #include <net/net_namespace.h> | ||||
|  #include <net/sock.h> | ||||
|  #include <linux/rtnetlink.h> | ||||
| @@ -1304,6 +1305,27 @@ void netdev_notify_peers(struct net_devi | ||||
|  } | ||||
|  EXPORT_SYMBOL(netdev_notify_peers); | ||||
|   | ||||
| +static int napi_threaded_poll(void *data); | ||||
| + | ||||
| +static int napi_kthread_create(struct napi_struct *n) | ||||
| +{ | ||||
| +	int err = 0; | ||||
| + | ||||
| +	/* Create and wake up the kthread once to put it in | ||||
| +	 * TASK_INTERRUPTIBLE mode to avoid the blocked task | ||||
| +	 * warning and work with loadavg. | ||||
| +	 */ | ||||
| +	n->thread = kthread_run(napi_threaded_poll, n, "napi/%s-%d", | ||||
| +				n->dev->name, n->napi_id); | ||||
| +	if (IS_ERR(n->thread)) { | ||||
| +		err = PTR_ERR(n->thread); | ||||
| +		pr_err("kthread_run failed with err %d\n", err); | ||||
| +		n->thread = NULL; | ||||
| +	} | ||||
| + | ||||
| +	return err; | ||||
| +} | ||||
| + | ||||
|  static int __dev_open(struct net_device *dev) | ||||
|  { | ||||
|  	const struct net_device_ops *ops = dev->netdev_ops; | ||||
| @@ -3248,6 +3270,21 @@ int weight_p __read_mostly = 64; | ||||
|  static inline void ____napi_schedule(struct softnet_data *sd, | ||||
|  				     struct napi_struct *napi) | ||||
|  { | ||||
| +	struct task_struct *thread; | ||||
| + | ||||
| +	if (test_bit(NAPI_STATE_THREADED, &napi->state)) { | ||||
| +		/* Paired with smp_mb__before_atomic() in | ||||
| +		 * napi_enable(). Use READ_ONCE() to guarantee | ||||
| +		 * a complete read on napi->thread. Only call | ||||
| +		 * wake_up_process() when it's not NULL. | ||||
| +		 */ | ||||
| +		thread = READ_ONCE(napi->thread); | ||||
| +		if (thread) { | ||||
| +			wake_up_process(thread); | ||||
| +			return; | ||||
| +		} | ||||
| +	} | ||||
| + | ||||
|  	list_add_tail(&napi->poll_list, &sd->poll_list); | ||||
|  	__raise_softirq_irqoff(NET_RX_SOFTIRQ); | ||||
|  } | ||||
| @@ -4828,9 +4865,33 @@ void netif_napi_add(struct net_device *d | ||||
|  	napi->poll_owner = -1; | ||||
|  #endif | ||||
|  	set_bit(NAPI_STATE_SCHED, &napi->state); | ||||
| +	/* Create kthread for this napi if dev->threaded is set. | ||||
| +	 * Clear dev->threaded if kthread creation failed so that | ||||
| +	 * threaded mode will not be enabled in napi_enable(). | ||||
| +	 */ | ||||
| +	if (dev->threaded && napi_kthread_create(napi)) | ||||
| +		dev->threaded = 0; | ||||
|  } | ||||
|  EXPORT_SYMBOL(netif_napi_add); | ||||
|   | ||||
| +/** | ||||
| + *	napi_enable - enable NAPI scheduling | ||||
| + *	@n: NAPI context | ||||
| + * | ||||
| + * Resume NAPI from being scheduled on this context. | ||||
| + * Must be paired with napi_disable. | ||||
| + */ | ||||
| +void napi_enable(struct napi_struct *n) | ||||
| +{ | ||||
| +	BUG_ON(!test_bit(NAPI_STATE_SCHED, &n->state)); | ||||
| +	smp_mb__before_atomic(); | ||||
| +	clear_bit(NAPI_STATE_SCHED, &n->state); | ||||
| +	clear_bit(NAPI_STATE_NPSVC, &n->state); | ||||
| +	if (n->dev->threaded && n->thread) | ||||
| +		set_bit(NAPI_STATE_THREADED, &n->state); | ||||
| +} | ||||
| +EXPORT_SYMBOL(napi_enable); | ||||
| + | ||||
|  void napi_disable(struct napi_struct *n) | ||||
|  { | ||||
|  	might_sleep(); | ||||
| @@ -4844,6 +4905,7 @@ void napi_disable(struct napi_struct *n) | ||||
|  	hrtimer_cancel(&n->timer); | ||||
|   | ||||
|  	clear_bit(NAPI_STATE_DISABLE, &n->state); | ||||
| +	clear_bit(NAPI_STATE_THREADED, &n->state); | ||||
|  } | ||||
|  EXPORT_SYMBOL(napi_disable); | ||||
|   | ||||
| @@ -4855,6 +4917,11 @@ void netif_napi_del(struct napi_struct * | ||||
|  	kfree_skb_list(napi->gro_list); | ||||
|  	napi->gro_list = NULL; | ||||
|  	napi->gro_count = 0; | ||||
| + | ||||
| +	if (napi->thread) { | ||||
| +		kthread_stop(napi->thread); | ||||
| +		napi->thread = NULL; | ||||
| +	} | ||||
|  } | ||||
|  EXPORT_SYMBOL(netif_napi_del); | ||||
|   | ||||
| @@ -4940,6 +5007,50 @@ static int napi_poll(struct napi_struct | ||||
|  	return work; | ||||
|  } | ||||
|   | ||||
| +static int napi_thread_wait(struct napi_struct *napi) | ||||
| +{ | ||||
| +	set_current_state(TASK_INTERRUPTIBLE); | ||||
| + | ||||
| +	while (!kthread_should_stop() && !napi_disable_pending(napi)) { | ||||
| +		if (test_bit(NAPI_STATE_SCHED, &napi->state)) { | ||||
| +			WARN_ON(!list_empty(&napi->poll_list)); | ||||
| +			__set_current_state(TASK_RUNNING); | ||||
| +			return 0; | ||||
| +		} | ||||
| + | ||||
| +		schedule(); | ||||
| +		set_current_state(TASK_INTERRUPTIBLE); | ||||
| +	} | ||||
| +	__set_current_state(TASK_RUNNING); | ||||
| +	return -1; | ||||
| +} | ||||
| + | ||||
| +static int napi_threaded_poll(void *data) | ||||
| +{ | ||||
| +	struct napi_struct *napi = data; | ||||
| +	void *have; | ||||
| + | ||||
| +	while (!napi_thread_wait(napi)) { | ||||
| +		for (;;) { | ||||
| +			bool repoll = false; | ||||
| + | ||||
| +			local_bh_disable(); | ||||
| + | ||||
| +			have = netpoll_poll_lock(napi); | ||||
| +			__napi_poll(napi, &repoll); | ||||
| +			netpoll_poll_unlock(have); | ||||
| + | ||||
| +			local_bh_enable(); | ||||
| + | ||||
| +			if (!repoll) | ||||
| +				break; | ||||
| + | ||||
| +			cond_resched(); | ||||
| +		} | ||||
| +	} | ||||
| +	return 0; | ||||
| +} | ||||
| + | ||||
|  static void net_rx_action(struct softirq_action *h) | ||||
|  { | ||||
|  	struct softnet_data *sd = this_cpu_ptr(&softnet_data); | ||||
| @@ -1,156 +0,0 @@ | ||||
| From: Wei Wang <weiwan@google.com> | ||||
| Date: Mon, 8 Feb 2021 11:34:10 -0800 | ||||
| Subject: [PATCH] net: add sysfs attribute to control napi threaded mode | ||||
|  | ||||
| This patch adds a new sysfs attribute to the network device class. | ||||
| Said attribute provides a per-device control to enable/disable the | ||||
| threaded mode for all the napi instances of the given network device, | ||||
| without the need for a device up/down. | ||||
| User sets it to 1 or 0 to enable or disable threaded mode. | ||||
| Note: when switching between threaded and the current softirq based mode | ||||
| for a napi instance, it will not immediately take effect if the napi is | ||||
| currently being polled. The mode switch will happen for the next time | ||||
| napi_schedule() is called. | ||||
|  | ||||
| Co-developed-by: Paolo Abeni <pabeni@redhat.com> | ||||
| Signed-off-by: Paolo Abeni <pabeni@redhat.com> | ||||
| Co-developed-by: Hannes Frederic Sowa <hannes@stressinduktion.org> | ||||
| Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org> | ||||
| Co-developed-by: Felix Fietkau <nbd@nbd.name> | ||||
| Signed-off-by: Felix Fietkau <nbd@nbd.name> | ||||
| Signed-off-by: Wei Wang <weiwan@google.com> | ||||
| Reviewed-by: Alexander Duyck <alexanderduyck@fb.com> | ||||
| Signed-off-by: David S. Miller <davem@davemloft.net> | ||||
| --- | ||||
|  | ||||
| --- a/include/linux/netdevice.h | ||||
| +++ b/include/linux/netdevice.h | ||||
| @@ -496,6 +496,8 @@ void napi_hash_del(struct napi_struct *n | ||||
|   */ | ||||
|  void napi_disable(struct napi_struct *n); | ||||
|   | ||||
| +int dev_set_threaded(struct net_device *dev, bool threaded); | ||||
| + | ||||
|  /** | ||||
|   *	napi_enable - enable NAPI scheduling | ||||
|   *	@n: napi context | ||||
| --- a/net/core/dev.c | ||||
| +++ b/net/core/dev.c | ||||
| @@ -3274,8 +3274,9 @@ static inline void ____napi_schedule(str | ||||
|   | ||||
|  	if (test_bit(NAPI_STATE_THREADED, &napi->state)) { | ||||
|  		/* Paired with smp_mb__before_atomic() in | ||||
| -		 * napi_enable(). Use READ_ONCE() to guarantee | ||||
| -		 * a complete read on napi->thread. Only call | ||||
| +		 * napi_enable()/dev_set_threaded(). | ||||
| +		 * Use READ_ONCE() to guarantee a complete | ||||
| +		 * read on napi->thread. Only call | ||||
|  		 * wake_up_process() when it's not NULL. | ||||
|  		 */ | ||||
|  		thread = READ_ONCE(napi->thread); | ||||
| @@ -4844,6 +4845,49 @@ static enum hrtimer_restart napi_watchdo | ||||
|  	return HRTIMER_NORESTART; | ||||
|  } | ||||
|   | ||||
| +int dev_set_threaded(struct net_device *dev, bool threaded) | ||||
| +{ | ||||
| +	struct napi_struct *napi; | ||||
| +	int err = 0; | ||||
| + | ||||
| +	if (dev->threaded == threaded) | ||||
| +		return 0; | ||||
| + | ||||
| +	if (threaded) { | ||||
| +		list_for_each_entry(napi, &dev->napi_list, dev_list) { | ||||
| +			if (!napi->thread) { | ||||
| +				err = napi_kthread_create(napi); | ||||
| +				if (err) { | ||||
| +					threaded = false; | ||||
| +					break; | ||||
| +				} | ||||
| +			} | ||||
| +		} | ||||
| +	} | ||||
| + | ||||
| +	dev->threaded = threaded; | ||||
| + | ||||
| +	/* Make sure kthread is created before THREADED bit | ||||
| +	 * is set. | ||||
| +	 */ | ||||
| +	smp_mb__before_atomic(); | ||||
| + | ||||
| +	/* Setting/unsetting threaded mode on a napi might not immediately | ||||
| +	 * take effect, if the current napi instance is actively being | ||||
| +	 * polled. In this case, the switch between threaded mode and | ||||
| +	 * softirq mode will happen in the next round of napi_schedule(). | ||||
| +	 * This should not cause hiccups/stalls to the live traffic. | ||||
| +	 */ | ||||
| +	list_for_each_entry(napi, &dev->napi_list, dev_list) { | ||||
| +		if (threaded) | ||||
| +			set_bit(NAPI_STATE_THREADED, &napi->state); | ||||
| +		else | ||||
| +			clear_bit(NAPI_STATE_THREADED, &napi->state); | ||||
| +	} | ||||
| + | ||||
| +	return err; | ||||
| +} | ||||
| + | ||||
|  void netif_napi_add(struct net_device *dev, struct napi_struct *napi, | ||||
|  		    int (*poll)(struct napi_struct *, int), int weight) | ||||
|  { | ||||
| --- a/net/core/net-sysfs.c | ||||
| +++ b/net/core/net-sysfs.c | ||||
| @@ -486,6 +486,45 @@ static ssize_t phys_switch_id_show(struc | ||||
|  } | ||||
|  static DEVICE_ATTR_RO(phys_switch_id); | ||||
|   | ||||
| +static ssize_t threaded_show(struct device *dev, | ||||
| +			     struct device_attribute *attr, char *buf) | ||||
| +{ | ||||
| +	struct net_device *netdev = to_net_dev(dev); | ||||
| +	ssize_t ret = -EINVAL; | ||||
| + | ||||
| +	if (!rtnl_trylock()) | ||||
| +		return restart_syscall(); | ||||
| + | ||||
| +	if (dev_isalive(netdev)) | ||||
| +		ret = sprintf(buf, fmt_dec, netdev->threaded); | ||||
| + | ||||
| +	rtnl_unlock(); | ||||
| +	return ret; | ||||
| +} | ||||
| + | ||||
| +static int modify_napi_threaded(struct net_device *dev, unsigned long val) | ||||
| +{ | ||||
| +	int ret; | ||||
| + | ||||
| +	if (list_empty(&dev->napi_list)) | ||||
| +		return -EOPNOTSUPP; | ||||
| + | ||||
| +	if (val != 0 && val != 1) | ||||
| +		return -EOPNOTSUPP; | ||||
| + | ||||
| +	ret = dev_set_threaded(dev, val); | ||||
| + | ||||
| +	return ret; | ||||
| +} | ||||
| + | ||||
| +static ssize_t threaded_store(struct device *dev, | ||||
| +			      struct device_attribute *attr, | ||||
| +			      const char *buf, size_t len) | ||||
| +{ | ||||
| +	return netdev_store(dev, attr, buf, len, modify_napi_threaded); | ||||
| +} | ||||
| +static DEVICE_ATTR_RW(threaded); | ||||
| + | ||||
|  static struct attribute *net_class_attrs[] = { | ||||
|  	&dev_attr_netdev_group.attr, | ||||
|  	&dev_attr_type.attr, | ||||
| @@ -514,6 +553,7 @@ static struct attribute *net_class_attrs | ||||
|  	&dev_attr_phys_port_name.attr, | ||||
|  	&dev_attr_phys_switch_id.attr, | ||||
|  	&dev_attr_proto_down.attr, | ||||
| +	&dev_attr_threaded.attr, | ||||
|  	NULL, | ||||
|  }; | ||||
|  ATTRIBUTE_GROUPS(net_class); | ||||
| @@ -1,75 +0,0 @@ | ||||
| From: Wei Wang <weiwan@google.com> | ||||
| Date: Mon, 1 Mar 2021 17:21:13 -0800 | ||||
| Subject: [PATCH] net: fix race between napi kthread mode and busy poll | ||||
|  | ||||
| Currently, napi_thread_wait() checks for NAPI_STATE_SCHED bit to | ||||
| determine if the kthread owns this napi and could call napi->poll() on | ||||
| it. However, if socket busy poll is enabled, it is possible that the | ||||
| busy poll thread grabs this SCHED bit (after the previous napi->poll() | ||||
| invokes napi_complete_done() and clears SCHED bit) and tries to poll | ||||
| on the same napi. napi_disable() could grab the SCHED bit as well. | ||||
| This patch tries to fix this race by adding a new bit | ||||
| NAPI_STATE_SCHED_THREADED in napi->state. This bit gets set in | ||||
| ____napi_schedule() if the threaded mode is enabled, and gets cleared | ||||
| in napi_complete_done(), and we only poll the napi in kthread if this | ||||
| bit is set. This helps distinguish the ownership of the napi between | ||||
| kthread and other scenarios and fixes the race issue. | ||||
|  | ||||
| Fixes: 29863d41bb6e ("net: implement threaded-able napi poll loop support") | ||||
| Reported-by: Martin Zaharinov <micron10@gmail.com> | ||||
| Suggested-by: Jakub Kicinski <kuba@kernel.org> | ||||
| Signed-off-by: Wei Wang <weiwan@google.com> | ||||
| Cc: Alexander Duyck <alexanderduyck@fb.com> | ||||
| Cc: Eric Dumazet <edumazet@google.com> | ||||
| Cc: Paolo Abeni <pabeni@redhat.com> | ||||
| Cc: Hannes Frederic Sowa <hannes@stressinduktion.org> | ||||
| --- | ||||
|  | ||||
| --- a/include/linux/netdevice.h | ||||
| +++ b/include/linux/netdevice.h | ||||
| @@ -328,6 +328,7 @@ enum { | ||||
|  	NAPI_STATE_NPSVC,	/* Netpoll - don't dequeue from poll_list */ | ||||
|  	NAPI_STATE_HASHED,	/* In NAPI hash */ | ||||
|  	NAPI_STATE_THREADED,	/* The poll is performed inside its own thread*/ | ||||
| +	NAPI_STATE_SCHED_THREADED,	/* Napi is currently scheduled in threaded mode */ | ||||
|  }; | ||||
|   | ||||
|  enum gro_result { | ||||
| --- a/net/core/dev.c | ||||
| +++ b/net/core/dev.c | ||||
| @@ -3281,6 +3281,8 @@ static inline void ____napi_schedule(str | ||||
|  		 */ | ||||
|  		thread = READ_ONCE(napi->thread); | ||||
|  		if (thread) { | ||||
| +			if (thread->state != TASK_INTERRUPTIBLE) | ||||
| +				set_bit(NAPI_STATE_SCHED_THREADED, &napi->state); | ||||
|  			wake_up_process(thread); | ||||
|  			return; | ||||
|  		} | ||||
| @@ -5053,16 +5055,25 @@ static int napi_poll(struct napi_struct | ||||
|   | ||||
|  static int napi_thread_wait(struct napi_struct *napi) | ||||
|  { | ||||
| +	bool woken = false; | ||||
| + | ||||
|  	set_current_state(TASK_INTERRUPTIBLE); | ||||
|   | ||||
|  	while (!kthread_should_stop() && !napi_disable_pending(napi)) { | ||||
| -		if (test_bit(NAPI_STATE_SCHED, &napi->state)) { | ||||
| +		/* Testing SCHED_THREADED bit here to make sure the current | ||||
| +		 * kthread owns this napi and could poll on this napi. | ||||
| +		 * Testing SCHED bit is not enough because SCHED bit might be | ||||
| +		 * set by some other busy poll thread or by napi_disable(). | ||||
| +		 */ | ||||
| +		if (test_bit(NAPI_STATE_SCHED_THREADED, &napi->state) || woken) { | ||||
|  			WARN_ON(!list_empty(&napi->poll_list)); | ||||
|  			__set_current_state(TASK_RUNNING); | ||||
|  			return 0; | ||||
|  		} | ||||
|   | ||||
|  		schedule(); | ||||
| +		/* woken being true indicates this thread owns this napi. */ | ||||
| +		woken = true; | ||||
|  		set_current_state(TASK_INTERRUPTIBLE); | ||||
|  	} | ||||
|  	__set_current_state(TASK_RUNNING); | ||||
| @@ -1,53 +0,0 @@ | ||||
| From: Paolo Abeni <pabeni@redhat.com> | ||||
| Date: Fri, 9 Apr 2021 17:24:17 +0200 | ||||
| Subject: [PATCH] net: fix hangup on napi_disable for threaded napi | ||||
|  | ||||
| napi_disable() is subject to an hangup, when the threaded | ||||
| mode is enabled and the napi is under heavy traffic. | ||||
|  | ||||
| If the relevant napi has been scheduled and the napi_disable() | ||||
| kicks in before the next napi_threaded_wait() completes - so | ||||
| that the latter quits due to the napi_disable_pending() condition, | ||||
| the existing code leaves the NAPI_STATE_SCHED bit set and the | ||||
| napi_disable() loop waiting for such bit will hang. | ||||
|  | ||||
| This patch addresses the issue by dropping the NAPI_STATE_DISABLE | ||||
| bit test in napi_thread_wait(). The later napi_threaded_poll() | ||||
| iteration will take care of clearing the NAPI_STATE_SCHED. | ||||
|  | ||||
| This also addresses a related problem reported by Jakub: | ||||
| before this patch a napi_disable()/napi_enable() pair killed | ||||
| the napi thread, effectively disabling the threaded mode. | ||||
| On the patched kernel napi_disable() simply stops scheduling | ||||
| the relevant thread. | ||||
|  | ||||
| v1 -> v2: | ||||
|   - let the main napi_thread_poll() loop clear the SCHED bit | ||||
|  | ||||
| Reported-by: Jakub Kicinski <kuba@kernel.org> | ||||
| Fixes: 29863d41bb6e ("net: implement threaded-able napi poll loop support") | ||||
| Signed-off-by: Paolo Abeni <pabeni@redhat.com> | ||||
| Reviewed-by: Eric Dumazet <edumazet@google.com> | ||||
| Link: https://lore.kernel.org/r/883923fa22745a9589e8610962b7dc59df09fb1f.1617981844.git.pabeni@redhat.com | ||||
| Signed-off-by: Jakub Kicinski <kuba@kernel.org> | ||||
| --- | ||||
|  | ||||
| --- a/net/core/dev.c | ||||
| +++ b/net/core/dev.c | ||||
| @@ -5059,7 +5059,7 @@ static int napi_thread_wait(struct napi_ | ||||
|   | ||||
|  	set_current_state(TASK_INTERRUPTIBLE); | ||||
|   | ||||
| -	while (!kthread_should_stop() && !napi_disable_pending(napi)) { | ||||
| +	while (!kthread_should_stop()) { | ||||
|  		/* Testing SCHED_THREADED bit here to make sure the current | ||||
|  		 * kthread owns this napi and could poll on this napi. | ||||
|  		 * Testing SCHED bit is not enough because SCHED bit might be | ||||
| @@ -5077,6 +5077,7 @@ static int napi_thread_wait(struct napi_ | ||||
|  		set_current_state(TASK_INTERRUPTIBLE); | ||||
|  	} | ||||
|  	__set_current_state(TASK_RUNNING); | ||||
| + | ||||
|  	return -1; | ||||
|  } | ||||
|   | ||||
| @@ -7,12 +7,15 @@ boot() { | ||||
| 	. /lib/functions.sh | ||||
| 	mkdir -p /certificates /etc/ucentral/ | ||||
| 	local mtd=$(find_mtd_index certificates) | ||||
| 	 | ||||
| 	if [ "$(head -c 4 /dev/mtd$mtd)" == "hsqs" ]; then | ||||
| 		mount -t squashfs /dev/mtdblock$mtd /certificates | ||||
| 	else | ||||
| 		[ -n "$mtd" -a -f /sys/class/mtd/mtd$mtd/oobsize ] && ubiattach -p /dev/mtd$mtd | ||||
| 		if [ -n "$(ubinfo -a | grep certificates)" ]; then | ||||
| 			[ -e /dev/ubi0 ] && mount -t ubifs ubi0:certificates /certificates | ||||
| 			[ -e /dev/ubi1 ] && mount -t ubifs ubi1:certificates /certificates | ||||
| 	else | ||||
| 		mount -t squashfs /dev/mtdblock$mtd /certificates | ||||
| 		fi | ||||
| 	fi | ||||
| 	[ -f /certificates/dev-id ] && { | ||||
| 		cp /certificates/*.pem /etc/ucentral/ | ||||
|   | ||||
| @@ -6,7 +6,7 @@ PKG_RELEASE:=1 | ||||
| PKG_SOURCE_URL=https://github.com/blogic/ucentral-schema.git | ||||
| PKG_SOURCE_PROTO:=git | ||||
| PKG_SOURCE_DATE:=2022-01-17 | ||||
| PKG_SOURCE_VERSION:=07cb6e9fc7a4a8f9868e6efd29edcaf1f3245716 | ||||
| PKG_SOURCE_VERSION:=1c4654498b0fbb36f158d1370d3a283d984e746b | ||||
|  | ||||
| PKG_MAINTAINER:=John Crispin <john@phrozen.org> | ||||
| PKG_LICENSE:=BSD-3-Clause | ||||
|   | ||||
| @@ -3,12 +3,12 @@ | ||||
| 	"radios": [ | ||||
| 		{ | ||||
| 			"band": "2G", | ||||
| 			"country": "CA", | ||||
| 			"country": "US", | ||||
| 			"channel-mode": "HE", | ||||
| 			"channel-width": 40 | ||||
| 		}, { | ||||
| 			"band": "5G", | ||||
| 			"country": "CA", | ||||
| 			"country": "US", | ||||
| 			"channel-mode": "HE", | ||||
| 			"channel-width": 80 | ||||
| 		} | ||||
|   | ||||
							
								
								
									
										13
									
								
								feeds/ucentral/ucentral-schema/files/usr/bin/tcpdump_timeout
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										13
									
								
								feeds/ucentral/ucentral-schema/files/usr/bin/tcpdump_timeout
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| n=$1 | ||||
| shift | ||||
|  | ||||
| if [ $n -eq 0]; then | ||||
| 	tcpdump $@ | ||||
| else | ||||
| 	tcpdump $@ & | ||||
| 	x=$! | ||||
| 	sleep $n | ||||
| 	kill $x | ||||
| fi | ||||
| @@ -0,0 +1,16 @@ | ||||
| #!/usr/bin/ucode -R | ||||
|  | ||||
| let nl = require("nl80211"); | ||||
| let def = nl.const; | ||||
|  | ||||
| function phy_get() { | ||||
| 	let res = nl.request(def.NL80211_CMD_GET_WIPHY, def.NLM_F_DUMP, { split_wiphy_dump: true }); | ||||
|  | ||||
| 	if (res === false) | ||||
| 		warn("Unable to lookup phys: " + nl.error() + "\n"); | ||||
|  | ||||
| 	return res; | ||||
| } | ||||
|  | ||||
| let phys = phy_get(); | ||||
| printf("%d\n", phys[0].max_ap_assoc); | ||||
| @@ -1,15 +1,15 @@ | ||||
| From 1c89014c7c0e68e1eeb851ea538fb67a57988dd4 Mon Sep 17 00:00:00 2001 | ||||
| From eac420899717e2d23f6d13304bd67278a7e91730 Mon Sep 17 00:00:00 2001 | ||||
| From: John Crispin <john@phrozen.org> | ||||
| Date: Thu, 20 Jan 2022 10:48:35 +0100 | ||||
| Subject: [PATCH 1/2] fixes | ||||
|  | ||||
| --- | ||||
|  lib/nl80211.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++---- | ||||
|  lib/nl80211.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++---- | ||||
|  lib/rtnl.c    |  1 + | ||||
|  2 files changed, 69 insertions(+), 5 deletions(-) | ||||
|  2 files changed, 71 insertions(+), 6 deletions(-) | ||||
|  | ||||
| diff --git a/lib/nl80211.c b/lib/nl80211.c | ||||
| index fc24fb8..e308ebc 100644 | ||||
| index fc24fb8..1d0871a 100644 | ||||
| --- a/lib/nl80211.c | ||||
| +++ b/lib/nl80211.c | ||||
| @@ -45,6 +45,8 @@ limitations under the License. | ||||
| @@ -132,7 +132,7 @@ index fc24fb8..e308ebc 100644 | ||||
|  	.attrs = { | ||||
|  		{ NL80211_STA_INFO_INACTIVE_TIME, "inactive_time", DT_U32, 0, NULL }, | ||||
|  		{ NL80211_STA_INFO_RX_BYTES, "rx_bytes", DT_U32, 0, NULL }, | ||||
| @@ -724,15 +783,16 @@ static const uc_nl_nested_spec_t nl80211_sta_info_nla = { | ||||
| @@ -724,21 +783,22 @@ static const uc_nl_nested_spec_t nl80211_sta_info_nla = { | ||||
|  		{ NL80211_STA_INFO_NONPEER_PM, "nonpeer_pm", DT_U32, 0, NULL }, | ||||
|  		{ NL80211_STA_INFO_CHAIN_SIGNAL, "chain_signal", DT_S8, DF_MULTIPLE|DF_AUTOIDX, NULL }, | ||||
|  		{ NL80211_STA_INFO_CHAIN_SIGNAL_AVG, "chain_signal_avg", DT_S8, DF_MULTIPLE|DF_AUTOIDX, NULL }, | ||||
| @@ -152,7 +152,22 @@ index fc24fb8..e308ebc 100644 | ||||
|  	} | ||||
|  }; | ||||
|   | ||||
| @@ -1044,6 +1104,9 @@ uc_nl_parse_attrs(struct nl_msg *msg, char *base, const uc_nl_attr_spec_t *attrs | ||||
|  static const uc_nl_nested_spec_t nl80211_msg = { | ||||
|  	.headsize = 0, | ||||
| -	.nattrs = 124, | ||||
| +	.nattrs = 125, | ||||
|  	.attrs = { | ||||
|  		{ NL80211_ATTR_4ADDR, "4addr", DT_U8, 0, NULL }, | ||||
|  		{ NL80211_ATTR_AIRTIME_WEIGHT, "airtime_weight", DT_U16, 0, NULL }, | ||||
| @@ -864,6 +924,7 @@ static const uc_nl_nested_spec_t nl80211_msg = { | ||||
|  		{ NL80211_ATTR_WPA_VERSIONS, "wpa_versions", DT_U32, 0, NULL }, | ||||
|  		{ NL80211_ATTR_SUPPORTED_IFTYPES, "supported_iftypes", DT_NESTED, 0, &nl80211_ifcomb_limit_types_nla }, | ||||
|  		{ NL80211_ATTR_SOFTWARE_IFTYPES, "software_iftypes", DT_NESTED, 0, &nl80211_ifcomb_limit_types_nla }, | ||||
| +		{ NL80211_ATTR_MAX_AP_ASSOC_STA, "max_ap_assoc", DT_U16, 0, NULL }, | ||||
|  	} | ||||
|  }; | ||||
|   | ||||
| @@ -1044,6 +1105,9 @@ uc_nl_parse_attrs(struct nl_msg *msg, char *base, const uc_nl_attr_spec_t *attrs | ||||
|  	bool exists; | ||||
|   | ||||
|  	for (i = 0; i < nattrs; i++) { | ||||
|   | ||||
| @@ -20,6 +20,12 @@ $(Package/ath11k-firmware-default) | ||||
|   DEPENDS:=@TARGET_ipq807x_ipq50xx | ||||
| endef | ||||
|  | ||||
| define Package/ath11k-firmware-ipq50xx-spruce | ||||
| $(Package/ath11k-firmware-default) | ||||
|   TITLE:=ath11k firmware for IPQ50xx devices with spruce | ||||
|   DEPENDS:=@TARGET_ipq807x_ipq50xx | ||||
| endef | ||||
|  | ||||
| define Package/ath11k-firmware-ipq60xx | ||||
| $(Package/ath11k-firmware-default) | ||||
|   TITLE:=ath11k firmware for IPQ60xx devices | ||||
| @@ -48,6 +54,10 @@ define Package/ath11k-firmware-ipq50xx/description | ||||
| Standard ath11k firmware for IPQ50xx from QCA | ||||
| endef | ||||
|  | ||||
| define Package/ath11k-firmware-ipq50xx-spruce/description | ||||
| Standard ath11k firmware for IPQ50xx/spruce from QCA | ||||
| endef | ||||
|  | ||||
| define Package/ath11k-firmware-ipq60xx/description | ||||
| Standard ath11k firmware for IPQ60xx from QCA | ||||
| endef | ||||
| @@ -74,6 +84,12 @@ define Package/ath11k-firmware-ipq50xx/install | ||||
| 		$(1)/lib/firmware/IPQ5018/ | ||||
| endef | ||||
|  | ||||
| define Package/ath11k-firmware-ipq50xx-spruce/install | ||||
| 	$(INSTALL_DIR) $(1)/lib/firmware/IPQ5018 | ||||
| 	$(INSTALL_DATA) ./files/IPQ5018_spruce/* \ | ||||
| 		$(1)/lib/firmware/IPQ5018/ | ||||
| endef | ||||
|  | ||||
| define Package/ath11k-firmware-ipq60xx/install | ||||
| 	$(INSTALL_DIR) $(1)/lib/firmware/IPQ6018 | ||||
| 	$(INSTALL_DATA) ./files/IPQ6018/* \ | ||||
| @@ -87,6 +103,7 @@ define Package/ath11k-firmware-ipq807x/install | ||||
| endef | ||||
|  | ||||
| define Package/ath11k-firmware-qcn6122/install | ||||
| 	$(INSTALL_DIR) $(1)/lib/firmware/ath11k/qcn6122 | ||||
| 	$(INSTALL_DIR) $(1)/lib/firmware/qcn6122 | ||||
| 	$(INSTALL_DATA) ./files/QCN6122/* \ | ||||
| 		$(1)/lib/firmware/qcn6122/ | ||||
| @@ -99,6 +116,7 @@ define Package/ath11k-firmware-qcn9000/install | ||||
| endef | ||||
|  | ||||
| $(eval $(call BuildPackage,ath11k-firmware-ipq50xx)) | ||||
| $(eval $(call BuildPackage,ath11k-firmware-ipq50xx-spruce)) | ||||
| $(eval $(call BuildPackage,ath11k-firmware-ipq60xx)) | ||||
| $(eval $(call BuildPackage,ath11k-firmware-ipq807x)) | ||||
| $(eval $(call BuildPackage,ath11k-firmware-qcn6122)) | ||||
|   | ||||
										
											Binary file not shown.
										
									
								
							| @@ -0,0 +1 @@ | ||||
| WLAN.HK.2.5.r4-00745-QCAHKSWPL_SILICONZ-1 v1 | ||||
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/m3_fw.b00
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/m3_fw.b00
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/m3_fw.b01
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/m3_fw.b01
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/m3_fw.b02
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/m3_fw.b02
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -0,0 +1,3 @@ | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/m3_fw.b00 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/m3_fw.b01 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/m3_fw.b02 | ||||
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/m3_fw.mdt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/m3_fw.mdt
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/mpnv10.bin
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/mpnv10.bin
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b00
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b00
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b01
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b01
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b02
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b02
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b03
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b03
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b04
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b04
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b05
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b05
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b07
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b07
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b08
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b08
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b09
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b09
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b10
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b10
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b11
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b11
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b13
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b13
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b14
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b14
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b15
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b15
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b16
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b16
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b17
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b17
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b18
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b18
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b20
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b20
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b21
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b21
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b22
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b22
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b23
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b23
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b25
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b25
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b26
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.b26
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -0,0 +1,23 @@ | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b00 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b01 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b02 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b03 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b04 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b05 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b07 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b08 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b09 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b10 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b11 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b13 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b14 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b15 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b16 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b17 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b18 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b20 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b21 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b22 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b23 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b25 | ||||
| build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b26 | ||||
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.mdt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-firmware/files/IPQ5018_spruce/q6_fw.mdt
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -33,6 +33,7 @@ ALLWIFIBOARDS:= \ | ||||
| 	edgecore-eap101 \ | ||||
| 	sercomm-wallaby \ | ||||
| 	edgecore-eap102 \ | ||||
| 	edgecore-eap104 \ | ||||
| 	wallys-dr6018 \ | ||||
| 	wallys-dr6018-v4 \ | ||||
| 	tplink-ex227 \ | ||||
| @@ -96,6 +97,9 @@ define ath11k-wifi-install-one | ||||
|   $(if $(filter $(suffix $(1)),.QCN9074),\ | ||||
|     $(call ath11k-wifi-install-one-to,$(1),$(2),ath11k/QCN9074/hw1.0/),\ | ||||
|   ) | ||||
|   $(if $(filter $(suffix $(1)),.QCN6122),\ | ||||
|     $(call ath11k-wifi-install-one-to,$(1),$(2),ath11k/qcn6122/hw1.0/),\ | ||||
|   ) | ||||
|  | ||||
| endef | ||||
| # Blank line required at end of above define due to foreach context | ||||
| @@ -168,6 +172,7 @@ $(eval $(call generate-ath11k-wifi-package,wallys-dr6018,Wallys DR6018)) | ||||
| $(eval $(call generate-ath11k-wifi-package,wallys-dr6018-v4,Wallys DR6018 V4)) | ||||
| $(eval $(call generate-ath11k-wifi-package,edgecore-eap101,EdgeCore EAP101)) | ||||
| $(eval $(call generate-ath11k-wifi-package,edgecore-eap102,Edgecore EAP102)) | ||||
| $(eval $(call generate-ath11k-wifi-package,edgecore-eap104,Edgecore EAP104)) | ||||
| $(eval $(call generate-ath11k-wifi-package,tplink-ex227,TP-Link EX227)) | ||||
| $(eval $(call generate-ath11k-wifi-package,tplink-ex447,TP-Link EX447)) | ||||
|  | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-wifi/board-edgecore-eap104.bin.IPQ5018
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-wifi/board-edgecore-eap104.bin.IPQ5018
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-wifi/board-edgecore-eap104.bin.QCN6122
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-wifi/board-edgecore-eap104.bin.QCN6122
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -60,7 +60,7 @@ CONFIG_RSN_PREAUTH=y | ||||
| CONFIG_EAP=y | ||||
|  | ||||
| # EAP Re-authentication Protocol (ERP) in integrated EAP server | ||||
| #CONFIG_ERP=y | ||||
| CONFIG_ERP=y | ||||
|  | ||||
| # EAP-MD5 for the integrated EAP server | ||||
| CONFIG_EAP_MD5=y | ||||
|   | ||||
| @@ -727,7 +727,7 @@ hostapd_set_bss_options() { | ||||
| 			wps_not_configured=1 | ||||
| 			[ "$macfilter" = radius ] && { | ||||
| 				append_radius_server | ||||
| 				vlan_possible = 1 | ||||
| 				vlan_possible=1 | ||||
| 			} | ||||
| 		;; | ||||
| 		psk|sae|psk-sae) | ||||
|   | ||||
							
								
								
									
										15
									
								
								feeds/wifi-ax/hostapd/patches/760-acs_exclude_dfs.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								feeds/wifi-ax/hostapd/patches/760-acs_exclude_dfs.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| Index: hostapd-2021-02-20-59e9794c/src/ap/acs.c | ||||
| =================================================================== | ||||
| --- hostapd-2021-02-20-59e9794c.orig/src/ap/acs.c | ||||
| +++ hostapd-2021-02-20-59e9794c/src/ap/acs.c | ||||
| @@ -672,6 +672,10 @@ acs_find_ideal_chan_mode(struct hostapd_ | ||||
|  			continue; | ||||
|  		} | ||||
|   | ||||
| +		if (iface->conf->acs_exclude_dfs && | ||||
| +                      (chan->flag & HOSTAPD_CHAN_RADAR)) | ||||
| +			continue; | ||||
| + | ||||
|  		/* HT40 on 5 GHz has a limited set of primary channels as per | ||||
|  		 * 11n Annex J */ | ||||
|  		if (mode->mode == HOSTAPD_MODE_IEEE80211A && | ||||
							
								
								
									
										21
									
								
								feeds/wifi-ax/mac80211/patches/pending/214-no-encap.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								feeds/wifi-ax/mac80211/patches/pending/214-no-encap.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| Index: backports-20210222_001-4.4.60-b157d2276/drivers/net/wireless/ath/ath11k/mac.c | ||||
| =================================================================== | ||||
| --- backports-20210222_001-4.4.60-b157d2276.orig/drivers/net/wireless/ath/ath11k/mac.c | ||||
| +++ backports-20210222_001-4.4.60-b157d2276/drivers/net/wireless/ath/ath11k/mac.c | ||||
| @@ -6590,6 +6590,7 @@ static int ath11k_mac_op_update_vif_offl | ||||
|  	u32 param_id, param_value; | ||||
|  	int ret; | ||||
|   | ||||
| +	return 0; | ||||
|  	if (ab->nss.enabled && vif->type == NL80211_IFTYPE_AP_VLAN) | ||||
|  		return 0; | ||||
|   | ||||
| @@ -6835,6 +6836,8 @@ static int ath11k_mac_op_add_interface(s | ||||
|  	else | ||||
|  		param_value = ATH11K_HW_TXRX_NATIVE_WIFI; | ||||
|   | ||||
| +	param_value = ATH11K_HW_TXRX_NATIVE_WIFI; | ||||
| + | ||||
|  	ret = ath11k_nss_vdev_set_cmd(arvif, NSS_WIFI_VDEV_ENCAP_TYPE_CMD, param_value); | ||||
|   | ||||
|  	if(ret) { | ||||
| @@ -1,57 +0,0 @@ | ||||
| --- a/drivers/net/wireless/ath/ath11k/ahb.c | ||||
| +++ b/drivers/net/wireless/ath/ath11k/ahb.c | ||||
| @@ -526,6 +526,7 @@ static int ath11k_ahb_ext_irq_config(str | ||||
|  	int irq; | ||||
|  	int ret; | ||||
|  	bool nss_offload; | ||||
| +	static int devidx = 0; | ||||
|   | ||||
|  	/* TCL Completion, REO Dest, ERR, Exception and h2rxdma rings are offloaded | ||||
|  	 * to nss when its enabled, hence don't enable these interrupts | ||||
| @@ -539,6 +540,9 @@ static int ath11k_ahb_ext_irq_config(str | ||||
|  		irq_grp->ab = ab; | ||||
|  		irq_grp->grp_id = i; | ||||
|  		init_dummy_netdev(&irq_grp->napi_ndev); | ||||
| +		snprintf(irq_grp->napi_ndev.name, sizeof(irq_grp->napi_ndev.name), "%s%d:%d", | ||||
| +			 "ath11k_ahb", devidx, i); | ||||
| +		irq_grp->napi_ndev.threaded = 1; | ||||
|  		netif_napi_add(&irq_grp->napi_ndev, &irq_grp->napi, | ||||
|  			       ath11k_ahb_ext_grp_napi_poll, NAPI_POLL_WEIGHT); | ||||
|   | ||||
| @@ -604,6 +608,8 @@ static int ath11k_ahb_ext_irq_config(str | ||||
|  		} | ||||
|  	} | ||||
|   | ||||
| +	devidx++; | ||||
| + | ||||
|  	return 0; | ||||
|  } | ||||
|   | ||||
| --- a/drivers/net/wireless/ath/ath11k/pci.c | ||||
| +++ b/drivers/net/wireless/ath/ath11k/pci.c | ||||
| @@ -806,6 +806,7 @@ static int ath11k_pci_ext_irq_config(str | ||||
|  	int i, j, ret, num_vectors = 0; | ||||
|  	u32 user_base_data = 0, base_vector = 0, base_idx; | ||||
|  	u8 domain_id; | ||||
| +	static int devidx = 0; | ||||
|   | ||||
|  	domain_id = ath11k_pci_get_domain_id(ab); | ||||
|  	base_idx = ATH11K_PCI_IRQ_CE0_OFFSET + CE_COUNT_MAX; | ||||
| @@ -822,6 +823,9 @@ static int ath11k_pci_ext_irq_config(str | ||||
|  		irq_grp->ab = ab; | ||||
|  		irq_grp->grp_id = i; | ||||
|  		init_dummy_netdev(&irq_grp->napi_ndev); | ||||
| +		snprintf(irq_grp->napi_ndev.name, sizeof(irq_grp->napi_ndev.name), "%s%d:%d", | ||||
| +			 "ath11k_pci", devidx, i); | ||||
| +		irq_grp->napi_ndev.threaded = 1; | ||||
|  		netif_napi_add(&irq_grp->napi_ndev, &irq_grp->napi, | ||||
|  			       ath11k_pci_ext_grp_napi_poll, NAPI_POLL_WEIGHT); | ||||
|   | ||||
| @@ -868,6 +872,7 @@ static int ath11k_pci_ext_irq_config(str | ||||
|  		} | ||||
|  	} | ||||
|   | ||||
| +	devidx++; | ||||
|  	return 0; | ||||
|  } | ||||
|   | ||||
| @@ -0,0 +1,32 @@ | ||||
| From d8d342c6d0c4076b509faf1ae1a87df24814abe0 Mon Sep 17 00:00:00 2001 | ||||
| From: John Crispin <john@phrozen.org> | ||||
| Date: Wed, 23 Feb 2022 07:44:56 +0100 | ||||
| Subject: [PATCH] Revert "ipq40xx: ar40xx: reset port status register" | ||||
|  | ||||
| This reverts commit 88151b8303f29f18e8b037076628fd82eda0978a. | ||||
|  | ||||
| This actually causes several boards to have bad eth connectivity | ||||
| after reboot. | ||||
|  | ||||
| Signed-off-by: John Crispin <john@phrozen.org> | ||||
| --- | ||||
|  target/linux/ipq40xx/files/drivers/net/phy/ar40xx.c | 3 ++- | ||||
|  1 file changed, 2 insertions(+), 1 deletion(-) | ||||
|  | ||||
| diff --git a/target/linux/ipq40xx/files/drivers/net/phy/ar40xx.c b/target/linux/ipq40xx/files/drivers/net/phy/ar40xx.c | ||||
| index 8b3ae53bd9..9758f013f0 100644 | ||||
| --- a/target/linux/ipq40xx/files/drivers/net/phy/ar40xx.c | ||||
| +++ b/target/linux/ipq40xx/files/drivers/net/phy/ar40xx.c | ||||
| @@ -1198,7 +1198,8 @@ ar40xx_init_port(struct ar40xx_priv *priv, int port) | ||||
|  { | ||||
|  	u32 t; | ||||
|   | ||||
| -	ar40xx_write(priv, AR40XX_REG_PORT_STATUS(port), 0); | ||||
| +	ar40xx_rmw(priv, AR40XX_REG_PORT_STATUS(port), | ||||
| +			AR40XX_PORT_AUTO_LINK_EN, 0); | ||||
|   | ||||
|  	/* CPU port is setting headers to limit output ports */ | ||||
|  	if (port == 0) | ||||
| --  | ||||
| 2.25.1 | ||||
|  | ||||
| @@ -89,7 +89,7 @@ index 209ae3dc46..c8e1eca88b 100644 | ||||
|  			wps_not_configured=1 | ||||
| +			[ "$macfilter" = radius ] && { | ||||
| +				append_radius_server | ||||
| +				vlan_possible = 1 | ||||
| +				vlan_possible=1 | ||||
| +			} | ||||
|  		;; | ||||
|  		psk|sae|psk-sae) | ||||
|   | ||||
| @@ -0,0 +1,35 @@ | ||||
| From adaea813b53d2f3cbbaefb9dffa19faf58d670a2 Mon Sep 17 00:00:00 2001 | ||||
| From: John Crispin <john@phrozen.org> | ||||
| Date: Tue, 15 Feb 2022 17:05:18 +0100 | ||||
| Subject: [PATCH] hostapd: add acs_exclude_dfs support for SW ACS | ||||
|  | ||||
| Signed-off-by: John Crispin <john@phrozen.org> | ||||
| --- | ||||
|  .../hostapd/patches/760-acs_exclude_dfs.patch     | 15 +++++++++++++++ | ||||
|  1 file changed, 15 insertions(+) | ||||
|  create mode 100644 package/network/services/hostapd/patches/760-acs_exclude_dfs.patch | ||||
|  | ||||
| diff --git a/package/network/services/hostapd/patches/760-acs_exclude_dfs.patch b/package/network/services/hostapd/patches/760-acs_exclude_dfs.patch | ||||
| new file mode 100644 | ||||
| index 0000000000..52d63c5ff9 | ||||
| --- /dev/null | ||||
| +++ b/package/network/services/hostapd/patches/760-acs_exclude_dfs.patch | ||||
| @@ -0,0 +1,15 @@ | ||||
| +Index: hostapd-2021-02-20-59e9794c/src/ap/acs.c | ||||
| +=================================================================== | ||||
| +--- hostapd-2021-02-20-59e9794c.orig/src/ap/acs.c | ||||
| ++++ hostapd-2021-02-20-59e9794c/src/ap/acs.c | ||||
| +@@ -672,6 +672,10 @@ acs_find_ideal_chan_mode(struct hostapd_ | ||||
| + 			continue; | ||||
| + 		} | ||||
| +  | ||||
| ++		if (iface->conf->acs_exclude_dfs && | ||||
| ++                      (chan->flag & HOSTAPD_CHAN_RADAR)) | ||||
| ++			continue; | ||||
| ++ | ||||
| + 		/* HT40 on 5 GHz has a limited set of primary channels as per | ||||
| + 		 * 11n Annex J */ | ||||
| + 		if (mode->mode == HOSTAPD_MODE_IEEE80211A && | ||||
| --  | ||||
| 2.25.1 | ||||
|  | ||||
							
								
								
									
										20
									
								
								profiles/edgecore_eap104.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								profiles/edgecore_eap104.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| --- | ||||
| profile: edgecore_eap104 | ||||
| target: ipq807x | ||||
| subtarget: ipq50xx | ||||
| description: Build image for the EdgeCore EAP104 | ||||
| image: bin/targets/ipq807x/ipq50xx/openwrt-ipq807x-edgecore_eap104-squashfs-sysupgrade.tar | ||||
| feeds: | ||||
|   - name: ipq807x | ||||
|     path: ../../feeds/ipq807x | ||||
|   - name: bluetooth_cc2652 | ||||
|     path: ../../feeds/bluetooth-cc2652 | ||||
| include: | ||||
|   - wifi-ax | ||||
|   - ucentral-ap | ||||
| packages: | ||||
|   - cc2652 | ||||
| diffconfig: | | ||||
|   CONFIG_KERNEL_IPQ_MEM_PROFILE=512 | ||||
|   CONFIG_BUSYBOX_CUSTOM=y | ||||
|   CONFIG_BUSYBOX_CONFIG_STTY=y | ||||
		Reference in New Issue
	
	Block a user