mirror of
				https://github.com/Telecominfraproject/wlan-ap.git
				synced 2025-10-30 18:07:52 +00:00 
			
		
		
		
	Compare commits
	
		
			24 Commits
		
	
	
		
			v3.1.0-rc1
			...
			v3.1.0-rc2
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 21cb4de975 | ||
|   | ad51d1788c | ||
|   | 381265f8b3 | ||
|   | 1d106efd51 | ||
|   | bb7d78cd7d | ||
|   | f59883ec8e | ||
|   | ef0242c148 | ||
|   | 0a758ca5fc | ||
|   | 9569b46398 | ||
|   | 2b536f9bdb | ||
|   | 95940b4fc7 | ||
|   | b5f0d205a3 | ||
|   | 60a5609427 | ||
|   | 5784fbc9d0 | ||
|   | 0037af2a6b | ||
|   | ed543017a3 | ||
|   | 5162c60dae | ||
|   | 1ff690c3f7 | ||
|   | e17c6e5918 | ||
|   | 4ca64012ef | ||
|   | 470983bba3 | ||
|   | 5b168597de | ||
|   | 54072c22a4 | ||
|   | 82ef44048b | 
							
								
								
									
										2
									
								
								.github/workflows/build-dev.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/build-dev.yml
									
									
									
									
										vendored
									
									
								
							| @@ -21,7 +21,7 @@ jobs: | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         target: [ 'cig_wf186h', 'cig_wf186w', 'cig_wf188n', 'cig_wf196', 'cig_wf189', 'cybertan_eww631-a1', 'cybertan_eww631-b1', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_eap111', 'edgecore_ecw5211', 'edgecore_oap101', 'edgecore_oap101-6e', 'edgecore_oap101e', 'edgecore_oap101e-6e', 'hfcl_ion4', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'hfcl_ion4x_3', 'hfcl_ion4xi_w', 'hfcl_ion4x_w', 'indio_um-305ax', 'indio_um-325ac', 'indio_um-510ac-v3', 'indio_um-550ac', 'sercomm_ap72tip', 'udaya_a5-id2', 'wallys_dr40x9', 'wallys_dr6018', 'wallys_dr6018-v4', 'yuncore_ax820', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650', 'yuncore_fap655' ] | ||||
|         target: [ 'cig_wf186h', 'cig_wf186w', 'cig_wf188n', 'cig_wf196', 'cig_wf189', 'cybertan_eww631-a1', 'cybertan_eww631-b1', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_eap111', 'edgecore_ecw5211', 'edgecore_oap101', 'edgecore_oap101-6e', 'edgecore_oap101e', 'edgecore_oap101e-6e', 'hfcl_ion4', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'hfcl_ion4x_3', 'hfcl_ion4xi_w', 'hfcl_ion4x_w', 'indio_um-305ax', 'indio_um-325ac', 'indio_um-510ac-v3', 'indio_um-550ac', 'sercomm_ap72tip', 'udaya_a5-id2', 'udaya_a6-id2', 'wallys_dr40x9', 'wallys_dr6018', 'wallys_dr6018-v4', 'yuncore_ax820', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650', 'yuncore_fap655' ] | ||||
|  | ||||
|     steps: | ||||
|     - uses: actions/checkout@v3 | ||||
|   | ||||
| @@ -52,6 +52,7 @@ ALLWIFIBOARDS:= \ | ||||
| 	yuncore-ax840 \ | ||||
| 	yuncore-fap650 \ | ||||
| 	yuncore-fap655 \ | ||||
| 	udaya-a6-id2 \ | ||||
| 	meshpp-s618 | ||||
|  | ||||
| ALLWIFIPACKAGES:=$(foreach BOARD,$(ALLWIFIBOARDS),ath11k-wifi-$(BOARD)) | ||||
| @@ -393,6 +394,7 @@ $(eval $(call generate-ath11k-wifi-package,meshpp-s618,Mesh++ S618)) | ||||
| $(eval $(call generate-ath11k-wifi-package,muxi-ap3220l,MUXI AP3220L)) | ||||
| $(eval $(call generate-ath11k-wifi-package,yuncore-fap650,YunCore FAP650)) | ||||
| $(eval $(call generate-ath11k-wifi-package,yuncore-fap655,YunCore FAP655)) | ||||
| $(eval $(call generate-ath11k-wifi-package,udaya-a6-id2,Udaya A6-ID2)) | ||||
|  | ||||
| $(foreach PACKAGE,$(ALLWIFIPACKAGES),$(eval $(call BuildPackage,$(PACKAGE)))) | ||||
| $(eval $(call BuildPackage,ath11k-wifi-qcom-ipq5018)) | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-udaya-a6-id2.bin.IPQ5018
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-udaya-a6-id2.bin.IPQ5018
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-udaya-a6-id2.bin.QCN6122
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-udaya-a6-id2.bin.QCN6122
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -11,10 +11,11 @@ add_afc() { | ||||
|  | ||||
| 	config_get url "$1" url | ||||
| 	config_get cert "$1" cert | ||||
| 	[ -n "$cert" -a -n "$url" ] || return | ||||
| 	[ -n "$url" ] || return | ||||
|  | ||||
| 	procd_open_instance afcd | ||||
| 	procd_set_param command /usr/bin/ucode /usr/share/hostap/afcd.uc -u "$url" -c "$cert" | ||||
| 	procd_set_param command /usr/bin/ucode /usr/share/hostap/afcd.uc -u "$url" | ||||
| 	[ -n "$cert" ] && procd_append_param command -c "$cert"  | ||||
| 	procd_set_param respawn | ||||
| 	procd_close_instance | ||||
| } | ||||
|   | ||||
| @@ -404,7 +404,7 @@ hostapd_common_add_bss_config() { | ||||
| 	config_add_string lci civic | ||||
|  | ||||
| 	config_add_boolean ieee80211r pmk_r1_push ft_psk_generate_local ft_over_ds | ||||
| 	config_add_int r0_key_lifetime reassociation_deadline | ||||
| 	config_add_int r0_key_lifetime reassociation_deadline ft_l2_refresh | ||||
| 	config_add_string mobility_domain r1_key_holder | ||||
| 	config_add_array r0kh r1kh | ||||
|  | ||||
| @@ -984,10 +984,11 @@ hostapd_set_bss_options() { | ||||
| 		set_default ieee80211r 0 | ||||
|  | ||||
| 		if [ "$ieee80211r" -gt "0" ]; then | ||||
| 			json_get_vars mobility_domain ft_psk_generate_local ft_over_ds reassociation_deadline | ||||
| 			json_get_vars mobility_domain ft_psk_generate_local ft_over_ds reassociation_deadline ft_l2_refresh | ||||
|  | ||||
| 			set_default mobility_domain "$(echo "$ssid" | md5sum | head -c 4)" | ||||
| 			set_default ft_over_ds 1 | ||||
| 			set_default ft_l2_refresh 30 | ||||
| 			set_default reassociation_deadline 1000 | ||||
| 			skip_kh_setup=0 | ||||
|  | ||||
| @@ -1010,6 +1011,7 @@ hostapd_set_bss_options() { | ||||
| 			append bss_conf "ft_psk_generate_local=$ft_psk_generate_local" "$N" | ||||
| 			append bss_conf "ft_over_ds=$ft_over_ds" "$N" | ||||
| 			append bss_conf "reassociation_deadline=$reassociation_deadline" "$N" | ||||
| 			[ -n "$ft_l2_refresh" ] && append bss_conf "ft_l2_refresh=$ft_l2_refresh" "$N" | ||||
|  | ||||
| 			if [ "$skip_kh_setup" -eq "0" ]; then | ||||
| 				json_get_vars r0_key_lifetime r1_key_holder pmk_r1_push | ||||
|   | ||||
| @@ -88,6 +88,14 @@ | ||||
|  void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta, | ||||
|  			   int reassoc); | ||||
|  void hostapd_interface_deinit_free(struct hostapd_iface *iface); | ||||
| @@ -662,6 +671,7 @@ hostapd_switch_channel_fallback(struct h | ||||
|  void hostapd_cleanup_cs_params(struct hostapd_data *hapd); | ||||
|  void hostapd_periodic_iface(struct hostapd_iface *iface); | ||||
|  int hostapd_owe_trans_get_info(struct hostapd_data *hapd); | ||||
| +void hostapd_owe_update_trans(struct hostapd_iface *iface); | ||||
|  void hostapd_ocv_check_csa_sa_query(void *eloop_ctx, void *timeout_ctx); | ||||
|   | ||||
|  /* utils.c */ | ||||
| --- a/src/ap/hostapd.c | ||||
| +++ b/src/ap/hostapd.c | ||||
| @@ -216,6 +216,8 @@ int hostapd_reload_config(struct hostapd | ||||
| @@ -132,6 +140,15 @@ | ||||
|   | ||||
|  	return 0; | ||||
|  } | ||||
| @@ -1945,7 +1950,7 @@ static int hostapd_owe_iface_iter2(struc | ||||
|  #endif /* CONFIG_OWE */ | ||||
|   | ||||
|   | ||||
| -static void hostapd_owe_update_trans(struct hostapd_iface *iface) | ||||
| +void hostapd_owe_update_trans(struct hostapd_iface *iface) | ||||
|  { | ||||
|  #ifdef CONFIG_OWE | ||||
|  	/* Check whether the enabled BSS can complete OWE transition mode | ||||
| @@ -2090,7 +2095,7 @@ static int hostapd_setup_interface_compl | ||||
|  		hapd = iface->bss[j]; | ||||
|  		if (j) | ||||
| @@ -568,3 +585,37 @@ | ||||
|  	.send_mlme = driver_nl80211_send_mlme, | ||||
|  	.get_hw_feature_data = nl80211_get_hw_feature_data, | ||||
|  	.sta_add = wpa_driver_nl80211_sta_add, | ||||
| --- a/src/ap/ucode.c | ||||
| +++ b/src/ap/ucode.c | ||||
| @@ -255,6 +255,7 @@ uc_hostapd_bss_set_config(uc_vm_t *vm, s | ||||
|   | ||||
|  	hostapd_setup_bss(hapd, hapd == iface->bss[0], true); | ||||
|  	hostapd_ucode_update_interfaces(); | ||||
| +	hostapd_owe_update_trans(iface); | ||||
|   | ||||
|  done: | ||||
|  	ret = 0; | ||||
| @@ -375,6 +376,7 @@ uc_hostapd_iface_add_bss(uc_vm_t *vm, si | ||||
|  	conf->bss[idx] = NULL; | ||||
|  	ret = hostapd_ucode_bss_get_uval(hapd); | ||||
|  	hostapd_ucode_update_interfaces(); | ||||
| +	hostapd_owe_update_trans(iface); | ||||
|  	goto out; | ||||
|   | ||||
|  deinit_ctrl: | ||||
| @@ -602,6 +604,7 @@ out: | ||||
|   | ||||
|  		ieee802_11_set_beacon(hapd); | ||||
|  	} | ||||
| +	hostapd_owe_update_trans(iface); | ||||
|   | ||||
|  	return ucv_boolean_new(true); | ||||
|  } | ||||
| @@ -693,6 +696,7 @@ uc_hostapd_bss_rename(uc_vm_t *vm, size_ | ||||
|  	hostapd_ubus_add_bss(hapd); | ||||
|   | ||||
|  	hostapd_ucode_update_interfaces(); | ||||
| +	hostapd_owe_update_trans(hapd->iface); | ||||
|  out: | ||||
|  	if (interfaces->ctrl_iface_init) | ||||
|  		interfaces->ctrl_iface_init(hapd); | ||||
|   | ||||
							
								
								
									
										86
									
								
								feeds/ipq807x_v5.4/hostapd/patches/t00-010-ft_refresh.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								feeds/ipq807x_v5.4/hostapd/patches/t00-010-ft_refresh.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,86 @@ | ||||
| --- a/hostapd/config_file.c | ||||
| +++ b/hostapd/config_file.c | ||||
| @@ -3152,6 +3152,8 @@ static int hostapd_config_fill(struct ho | ||||
|  		bss->ft_over_ds = atoi(pos); | ||||
|  	} else if (os_strcmp(buf, "ft_psk_generate_local") == 0) { | ||||
|  		bss->ft_psk_generate_local = atoi(pos); | ||||
| +	} else if (os_strcmp(buf, "ft_l2_refresh") == 0) { | ||||
| +		bss->ft_l2_refresh = atoi(pos); | ||||
|  #endif /* CONFIG_IEEE80211R_AP */ | ||||
|  #ifndef CONFIG_NO_CTRL_IFACE | ||||
|  	} else if (os_strcmp(buf, "ctrl_interface") == 0) { | ||||
| --- a/src/ap/ap_config.h | ||||
| +++ b/src/ap/ap_config.h | ||||
| @@ -401,6 +401,7 @@ struct hostapd_bss_config { | ||||
|  	int pmk_r1_push; | ||||
|  	int ft_over_ds; | ||||
|  	int ft_psk_generate_local; | ||||
| +	int ft_l2_refresh; | ||||
|  	int r1_max_key_lifetime; | ||||
|  #endif /* CONFIG_IEEE80211R_AP */ | ||||
|   | ||||
| --- a/src/ap/wpa_auth_glue.c | ||||
| +++ b/src/ap/wpa_auth_glue.c | ||||
| @@ -1495,6 +1495,28 @@ static void hostapd_request_radius_psk(v | ||||
|  #endif /* CONFIG_NO_RADIUS */ | ||||
|   | ||||
|   | ||||
| +static void wpa_ft_refresh(void *eloop_data, void *user_data) | ||||
| +{ | ||||
| +	struct hostapd_data *hapd = eloop_data; | ||||
| +	struct ft_rrb_frame *frame; | ||||
| +	struct l2_ethhdr *buf; | ||||
| +	size_t len; | ||||
| + | ||||
| +	len = sizeof(*buf) + sizeof(*frame); | ||||
| +	buf = os_zalloc(len); | ||||
| +	frame = (struct ft_rrb_frame *)(buf + 1); | ||||
| +	frame->frame_type = RSN_REMOTE_FRAME_TYPE_FT_RRB; | ||||
| +	frame->packet_type = FT_PACKET_REQUEST; | ||||
| +	memset(buf->h_dest, 0xff, ETH_ALEN); | ||||
| +	os_memcpy(buf->h_source, hapd->own_addr, ETH_ALEN); | ||||
| +	buf->h_proto = host_to_be16(ETH_P_RRB); | ||||
| +	l2_packet_send(hapd->l2, buf->h_dest, ETH_P_RRB, (u8 *) buf, len); | ||||
| +	os_free(buf); | ||||
| + | ||||
| +	eloop_register_timeout(hapd->conf->ft_l2_refresh, 0, wpa_ft_refresh, | ||||
| +			       hapd, NULL); | ||||
| +} | ||||
| + | ||||
|  int hostapd_setup_wpa(struct hostapd_data *hapd) | ||||
|  { | ||||
|  	struct wpa_auth_config _conf; | ||||
| @@ -1640,6 +1662,9 @@ int hostapd_setup_wpa(struct hostapd_dat | ||||
|  				   "Failed to open ETH_P_OUI interface"); | ||||
|  			return -1; | ||||
|  		} | ||||
| + | ||||
| +		if (hapd->conf->ft_l2_refresh) | ||||
| +			wpa_ft_refresh(hapd, NULL); | ||||
|  	} | ||||
|  #endif /* CONFIG_IEEE80211R_AP */ | ||||
|   | ||||
| @@ -1655,7 +1680,6 @@ void hostapd_reconfig_wpa(struct hostapd | ||||
|  	wpa_reconfig(hapd->wpa_auth, &wpa_auth_conf); | ||||
|  } | ||||
|   | ||||
| - | ||||
|  void hostapd_deinit_wpa(struct hostapd_data *hapd) | ||||
|  { | ||||
|  	ieee80211_tkip_countermeasures_deinit(hapd); | ||||
| @@ -1679,6 +1703,7 @@ void hostapd_deinit_wpa(struct hostapd_d | ||||
|  				   "information element from interface %s", | ||||
|  				   hapd->conf->iface); | ||||
|  		} | ||||
| + | ||||
|  	} | ||||
|  	ieee802_1x_deinit(hapd); | ||||
|   | ||||
| @@ -1687,6 +1712,7 @@ void hostapd_deinit_wpa(struct hostapd_d | ||||
|  	hostapd_wpa_ft_rrb_rx_later(hapd, NULL); /* flush without delivering */ | ||||
|  	eloop_cancel_timeout(hostapd_oui_deliver_later, hapd, ELOOP_ALL_CTX); | ||||
|  	hostapd_oui_deliver_later(hapd, NULL); /* flush without delivering */ | ||||
| +	eloop_cancel_timeout(wpa_ft_refresh, hapd, ELOOP_ALL_CTX); | ||||
|  	l2_packet_deinit(hapd->l2); | ||||
|  	hapd->l2 = NULL; | ||||
|  	hostapd_wpa_unregister_ft_oui(hapd); | ||||
| @@ -0,0 +1,27 @@ | ||||
| --- a/src/ap/hostapd.c | ||||
| +++ b/src/ap/hostapd.c | ||||
| @@ -1995,6 +1995,13 @@ static int hostapd_owe_iface_iter(struct | ||||
|  		    is_zero_ether_addr(bss->own_addr)) | ||||
|  			continue; | ||||
|   | ||||
| +		if (!os_memcmp(hapd->conf->owe_transition_bssid, bss->own_addr, | ||||
| +			       ETH_ALEN) && | ||||
| +		    hapd->conf->owe_transition_ssid_len == bss->conf->ssid.ssid_len && | ||||
| +		    !os_memcmp(hapd->conf->owe_transition_ssid, bss->conf->ssid.ssid, | ||||
| +			       bss->conf->ssid.ssid_len)) | ||||
| +			return 0; | ||||
| + | ||||
|  		os_memcpy(hapd->conf->owe_transition_bssid, bss->own_addr, | ||||
|  			  ETH_ALEN); | ||||
|  		os_memcpy(hapd->conf->owe_transition_ssid, | ||||
| @@ -2011,10 +2018,6 @@ static int hostapd_owe_iface_iter(struct | ||||
|   | ||||
|  int hostapd_owe_trans_get_info(struct hostapd_data *hapd) | ||||
|  { | ||||
| -	if (hapd->conf->owe_transition_ssid_len > 0 && | ||||
| -	    !is_zero_ether_addr(hapd->conf->owe_transition_bssid)) | ||||
| -		return 0; | ||||
| - | ||||
|  	/* Find transition mode SSID/BSSID information from a BSS operated by | ||||
|  	 * this hostapd instance. */ | ||||
|  	if (!hapd->iface->interfaces || | ||||
| @@ -3,7 +3,7 @@ include $(TOPDIR)/rules.mk | ||||
| ARCH:=aarch64 | ||||
| BOARD:=ipq50xx | ||||
| BOARDNAME:=Qualcomm Technologies, Inc IPQ50xx | ||||
| FEATURES:=squashfs fpu ramdisk pcie usbgadgeti nand  | ||||
| FEATURES:=squashfs fpu ramdisk pcie usbgadget nand | ||||
| CPU_TYPE:=cortex-a53 | ||||
| CPU_SUBTYPE:=neon-vfpv4 | ||||
| MAINTAINER:=John Crispin <blogic@openwrt.org> | ||||
|   | ||||
| @@ -25,6 +25,10 @@ qcom_setup_interfaces() | ||||
| 	cybertan,eww631-b1) | ||||
| 		ucidef_add_switch "switch1" "5:wan" "2:lan" "3:lan" "4:lan" "6@eth0" | ||||
| 		;; | ||||
| 	udaya,a6-id2) | ||||
| 		ucidef_set_interface_wan "eth1" | ||||
| 		ucidef_set_interface_lan "eth0" | ||||
| 		;; | ||||
| 	edgecore,oap101|\ | ||||
|  	edgecore,oap101-6e|\ | ||||
| 	edgecore,oap101e|\ | ||||
|   | ||||
| @@ -99,6 +99,7 @@ ath11k/IPQ5018/hw1.0/caldata.bin) | ||||
| 	optimcloud,d60-5g|\ | ||||
| 	optimcloud,d50|\ | ||||
| 	optimcloud,d50-5g|\ | ||||
| 	udaya,a6-id2|\ | ||||
| 	yuncore,fap655) | ||||
| 		caldata_extract "0:ART" 0x1000 0x20000   | ||||
| 		;; | ||||
| @@ -114,6 +115,7 @@ ath11k/qcn6122/hw1.0/caldata_1.bin) | ||||
| 	edgecore,oap101-6e|\ | ||||
| 	edgecore,oap101e|\ | ||||
| 	edgecore,oap101e-6e|\ | ||||
| 	udaya,a6-id2|\ | ||||
| 	hfcl,ion4xi_w|\ | ||||
| 	yuncore,fap655) | ||||
| 		caldata_extract "0:ART" 0x26800 0x20000   | ||||
|   | ||||
| @@ -1,111 +0,0 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| [ -e /lib/firmware/$FIRMWARE ] && exit 0 | ||||
|  | ||||
| . /lib/functions.sh | ||||
| . /lib/functions/system.sh | ||||
|  | ||||
| ath11k_generate_macs() { | ||||
| 	touch /lib/firmware/ath11k-macs | ||||
| 	eth=$(cat /sys/class/net/eth0/address) | ||||
| 	mac1=$(macaddr_add $eth 2) | ||||
| 	mac2=$(macaddr_add $eth 3) | ||||
| 	mac3=$(macaddr_add $eth 4) | ||||
| 	echo -ne \\x${mac1//:/\\x} >> /lib/firmware/ath11k-macs | ||||
| 	echo -ne \\x${mac2//:/\\x} >> /lib/firmware/ath11k-macs | ||||
| 	echo -ne \\x${mac3//:/\\x} >> /lib/firmware/ath11k-macs | ||||
| } | ||||
|  | ||||
| ath11k_generate_macs_wf186w() { | ||||
| 	touch /lib/firmware/ath11k-macs | ||||
| 	local dev=$(find_mtd_chardev "0:APPSBLENV") | ||||
| 	mac=$(grep BaseMacAddress= $dev | cut -dx -f2) | ||||
| 	eth=$(macaddr_canonicalize $mac) | ||||
| 	mac1=$(macaddr_add $eth 2) | ||||
| 	mac2=$(macaddr_add $eth 3) | ||||
| 	mac3=$(macaddr_add $eth 4) | ||||
| 	echo -ne \\x${mac1//:/\\x} >> /lib/firmware/ath11k-macs | ||||
| 	echo -ne \\x${mac2//:/\\x} >> /lib/firmware/ath11k-macs | ||||
| 	echo -ne \\x${mac3//:/\\x} >> /lib/firmware/ath11k-macs | ||||
| } | ||||
|  | ||||
| ath11k_generate_macs_ion4x() {				      | ||||
| 	touch /lib/firmware/ath11k-macs			    | ||||
| 	wifimac0=$(grep WLAN0_BASEMAC= /dev/mtd13 |cut -d '=' -f2)  | ||||
| 	wifimac1=$(grep WLAN1_BASEMAC= /dev/mtd13 |cut -d '=' -f2)  | ||||
| 	wifimac2=00:00:00:00:00:00				  | ||||
| 	echo -ne \\x${wifimac0//:/\\x} >> /lib/firmware/ath11k-macs | ||||
| 	echo -ne \\x${wifimac1//:/\\x} >> /lib/firmware/ath11k-macs | ||||
| 	echo -ne \\x${wifimac2//:/\\x} >> /lib/firmware/ath11k-macs | ||||
| } | ||||
|  | ||||
| caldata_die() { | ||||
| 	echo "caldata: " "$*" | ||||
| 	exit 1 | ||||
| } | ||||
|  | ||||
| caldata_extract() { | ||||
| 	local part=$1 | ||||
| 	local offset=$(($2)) | ||||
| 	local count=$(($3)) | ||||
| 	local mtd | ||||
|  | ||||
| 	mtd=$(find_mtd_chardev $part) | ||||
| 	[ -n "$mtd" ] || caldata_die "no mtd device found for partition $part" | ||||
|  | ||||
| 	dd if=$mtd of=/lib/firmware/$FIRMWARE iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \ | ||||
| 		caldata_die "failed to extract calibration data from $mtd" | ||||
| } | ||||
|  | ||||
| board=$(board_name) | ||||
|  | ||||
| case "$FIRMWARE" in | ||||
| ath11k/IPQ5018/hw1.0/caldata.bin) | ||||
| 	case "$board" in | ||||
| 	cig,wf186w|\ | ||||
| 	edgecore,eap104|\ | ||||
| 	edgecore,oap101-6e|\ | ||||
| 	edgecore,oap101e|\ | ||||
| 	hfcl,ion4xi_w|\ | ||||
| 	yuncore,fap655) | ||||
| 		caldata_extract "0:ART" 0x1000 0x20000   | ||||
| 		;; | ||||
| 	esac | ||||
| 	;; | ||||
| ath11k/qcn6122/hw1.0/caldata_1.bin) | ||||
| 	case "$board" in | ||||
| 	cig,wf186w|\ | ||||
| 	edgecore,oap101-6e|\ | ||||
| 	edgecore,oap101e|\ | ||||
| 	hfcl,ion4xi_w|\ | ||||
| 	yuncore,fap655) | ||||
| 		caldata_extract "0:ART" 0x26800 0x20000   | ||||
| 		;; | ||||
| 	esac | ||||
| 	;; | ||||
| ath11k/qcn6122/hw1.0/caldata_2.bin) | ||||
| 	case "$board" in | ||||
| 	edgecore,eap104|\ | ||||
| 	edgecore,oap101-6e) | ||||
| 		caldata_extract "0:ART" 0x4c000 0x20000   | ||||
| 		;; | ||||
| 	esac | ||||
| 	;; | ||||
| ath11k-macs) | ||||
| 	case "$board" in | ||||
| 	cig,wf186w) | ||||
| 		ath11k_generate_macs_wf186w | ||||
| 		;; | ||||
| 	edgecore,eap104|\ | ||||
| 	yuncore,fap655) | ||||
| 		ath11k_generate_macs | ||||
| 		;; | ||||
| 	hfcl,ion4xi_w) | ||||
| 		ath11k_generate_macs_ion4x | ||||
| 		;; | ||||
| 	esac | ||||
| 	;; | ||||
| *) | ||||
| 	exit 1 | ||||
| 	;; | ||||
| esac | ||||
| @@ -80,6 +80,7 @@ platform_check_image() { | ||||
| 	optimcloud,d50|\ | ||||
| 	optimcloud,d50-5g|\ | ||||
| 	yuncore,fap655|\ | ||||
| 	udaya,a6-id2|\ | ||||
| 	edgecore,oap101|\ | ||||
| 	edgecore,oap101-6e|\ | ||||
| 	edgecore,oap101e|\ | ||||
| @@ -121,6 +122,7 @@ platform_do_upgrade() { | ||||
|                 ;; | ||||
| 	cig,wf186w|\ | ||||
| 	cig,wf186h|\ | ||||
| 	udaya,a6-id2|\ | ||||
| 	optimcloud,d60|\ | ||||
| 	optimcloud,d60-5g|\ | ||||
| 	optimcloud,d50|\ | ||||
|   | ||||
| @@ -0,0 +1,900 @@ | ||||
| /dts-v1/; | ||||
| /* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved. | ||||
|  * | ||||
|  * Copyright (c) 2021 Qualcomm Innovation Center, Inc. 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 "ipq5018.dtsi" | ||||
|  | ||||
| / { | ||||
| 	#address-cells = <0x2>; | ||||
| 	#size-cells = <0x2>; | ||||
| 	model = "Udaya A6-ID2"; | ||||
| 	compatible = "udaya,a6-id2", "qcom,ipq5018"; | ||||
| 	interrupt-parent = <&intc>; | ||||
|  | ||||
| 	aliases { | ||||
| 		sdhc1 = &sdhc_1; /* SDC1 eMMC slot */ | ||||
| 		serial0 = &blsp1_uart1; | ||||
| 		serial1 = &blsp1_uart2; | ||||
| 		ethernet0 = "/soc/dp1"; | ||||
| 		ethernet1 = "/soc/dp2"; | ||||
|  | ||||
| 		led-boot = &led_power; | ||||
| 		led-failsafe = &led_power; | ||||
| 		led-running = &led_power; | ||||
| 		led-upgrade = &led_power; | ||||
| 	}; | ||||
|  | ||||
| 	chosen { | ||||
| 		bootargs = "console=ttyMSM0,115200,n8 rw init=/init"; | ||||
| 		bootargs-append = " swiotlb=1 coherent_pool=2M"; | ||||
| 		stdout-path = "serial0"; | ||||
| 	}; | ||||
|  | ||||
| 	reserved-memory { | ||||
| 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||
| 	/*                   256 MB Profile | ||||
| 	 * +==========+==============+=========================+ | ||||
| 	 * |          |              |                         | | ||||
| 	 * |  Region  | Start Offset |          Size           | | ||||
| 	 * |          |              |                         | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |    NSS   |  0x40000000  |           8MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |   Linux  |  0x40800000  | Depends on total memory | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |   uboot  |  0x4A600000  |           4MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |    SBL   |  0x4AA00000  |           1MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |   smem   |  0x4AB00000  |           1MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |    TZ    |  0x4AC00000  |           4MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |    Q6    |              |                         | | ||||
| 	 * |   code/  |  0x4B000000  |          20MB           | | ||||
| 	 * |   data   |              |                         | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |  IPQ5018 |              |                         | | ||||
| 	 * |   data   |  0x4C400000  |          13MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |  IPQ5018 |              |                         | | ||||
| 	 * |  M3 Dump |  0x4D100000  |           1MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |  IPQ5018 |              |                         | | ||||
| 	 * |   QDSS   |  0x4D200000  |           1MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_1|              |                         | | ||||
| 	 * |   data   |  0x4D300000  |          13MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_1|              |                         | | ||||
| 	 * |  M3 Dump |  0x4E000000  |           1MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_1|              |                         | | ||||
| 	 * |   QDSS   |  0x4E100000  |           1MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_2|              |                         | | ||||
| 	 * |   data   |  0x4E200000  |          13MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_2|              |                         | | ||||
| 	 * |  M3 Dump |  0x4EF00000  |           1MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_2|              |                         | | ||||
| 	 * |   QDSS   |  0x4F000000  |           1MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |                                                   | | ||||
| 	 * |            Rest of the memory for Linux           | | ||||
| 	 * |                                                   | | ||||
| 	 * +===================================================+ | ||||
| 	 */ | ||||
| 		q6_mem_regions: q6_mem_regions@4B000000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4B000000 0x0 0x4100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_code_data: q6_code_data@4B000000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4B000000 0x0 0x1400000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_ipq5018_data: q6_ipq5018_data@4C400000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4C400000 0x0 0xD00000>; | ||||
| 		}; | ||||
|  | ||||
| 		m3_dump: m3_dump@4D100000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4D100000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_etr_region: q6_etr_dump@4D200000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4D200000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_data1: q6_qcn6122_data1@4D300000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4D300000 0x0 0xD00000>; | ||||
| 		}; | ||||
|  | ||||
| 		m3_dump_qcn6122_1: m3_dump_qcn6122_1@4E000000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4E000000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_etr_1: q6_qcn6122_etr_1@4E100000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4E100000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_data2: q6_qcn6122_data2@4E200000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4E200000 0x0 0xD00000>; | ||||
| 		}; | ||||
|  | ||||
| 		m3_dump_qcn6122_2: m3_dump_qcn6122_2@4EF00000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4EF00000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_etr_2: q6_qcn6122_etr_2@4F000000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4F000000 0x0 0x100000>; | ||||
| 		}; | ||||
| 	#else | ||||
| 	/*                 512MB/1GB Profiles | ||||
| 	 * +==========+==============+=========================+ | ||||
| 	 * |          |              |                         | | ||||
| 	 * |  Region  | Start Offset |          Size           | | ||||
| 	 * |          |              |                         | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |    NSS   |  0x40000000  |          16MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |   Linux  |  0x41000000  | Depends on total memory | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |   uboot  |  0x4A600000  |           4MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |    SBL   |  0x4AA00000  |           1MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |   smem   |  0x4AB00000  |           1MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |    TZ    |  0x4AC00000  |           4MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |    Q6    |              |                         | | ||||
| 	 * |   code/  |  0x4B000000  |          20MB           | | ||||
| 	 * |   data   |              |                         | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |  IPQ5018 |              |                         | | ||||
| 	 * |   data   |  0x4C400000  |          13MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |  IPQ5018 |              |                         | | ||||
| 	 * |  M3 Dump |  0x4D100000  |           1MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |  IPQ5018 |              |                         | | ||||
| 	 * |   QDSS   |  0x4D200000  |           1MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |  IPQ5018 |              |                         | | ||||
| 	 * |  Caldb   |  0x4D300000  |           2MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_1|              |                         | | ||||
| 	 * |   data   |  0x4D500000  |          13MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_1|              |                         | | ||||
| 	 * |  M3 Dump |  0x4E200000  |           1MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_1|              |                         | | ||||
| 	 * |   QDSS   |  0x4E300000  |           1MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_1|              |                         | | ||||
| 	 * |  Caldb   |  0x4E400000  |           5MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_2|              |                         | | ||||
| 	 * |   data   |  0x4E900000  |          13MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_2|              |                         | | ||||
| 	 * |  M3 Dump |  0x4F600000  |           1MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_2|              |                         | | ||||
| 	 * |   QDSS   |  0x4F700000  |           1MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_2|              |                         | | ||||
| 	 * |  Caldb   |  0x4F800000  |           5MB           | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |                                                   | | ||||
| 	 * |            Rest of the memory for Linux           | | ||||
| 	 * |                                                   | | ||||
| 	 * +===================================================+ | ||||
| 	 */ | ||||
| 		q6_mem_regions: q6_mem_regions@4B000000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4B000000 0x0 0x4D00000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_code_data: q6_code_data@4B000000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4B000000 0x0 01400000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_ipq5018_data: q6_ipq5018_data@4C400000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4C400000 0x0 0xD00000>; | ||||
| 		}; | ||||
|  | ||||
| 		m3_dump: m3_dump@4D100000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4D100000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_etr_region: q6_etr_dump@4D200000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4D200000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_caldb_region: q6_caldb_region@4D300000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4D300000 0x0 0x200000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_data1: q6_qcn6122_data1@4D500000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4D500000 0x0 0xD00000>; | ||||
| 		}; | ||||
|  | ||||
| 		m3_dump_qcn6122_1: m3_dump_qcn6122_1@4E200000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4E200000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_etr_1: q6_qcn6122_etr_1@4E300000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4E300000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_caldb_1: q6_qcn6122_caldb_1@4E400000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4E400000 0x0 0x500000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_data2: q6_qcn6122_data2@4E900000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4E900000 0x0 0xD00000>; | ||||
| 		}; | ||||
|  | ||||
| 		m3_dump_qcn6122_2: m3_dump_qcn6122_2@4F600000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4F600000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_etr_2: q6_qcn6122_etr_2@4F700000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4F700000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_caldb_2: q6_qcn6122_caldb_2@4F800000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4F800000 0x0 0x500000>; | ||||
| 		}; | ||||
|  | ||||
| 	#endif | ||||
| 	}; | ||||
|  | ||||
| 	soc { | ||||
| 		serial@78af000 { | ||||
| 			status = "ok"; | ||||
| 		}; | ||||
|  | ||||
| 		blsp1_uart2: serial@78b0000 { | ||||
| 			pinctrl-0 = <&blsp1_uart_pins>; | ||||
| 			pinctrl-names = "default"; | ||||
| 		}; | ||||
|  | ||||
| 		qpic_bam: dma@7984000{ | ||||
| 			status = "ok"; | ||||
| 		}; | ||||
|  | ||||
| 		nand: qpic-nand@79b0000 { | ||||
| 			pinctrl-0 = <&qspi_nand_pins>; | ||||
| 			pinctrl-names = "default"; | ||||
| 			status = "ok"; | ||||
| 		}; | ||||
|  | ||||
| 		spi_0: spi@78b5000 { /* BLSP1 QUP0 */ | ||||
| 			pinctrl-0 = <&blsp0_spi_pins>; | ||||
| 			pinctrl-names = "default"; | ||||
| 			cs-select = <0>; | ||||
| 			status = "ok"; | ||||
|  | ||||
| 			m25p80@0 { | ||||
| 				#address-cells = <1>; | ||||
| 				#size-cells = <1>; | ||||
| 				reg = <0>; | ||||
| 				compatible = "n25q128a11"; | ||||
| 				linux,modalias = "m25p80", "n25q128a11"; | ||||
| 				spi-max-frequency = <50000000>; | ||||
| 				use-default-sizes; | ||||
| 			}; | ||||
| 		}; | ||||
|  | ||||
| 		mdio0: mdio@88000 { | ||||
| 			status = "ok"; | ||||
|  | ||||
| 			ethernet-phy@0 { | ||||
| 				reg = <7>; | ||||
| 			}; | ||||
| 		}; | ||||
|  | ||||
| 		mdio1: mdio@90000 { | ||||
| 			status = "ok"; | ||||
| 			pinctrl-0 = <&mdio1_pins>; | ||||
| 			pinctrl-names = "default"; | ||||
| 			phy-reset-gpio = <&tlmm 39 0>; | ||||
|  | ||||
| 			ethernet-phy@0 { | ||||
| 				reg = <28>; | ||||
| 			}; | ||||
| 		}; | ||||
|  | ||||
| 		ess-instance { | ||||
| 			num_devices = <0x1>; | ||||
| 			ess-switch@0x39c00000 { | ||||
| 				switch_mac_mode = <0xf>; /* mac mode for uniphy instance*/ | ||||
| 				cmnblk_clk = "internal_96MHz"; /* cmnblk clk*/ | ||||
| 				qcom,port_phyinfo { | ||||
| 					port@0 { | ||||
| 						port_id = <1>; | ||||
| 						phy_address = <7>; | ||||
| 						mdiobus = <&mdio0>; | ||||
| 					}; | ||||
| 					port@1 { | ||||
| 						port_id = <2>; | ||||
| 						phy_address = <0x1c>; | ||||
| 						mdiobus = <&mdio1>; | ||||
| 						port_mac_sel = "QGMAC_PORT"; | ||||
| 					}; | ||||
| 				}; | ||||
| 				led_source@0 { | ||||
| 					source = <0>; | ||||
| 					mode = "normal"; | ||||
| 					speed = "all"; | ||||
| 					blink_en = "enable"; | ||||
| 					active = "high"; | ||||
| 				}; | ||||
| 			}; | ||||
| 		}; | ||||
|  | ||||
| 		dp1 { | ||||
| 			device_type = "network"; | ||||
| 			compatible = "qcom,nss-dp"; | ||||
| 			clocks = <&gcc GCC_SNOC_GMAC0_AXI_CLK>; | ||||
| 			clock-names = "nss-snoc-gmac-axi-clk"; | ||||
| 			qcom,id = <1>; | ||||
| 			reg = <0x39C00000 0x10000>; | ||||
| 			interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>; | ||||
| 			qcom,mactype = <2>; | ||||
| 			qcom,link-poll = <1>; | ||||
| 			qcom,phy-mdio-addr = <7>; | ||||
| 			mdio-bus = <&mdio0>; | ||||
| 			local-mac-address = [000000000000]; | ||||
| 			phy-mode = "sgmii"; | ||||
| 			qcom,rx-page-mode = <0>; | ||||
| 		}; | ||||
|  | ||||
| 		dp2 { | ||||
| 			device_type = "network"; | ||||
| 			compatible = "qcom,nss-dp"; | ||||
| 			clocks = <&gcc GCC_SNOC_GMAC1_AXI_CLK>; | ||||
| 			clock-names = "nss-snoc-gmac-axi-clk"; | ||||
| 			qcom,id = <2>; | ||||
| 			reg = <0x39D00000 0x10000>; | ||||
| 			interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>; | ||||
| 			qcom,mactype = <2>; | ||||
| 			qcom,link-poll = <1>; | ||||
| 			qcom,phy-mdio-addr = <28>; | ||||
| 			mdio-bus = <&mdio1>; | ||||
| 			local-mac-address = [000000000000]; | ||||
| 			phy-mode = "sgmii"; | ||||
| 			qcom,rx-page-mode = <0>; | ||||
| 		}; | ||||
|  | ||||
| 		nss-macsec1 { | ||||
| 			compatible = "qcom,nss-macsec"; | ||||
| 			phy_addr = <0x1c>; | ||||
| 			mdiobus = <&mdio1>; | ||||
| 		}; | ||||
|  | ||||
| 		pcm: pcm@0xA3C0000{ | ||||
| 			pinctrl-0 = <&audio_pins>; | ||||
| 			pinctrl-names = "default"; | ||||
| 		}; | ||||
|  | ||||
| 		gpio_keys { | ||||
| 			compatible = "gpio-keys"; | ||||
| 			pinctrl-0 = <&button_pins>; | ||||
| 			pinctrl-names = "default"; | ||||
|  | ||||
| 			wps { | ||||
| 				label = "reset"; | ||||
| 				linux,code = <KEY_RESTART>; | ||||
| 				gpios = <&tlmm 38 GPIO_ACTIVE_LOW>; | ||||
| 				linux,input-type = <1>; | ||||
| 				debounce-interval = <60>; | ||||
| 			}; | ||||
| 		}; | ||||
|  | ||||
| 		leds { | ||||
| 			compatible = "gpio-leds"; | ||||
| 			pinctrl-0 = <&leds_pins>; | ||||
| 			pinctrl-names = "default"; | ||||
|  | ||||
| 			led_power: led@30 { | ||||
| 				label = "green:power"; | ||||
| 				gpios = <&tlmm 30 GPIO_ACTIVE_HIGH>; | ||||
| 				default-state = "on"; | ||||
| 			}; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	qcom,test@0 { | ||||
| 		status = "ok"; | ||||
| 	}; | ||||
|  | ||||
| 	thermal-zones { | ||||
| 		status = "ok"; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &tlmm { | ||||
| 	pinctrl-0 = <&blsp0_uart_pins &phy_led_pins>; | ||||
| 	pinctrl-names = "default"; | ||||
|  | ||||
| 	blsp0_uart_pins: uart_pins { | ||||
| 		blsp0_uart_rx_tx { | ||||
| 			pins = "gpio20", "gpio21"; | ||||
| 			function = "blsp0_uart0"; | ||||
| 			bias-disable; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	blsp1_uart_pins: blsp1_uart_pins { | ||||
| 		blsp1_uart_rx_tx { | ||||
| 			pins = "gpio23", "gpio25", "gpio24", "gpio26"; | ||||
| 			function = "blsp1_uart2"; | ||||
| 			bias-disable; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	blsp0_spi_pins: blsp0_spi_pins { | ||||
| 		mux { | ||||
| 			pins = "gpio10", "gpio11", "gpio12", "gpio13"; | ||||
| 			function = "blsp0_spi"; | ||||
| 			drive-strength = <2>; | ||||
| 			bias-disable; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	qspi_nand_pins: qspi_nand_pins { | ||||
| 		qspi_clock { | ||||
| 			pins = "gpio9"; | ||||
| 			function = "qspi_clk"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-disable; | ||||
| 		}; | ||||
|  | ||||
| 		qspi_cs { | ||||
| 			pins = "gpio8"; | ||||
| 			function = "qspi_cs"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-disable; | ||||
| 		}; | ||||
|  | ||||
| 		qspi_data { | ||||
| 			pins = "gpio4", "gpio5", "gpio6", "gpio7"; | ||||
| 			function = "qspi_data"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-disable; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	mdio1_pins: mdio_pinmux { | ||||
| 		mux_0 { | ||||
| 			pins = "gpio36"; | ||||
| 			function = "mdc"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-up; | ||||
| 		}; | ||||
|  | ||||
| 		mux_1 { | ||||
| 			pins = "gpio37"; | ||||
| 			function = "mdio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-up; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	phy_led_pins: phy_led_pins { | ||||
| 		gephy_led_pin { | ||||
| 			pins = "gpio46"; | ||||
| 			function = "led0"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	i2c_pins: i2c_pins { | ||||
| 		i2c_scl { | ||||
| 			pins = "gpio25"; | ||||
| 			function = "blsp2_i2c1"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-disable; | ||||
| 		}; | ||||
|  | ||||
| 		i2c_sda { | ||||
| 			pins = "gpio26"; | ||||
| 			function = "blsp2_i2c1"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-disable; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	button_pins: button_pins { | ||||
| 		wps_button { | ||||
| 			pins = "gpio38"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-up; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	leds_pins: leds_pins { | ||||
| 		led_status { | ||||
| 			pins = "gpio30"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	audio_pins: audio_pinmux { | ||||
| 		mux_1 { | ||||
| 			pins = "gpio24"; | ||||
| 			function = "audio_rxbclk"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
|  | ||||
| 		mux_2 { | ||||
| 			pins = "gpio25"; | ||||
| 			function = "audio_rxfsync"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
|  | ||||
| 		mux_3 { | ||||
| 			pins = "gpio26"; | ||||
| 			function = "audio_rxd"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
|  | ||||
| 		mux_4 { | ||||
| 			pins = "gpio27"; | ||||
| 			function = "audio_txmclk"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
|  | ||||
| 		mux_5 { | ||||
| 			pins = "gpio28"; | ||||
| 			function = "audio_txbclk"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
|  | ||||
| 		mux_6 { | ||||
| 			pins = "gpio29"; | ||||
| 			function = "audio_txfsync"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
|  | ||||
| 		mux_7 { | ||||
| 			pins = "gpio30"; | ||||
| 			function = "audio_txd"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &soc { | ||||
| 	gpio_keys { | ||||
| 		compatible = "gpio-keys"; | ||||
| 		pinctrl-0 = <&button_pins>; | ||||
| 		pinctrl-names = "default"; | ||||
|  | ||||
| 		button@1 { | ||||
| 			label = "wps"; | ||||
| 			linux,code = <KEY_WPS_BUTTON>; | ||||
| 			gpios = <&tlmm 38 GPIO_ACTIVE_LOW>; | ||||
| 			linux,input-type = <1>; | ||||
| 			debounce-interval = <60>; | ||||
| 		}; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &q6v5_wcss { | ||||
| 	compatible = "qcom,ipq5018-q6-mpd"; | ||||
| 	#address-cells = <1>; | ||||
| 	#size-cells = <1>; | ||||
| 	ranges; | ||||
| 	firmware = "IPQ5018/q6_fw.mdt"; | ||||
| 	reg = <0x0cd00000 0x4040>, | ||||
| 		<0x1938000 0x8>, | ||||
| 		<0x193d204 0x4>; | ||||
| 	reg-names = "qdsp6", | ||||
| 			"tcsr-msip", | ||||
| 			"tcsr-q6"; | ||||
| 	resets = <&gcc GCC_WCSSAON_RESET>, | ||||
| 			<&gcc GCC_WCSS_Q6_BCR>; | ||||
|  | ||||
| 	reset-names = "wcss_aon_reset", | ||||
| 			"wcss_q6_reset"; | ||||
|  | ||||
| 	clocks = <&gcc GCC_Q6_AXIS_CLK>, | ||||
| 		<&gcc GCC_WCSS_ECAHB_CLK>, | ||||
| 		<&gcc GCC_Q6_AXIM_CLK>, | ||||
| 		<&gcc GCC_Q6_AXIM2_CLK>, | ||||
| 		<&gcc GCC_Q6_AHB_CLK>, | ||||
| 		<&gcc GCC_Q6_AHB_S_CLK>, | ||||
| 		<&gcc GCC_WCSS_AXI_S_CLK>; | ||||
| 	clock-names = "gcc_q6_axis_clk", | ||||
| 		"gcc_wcss_ecahb_clk", | ||||
| 		"gcc_q6_axim_clk", | ||||
| 		"gcc_q6_axim2_clk", | ||||
| 		"gcc_q6_ahb_clk", | ||||
| 		"gcc_q6_ahb_s_clk", | ||||
| 		"gcc_wcss_axi_s_clk"; | ||||
|  | ||||
| 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||
| 		memory-region = <&q6_mem_regions>, <&q6_etr_region>; | ||||
| 	#else | ||||
| 		memory-region = <&q6_mem_regions>, <&q6_etr_region>, | ||||
| 				<&q6_caldb_region>; | ||||
| 	#endif | ||||
|  | ||||
| 	qcom,rproc = <&q6v5_wcss>; | ||||
| 	qcom,bootargs_smem = <507>; | ||||
| 	boot-args = <0x1 0x4 0x3 0x0F 0x0 0x0>, | ||||
| 			<0x2 0x4 0x2 0x12 0x0 0x0>; | ||||
| 	status = "ok"; | ||||
| 	q6_wcss_pd1: remoteproc_pd1@4ab000 { | ||||
| 		compatible = "qcom,ipq5018-wcss-ahb-mpd"; | ||||
| 		reg = <0x4ab000 0x20>; | ||||
| 		reg-names = "rmb"; | ||||
| 		firmware = "IPQ5018/q6_fw.mdt"; | ||||
| 		m3_firmware = "IPQ5018/m3_fw.mdt"; | ||||
| 		interrupts-extended = <&wcss_smp2p_in 8 0>, | ||||
| 					<&wcss_smp2p_in 9 0>, | ||||
| 					<&wcss_smp2p_in 12 0>, | ||||
| 					<&wcss_smp2p_in 11 0>; | ||||
| 		interrupt-names = "fatal", | ||||
| 					"ready", | ||||
| 					"spawn-ack", | ||||
| 					"stop-ack"; | ||||
|  | ||||
| 		resets = <&gcc GCC_WCSSAON_RESET>, | ||||
| 				<&gcc GCC_WCSS_BCR>, | ||||
| 				<&gcc GCC_CE_BCR>; | ||||
| 		reset-names = "wcss_aon_reset", | ||||
| 				"wcss_reset", | ||||
| 				"ce_reset"; | ||||
|  | ||||
| 		clocks = <&gcc GCC_WCSS_AHB_S_CLK>, | ||||
| 				<&gcc GCC_WCSS_ACMT_CLK>, | ||||
| 				<&gcc GCC_WCSS_AXI_M_CLK>; | ||||
| 		clock-names = "gcc_wcss_ahb_s_clk", | ||||
| 					"gcc_wcss_acmt_clk", | ||||
| 					"gcc_wcss_axi_m_clk"; | ||||
|  | ||||
| 		qcom,halt-regs = <&tcsr_q6_block 0xa000 0xd000 0x0>; | ||||
|  | ||||
| 		qcom,smem-states = <&wcss_smp2p_out 8>, | ||||
| 					<&wcss_smp2p_out 9>, | ||||
| 					<&wcss_smp2p_out 10>; | ||||
| 		qcom,smem-state-names = "shutdown", | ||||
| 					"stop", | ||||
| 					"spawn"; | ||||
| 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||
| 		memory-region = <&q6_ipq5018_data>, <&m3_dump>, | ||||
| 				<&q6_etr_region>; | ||||
| 	#else | ||||
| 		memory-region = <&q6_ipq5018_data>, <&m3_dump>, | ||||
| 				<&q6_etr_region>, <&q6_caldb_region>; | ||||
| 	#endif | ||||
|  | ||||
| 	}; | ||||
|  | ||||
| 	q6_wcss_pd2: remoteproc_pd2 { | ||||
| 		compatible = "qcom,ipq5018-wcss-pcie-mpd"; | ||||
| 		firmware = "IPQ5018/q6_fw.mdt"; | ||||
| 		m3_firmware = "qcn6122/m3_fw.mdt"; | ||||
| 		interrupts-extended = <&wcss_smp2p_in 16 0>, | ||||
| 					<&wcss_smp2p_in 17 0>, | ||||
| 					<&wcss_smp2p_in 20 0>, | ||||
| 					<&wcss_smp2p_in 19 0>; | ||||
| 		interrupt-names = "fatal", | ||||
| 					"ready", | ||||
| 					"spawn-ack", | ||||
| 					"stop-ack"; | ||||
|  | ||||
| 		qcom,smem-states = <&wcss_smp2p_out 16>, | ||||
| 					<&wcss_smp2p_out 17>, | ||||
| 					<&wcss_smp2p_out 18>; | ||||
| 		qcom,smem-state-names = "shutdown", | ||||
| 					"stop", | ||||
| 					"spawn"; | ||||
| 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||
| 		memory-region = <&q6_qcn6122_data1>, <&m3_dump_qcn6122_1>, | ||||
| 				<&q6_qcn6122_etr_1>; | ||||
| 	#else | ||||
| 		memory-region = <&q6_qcn6122_data1>, <&m3_dump_qcn6122_1>, | ||||
| 				<&q6_qcn6122_etr_1>, <&q6_qcn6122_caldb_1>; | ||||
| 	#endif | ||||
|  | ||||
| 	}; | ||||
|  | ||||
| 	q6_wcss_pd3: remoteproc_pd3 { | ||||
| 		compatible = "qcom,ipq5018-wcss-pcie-mpd"; | ||||
| 		firmware = "IPQ5018/q6_fw.mdt"; | ||||
| 		interrupts-extended = <&wcss_smp2p_in 24 0>, | ||||
| 					<&wcss_smp2p_in 25 0>, | ||||
| 					<&wcss_smp2p_in 28 0>, | ||||
| 					<&wcss_smp2p_in 27 0>; | ||||
| 		interrupt-names = "fatal", | ||||
| 					"ready", | ||||
| 					"spawn-ack", | ||||
| 					"stop-ack"; | ||||
|  | ||||
| 		qcom,smem-states = <&wcss_smp2p_out 24>, | ||||
| 					<&wcss_smp2p_out 25>, | ||||
| 					<&wcss_smp2p_out 26>; | ||||
| 		qcom,smem-state-names = "shutdown", | ||||
| 					"stop", | ||||
| 					"spawn"; | ||||
| 	#ifdef	__IPQ_MEM_PROFILE_256_MB__ | ||||
| 		memory-region = <&q6_qcn6122_data2>, <&m3_dump_qcn6122_2>, | ||||
| 				<&q6_qcn6122_etr_2>; | ||||
| 	#else | ||||
| 		memory-region = <&q6_qcn6122_data2>, <&m3_dump_qcn6122_2>, | ||||
| 				<&q6_qcn6122_etr_2>, <&q6_qcn6122_caldb_2>; | ||||
| 	#endif | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &i2c_0 { | ||||
| 	pinctrl-0 = <&i2c_pins>; | ||||
| 	pinctrl-names = "default"; | ||||
| }; | ||||
|  | ||||
| &wifi0 { | ||||
| 	/* IPQ5018 */ | ||||
| 	qcom,multipd_arch; | ||||
| 	qcom,rproc = <&q6_wcss_pd1>; | ||||
| 	qcom,userpd-subsys-name = "q6v5_wcss_userpd1"; | ||||
| #ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||
| 	qcom,tgt-mem-mode = <2>; | ||||
| #else | ||||
| 	qcom,tgt-mem-mode = <1>; | ||||
| #endif | ||||
| 	qcom,board_id = <0x23>; | ||||
| #ifdef __CNSS2__ | ||||
| 	qcom,bdf-addr = <0x4C400000 0x4C400000 0x4C400000 0x0 0x0>; | ||||
| 	qcom,caldb-addr = <0x4D300000 0x4D300000 0 0 0>; | ||||
| 	qcom,caldb-size = <0x200000>; | ||||
| 	mem-region = <&q6_ipq5018_data>; | ||||
| #else | ||||
| 	memory-region = <&q6_ipq5018_data>; | ||||
| #endif | ||||
| 	status = "ok"; | ||||
| }; | ||||
|  | ||||
| &wifi1 { | ||||
| 	/* QCN6122 5G */ | ||||
| 	qcom,multipd_arch; | ||||
| 	qcom,userpd-subsys-name = "q6v5_wcss_userpd2"; | ||||
| 	qcom,rproc = <&q6_wcss_pd2>; | ||||
| #ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||
| 	qcom,tgt-mem-mode = <2>; | ||||
| #else | ||||
| 	qcom,tgt-mem-mode = <1>; | ||||
| #endif | ||||
| 	qcom,board_id = <0x60>; | ||||
| #ifdef __CNSS2__ | ||||
| 	qcom,bdf-addr = <0x4D500000 0x4D500000 0x4D300000 0x0 0x0>; | ||||
| 	qcom,caldb-addr = <0x4E400000 0x4E400000 0 0 0>; | ||||
| 	qcom,caldb-size = <0x500000>; | ||||
| 	mem-region = <&q6_qcn6122_data1>; | ||||
| #else | ||||
| 	memory-region = <&q6_qcn6122_data1>; | ||||
| #endif | ||||
| 	status = "ok"; | ||||
| }; | ||||
|  | ||||
| &wifi2 { | ||||
| 	/* QCN6122 6G */ | ||||
| 	qcom,multipd_arch; | ||||
| 	qcom,userpd-subsys-name = "q6v5_wcss_userpd3"; | ||||
| 	qcom,rproc = <&q6_wcss_pd3>; | ||||
| #ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||
| 	qcom,tgt-mem-mode = <2>; | ||||
| #else | ||||
| 	qcom,tgt-mem-mode = <1>; | ||||
| #endif | ||||
| 	qcom,board_id = <0xb0>; | ||||
| #ifdef __CNSS2__ | ||||
| 	qcom,bdf-addr = <0x4E900000 0x4E900000 0x4E200000 0x0 0x0>; | ||||
| 	qcom,caldb-addr = <0x4F800000 0x4F800000 0 0 0>; | ||||
| 	qcom,caldb-size = <0x500000>; | ||||
| 	mem-region = <&q6_qcn6122_data2>; | ||||
| #else | ||||
| 	memory-region = <&q6_qcn6122_data2>; | ||||
| #endif | ||||
| 	status = "disabled"; | ||||
| }; | ||||
|  | ||||
| &usb3 { | ||||
|        status = "ok"; | ||||
|        device-power-gpio = <&tlmm 24 1>; | ||||
| }; | ||||
|  | ||||
| &dwc_0 { | ||||
|        /delete-property/ #phy-cells; | ||||
|        /delete-property/ phys; | ||||
|        /delete-property/ phy-names; | ||||
| }; | ||||
|  | ||||
| &hs_m31phy_0 { | ||||
|        status = "ok"; | ||||
| }; | ||||
|  | ||||
| &eud { | ||||
| 	status = "ok"; | ||||
| }; | ||||
|  | ||||
| &pcie_x1 { | ||||
| 	perst-gpio = <&tlmm 18 GPIO_ACTIVE_LOW>; | ||||
| }; | ||||
|  | ||||
| &pcie_x2 { | ||||
| 	perst-gpio = <&tlmm 15 GPIO_ACTIVE_LOW>; | ||||
| }; | ||||
|  | ||||
| &pcie_x1_rp { | ||||
| 	status = "disabled"; | ||||
|  | ||||
| 	mhi_0: qcom,mhi@0 { | ||||
| 		reg = <0 0 0 0 0 >; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &pcie_x2_rp { | ||||
| 	status = "disabled"; | ||||
|  | ||||
| 	mhi_1: qcom,mhi@1 { | ||||
| 		reg = <0 0 0 0 0 >; | ||||
|  | ||||
| 	}; | ||||
| }; | ||||
| @@ -49,6 +49,15 @@ define Device/edgecore_eap104 | ||||
| endef | ||||
| TARGET_DEVICES += edgecore_eap104 | ||||
|  | ||||
| define Device/udaya_a6_id2 | ||||
|   DEVICE_TITLE := Udaya A6 - ID2 | ||||
|   DEVICE_DTS := qcom-ipq5018-udaya-a6-id2 | ||||
|   SUPPORTED_DEVICES := udaya,a6-id2 | ||||
|   DEVICE_PACKAGES := ath11k-wifi-udaya-a6-id2 ath11k-firmware-ipq50xx-spruce ath11k-firmware-qcn6122 | ||||
|   DEVICE_DTS_CONFIG := config@mp03.5-c1 | ||||
| endef | ||||
| TARGET_DEVICES += udaya_a6_id2 | ||||
|  | ||||
| define Device/yuncore_fap655 | ||||
|   DEVICE_TITLE := Yuncore FAP650 | ||||
|   DEVICE_DTS := qcom-ipq5018-yuncore-fap655 | ||||
|   | ||||
| @@ -28,7 +28,7 @@ drv_mac80211_init_device_config() { | ||||
| 	config_add_int beacon_int chanbw frag rts | ||||
| 	config_add_int rxantenna txantenna antenna_gain txpower min_tx_power | ||||
| 	config_add_int num_global_macaddr | ||||
| 	config_add_boolean noscan ht_coex acs_exclude_dfs background_radar | ||||
| 	config_add_boolean noscan ht_coex acs_exclude_dfs acs_exclude_6ghz_non_psc background_radar | ||||
| 	config_add_array ht_capab | ||||
| 	config_add_array channels | ||||
| 	config_add_array scan_list | ||||
| @@ -138,6 +138,11 @@ mac80211_hostapd_setup_base() { | ||||
| 	[ -n "$acs_exclude_dfs" ] && [ "$acs_exclude_dfs" -gt 0 ] && | ||||
| 		append base_cfg "acs_exclude_dfs=1" "$N" | ||||
|  | ||||
| 	[ "$auto_channel" -gt 0 ] && json_get_vars acs_exclude_6ghz_non_psc | ||||
| 	[ -n "$acs_exclude_6ghz_non_psc" ] && [ "$acs_exclude_6ghz_non_psc" -gt 0 ] && | ||||
| 		[ "$band" = 6g ] && | ||||
| 		append base_cfg "acs_exclude_6ghz_non_psc=1" "$N" | ||||
|  | ||||
| 	json_get_vars noscan ht_coex min_tx_power:0 tx_burst | ||||
| 	json_get_values ht_capab_list ht_capab | ||||
| 	json_get_values channel_list channels | ||||
|   | ||||
| @@ -0,0 +1,38 @@ | ||||
| --- a/drivers/net/wireless/ath/ath11k/peer.c | ||||
| +++ b/drivers/net/wireless/ath/ath11k/peer.c | ||||
| @@ -819,8 +819,13 @@ int ath11k_peer_delete(struct ath11k *ar | ||||
|  				} | ||||
|  			} | ||||
|  #endif | ||||
| -		ath11k_peer_rhash_delete(ar->ab, peer); | ||||
| +		if (peer->vdev_id == vdev_id) | ||||
| +			ath11k_peer_rhash_delete(ar->ab, peer); | ||||
|  	} | ||||
| + | ||||
| +	if (!peer) | ||||
| +		peer = ath11k_peer_find(ar->ab, vdev_id, addr); | ||||
| + | ||||
|  	spin_unlock_bh(&ar->ab->base_lock); | ||||
|  	mutex_unlock(&ar->ab->tbl_mtx_lock); | ||||
|  #ifdef CPTCFG_ATH11K_NSS_SUPPORT | ||||
| @@ -870,8 +875,18 @@ int ath11k_peer_create(struct ath11k *ar | ||||
|  	spin_lock_bh(&ar->ab->base_lock); | ||||
|  	peer = ath11k_peer_find_by_addr(ar->ab, param->peer_addr); | ||||
|  	if (peer) { | ||||
| -		spin_unlock_bh(&ar->ab->base_lock); | ||||
| -		return -EINVAL; | ||||
| +		if (peer->vdev_id == param->vdev_id) { | ||||
| +			spin_unlock_bh(&ar->ab->base_lock); | ||||
| +			return -EINVAL; | ||||
| +		} | ||||
| + | ||||
| +		/* Assume sta is transitioning to another band. | ||||
| +		 * Remove here the peer from rhash. | ||||
| +		 */ | ||||
| +		mutex_lock(&ar->ab->tbl_mtx_lock); | ||||
| +		ath11k_peer_rhash_delete(ar->ab, peer); | ||||
| +		mutex_unlock(&ar->ab->tbl_mtx_lock); | ||||
| + | ||||
|  	} | ||||
|  	spin_unlock_bh(&ar->ab->base_lock); | ||||
|   | ||||
							
								
								
									
										27
									
								
								feeds/mediatek-sdk/mt76/mt76/patches/a00-crash_fix.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								feeds/mediatek-sdk/mt76/mt76/patches/a00-crash_fix.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| --- a/mt7915/mcu.c | ||||
| +++ b/mt7915/mcu.c | ||||
| @@ -4887,7 +4887,7 @@ int mt7915_mcu_wed_wa_tx_stats(struct mt | ||||
|  	rcu_read_lock(); | ||||
|   | ||||
|  	wcid = rcu_dereference(dev->mt76.wcid[wlan_idx]); | ||||
| -	if (wcid) { | ||||
| +	if (wcid && wcid->sta) { | ||||
|  		struct ieee80211_vif *vif; | ||||
|  		struct wireless_dev *wdev; | ||||
|   | ||||
| @@ -4898,12 +4898,12 @@ int mt7915_mcu_wed_wa_tx_stats(struct mt | ||||
|  		    !sta) | ||||
|  			 goto unlock; | ||||
|   | ||||
| +		if (!sta->vif) | ||||
| +			goto unlock; | ||||
| + | ||||
|  		vif = container_of((void *)sta->vif, | ||||
|  				   struct ieee80211_vif, | ||||
|  				   drv_priv); | ||||
| -		if (!vif) | ||||
| -			goto unlock; | ||||
| - | ||||
|  		wdev = ieee80211_vif_to_wdev(vif); | ||||
|   | ||||
|  		if (vif->type == NL80211_IFTYPE_MONITOR) | ||||
| @@ -44,7 +44,8 @@ actiontec,web7200) | ||||
| edgecore,ecw5211|\ | ||||
| edgecore,eap101|\ | ||||
| edgecore,eap102|\ | ||||
| edgecore,oap104) | ||||
| edgecore,oap104|\ | ||||
| edgecore,eap111) | ||||
| 	if grep -q rootfs1 /proc/cmdline; then | ||||
| 		PART_NAME=rootfs2 | ||||
| 	else | ||||
|   | ||||
| @@ -15,6 +15,7 @@ add_rate() { | ||||
|  | ||||
| reload_service() { | ||||
| 	logger ratelimit reload | ||||
| 	ubus call ratelimit flush | ||||
| 	config_load ratelimit | ||||
| 	config_foreach add_rate rate | ||||
| } | ||||
|   | ||||
| @@ -212,6 +212,14 @@ function run_service() { | ||||
| 	let uctx = ubus.connect(); | ||||
|  | ||||
| 	uctx.publish("ratelimit", { | ||||
| 		flush: { | ||||
| 			call: function(req) { | ||||
| 				defaults = {}; | ||||
| 			}, | ||||
| 			args: { | ||||
|  | ||||
| 			} | ||||
| 		}, | ||||
| 		defaults_set: { | ||||
| 			call: function(req) { | ||||
| 				let r_i = req.args.rate_ingress ?? req.args.rate; | ||||
|   | ||||
| @@ -4,10 +4,10 @@ PKG_NAME:=ucentral-schema | ||||
| PKG_RELEASE:=1 | ||||
|  | ||||
| PKG_SOURCE_URL=https://github.com/Telecominfraproject/wlan-ucentral-schema.git | ||||
| PKG_MIRROR_HASH:=ffbf9ceb9dc0d485ab983cc469a3990c74cb0f8ccc4748fdf2e64f62ac57ea0d | ||||
| PKG_MIRROR_HASH:=c455f08d92be5a0f75fbc784f06b6154df80794f86e5a0f70d2e98e3a147e16c | ||||
| PKG_SOURCE_PROTO:=git | ||||
| PKG_SOURCE_DATE:=2024-04-26 | ||||
| PKG_SOURCE_VERSION:=8045e6c51d5d45534e1cc3b1b57abeccaebc666a | ||||
| PKG_SOURCE_VERSION:=6e90f22d54537032c6b8374df508913592b31670 | ||||
| PKG_MAINTAINER:=John Crispin <john@phrozen.org> | ||||
| PKG_LICENSE:=BSD-3-Clause | ||||
|  | ||||
|   | ||||
| @@ -0,0 +1,111 @@ | ||||
| { | ||||
| 	"uuid": 2, | ||||
| 	"radios": [ | ||||
| 		{ | ||||
| 			"band": "2G", | ||||
| 			"country": "CA", | ||||
| 			"channel-mode": "HE", | ||||
| 			"channel-width": 20, | ||||
| 			"channel": 1 | ||||
| 		}, { | ||||
| 			"band": "5G", | ||||
| 			"country": "CA", | ||||
| 			"channel-mode": "HE", | ||||
| 			"channel-width": 80, | ||||
| 			"channel": 36 | ||||
| 		} | ||||
| 	], | ||||
|  | ||||
| 	"interfaces": [ | ||||
| 		{ | ||||
| 			"name": "WAN", | ||||
| 			"role": "upstream", | ||||
| 			"services": [ "lldp" ], | ||||
| 			"ethernet": [ | ||||
| 				{ | ||||
| 					"select-ports": [ | ||||
| 						"WAN*" | ||||
| 					] | ||||
| 				} | ||||
| 			], | ||||
| 			"ipv4": { | ||||
| 				"addressing": "dynamic" | ||||
| 			}, | ||||
| 			"ssids": [ | ||||
| 				{ | ||||
| 					"name": "OpenWifi", | ||||
| 					"wifi-bands": [ | ||||
| 						"2G", "5G" | ||||
| 					], | ||||
| 					"bss-mode": "ap", | ||||
| 					"encryption": { | ||||
| 						"proto": "psk2", | ||||
| 						"key": "OpenWifi", | ||||
| 						"ieee80211w": "optional" | ||||
| 					} | ||||
| 				} | ||||
| 			] | ||||
| 		}, | ||||
| 		{ | ||||
| 			"name": "LAN", | ||||
| 			"role": "downstream", | ||||
| 			"services": [ "ssh", "lldp" ], | ||||
| 			"ethernet": [ | ||||
| 				{ | ||||
| 					"select-ports": [ | ||||
| 						"LAN*" | ||||
| 					] | ||||
| 				} | ||||
| 			], | ||||
| 			"ipv4": { | ||||
| 				"addressing": "static", | ||||
| 				"subnet": "192.168.1.1/24", | ||||
| 				"dhcp": { | ||||
| 					"lease-first": 10, | ||||
| 					"lease-count": 100, | ||||
| 					"lease-time": "6h" | ||||
| 				} | ||||
| 			}, | ||||
| 			"ssids": [ | ||||
| 				{ | ||||
| 					"name": "OpenWifi", | ||||
| 					"wifi-bands": [ | ||||
| 						"2G", "5G" | ||||
| 					], | ||||
| 					"bss-mode": "ap", | ||||
| 					"encryption": { | ||||
| 						"proto": "psk2", | ||||
| 						"key": "OpenWifi", | ||||
| 						"ieee80211w": "optional" | ||||
| 					} | ||||
| 				} | ||||
| 			] | ||||
|  | ||||
| 		} | ||||
| 	], | ||||
| 	"metrics": { | ||||
| 		"statistics": { | ||||
| 			"interval": 120, | ||||
| 			"types": [ "ssids", "lldp", "clients" ] | ||||
| 		}, | ||||
| 		"health": { | ||||
| 			"interval": 120 | ||||
| 		} | ||||
| 	}, | ||||
| 	"services": { | ||||
| 		"lldp": { | ||||
| 			"describe": "uCentral", | ||||
| 			"location": "universe" | ||||
| 		}, | ||||
| 		"ssh": { | ||||
| 			"port": 22 | ||||
| 		}, | ||||
| 		"fingerprint": { | ||||
| 			"mode": "final", | ||||
| 			"minimum-age": 60, | ||||
| 			"maximum-age": 3600, | ||||
| 			"periodicity": 0, | ||||
| 			"allow-wan": false | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -105,7 +105,7 @@ | ||||
| 			"minimum-age": 60, | ||||
| 			"maximum-age": 3600, | ||||
| 			"periodicity": 600, | ||||
| 			"allow-wan": true | ||||
| 			"allow-wan": false | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,108 @@ | ||||
| { | ||||
| 	"uuid": 2, | ||||
| 	"radios": [ | ||||
| 		{ | ||||
| 			"band": "2G", | ||||
| 			"country": "CA", | ||||
| 			"channel-mode": "HE", | ||||
| 			"channel-width": 20, | ||||
| 			"channel": 1 | ||||
| 		}, { | ||||
| 			"band": "5G", | ||||
| 			"country": "CA", | ||||
| 			"channel-mode": "HE", | ||||
| 			"channel-width": 80, | ||||
| 			"channel": 36 | ||||
| 		} | ||||
| 	], | ||||
|  | ||||
| 	"interfaces": [ | ||||
| 		{ | ||||
| 			"name": "WAN", | ||||
| 			"role": "upstream", | ||||
| 			"services": [ "lldp" ], | ||||
| 			"ethernet": [ | ||||
| 				{ | ||||
| 					"select-ports": [ | ||||
| 						"WAN*" | ||||
| 					] | ||||
| 				} | ||||
| 			], | ||||
| 			"ipv4": { | ||||
| 				"addressing": "dynamic" | ||||
| 			}, | ||||
| 			"ssids": [ | ||||
| 				{ | ||||
| 					"name": "OpenWifi", | ||||
| 					"wifi-bands": [ | ||||
| 						"2G", "5G" | ||||
| 					], | ||||
| 					"bss-mode": "ap", | ||||
| 					"encryption": { | ||||
| 						"proto": "psk2", | ||||
| 						"key": "OpenWifi", | ||||
| 						"ieee80211w": "optional" | ||||
| 					} | ||||
| 				} | ||||
| 			] | ||||
| 		}, | ||||
| 		{ | ||||
| 			"name": "LAN", | ||||
| 			"role": "downstream", | ||||
| 			"services": [ "ssh", "lldp" ], | ||||
| 			"ethernet": [ | ||||
| 				{ | ||||
| 					"select-ports": [ | ||||
| 						"LAN*" | ||||
| 					] | ||||
| 				} | ||||
| 			], | ||||
| 			"ipv4": { | ||||
| 				"addressing": "static", | ||||
| 				"subnet": "192.168.1.1/24", | ||||
| 				"dhcp": { | ||||
| 					"lease-first": 10, | ||||
| 					"lease-count": 100, | ||||
| 					"lease-time": "6h" | ||||
| 				} | ||||
| 			}, | ||||
| 			"ssids": [ | ||||
| 				{ | ||||
| 					"name": "OpenWifi", | ||||
| 					"wifi-bands": [ | ||||
| 						"2G", "5G" | ||||
| 					], | ||||
| 					"bss-mode": "ap", | ||||
| 					"encryption": { | ||||
| 						"proto": "psk2", | ||||
| 						"key": "OpenWifi", | ||||
| 						"ieee80211w": "optional" | ||||
| 					} | ||||
| 				} | ||||
| 			] | ||||
|  | ||||
| 		} | ||||
| 	], | ||||
| 	"metrics": { | ||||
| 		"statistics": { | ||||
| 			"interval": 120, | ||||
| 			"types": [ "ssids", "lldp", "clients" ] | ||||
| 		}, | ||||
| 		"health": { | ||||
| 			"interval": 120 | ||||
| 		} | ||||
| 	}, | ||||
| 	"services": { | ||||
| 		"lldp": { | ||||
| 			"describe": "uCentral", | ||||
| 			"location": "universe" | ||||
| 		}, | ||||
| 		"ssh": { | ||||
| 			"port": 22 | ||||
| 		}, | ||||
| 		"fingerprint": { | ||||
| 			"mode": "raw-data", | ||||
| 			"allow-wan": true | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -53,6 +53,7 @@ global.handle_request = function(env) { | ||||
| 	let ctx = portal.handle_request(env, true); | ||||
|  | ||||
| 	switch (split(ctx.env.REQUEST_URI, '?')[0] || '') { | ||||
| 	case '/login': | ||||
| 	case '/logon': | ||||
| 		auth_client(ctx); | ||||
| 		break; | ||||
|   | ||||
| @@ -178,15 +178,25 @@ return { | ||||
| 	// put a client back into pre-auth state | ||||
| 	logoff: function(ctx, uam) { | ||||
| 		this.syslog(ctx, 'logging client off'); | ||||
| 		if (uam) | ||||
| 		if (uam) { | ||||
| 			include('redir.uc', { redir_location: this.uam_url(ctx, 'logoff') }); | ||||
| 		else | ||||
| 			ctx.ubus.call('uspot', 'client_remove', { | ||||
| 				interface: ctx.spotfilter, | ||||
| 				address: uc(ctx.mac), | ||||
| 			}); | ||||
| 		} else { | ||||
| 			include('logoff.uc', ctx); | ||||
| 			let payload = { | ||||
| 				interface: ctx.spotfilter, | ||||
| 				address: uc(ctx.mac), | ||||
| 			}; | ||||
|  | ||||
| 		ctx.ubus.call('uspot', 'client_remove', { | ||||
| 			interface: ctx.spotfilter, | ||||
| 			address: ctx.mac, | ||||
| 		}); | ||||
| 			if (ctx.connected.ip4addr) | ||||
| 				system('conntrack -D -s ' + ctx.connected.ip4addr + ' > /dev/null'); | ||||
| 			if (ctx.connected.ip6addr) | ||||
| 				system('conntrack -D -s ' + ctx.connected.ip6addr + ' > /dev/null'); | ||||
| 			ctx.ubus.call('spotfilter', 'client_remove', payload); | ||||
| 		} | ||||
| 	}, | ||||
|  | ||||
| 	// generate the default radius auth payload | ||||
| @@ -286,9 +296,17 @@ return { | ||||
| 			include('error.uc', ctx); | ||||
| 			return NULL; | ||||
| 		} | ||||
|  | ||||
| 		ctx.connected = connected; | ||||
| 		if (!uam && connected?.state) { | ||||
| 			include('connected.uc', ctx); | ||||
| 			switch (split(ctx.env.REQUEST_URI, '?')[0] || '') { | ||||
| 			case '/logout': | ||||
| 			case '/logoff': | ||||
| 				this.logoff(ctx, false); | ||||
| 				break; | ||||
| 			default: | ||||
| 				include('connected.uc', ctx); | ||||
| 				break; | ||||
| 			} | ||||
| 			return; | ||||
| 		} | ||||
| 		if (!connected.data.ssid) { | ||||
|   | ||||
							
								
								
									
										31
									
								
								patches/0073-india_regd_fix.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								patches/0073-india_regd_fix.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| From efd50b88a79b773d8f6489086bf210aec63ee49b Mon Sep 17 00:00:00 2001 | ||||
| From: Felix Fietkau <nbd@nbd.name> | ||||
| Date: Wed, 12 Jun 2024 13:41:23 +0200 | ||||
| Subject: [PATCH] wireless-regdb: add DFS region for india | ||||
|  | ||||
| Signed-off-by: Felix Fietkau <nbd@nbd.name> | ||||
| --- | ||||
|  .../wireless-regdb/patches/100-india_regd_fix.patch   | 11 +++++++++++ | ||||
|  1 file changed, 11 insertions(+) | ||||
|  create mode 100644 package/firmware/wireless-regdb/patches/100-india_regd_fix.patch | ||||
|  | ||||
| diff --git a/package/firmware/wireless-regdb/patches/100-india_regd_fix.patch b/package/firmware/wireless-regdb/patches/100-india_regd_fix.patch | ||||
| new file mode 100644 | ||||
| index 000000000000..c113e5218c17 | ||||
| --- /dev/null | ||||
| +++ b/package/firmware/wireless-regdb/patches/100-india_regd_fix.patch | ||||
| @@ -0,0 +1,11 @@ | ||||
| +--- a/db.txt | ||||
| ++++ b/db.txt | ||||
| +@@ -883,7 +883,7 @@ country IL: DFS-ETSI | ||||
| + # Source: | ||||
| + # https://dot.gov.in/spectrummanagement/delicensing-24-24835-ghz-band-gsr-45-e-5150-5350-ghz-gsr-46-e-and-5725-5875-ghz | ||||
| + # https://dot.gov.in/spectrummanagement/license-exemption-5-ghz-gsr-1048e-dated-22102018 | ||||
| +-country IN: | ||||
| ++country IN: DFS-FCC | ||||
| + 	(2402 - 2482 @ 40), (30) | ||||
| + 	(5150 - 5250 @ 80), (30) | ||||
| + 	(5250 - 5350 @ 80), (24), DFS | ||||
| --  | ||||
| 2.39.2 | ||||
|  | ||||
							
								
								
									
										15
									
								
								profiles/udaya_a6-id2.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								profiles/udaya_a6-id2.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| --- | ||||
| profile: udaya_a6_id2 | ||||
| target: ipq50xx | ||||
| subtarget: generic | ||||
| description: Build image for the Udaya A6 - id2 | ||||
| image: bin/targets/ipq50xx/generic/openwrt-ipq50xx-udaya_a6_id2-squashfs-sysupgrade.tar | ||||
| feeds: | ||||
|   - name: ipq807x | ||||
|     path: ../../feeds/ipq807x_v5.4 | ||||
| include: | ||||
|   - ucentral-ap | ||||
| packages: | ||||
|   - ipq50xx | ||||
| diffconfig: | | ||||
|   CONFIG_KERNEL_IPQ_MEM_PROFILE=512 | ||||
		Reference in New Issue
	
	Block a user