mirror of
				https://github.com/Telecominfraproject/wlan-ap.git
				synced 2025-10-29 09:32:34 +00:00 
			
		
		
		
	Compare commits
	
		
			58 Commits
		
	
	
		
			WIFI-14666
			...
			nwa50be-de
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 757f7155a3 | ||
|   | 9b0bc0dbc0 | ||
|   | 66e5b21eba | ||
|   | 8e0b1a3237 | ||
|   | 0f114096a1 | ||
|   | 684126a3c8 | ||
|   | 7d6e04cc76 | ||
|   | 443fc3f4a2 | ||
|   | a696679b50 | ||
|   | 5f8c4d31cc | ||
|   | aa78f40843 | ||
|   | 721fb4cc4d | ||
|   | f75a36f89f | ||
|   | a375b9f774 | ||
|   | 16d029f10f | ||
|   | bb45e09e8b | ||
|   | 2798088cec | ||
|   | 470703a490 | ||
|   | c56d60b2d3 | ||
|   | 1178c3b6f1 | ||
|   | 0db44ca55b | ||
|   | ae5015424b | ||
|   | 32c7a7ff1d | ||
|   | 39e601cbd4 | ||
|   | ce9c896371 | ||
|   | 0008cb20dd | ||
|   | 701242ed25 | ||
|   | 67dd4bfca7 | ||
|   | 88fb4cafbc | ||
|   | feb410ddc3 | ||
|   | 43a8dd1303 | ||
|   | 188f6b33e0 | ||
|   | 27e4eb3685 | ||
|   | cd8294eca0 | ||
|   | e12ecf831e | ||
|   | 1213182012 | ||
|   | d5df71619a | ||
|   | a177884893 | ||
|   | 1f7d8a7bb7 | ||
|   | dc02d2722a | ||
|   | 13ac9166ef | ||
|   | 3d6f360cb6 | ||
|   | 6659e77bd0 | ||
|   | b061cc55ce | ||
|   | b17db16c15 | ||
|   | d36866301f | ||
|   | ffccb65d1b | ||
|   | af165342ed | ||
|   | ed62236d31 | ||
|   | 346bdd9c16 | ||
|   | dc41a0fd0c | ||
|   | 2b26a4e68a | ||
|   | fa96b2b24d | ||
|   | 36f00adc7a | ||
|   | 5314a752bd | ||
|   | 0f6683f31e | ||
|   | 8ee96c36c9 | ||
|   | 89789900f5 | 
							
								
								
									
										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_wf189h', 'cig_wf189w', 'cig_wf672', 'cig_wf186h', 'cig_wf186w', 'cig_wf188n', 'cig_wf189', 'cig_wf196', 'cig_wf196', 'cybertan_eww631-a1', 'cybertan_eww631-b1', 'sonicfi_rap630w-312g', 'sonicfi_rap63xc-211g', 'sonicfi_rap630c-311g', 'sonicfi_rap630w-311g', 'sonicfi_rap630w-211g', 'sonicfi_rap650c', 'sonicfi_rap7110c-341x', 'sonicfi_rap750e-h', 'sonicfi_rap750e-s', 'sonicfi_rap750w-311a', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_eap105', 'edgecore_eap111', 'edgecore_eap112', 'edgecore_oap101', 'edgecore_oap101-6e', 'edgecore_oap101e', 'edgecore_oap101e-6e', 'edgecore_oap103', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'hfcl_ion4x_3', 'hfcl_ion4xi_w', 'hfcl_ion4x_w', 'indio_um-305ax', 'senao_iap4300m', 'senao_iap2300m', 'senao_jeap6500', 'udaya_a6-id2', 'udaya_a6-od2', 'yuncore_ax820', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650', 'yuncore_fap655', 'emplus_wap588m', 'zyxel_nwa130be', 'sercomm_ap72tip-v4' ] | ||||
|         target: [ 'cig_wf189h', 'cig_wf189w', 'cig_wf660a', 'cig_wf672', 'cig_wf186h', 'cig_wf186w', 'cig_wf188n', 'cig_wf189', 'cig_wf196', 'cig_wf196', 'cybertan_eww631-a1', 'cybertan_eww631-b1', 'sonicfi_rap630w-312g', 'sonicfi_rap63xc-211g', 'sonicfi_rap630c-311g', 'sonicfi_rap630w-311g', 'sonicfi_rap630w-211g', 'sonicfi_rap650c', 'sonicfi_rap7110c-341x', 'sonicfi_rap750e-h', 'sonicfi_rap750e-s', 'sonicfi_rap750w-311a', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_eap105', 'edgecore_eap111', 'edgecore_eap112', 'edgecore_oap101', 'edgecore_oap101-6e', 'edgecore_oap101e', 'edgecore_oap101e-6e', 'edgecore_oap103', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'hfcl_ion4x_3', 'hfcl_ion4xi_w', 'hfcl_ion4x_w', 'indio_um-305ax', 'senao_iap4300m', 'senao_iap2300m', 'senao_jeap6500', 'udaya_a6-id2', 'udaya_a6-od2', 'yuncore_ax820', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650', 'yuncore_fap655', 'emplus_wap588m', 'zyxel_nwa130be', 'zyxel_nwa50be', 'sercomm_ap72tip-v4' ] | ||||
|     steps: | ||||
|     - uses: actions/checkout@v3 | ||||
|  | ||||
|   | ||||
| @@ -117,8 +117,6 @@ hostapd_common_add_device_config() { | ||||
| 	config_add_boolean legacy_rates | ||||
| 	config_add_int cell_density | ||||
| 	config_add_int rts_threshold | ||||
| 	config_add_int rssi_reject_assoc_rssi | ||||
| 	config_add_int rssi_ignore_probe_request | ||||
| 	config_add_int maxassoc | ||||
| 	config_add_boolean maxassoc_ignore_probe | ||||
|  | ||||
| @@ -162,7 +160,7 @@ hostapd_prepare_device_config() { | ||||
|  | ||||
| 	json_get_vars country country3 country_ie beacon_int:100 dtim_period:2 doth require_mode legacy_rates \ | ||||
| 		acs_chan_bias local_pwr_constraint spectrum_mgmt_required airtime_mode cell_density \ | ||||
| 		rts_threshold beacon_rate rssi_reject_assoc_rssi rssi_ignore_probe_request maxassoc \ | ||||
| 		rts_threshold beacon_rate maxassoc \ | ||||
| 		multiple_bssid he_co_locate rnr_beacon ema acs_exclude_dfs \ | ||||
| 		maxassoc_ignore_probe band | ||||
|  | ||||
| @@ -261,8 +259,6 @@ hostapd_prepare_device_config() { | ||||
| 		hostapd_add_rate brlist "$br" | ||||
| 	done | ||||
|  | ||||
| 	[ -n "$rssi_reject_assoc_rssi" ] && append base_cfg "rssi_reject_assoc_rssi=$rssi_reject_assoc_rssi" "$N" | ||||
| 	[ -n "$rssi_ignore_probe_request" ] && append base_cfg "rssi_ignore_probe_request=$rssi_ignore_probe_request" "$N" | ||||
| 	[ -n "$beacon_rate" ] && append base_cfg "beacon_rate=$beacon_rate" "$N" | ||||
| 	[ -n "$rlist" ] && append base_cfg "supported_rates=$rlist" "$N" | ||||
| 	[ -n "$brlist" ] && append base_cfg "basic_rates=$brlist" "$N" | ||||
| @@ -471,6 +467,9 @@ hostapd_common_add_bss_config() { | ||||
| 	config_add_string uci_section | ||||
|  | ||||
| 	config_add_boolean dynamic_probe_resp | ||||
|  | ||||
| 	config_add_int rssi_reject_assoc_rssi | ||||
| 	config_add_int rssi_ignore_probe_request | ||||
| } | ||||
|  | ||||
| hostapd_set_vlan_file() { | ||||
| @@ -724,7 +723,8 @@ hostapd_set_bss_options() { | ||||
| 		airtime_bss_weight airtime_bss_limit airtime_sta_weight \ | ||||
| 		multicast_to_unicast_all proxy_arp per_sta_vif \ | ||||
| 		eap_server eap_user_file ca_cert server_cert private_key private_key_passwd server_id \ | ||||
| 		vendor_elements fils uci_section dynamic_probe_resp | ||||
| 		vendor_elements fils uci_section dynamic_probe_resp \ | ||||
| 		rssi_reject_assoc_rssi rssi_ignore_probe_request  | ||||
|  | ||||
| 	set_default fils 0 | ||||
| 	set_default isolate 0 | ||||
| @@ -778,6 +778,8 @@ hostapd_set_bss_options() { | ||||
| 	append bss_conf "uapsd_advertisement_enabled=$uapsd" "$N" | ||||
| 	append bss_conf "utf8_ssid=$utf8_ssid" "$N" | ||||
| 	append bss_conf "multi_ap=$multi_ap" "$N" | ||||
| 	[ -n "$rssi_reject_assoc_rssi" ] && append bss_conf "rssi_reject_assoc_rssi=$rssi_reject_assoc_rssi" "$N" | ||||
| 	[ -n "$rssi_ignore_probe_request" ] && append bss_conf "rssi_ignore_probe_request=$rssi_ignore_probe_request" "$N" | ||||
| 	[ -n "$vendor_elements" ] && append bss_conf "vendor_elements=$vendor_elements" "$N" | ||||
|  | ||||
| 	[ "$tdls_prohibit" -gt 0 ] && append bss_conf "tdls_prohibit=$tdls_prohibit" "$N" | ||||
|   | ||||
							
								
								
									
										14
									
								
								feeds/hostapd/hostapd/patches/zzz-ignore-probe-event.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								feeds/hostapd/hostapd/patches/zzz-ignore-probe-event.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| --- a/src/ap/beacon.c | ||||
| +++ b/src/ap/beacon.c | ||||
| @@ -934,8 +934,10 @@ void handle_probe_req(struct hostapd_dat | ||||
|  	int ubus_response; | ||||
|   | ||||
|  	if (hapd->iconf->rssi_ignore_probe_request && ssi_signal && | ||||
| -	    ssi_signal < hapd->iconf->rssi_ignore_probe_request) | ||||
| +	    ssi_signal < hapd->iconf->rssi_ignore_probe_request) { | ||||
| +		hostapd_ubus_notify_rssi(hapd, "rssi-ignore-probe", mgmt->sa, ssi_signal); | ||||
|  		return; | ||||
| +	} | ||||
|   | ||||
|  	if (len < IEEE80211_HDRLEN) | ||||
|  		return; | ||||
| @@ -1944,6 +1944,21 @@ void hostapd_ubus_notify(struct hostapd_data *hapd, const char *type, const u8 * | ||||
| 	ubus_notify(ctx, &hapd->ubus.obj, type, b.head, -1); | ||||
| } | ||||
|  | ||||
| void hostapd_ubus_notify_rssi(struct hostapd_data *hapd, const char *type, const u8 *addr, int rssi) | ||||
| { | ||||
| 	if (!hapd->ubus.obj.has_subscribers) | ||||
| 		return; | ||||
|  | ||||
| 	if (!addr) | ||||
| 		return; | ||||
|  | ||||
| 	blob_buf_init(&b, 0); | ||||
| 	blobmsg_add_macaddr(&b, "address", addr); | ||||
| 	blobmsg_add_u32(&b, "rssi", rssi); | ||||
|  | ||||
| 	ubus_notify(ctx, &hapd->ubus.obj, type, b.head, -1); | ||||
| } | ||||
|  | ||||
| void hostapd_ubus_notify_csa(struct hostapd_data *hapd, int freq) | ||||
| { | ||||
| 	if (!hapd->ubus.obj.has_subscribers) | ||||
|   | ||||
| @@ -56,6 +56,7 @@ void hostapd_ubus_notify_beacon_report(struct hostapd_data *hapd, | ||||
| 				       size_t len); | ||||
| void hostapd_ubus_notify_radar_detected(struct hostapd_iface *iface, int frequency, | ||||
| 					int chan_width, int cf1, int cf2); | ||||
| void hostapd_ubus_notify_rssi(struct hostapd_data *hapd, const char *type, const u8 *addr, int rssi); | ||||
|  | ||||
| void hostapd_ubus_notify_bss_transition_response( | ||||
| 	struct hostapd_data *hapd, const u8 *addr, u8 dialog_token, u8 status_code, | ||||
|   | ||||
| @@ -41,6 +41,8 @@ ALLWIFIBOARDS:= \ | ||||
| 	edgecore-oap102 \ | ||||
| 	edgecore-oap103 \ | ||||
| 	edgecore-eap104 \ | ||||
| 	emplus-wap385c \ | ||||
| 	emplus-wap386v2 \ | ||||
| 	liteon-wpx8324 \ | ||||
| 	indio-um-310ax-v1 \ | ||||
| 	indio-um-510axp-v1 \ | ||||
| @@ -404,6 +406,8 @@ $(eval $(call generate-ath11k-wifi-package,edgecore-eap102,Edgecore EAP102)) | ||||
| $(eval $(call generate-ath11k-wifi-package,edgecore-oap102,Edgecore OAP102)) | ||||
| $(eval $(call generate-ath11k-wifi-package,edgecore-oap103,Edgecore OAP103)) | ||||
| $(eval $(call generate-ath11k-wifi-package,edgecore-eap104,Edgecore EAP104)) | ||||
| $(eval $(call generate-ath11k-wifi-package,emplus-wap385c,Emplus WAP385C)) | ||||
| $(eval $(call generate-ath11k-wifi-package,emplus-wap386v2,Emplus WAP386 V2)) | ||||
| $(eval $(call generate-ath11k-wifi-package,liteon-wpx8324,Liteon WPX8324)) | ||||
| $(eval $(call generate-ath11k-wifi-package,indio-um-310ax-v1,Indio UM-310AX V1)) | ||||
| $(eval $(call generate-ath11k-wifi-package,indio-um-510axp-v1,Indio UM-510AXP V1)) | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-emplus-wap385c.bin.IPQ5018
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-emplus-wap385c.bin.IPQ5018
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-emplus-wap385c.bin.QCN6122
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-emplus-wap385c.bin.QCN6122
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -18,9 +18,11 @@ start() { | ||||
| 	[ "$enabled" -gt 0 ] || return 1 | ||||
|  | ||||
| 	case "$board" in | ||||
| 	sonicfi,rap630c-311g|\ | ||||
| 	sonicfi,rap630w-311g) | ||||
|         service_start /usr/sbin/cooling | ||||
| 		sonicfi,rap630c-311g) | ||||
| 		service_start /usr/sbin/cooling -c /etc/cooling/sonicfi-rap630c-311g-cooling.conf | ||||
| 		;; | ||||
| 		sonicfi,rap630w-311g) | ||||
| 		service_start /usr/sbin/cooling -c /etc/cooling/sonicfi-rap630w-311g-cooling.conf | ||||
| 		;; | ||||
| 	esac | ||||
|  | ||||
|   | ||||
| @@ -28,143 +28,270 @@ | ||||
|  | ||||
| #define CUR_STATE_PATH "/sys/devices/virtual/thermal/cooling_device%i/cur_state" | ||||
| #define TEMPER_PATH "/sys/devices/virtual/thermal/thermal_zone%i/temp" | ||||
| #define CPU_FREQ_PATH "/sys/devices/system/cpu/cpu0/cpufreq/%s" | ||||
|  | ||||
| #define PATH_MAX 256 | ||||
| #define BUF_MAX 8 | ||||
| #define THERSHOLD_MAX 20 | ||||
| #define BUF_MAX 32 | ||||
| #define PHY0 0 | ||||
| #define PHY1 1 | ||||
| #define NUM_VALUES 4 | ||||
|  | ||||
| int load_config_file=0; | ||||
|  | ||||
| //#define ULOG_INFO(fmt, ...) ulog(LOG_INFO, fmt, ## __VA_ARGS__) | ||||
|  | ||||
| typedef unsigned char	u8; | ||||
| typedef unsigned long	u32; | ||||
|  | ||||
| u8 w2g_threshold_level=0; | ||||
| u8 w5g_threshold_level=0; | ||||
| u8 w2g_cur_temper=0; | ||||
| u8 w5g_cur_temper=0; | ||||
| u32 level_cpu_freq=1008000; | ||||
|  | ||||
|  | ||||
| /* default value of wifi thresholds*/ | ||||
| #ifdef PLATFORM_RAP630C_311G | ||||
| u8 level_2g_lo[4]={0, 105, 110, 115}; | ||||
| u8 level_2g_hi[4]={105, 110, 115, 120}; | ||||
| u8 level_2g_limit[4]={0, 35, 50, 70}; | ||||
| u8 level_5g_lo[4]={0, 105, 110, 115}; | ||||
| u8 level_5g_hi[4]={105, 110, 115, 120}; | ||||
| u8 level_5g_limit[4]={0, 20, 30, 50}; | ||||
| u8 level_2g_high[4]={105, 110, 115, 120}; | ||||
| u8 level_2g_low[4]={0, 105, 110, 115}; | ||||
| u8 level_2g_mitigation[4]={0, 35, 50, 70}; | ||||
| u8 level_5g_high[4]={105, 110, 115, 120}; | ||||
| u8 level_5g_low[4]={0, 105, 110, 115}; | ||||
| u8 level_5g_mitigation[4]={0, 20, 30, 50}; | ||||
| u32 level_cpu_frequency[4]={1008000, 800000, 800000, 800000}; | ||||
| #endif | ||||
|  | ||||
| #ifdef PLATFORM_RAP630W_311G | ||||
| u8 level_2g_lo[4]={0, 105, 110, 115}; | ||||
| u8 level_2g_hi[4]={105, 110, 115, 120}; | ||||
| u8 level_2g_limit[4]={0, 20, 50, 70}; | ||||
| u8 level_5g_lo[4]={0, 105, 110, 115}; | ||||
| u8 level_5g_hi[4]={105, 110, 115, 120}; | ||||
| u8 level_5g_limit[4]={0, 20, 50, 70}; | ||||
| u8 level_2g_high[4]={105, 110, 115, 120}; | ||||
| u8 level_2g_low[4]={0, 105, 110, 115}; | ||||
| u8 level_2g_mitigation[4]={0, 20, 50, 70}; | ||||
| u8 level_5g_high[4]={105, 110, 115, 120}; | ||||
| u8 level_5g_low[4]={0, 105, 110, 115}; | ||||
| u8 level_5g_mitigation[4]={0, 20, 50, 70}; | ||||
| u32 level_cpu_frequency[4]={1008000, 800000, 800000, 800000}; | ||||
| #endif | ||||
|  | ||||
| static char *config_file = NULL; | ||||
| char temp[4][BUF_MAX]; | ||||
|  | ||||
| #define ULOG_DBG(fmt, ...) ulog(LOG_DEBUG, fmt, ## __VA_ARGS__) | ||||
| typedef struct { | ||||
|     int thresholds_high[NUM_VALUES]; | ||||
|     int thresholds_low[NUM_VALUES]; | ||||
|     int mitigation[NUM_VALUES]; | ||||
|     int cpu_freq[NUM_VALUES]; | ||||
| } WifiConfig; | ||||
|  | ||||
| static void write_cur_state (char *filename, int state) { | ||||
| WifiConfig wifi2g = {0}, wifi5g = {0}; | ||||
|  | ||||
| static void set_cpu_freq (int freq) { | ||||
| 	FILE * fp; | ||||
| 	char filename[PATH_MAX]; | ||||
|  | ||||
| 	snprintf(filename, PATH_MAX, CPU_FREQ_PATH, "scaling_governor"); | ||||
|  | ||||
| 	fp = fopen(filename, "w"); | ||||
| 	if (!fp) { | ||||
| 		ULOG_ERR("open scaling_governor error\n"); | ||||
| 	} | ||||
| 	fprintf(fp, "%s", "userspace"); | ||||
| 	fclose(fp); | ||||
|  | ||||
| 	snprintf(filename, PATH_MAX, CPU_FREQ_PATH, "scaling_setspeed"); | ||||
|  | ||||
| 	fp = fopen(filename, "w"); | ||||
| 	if (!fp) { | ||||
| 		ULOG_ERR("open scaling_setspeed error\n"); | ||||
| 	} | ||||
| 	fprintf(fp, "%d", freq); | ||||
| 	fclose(fp); | ||||
| } | ||||
|  | ||||
| void parse_line(const char* line, const char* key, int* array) { | ||||
| 	char label[64]; | ||||
| 	int values[NUM_VALUES]; | ||||
| 	int i; | ||||
|  | ||||
| 	if (sscanf(line, "%s %d %d %d %d %d", label, &values[0], &values[1], &values[2], &values[3], &values[4]) == 5) { | ||||
| 		for (i = 0; i < NUM_VALUES; ++i) { | ||||
| 			array[i] = values[i]; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| int load_config() { | ||||
| 	FILE * fp = fopen(config_file, "r"); | ||||
| 	if (!fp) { | ||||
| 		ULOG_ERR("open config file error\n"); | ||||
| 		return 1; | ||||
| 	} | ||||
|  | ||||
| 	WifiConfig* current_config = NULL; | ||||
| 	char line[256]; | ||||
|  | ||||
| 	while (fgets(line, sizeof(line), fp)) { | ||||
| 		if (strstr(line, "[wifi2g]")) { | ||||
| 			current_config = &wifi2g; | ||||
| 		} else if (strstr(line, "[wifi5g]")) { | ||||
| 			current_config = &wifi5g; | ||||
| 		} else if (current_config) { | ||||
| 			if (strstr(line, "thresholds_high")) { | ||||
| 				parse_line(line, "thresholds_high", current_config->thresholds_high); | ||||
| 			} else if (strstr(line, "thresholds_low")) { | ||||
| 				parse_line(line, "thresholds_low", current_config->thresholds_low); | ||||
| 			} else if (strstr(line, "mitigation")) { | ||||
| 				parse_line(line, "mitigation", current_config->mitigation); | ||||
| 			} else if (strstr(line, "CPU_freq")) { | ||||
| 				parse_line(line, "CPU_freq", current_config->cpu_freq); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	fclose(fp); | ||||
| 	set_cpu_freq(wifi5g.cpu_freq[0]); | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| int load_default_config(){ | ||||
| 	int i=0; | ||||
|  | ||||
| 	set_cpu_freq(1008000); | ||||
| 	for (i = 0; i < NUM_VALUES; i++) { | ||||
| 		wifi2g.thresholds_high[i]=level_2g_high[i]; | ||||
| 		wifi2g.thresholds_low[i]=level_2g_low[i]; | ||||
| 		wifi2g.mitigation[i]=level_2g_mitigation[i]; | ||||
| 		wifi2g.cpu_freq[i]=level_cpu_frequency[i]; | ||||
| 		wifi5g.thresholds_high[i]=level_5g_high[i]; | ||||
| 		wifi5g.thresholds_low[i]=level_5g_low[i]; | ||||
| 		wifi5g.mitigation[i]=level_5g_mitigation[i]; | ||||
| 		wifi5g.cpu_freq[i]=level_cpu_frequency[i]; | ||||
| 	} | ||||
| 	return 0; | ||||
|  | ||||
| } | ||||
|  | ||||
| static void write_cur_state (const char *filename, int state) { | ||||
| 	FILE * fp; | ||||
|  | ||||
| 	ULOG_DBG("write_cur_state filename=[%s] [%d]\n", filename, state); | ||||
| 	fp = fopen(filename, "w"); | ||||
| 	if (!fp){ | ||||
| 		ULOG_ERR("some kind of error write cur_state\n"); | ||||
| 		ULOG_ERR("open %s file error\n",filename); | ||||
| 	} | ||||
| 	fprintf(fp, "%d", state); | ||||
| 	fclose(fp); | ||||
| } | ||||
|  | ||||
| static void read_cur_state (char *filename, char *buffer) { | ||||
| 	FILE * fp; | ||||
|  | ||||
| int read_cur_state(const char *filename, char *buf, size_t buffer) { | ||||
| 	FILE *fp; | ||||
| 	 | ||||
| 	fp = fopen(filename, "r"); | ||||
| 	if (!fp){ | ||||
| 		ULOG_ERR("some kind of error write cur_state\n"); | ||||
| 	if (!fp) { | ||||
| 		ULOG_ERR("open %s file error\n",filename); | ||||
| 		return -1; | ||||
| 	} | ||||
| 	if (0 == fread(buffer, sizeof(char), 3, fp)) { | ||||
| 		ULOG_ERR("some kind of error read value\n"); | ||||
| 	if (!fgets(buf, buffer, fp)) { | ||||
| 		ULOG_ERR("Failed to read %s file\n", filename); | ||||
| 		fclose(fp); | ||||
| 		return -1; | ||||
| 	} | ||||
| 	fclose(fp); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
|  | ||||
| static void wifi_get_temperature() { | ||||
| 	char filename[PATH_MAX]; | ||||
| 	FILE * fp; | ||||
| 	int i = 0; | ||||
| 	char buffer[BUF_MAX]; | ||||
| 	int i = 0; | ||||
|  | ||||
| //	ULOG_INFO("=================================\n"); | ||||
|  | ||||
| 	/* read cpuinfo_cur_freq*/ | ||||
| 	snprintf(filename, PATH_MAX, CPU_FREQ_PATH, "cpuinfo_cur_freq"); | ||||
|  | ||||
| 	memset(buffer, 0, BUF_MAX); | ||||
| 	read_cur_state(filename, buffer, sizeof(buffer)); | ||||
| //	ULOG_INFO("CPU current frequency: %s\n", buffer); | ||||
|  | ||||
| 	/* get current phy cooling state*/ | ||||
| 	for (i=0 ; i <= 1; i++ ) { | ||||
| 	for (i=0; i <= 1; i++) { | ||||
| 		memset(buffer, 0, BUF_MAX); | ||||
| 		snprintf(filename, PATH_MAX, CUR_STATE_PATH, i); | ||||
| 		read_cur_state(filename, buffer); | ||||
| 		ULOG_DBG("read from Phy%i cur_state is %s\n", i, buffer); | ||||
| 		read_cur_state(filename, buffer, sizeof(buffer)); | ||||
| //		ULOG_INFO("Phy%i cur_state is: %s\n", i, buffer); | ||||
| 	} | ||||
|  | ||||
| 	for (i=0 ; i <= 3; i++ ) { | ||||
| 	for (i=0; i <= 3; i++) { | ||||
| 		memset(buffer, 0, BUF_MAX); | ||||
| 		snprintf(filename, PATH_MAX, TEMPER_PATH, i); | ||||
| 		fp = fopen(filename, "r"); | ||||
| 		if (!fp) { | ||||
| 			ULOG_ERR("some kind of error open value\n"); | ||||
| 		} | ||||
| 		memset(temp[i], 0, BUF_MAX); | ||||
| 		if (0 == fread(temp[i], sizeof(char), 3, fp)) { | ||||
| 			ULOG_ERR("some kind of error read value\n"); | ||||
| 		} | ||||
| 		fclose(fp); | ||||
| 		ULOG_DBG("thermal_zone%i cur_temp is %s\n", i, temp[i]); | ||||
| 		read_cur_state(filename, buffer, sizeof(buffer)); | ||||
| //		ULOG_INFO("thermal_zone%i cur_temp is: %s\n", i, buffer); | ||||
|  | ||||
| 		if (i == 0) | ||||
| 			w2g_cur_temper=atoi(buffer); | ||||
| 		else if (i == 3) | ||||
| 			w5g_cur_temper=atoi(buffer); | ||||
| 	} | ||||
|  | ||||
| 	w2g_cur_temper=atoi(temp[0]); | ||||
| 	w5g_cur_temper=atoi(temp[3]); | ||||
| 	if (w5g_cur_temper >= 120) | ||||
| 	{ | ||||
| 		ULOG_ERR("!! Temperature is over %d degree, system will reboot\n", w5g_cur_temper); | ||||
| 		sync(); | ||||
| 		if ( -1 != system("reboot &") ){ | ||||
| 			printf("sysyem reboot...\n"); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| static void wifi_set_cooling() { | ||||
| 	char filename[PATH_MAX]; | ||||
| 	int level; | ||||
|  | ||||
| 	for (level=0 ; level<=3 ; level++) { | ||||
| 		if (w2g_cur_temper >= level_2g_lo[level] && w2g_cur_temper < level_2g_hi[level]) { | ||||
| 			ULOG_DBG("2G at level %d , %d degree\n" ,level, w2g_cur_temper); | ||||
| 	for (level = 0; level <= 3; level++) { | ||||
| 		if (w2g_cur_temper >= wifi2g.thresholds_low[level] && w2g_cur_temper < wifi2g.thresholds_high[level]) { | ||||
| //			ULOG_INFO("2G at level %d , %d degree\n" ,level, w2g_cur_temper); | ||||
| 			if (w2g_threshold_level != level) { | ||||
| 				ULOG_DBG("setting 2G reduce %d percent\n" ,level_2g_limit[level]); | ||||
| //				ULOG_INFO("setting 2G reduce %d percent\n" ,wifi2g.mitigation[level]); | ||||
| 				snprintf(filename, PATH_MAX, CUR_STATE_PATH, PHY0); | ||||
| 				write_cur_state(filename, level_2g_limit[level]); | ||||
| 				write_cur_state(filename, wifi2g.mitigation[level]); | ||||
| 				w2g_threshold_level = level; | ||||
| 			} | ||||
| 		} | ||||
| 		if (w5g_cur_temper >= level_5g_lo[level] && w5g_cur_temper < level_5g_hi[level]) { | ||||
| 			ULOG_DBG("5G at level %d , %d degree\n" ,level, w5g_cur_temper); | ||||
| 		if (w5g_cur_temper >= wifi5g.thresholds_low[level] && w5g_cur_temper < wifi5g.thresholds_high[level]) { | ||||
| //			ULOG_INFO("5G at level %d , %d degree\n" ,level, w5g_cur_temper); | ||||
| 			if (w5g_threshold_level != level) { | ||||
| 				ULOG_DBG("setting 5G reduce %d percent\n" ,level_5g_limit[level]); | ||||
| //				ULOG_INFO("setting 5G reduce %d percent\n" ,wifi5g.mitigation[level]); | ||||
| 				snprintf(filename, PATH_MAX, CUR_STATE_PATH, PHY1); | ||||
| 				write_cur_state(filename, level_5g_limit[level]); | ||||
| 				write_cur_state(filename, wifi5g.mitigation[level]); | ||||
| 				w5g_threshold_level = level; | ||||
| 				set_cpu_freq(wifi5g.cpu_freq[level]); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| } | ||||
|  | ||||
|  | ||||
| static void cooling_init() { | ||||
| 	char filename[256]; | ||||
| 	int i; | ||||
| 	char filename[PATH_MAX]; | ||||
| 	int i,result=0; | ||||
|  | ||||
| 	for (i=0 ; i <= 1; i++) { | ||||
| 		snprintf(filename, PATH_MAX, CUR_STATE_PATH, i); | ||||
| 		write_cur_state(filename, 0); | ||||
| 	} | ||||
|  | ||||
| 	if(load_config_file) | ||||
| 		result = load_config(); | ||||
|  | ||||
| 	if (result == 1 || load_config_file == 0) | ||||
| 		load_default_config(); | ||||
| } | ||||
|  | ||||
| void print_usage(void) | ||||
| { | ||||
| 	printf("\nWifi-cooling daemon usage\n"); | ||||
| 	printf("Optional arguments:\n"); | ||||
| 	printf("  -c <file>        config file\n"); | ||||
| 	printf("  -d               debug output\n"); | ||||
| 	printf("  -c <file>        setting with config file\n"); | ||||
| 	printf("  -d               default setting\n"); | ||||
| 	printf("  -h               this usage screen\n"); | ||||
| } | ||||
|  | ||||
| @@ -185,17 +312,18 @@ int main(int argc, char *argv[]) | ||||
| 	setpriority(PRIO_PROCESS, getpid(), -20); | ||||
|  | ||||
| 	ulog_open(ULOG_STDIO | ULOG_SYSLOG, LOG_DAEMON, "cooling"); | ||||
| 	ulog_threshold(LOG_INFO); | ||||
| 	ulog_threshold(LOG_ERR); | ||||
| //	ulog_threshold(LOG_INFO); | ||||
|  | ||||
| 	while ((ch = getopt(argc, argv, "c:dh")) != -1) { | ||||
|  	while ((ch = getopt(argc, argv, "c:dh")) != -1) { | ||||
| 		switch (ch) { | ||||
| 		case 'c': | ||||
| 			printf("wifi-cooling load configuration file %s\n", optarg); | ||||
| 			config_file = optarg; | ||||
| 			load_config_file=1; | ||||
| 			break; | ||||
| 		case 'd': | ||||
| 			printf("wifi-cooling ulog_threshold set to debug level\n"); | ||||
| 			ulog_threshold(LOG_DEBUG); | ||||
| 			printf("wifi-cooling set to default value\n"); | ||||
| 			break; | ||||
| 		case 'h': | ||||
| 		default: | ||||
| @@ -212,4 +340,4 @@ int main(int argc, char *argv[]) | ||||
| 	uloop_done(); | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
| } | ||||
|   | ||||
| @@ -1,15 +1,11 @@ | ||||
| sampling 5000 | ||||
| [wifi2g] | ||||
| thresholds_high     105         110         115         120 | ||||
| thresholds_low      0           105         110         115 | ||||
| mitigation          0           35          50          70 | ||||
| CPU_freq            1008000     800000      800000      800000 | ||||
|  | ||||
| [tsens_tz_sensor1] | ||||
| sampling 	5000 | ||||
| thresholds 			105			110			115			119			120 | ||||
| thresholds_clr 		0			100			105			110			115 | ||||
| actions 			cooling		cooling	 	cooling		cooling		shutdown | ||||
| action_info 		0			35	 		50			70			800000 | ||||
|  | ||||
| [tsens_tz_sensor4] | ||||
| sampling 	5000 | ||||
| thresholds 			105			110			115			119			120 | ||||
| thresholds_clr 		0			100			105			110			115 | ||||
| actions 			cooling		cooling		cooling		cooling		shutdown | ||||
| action_info 		0			20			30	 		50			800000 | ||||
| [wifi5g] | ||||
| thresholds_high     105         110         115         120 | ||||
| thresholds_low      0           105         110         115 | ||||
| mitigation          0           20          30          50 | ||||
| CPU_freq            1008000     800000      800000      800000 | ||||
|   | ||||
| @@ -1,15 +1,11 @@ | ||||
| sampling 5000 | ||||
| [wifi2g] | ||||
| thresholds_high     105         110         115         120 | ||||
| thresholds_low      0           105         110         115 | ||||
| mitigation          0           20          50          70 | ||||
| CPU_freq            1008000     800000      800000      800000 | ||||
|  | ||||
| [tsens_tz_sensor1] | ||||
| sampling 	5000 | ||||
| thresholds 			105			115			119			125 | ||||
| thresholds_clr 		0			105			110			120 | ||||
| actions 			cooling		cooling	 	cooling		cooling | ||||
| action_info 		0			20	 		50			70 | ||||
|  | ||||
| [tsens_tz_sensor4] | ||||
| sampling 	5000 | ||||
| thresholds 			105			115			119			125 | ||||
| thresholds_clr 		0			105			110			120 | ||||
| actions 			cooling		cooling		cooling		cooling | ||||
| action_info 		0			20			50	 		70 | ||||
| [wifi5g] | ||||
| thresholds_high     105         110         115         120 | ||||
| thresholds_low      0           105         110         115 | ||||
| mitigation          0           20          50          70 | ||||
| CPU_freq            1008000     800000      800000      800000 | ||||
|   | ||||
| @@ -117,8 +117,6 @@ hostapd_common_add_device_config() { | ||||
| 	config_add_boolean legacy_rates | ||||
| 	config_add_int cell_density | ||||
| 	config_add_int rts_threshold | ||||
| 	config_add_int rssi_reject_assoc_rssi | ||||
| 	config_add_int rssi_ignore_probe_request | ||||
| 	config_add_int maxassoc | ||||
| 	config_add_boolean maxassoc_ignore_probe | ||||
|  | ||||
| @@ -162,7 +160,7 @@ hostapd_prepare_device_config() { | ||||
|  | ||||
| 	json_get_vars country country3 country_ie beacon_int:100 dtim_period:2 doth require_mode legacy_rates \ | ||||
| 		acs_chan_bias local_pwr_constraint spectrum_mgmt_required airtime_mode cell_density \ | ||||
| 		rts_threshold beacon_rate rssi_reject_assoc_rssi rssi_ignore_probe_request maxassoc \ | ||||
| 		rts_threshold beacon_rate maxassoc \ | ||||
| 		multiple_bssid he_co_locate rnr_beacon ema acs_exclude_dfs \ | ||||
| 		maxassoc_ignore_probe band | ||||
|  | ||||
| @@ -261,8 +259,6 @@ hostapd_prepare_device_config() { | ||||
| 		hostapd_add_rate brlist "$br" | ||||
| 	done | ||||
|  | ||||
| 	[ -n "$rssi_reject_assoc_rssi" ] && append base_cfg "rssi_reject_assoc_rssi=$rssi_reject_assoc_rssi" "$N" | ||||
| 	[ -n "$rssi_ignore_probe_request" ] && append base_cfg "rssi_ignore_probe_request=$rssi_ignore_probe_request" "$N" | ||||
| 	[ -n "$beacon_rate" ] && append base_cfg "beacon_rate=$beacon_rate" "$N" | ||||
| 	[ -n "$rlist" ] && append base_cfg "supported_rates=$rlist" "$N" | ||||
| 	[ -n "$brlist" ] && append base_cfg "basic_rates=$brlist" "$N" | ||||
| @@ -472,6 +468,9 @@ hostapd_common_add_bss_config() { | ||||
| 	config_add_string uci_section | ||||
|  | ||||
| 	config_add_boolean dynamic_probe_resp | ||||
|  | ||||
| 	config_add_int rssi_reject_assoc_rssi | ||||
| 	config_add_int rssi_ignore_probe_request | ||||
| } | ||||
|  | ||||
| hostapd_set_vlan_file() { | ||||
| @@ -725,7 +724,8 @@ hostapd_set_bss_options() { | ||||
| 		airtime_bss_weight airtime_bss_limit airtime_sta_weight \ | ||||
| 		multicast_to_unicast_all proxy_arp per_sta_vif \ | ||||
| 		eap_server eap_user_file ca_cert server_cert private_key private_key_passwd server_id \ | ||||
| 		vendor_elements fils uci_section dynamic_probe_resp multi_psk | ||||
| 		vendor_elements fils uci_section dynamic_probe_resp multi_psk \ | ||||
| 		rssi_reject_assoc_rssi rssi_ignore_probe_request | ||||
|  | ||||
| 	set_default fils 0 | ||||
| 	set_default isolate 0 | ||||
| @@ -780,6 +780,8 @@ hostapd_set_bss_options() { | ||||
| 	append bss_conf "uapsd_advertisement_enabled=$uapsd" "$N" | ||||
| 	append bss_conf "utf8_ssid=$utf8_ssid" "$N" | ||||
| 	append bss_conf "multi_ap=$multi_ap" "$N" | ||||
| 	[ -n "$rssi_reject_assoc_rssi" ] && append bss_conf "rssi_reject_assoc_rssi=$rssi_reject_assoc_rssi" "$N" | ||||
| 	[ -n "$rssi_ignore_probe_request" ] && append bss_conf "rssi_ignore_probe_request=$rssi_ignore_probe_request" "$N" | ||||
| 	[ -n "$vendor_elements" ] && append bss_conf "vendor_elements=$vendor_elements" "$N" | ||||
|  | ||||
| 	[ "$tdls_prohibit" -gt 0 ] && append bss_conf "tdls_prohibit=$tdls_prohibit" "$N" | ||||
|   | ||||
| @@ -144,7 +144,7 @@ function netifd_reload() { | ||||
|  | ||||
| 			push(ssid.interfaces, iface.ifname); | ||||
| 			ssid.bands[band] = iface.ifname; | ||||
| 			ssid.mpsk = config.multi_psk; | ||||
| 			ssid.mpsk = ssid?.mpsk ? true : config.multi_psk; | ||||
| 			for (let sta in iface.stations) { | ||||
| 				let stacfg = sta.config; | ||||
|  | ||||
| @@ -308,18 +308,18 @@ function sta_auth_cache(ifname, addr, idx, phrase) { | ||||
| function auth_cb(msg) { | ||||
| 	let data = msg.data; | ||||
|  | ||||
| 	if (!is_ssid_mpsk(data.iface)) | ||||
| 		return; | ||||
|  | ||||
| 	printf(`Event ${msg.type}: ${msg.data}\n`); | ||||
| 	switch (msg.type) { | ||||
| 	case 'sta_auth': | ||||
| 		if (!is_ssid_mpsk(data.iface)) | ||||
| 			return; | ||||
|  | ||||
| 		return { | ||||
| 			psk: sta_auth_psk(data.iface, data.sta), | ||||
| 			force_psk: true, | ||||
| 		}; | ||||
| 	case 'sta_connected': | ||||
| 		if (data.psk_idx == null) | ||||
| 		if (data.psk_idx == null || !is_ssid_mpsk(data.iface)) | ||||
| 			return; | ||||
| 		return sta_auth_cache(data.iface, data.sta, data.psk_idx, data.psk); | ||||
| 	case 'reload': | ||||
|   | ||||
| @@ -0,0 +1,14 @@ | ||||
| --- a/src/ap/beacon.c | ||||
| +++ b/src/ap/beacon.c | ||||
| @@ -934,8 +934,10 @@ void handle_probe_req(struct hostapd_dat | ||||
|  	int ubus_response; | ||||
|   | ||||
|  	if (hapd->iconf->rssi_ignore_probe_request && ssi_signal && | ||||
| -	    ssi_signal < hapd->iconf->rssi_ignore_probe_request) | ||||
| +	    ssi_signal < hapd->iconf->rssi_ignore_probe_request) { | ||||
| +		hostapd_ubus_notify_rssi(hapd, "rssi-ignore-probe", mgmt->sa, ssi_signal); | ||||
|  		return; | ||||
| +	} | ||||
|   | ||||
|  	if (len < IEEE80211_HDRLEN) | ||||
|  		return; | ||||
| @@ -1944,6 +1944,21 @@ void hostapd_ubus_notify(struct hostapd_data *hapd, const char *type, const u8 * | ||||
| 	ubus_notify(ctx, &hapd->ubus.obj, type, b.head, -1); | ||||
| } | ||||
|  | ||||
| void hostapd_ubus_notify_rssi(struct hostapd_data *hapd, const char *type, const u8 *addr, int rssi) | ||||
| { | ||||
| 	if (!hapd->ubus.obj.has_subscribers) | ||||
| 		return; | ||||
|  | ||||
| 	if (!addr) | ||||
| 		return; | ||||
|  | ||||
| 	blob_buf_init(&b, 0); | ||||
| 	blobmsg_add_macaddr(&b, "address", addr); | ||||
| 	blobmsg_add_u32(&b, "rssi", rssi); | ||||
|  | ||||
| 	ubus_notify(ctx, &hapd->ubus.obj, type, b.head, -1); | ||||
| } | ||||
|  | ||||
| void hostapd_ubus_notify_csa(struct hostapd_data *hapd, int freq) | ||||
| { | ||||
| 	if (!hapd->ubus.obj.has_subscribers) | ||||
|   | ||||
| @@ -56,6 +56,7 @@ void hostapd_ubus_notify_beacon_report(struct hostapd_data *hapd, | ||||
| 				       size_t len); | ||||
| void hostapd_ubus_notify_radar_detected(struct hostapd_iface *iface, int frequency, | ||||
| 					int chan_width, int cf1, int cf2); | ||||
| void hostapd_ubus_notify_rssi(struct hostapd_data *hapd, const char *type, const u8 *addr, int rssi); | ||||
|  | ||||
| void hostapd_ubus_notify_bss_transition_response( | ||||
| 	struct hostapd_data *hapd, const u8 *addr, u8 dialog_token, u8 status_code, | ||||
|   | ||||
| @@ -40,6 +40,11 @@ edgecore,oap101e-6e) | ||||
| 	ucidef_set_led_netdev "wan" "wan" "red:ethernet" "eth1" | ||||
|         ucidef_set_led_default "power" "POWER" "blue:management" "on" | ||||
| 	;; | ||||
| emplus,wap385c) | ||||
| 	ucidef_set_led_default "ledr" "LEDR" "sys:red" "on" | ||||
| 	ucidef_set_led_default "ledg" "LEDG" "sys:green" "on" | ||||
| 	ucidef_set_led_default "ledb" "LEDB" "sys:blue" "on" | ||||
| 	;; | ||||
| hfcl,ion4x_w|\ | ||||
| hfcl,ion4xi_w) | ||||
| 	ucidef_set_led_wlan "wlan5g" "WLAN5G" "blue:wifi5" "phy0tpt" | ||||
|   | ||||
| @@ -48,6 +48,7 @@ qcom_setup_interfaces() | ||||
| 		ucidef_add_switch "switch1" \ | ||||
| 			"6u@eth1" "1:lan" "2:lan" "3:lan" "4:lan" | ||||
| 		;; | ||||
| 	emplus,wap385c|\ | ||||
| 	hfcl,ion4x_w|\ | ||||
| 	hfcl,ion4xi_w) | ||||
| 		ucidef_set_interface_wan "eth0" | ||||
|   | ||||
| @@ -129,6 +129,7 @@ ath11k/IPQ5018/hw1.0/caldata.bin) | ||||
| 	edgecore,oap101-6e|\ | ||||
| 	edgecore,oap101e|\ | ||||
| 	edgecore,oap101e-6e|\ | ||||
| 	emplus,wap385c|\ | ||||
| 	hfcl,ion4x_w|\ | ||||
| 	hfcl,ion4xi_w|\ | ||||
| 	optimcloud,d60|\ | ||||
| @@ -157,6 +158,7 @@ ath11k/qcn6122/hw1.0/caldata_1.bin) | ||||
| 	edgecore,oap101-6e|\ | ||||
| 	edgecore,oap101e|\ | ||||
| 	edgecore,oap101e-6e|\ | ||||
| 	emplus,wap385c|\ | ||||
| 	udaya,a6-id2|\ | ||||
| 	udaya,a6-od2|\ | ||||
| 	hfcl,ion4xi_w|\ | ||||
|   | ||||
| @@ -76,6 +76,7 @@ platform_check_image() { | ||||
| 	cybertan,eww631-a1|\ | ||||
| 	cybertan,eww631-b1|\ | ||||
| 	edgecore,eap104|\ | ||||
| 	emplus,wap385c|\ | ||||
| 	wallys,dr5018|\ | ||||
| 	hfcl,ion4x_w|\ | ||||
| 	hfcl,ion4xi_w|\ | ||||
| @@ -129,6 +130,7 @@ platform_do_upgrade() { | ||||
|                 ;; | ||||
| 	cig,wf186w|\ | ||||
| 	cig,wf186h|\ | ||||
| 	emplus,wap385c|\ | ||||
| 	udaya,a6-id2|\ | ||||
| 	udaya,a6-od2|\ | ||||
| 	wallys,dr5018|\ | ||||
|   | ||||
| @@ -0,0 +1,760 @@ | ||||
| /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" | ||||
| #include <dt-bindings/input/input.h> | ||||
|  | ||||
| / { | ||||
| 	#address-cells = <0x2>; | ||||
| 	#size-cells = <0x2>; | ||||
| 	model = "Emplus WAP385C"; | ||||
| 	compatible = "emplus,wap385c", "qcom,ipq5018-mp03.3", "qcom,ipq5018"; | ||||
| 	interrupt-parent = <&intc>; | ||||
|  | ||||
| 	aliases { | ||||
| 		sdhc1 = &sdhc_1; /* SDC1 eMMC slot */ | ||||
| 		serial0 = &blsp1_uart1; | ||||
| 		serial1 = &blsp1_uart2; | ||||
| 		ethernet1 = "/soc/dp1"; | ||||
|  | ||||
| 		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>; | ||||
| 		}; | ||||
| 	#endif | ||||
| 	}; | ||||
|  | ||||
| 	soc { | ||||
| 		serial@78af000 { | ||||
| 			status = "ok"; | ||||
| 		}; | ||||
|  | ||||
| 		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 23 0>; | ||||
|  | ||||
| 			ethernet-phy@0 { | ||||
| 				reg = <24>; | ||||
| 			}; | ||||
| 		}; | ||||
|  | ||||
| 		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 = <0x18>; | ||||
| 						mdiobus = <&mdio1>; | ||||
| 						port_mac_sel = "QGMAC_PORT"; | ||||
| 					}; | ||||
| 				}; | ||||
| 				led_source@0 { | ||||
| 					source = <0>; | ||||
| 					mode = "normal"; | ||||
| 					speed = "all"; | ||||
| 					blink_en = "enable"; | ||||
| 					active = "high"; | ||||
| 				}; | ||||
| 			}; | ||||
| 		}; | ||||
|  | ||||
| 		wifi0: wifi@c000000 { | ||||
| 			status = "ok"; | ||||
| 		}; | ||||
|  | ||||
| 		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"; | ||||
| 		}; | ||||
|  | ||||
| 		nss-macsec1 { | ||||
| 			compatible = "qcom,nss-macsec"; | ||||
| 			phy_addr = <0x18>; | ||||
| 			mdiobus = <&mdio1>; | ||||
| 		}; | ||||
|  | ||||
| 		lpass: lpass@0xA000000{ | ||||
| 			status = "disabled"; | ||||
| 		}; | ||||
|  | ||||
| 		pcm_lb: pcm_lb@0 { | ||||
| 			status = "disabled"; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	qcom,test@0 { | ||||
| 		status = "ok"; | ||||
| 	}; | ||||
|  | ||||
| 	thermal-zones { | ||||
| 		status = "ok"; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &tlmm { | ||||
| 	pinctrl-0 = <&blsp0_uart_pins>; | ||||
| 	pinctrl-names = "default"; | ||||
|  | ||||
| 	blsp0_uart_pins: uart_pins { | ||||
| 		blsp0_uart_rx_tx { | ||||
| 			pins = "gpio20", "gpio21"; | ||||
| 			function = "blsp0_uart0"; | ||||
| 			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; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	poe_dc_pins: poe_dc_pins { | ||||
| 		T2P_DET { | ||||
| 			pins = "gpio31"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-disable; | ||||
| 		}; | ||||
|  | ||||
| 		12V_DET { | ||||
| 			pins = "gpio32"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-disable; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	button_pins: button_pins { | ||||
| 		reset_button { | ||||
| 			pins = "gpio27"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-up; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	leds_pins: leds_pinmux { | ||||
| 		linux,phandle = <0x4d>; | ||||
| 		phandle = <0x4d>; | ||||
|  | ||||
| 		led_G { | ||||
| 			pins = "gpio24"; | ||||
| 			function = "gpio"; | ||||
| 			bias-pull-down; | ||||
| 			drive-strength = <0x08>; | ||||
| 		}; | ||||
|  | ||||
| 		led_B { | ||||
| 			pins = "gpio28"; | ||||
| 			function = "gpio"; | ||||
| 			bias-pull-down; | ||||
| 			drive-strength = <0x08>; | ||||
| 		}; | ||||
|  | ||||
| 		led_R { | ||||
| 			pins = "gpio38"; | ||||
| 			function = "gpio"; | ||||
| 			bias-pull-down; | ||||
| 			drive-strength = <0x08>; | ||||
| 		}; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &soc { | ||||
| 	gpio_keys { | ||||
| 		compatible = "gpio-keys"; | ||||
| 		pinctrl-0 = <&button_pins>; | ||||
| 		pinctrl-names = "default"; | ||||
|  | ||||
| 		button@1 { | ||||
| 			label = "reset"; | ||||
| 			linux,code = <KEY_RESTART>; | ||||
| 			gpios = <&tlmm 27 GPIO_ACTIVE_LOW>; | ||||
| 			linux,input-type = <1>; | ||||
| 			debounce-interval = <60>; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	leds { | ||||
| 		compatible = "gpio-leds"; | ||||
| 		pinctrl-0 = <&leds_pins>; | ||||
| 		pinctrl-names = "default"; | ||||
|  | ||||
| 		led@24 { | ||||
| 			label = "sys:green"; | ||||
| 			gpios = <&tlmm 24 GPIO_ACTIVE_HIGH>; | ||||
| 			default-state = "on"; | ||||
| 		}; | ||||
|  | ||||
| 		led@28 { | ||||
| 			label = "sys:blue"; | ||||
| 			gpios = <&tlmm 28 GPIO_ACTIVE_HIGH>; | ||||
| 			default-state = "on"; | ||||
| 		}; | ||||
|  | ||||
| 		led_power: led@38 { | ||||
| 			label = "sys:red"; | ||||
| 			gpios = <&tlmm 38 GPIO_ACTIVE_HIGH>; | ||||
| 			linux,default-trigger = "wap385c:sys:red"; | ||||
| 			default-state = "on"; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| }; | ||||
|  | ||||
| &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 | ||||
|  | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &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 = <0x24>; | ||||
| #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"; | ||||
| }; | ||||
|  | ||||
| &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 >; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &qfprom { | ||||
| 	status = "ok"; | ||||
| }; | ||||
|  | ||||
| &tsens { | ||||
| 	status = "ok"; | ||||
| }; | ||||
| @@ -154,6 +154,15 @@ define Device/edgecore_oap101e_6e | ||||
| endef | ||||
| TARGET_DEVICES += edgecore_oap101e_6e | ||||
|  | ||||
| define Device/emplus_wap385c | ||||
|   DEVICE_TITLE := Emplus WAP385C | ||||
|   DEVICE_DTS := qcom-ipq5018-emplus-wap385c | ||||
|   SUPPORTED_DEVICES := emplus,wap385c | ||||
|   DEVICE_PACKAGES := ath11k-wifi-emplus-wap385c ath11k-firmware-ipq50xx-map-spruce | ||||
|   DEVICE_DTS_CONFIG := config@mp03.3 | ||||
| endef | ||||
| TARGET_DEVICES += emplus_wap385c | ||||
|  | ||||
| define Device/hfcl_ion4x_w | ||||
|   DEVICE_TITLE := HFCL ION4x_w | ||||
|   DEVICE_DTS := qcom-ipq5018-hfcl-ion4x_w | ||||
|   | ||||
| @@ -26,6 +26,12 @@ edgecore,eap101) | ||||
| 	ucidef_set_led_netdev "poe" "poe" "green:wan" "eth0" | ||||
|         ucidef_set_led_default "power" "POWER" "green:led_pwr" "on" | ||||
| 	;; | ||||
| emplus,wap386v2) | ||||
| 	ucidef_set_led_default "power" "POWER" "red:power" "on" | ||||
| 	ucidef_set_led_netdev "wan" "WAN" "blue:wan" "eth0" "tx rx link" | ||||
| 	ucidef_set_led_wlan "wlan2g" "WLAN2G" "blue:wifi2" "phy1tpt" | ||||
| 	ucidef_set_led_wlan "wlan5g" "WLAN5G" "blue:wifi5" "phy0tpt" | ||||
| 	;; | ||||
| hfcl,ion4xi|\ | ||||
| hfcl,ion4x|\ | ||||
| hfcl,ion4x_2|\ | ||||
|   | ||||
| @@ -34,10 +34,10 @@ qcom_setup_interfaces() | ||||
| 		ucidef_set_interface_lan "eth1" | ||||
| 		ucidef_set_interface_wan "eth0" | ||||
| 		;; | ||||
|        cig,wf660a) | ||||
| 	cig,wf660a|\ | ||||
| 	emplus,wap386v2) | ||||
| 		ucidef_set_interface_wan "eth0"		 | ||||
| 		;; | ||||
|  | ||||
| 	yuncore,fap650) | ||||
| 		ucidef_set_interface_lan "eth3 eth2 eth1 eth0" | ||||
| 		ucidef_set_interface_wan "eth4" | ||||
| @@ -76,6 +76,9 @@ qcom_setup_macs() | ||||
| 		ucidef_set_network_device_mac eth0 $wan_mac | ||||
| 		ip link set eth0 address $wan_mac | ||||
| 		;; | ||||
| 	emplus,wap386v2) | ||||
| 		wan_mac=$(cat /sys/class/net/eth0/address) | ||||
| 		;; | ||||
| 	yuncore,ax840) | ||||
| 		wan_mac=$(cat /sys/class/net/eth1/address) | ||||
| 		lan_mac=$(macaddr_add "$wan_mac" 1) | ||||
|   | ||||
| @@ -76,6 +76,7 @@ case "$FIRMWARE" in | ||||
| 	cig,wf188n|\ | ||||
| 	cig,wf660a|\ | ||||
| 	edgecore,eap101|\ | ||||
| 	emplus,wap386v2|\ | ||||
| 	hfcl,ion4xi|\ | ||||
| 	hfcl,ion4x|\ | ||||
| 	hfcl,ion4x_2|\ | ||||
| @@ -109,7 +110,8 @@ ath11k-macs) | ||||
| 	edgecore,eap101) | ||||
| 		ath11k_generate_macs_eap101 | ||||
| 		;; | ||||
| 	cig,wf188n) | ||||
| 	cig,wf188n|\ | ||||
| 	emplus,wap386v2) | ||||
| 		ath11k_generate_macs | ||||
| 		;; | ||||
| 	cig,wf660a) | ||||
|   | ||||
| @@ -122,6 +122,7 @@ platform_check_image() { | ||||
| 	wallys,dr6018|\ | ||||
| 	wallys,dr6018-v4|\ | ||||
| 	edgecore,eap101|\ | ||||
| 	emplus,wap386v2|\ | ||||
| 	hfcl,ion4xi|\ | ||||
| 	hfcl,ion4x|\ | ||||
| 	hfcl,ion4x_2|\ | ||||
| @@ -145,7 +146,8 @@ platform_do_upgrade() { | ||||
| 	cig,wf660a) | ||||
| 		spi_nor_emmc_do_upgrade_bootconfig $1 | ||||
| 		;; | ||||
| 	cig,wf188n) | ||||
| 	cig,wf188n|\ | ||||
| 	emplus,wap386v2) | ||||
| 		[ -f /proc/boot_info/rootfs/upgradepartition ] && { | ||||
| 			CI_UBIPART="$(cat /proc/boot_info/rootfs/upgradepartition)" | ||||
| 			CI_BOOTCFG=1 | ||||
|   | ||||
| @@ -0,0 +1,356 @@ | ||||
| /* | ||||
|  * Copyright (c) 2019-2021, 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. | ||||
|  */ | ||||
|  | ||||
| /dts-v1/; | ||||
|  | ||||
| #include "ipq6018.dtsi" | ||||
| #include "ipq6018-cpr-regulator.dtsi" | ||||
| #include <dt-bindings/input/input.h> | ||||
|  | ||||
| / { | ||||
| 	model = "Emplus WAP386 v2"; | ||||
| 	compatible = "emplus,wap386v2", "qcom,ipq6018-cp03", "qcom,ipq6018"; | ||||
|  | ||||
| 	aliases { | ||||
| 		/* | ||||
| 		 * Aliases as required by u-boot | ||||
| 		 * to patch MAC addresses | ||||
| 		 */ | ||||
| 		ethernet0 = "/soc/dp1"; | ||||
|  | ||||
| 		led-boot = &led_power; | ||||
| 		led-failsafe = &led_power; | ||||
| 		led-running = &led_power; | ||||
| 		led-upgrade = &led_power; | ||||
| 	}; | ||||
|  | ||||
| 	chosen { | ||||
| 		stdout-path = "serial0:115200n8"; | ||||
| 		bootargs-append = " swiotlb=1 coherent_pool=2M"; | ||||
| 	}; | ||||
|  | ||||
| 	/* | ||||
| 	 * +=========+==============+========================+ | ||||
| 	 * |        |              |                         | | ||||
| 	 * | Region | Start Offset |          Size           | | ||||
| 	 * |        |              |                         | | ||||
| 	 * +--------+--------------+-------------------------+ | ||||
| 	 * |        |              |                         | | ||||
| 	 * |        |              |                         | | ||||
| 	 * |        |              |                         | | ||||
| 	 * |        |              |                         | | ||||
| 	 * | Linux  |  0x41000000  |         139MB           | | ||||
| 	 * |        |              |                         | | ||||
| 	 * |        |              |                         | | ||||
| 	 * |        |              |                         | | ||||
| 	 * +--------+--------------+-------------------------+ | ||||
| 	 * | TZ App |  0x49B00000  |           6MB           | | ||||
| 	 * +--------+--------------+-------------------------+ | ||||
| 	 * | ||||
| 	 * From the available 145 MB for Linux in the first 256 MB, | ||||
| 	 * we are reserving 6 MB for TZAPP. | ||||
| 	 * | ||||
| 	 * Refer arch/arm64/boot/dts/qcom/qcom-ipq6018-memory.dtsi | ||||
| 	 * for memory layout. | ||||
| 	 */ | ||||
|  | ||||
| /* TZAPP is enabled only in default memory profile */ | ||||
| #if !defined(__IPQ_MEM_PROFILE_256_MB__) && !defined(__IPQ_MEM_PROFILE_512_MB__) | ||||
| 	reserved-memory { | ||||
| 		tzapp:tzapp@49B00000 {	/* TZAPPS */ | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x49B00000 0x0 0x00600000>; | ||||
| 		}; | ||||
| 	}; | ||||
| #endif | ||||
| }; | ||||
|  | ||||
| &tlmm { | ||||
| 	gpio-reserved-ranges = <20 1>; | ||||
|  | ||||
| 	uart_pins: uart_pins { | ||||
| 		mux { | ||||
| 			pins = "gpio44", "gpio45"; | ||||
| 			function = "blsp2_uart"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	spi_0_pins: spi_0_pins { | ||||
| 		mux { | ||||
| 			pins = "gpio38", "gpio39", "gpio40", "gpio41"; | ||||
| 			function = "blsp0_spi"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	button_pins: button_pins { | ||||
| 		reset_button { | ||||
| 			pins = "gpio9"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	mdio_pins: mdio_pinmux { | ||||
| 		mux_0 { | ||||
| 			pins = "gpio64"; | ||||
| 			function = "mdc"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-up; | ||||
| 		}; | ||||
| 		mux_1 { | ||||
| 			pins = "gpio65"; | ||||
| 			function = "mdio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-up; | ||||
| 		}; | ||||
| 		mux_2 { | ||||
| 			pins = "gpio75"; | ||||
| 			function = "gpio"; | ||||
| 			bias-pull-up; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	leds_pins: leds_pins { | ||||
| 		led_5g { | ||||
| 			pins = "gpio31"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
| 		led_2g { | ||||
| 			pins = "gpio30"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &soc { | ||||
| 	mdio@90000 { | ||||
| 		pinctrl-0 = <&mdio_pins>; | ||||
| 		pinctrl-names = "default"; | ||||
| 		phy-reset-gpio = <&tlmm 75 0>; | ||||
| 		status = "ok"; | ||||
| 		phy0: ethernet-phy@0 { | ||||
| 			reg = <3>; | ||||
| 		}; | ||||
| 		phy1: ethernet-phy@1 { | ||||
| 			reg = <4>; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	ess-switch@3a000000 { | ||||
| 		switch_cpu_bmp = <0x1>;  /* cpu port bitmap */ | ||||
| 		switch_lan_bmp = <0x08>; /* lan port bitmap */ | ||||
| 		switch_wan_bmp = <0x10>; /* wan port bitmap */ | ||||
| 		switch_inner_bmp = <0xc0>; /*inner port bitmap*/ | ||||
| 		switch_mac_mode = <0x0>; /* mac mode for uniphy instance0*/ | ||||
| 		switch_mac_mode1 = <0xff>; /* mac mode for uniphy instance1*/ | ||||
| 		switch_mac_mode2 = <0xff>; /* mac mode for uniphy instance2*/ | ||||
| 		qcom,port_phyinfo { | ||||
| 			port@0 { | ||||
| 				port_id = <2>; | ||||
| 				phy_address = <3>; | ||||
| 			}; | ||||
| 			port@1 { | ||||
| 				port_id = <3>; | ||||
| 				phy_address = <4>; | ||||
| 			}; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	dp1 { | ||||
| 		device_type = "network"; | ||||
| 		compatible = "qcom,nss-dp"; | ||||
| 		qcom,id = <3>; | ||||
| 		reg = <0x3a001400 0x200>; | ||||
| 		qcom,mactype = <0>; | ||||
| 		local-mac-address = [000000000000]; | ||||
| 		qcom,link-poll = <1>; | ||||
| 		qcom,phy-mdio-addr = <4>; | ||||
| 		phy-mode = "sgmii"; | ||||
| 	}; | ||||
|  | ||||
| 	gpio_keys { | ||||
| 		compatible = "gpio-keys"; | ||||
| 		pinctrl-0 = <&button_pins>; | ||||
| 		pinctrl-names = "default"; | ||||
|  | ||||
| 		button@9 { | ||||
| 			label = "reset"; | ||||
| 			linux,code = <KEY_RESTART>; | ||||
| 			gpios = <&tlmm 9 GPIO_ACTIVE_LOW>; | ||||
| 			linux,input-type = <1>; | ||||
| 			debounce-interval = <60>; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	leds { | ||||
| 		compatible = "gpio-leds"; | ||||
| 		pinctrl-0 = <&leds_pins>; | ||||
| 		pinctrl-names = "default"; | ||||
|  | ||||
| 		led_power: led@28 { | ||||
| 			label = "red:power"; | ||||
| 			gpios = <&tlmm 28 GPIO_ACTIVE_HIGH>; | ||||
| 			linux,default-trigger = "wap386v2:red:power"; | ||||
| 			default-state = "on"; | ||||
| 		}; | ||||
| 		led@29 { | ||||
| 			label = "blue:wan"; | ||||
| 			gpios = <&tlmm 29 GPIO_ACTIVE_HIGH>; | ||||
| 			linux,default-trigger = "wap386v2:blue:eth"; | ||||
| 			default-state = "on"; | ||||
| 		}; | ||||
| 		led@30 { | ||||
| 			label = "blue:wifi2"; | ||||
| 			gpios = <&tlmm 30 GPIO_ACTIVE_HIGH>; | ||||
| 			linux,default-trigger = "wap386v2:blue:2g"; | ||||
| 			default-state = "on"; | ||||
| 		}; | ||||
| 		led@31 { | ||||
| 			label = "blue:wifi5"; | ||||
| 			gpios = <&tlmm 31 GPIO_ACTIVE_HIGH>; | ||||
| 			linux,default-trigger = "wap386v2:blue:5g"; | ||||
| 			default-state = "on"; | ||||
| 		}; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &blsp1_uart3 { | ||||
| 	pinctrl-0 = <&uart_pins>; | ||||
| 	pinctrl-names = "default"; | ||||
| 	status = "ok"; | ||||
| }; | ||||
|  | ||||
| &spi_0 { | ||||
| 	pinctrl-0 = <&spi_0_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; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &wifi0 { | ||||
| 	qcom,board_id = <0x30>; | ||||
| }; | ||||
|  | ||||
| &pcie_phy { | ||||
| 	status = "ok"; | ||||
| }; | ||||
|  | ||||
| &pcie0 { | ||||
| #if defined(__CNSS2__) | ||||
| 	status = "ok"; | ||||
| #endif | ||||
| }; | ||||
|  | ||||
| &qpic_bam { | ||||
| 	status = "ok"; | ||||
| }; | ||||
|  | ||||
| &qpic_nand { | ||||
| 	status = "ok"; | ||||
|  | ||||
| 	nand@0 { | ||||
| 		reg = <0>; | ||||
| 		#address-cells = <1>; | ||||
| 		#size-cells = <1>; | ||||
|  | ||||
| 		nand-ecc-strength = <4>; | ||||
| 		nand-ecc-step-size = <512>; | ||||
| 		nand-bus-width = <8>; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &ssphy_0 { | ||||
| 	status = "ok"; | ||||
| }; | ||||
|  | ||||
| &nss_crypto { | ||||
| 	status = "ok"; | ||||
| }; | ||||
|  | ||||
| &CPU0 { | ||||
| 	operating-points = < | ||||
| 		/* kHz   uV (fixed) */ | ||||
| 		864000   1100000 | ||||
| 		1056000  1100000 | ||||
| 		1320000  1100000 | ||||
| 		1440000  1100000 | ||||
| 		1608000  1100000 | ||||
| 		1800000  1100000 | ||||
| 	>; | ||||
| 	clock-latency = <200000>; | ||||
| }; | ||||
|  | ||||
| &CPU1 { | ||||
| 	operating-points = < | ||||
| 		/* kHz   uV (fixed) */ | ||||
| 		864000   1100000 | ||||
| 		1056000  1100000 | ||||
| 		1320000  1100000 | ||||
| 		1440000  1100000 | ||||
| 		1608000  1100000 | ||||
| 		1800000  1100000 | ||||
| 	>; | ||||
| 	clock-latency = <200000>; | ||||
| }; | ||||
|  | ||||
| &CPU2 { | ||||
| 	operating-points = < | ||||
| 		/* kHz   uV (fixed) */ | ||||
| 		864000   1100000 | ||||
| 		1056000  1100000 | ||||
| 		1320000  1100000 | ||||
| 		1440000  1100000 | ||||
| 		1608000  1100000 | ||||
| 		1800000  1100000 | ||||
| 	>; | ||||
| 	clock-latency = <200000>; | ||||
| }; | ||||
|  | ||||
| &CPU3 { | ||||
| 	operating-points = < | ||||
| 		/* kHz   uV (fixed) */ | ||||
| 		864000   1100000 | ||||
| 		1056000  1100000 | ||||
| 		1320000  1100000 | ||||
| 		1440000  1100000 | ||||
| 		1608000  1100000 | ||||
| 		1800000  1100000 | ||||
| 	>; | ||||
| 	clock-latency = <200000>; | ||||
| }; | ||||
|  | ||||
| &rpm_glink { | ||||
| 	status = "disabled"; | ||||
| }; | ||||
| @@ -76,6 +76,15 @@ define Device/edgecore_eap101 | ||||
| endef | ||||
| TARGET_DEVICES += edgecore_eap101 | ||||
|  | ||||
| define Device/emplus_wap386v2 | ||||
|   DEVICE_TITLE := Emplus WAP386v2 | ||||
|   DEVICE_DTS := qcom-ipq6018-emplus-wap386v2 | ||||
|   DEVICE_DTS_CONFIG := config@cp03-c1 | ||||
|   SUPPORTED_DEVICES := emplus,wap386v2 | ||||
|   DEVICE_PACKAGES := ath11k-wifi-qcom-ipq6018 uboot-env | ||||
| endef | ||||
| TARGET_DEVICES += emplus_wap386v2 | ||||
|  | ||||
| define Device/indio_um-310ax-v1 | ||||
|   DEVICE_TITLE := Indio UM-310AX V1 | ||||
|   DEVICE_DTS := qcom-ipq6018-indio-um-310ax-v1 | ||||
|   | ||||
| @@ -16,14 +16,14 @@ ath11k_generate_macs() { | ||||
| 	echo -ne \\x${mac3//:/\\x} >> /lib/firmware/ath11k-macs | ||||
| } | ||||
|  | ||||
| ath11k_generate_macs_sonicfi() { | ||||
| ath11k_generate_macs_rap650c() { | ||||
| 	mac=$(fw_printenv -n BaseMacAddress) | ||||
| 	[ -z "$mac" ] && return; | ||||
|  | ||||
| 	touch /lib/firmware/ath11k-macs | ||||
| 	eth=$(macaddr_canonicalize $mac) | ||||
| 	mac1=$(macaddr_add $eth 2) | ||||
| 	mac2=$(macaddr_add $eth 3) | ||||
| 	mac1=$(macaddr_add $eth 3) | ||||
| 	mac2=$(macaddr_add $eth 2) | ||||
| 	mac3=$(macaddr_add $eth 4) | ||||
| 	echo -ne \\x${mac1//:/\\x} >> /lib/firmware/ath11k-macs | ||||
| 	echo -ne \\x${mac2//:/\\x} >> /lib/firmware/ath11k-macs | ||||
| @@ -112,8 +112,8 @@ ath11k-macs) | ||||
| 	cig,wf196) | ||||
| 		ath11k_generate_macs_wf196 | ||||
| 		;; | ||||
| 	sonicfi*) | ||||
| 		ath11k_generate_macs_sonicfi | ||||
| 	sonicfi,rap650c) | ||||
| 		ath11k_generate_macs_rap650c | ||||
| 		;; | ||||
| 	esac | ||||
| 	;; | ||||
|   | ||||
| @@ -6,7 +6,7 @@ | ||||
|  		return 0; | ||||
| -	if (WARN_ON_ONCE(rate->nss < 1 || rate->nss > 8)) | ||||
| +	if (rate->nss < 1 || rate->nss > 8) { | ||||
| +		printk_once(1, "invalid rate->nss: %d\n", rate->nss); | ||||
| +		printk_once(KERN_WARNING "cfg80211_calculate_bitrate_he: invalid rate->nss: %d\n", rate->nss); | ||||
|  		return 0; | ||||
| - | ||||
| +	} | ||||
|   | ||||
| @@ -0,0 +1,119 @@ | ||||
| --- a/drivers/net/wireless/ath/ath11k/peer.c | ||||
| +++ b/drivers/net/wireless/ath/ath11k/peer.c | ||||
| @@ -819,10 +819,7 @@ int ath11k_peer_delete(struct ath11k *ar | ||||
|  #ifdef CPTCFG_ATH11K_NSS_SUPPORT | ||||
|  		mutex_unlock(&ar->ab->base_ast_lock); | ||||
|  #endif | ||||
| -		ath11k_warn(ar->ab, | ||||
| -			    "failed to find peer vdev_id %d addr %pM in delete\n", | ||||
| -			    vdev_id, addr); | ||||
| -		return -EINVAL; | ||||
| +		return 0; | ||||
|          } | ||||
|   | ||||
|  #ifdef CPTCFG_ATH11K_NSS_SUPPORT | ||||
| @@ -883,6 +880,7 @@ int ath11k_peer_create(struct ath11k *ar | ||||
|  	struct ieee80211_vif *vif = arvif->vif; | ||||
|  	struct ath11k_sta *arsta; | ||||
|  	int ret, fbret; | ||||
| +	u8 vdev_id = 0; | ||||
|   | ||||
|  	lockdep_assert_held(&ar->conf_mutex); | ||||
|   | ||||
| @@ -891,20 +889,21 @@ int ath11k_peer_create(struct ath11k *ar | ||||
|  			    "failed to create peer due to insufficient peer entry resource in firmware\n"); | ||||
|  		return -ENOBUFS; | ||||
|  	} | ||||
| + | ||||
|  	mutex_lock(&ar->ab->tbl_mtx_lock); | ||||
|  	spin_lock_bh(&ar->ab->base_lock); | ||||
|  	peer = ath11k_peer_find_by_addr(ar->ab, param->peer_addr); | ||||
| +	if (peer) | ||||
| +		vdev_id = peer->vdev_id; | ||||
| +	spin_unlock_bh(&ar->ab->base_lock); | ||||
| +	mutex_unlock(&ar->ab->tbl_mtx_lock); | ||||
| + | ||||
|  	if (peer) { | ||||
| -		if (peer->vdev_id == param->vdev_id) { | ||||
| -			spin_unlock_bh(&ar->ab->base_lock); | ||||
| -			mutex_unlock(&ar->ab->tbl_mtx_lock); | ||||
| +		if (vdev_id == param->vdev_id) | ||||
|  			return -EINVAL; | ||||
| -		} | ||||
| -		ath11k_peer_rhash_delete(ar->ab, peer); | ||||
| -	} | ||||
|   | ||||
| -	spin_unlock_bh(&ar->ab->base_lock); | ||||
| -	mutex_unlock(&ar->ab->tbl_mtx_lock); | ||||
| +		ath11k_peer_delete(ar, vdev_id, param->peer_addr); | ||||
| +	} | ||||
|   | ||||
|  	ret = ath11k_wmi_send_peer_create_cmd(ar, param); | ||||
|  	if (ret) { | ||||
| --- a/drivers/net/wireless/ath/ath11k/dp.c | ||||
| +++ b/drivers/net/wireless/ath/ath11k/dp.c | ||||
| @@ -28,7 +28,7 @@ void ath11k_dp_peer_cleanup(struct ath11 | ||||
|  	spin_lock_bh(&ab->base_lock); | ||||
|  	peer = ath11k_peer_find(ab, vdev_id, addr); | ||||
|  	if (!peer) { | ||||
| -		ath11k_warn(ab, "failed to lookup peer %pM on vdev %d\n", | ||||
| +		ath11k_dbg(ab, ATH11K_DBG_MAC, "failed to lookup peer %pM on vdev %d\n", | ||||
|  			    addr, vdev_id); | ||||
|  		spin_unlock_bh(&ab->base_lock); | ||||
|  		return; | ||||
| --- a/drivers/net/wireless/ath/ath11k/dp_rx.c | ||||
| +++ b/drivers/net/wireless/ath/ath11k/dp_rx.c | ||||
| @@ -1204,9 +1204,9 @@ int ath11k_dp_rx_ampdu_stop(struct ath11 | ||||
|   | ||||
|  	peer = ath11k_peer_find(ab, vdev_id, params->sta->addr); | ||||
|  	if (!peer) { | ||||
| -		ath11k_warn(ab, "failed to find the peer to stop rx aggregation\n"); | ||||
| +		ath11k_dbg(ab, ATH11K_DBG_MAC, "failed to find the peer to stop rx aggregation\n"); | ||||
|  		spin_unlock_bh(&ab->base_lock); | ||||
| -		return -ENOENT; | ||||
| +		return 0; | ||||
|  	} | ||||
|   | ||||
|  	paddr = peer->rx_tid[params->tid].paddr; | ||||
| --- a/drivers/net/wireless/ath/ath11k/mac.c | ||||
| +++ b/drivers/net/wireless/ath/ath11k/mac.c | ||||
| @@ -4075,7 +4075,7 @@ static int ath11k_clear_peer_keys(struct | ||||
|  	peer = ath11k_peer_find(ab, arvif->vdev_id, addr); | ||||
|  	if (!peer) { | ||||
|  		spin_unlock_bh(&ab->base_lock); | ||||
| -		return -ENOENT; | ||||
| +		return 0; | ||||
|  	} | ||||
|  	for (i = 0; i < ARRAY_SIZE(keys); i++) { | ||||
|  		keys[i]= peer->keys[i]; | ||||
| @@ -4325,6 +4325,10 @@ static int ath11k_mac_op_set_key(struct | ||||
|   | ||||
|  	spin_lock_bh(&ab->base_lock); | ||||
|  	peer = ath11k_peer_find(ab, arvif->vdev_id, peer_addr); | ||||
| +	if (!peer && cmd == DISABLE_KEY) { | ||||
| +		ret = 0; | ||||
| +		goto unlock; | ||||
| +	} | ||||
|   | ||||
|  	/* TODO: Check if vdev specific security cfg is mandatory */ | ||||
|  	ret = ath11k_nss_vdev_set_cmd(arvif, ATH11K_NSS_WIFI_VDEV_SECURITY_TYPE_CMD, key->cipher); | ||||
| @@ -5961,7 +5965,7 @@ static void ath11k_mac_op_sta_rc_update( | ||||
|  	peer = ath11k_peer_find(ar->ab, arvif->vdev_id, sta->addr); | ||||
|  	if (!peer) { | ||||
|  		spin_unlock_bh(&ar->ab->base_lock); | ||||
| -		ath11k_warn(ar->ab, "mac sta rc update failed to find peer %pM on vdev %i\n", | ||||
| +		ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "mac sta rc update failed to find peer %pM on vdev %i\n", | ||||
|  			    sta->addr, arvif->vdev_id); | ||||
|  		return; | ||||
|  	} | ||||
| --- a/drivers/net/wireless/ath/ath11k/wmi.c | ||||
| +++ b/drivers/net/wireless/ath/ath11k/wmi.c | ||||
| @@ -8425,7 +8425,7 @@ static void ath11k_peer_sta_kickout_even | ||||
|  	peer = ath11k_peer_find_by_addr(ab, arg.mac_addr); | ||||
|  	if (!peer) { | ||||
|  		spin_unlock_bh(&ab->base_lock); | ||||
| -		ath11k_warn(ab, "peer not found %pM\n", | ||||
| +		ath11k_dbg(ab, ATH11K_DBG_WMI, "peer not found %pM\n", | ||||
|  			    arg.mac_addr); | ||||
|  		goto exit; | ||||
|  	} | ||||
| @@ -8,6 +8,9 @@ boot() { | ||||
| 	edgecore,eap112) | ||||
| 		bootcount=$(fw_printenv -n bootcount) | ||||
| 		[ "$bootcount" != 0 ] && fw_setenv bootcount 0 | ||||
| 		# enable dualboot | ||||
| 		avail=$(fw_printenv -n upgrade_available) | ||||
| 		[ ${avail} -eq 0 ] && fw_setenv upgrade_available 1 | ||||
| 		;; | ||||
| 	esac | ||||
| } | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| REQUIRE_IMAGE_METADATA=1 | ||||
|  | ||||
| senao_swap_active_fw() { | ||||
| swap_wap588m_active_fw() { | ||||
| 	echo "Doing swap active_fw" > /dev/console | ||||
|         tmp_active_fw=$(fw_printenv | grep active_fw | awk -F= {'print $2'}) | ||||
| 	if [ $tmp_active_fw == "0" ]; then | ||||
| @@ -12,6 +12,18 @@ senao_swap_active_fw() { | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| senao_swap_active_fw() { | ||||
| 	echo "Doing swap active_fw" > /dev/console | ||||
| 	tmp_active_fw=$(fw_printenv -n active_fw) | ||||
| 	if [ $tmp_active_fw == "0" ]; then | ||||
| 		fw_setenv active_fw 1 | ||||
| 		fw_setenv mtdparts nmbm0:1024k\(bl2\),512k\(u-boot-env\),2048k\(factory\),2048k\(fip\),112640k\(ubi_1\),112640k\(ubi\),384k\(cert\),640k\(userconfig\),384k\(crashdump\) | ||||
| 	else | ||||
| 		fw_setenv active_fw 0 | ||||
| 		fw_setenv mtdparts nmbm0:1024k\(bl2\),512k\(u-boot-env\),2048k\(factory\),2048k\(fip\),112640k\(ubi\),112640k\(ubi_1\),384k\(cert\),640k\(userconfig\),384k\(crashdump\) | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| platform_do_upgrade() { | ||||
| 	local board=$(board_name) | ||||
|  | ||||
| @@ -94,5 +106,8 @@ platform_post_upgrade_success() { | ||||
| 		senao,jeap6500) | ||||
| 			senao_swap_active_fw | ||||
| 		;; | ||||
| 		emplus,wap588m) | ||||
| 			swap_wap588m_active_fw | ||||
| 		;; | ||||
| 	esac | ||||
| } | ||||
|   | ||||
| @@ -493,10 +493,22 @@ define Build/Compile | ||||
| 	$(MAKE) -C $(PKG_BUILD_DIR)/tools | ||||
| endef | ||||
|  | ||||
|  | ||||
| define Build/Install | ||||
| 	: | ||||
| endef | ||||
|  | ||||
| ifdef CONFIG_TARGET_PROFILE | ||||
| TARGET_PROFILE=$(subst ",,$(CONFIG_TARGET_PROFILE)) | ||||
| PATCH_PROFILE_NAME=patches-$(subst DEVICE_,,$(TARGET_PROFILE)) | ||||
| endif | ||||
|  | ||||
| define Build/Patch | ||||
| 	$(Build/Patch/Default) | ||||
| 	$(call PatchDir,$(PKG_BUILD_DIR),$(PATCH_PROFILE_NAME)/,profile/) | ||||
| endef | ||||
|  | ||||
|  | ||||
| define Package/kmod-mt76/install | ||||
| 	true | ||||
| endef | ||||
|   | ||||
| @@ -0,0 +1,26 @@ | ||||
| Index: mt76-2024-04-03-1e336a85/mt7915/mt7915.h | ||||
| =================================================================== | ||||
| --- mt76-2024-04-03-1e336a85.orig/mt7915/mt7915.h | ||||
| +++ mt76-2024-04-03-1e336a85/mt7915/mt7915.h | ||||
| @@ -71,8 +71,8 @@ | ||||
|  #define MT7915_CFEND_RATE_DEFAULT	0x49	/* OFDM 24M */ | ||||
|  #define MT7915_CFEND_RATE_11B		0x03	/* 11B LP, 11M */ | ||||
|   | ||||
| -#define MT7915_THERMAL_THROTTLE_MAX	100 | ||||
| -#define MT7915_CDEV_THROTTLE_MAX	99 | ||||
| +#define MT7915_THERMAL_THROTTLE_MAX	80 | ||||
| +#define MT7915_CDEV_THROTTLE_MAX	79 | ||||
|   | ||||
|  #define MT7915_SKU_RATE_NUM		161 | ||||
|  #define MT7915_SKU_PATH_NUM		185 | ||||
| @@ -86,8 +86,8 @@ | ||||
|   | ||||
|  #define MT7915_CRIT_TEMP_IDX		0 | ||||
|  #define MT7915_MAX_TEMP_IDX		1 | ||||
| -#define MT7915_CRIT_TEMP		110 | ||||
| -#define MT7915_MAX_TEMP			120 | ||||
| +#define MT7915_CRIT_TEMP		103 | ||||
| +#define MT7915_MAX_TEMP			118 | ||||
|   | ||||
|  struct mt7915_vif; | ||||
|  struct mt7915_sta; | ||||
| @@ -832,6 +832,13 @@ morse_hostapd_add_bss(){ | ||||
| 	morse_override_hostapd_set_bss_options hostapd_cfg "$_phy" "$vif" || return 1 | ||||
| 	json_get_vars wds wds_bridge sae_pwe dtim_period max_listen_int start_disabled | ||||
|  | ||||
| 	local network_config network_values | ||||
| 	json_get_values network_values network | ||||
| 	network_config=$(echo "$network_values" | cut -d' ' -f1) | ||||
|  | ||||
| 	if [ "$wds" -gt 0 ] && [ -z "$wds_bridge" ]; then | ||||
| 		wds_bridge="${network_config%%[0-9]*}" | ||||
| 	fi | ||||
|  | ||||
| 	raw_block= | ||||
| 	json_for_each_item morse_hostapd_add_raw raws | ||||
|   | ||||
| @@ -88,6 +88,11 @@ $(call Package/ath12k-wifi-default) | ||||
|     TITLE:=board-2.bin for NWA130BE | ||||
| endef | ||||
|  | ||||
| define Package/ath12k-wifi-zyxel-nwa50be | ||||
| $(call Package/ath12k-wifi-default) | ||||
|     TITLE:=board-2.bin for NWA50BE | ||||
| endef | ||||
|  | ||||
| define Package/ath12k-wifi-cig-wf672 | ||||
| $(call Package/ath12k-wifi-default) | ||||
|     TITLE:=board-2.bin for WF672 | ||||
| @@ -179,6 +184,13 @@ define Package/ath12k-wifi-zyxel-nwa130be/install | ||||
| 	$(INSTALL_DATA) ./board-2.bin.nwa130be.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin | ||||
| endef | ||||
|  | ||||
| define Package/ath12k-wifi-zyxel-nwa50be/install | ||||
| 	$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/ | ||||
| 	$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/ | ||||
| 	$(INSTALL_DATA) ./board-2.bin.nwa130be.QCN92XX $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/board-2.bin | ||||
| 	$(INSTALL_DATA) ./board-2.bin.nwa130be.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin | ||||
| endef | ||||
|  | ||||
| define Package/ath12k-wifi-cig-wf672/install | ||||
| 	$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/ | ||||
| 	$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/ | ||||
| @@ -197,4 +209,5 @@ $(eval $(call BuildPackage,ath12k-wifi-cig-wf189h)) | ||||
| $(eval $(call BuildPackage,ath12k-wifi-sercomm-ap72tip)) | ||||
| $(eval $(call BuildPackage,ath12k-wifi-sercomm-ap72tip-v4)) | ||||
| $(eval $(call BuildPackage,ath12k-wifi-zyxel-nwa130be)) | ||||
| $(eval $(call BuildPackage,ath12k-wifi-zyxel-nwa50be)) | ||||
| $(eval $(call BuildPackage,ath12k-wifi-cig-wf672)) | ||||
|   | ||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/qca-wifi-7/ath12k-wifi/board-2.bin.rap7110c_341x.QCN92XX
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/qca-wifi-7/ath12k-wifi/board-2.bin.rap7110c_341x.QCN92XX
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										25
									
								
								feeds/qca-wifi-7/cig-platform-pkg/cig-poe-judgment/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								feeds/qca-wifi-7/cig-platform-pkg/cig-poe-judgment/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| include $(TOPDIR)/rules.mk | ||||
| include $(INCLUDE_DIR)/kernel.mk | ||||
|  | ||||
| PKG_NAME:=cig-poe-judgment | ||||
| PKG_RELEASE:=1 | ||||
| PKG_LICENSE:=GPL-2.0 | ||||
|  | ||||
| include $(INCLUDE_DIR)/package.mk | ||||
|  | ||||
| define KernelPackage/cig-poe-judgment | ||||
|   SUBMENU:=Other modules | ||||
|   TITLE:=CIG POE judgment | ||||
|   FILES:=$(PKG_BUILD_DIR)/cig_poe_judgment.ko | ||||
|   AUTOLOAD:=$(call AutoLoad,99,cig_poe_judgment) | ||||
| endef | ||||
|  | ||||
| define KernelPackage/cig-poe-judgment/description | ||||
|   Find POE type | ||||
| endef | ||||
|  | ||||
| define Build/Compile | ||||
| 	$(KERNEL_MAKE) M="$(PKG_BUILD_DIR)" modules | ||||
| endef | ||||
|  | ||||
| $(eval $(call KernelPackage,cig-poe-judgment)) | ||||
| @@ -0,0 +1 @@ | ||||
| obj-m += cig_poe_judgment.o | ||||
| @@ -0,0 +1,252 @@ | ||||
| #include <linux/module.h> | ||||
| #include <linux/device.h> | ||||
| #include <linux/proc_fs.h> | ||||
| #include <linux/kthread.h> | ||||
| #include <linux/of.h> | ||||
| #include <linux/of_address.h> | ||||
| #include <linux/irqreturn.h> | ||||
| #include <linux/of_gpio.h> | ||||
| #include <linux/err.h> | ||||
| #include <linux/types.h> | ||||
| #include <linux/interrupt.h> | ||||
| #include <linux/of_irq.h> | ||||
| #include <linux/of_platform.h> | ||||
| #include <asm/uaccess.h> | ||||
|  | ||||
| #define GPIO_MAX 		8  | ||||
| #define INT_MODE_MASK 		0xf0 | ||||
| #define DETECT_MODE1	 	0x3 | ||||
| #define DETECT_MODE2	 	0x4 | ||||
|  | ||||
| enum POE_TYPE { | ||||
| 	POE_TYPE_AT = 1, | ||||
| 	POE_TYPE_AF, | ||||
| 	POE_TYPE_BT, | ||||
| 	POE_TYPE_DC, | ||||
| 	POE_TYPE_MAX | ||||
| }; | ||||
|  | ||||
| struct poe_irq_data | ||||
| { | ||||
| 	struct device *dev; | ||||
| 	int irq; | ||||
| 	struct tasklet_struct tasklet; | ||||
| 	int poe_type; | ||||
| }; | ||||
|  | ||||
| static void  *poe_gpio_base; | ||||
| static void  *pse_gpio_base; | ||||
| struct poe_irq_data *data = NULL; | ||||
| u32 mode; | ||||
|  | ||||
| static const struct of_device_id my_of_ids[] = { | ||||
| 	{.compatible = "poe-judge"}, | ||||
| 	{}, | ||||
| }; | ||||
|  | ||||
| MODULE_DEVICE_TABLE(of,my_of_ids); | ||||
|  | ||||
| static int poe_info_proc_show(struct seq_file *m, void *v) | ||||
| { | ||||
| 	const char *type_str = "invalid"; | ||||
|  | ||||
| 	switch (data->poe_type) { | ||||
| 		case POE_TYPE_AT:  | ||||
| 			type_str = "AT";  | ||||
| 			break; | ||||
| 		case POE_TYPE_AF:  | ||||
| 			type_str = "AF";  | ||||
| 			break; | ||||
| 		case POE_TYPE_BT:  | ||||
| 			type_str = "BT";  | ||||
| 			break; | ||||
| 		case POE_TYPE_DC:  | ||||
| 			type_str = "DC";  | ||||
| 			break; | ||||
| 	} | ||||
|  | ||||
| 	seq_printf(m, "%s\n", type_str); | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static void poe_tasklet_func(unsigned long data) | ||||
| { | ||||
| 	struct poe_irq_data *irq_data = (struct poe_irq_data *)data; | ||||
|  | ||||
| 	writel(0x3, pse_gpio_base+4); | ||||
| 	irq_data->poe_type = POE_TYPE_BT; | ||||
|  | ||||
| 	return; | ||||
| } | ||||
|  | ||||
| static irqreturn_t gpio_key1_irq_handler(int irq, void *dev_id) | ||||
| { | ||||
| 	struct poe_irq_data *data = (struct poe_irq_data *)dev_id; | ||||
|  | ||||
| 	disable_irq_nosync(data->irq); | ||||
| 	tasklet_schedule(&data->tasklet); | ||||
|  | ||||
| 	return IRQ_HANDLED; | ||||
| } | ||||
|  | ||||
| static int poe_info_proc_open(struct inode *inode, struct file *file) | ||||
| { | ||||
| 	return single_open(file, poe_info_proc_show, NULL); | ||||
| } | ||||
|  | ||||
| static const struct proc_ops poe_info_proc_fops = { | ||||
| 	.proc_open = poe_info_proc_open, | ||||
| 	.proc_read = seq_read, | ||||
| 	.proc_lseek = seq_lseek, | ||||
| 	.proc_release = single_release, | ||||
| }; | ||||
|  | ||||
| static int gpio_key_probe(struct platform_device *dev) | ||||
| { | ||||
| 	int ret = 0; | ||||
| 	int irq = (-1); | ||||
| 	int val = 0; | ||||
| 	int gpio_id = 0; | ||||
| 	int gpio[GPIO_MAX] = {0}, gpio_val[GPIO_MAX] = {0}; | ||||
| 	int num; | ||||
| 	char name[16]; | ||||
| 	struct device_node *np = dev->dev.of_node; | ||||
|  | ||||
| 	if (of_property_read_u32(np, "detect-mode", &mode)) { | ||||
| 		pr_err("Failed to read detect mode\n"); | ||||
| 		return -EINVAL; | ||||
| 	} | ||||
|  | ||||
| 	data = devm_kzalloc(&dev->dev, sizeof(struct poe_irq_data), GFP_KERNEL); | ||||
| 	if (!data) | ||||
| 	{ | ||||
| 		return -ENOMEM; | ||||
| 	} | ||||
|  | ||||
| 	if (mode & INT_MODE_MASK) { | ||||
| 		poe_gpio_base = ioremap(0x1017004, 8); | ||||
| 		pse_gpio_base = ioremap(0x1026000, 8); | ||||
|  | ||||
| 		writel(0x2c1, pse_gpio_base); | ||||
| 		writel(0x0, pse_gpio_base+4); | ||||
|  | ||||
|  | ||||
| 		data->dev = &dev->dev; | ||||
| 		dev_set_drvdata(&dev->dev, data); | ||||
|  | ||||
| 		gpio_id = of_get_named_gpio(dev->dev.of_node, "detect_gpio", 0); | ||||
| 		if (gpio_id < 0) | ||||
| 		{ | ||||
| 			return -EINVAL; | ||||
| 		} | ||||
|  | ||||
| 		tasklet_init(&data->tasklet, poe_tasklet_func, (unsigned long)data); | ||||
|  | ||||
| 		ret = devm_gpio_request_one(&dev->dev, gpio_id, GPIOF_IN, "poe_judge"); | ||||
| 		if(ret) | ||||
| 		{ | ||||
| 			pr_err("GPIO23 request failed, ret:%d\n", ret); | ||||
| 			return ret; | ||||
| 		} | ||||
|  | ||||
| 		val = readl(poe_gpio_base); | ||||
| 		if(val == 1) | ||||
| 		{ | ||||
| 			pr_info("poe type is af or bt,close pse first\n"); | ||||
| 			data->poe_type = POE_TYPE_AF; | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			data->poe_type = POE_TYPE_AT; | ||||
| 		} | ||||
|  | ||||
| 		irq = gpio_to_irq(gpio_id); | ||||
| 		data->irq = irq; | ||||
|  | ||||
| 		ret = devm_request_any_context_irq(&dev->dev, data->irq,  | ||||
| 				gpio_key1_irq_handler,  | ||||
| 				IRQF_TRIGGER_FALLING,  | ||||
| 				"poe_judge", data); | ||||
| 		if (ret) | ||||
| 		{ | ||||
| 			pr_err("Request irq fail %d\n", ret); | ||||
| 			return ret; | ||||
| 		} | ||||
| 	} else { | ||||
| 		if (mode == DETECT_MODE1 || mode == DETECT_MODE2) { | ||||
| 			num = 3; | ||||
| 		} else { | ||||
| 			pr_err("Wrong poe detect mode\n"); | ||||
| 			return -ENOMEM; | ||||
| 		} | ||||
|  | ||||
| 		for (int i = 0; i < num; i++) { | ||||
| 			sprintf(name, "detect-gpio%d", i+1); | ||||
| 			gpio[i] = of_get_named_gpio(np, name, 0); 	 | ||||
| 			ret = gpio_request(gpio[i], name); | ||||
| 			if (ret) { | ||||
| 				pr_err("Can not request gpio %d\n", i+1); | ||||
| 				return ret; | ||||
| 			} | ||||
| 			gpio_direction_input(gpio[i]); | ||||
| 			gpio_val[i] = gpio_get_value_cansleep(gpio[i]); | ||||
| 		} | ||||
| 		 | ||||
| 		if (mode == DETECT_MODE1){ | ||||
| 			if (gpio_val[0] > 0) { | ||||
| 				data->poe_type = POE_TYPE_DC; | ||||
| 			} else if (gpio_val[1] > 0){ | ||||
| 				if (gpio_val[2] == 0) { | ||||
| 					data->poe_type = POE_TYPE_AT; | ||||
| 				} else { | ||||
| 					data->poe_type = POE_TYPE_AF; | ||||
| 				} | ||||
| 			} | ||||
| 		}else if (mode == DETECT_MODE2){ | ||||
| 			switch (gpio_val[0] | (gpio_val[1] << 1) | (gpio_val[2] << 2)) { | ||||
| 				case 3: | ||||
| 					data->poe_type = POE_TYPE_AT; | ||||
| 					break; | ||||
| 				case 4: | ||||
| 					data->poe_type = POE_TYPE_BT; | ||||
| 					break; | ||||
| 				case 7: | ||||
| 					data->poe_type = POE_TYPE_AF; | ||||
| 					break; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	if (!proc_create("poe_info", 0444, NULL, &poe_info_proc_fops)) { | ||||
| 		pr_err("Failed to create proc entry for poe_info\n"); | ||||
| 		return -ENOMEM; | ||||
| 	} | ||||
|  | ||||
| 	return ret; | ||||
| } | ||||
|  | ||||
| static int gpio_key_remove(struct platform_device *dev) | ||||
| { | ||||
| 	remove_proc_entry("poe_info", NULL); | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static struct platform_driver poe_judge_driver = | ||||
| { | ||||
| 	.driver = { | ||||
| 		.name = "poe_judge", | ||||
| 		.of_match_table = my_of_ids, | ||||
| 		.owner = THIS_MODULE, | ||||
| 	}, | ||||
| 	.probe = gpio_key_probe, | ||||
| 	.remove = gpio_key_remove, | ||||
| }; | ||||
|  | ||||
| module_platform_driver(poe_judge_driver); | ||||
|  | ||||
| MODULE_LICENSE("GPL"); | ||||
| MODULE_DESCRIPTION("Poe type judgment driver"); | ||||
| MODULE_AUTHOR("huangyunxiang<huangyunxiang@cigtech.com>"); | ||||
| @@ -121,8 +121,6 @@ hostapd_common_add_device_config() { | ||||
| 	config_add_boolean legacy_rates | ||||
| 	config_add_int cell_density | ||||
| 	config_add_int rts_threshold | ||||
| 	config_add_int rssi_reject_assoc_rssi | ||||
| 	config_add_int rssi_ignore_probe_request | ||||
| 	config_add_int maxassoc | ||||
| 	config_add_int reg_power_type | ||||
| 	config_add_boolean stationary_ap | ||||
| @@ -147,7 +145,7 @@ hostapd_prepare_device_config() { | ||||
|  | ||||
| 	json_get_vars country country3 country_ie beacon_int:100 dtim_period:2 doth require_mode legacy_rates \ | ||||
| 		acs_chan_bias local_pwr_constraint spectrum_mgmt_required airtime_mode cell_density \ | ||||
| 		rts_threshold beacon_rate rssi_reject_assoc_rssi rssi_ignore_probe_request maxassoc \ | ||||
| 		rts_threshold beacon_rate maxassoc \ | ||||
| 		rnr_beacon mbssid:0 band reg_power_type stationary_ap acs_exclude_dfs\ | ||||
| 		maxassoc_ignore_probe band | ||||
|  | ||||
| @@ -244,8 +242,6 @@ hostapd_prepare_device_config() { | ||||
| 		hostapd_add_rate brlist "$br" | ||||
| 	done | ||||
|  | ||||
| 	[ -n "$rssi_reject_assoc_rssi" ] && append base_cfg "rssi_reject_assoc_rssi=$rssi_reject_assoc_rssi" "$N" | ||||
| 	[ -n "$rssi_ignore_probe_request" ] && append base_cfg "rssi_ignore_probe_request=$rssi_ignore_probe_request" "$N" | ||||
| 	[ -n "$beacon_rate" ] && append base_cfg "beacon_rate=$beacon_rate" "$N" | ||||
| 	[ -n "$rlist" ] && append base_cfg "supported_rates=$rlist" "$N" | ||||
| 	[ -n "$brlist" ] && append base_cfg "basic_rates=$brlist" "$N" | ||||
| @@ -427,6 +423,9 @@ hostapd_common_add_bss_config() { | ||||
|  | ||||
| 	config_add_boolean apup | ||||
| 	config_add_string apup_peer_ifname_prefix | ||||
|  | ||||
| 	config_add_int rssi_reject_assoc_rssi | ||||
| 	config_add_int rssi_ignore_probe_request | ||||
| } | ||||
|  | ||||
| hostapd_set_vlan_file() { | ||||
| @@ -680,7 +679,8 @@ hostapd_set_bss_options() { | ||||
| 		ppsk airtime_bss_weight airtime_bss_limit airtime_sta_weight \ | ||||
| 		multicast_to_unicast_all proxy_arp per_sta_vif \ | ||||
| 		eap_server eap_user_file ca_cert server_cert private_key private_key_passwd server_id radius_server_clients radius_server_auth_port \ | ||||
| 		vendor_elements fils ocv apup uci_section dynamic_probe_resp multi_psk | ||||
| 		vendor_elements fils ocv apup uci_section dynamic_probe_resp multi_psk \ | ||||
| 		rssi_reject_assoc_rssi rssi_ignore_probe_request | ||||
|  | ||||
| 	set_default fils 0 | ||||
| 	set_default isolate 0 | ||||
| @@ -737,6 +737,8 @@ hostapd_set_bss_options() { | ||||
| 	append bss_conf "uapsd_advertisement_enabled=$uapsd" "$N" | ||||
| 	append bss_conf "utf8_ssid=$utf8_ssid" "$N" | ||||
| 	append bss_conf "multi_ap=$multi_ap" "$N" | ||||
| 	[ -n "$rssi_reject_assoc_rssi" ] && append bss_conf "rssi_reject_assoc_rssi=$rssi_reject_assoc_rssi" "$N" | ||||
| 	[ -n "$rssi_ignore_probe_request" ] && append bss_conf "rssi_ignore_probe_request=$rssi_ignore_probe_request" "$N" | ||||
| 	[ -n "$vendor_elements" ] && append bss_conf "vendor_elements=$vendor_elements" "$N" | ||||
|  | ||||
| 	[ "$tdls_prohibit" -gt 0 ] && append bss_conf "tdls_prohibit=$tdls_prohibit" "$N" | ||||
| @@ -775,11 +777,16 @@ hostapd_set_bss_options() { | ||||
| 			set_default sae_require_mfp 1 | ||||
| 			[ "$ppsk" -eq 0 ] && set_default sae_pwe 2 | ||||
| 		;; | ||||
| 		psk-sae|psk2-radius|eap-eap2) | ||||
| 		psk-sae|eap-eap2) | ||||
| 			set_default ieee80211w 1 | ||||
| 			set_default sae_require_mfp 1 | ||||
| 			[ "$ppsk" -eq 0 ] && set_default sae_pwe 2 | ||||
| 		;; | ||||
|                 psk2-radius) | ||||
| 			set_default ieee80211w 1 | ||||
| 			set_default sae_require_mfp 0 | ||||
| 			[ "$ppsk" -eq 0 ] && set_default sae_pwe 4 | ||||
|                 ;; | ||||
| 	esac | ||||
| 	[ -n "$sae_require_mfp" ] && append bss_conf "sae_require_mfp=$sae_require_mfp" "$N" | ||||
| 	[ -n "$sae_pwe" ] && append bss_conf "sae_pwe=$sae_pwe" "$N" | ||||
|   | ||||
| @@ -144,7 +144,7 @@ function netifd_reload() { | ||||
|  | ||||
| 			push(ssid.interfaces, iface.ifname); | ||||
| 			ssid.bands[band] = iface.ifname; | ||||
| 			ssid.mpsk = config.multi_psk; | ||||
| 			ssid.mpsk = ssid?.mpsk ? true : config.multi_psk; | ||||
| 			for (let sta in iface.stations) { | ||||
| 				let stacfg = sta.config; | ||||
|  | ||||
| @@ -308,18 +308,18 @@ function sta_auth_cache(ifname, addr, idx, phrase) { | ||||
| function auth_cb(msg) { | ||||
| 	let data = msg.data; | ||||
|  | ||||
| 	if (!is_ssid_mpsk(data.iface)) | ||||
| 		return; | ||||
|  | ||||
| 	printf(`Event ${msg.type}: ${msg.data}\n`); | ||||
| 	switch (msg.type) { | ||||
| 	case 'sta_auth': | ||||
| 		if (!is_ssid_mpsk(data.iface)) | ||||
| 			return; | ||||
|  | ||||
| 		return { | ||||
| 			psk: sta_auth_psk(data.iface, data.sta), | ||||
| 			force_psk: true, | ||||
| 		}; | ||||
| 	case 'sta_connected': | ||||
| 		if (data.psk_idx == null) | ||||
| 		if (data.psk_idx == null || !is_ssid_mpsk(data.iface)) | ||||
| 			return; | ||||
| 		return sta_auth_cache(data.iface, data.sta, data.psk_idx, data.psk); | ||||
| 	case 'reload': | ||||
|   | ||||
| @@ -0,0 +1,14 @@ | ||||
| --- a/src/ap/beacon.c | ||||
| +++ b/src/ap/beacon.c | ||||
| @@ -934,8 +934,10 @@ void handle_probe_req(struct hostapd_dat | ||||
|  	int ubus_response; | ||||
|   | ||||
|  	if (hapd->iconf->rssi_ignore_probe_request && ssi_signal && | ||||
| -	    ssi_signal < hapd->iconf->rssi_ignore_probe_request) | ||||
| +	    ssi_signal < hapd->iconf->rssi_ignore_probe_request) { | ||||
| +		hostapd_ubus_notify_rssi(hapd, "rssi-ignore-probe", mgmt->sa, ssi_signal); | ||||
|  		return; | ||||
| +	} | ||||
|   | ||||
|  	if (len < IEEE80211_HDRLEN) | ||||
|  		return; | ||||
| @@ -1923,6 +1923,21 @@ void hostapd_ubus_notify(struct hostapd_data *hapd, const char *type, const u8 * | ||||
| 	ubus_notify(ctx, &hapd->ubus.obj, type, b.head, -1); | ||||
| } | ||||
|  | ||||
| void hostapd_ubus_notify_rssi(struct hostapd_data *hapd, const char *type, const u8 *addr, int rssi) | ||||
| { | ||||
| 	if (!hapd->ubus.obj.has_subscribers) | ||||
| 		return; | ||||
|  | ||||
| 	if (!addr) | ||||
| 		return; | ||||
|  | ||||
| 	blob_buf_init(&b, 0); | ||||
| 	blobmsg_add_macaddr(&b, "address", addr); | ||||
| 	blobmsg_add_u32(&b, "rssi", rssi); | ||||
|  | ||||
| 	ubus_notify(ctx, &hapd->ubus.obj, type, b.head, -1); | ||||
| } | ||||
|  | ||||
| void hostapd_ubus_notify_csa(struct hostapd_data *hapd, int freq) | ||||
| { | ||||
| 	if (!hapd->ubus.obj.has_subscribers) | ||||
|   | ||||
| @@ -56,6 +56,7 @@ void hostapd_ubus_notify_beacon_report(struct hostapd_data *hapd, | ||||
| 				       size_t len); | ||||
| void hostapd_ubus_notify_radar_detected(struct hostapd_iface *iface, int frequency, | ||||
| 					int chan_width, int cf1, int cf2); | ||||
| void hostapd_ubus_notify_rssi(struct hostapd_data *hapd, const char *type, const u8 *addr, int rssi); | ||||
|  | ||||
| void hostapd_ubus_notify_bss_transition_response( | ||||
| 	struct hostapd_data *hapd, const u8 *addr, u8 dialog_token, u8 status_code, | ||||
|   | ||||
| @@ -19,15 +19,6 @@ sonicfi,rap750e-s|\ | ||||
| sonicfi,rap750w-311a) | ||||
| 	ucidef_set_led_default "power" "POWER" "pwm:blue" "on" | ||||
| 	;; | ||||
| zyxel,nwa130be) | ||||
| 	#eth0: APPE: phyaddr 4  green:2.5G  orange:others | ||||
| 	ssdk_sh debug phy set 4 0x40078074 0x670 | ||||
| 	ssdk_sh debug phy set 4 0x40078078 0x8600 | ||||
|  | ||||
| 	#eth1:  MHT: phyaddr 3  green:2.5G orange:others | ||||
| 	ssdk_sh debug phy set 3 0x40078074 0x670 | ||||
| 	ssdk_sh debug phy set 3 0x40078078 0x8600 | ||||
| 	;; | ||||
| esac | ||||
|  | ||||
| board_config_flush | ||||
|   | ||||
| @@ -35,7 +35,8 @@ ipq53xx_setup_interfaces() | ||||
| 	sercomm,ap72tip-v4) | ||||
| 		ucidef_set_interface_wan "eth0" | ||||
| 		;;	 | ||||
| 	zyxel,nwa130be) | ||||
| 	zyxel,nwa130be|\ | ||||
| 	zyxel,nwa50be) | ||||
| 		ucidef_set_interfaces_lan_wan "eth1" "eth0" | ||||
| 		;; | ||||
| 	esac | ||||
| @@ -95,7 +96,7 @@ qcom_setup_macs() | ||||
|                 wan_mac=$(cat /sys/class/net/eth0/address) | ||||
|                 ucidef_set_wireless_macaddr_base 2g $(macaddr_add "$wan_mac" 1) | ||||
|                 ucidef_set_wireless_macaddr_base 5g $(macaddr_add "$wan_mac" 2) | ||||
|                 [ "$board" = "sonicfi,rap7110c-34x" ] && | ||||
|                 [ "$board" = "sonicfi,rap7110c-341x" ] && | ||||
|                     ucidef_set_wireless_macaddr_base 6g $(macaddr_add "$wan_mac" 3) | ||||
|                 ;; | ||||
|         sonicfi,rap750w-311a) | ||||
| @@ -123,6 +124,18 @@ qcom_setup_macs() | ||||
| 		ucidef_set_wireless_macaddr_base 5g $(macaddr_add "$wan_mac" 3) | ||||
| 		ucidef_set_wireless_macaddr_base 6g $(macaddr_add "$wan_mac" 4) | ||||
| 		;; | ||||
| 	zyxel,nwa50be) | ||||
| 		wan_mac=$(cat /proc/cmdline) | ||||
| 		wan_mac="${wan_mac##*hwaddr=}" | ||||
| 		wan_mac="${wan_mac%% *}" | ||||
| 		wan_mac="$(echo ${wan_mac} | sed 's/\(..\)/\1:/g;s/:$//')" | ||||
| 		lan_mac=$(macaddr_add "$wan_mac" 1) | ||||
| 		ucidef_set_network_device_mac eth0 $wan_mac | ||||
| 		ucidef_set_network_device_mac eth1 $lan_mac | ||||
| 		ucidef_set_label_macaddr $wan_mac | ||||
| 		ucidef_set_wireless_macaddr_base 2g $(macaddr_add "$wan_mac" 2) | ||||
| 		ucidef_set_wireless_macaddr_base 5g $(macaddr_add "$wan_mac" 3) | ||||
| 		;; | ||||
|         *) | ||||
|                 wan_mac=$(cat /sys/class/net/eth1/address) | ||||
|                 lan_mac=$(macaddr_add "$wan_mac" 1) | ||||
|   | ||||
| @@ -66,7 +66,8 @@ ath12k/IPQ5332/hw1.0/caldata.bin) | ||||
| 	edgecore,eap105|\ | ||||
| 	sercomm,ap72tip-v4|\ | ||||
| 	sercomm,ap72tip|\ | ||||
| 	zyxel,nwa130be) | ||||
| 	zyxel,nwa130be|\ | ||||
| 	zyxel,nwa50be) | ||||
| 		caldata_extract "0:ART" 0x1000 0x20000  | ||||
| 		;; | ||||
| 	cig,wf672) | ||||
| @@ -88,7 +89,8 @@ ath12k/QCN92XX/hw1.0/cal-pci-0001:01:00.0.bin) | ||||
| 	edgecore,eap105|\ | ||||
| 	sercomm,ap72tip-v4|\ | ||||
| 	sercomm,ap72tip|\ | ||||
| 	zyxel,nwa130be) | ||||
| 	zyxel,nwa130be|\ | ||||
| 	zyxel,nwa50be) | ||||
| 		caldata_extract "0:ART" 0x58800 0x2d000 | ||||
| 		;; | ||||
| 	cig,wf672) | ||||
|   | ||||
							
								
								
									
										23
									
								
								feeds/qca-wifi-7/ipq53xx/base-files/etc/init.d/phy_quirks
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										23
									
								
								feeds/qca-wifi-7/ipq53xx/base-files/etc/init.d/phy_quirks
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| #!/bin/sh /etc/rc.common | ||||
|  | ||||
| START=99 | ||||
|  | ||||
| boot() { | ||||
| 	. /lib/functions.sh | ||||
|  | ||||
| 	case "$(board_name)" in | ||||
| 	edgecore,eap105) | ||||
| 		ssdk_sh debug phy set 0x1 0x601FD032 0xff | ||||
| 		;; | ||||
| 	zyxel,nwa130be|\ | ||||
| 	zyxel,nwa50be) | ||||
| 		#eth0: APPE: phyaddr 4  green:2.5G  orange:others | ||||
| 		ssdk_sh debug phy set 4 0x40078074 0x670 | ||||
| 		ssdk_sh debug phy set 4 0x40078078 0x8600 | ||||
|  | ||||
| 		#eth1:  MHT: phyaddr 3  green:2.5G orange:others | ||||
| 		ssdk_sh debug phy set 3 0x40078074 0x670 | ||||
| 		ssdk_sh debug phy set 3 0x40078078 0x8600 | ||||
| 		;; | ||||
| 	esac | ||||
| } | ||||
| @@ -173,7 +173,8 @@ platform_do_upgrade() { | ||||
| 		sonicfi_dualimage_check | ||||
| 		nand_upgrade_tar "$1" | ||||
| 		;; | ||||
| 	zyxel,nwa130be) | ||||
| 	zyxel,nwa130be|\ | ||||
| 	zyxel,nwa50be) | ||||
| 		nand_upgrade_tar "$1" | ||||
| 		;; | ||||
| 	esac | ||||
|   | ||||
| @@ -236,6 +236,15 @@ | ||||
| 			}; | ||||
| 		}; | ||||
|  | ||||
| 		poe { | ||||
| 			compatible = "poe-judge"; | ||||
| 			detect-mode = <0x3>; | ||||
| 			detect-gpio1 = <&tlmm 25 GPIO_ACTIVE_HIGH>; | ||||
| 			detect-gpio2 = <&tlmm 43 GPIO_ACTIVE_HIGH>; | ||||
| 			detect-gpio3 = <&tlmm 29 GPIO_ACTIVE_HIGH>; | ||||
| 			status = "ok"; | ||||
|                 }; | ||||
|  | ||||
| 		wsi: wsi { | ||||
| 			id = <0>; | ||||
| 			num_chip = <2>; | ||||
|   | ||||
| @@ -298,6 +298,13 @@ | ||||
| 			}; | ||||
| 		}; | ||||
|  | ||||
| 		poe { | ||||
|                         compatible = "poe-judge"; | ||||
| 			detect-mode = <0x11>; | ||||
|                         detect_gpio = <&tlmm 0x17 0>; | ||||
|                         status = "ok"; | ||||
|                 }; | ||||
|  | ||||
| 		ess-instance { | ||||
| 			num_devices = <0x2>; | ||||
|  | ||||
|   | ||||
| @@ -298,6 +298,13 @@ | ||||
| 			}; | ||||
| 		}; | ||||
|  | ||||
| 		poe { | ||||
|                         compatible = "poe-judge"; | ||||
| 			detect-mode = <0x11>; | ||||
|                         detect_gpio = <&tlmm 0x17 0>; | ||||
|                         status = "ok"; | ||||
|                 }; | ||||
|  | ||||
| 		ess-instance { | ||||
| 			num_devices = <0x2>; | ||||
|  | ||||
|   | ||||
| @@ -234,6 +234,15 @@ | ||||
| 			}; | ||||
| 		}; | ||||
|  | ||||
| 		poe { | ||||
| 			compatible = "poe-judge"; | ||||
| 			detect-mode = <0x4>; | ||||
| 			detect-gpio1 = <&extgpio 0 0>; | ||||
| 			detect-gpio2 = <&extgpio 1 0>; | ||||
| 			detect-gpio3 = <&extgpio 2 0>; | ||||
| 			status = "ok"; | ||||
|                 }; | ||||
|  | ||||
| 		wsi: wsi { | ||||
| 			id = <0>; | ||||
| 			num_chip = <2>; | ||||
| @@ -538,7 +547,6 @@ | ||||
| 	pinctrl-0 = <&pwm_pins>; | ||||
| 	pinctrl-names = "default"; | ||||
| 	dft-pwm-status = <0>, <0>, <1>, <0>; | ||||
|         poe_type_pin = <&extgpio 0 0 &extgpio 1 0 &extgpio 2 0>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  | ||||
|   | ||||
							
								
								
									
										893
									
								
								feeds/qca-wifi-7/ipq53xx/dts/ipq5332-zyxel-nwa50be.dts
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										893
									
								
								feeds/qca-wifi-7/ipq53xx/dts/ipq5332-zyxel-nwa50be.dts
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,893 @@ | ||||
| // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) | ||||
| /* | ||||
|  * IPQ5332 RDP442 board device tree source | ||||
|  * | ||||
|  * Copyright (c) 2020-2021 The Linux Foundation. All rights reserved. | ||||
|  * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved. | ||||
|  */ | ||||
|  | ||||
| /dts-v1/; | ||||
|  | ||||
| #include "ipq5332.dtsi" | ||||
| #include <dt-bindings/gpio/gpio.h> | ||||
| #include <dt-bindings/input/input.h> | ||||
| #include <dt-bindings/leds/common.h> | ||||
| #include "ipq5332-default-memory.dtsi" | ||||
|  | ||||
|  | ||||
| / { | ||||
| 	model = "Qualcomm Technologies, Inc. IPQ5332/RDP442/AP-MI01.3"; | ||||
| 	compatible = "zyxel,nwa50be", "qcom,ipq5332-ap-mi01.3", "qcom,ipq5332-rdp442", "qcom,ipq5332"; | ||||
|  | ||||
| #ifdef __IPQ_MEM_PROFILE_512_MB__ | ||||
|  | ||||
| 	/*     512M  Layout for IPQ5332 + QCN6432 + QCN6432 | ||||
| 	 * +==========+==============+========================+ | ||||
| 	 * |         |              |                         | | ||||
| 	 * |  Region | Start Offset |          Size           | | ||||
| 	 * |         |              |                         | | ||||
| 	 * +---------+--------------+-------------------------+ | ||||
| 	 * |   Q6    |              |                         | | ||||
| 	 * |  code/  |  0x4A900000  |          25MB           | | ||||
| 	 * |  data   |              |                         | | ||||
| 	 * +---------+--------------+-------------------------+ | ||||
| 	 * | IPQ5332 |              |                         | | ||||
| 	 * |  data   |  0x4C200000  |          17MB           | | ||||
| 	 * +---------+--------------+-------------------------+ | ||||
| 	 * | IPQ5332 |              |                         | | ||||
| 	 * | M3 Dump |  0x4D300000  |           1MB           | | ||||
| 	 * +---------+--------------+-------------------------+ | ||||
| 	 * | IPQ5332 |              |                         | | ||||
| 	 * |  QDSS   |  0x4D400000  |           1MB           | | ||||
| 	 * +---------+--------------+-------------------------+ | ||||
| 	 * | IPQ5332 |              |                         | | ||||
| 	 * |  CALDB  |  0x4D500000  |           3MB           | | ||||
| 	 * +---------+--------------+-------------------------+ | ||||
| 	 * |QCN6432_1|              |                         | | ||||
| 	 * |  data   |  0x4D800000  |          16MB           | | ||||
| 	 * +---------+--------------+-------------------------+ | ||||
| 	 * |QCN6432_1|              |                         | | ||||
| 	 * | M3 Dump |  0x4E800000  |           1MB           | | ||||
| 	 * +---------+--------------+-------------------------+ | ||||
| 	 * |QCN6432_1|              |                         | | ||||
| 	 * |  QDSS   |  0x4E900000  |           1MB           | | ||||
| 	 * +---------+--------------+-------------------------+ | ||||
| 	 * |QCN6432_1|              |                         | | ||||
| 	 * |  CALDB  |  0x4EA00000  |           5MB           | | ||||
| 	 * +---------+--------------+-------------------------+ | ||||
| 	 * |QCN6432_2|              |                         | | ||||
| 	 * |  data   |  0x4EF00000  |          16MB           | | ||||
| 	 * +---------+--------------+-------------------------+ | ||||
| 	 * |QCN6432_2|              |                         | | ||||
| 	 * | M3 Dump |  0x4FF00000  |           1MB           | | ||||
| 	 * +---------+--------------+-------------------------+ | ||||
| 	 * |QCN6432_2|              |                         | | ||||
| 	 * |  QDSS   |  0x50000000  |           1MB           | | ||||
| 	 * +---------+--------------+-------------------------+ | ||||
| 	 * |QCN6432_2|              |                         | | ||||
| 	 * |  CALDB  |  0x50100000  |           5MB           | | ||||
| 	 * +---------+--------------+-------------------------+ | ||||
| 	 * |         |              |                         | | ||||
| 	 * |   MLO   |  0x50600000  |          12MB           | | ||||
| 	 * +==================================================+ | ||||
| 	 * |                                                  | | ||||
| 	 * |                                                  | | ||||
| 	 * |                                                  | | ||||
| 	 * |             Rest of memory for Linux             | | ||||
| 	 * |                                                  | | ||||
| 	 * |                                                  | | ||||
| 	 * |                                                  | | ||||
| 	 * +==================================================+ | ||||
| 	 */ | ||||
|  | ||||
| 	reserved-memory { | ||||
|  | ||||
| 		/delete-node/ m3_dump@4cc00000; | ||||
| 		/delete-node/ q6_etr_dump@1; | ||||
| 		/delete-node/ mlo_global_mem_0@0x4db00000; | ||||
| 		/delete-node/ wcnss@4a900000; | ||||
| 		/delete-node/ q6_caldb_region@4ce00000; | ||||
|  | ||||
| 		q6_mem_regions: q6_mem_regions@4A900000  { | ||||
| 			reg = <0x0 0x4a900000 0x0 0x5D00000>; | ||||
| 			no-map; | ||||
| 		}; | ||||
|  | ||||
| 		q6_code_data: q6_code_data@4A900000 { | ||||
| 			reg = <0x0 0x4a900000 0x0 0x1900000>; | ||||
| 			no-map; | ||||
| 		}; | ||||
|  | ||||
| 		q6_ipq5332_data: q6_ipq5332_data@4C200000 { | ||||
| 			reg = <0x0 0x4C200000 0x0 0x1100000>; | ||||
| 			no-map; | ||||
| 		}; | ||||
|  | ||||
| 		m3_dump: m3_dump@4D300000 { | ||||
| 			reg = <0x0 0x4D300000 0x0 0x100000>; | ||||
| 			no-map; | ||||
| 		}; | ||||
|  | ||||
| 		q6_etr_region: q6_etr_dump@4D400000 { | ||||
| 			reg = <0x0 0x4D400000 0x0 0x100000>; | ||||
| 			no-map; | ||||
| 		}; | ||||
|  | ||||
| 		q6_ipq5332_caldb: q6_ipq5332_caldb@4D500000 { | ||||
| 			reg = <0x0 0x4D500000 0x0 0x300000>; | ||||
| 			no-map; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6432_data_1: q6_qcn6432_data_1@4D800000 { | ||||
| 			reg = <0x0 0x4D800000 0x0 0x1000000>; | ||||
| 			no-map; | ||||
| 		}; | ||||
|  | ||||
| 		m3_dump_qcn6432_1: m3_dump_qcn6432_1@4E800000 { | ||||
| 			reg = <0x0 0x4E800000 0x0 0x100000>; | ||||
| 			no-map; | ||||
|                 }; | ||||
|  | ||||
| 		q6_qcn6432_etr_1: q6_qcn6432_etr_1@4E900000 { | ||||
| 			reg = <0x0 0x4E900000 0x0 0x100000>; | ||||
| 			no-map; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6432_caldb_1: q6_qcn6432_caldb_1@4EA00000 { | ||||
| 			reg = <0x0 0x4EA00000 0x0 0x500000>; | ||||
| 			no-map; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6432_data_2: q6_qcn6432_data_2@4EF00000 { | ||||
| 			reg = <0x0 0x4EF00000 0x0 0x1000000>; | ||||
| 			no-map; | ||||
| 		}; | ||||
|  | ||||
| 		m3_dump_qcn6432_2: m3_dump_qcn6432_2@4FF00000 { | ||||
| 			reg = <0x0 0x4FF00000 0x0 0x100000>; | ||||
| 			no-map; | ||||
|                 }; | ||||
|  | ||||
| 		q6_qcn6432_etr_2: q6_qcn6432_etr_2@50000000 { | ||||
| 			reg = <0x0 0x50000000 0x0 0x100000>; | ||||
| 			no-map; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6432_caldb_2: q6_qcn6432_caldb_2@50100000 { | ||||
| 			reg = <0x0 0x50100000 0x0 0x500000>; | ||||
| 			no-map; | ||||
| 		}; | ||||
|  | ||||
| 		mlo_global_mem0: mlo_global_mem_0@50600000 { | ||||
| 			reg = <0x0 0x50600000 0x0 0xC00000>; | ||||
| 			no-map; | ||||
| 		}; | ||||
| 	}; | ||||
| #else | ||||
|  | ||||
| 	/*  1G  Layout for IPQ5332 + QCN6432 + QCN6432 | ||||
| 	* +==========+==============+========================+ | ||||
| 	* |         |              |                         | | ||||
| 	* |  Region | Start Offset |          Size           | | ||||
| 	* |         |              |                         | | ||||
| 	* +---------+--------------+-------------------------+ | ||||
| 	* |   Q6    |              |                         | | ||||
| 	* |  code/  |  0x4A900000  |          25MB           | | ||||
| 	* |  data   |              |                         | | ||||
| 	* +---------+--------------+-------------------------+ | ||||
| 	* | IPQ5332 |              |                         | | ||||
| 	* |  data   |  0x4C200000  |          21MB           | | ||||
| 	* +---------+--------------+-------------------------+ | ||||
| 	* | IPQ5332 |              |                         | | ||||
| 	* | M3 Dump |  0x4D700000  |           1MB           | | ||||
| 	* +---------+--------------+-------------------------+ | ||||
| 	* | IPQ5332 |              |                         | | ||||
| 	* |  QDSS   |  0x4D800000  |           1MB           | | ||||
| 	* +---------+--------------+-------------------------+ | ||||
| 	* | IPQ5332 |              |                         | | ||||
| 	* |  CALDB  |  0x4D900000  |           5MB           | | ||||
| 	* +---------+--------------+-------------------------+ | ||||
| 	* |QCN6432_1|              |                         | | ||||
| 	* |  data   |  0x4DE00000  |          21MB           | | ||||
| 	* +---------+--------------+-------------------------+ | ||||
| 	* |QCN6432_1|              |                         | | ||||
| 	* | M3 Dump |  0x4F300000  |           1MB           | | ||||
| 	* +---------+--------------+-------------------------+ | ||||
| 	* |QCN6432_1|              |                         | | ||||
| 	* |  QDSS   |  0x4F400000  |           1MB           | | ||||
| 	* +---------+--------------+-------------------------+ | ||||
| 	* |QCN6432_1|              |                         | | ||||
| 	* |  CALDB  |  0x4F500000  |           5MB           | | ||||
| 	* +---------+--------------+-------------------------+ | ||||
| 	* |QCN6432_2|              |                         | | ||||
| 	* |  data   |  0x4FA00000  |          21MB           | | ||||
| 	* +---------+--------------+-------------------------+ | ||||
| 	* |QCN6432_2|              |                         | | ||||
| 	* | M3 Dump |  0x50F00000  |           1MB           | | ||||
| 	* +---------+--------------+-------------------------+ | ||||
| 	* |QCN6432_2|              |                         | | ||||
| 	* |  QDSS   |  0x51000000  |           1MB           | | ||||
| 	* +---------+--------------+-------------------------+ | ||||
| 	* |QCN6432_2|              |                         | | ||||
| 	* |  CALDB  |  0x51100000  |           5MB           | | ||||
| 	* +---------+--------------+-------------------------+ | ||||
| 	* |         |              |                         | | ||||
| 	* |   MLO   |  0x51600000  |          12MB           | | ||||
| 	* +==================================================+ | ||||
| 	* |                                                  | | ||||
| 	* |                                                  | | ||||
| 	* |                                                  | | ||||
| 	* |             Rest of memory for Linux             | | ||||
| 	* |                                                  | | ||||
| 	* |                                                  | | ||||
| 	* |                                                  | | ||||
| 	* +==================================================+ | ||||
| 	*/ | ||||
| 	reserved-memory { | ||||
|  | ||||
| 		/delete-node/ m3_dump@4cc00000; | ||||
| 		/delete-node/ q6_etr_dump@1; | ||||
| 		/delete-node/ mlo_global_mem_0@0x4db00000; | ||||
| 		/delete-node/ wcnss@4a900000; | ||||
| 		/delete-node/ q6_caldb_region@4ce00000; | ||||
|  | ||||
| 		q6_mem_regions: q6_mem_regions@4A900000  { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4a900000 0x0 0x6D00000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_code_data: q6_code_data@4A900000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4a900000 0x0 0x1900000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_ipq5332_data: q6_ipq5332_data@4C200000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4C200000 0x0 0x1500000>; | ||||
| 		}; | ||||
|  | ||||
| 		m3_dump: m3_dump@4D700000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4D700000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_etr_region: q6_etr_dump@4D800000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4D800000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_ipq5332_caldb: q6_ipq5332_caldb@4D900000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4D900000 0x0 0x500000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6432_data_1: q6_qcn6432_data_1@4DE00000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4DE00000 0x0 0x1500000>; | ||||
| 		}; | ||||
|  | ||||
| 		m3_dump_qcn6432_1: m3_dump_qcn6432_1@4F300000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4F300000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6432_etr_1: q6_qcn6432_etr_1@4F400000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4F400000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6432_caldb_1: q6_qcn6432_caldb_1@4F500000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4F500000 0x0 0x500000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6432_data_2: q6_qcn6432_data_2@4FA00000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4FA00000 0x0 0x1500000>; | ||||
| 		}; | ||||
|  | ||||
| 		m3_dump_qcn6432_2: m3_dump_qcn6432_2@50F00000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x50F00000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6432_etr_2: q6_qcn6432_etr_2@51000000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x51000000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6432_caldb_2: q6_qcn6432_caldb_2@51100000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x51100000 0x0 0x500000>; | ||||
| 		}; | ||||
|  | ||||
| 		mlo_global_mem0: mlo_global_mem_0@51600000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x51600000 0x0 0xC00000>; | ||||
| 		}; | ||||
| 	}; | ||||
| #endif | ||||
|  | ||||
| 	aliases { | ||||
| 		serial0 = &blsp1_uart0; | ||||
| 		serial1 = &blsp1_uart1; | ||||
| 		ethernet0 = "/soc/dp1"; | ||||
| 		ethernet1 = "/soc/dp2"; | ||||
| 	}; | ||||
|  | ||||
| 	chosen { | ||||
| 		stdout-path = "serial0"; | ||||
| 	}; | ||||
|  | ||||
| 	soc@0 { | ||||
| 		mdio:mdio@90000 { | ||||
| 			pinctrl-0 = <&mdio1_pins>; | ||||
| 			pinctrl-names = "default"; | ||||
| 			/*gpio22 is for wan napa, gpio51 for lan napa*/ | ||||
| 			phy-reset-gpio = <&tlmm 51 GPIO_ACTIVE_LOW>; | ||||
| 			status = "okay"; | ||||
|  | ||||
| 			phy2: ethernet-phy@2 { | ||||
| 				reg = <28>; | ||||
| 			}; | ||||
| 		}; | ||||
|  | ||||
| 		leds { | ||||
| 			compatible = "gpio-leds"; | ||||
| 			pinctrl-0 = <&led_pins>; | ||||
| 			pinctrl-names = "default"; | ||||
| 			led_blue{ | ||||
| 				label = "led_blue"; | ||||
| 				gpio = <&tlmm 22 GPIO_ACTIVE_HIGH>; | ||||
| 				linux,default-trigger = "led_blue"; | ||||
| 				default-state = "off"; | ||||
| 			}; | ||||
| 			led_green { | ||||
| 				label = "led_green"; | ||||
| 				gpio = <&tlmm 45 GPIO_ACTIVE_HIGH>; | ||||
| 				linux,default-trigger = "led_green"; | ||||
| 				default-state = "on"; | ||||
| 			}; | ||||
| 			led_white { | ||||
| 				label = "led_white"; | ||||
| 				gpio = <&tlmm 43 GPIO_ACTIVE_HIGH>; | ||||
| 				linux,default-trigger = "led_white"; | ||||
| 				default-state = "off"; | ||||
| 			}; | ||||
| 			led_red { | ||||
| 				label = "led_red"; | ||||
| 				gpio = <&tlmm 44 GPIO_ACTIVE_HIGH>; | ||||
| 				linux,default-trigger = "led_red"; | ||||
| 				default-state = "off"; | ||||
| 			}; | ||||
| 		}; | ||||
|  | ||||
| 		gpio_keys { | ||||
| 			compatible = "gpio-keys"; | ||||
| 			pinctrl-0 = <&button_pins>; | ||||
| 			pinctrl-names = "default"; | ||||
| 			status = "okay"; | ||||
|  | ||||
| 			button@1 { | ||||
| 				label = "reset"; | ||||
| 				linux,code = <KEY_RESTART>; | ||||
| 				gpios = <&tlmm 29 GPIO_ACTIVE_LOW>; | ||||
| 				linux,input-type = <1>; | ||||
| 				debounce-interval = <60>; | ||||
| 			}; | ||||
| 		}; | ||||
|  | ||||
| 		ess-instance { | ||||
| 			ess-switch@3a000000 { | ||||
| 				switch_cpu_bmp = <0x1>;  /* cpu port bitmap */ | ||||
| 				switch_lan_bmp = <0x4>; /* lan port bitmap */ | ||||
| 				switch_wan_bmp = <0x0>; /* wan port bitmap */ | ||||
| 				switch_mac_mode = <0xf>; /* mac mode for uniphy instance0*/ | ||||
| 				switch_mac_mode1 = <0xff>; /* mac mode for uniphy instance1*/ | ||||
| 				switch_mac_mode2 = <0xff>; /* mac mode for uniphy instance2*/ | ||||
| 				qcom,port_phyinfo { | ||||
| 					port@0 { | ||||
| 						port_id = <2>; | ||||
| 						phy_address = <28>; | ||||
| 					}; | ||||
| 				}; | ||||
| 			}; | ||||
| 		}; | ||||
|  | ||||
| 		dp1 { | ||||
| 			device_type = "network"; | ||||
| 			compatible = "qcom,nss-dp"; | ||||
| 			qcom,id = <2>; | ||||
| 			reg = <0x3a504000 0x4000>; | ||||
| 			qcom,mactype = <1>; | ||||
| 			local-mac-address = [000000000000]; | ||||
| 			mdio-bus = <&mdio>; | ||||
| 			qcom,phy-mdio-addr = <28>; | ||||
| 			qcom,link-poll = <1>; | ||||
| 			phy-mode = "sgmii"; | ||||
| 		}; | ||||
|  | ||||
| 		nss-macsec0 { | ||||
| 			compatible = "qcom,nss-macsec"; | ||||
| 			phy_addr = <28>; | ||||
| 			mdiobus = <&mdio>; | ||||
| 		}; | ||||
|  | ||||
| 		/* EDMA host driver configuration for the board */ | ||||
| 		edma@3ab00000 { | ||||
| 			qcom,txdesc-ring-start = <4>;		/* Tx desc ring start ID */ | ||||
| 			qcom,txdesc-rings = <12>;		/* Total number of Tx desc rings to be provisioned */ | ||||
| 			qcom,mht-txdesc-rings = <8>;            /* Extra Tx desc rings to be provisioned for MHT SW ports */ | ||||
| 			qcom,txcmpl-ring-start = <4>;		/* Tx complete ring start ID */ | ||||
| 			qcom,txcmpl-rings = <12>;		/* Total number of Tx complete rings to be provisioned */ | ||||
| 			qcom,mht-txcmpl-rings = <8>;            /* Extra Tx complete rings to be provisioned for mht sw ports. */ | ||||
| 			qcom,rxfill-ring-start = <4>;		/* Rx fill ring start ID */ | ||||
| 			qcom,rxfill-rings = <4>;		/* Total number of Rx fill rings to be provisioned */ | ||||
| 			qcom,rxdesc-ring-start = <12>;		/* Rx desc ring start ID */ | ||||
| 			qcom,rxdesc-rings = <4>;		/* Total number of Rx desc rings to be provisioned */ | ||||
| 			qcom,rx-page-mode = <0>;		/* Rx fill ring page mode */ | ||||
| 			qcom,tx-map-priority-level = <1>;	/* Tx priority level per port */ | ||||
| 			qcom,rx-map-priority-level = <1>;	/* Rx priority level per core */ | ||||
| 			qcom,ppeds-num = <2>;			/* Number of PPEDS nodes */ | ||||
| 			/* PPE-DS node format: <Rx-fill Tx-cmpl Rx Tx Queue-base Queue-count> */ | ||||
| 			qcom,ppeds-map = <1 1 1 1 32 8>,	/* PPEDS Node#0 ring and queue map */ | ||||
| 					<2 2 2 2 40 8>;		/* PPEDS Node#1 ring and queue map */ | ||||
| 			qcom,txdesc-map = <8 9 10 11>,		/* Port0 per-core Tx ring map */ | ||||
| 					<12 13 14 15>,        /* MHT-Port1 per-core Tx ring map */ | ||||
| 					<4 5 6 7>,            /* MHT-Port2 per-core Tx ring map/packets from  vp*/ | ||||
| 					<16 17 18 19>,        /* MHT-Port3 per-core Tx ring map */ | ||||
| 					<20 21 22 23>;        /* MHT-Port4 per-core Tx ring map */ | ||||
| 			qcom,txdesc-fc-grp-map = <1 2 3 4 5>;   /* Per GMAC flow control group map */ | ||||
| 			qcom,rxfill-map = <4 5 6 7>;		/* Per-core Rx fill ring map */ | ||||
| 			qcom,rxdesc-map = <12 13 14 15>;	/* Per-core Rx desc ring map */ | ||||
| 			qcom,rx-queue-start = <0>;		/* Rx queue start */ | ||||
| 			qcom,rx-ring-queue-map = <0 8 16 24>,	/* Priority 0 queues per-core Rx ring map */ | ||||
| 						<1 9 17 25>,	/* Priority 1 queues per-core Rx ring map */ | ||||
| 						<2 10 18 26>,	/* Priority 2 queues per-core Rx ring map */ | ||||
| 						<3 11 19 27>,	/* Priority 3 queues per-core Rx ring map */ | ||||
| 						<4 12 20 28>,	/* Priority 4 queues per-core Rx ring map */ | ||||
| 						<5 13 21 29>,	/* Priority 5 queues per-core Rx ring map */ | ||||
| 						<6 14 22 30>,	/* Priority 6 queues per-core Rx ring map */ | ||||
| 						<7 15 23 31>;	/* Priority 7 queues per-core Rx ring map */ | ||||
| 			interrupts = <0 163 4>,			/* Tx complete ring id #4 IRQ info */ | ||||
| 				   <0 164 4>,			/* Tx complete ring id #5 IRQ info */ | ||||
| 				   <0 165 4>,			/* Tx complete ring id #6 IRQ info */ | ||||
| 				   <0 166 4>,			/* Tx complete ring id #7 IRQ info */ | ||||
| 				   <0 167 4>,			/* Tx complete ring id #8 IRQ info */ | ||||
| 				   <0 168 4>,			/* Tx complete ring id #9 IRQ info */ | ||||
| 				   <0 169 4>,			/* Tx complete ring id #10 IRQ info */ | ||||
| 				   <0 170 4>,			/* Tx complete ring id #11 IRQ info */ | ||||
| 				   <0 171 4>,			/* Tx complete ring id #12 IRQ info */ | ||||
| 				   <0 172 4>,			/* Tx complete ring id #13 IRQ info */ | ||||
| 				   <0 173 4>,			/* Tx complete ring id #14 IRQ info */ | ||||
| 				   <0 174 4>,			/* Tx complete ring id #15 IRQ info */ | ||||
| 				   <0 139 4>,			/* Rx desc ring id #12 IRQ info */ | ||||
| 				   <0 140 4>,			/* Rx desc ring id #13 IRQ info */ | ||||
| 				   <0 141 4>,			/* Rx desc ring id #14 IRQ info */ | ||||
| 				   <0 142 4>,			/* Rx desc ring id #15 IRQ info */ | ||||
| 				   <0 191 4>,			/* Misc error IRQ info */ | ||||
| 				<0 160 4>,			/* PPEDS Node #1(TxComp ring id #1) TxComplete IRQ info */ | ||||
| 				<0 128 4>,			/* PPEDS Node #1(Rx Desc ring id #1) Rx Desc IRQ info */ | ||||
| 				<0 152 4>,			/* PPEDS Node #1(RxFill Desc ring id #1) Rx Fill IRQ info */ | ||||
| 				<0 161 4>,			/* PPEDS Node #2(TxComp ring id #2) TxComplete IRQ info */ | ||||
| 				<0 129 4>,			/* PPEDS Node #2(Rx Desc ring id #2) Rx Desc IRQ info */ | ||||
| 				<0 153 4>,                      /* PPEDS Node #2(RxFill Desc ring id #2) Rx Fill IRQ info */ | ||||
| 				<0 175 4>,                   /* MHT port Tx complete ring id #16 IRQ info */ | ||||
| 				<0 176 4>,                   /* MHT port Tx complete ring id #17 IRQ info */ | ||||
| 				<0 177 4>,                   /* MHT port Tx complete ring id #18 IRQ info */ | ||||
| 				<0 178 4>,                   /* MHT port Tx complete ring id #19 IRQ info */ | ||||
| 				<0 179 4>,                   /* MHT port Tx complete ring id #20 IRQ info */ | ||||
| 				<0 180 4>,                   /* MHT port Tx complete ring id #21 IRQ info */ | ||||
| 				<0 181 4>,                   /* MHT port Tx complete ring id #22 IRQ info */ | ||||
| 				<0 182 4>;                   /* MHT port Tx complete ring id #23 IRQ info */ | ||||
| 		}; | ||||
|  | ||||
| 		wsi: wsi { | ||||
| 			id = <0>; | ||||
| 			num_chip = <3>; | ||||
| 			chip_info = <0 2 1 2>, | ||||
| 				    <1 2 2 0>, | ||||
| 				    <2 2 0 1>; | ||||
| 		}; | ||||
|  | ||||
| 		q6v5_wcss: remoteproc@d100000 { | ||||
| 			boot-args = <0x1 0x4 0x3 0x0 0x26 0x2>, | ||||
| 					<0x1 0x4 0x4 0x1 0x2f 0x2>; | ||||
| 			memory-region = <&q6_mem_regions>; | ||||
|  | ||||
| 			/delete-node/ remoteproc_pd1; | ||||
| 			/delete-node/ remoteproc_pd2; | ||||
| 			/delete-node/ remoteproc_pd3; | ||||
|  | ||||
| 			q6_wcss_pd4: remoteproc_pd4 { | ||||
| 				compatible = "qcom,ipq5332-mpd-upd-text"; | ||||
| 				firmware = "IPQ5332/q6_fw4.mdt"; | ||||
|  | ||||
| 				q6_wcss_pd1: remoteproc_pd1 { | ||||
| 					compatible = "qcom,ipq5332-wcss-ahb-mpd"; | ||||
| 					firmware = "IPQ5332/q6_fw1.mdt"; | ||||
| 					m3_firmware = "IPQ5332/iu_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"; | ||||
|  | ||||
| 					qcom,smem-states = <&wcss_smp2p_out 8>, | ||||
| 							<&wcss_smp2p_out 9>, | ||||
| 							<&wcss_smp2p_out 10>; | ||||
| 					qcom,smem-state-names = "shutdown", | ||||
| 								"stop", | ||||
| 								"spawn"; | ||||
| 					memory-region = <&q6_ipq5332_data>, | ||||
| 							<&m3_dump>, | ||||
| 							<&q6_etr_region>, | ||||
| 							<&q6_ipq5332_caldb>; | ||||
| 				}; | ||||
|  | ||||
| 				q6_wcss_pd2: remoteproc_pd2 { | ||||
| 					compatible = "qcom,ipq5332-wcss-pcie-mpd"; | ||||
| 					firmware = "IPQ5332/q6_fw2.mdt"; | ||||
| 					m3_firmware = "qcn6432/iu_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"; | ||||
| 					memory-region = <&q6_qcn6432_data_1>, | ||||
| 							<&m3_dump_qcn6432_1>, | ||||
| 							<&q6_qcn6432_etr_1>, | ||||
| 							<&q6_qcn6432_caldb_1>; | ||||
| 					status = "ok"; | ||||
| 				}; | ||||
|  | ||||
| 				q6_wcss_pd3: remoteproc_pd3 { | ||||
| 					compatible = "qcom,ipq5332-wcss-pcie-mpd"; | ||||
| 					firmware = "IPQ5332/q6_fw3.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"; | ||||
| 					memory-region = <&q6_qcn6432_data_2>, | ||||
| 							<&m3_dump_qcn6432_2>, | ||||
| 							<&q6_qcn6432_etr_2>, | ||||
| 							<&q6_qcn6432_caldb_2>; | ||||
| 					status = "ok"; | ||||
| 				}; | ||||
| 			}; | ||||
| 		}; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &blsp1_uart0 { | ||||
| 	pinctrl-0 = <&serial_0_pins>; | ||||
| 	pinctrl-names = "default"; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  | ||||
| &blsp1_uart1 { | ||||
|         pinctrl-0 = <&serial_1_pins>; | ||||
|         pinctrl-names = "default"; | ||||
|         status = "disabled"; | ||||
| }; | ||||
|  | ||||
| &blsp1_i2c1 { | ||||
| 	clock-frequency  = <400000>; | ||||
| 	pinctrl-0 = <&i2c_1_pins>; | ||||
| 	pinctrl-names = "default"; | ||||
| 	status = "disabled"; | ||||
| }; | ||||
|  | ||||
| &blsp1_spi0 { | ||||
| 	pinctrl-0 = <&spi_0_data_clk_pins &spi_0_cs_pins>; | ||||
| 	pinctrl-names = "default"; | ||||
| 	status = "okay"; | ||||
|  | ||||
| 	flash@0 { | ||||
| 		compatible = "n25q128a11", "micron,n25q128a11", "jedec,spi-nor"; | ||||
| 		reg = <0>; | ||||
| 		#address-cells = <1>; | ||||
| 		#size-cells = <1>; | ||||
| 		spi-max-frequency = <50000000>; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &sdhc { | ||||
| 	bus-width = <4>; | ||||
| 	max-frequency = <192000000>; | ||||
| 	mmc-ddr-1_8v; | ||||
| 	mmc-hs200-1_8v; | ||||
| 	non-removable; | ||||
| 	pinctrl-0 = <&sdc_default_state>; | ||||
| 	pinctrl-names = "default"; | ||||
| 	status = "disabled"; | ||||
| }; | ||||
|  | ||||
| &sleep_clk { | ||||
| 	clock-frequency = <32000>; | ||||
| }; | ||||
|  | ||||
| &qpic_bam { | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  | ||||
| &qpic_nand { | ||||
| 	pinctrl-0 = <&qspi_default_state>; | ||||
| 	pinctrl-names = "default"; | ||||
| 	status = "okay"; | ||||
|  | ||||
| 	nandcs@0 { | ||||
| 		reg = <0>; | ||||
| 		#address-cells = <1>; | ||||
| 		#size-cells = <1>; | ||||
|  | ||||
| 		nand-ecc-strength = <8>; | ||||
| 		nand-ecc-step-size = <512>; | ||||
| 		nand-bus-width = <8>; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| /* PINCTRL */ | ||||
|  | ||||
| &tlmm { | ||||
|  | ||||
| 	led_pins: led_pins { | ||||
| 		led_blue { | ||||
| 			pins = "gpio22"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
|  | ||||
| 		led_green { | ||||
| 			pins = "gpio45"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
|  | ||||
| 		led_white { | ||||
| 			pins = "gpio43"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
|  | ||||
| 		led_red { | ||||
| 			pins = "gpio44"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	qspi_default_state: qspi-default-state { | ||||
| 		qspi_clock { | ||||
| 			pins = "gpio13"; | ||||
| 			function = "qspi_clk"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
|  | ||||
| 		qspi_cs { | ||||
| 			pins = "gpio12"; | ||||
| 			function = "qspi_cs"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-up; | ||||
| 		}; | ||||
|  | ||||
| 		qspi_data { | ||||
| 			pins = "gpio8", "gpio9", "gpio10", "gpio11"; | ||||
| 			function = "qspi_data"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	serial_1_pins: serial1-pinmux { | ||||
| 		pins = "gpio33", "gpio34", "gpio35", "gpio36"; | ||||
| 		function = "blsp1_uart2"; | ||||
| 		drive-strength = <8>; | ||||
| 		bias-pull-up; | ||||
| 	}; | ||||
|  | ||||
| 	i2c_1_pins: i2c-1-state { | ||||
| 		pins = "gpio29", "gpio30"; | ||||
| 		function = "blsp1_i2c0"; | ||||
| 		drive-strength = <8>; | ||||
| 		bias-pull-up; | ||||
| 	}; | ||||
|  | ||||
| 	button_pins: button-state { | ||||
| 		pins = "gpio35"; | ||||
| 		function = "gpio"; | ||||
| 		drive-strength = <8>; | ||||
| 		bias-pull-up; | ||||
| 	}; | ||||
|  | ||||
| 	pwm_pins: pwm-state { | ||||
| 		pins = "gpio46"; | ||||
| 		function = "pwm0"; | ||||
| 		drive-strength = <8>; | ||||
| 	}; | ||||
|  | ||||
| 	sdc_default_state: sdc-default-state { | ||||
| 		clk-pins { | ||||
| 			pins = "gpio13"; | ||||
| 			function = "sdc_clk"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-disable; | ||||
| 		}; | ||||
|  | ||||
| 		cmd-pins { | ||||
| 			pins = "gpio12"; | ||||
| 			function = "sdc_cmd"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-up; | ||||
| 		}; | ||||
|  | ||||
| 		data-pins { | ||||
| 			pins = "gpio8", "gpio9", "gpio10", "gpio11"; | ||||
| 			function = "sdc_data"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-up; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	spi_0_data_clk_pins: spi-0-data-clk-state { | ||||
| 		pins = "gpio14", "gpio15", "gpio16"; | ||||
| 		function = "blsp0_spi"; | ||||
| 		drive-strength = <2>; | ||||
| 		bias-pull-down; | ||||
| 	}; | ||||
|  | ||||
| 	spi_0_cs_pins: spi-0-cs-state { | ||||
| 		pins = "gpio17"; | ||||
| 		function = "blsp0_spi"; | ||||
| 		drive-strength = <2>; | ||||
| 		bias-pull-up; | ||||
| 	}; | ||||
|  | ||||
| 	mdio1_pins: mdio1-state { | ||||
| 		mux_0 { | ||||
| 			pins = "gpio27"; | ||||
| 			function = "mdc1"; | ||||
| 			drive-strength = <2>; | ||||
| 			bias-pull-up; | ||||
| 		}; | ||||
| 		mux_1 { | ||||
| 			pins = "gpio28"; | ||||
| 			function = "mdio1"; | ||||
| 			drive-strength = <2>; | ||||
| 			bias-pull-up; | ||||
| 		}; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &license_manager { | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  | ||||
| &usb3 { | ||||
| 	qcom,select-utmi-as-pipe-clk; | ||||
| 	status = "okay"; | ||||
|  | ||||
| 	dwc3@8a00000 { | ||||
| 		/delete-property/ #phy-cells; | ||||
| 		/delete-property/ phys; | ||||
| 		/delete-property/ phy-names; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &pwm { | ||||
| 	pinctrl-0 = <&pwm_pins>; | ||||
| 	pinctrl-names = "default"; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  | ||||
| &hs_m31phy_0 { | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  | ||||
| &wifi0 { | ||||
| 	qcom,multipd_arch; | ||||
| 	qcom,rproc = <&q6_wcss_pd1>; | ||||
| 	qcom,rproc_rpd = <&q6v5_wcss>; | ||||
| 	qcom,userpd-subsys-name = "q6v5_wcss_userpd1"; | ||||
| 	qcom,bdf-addr = <0x4C200000 0x4C200000 0x4C200000 0x0 0x0 0x0>; | ||||
| 	qcom,caldb-addr = <0x4D900000 0x4D500000 0x0 0x0 0x0 0x0>; | ||||
| #ifdef __IPQ_MEM_PROFILE_512_MB__ | ||||
| 	qcom,tgt-mem-mode = <1>; | ||||
| 	qcom,caldb-size = <0x300000>; | ||||
| #else | ||||
| 	qcom,tgt-mem-mode = <0>; | ||||
| 	qcom,caldb-size = <0x500000>; | ||||
| #endif | ||||
| 	qcom,board_id = <0x12>; | ||||
| #if defined(__CNSS2__) | ||||
| 	mem-region = <&q6_ipq5332_data>; | ||||
| #else | ||||
| 	memory-region = <&q6_ipq5332_data>; | ||||
| #endif | ||||
| 	qcom,wsi = <&wsi>; | ||||
| 	qcom,wsi_index = <0>; | ||||
| 	status = "ok"; | ||||
| }; | ||||
|  | ||||
| &wifi1 { | ||||
| 	qcom,multipd_arch; | ||||
| 	qcom,rproc = <&q6_wcss_pd2>; | ||||
| 	qcom,rproc_rpd = <&q6v5_wcss>; | ||||
| 	qcom,userpd-subsys-name = "q6v5_wcss_userpd2"; | ||||
| 	qcom,bdf-addr = <0x4DE00000 0x4D800000 0x0 0x0 0x0 0x0>; | ||||
| 	qcom,caldb-addr = <0x4F500000 0x4EA00000 0x0 0x0 0x0 0x0>; | ||||
| 	qcom,umac-irq-reset-addr = <0x20000884>; | ||||
| 	qcom,caldb-size = <0x500000>; | ||||
| #ifdef __IPQ_MEM_PROFILE_512_MB__ | ||||
| 	qcom,tgt-mem-mode = <1>; | ||||
| #else | ||||
| 	qcom,tgt-mem-mode = <0>; | ||||
| #endif | ||||
| 	qcom,board_id = <0x060>; | ||||
| #if defined(__CNSS2__) | ||||
| 	mem-region = <&q6_qcn6432_data_1>; | ||||
| #else | ||||
| 	memory-region = <&q6_qcn6432_data_1>; | ||||
| #endif | ||||
| 	qcom,wsi = <&wsi>; | ||||
| 	qcom,wsi_index = <1>; | ||||
| 	status = "ok"; | ||||
| 	interrupts = <GIC_SPI 33 IRQ_TYPE_EDGE_RISING>; | ||||
| 	interrupt-names = "umac_reset"; | ||||
| }; | ||||
|  | ||||
| &wifi2 { | ||||
| 	qcom,multipd_arch; | ||||
| 	qcom,rproc = <&q6_wcss_pd3>; | ||||
| 	qcom,rproc_rpd = <&q6v5_wcss>; | ||||
| 	qcom,userpd-subsys-name = "q6v5_wcss_userpd3"; | ||||
| 	qcom,bdf-addr = <0x4FA00000 0x4EF00000 0x4FA00000 0x0 0x0 0x0>; | ||||
| 	qcom,caldb-addr = <0x51100000 0x50100000 0x51100000 0x0 0x0 0x0>; | ||||
| 	qcom,umac-irq-reset-addr = <0x18000884>; | ||||
| 	qcom,caldb-size = <0x500000>; | ||||
| #ifdef __IPQ_MEM_PROFILE_512_MB__ | ||||
| 	qcom,tgt-mem-mode = <1>; | ||||
| #else | ||||
| 	qcom,tgt-mem-mode = <0>; | ||||
| #endif | ||||
| 	qcom,board_id = <0x070>; | ||||
| #if defined(__CNSS2__) | ||||
| 	mem-region = <&q6_qcn6432_data_2>; | ||||
| #else | ||||
| 	memory-region = <&q6_qcn6432_data_2>; | ||||
| #endif | ||||
| 	qcom,wsi = <&wsi>; | ||||
| 	qcom,wsi_index = <2>; | ||||
| 	status = "ok"; | ||||
| 	interrupts = <GIC_SPI 410 IRQ_TYPE_EDGE_RISING>; | ||||
| 	interrupt-names = "umac_reset"; | ||||
| }; | ||||
| @@ -149,6 +149,22 @@ define Device/zyxel_nwa130be | ||||
| endef | ||||
| TARGET_DEVICES += zyxel_nwa130be | ||||
|  | ||||
|  | ||||
| define Device/zyxel_nwa50be | ||||
|   DEVICE_TITLE := Zyxel NWA50BE | ||||
|   DEVICE_DTS := ipq5332-zyxel-nwa50be | ||||
|   DEVICE_DTS_DIR := ../dts | ||||
|   DEVICE_DTS_CONFIG := config-mi01.3 | ||||
|   IMAGES := sysupgrade.tar nand-factory.bin nand-factory.ubi | ||||
|   BLOCKSIZE := 128k | ||||
|   PAGESIZE := 2048 | ||||
|   IMAGE/sysupgrade.tar := sysupgrade-tar | append-metadata | ||||
|   IMAGE/nand-factory.bin := append-ubi | qsdk-ipq-factory-nand | ||||
|   IMAGE/nand-factory.ubi := append-ubi | ||||
|   DEVICE_PACKAGES := ath12k-wifi-zyxel-nwa130be ath12k-firmware-qcn92xx ath12k-firmware-ipq5332 | ||||
| endef | ||||
| TARGET_DEVICES += zyxel_nwa50be | ||||
|  | ||||
| define Device/cig_wf672 | ||||
|   DEVICE_TITLE := CIG WF672 | ||||
|   DEVICE_DTS := ipq5332-cig-wf672 | ||||
|   | ||||
| @@ -397,7 +397,7 @@ export function info(name) { | ||||
| 			mode: data.mode, | ||||
| 			channel: format_channel(data.wiphy_freq), | ||||
| 			freq: format_frequency(data.wiphy_freq), | ||||
| 			htmode: data.radio.htmode, | ||||
| 			htmode: data?.radio?.htmode, | ||||
| 			center_freq1: format_channel(data.center_freq1) || 'unknown', | ||||
| 			center_freq2: format_channel(data.center_freq2) || 'unknown', | ||||
| 			txpower: data.wiphy_tx_power_level / 100, | ||||
|   | ||||
| @@ -0,0 +1,66 @@ | ||||
| From f13f2e47f4a14443b4244672b3a6c71c21306806 Mon Sep 17 00:00:00 2001 | ||||
| From: YenLin Pan <yenlin.pan@zyxel.com.tw> | ||||
| Date: Wed, 9 Jul 2025 11:47:31 +0800 | ||||
| Subject: [PATCH] thermal: thermal setting | ||||
|  | ||||
| lo0 -100 -hi0 105 -off0 0 | ||||
| lo1 95 -hi1 110 -off1 20 | ||||
| lo2 100 -hi2 115 -off2 60 | ||||
| lo3 105 -hi3 119 -off3 98 | ||||
|  | ||||
| Signed-off-by: YenLin Pan <YenLin.Pan@zyxel.com.tw> | ||||
| --- | ||||
|  drivers/net/wireless/ath/ath12k/thermal.h | 28 +++++++++++------------ | ||||
|  1 file changed, 14 insertions(+), 14 deletions(-) | ||||
|  | ||||
| diff --git a/drivers/net/wireless/ath/ath12k/thermal.h b/drivers/net/wireless/ath/ath12k/thermal.h | ||||
| index 5c91906..db1f251 100644 | ||||
| --- a/drivers/net/wireless/ath/ath12k/thermal.h | ||||
| +++ b/drivers/net/wireless/ath/ath12k/thermal.h | ||||
| @@ -13,29 +13,29 @@ | ||||
|   | ||||
|  /* Below temperatures are in celsius */ | ||||
|  #define ATH12K_THERMAL_LVL0_TEMP_LOW_MARK -100 | ||||
| -#define ATH12K_THERMAL_LVL0_TEMP_HIGH_MARK 100 | ||||
| +#define ATH12K_THERMAL_LVL0_TEMP_HIGH_MARK 105 | ||||
|  #define ATH12K_THERMAL_LVL1_TEMP_LOW_MARK 95 | ||||
| -#define ATH12K_THERMAL_LVL1_TEMP_HIGH_MARK 105 | ||||
| +#define ATH12K_THERMAL_LVL1_TEMP_HIGH_MARK 110 | ||||
|  #define ATH12K_THERMAL_LVL2_TEMP_LOW_MARK 100 | ||||
| -#define ATH12K_THERMAL_LVL2_TEMP_HIGH_MARK 110 | ||||
| +#define ATH12K_THERMAL_LVL2_TEMP_HIGH_MARK 115 | ||||
|  #define ATH12K_THERMAL_LVL3_TEMP_LOW_MARK 105 | ||||
| -#define ATH12K_THERMAL_LVL3_TEMP_HIGH_MARK 120 | ||||
| +#define ATH12K_THERMAL_LVL3_TEMP_HIGH_MARK 119 | ||||
|   | ||||
|  #define ATH12K_THERMAL_LVL0_V2_TEMP_LOW_MARK -100 | ||||
| -#define ATH12K_THERMAL_LVL0_V2_TEMP_HIGH_MARK 95 | ||||
| -#define ATH12K_THERMAL_LVL1_V2_TEMP_LOW_MARK 90 | ||||
| -#define ATH12K_THERMAL_LVL1_V2_TEMP_HIGH_MARK 100 | ||||
| -#define ATH12K_THERMAL_LVL2_V2_TEMP_LOW_MARK 95 | ||||
| -#define ATH12K_THERMAL_LVL2_V2_TEMP_HIGH_MARK 105 | ||||
| -#define ATH12K_THERMAL_LVL3_V2_TEMP_LOW_MARK 100 | ||||
| -#define ATH12K_THERMAL_LVL3_V2_TEMP_HIGH_MARK 110 | ||||
| +#define ATH12K_THERMAL_LVL0_V2_TEMP_HIGH_MARK 105 | ||||
| +#define ATH12K_THERMAL_LVL1_V2_TEMP_LOW_MARK 95 | ||||
| +#define ATH12K_THERMAL_LVL1_V2_TEMP_HIGH_MARK 110 | ||||
| +#define ATH12K_THERMAL_LVL2_V2_TEMP_LOW_MARK 100 | ||||
| +#define ATH12K_THERMAL_LVL2_V2_TEMP_HIGH_MARK 115 | ||||
| +#define ATH12K_THERMAL_LVL3_V2_TEMP_LOW_MARK 105 | ||||
| +#define ATH12K_THERMAL_LVL3_V2_TEMP_HIGH_MARK 119 | ||||
|  #define ATH12K_THERMAL_LVL4_V2_TEMP_LOW_MARK 105 | ||||
|  #define ATH12K_THERMAL_LVL4_V2_TEMP_HIGH_MARK 120 | ||||
|   | ||||
|  #define ATH12K_THERMAL_LVL0_DUTY_CYCLE 0 | ||||
| -#define ATH12K_THERMAL_LVL1_DUTY_CYCLE 50 | ||||
| -#define ATH12K_THERMAL_LVL2_DUTY_CYCLE 90 | ||||
| -#define ATH12K_THERMAL_LVL3_DUTY_CYCLE 100 | ||||
| +#define ATH12K_THERMAL_LVL1_DUTY_CYCLE 20 | ||||
| +#define ATH12K_THERMAL_LVL2_DUTY_CYCLE 60 | ||||
| +#define ATH12K_THERMAL_LVL3_DUTY_CYCLE 98 | ||||
|   | ||||
|  #define ATH12K_THERMAL_LVL0_V2_DUTY_CYCLE ATH12K_THERMAL_LVL0_DUTY_CYCLE | ||||
|  #define ATH12K_THERMAL_LVL1_V2_DUTY_CYCLE ATH12K_THERMAL_LVL0_DUTY_CYCLE | ||||
| --  | ||||
| 2.34.1 | ||||
|  | ||||
| @@ -100,6 +100,7 @@ endif | ||||
| ifdef CONFIG_TARGET_PROFILE | ||||
| TARGET_PROFILE=$(subst ",,$(CONFIG_TARGET_PROFILE)) | ||||
| PATCH_PROFILE_NAME=patches-$(subst DEVICE_,,$(TARGET_PROFILE)) | ||||
| FILES_PROFILE_NAME=files-$(subst DEVICE_,,$(TARGET_PROFILE)) | ||||
| endif | ||||
|  | ||||
| QCASSDK_CONFIG_OPTS+= TOOL_PATH=$(TOOLCHAIN_BIN_PATH) \ | ||||
| @@ -202,6 +203,15 @@ define patch_profile | ||||
| 	$(call PatchDir/Default,$(PKG_BUILD_DIR),./$(PATCH_PROFILE_NAME)) | ||||
| endef | ||||
|  | ||||
| define files_profile | ||||
|  | ||||
| 	if [ -d "./$(FILES_PROFILE_NAME)" ]; then \ | ||||
| 		$(CP) ./$(FILES_PROFILE_NAME)/* ./files/ ; \ | ||||
| 	fi | ||||
| endef | ||||
|  | ||||
| Hooks/Prepare/Post += patch_profile | ||||
| Hooks/Prepare/Post += files_profile | ||||
|  | ||||
| $(eval $(call KernelPackage,qca-ssdk-qca-nohnat)) | ||||
| $(eval $(call KernelPackage,qca-ssdk-qca-hnat)) | ||||
|   | ||||
							
								
								
									
										317
									
								
								feeds/qca-wifi-7/qca-ssdk-qca/files-zyxel_nwa130be/qca-ssdk
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										317
									
								
								feeds/qca-wifi-7/qca-ssdk-qca/files-zyxel_nwa130be/qca-ssdk
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,317 @@ | ||||
| #!/bin/sh /etc/rc.common | ||||
| # Copyright (c) 2018, 2021, The Linux Foundation. All rights reserved. | ||||
| # Copyright (c) 2022-2024, 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. | ||||
| # | ||||
|  | ||||
| START=16 | ||||
|  | ||||
| #!/bin/sh | ||||
| ruletype="ip4 ip6" | ||||
| side="wan lan" | ||||
| qwan="1 3 2 0 5 7 6 4" | ||||
| qlan="0 1 2 3 4 5 6 7" | ||||
|  | ||||
| function create_war_acl_rules(){ | ||||
| 	for lw in $side | ||||
| 	do | ||||
| 		#echo $lw | ||||
| 		if [ "$lw" == "wan" ];then | ||||
| 			listid=254 | ||||
| 			queue=$qwan | ||||
| 			portmap=0x20 | ||||
| 		else | ||||
| 			listid=255 | ||||
| 			queue=$qlan | ||||
| 			portmap=0x1e | ||||
| 		fi | ||||
| 		#echo $queue | ||||
| 		#echo "creating list $listid" | ||||
| 		ssdk_sh acl list create $listid 255 | ||||
| 		ruleid=0 | ||||
| 		for rt in $ruletype | ||||
| 		do | ||||
| 			for qid in $queue | ||||
| 			do | ||||
| 				cmd="ssdk_sh acl rule add $listid $ruleid  1 n 0 0" | ||||
| 				#echo $cmd | ||||
| 				if [ "$rt" == "ip4" ];then | ||||
| 					cmd="$cmd ip4 n n n n n n n n n n n n n n n n n n n n n n n n n n n n n" | ||||
| 					#echo $cmd | ||||
| 				else | ||||
| 					cmd="$cmd ip6 n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n" | ||||
| 					#echo $cmd | ||||
| 				fi | ||||
| 				if [ $ruleid -le 3 ];then | ||||
| 					#non-zero dscp | ||||
| 					cmd="$cmd y 0x0 0xff" | ||||
| 				elif [ $ruleid -le 7 ];then | ||||
| 					#zero dscp | ||||
| 					cmd="$cmd n" | ||||
| 				elif [ $ruleid -le 11 ];then | ||||
| 					#non-zero dscp | ||||
| 					cmd="$cmd y 0x0 0xff" | ||||
| 				else | ||||
| 					#zero dscp | ||||
| 					cmd="$cmd n" | ||||
| 				fi | ||||
| 				p=$((ruleid/2)) | ||||
| 				cmd="$cmd y mask $((ruleid%2)) 0x1 y mask $((p%2)) 0x1 n n n n n n n n n n n n n n n y n n n n n n n y $qid n n 0 0 n n n n n n n n n n n n n n n n n n n n 0" | ||||
| 				#echo $cmd | ||||
| 				$cmd | ||||
| 				ruleid=`expr $ruleid + 1` | ||||
| 			done | ||||
| 		done | ||||
| 		ssdk_sh acl list bind $listid 0 1 $portmap | ||||
| 	done | ||||
| } | ||||
|  | ||||
| function create_war_cosmap(){ | ||||
| 	ssdk_sh cosmap pri2q set 0 0 | ||||
| 	ssdk_sh cosmap pri2q set 1 0 | ||||
| 	ssdk_sh cosmap pri2q set 2 0 | ||||
| 	ssdk_sh cosmap pri2q set 3 0 | ||||
| 	ssdk_sh cosmap pri2q set 4 1 | ||||
| 	ssdk_sh cosmap pri2q set 5 1 | ||||
| 	ssdk_sh cosmap pri2q set 6 1 | ||||
| 	ssdk_sh cosmap pri2q set 7 1 | ||||
| 	ssdk_sh cosmap pri2ehq set 0 0 | ||||
| 	ssdk_sh cosmap pri2ehq set 1 0 | ||||
| 	ssdk_sh cosmap pri2ehq set 2 0 | ||||
| 	ssdk_sh cosmap pri2ehq set 3 0 | ||||
| 	ssdk_sh cosmap pri2ehq set 4 1 | ||||
| 	ssdk_sh cosmap pri2ehq set 5 1 | ||||
| 	ssdk_sh cosmap pri2ehq set 6 1 | ||||
| 	ssdk_sh cosmap pri2ehq set 7 1 | ||||
| } | ||||
|  | ||||
| function create_acl_byp_egstp_rules(){ | ||||
| 	chip_ver=$1 | ||||
| 	cmd="ssdk_sh servcode config set 1 n 0 0xfffefc7f 0xffbdff 0 0 0 0 0 0" | ||||
| 	if [ "$chip_ver" == "0x2000" ] || [ "$chip_ver" = "0x2001" ] || [ "$chip_ver" = "0x2100" ]; then | ||||
| 		cmd="$cmd 0" | ||||
| 	fi | ||||
| 	#echo $cmd | ||||
| 	$cmd | ||||
|  | ||||
| 	ssdk_sh acl list create 56 48 | ||||
| 	#action bypass eg stp check | ||||
| 	action="y n n n n n n n n n n 0 0 n n n n n n n n n n n n n y n n n n n n n n n n n n y n n n n n n n n n n n n n n n n n n" | ||||
| 	if [ "$chip_ver" == "0x2000" ]; then | ||||
| 		action="$action n n 0" | ||||
| 	elif [ "$chip_ver" = "0x2001" ] || [ "$chip_ver" = "0x2100" ]; then | ||||
| 		action="$action n n n 0" | ||||
| 	else | ||||
| 		action="$action 0" | ||||
| 	fi | ||||
|  | ||||
| 	for ruleid in $( seq 0 2 ) | ||||
| 	do | ||||
| 		if [ "$ruleid" == "0" ];then | ||||
| 			cmd="ssdk_sh acl rule add 56 0 1 n 0 0 mac n n n n n y 01-80-c2-00-00-00 ff-ff-ff-ff-ff-ff n n n n n n n n n n n n n n n n n n n n n n n" | ||||
| 		elif [ "$ruleid" == "1" ];then | ||||
| 			cmd="ssdk_sh acl rule add 56 1 1 n 0 0 mac n n n n n n n yes 0x8809 0xffff n n n n n n n n n n n n n n n n n n n n n" | ||||
| 		else | ||||
| 			cmd="ssdk_sh acl rule add 56 2 1 n 0 0 mac n n n n n n n yes 0x888e 0xffff n n n n n n n n n n n n n n n n n n n n n" | ||||
| 		fi | ||||
| 		if [ "$chip_ver" == "0x2000" ] || [ "$chip_ver" = "0x2001" ] || [ "$chip_ver" = "0x2100" ]; then | ||||
| 			cmd="$cmd n $action" | ||||
| 		else | ||||
| 			cmd="$cmd $action" | ||||
| 		fi | ||||
| 		#echo $cmd | ||||
| 		$cmd | ||||
| 	done | ||||
| 	ssdk_sh acl list bind 56 0 2 1 | ||||
| } | ||||
|  | ||||
| function delete_war_acl_rules(){ | ||||
| 	for lw in $side | ||||
| 	do | ||||
| 		#echo $lw | ||||
| 		if [ "$lw" == "wan" ];then | ||||
| 			listid=254 | ||||
| 			queue=$qwan | ||||
| 			portmap=0x20 | ||||
| 		else | ||||
| 			listid=255 | ||||
| 			queue=$qlan | ||||
| 			portmap=0x1e | ||||
| 		fi | ||||
| 		ssdk_sh acl list unbind $listid 0 1 $portmap | ||||
| 		for rt in $ruletype | ||||
| 		do | ||||
| 			for qid in $queue | ||||
| 			do | ||||
| 				cmd="ssdk_sh acl rule del $listid 0 1" | ||||
| 				echo $cmd | ||||
| 				$cmd | ||||
| 			done | ||||
| 		done | ||||
| 		#echo "deleting list $listid" | ||||
| 		ssdk_sh acl list destroy $listid | ||||
| 	done | ||||
| } | ||||
|  | ||||
| function delete_war_cosmap(){ | ||||
| 	ssdk_sh cosmap pri2q set 0 0 | ||||
| 	ssdk_sh cosmap pri2q set 1 0 | ||||
| 	ssdk_sh cosmap pri2q set 2 1 | ||||
| 	ssdk_sh cosmap pri2q set 3 1 | ||||
| 	ssdk_sh cosmap pri2q set 4 2 | ||||
| 	ssdk_sh cosmap pri2q set 5 2 | ||||
| 	ssdk_sh cosmap pri2q set 6 3 | ||||
| 	ssdk_sh cosmap pri2q set 7 3 | ||||
| 	ssdk_sh cosmap pri2ehq set 0 1 | ||||
| 	ssdk_sh cosmap pri2ehq set 1 0 | ||||
| 	ssdk_sh cosmap pri2ehq set 2 2 | ||||
| 	ssdk_sh cosmap pri2ehq set 3 2 | ||||
| 	ssdk_sh cosmap pri2ehq set 4 3 | ||||
| 	ssdk_sh cosmap pri2ehq set 5 3 | ||||
| 	ssdk_sh cosmap pri2ehq set 6 4 | ||||
| 	ssdk_sh cosmap pri2ehq set 7 5 | ||||
| } | ||||
|  | ||||
| function delete_acl_byp_egstp_rules(){ | ||||
| 	chip_ver=$1 | ||||
| 	cmd="ssdk_sh servcode config set 1 n 0 0xfffefcff 0xffbfff 0 0 0 0 0 0" | ||||
| 	if [ "$chip_ver" == "0x2000" ] || [ "$chip_ver" = "0x2001" ] || [ "$chip_ver" = "0x2100" ]; then | ||||
| 		cmd="$cmd 0" | ||||
| 	fi | ||||
| 	#echo $cmd | ||||
| 	$cmd | ||||
| 	ssdk_sh acl list unbind 56 0 2 1 | ||||
| 	ssdk_sh acl rule del 56 0 1 | ||||
| 	ssdk_sh acl rule del 56 1 1 | ||||
| 	ssdk_sh acl rule del 56 2 1 | ||||
| 	ssdk_sh acl list destroy 56 | ||||
| } | ||||
|  | ||||
| function edma_war_config_add(){ | ||||
| 	create_war_cosmap | ||||
| 	ssdk_sh acl status set enable | ||||
| 	create_war_acl_rules | ||||
| } | ||||
|  | ||||
| function edma_war_config_del(){ | ||||
| 	delete_war_acl_rules | ||||
| 	delete_war_cosmap | ||||
| } | ||||
|  | ||||
| function ipq50xx_serdes_monitor () { | ||||
| 	#if qca808x phy exist, need to monitor the serdes to avoid the effect for WIFI | ||||
| 	port_id=2 | ||||
| 	old_linkstatus="DISABLE" | ||||
| 	phy_id_info=`ssdk_sh port phyid get $port_id | grep Org | awk -F '!' '{print $2}'` | ||||
| 	if [ "$phy_id_info" = "[Org ID]:0x004d[Rev ID]:0xd101" ]; then | ||||
| 		ssdk_sh debug phy set 29 0xb 0x300d | ||||
| 		ssdk_sh debug uniphy set 0 0x7ac 0x300d 4 | ||||
|  | ||||
| 		while true | ||||
| 		do | ||||
| 			cur_linkstatus=`ssdk_sh port linkstatus get $port_id | grep Status | awk -F ':' '{print $2}'` | ||||
| 			#when qca808x phy link status is from down to up, serdes tx would be enabled | ||||
| 			if [ "$cur_linkstatus" = "ENABLE" ] && [ "$old_linkstatus" = "DISABLE" ]; then | ||||
| 				ssdk_sh debug phy set 29 0xb 0xb00d | ||||
| 				ssdk_sh debug uniphy set 0 0x7ac 0xb00d 4 | ||||
| 			fi | ||||
| 			#when qca808x phy link status is from up to down, serdes tx would be disabled | ||||
| 			if [ "$cur_linkstatus" = "DISABLE" ] && [ "$old_linkstatus" = "ENABLE" ]; then | ||||
| 				ssdk_sh debug phy set 29 0xb 0x300d | ||||
| 				ssdk_sh debug uniphy set 0 0x7ac 0x300d 4 | ||||
| 			fi | ||||
| 			old_linkstatus=$cur_linkstatus | ||||
| 		done | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| function ipq53xx_phy_amplitude_set () { | ||||
| 	#for qca808x phy sgmii, set half amplitude with src_half_swing register | ||||
| 	port_id=2 | ||||
| 	phy_id_info=`ssdk_sh port phyid get $port_id | grep Org | awk -F '!' '{print $2}'` | ||||
| 	if [ "$phy_id_info" = "[Org ID]:0x004d[Rev ID]:0xd180" ]; then | ||||
| 		ssdk_sh debug phy set 5 0x40010087 0x208a | ||||
| 		ssdk_sh debug phy set 6 0x40010087 0x208a | ||||
| 		#Set the Reg0x67 bits[7:5]=3’b000 and bit4=1’b1 | ||||
| 		ampl_val=$(eval "ssdk_sh debug phy get 5 0x40010067 | grep SSDK | grep -oE '0x[0-9a-fA-F]+' | sed 's/\(0x..\)./\11/'") | ||||
| 		ssdk_sh debug phy set 5 0x40010067 $ampl_val | ||||
| 		ampl_val=$(eval "ssdk_sh debug phy get 6 0x40010067 | grep SSDK | grep -oE '0x[0-9a-fA-F]+' | sed 's/\(0x..\)./\11/'") | ||||
| 		ssdk_sh debug phy set 6 0x40010067 $ampl_val | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| function ipq53xx_uniphy_amplitude_set () { | ||||
| 	#for ipq50xx sgmii, set half amplitude with tx_emp_lvl/margin_index and tx_margin | ||||
| 	ssdk_sh debug uniphy set 0 0x7ac 0xb10d 4 | ||||
| 	ssdk_sh debug uniphy set 0 0x24 0 4 | ||||
| 	ssdk_sh debug uniphy set 1 0x7ac 0xb10d 4 | ||||
| 	ssdk_sh debug uniphy set 1 0x24 0 4 | ||||
| } | ||||
|  | ||||
| ssdk_dependency() { | ||||
| 	counter=0 | ||||
| 	[ -e /lib/modules/$(uname -r)/qca-ssdk.ko ] && [ ! -d /sys/module/qca_ssdk ] && { | ||||
| 		insmod qca-ssdk.ko | ||||
| 	} | ||||
| 	while [ ! -d /sys/ssdk ] && [ "$counter" -le 5 ] | ||||
| 	do | ||||
| 		sleep 1 | ||||
| 		counter=$((counter+1)) | ||||
| 	done | ||||
| } | ||||
|  | ||||
| start() { | ||||
| 	ssdk_dependency | ||||
| 	chip_ver=`ssdk_sh debug reg get 0 4 | grep Data | tr -d 'SSDK Init OK![Data]:'` | ||||
| 	#The following commands should be uncommented to enable EDMA WAR | ||||
| 	if [ "$chip_ver" = "0x1401" ]; then | ||||
| 		#edma_war_config_add | ||||
| 		echo '' | ||||
| 	fi | ||||
| 	#The following commands should be uncommented to add acl egress stp bypass rules | ||||
| 	if [ "$chip_ver" = "0x1500" ] || [ "$chip_ver" = "0x1501" ] || [ "$chip_ver" = "0x2000" ] || [ "$chip_ver" = "0x2001" ] || [ "$chip_ver" = "0x2100" ]; then | ||||
| 		#create_acl_byp_egstp_rules $chip_ver | ||||
| 		echo '' | ||||
| 	fi | ||||
| 	#The following commands should be uncommented to enable WAR for ipq50xx | ||||
| 	chip_type_info=`cat tmp/sysinfo/model` | ||||
| 	result=$(echo $chip_type_info | grep "IPQ5018") | ||||
| 	if [ "$result" != "" ]; then | ||||
| 		#ipq50xx_serdes_monitor & | ||||
| 		#ipq50xx_uniphy_amplitude_set | ||||
| 		#ipq50xx_phy_amplitude_set | ||||
| 		echo '' | ||||
| 	fi | ||||
| 	if [ "$chip_ver" = "0x2001" ]; then | ||||
| 		ipq53xx_uniphy_amplitude_set | ||||
| 		ipq53xx_phy_amplitude_set | ||||
| 		echo '' | ||||
| 	fi | ||||
| 	echo starting | ||||
| } | ||||
|  | ||||
| stop() { | ||||
| 	chip_ver=`ssdk_sh debug reg get 0 4 | grep Data | tr -d 'SSDK Init OK![Data]:'` | ||||
| 	#The following commands should be uncommented to disable EDMA WAR | ||||
| 	if [ "$chip_ver" = "0x1401" ]; then | ||||
| 		#edma_war_config_del | ||||
| 		echo '' | ||||
| 	fi | ||||
| 	#The following commands should be uncommented to delete acl egress stp bypass rules | ||||
| 	if [ "$chip_ver" = "0x1500" ] || [ "$chip_ver" = "0x1501" ] || [ "$chip_ver" = "0x2000" ] || [ "$chip_ver" = "0x2001" ] || [ "$chip_ver" = "0x2100" ]; then | ||||
| 		#delete_acl_byp_egstp_rules $chip_ver | ||||
| 		echo '' | ||||
| 	fi | ||||
| 	echo stoping | ||||
| } | ||||
							
								
								
									
										315
									
								
								feeds/qca-wifi-7/qca-ssdk-qca/files-zyxel_nwa50be/qca-ssdk
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										315
									
								
								feeds/qca-wifi-7/qca-ssdk-qca/files-zyxel_nwa50be/qca-ssdk
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,315 @@ | ||||
| #!/bin/sh /etc/rc.common | ||||
| # Copyright (c) 2018, 2021, The Linux Foundation. All rights reserved. | ||||
| # Copyright (c) 2022-2024, 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. | ||||
| # | ||||
|  | ||||
| START=16 | ||||
|  | ||||
| #!/bin/sh | ||||
| ruletype="ip4 ip6" | ||||
| side="wan lan" | ||||
| qwan="1 3 2 0 5 7 6 4" | ||||
| qlan="0 1 2 3 4 5 6 7" | ||||
|  | ||||
| function create_war_acl_rules(){ | ||||
| 	for lw in $side | ||||
| 	do | ||||
| 		#echo $lw | ||||
| 		if [ "$lw" == "wan" ];then | ||||
| 			listid=254 | ||||
| 			queue=$qwan | ||||
| 			portmap=0x20 | ||||
| 		else | ||||
| 			listid=255 | ||||
| 			queue=$qlan | ||||
| 			portmap=0x1e | ||||
| 		fi | ||||
| 		#echo $queue | ||||
| 		#echo "creating list $listid" | ||||
| 		ssdk_sh acl list create $listid 255 | ||||
| 		ruleid=0 | ||||
| 		for rt in $ruletype | ||||
| 		do | ||||
| 			for qid in $queue | ||||
| 			do | ||||
| 				cmd="ssdk_sh acl rule add $listid $ruleid  1 n 0 0" | ||||
| 				#echo $cmd | ||||
| 				if [ "$rt" == "ip4" ];then | ||||
| 					cmd="$cmd ip4 n n n n n n n n n n n n n n n n n n n n n n n n n n n n n" | ||||
| 					#echo $cmd | ||||
| 				else | ||||
| 					cmd="$cmd ip6 n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n" | ||||
| 					#echo $cmd | ||||
| 				fi | ||||
| 				if [ $ruleid -le 3 ];then | ||||
| 					#non-zero dscp | ||||
| 					cmd="$cmd y 0x0 0xff" | ||||
| 				elif [ $ruleid -le 7 ];then | ||||
| 					#zero dscp | ||||
| 					cmd="$cmd n" | ||||
| 				elif [ $ruleid -le 11 ];then | ||||
| 					#non-zero dscp | ||||
| 					cmd="$cmd y 0x0 0xff" | ||||
| 				else | ||||
| 					#zero dscp | ||||
| 					cmd="$cmd n" | ||||
| 				fi | ||||
| 				p=$((ruleid/2)) | ||||
| 				cmd="$cmd y mask $((ruleid%2)) 0x1 y mask $((p%2)) 0x1 n n n n n n n n n n n n n n n y n n n n n n n y $qid n n 0 0 n n n n n n n n n n n n n n n n n n n n 0" | ||||
| 				#echo $cmd | ||||
| 				$cmd | ||||
| 				ruleid=`expr $ruleid + 1` | ||||
| 			done | ||||
| 		done | ||||
| 		ssdk_sh acl list bind $listid 0 1 $portmap | ||||
| 	done | ||||
| } | ||||
|  | ||||
| function create_war_cosmap(){ | ||||
| 	ssdk_sh cosmap pri2q set 0 0 | ||||
| 	ssdk_sh cosmap pri2q set 1 0 | ||||
| 	ssdk_sh cosmap pri2q set 2 0 | ||||
| 	ssdk_sh cosmap pri2q set 3 0 | ||||
| 	ssdk_sh cosmap pri2q set 4 1 | ||||
| 	ssdk_sh cosmap pri2q set 5 1 | ||||
| 	ssdk_sh cosmap pri2q set 6 1 | ||||
| 	ssdk_sh cosmap pri2q set 7 1 | ||||
| 	ssdk_sh cosmap pri2ehq set 0 0 | ||||
| 	ssdk_sh cosmap pri2ehq set 1 0 | ||||
| 	ssdk_sh cosmap pri2ehq set 2 0 | ||||
| 	ssdk_sh cosmap pri2ehq set 3 0 | ||||
| 	ssdk_sh cosmap pri2ehq set 4 1 | ||||
| 	ssdk_sh cosmap pri2ehq set 5 1 | ||||
| 	ssdk_sh cosmap pri2ehq set 6 1 | ||||
| 	ssdk_sh cosmap pri2ehq set 7 1 | ||||
| } | ||||
|  | ||||
| function create_acl_byp_egstp_rules(){ | ||||
| 	chip_ver=$1 | ||||
| 	cmd="ssdk_sh servcode config set 1 n 0 0xfffefc7f 0xffbdff 0 0 0 0 0 0" | ||||
| 	if [ "$chip_ver" == "0x2000" ] || [ "$chip_ver" = "0x2001" ] || [ "$chip_ver" = "0x2100" ]; then | ||||
| 		cmd="$cmd 0" | ||||
| 	fi | ||||
| 	#echo $cmd | ||||
| 	$cmd | ||||
|  | ||||
| 	ssdk_sh acl list create 56 48 | ||||
| 	#action bypass eg stp check | ||||
| 	action="y n n n n n n n n n n 0 0 n n n n n n n n n n n n n y n n n n n n n n n n n n y n n n n n n n n n n n n n n n n n n" | ||||
| 	if [ "$chip_ver" == "0x2000" ]; then | ||||
| 		action="$action n n 0" | ||||
| 	elif [ "$chip_ver" = "0x2001" ] || [ "$chip_ver" = "0x2100" ]; then | ||||
| 		action="$action n n n 0" | ||||
| 	else | ||||
| 		action="$action 0" | ||||
| 	fi | ||||
|  | ||||
| 	for ruleid in $( seq 0 2 ) | ||||
| 	do | ||||
| 		if [ "$ruleid" == "0" ];then | ||||
| 			cmd="ssdk_sh acl rule add 56 0 1 n 0 0 mac n n n n n y 01-80-c2-00-00-00 ff-ff-ff-ff-ff-ff n n n n n n n n n n n n n n n n n n n n n n n" | ||||
| 		elif [ "$ruleid" == "1" ];then | ||||
| 			cmd="ssdk_sh acl rule add 56 1 1 n 0 0 mac n n n n n n n yes 0x8809 0xffff n n n n n n n n n n n n n n n n n n n n n" | ||||
| 		else | ||||
| 			cmd="ssdk_sh acl rule add 56 2 1 n 0 0 mac n n n n n n n yes 0x888e 0xffff n n n n n n n n n n n n n n n n n n n n n" | ||||
| 		fi | ||||
| 		if [ "$chip_ver" == "0x2000" ] || [ "$chip_ver" = "0x2001" ] || [ "$chip_ver" = "0x2100" ]; then | ||||
| 			cmd="$cmd n $action" | ||||
| 		else | ||||
| 			cmd="$cmd $action" | ||||
| 		fi | ||||
| 		#echo $cmd | ||||
| 		$cmd | ||||
| 	done | ||||
| 	ssdk_sh acl list bind 56 0 2 1 | ||||
| } | ||||
|  | ||||
| function delete_war_acl_rules(){ | ||||
| 	for lw in $side | ||||
| 	do | ||||
| 		#echo $lw | ||||
| 		if [ "$lw" == "wan" ];then | ||||
| 			listid=254 | ||||
| 			queue=$qwan | ||||
| 			portmap=0x20 | ||||
| 		else | ||||
| 			listid=255 | ||||
| 			queue=$qlan | ||||
| 			portmap=0x1e | ||||
| 		fi | ||||
| 		ssdk_sh acl list unbind $listid 0 1 $portmap | ||||
| 		for rt in $ruletype | ||||
| 		do | ||||
| 			for qid in $queue | ||||
| 			do | ||||
| 				cmd="ssdk_sh acl rule del $listid 0 1" | ||||
| 				echo $cmd | ||||
| 				$cmd | ||||
| 			done | ||||
| 		done | ||||
| 		#echo "deleting list $listid" | ||||
| 		ssdk_sh acl list destroy $listid | ||||
| 	done | ||||
| } | ||||
|  | ||||
| function delete_war_cosmap(){ | ||||
| 	ssdk_sh cosmap pri2q set 0 0 | ||||
| 	ssdk_sh cosmap pri2q set 1 0 | ||||
| 	ssdk_sh cosmap pri2q set 2 1 | ||||
| 	ssdk_sh cosmap pri2q set 3 1 | ||||
| 	ssdk_sh cosmap pri2q set 4 2 | ||||
| 	ssdk_sh cosmap pri2q set 5 2 | ||||
| 	ssdk_sh cosmap pri2q set 6 3 | ||||
| 	ssdk_sh cosmap pri2q set 7 3 | ||||
| 	ssdk_sh cosmap pri2ehq set 0 1 | ||||
| 	ssdk_sh cosmap pri2ehq set 1 0 | ||||
| 	ssdk_sh cosmap pri2ehq set 2 2 | ||||
| 	ssdk_sh cosmap pri2ehq set 3 2 | ||||
| 	ssdk_sh cosmap pri2ehq set 4 3 | ||||
| 	ssdk_sh cosmap pri2ehq set 5 3 | ||||
| 	ssdk_sh cosmap pri2ehq set 6 4 | ||||
| 	ssdk_sh cosmap pri2ehq set 7 5 | ||||
| } | ||||
|  | ||||
| function delete_acl_byp_egstp_rules(){ | ||||
| 	chip_ver=$1 | ||||
| 	cmd="ssdk_sh servcode config set 1 n 0 0xfffefcff 0xffbfff 0 0 0 0 0 0" | ||||
| 	if [ "$chip_ver" == "0x2000" ] || [ "$chip_ver" = "0x2001" ] || [ "$chip_ver" = "0x2100" ]; then | ||||
| 		cmd="$cmd 0" | ||||
| 	fi | ||||
| 	#echo $cmd | ||||
| 	$cmd | ||||
| 	ssdk_sh acl list unbind 56 0 2 1 | ||||
| 	ssdk_sh acl rule del 56 0 1 | ||||
| 	ssdk_sh acl rule del 56 1 1 | ||||
| 	ssdk_sh acl rule del 56 2 1 | ||||
| 	ssdk_sh acl list destroy 56 | ||||
| } | ||||
|  | ||||
| function edma_war_config_add(){ | ||||
| 	create_war_cosmap | ||||
| 	ssdk_sh acl status set enable | ||||
| 	create_war_acl_rules | ||||
| } | ||||
|  | ||||
| function edma_war_config_del(){ | ||||
| 	delete_war_acl_rules | ||||
| 	delete_war_cosmap | ||||
| } | ||||
|  | ||||
| function ipq50xx_serdes_monitor () { | ||||
| 	#if qca808x phy exist, need to monitor the serdes to avoid the effect for WIFI | ||||
| 	port_id=2 | ||||
| 	old_linkstatus="DISABLE" | ||||
| 	phy_id_info=`ssdk_sh port phyid get $port_id | grep Org | awk -F '!' '{print $2}'` | ||||
| 	if [ "$phy_id_info" = "[Org ID]:0x004d[Rev ID]:0xd101" ]; then | ||||
| 		ssdk_sh debug phy set 29 0xb 0x300d | ||||
| 		ssdk_sh debug uniphy set 0 0x7ac 0x300d 4 | ||||
|  | ||||
| 		while true | ||||
| 		do | ||||
| 			cur_linkstatus=`ssdk_sh port linkstatus get $port_id | grep Status | awk -F ':' '{print $2}'` | ||||
| 			#when qca808x phy link status is from down to up, serdes tx would be enabled | ||||
| 			if [ "$cur_linkstatus" = "ENABLE" ] && [ "$old_linkstatus" = "DISABLE" ]; then | ||||
| 				ssdk_sh debug phy set 29 0xb 0xb00d | ||||
| 				ssdk_sh debug uniphy set 0 0x7ac 0xb00d 4 | ||||
| 			fi | ||||
| 			#when qca808x phy link status is from up to down, serdes tx would be disabled | ||||
| 			if [ "$cur_linkstatus" = "DISABLE" ] && [ "$old_linkstatus" = "ENABLE" ]; then | ||||
| 				ssdk_sh debug phy set 29 0xb 0x300d | ||||
| 				ssdk_sh debug uniphy set 0 0x7ac 0x300d 4 | ||||
| 			fi | ||||
| 			old_linkstatus=$cur_linkstatus | ||||
| 		done | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| function ipq53xx_phy_amplitude_set () { | ||||
| 	#PHY (8081->5321): Full amplitude (bit[7:5]=000), half swing (bit[4]=1) | ||||
| 	#for qca808x phy sgmii, set half amplitude with src_half_swing register | ||||
| 	port_id=2 | ||||
| 	phy_addr=0x1d | ||||
| 	phy_id_info=`ssdk_sh port phyid get $port_id | grep Org | awk -F '!' '{print $2}'` | ||||
| 	if [ "$phy_id_info" = "[Org ID]:0x004d[Rev ID]:0xd101" ]; then | ||||
| 		ssdk_sh debug phy set $phy_addr 0x40010087 0x208a | ||||
| 		#Set the Reg0x67 bits[7:5]=3’b000 and bit4=1’b1 | ||||
| 		ampl_val=$(ssdk_sh debug phy get $phy_addr 0x40010067 | grep SSDK | grep -oE '0x[0-9a-fA-F]+' | sed 's/\(0x..\)./\11/') | ||||
| 		ssdk_sh debug phy set $phy_addr 0x40010067 $ampl_val | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| function ipq53xx_uniphy_amplitude_set () { | ||||
|         #UniPhy (5321->8081): Custom amplitude (bit[8:4]=21) = 0xb15d | ||||
| 	#for ipq53xx sgmii, set half amplitude with tx_emp_lvl/margin_index and tx_margin | ||||
| 	ssdk_sh debug uniphy set 1 0x7ac 0xb15d 4 | ||||
| 	ssdk_sh debug uniphy set 1 0x24 0 4 | ||||
| } | ||||
|  | ||||
| ssdk_dependency() { | ||||
| 	counter=0 | ||||
| 	[ -e /lib/modules/$(uname -r)/qca-ssdk.ko ] && [ ! -d /sys/module/qca_ssdk ] && { | ||||
| 		insmod qca-ssdk.ko | ||||
| 	} | ||||
| 	while [ ! -d /sys/ssdk ] && [ "$counter" -le 5 ] | ||||
| 	do | ||||
| 		sleep 1 | ||||
| 		counter=$((counter+1)) | ||||
| 	done | ||||
| } | ||||
|  | ||||
| start() { | ||||
| 	ssdk_dependency | ||||
| 	chip_ver=`ssdk_sh debug reg get 0 4 | grep Data | tr -d 'SSDK Init OK![Data]:'` | ||||
| 	#The following commands should be uncommented to enable EDMA WAR | ||||
| 	if [ "$chip_ver" = "0x1401" ]; then | ||||
| 		#edma_war_config_add | ||||
| 		echo '' | ||||
| 	fi | ||||
| 	#The following commands should be uncommented to add acl egress stp bypass rules | ||||
| 	if [ "$chip_ver" = "0x1500" ] || [ "$chip_ver" = "0x1501" ] || [ "$chip_ver" = "0x2000" ] || [ "$chip_ver" = "0x2001" ] || [ "$chip_ver" = "0x2100" ]; then | ||||
| 		#create_acl_byp_egstp_rules $chip_ver | ||||
| 		echo '' | ||||
| 	fi | ||||
| 	#The following commands should be uncommented to enable WAR for ipq50xx | ||||
| 	chip_type_info=`cat tmp/sysinfo/model` | ||||
| 	result=$(echo $chip_type_info | grep "IPQ5018") | ||||
| 	if [ "$result" != "" ]; then | ||||
| 		#ipq50xx_serdes_monitor & | ||||
| 		#ipq50xx_uniphy_amplitude_set | ||||
| 		#ipq50xx_phy_amplitude_set | ||||
| 		echo '' | ||||
| 	fi | ||||
| 	if [ "$chip_ver" = "0x2001" ]; then | ||||
| 		ipq53xx_uniphy_amplitude_set | ||||
| 		ipq53xx_phy_amplitude_set | ||||
| 		echo '' | ||||
| 	fi | ||||
| 	echo starting | ||||
| } | ||||
|  | ||||
| stop() { | ||||
| 	chip_ver=`ssdk_sh debug reg get 0 4 | grep Data | tr -d 'SSDK Init OK![Data]:'` | ||||
| 	#The following commands should be uncommented to disable EDMA WAR | ||||
| 	if [ "$chip_ver" = "0x1401" ]; then | ||||
| 		#edma_war_config_del | ||||
| 		echo '' | ||||
| 	fi | ||||
| 	#The following commands should be uncommented to delete acl egress stp bypass rules | ||||
| 	if [ "$chip_ver" = "0x1500" ] || [ "$chip_ver" = "0x1501" ] || [ "$chip_ver" = "0x2000" ] || [ "$chip_ver" = "0x2001" ] || [ "$chip_ver" = "0x2100" ]; then | ||||
| 		#delete_acl_byp_egstp_rules $chip_ver | ||||
| 		echo '' | ||||
| 	fi | ||||
| 	echo stoping | ||||
| } | ||||
| @@ -0,0 +1,47 @@ | ||||
| From 7fa9e9b683f1c573c58a14755347988919bc7d06 Mon Sep 17 00:00:00 2001 | ||||
| From: YenLin Pan <yenlin.pan@zyxel.com.tw> | ||||
| Date: Wed, 14 May 2025 13:47:06 +0800 | ||||
| Subject: [PATCH] pinctrl: make the switch LED works | ||||
|  | ||||
| Enable switch LED pin definition for LED0/LED1/LED2 control | ||||
|  | ||||
| Signed-off-by: YenLin Pan <YenLin.Pan@zyxel.com.tw> | ||||
| --- | ||||
|  src/init/ssdk_mht_pinctrl.c | 10 ++++++++-- | ||||
|  1 file changed, 8 insertions(+), 2 deletions(-) | ||||
|  | ||||
| diff --git a/src/init/ssdk_mht_pinctrl.c b/src/init/ssdk_mht_pinctrl.c | ||||
| index 2debe59..1ae0002 100755 | ||||
| --- a/src/init/ssdk_mht_pinctrl.c | ||||
| +++ b/src/init/ssdk_mht_pinctrl.c | ||||
| @@ -33,11 +33,17 @@ static struct mht_pinctrl_setting mht_pin_settings[] = { | ||||
|      /*PINs default MUX Setting*/ | ||||
|      MHT_PIN_SETTING_MUX(0,  MHT_PIN_FUNC_INTN_WOL), | ||||
|      MHT_PIN_SETTING_MUX(1,  MHT_PIN_FUNC_INTN), | ||||
| -#if 0 | ||||
| +#if 1 | ||||
|      MHT_PIN_SETTING_MUX(2,  MHT_PIN_FUNC_P0_LED_0), | ||||
|      MHT_PIN_SETTING_MUX(3,  MHT_PIN_FUNC_P1_LED_0), | ||||
|      MHT_PIN_SETTING_MUX(4,  MHT_PIN_FUNC_P2_LED_0), | ||||
|      MHT_PIN_SETTING_MUX(5,  MHT_PIN_FUNC_P3_LED_0), | ||||
| +    MHT_PIN_SETTING_MUX(6,  MHT_PIN_FUNC_P0_LED_2), | ||||
| +    MHT_PIN_SETTING_MUX(7,  MHT_PIN_FUNC_P1_LED_2), | ||||
| +    MHT_PIN_SETTING_MUX(8,  MHT_PIN_FUNC_P2_LED_2), | ||||
| +    MHT_PIN_SETTING_MUX(9,  MHT_PIN_FUNC_P3_LED_2), | ||||
| +#endif | ||||
| +#if 0 | ||||
|      MHT_PIN_SETTING_MUX(6,  MHT_PIN_FUNC_PPS_IN), | ||||
|      MHT_PIN_SETTING_MUX(7,  MHT_PIN_FUNC_TOD_IN), | ||||
|      MHT_PIN_SETTING_MUX(8,  MHT_PIN_FUNC_RTC_REFCLK_IN), | ||||
| @@ -49,7 +55,7 @@ static struct mht_pinctrl_setting mht_pin_settings[] = { | ||||
|      MHT_PIN_SETTING_MUX(13, MHT_PIN_FUNC_P0_TOD_OUT), | ||||
|      MHT_PIN_SETTING_MUX(14, MHT_PIN_FUNC_P0_CLK125_TDI), | ||||
|      MHT_PIN_SETTING_MUX(15, MHT_PIN_FUNC_P0_SYNC_CLKO_PTP), | ||||
| -#if 0 | ||||
| +#if 1 | ||||
|      MHT_PIN_SETTING_MUX(16, MHT_PIN_FUNC_P0_LED_1), | ||||
|      MHT_PIN_SETTING_MUX(17, MHT_PIN_FUNC_P1_LED_1), | ||||
|      MHT_PIN_SETTING_MUX(18, MHT_PIN_FUNC_P2_LED_1), | ||||
| --  | ||||
| 2.34.1 | ||||
|  | ||||
| @@ -5,12 +5,10 @@ START=09 | ||||
| copy_certificates() { | ||||
| 	[ -f /certificates/key.pem ] || return | ||||
|  | ||||
| 	cp /certificates/*.pem /etc/ucentral/ | ||||
| 	chown root.network /etc/ucentral/*.pem | ||||
| 	chmod 0440 root.network /etc/ucentral/*.pem | ||||
| 	cp /certificates/cert.pem /certificates/key.pem /certificates/operational.* /etc/ucentral/ | ||||
| 	chown root.network /etc/ucentral/*.pem /etc/ucentral/*.ca | ||||
| 	chmod 0440 root.network /etc/ucentral/*.pem /etc/ucentral/*.ca | ||||
| 	[ -f /certificates/gateway.json ] && cp /certificates/gateway.json /etc/ucentral/gateway.flash | ||||
| 	[ -f /certificates/dev-id ] && cp /certificates/dev-id /etc/ucentral/ | ||||
| 	[ -f /etc/ucentral/dev-id ] && chmod 0400 /etc/ucentral/dev-id | ||||
| 	[ -f /certificates/restrictions.json ] && cp /certificates/restrictions.json /etc/ucentral/ | ||||
| 	[ -f /certificates/sign_pubkey.pem ] && cp /certificates/sign_pubkey.pem /etc/ucentral/ | ||||
| 	country=`cat /certificates/ucentral.defaults | jsonfilter -e '@.country'` | ||||
|   | ||||
| @@ -2,5 +2,5 @@ | ||||
|  | ||||
| uci add system certificates | ||||
| uci set system.@certificates[-1].key=/etc/ucentral/key.pem | ||||
| uci set system.@certificates[-1].cert=/etc/ucentral/cert.pem | ||||
| uci set system.@certificates[-1].ca=/etc/ucentral/cas.pem | ||||
| uci set system.@certificates[-1].cert=/etc/ucentral/operational.pem | ||||
| uci set system.@certificates[-1].ca=/etc/ucentral/operational.ca | ||||
|   | ||||
| @@ -1,25 +1,22 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| check_certificates() { | ||||
| 	[ -f /certificates/cas.pem -a -f /certificates/cert.pem -a -f /certificates/key.pem ] && exit 0 | ||||
| 	[ -f /certificates/cert.pem -a -f /certificates/key.pem ] && exit 0 | ||||
| } | ||||
|  | ||||
| check_certificates | ||||
|  | ||||
| bootconfig_lookup() { | ||||
| 	case "$(fw_printenv -n cert_part)" in | ||||
| 	0)	echo "0:BOOTCONFIG" | ||||
| 		;; | ||||
| 	1)	echo "0:BOOTCONFIG1" | ||||
| 		;; | ||||
| 	esac | ||||
| } | ||||
|  | ||||
| . /lib/functions.sh | ||||
| mkdir -p /certificates /etc/ucentral/ | ||||
| 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 | ||||
| 	fi | ||||
| fi | ||||
|  | ||||
| case "$(board_name)" in | ||||
| cig,wf660a) | ||||
| 	mmc_dev=$(echo $(find_mmc_part "0:ETHPHYFW") | sed 's/^.\{5\}//') | ||||
| @@ -31,8 +28,28 @@ cig,wf672) | ||||
| 	;; | ||||
| sonicfi,rap7110c-341x) | ||||
| 	mmc_dev=$(echo $(find_mmc_part "certificates") | sed 's/^.\{5\}//') | ||||
| 	[ -n "$mmc_dev" ] && mount -t squashfs /dev/$mmc_dev /certificates | ||||
| 	[ -n "$mmc_dev" ] && mount -t squashfs /dev/$mmc_dev /mnt | ||||
| 	bootconfig=$(bootconfig_lookup) | ||||
| 	if [ -n "$bootconfig" ]; then | ||||
| 		mmc_dev=$(echo $(find_mmc_part "$bootconfig") | sed 's/^.\{5\}//') | ||||
| 		[ -n "$mmc_dev" ] && tar xf /dev/$mmc_dev -C /certificates | ||||
| 	else | ||||
| 		cp /mnt/* /certificates/ | ||||
| 		umount /mnt | ||||
| 	fi | ||||
| 	;; | ||||
| *) | ||||
| 	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 | ||||
| 		fi | ||||
| 	fi | ||||
| esac | ||||
|  | ||||
| check_certificates | ||||
| @@ -88,6 +105,8 @@ cig,wf189h|\ | ||||
| cig,wf186h|\ | ||||
| cig,wf196|\ | ||||
| cig,wf188n|\ | ||||
| emplus,wap385c|\ | ||||
| emplus,wap386v2|\ | ||||
| yuncore,ax840|\ | ||||
| yuncore,fap655) | ||||
| 	PART_NAME=rootfs_1 | ||||
|   | ||||
							
								
								
									
										25
									
								
								feeds/tip/certificates/files/usr/bin/store_certs
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										25
									
								
								feeds/tip/certificates/files/usr/bin/store_certs
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| bootconfig_lookup() { | ||||
| 	bootconfig="$(fw_printenv -n cert_part)" | ||||
| 	case "$(fw_printenv -n cert_part)" in | ||||
| 	0)	echo "0:BOOTCONFIG1" | ||||
| 		bootconfig=1 | ||||
| 		;; | ||||
| 	*)	echo "0:BOOTCONFIG" | ||||
| 		bootconfig=0 | ||||
| 		;; | ||||
| 	esac | ||||
| 	fw_setenv cert_part $bootconfig | ||||
| } | ||||
|  | ||||
| . /lib/functions.sh | ||||
| case "$(board_name)" in | ||||
| sonicfi,rap7110c-341x) | ||||
| 	cd /certificates | ||||
| 	tar cf /tmp/certs.tar | ||||
| 	bootconfig=$(bootconfig_lookup) | ||||
| 	mmc_dev=$(echo $(find_mmc_part $bootconfig) | sed 's/^.\{5\}//') | ||||
| 	dd if=/tmp/certs.tar of=/dev/$bootconfig | ||||
| 	;; | ||||
| esac | ||||
| @@ -12,6 +12,7 @@ define Package/cloud_discovery | ||||
|   SECTION:=ucentral | ||||
|   CATEGORY:=uCentral | ||||
|   TITLE:=TIP cloud_discovery | ||||
|   DEPENDS:=+certificates | ||||
| endef | ||||
|  | ||||
| Build/Compile= | ||||
|   | ||||
| @@ -22,13 +22,6 @@ start_service() { | ||||
| 	[ "$valid" == "true" ] ||  | ||||
| 		/usr/share/ucentral/ucentral.uc /etc/ucentral/ucentral.cfg.0000000001 > /dev/null | ||||
|  | ||||
| 	[ "$(fw_printenv -n pki2)" -eq 1 ] || { | ||||
| 		/etc/init.d/cloud_discover disable | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	/etc/init.d/firstcontact disable | ||||
|  | ||||
| 	procd_open_instance | ||||
| 	procd_set_param command "$PROG" | ||||
| 	procd_set_param respawn | ||||
|   | ||||
| @@ -80,7 +80,7 @@ function gateway_write(data) { | ||||
| 	gateway ??= {}; | ||||
| 	let new = {}; | ||||
| 	let changed = false; | ||||
| 	for (let key in [ 'server', 'port', 'valid' ]) { | ||||
| 	for (let key in [ 'server', 'port', 'valid', 'hostname_validate' ]) { | ||||
| 		if (exists(data, key)) | ||||
| 			new[key] = data[key]; | ||||
| 		else if (exists(gateway, key)) | ||||
| @@ -144,7 +144,7 @@ function set_state(set) { | ||||
| function discover_dhcp() { | ||||
| 	let dhcp = readjsonfile('/tmp/cloud.json'); | ||||
| 	if (dhcp?.dhcp_server && dhcp?.dhcp_port) { | ||||
| 		if (gateway_write({ server: dhcp.dhcp_server, port:dhcp.dhcp_port, valid: false })) { | ||||
| 		if (gateway_write({ server: dhcp.dhcp_server, port:dhcp.dhcp_port, valid: false, hostname_validate: dhcp.no_validation ? 0 : 1 })) { | ||||
| 			ulog(LOG_INFO, `Discovered cloud via DHCP ${dhcp.dhcp_server}:${dhcp.dhcp_port}\n`); | ||||
| 			client_start(); | ||||
| 			set_state(VALIDATING); | ||||
| @@ -160,27 +160,30 @@ function redirector_lookup() { | ||||
| 	let serial = uci.get('system', '@system[-1]', 'mac'); | ||||
|  | ||||
| 	fs.unlink(path); | ||||
| 	system(`curl -k --cert /etc/ucentral/cert.pem --key /etc/ucentral/key.pem --cacert /etc/ucentral/cas.pem https://openlan.keys.tip.build/v1/devices/${serial} --output /tmp/ucentral.redirector`); | ||||
| 	system(`curl -k --cert /etc/ucentral/operational.pem --key /etc/ucentral/key.pem --cacert /etc/ucentral/operational.ca https://openlan.keys.tip.build/v1/devices/${serial} --output /tmp/ucentral.redirector`); | ||||
| 	if (!fs.stat(path)) | ||||
| 		return; | ||||
| 	let redir = readjsonfile(path); | ||||
| 	if (redir?.controller_endpoint) { | ||||
| 		let controller_endpoint = split(redir.controller_endpoint, ':'); | ||||
| 		if (gateway_write({ server: controller_endpoint[0], port: controller_endpoint[1] || 15002, valid: false })) { | ||||
| 			ulog(LOG_INFO, `Discovered cloud via lookup service ${redir.server}:${redir.port}\n`); | ||||
| 		if (gateway_write({ server: controller_endpoint[0], port: controller_endpoint[1] || 15002, valid: false, hostname_validate: 1 })) { | ||||
| 			ulog(LOG_INFO, `Discovered cloud via lookup service ${controller_endpoint[0]}:${controller_endpoint[1] || 15002}\n`); | ||||
|                         client_start(); | ||||
|                 	set_state(VALIDATING); | ||||
| 		} | ||||
| 	} else { | ||||
| 		ulog(LOG_INFO, 'Failed to discover cloud endpoint\n'); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| function discover_flash() { | ||||
| 	if (!fs.stat('/etc/ucentral/gateway.flash')) | ||||
| 		return false; | ||||
| 		return 1; | ||||
| 	ulog(LOG_INFO, 'Using pre-populated cloud information\n'); | ||||
| 	fs.writefile('/etc/ucentral/gateway.json', fs.readfile('/etc/ucentral/gateway.flash')); | ||||
| 	client_start(); | ||||
| 	set_state(VALIDATING); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| function time_is_valid() { | ||||
| @@ -210,7 +213,10 @@ function interval_handler() { | ||||
| 		if (discover_dhcp()) | ||||
| 			return; | ||||
|  | ||||
| 		if (discover_flash()) | ||||
| 		if (system('/usr/bin/est_client enroll')) | ||||
| 			return; | ||||
|  | ||||
| 		if (!discover_flash()) | ||||
| 			return; | ||||
|  | ||||
| 		redirector_lookup(); | ||||
| @@ -287,6 +293,25 @@ let ubus_methods = { | ||||
|  | ||||
| 		} | ||||
| 	}, | ||||
| 	status: { | ||||
| 		call: function(req) { | ||||
| 			const names = [ 'discover', 'validate', 'online', 'offline', 'orphan' ]; | ||||
| 			let ret = { state: names[state] }; | ||||
| 			switch(state){ | ||||
| 			case OFFLINE: | ||||
| 				ret.since = time() - offline_time; | ||||
| 				break; | ||||
| 			case ORPHAN: | ||||
| 				ret.since = time() - orphan_time; | ||||
| 				break; | ||||
| 			case VALIDATING: | ||||
| 				ret.since = time() - validate_time;; | ||||
| 				break; | ||||
| 			} | ||||
| 			return ret; | ||||
| 		}, | ||||
| 		args: {}, | ||||
| 	}, | ||||
| }; | ||||
|  | ||||
| if (gateway_available()) { | ||||
|   | ||||
							
								
								
									
										172
									
								
								feeds/tip/cloud_discovery/files/usr/bin/est_client
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										172
									
								
								feeds/tip/cloud_discovery/files/usr/bin/est_client
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,172 @@ | ||||
| #!/usr/bin/ucode | ||||
|  | ||||
| 'use strict'; | ||||
|  | ||||
| import { ulog_open, ulog, ULOG_SYSLOG, ULOG_STDIO, LOG_DAEMON, LOG_INFO } from 'log'; | ||||
| import * as fs from 'fs'; | ||||
|  | ||||
|  | ||||
| ulog_open(ULOG_SYSLOG | ULOG_STDIO, LOG_DAEMON, "est_client"); | ||||
|  | ||||
| function generate_csr(cert) { | ||||
| 	if (!fs.stat('/tmp/csr.nohdr.p10')) { | ||||
| 		let pipe = fs.popen(`openssl x509 -in ${cert} -noout -subject`); | ||||
| 		let subject = pipe.read("all"); | ||||
| 		pipe.close(); | ||||
| 		subject = rtrim(subject); | ||||
| 		subject = replace(subject, 'subject=', '/'); | ||||
| 		subject = replace(subject, ' = ', '='); | ||||
| 		subject = replace(subject, ', ', '/'); | ||||
|  | ||||
| 		let ret = system(`openssl req -subj "${subject}" -new -key /etc/ucentral/key.pem -out /tmp/csr.p10`); | ||||
| 		if (ret) { | ||||
| 			ulog(LOG_INFO, 'Failed to generate CSR\n'); | ||||
| 			return 1; | ||||
| 		} | ||||
|  | ||||
| 		let input = fs.open('/tmp/csr.p10', 'r'); | ||||
| 		let output = fs.open('/tmp/csr.nohdr.p10', 'w'); | ||||
| 		let line; | ||||
| 		while (line = input.read('line')) { | ||||
| 		        if (substr(line, 0, 4) == '----') | ||||
| 		                continue; | ||||
| 			output.write(line); | ||||
| 		} | ||||
| 		input.close(); | ||||
| 		output.close(); | ||||
| 		ulog(LOG_INFO, 'Generated CSR\n'); | ||||
| 	} | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| function store_operational_cert(path, target) { | ||||
| 	system('mount_certs'); | ||||
| 	system(`cp ${path} /certificates/${target}`); | ||||
| 	system('store_certs'); | ||||
|  | ||||
| 	ulog(LOG_INFO, `Persistently stored ${target}\n`); | ||||
| } | ||||
|  | ||||
| function p7_too_pem(src, dst) { | ||||
| 	let input = fs.readfile(src); | ||||
| 	let output = fs.open('/tmp/convert.p7', 'w'); | ||||
| 	output.write('-----BEGIN PKCS #7 SIGNED DATA-----\n'); | ||||
| 	output.write(`${input}\n-----END PKCS #7 SIGNED DATA-----`); | ||||
| 	output.close(); | ||||
|  | ||||
| 	let ret = system(`openssl pkcs7 -outform PEM -print_certs -in /tmp/convert.p7 -out ${dst}`); | ||||
| 	if (ret) { | ||||
| 		ulog(LOG_INFO, 'Failed to convert P7 to PEM\n'); | ||||
| 		return 1; | ||||
| 	} | ||||
| 	 | ||||
| 	ulog(LOG_INFO, 'Converted P7 to PEM\n'); | ||||
| 	 | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| function call_est_server(cert, target) { | ||||
| 	if (generate_csr(cert)) | ||||
| 		return 1; | ||||
|  | ||||
| 	let ret = system('curl -X POST https://qaest.certificates.open-lan.org:8001/.well-known/est/simpleenroll -d @/tmp/csr.nohdr.p10 -H "Content-Type: application/pkcs10" --cert /etc/ucentral/cert.pem --key /etc/ucentral/key.pem --cacert /etc/ucentral/insta.pem -o /tmp/operational.nohdr.p7'); | ||||
| 	if (ret) { | ||||
| 		ulog(LOG_INFO, 'Failed to request operational certificate\n'); | ||||
| 		return 1; | ||||
| 	} | ||||
| 	ulog(LOG_INFO, 'EST succeeded\n'); | ||||
|  | ||||
| 	return p7_too_pem('/tmp/operational.nohdr.p7', target); | ||||
| } | ||||
|  | ||||
|  | ||||
| function simpleenroll() { | ||||
| 	if (fs.stat('/etc/ucentral/operational.pem')) { | ||||
| 		ulog(LOG_INFO, 'Operational certificate is present\n'); | ||||
| 		return 0; | ||||
| 	} | ||||
|  | ||||
| 	if (call_est_server('/etc/ucentral/cert.pem', '/etc/ucentral/operational.pem')) | ||||
| 		return 1;  | ||||
| 	 | ||||
| 	ulog(LOG_INFO, 'Operational cert acquired\n'); | ||||
| 	store_operational_cert('/etc/ucentral/operational.pem', 'operational.pem'); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| function simplereenroll() { | ||||
| 	if (!fs.stat('/etc/ucentral/operational.pem')) { | ||||
| 		ulog(LOG_INFO, 'Operational certificate was not found\n'); | ||||
| 		return 0; | ||||
| 	} | ||||
|  | ||||
| 	if (call_est_server('/etc/ucentral/operational.pem', '/tmp/operational.pem')) | ||||
| 		return 1; | ||||
| 	 | ||||
| 	ulog(LOG_INFO, 'Operational cert updated\n'); | ||||
| 	store_operational_cert('/tmp/operational.pem', 'operational.pem'); | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| function load_operational_ca() { | ||||
| 	if (fs.stat('/etc/ucentral/operational.ca')) { | ||||
| 		ulog(LOG_INFO, 'Operational CA is present\n'); | ||||
| 		return 0; | ||||
| 	} | ||||
| 	let ret = system('curl -X GET https://qaest.certificates.open-lan.org:8001/.well-known/est/cacerts --cert /etc/ucentral/cert.pem --key /etc/ucentral/key.pem --cacert /etc/ucentral/insta.pem -o /tmp/operational.ca.nohdr.p7'); | ||||
| 	if (!ret) | ||||
| 		ret = p7_too_pem('/tmp/operational.ca.nohdr.p7', '/etc/ucentral/operational.ca'); | ||||
| 	if (ret) { | ||||
| 		ulog(LOG_INFO, 'Failed to load CA\n'); | ||||
| 		return 1; | ||||
| 	} | ||||
| 	system('cat /etc/ucentral/openlan.pem >> /etc/ucentral/operational.ca'); | ||||
| 	ulog(LOG_INFO, 'Acquired CA\n'); | ||||
| 	store_operational_cert('/etc/ucentral/operational.ca', 'operational.ca'); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| function fwtool() { | ||||
| 	let pipe = fs.popen(`openssl x509 -in /etc/ucentral/cert.pem -noout -issuer`); | ||||
| 	let issuer = pipe.read("all"); | ||||
| 	pipe.close(); | ||||
|  | ||||
| 	if (!(match(issuer, /OpenLAN/) && match(issuer, /Birth CA/))) | ||||
| 		return 0; | ||||
|  | ||||
| 	ulog(LOG_INFO, 'The issuer is insta\n'); | ||||
|  | ||||
| 	let metadata = fs.readfile('/tmp/sysupgrade.meta'); | ||||
| 	if (metadata) | ||||
| 		metadata = json(metadata); | ||||
| 	if (!metadata) | ||||
| 		return 0; | ||||
|  | ||||
| 	if (!metadata.est_supported) { | ||||
| 		ulog(LOG_INFO, 'The image does not support EST\n'); | ||||
| 		return 1; | ||||
| 	} | ||||
| 	ulog(LOG_INFO, 'The image supports EST\n'); | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| switch(ARGV[0]) { | ||||
| case 'enroll': | ||||
| 	if (simpleenroll()) | ||||
| 		exit(1); | ||||
|  | ||||
| 	if (load_operational_ca()) | ||||
| 		exit(1); | ||||
|  | ||||
| 	exit(0); | ||||
|  | ||||
| case 'reenroll': | ||||
| 	if (simplereenroll()) | ||||
| 		exit(1); | ||||
| 	exit(0); | ||||
|  | ||||
| case 'fwtool': | ||||
| 	exit(fwtool()); | ||||
| } | ||||
| @@ -5,6 +5,7 @@ import * as fs from 'fs'; | ||||
|  | ||||
| let cmd = ARGV[0]; | ||||
| let ifname = getenv("interface"); | ||||
| let opt224 = getenv("opt138"); | ||||
| let opt224 = getenv("opt224"); | ||||
|  | ||||
| if (cmd != 'bound' && cmd != 'renew') | ||||
| @@ -21,6 +22,13 @@ if (file.server && file.port && file.valid) | ||||
| let cloud = { | ||||
| 	lease: true, | ||||
| }; | ||||
| if (opt138) { | ||||
| 	let dhcp = hexdec(opt138); | ||||
| 	dhcp = split(dhcp, ':'); | ||||
| 	cloud.dhcp_server = dhcp[0]; | ||||
| 	cloud.dhcp_port = dhcp[1] ?? 15002; | ||||
| 	cloud.no_validation = true; | ||||
| } | ||||
| if (opt224) { | ||||
| 	let dhcp = hexdec(opt224); | ||||
| 	dhcp = split(dhcp, ':'); | ||||
| @@ -29,7 +37,7 @@ if (opt224) { | ||||
| } | ||||
| fs.writefile('/tmp/cloud.json', cloud); | ||||
|  | ||||
| if (opt224 && cmd == 'renew') { | ||||
| if ((opt138 || opt224) && cmd == 'renew') { | ||||
| 	let ubus = libubus.connect(); | ||||
| 	ubus.call('cloud', 'renew'); | ||||
| } | ||||
|   | ||||
| @@ -1,25 +0,0 @@ | ||||
| include $(TOPDIR)/rules.mk | ||||
|  | ||||
| PKG_NAME:=firstcontact | ||||
| PKG_RELEASE:=1 | ||||
|  | ||||
| PKG_LICENSE:=BSD-3-Clause | ||||
| PKG_MAINTAINER:=John Crispin <john@phrozen.org> | ||||
|  | ||||
| include $(INCLUDE_DIR)/package.mk | ||||
| include $(INCLUDE_DIR)/cmake.mk | ||||
|  | ||||
| define Package/firstcontact | ||||
|   SECTION:=ucentral | ||||
|   CATEGORY:=uCentral | ||||
|   TITLE:=TIP DigiCert firstcontact | ||||
|   DEPENDS:=+libubox +libcurl +libopenssl +certificates | ||||
| endef | ||||
|  | ||||
| define Package/firstcontact/install | ||||
| 	$(INSTALL_DIR) $(1)/usr/sbin | ||||
| 	$(INSTALL_BIN) $(PKG_BUILD_DIR)/digicert $(1)/usr/sbin/ | ||||
| 	$(CP) ./files/* $(1) | ||||
| endef | ||||
|  | ||||
| $(eval $(call BuildPackage,firstcontact)) | ||||
| @@ -1,12 +0,0 @@ | ||||
| #!/bin/sh /etc/rc.common | ||||
|  | ||||
| START=99 | ||||
| USE_PROCD=1 | ||||
| PROG=/usr/bin/ucode | ||||
|  | ||||
| start_service() { | ||||
| 	procd_open_instance | ||||
| 	procd_set_param command "$PROG" -l uci -l fs /usr/share/ucentral/firstcontact.uc | ||||
| 	procd_set_param respawn 1 10 0 | ||||
| 	procd_close_instance | ||||
| } | ||||
| @@ -1,3 +0,0 @@ | ||||
| #!/bin/sh | ||||
| [ -f "/etc/ucentral/gateway.json" ] && /etc/init.d/firstcontact disable | ||||
| [ -f "/etc/ucentral/gateway.json" ] || /etc/init.d/ucentral disable | ||||
| @@ -1,83 +0,0 @@ | ||||
| let config = {}; | ||||
|  | ||||
| function store_config() { | ||||
| 	let redir = split(config.Redirector, ":"); | ||||
| 	let gw = { | ||||
| 		server: redir[0], | ||||
| 		port: redir[1] || 15002 | ||||
| 	}; | ||||
| 	fs.writefile('/etc/ucentral/gateway.json', gw); | ||||
| } | ||||
|  | ||||
| function store_config_uci(path) { | ||||
|         let cursor = uci.cursor(path); | ||||
|         let redir = split(config.Redirector, ":"); | ||||
|  | ||||
|         cursor.load("ucentral"); | ||||
|         cursor.set("ucentral", "config", "server", redir[0]); | ||||
|         cursor.set("ucentral", "config", "port", redir[1] || 15002); | ||||
|         cursor.commit(); | ||||
| } | ||||
|  | ||||
| function digicert() { | ||||
| 	let devid; | ||||
| 	let fd = fs.open("/etc/ucentral/dev-id", "r"); | ||||
| 	if (!fd) { | ||||
| 		warn("firstcontact: failed to find device id"); | ||||
| 		exit(1); | ||||
| 	} | ||||
| 	devid = fd.read("all"); | ||||
| 	fd.close(); | ||||
|  | ||||
| 	ret = system(sprintf('/usr/sbin/digicert -i %s', devid)); | ||||
| 	if (ret) { | ||||
| 		warn("firstcontact failed to contact redirector, check DHCP option\n"); | ||||
| 		let fd = fs.open("/tmp/capwap/dhcp_opt.txt", "r"); | ||||
| 		if (!fd) { | ||||
| 			warn("No redirector found\n"); | ||||
| 			exit(1); | ||||
| 		} else { | ||||
| 			config.Redirector = fd.read("all"); | ||||
| 			fd.close(); | ||||
| 		} | ||||
| 	} else { | ||||
| 		let redirector = { }; | ||||
| 		let fd = fs.open("/etc/ucentral/redirector.json", "r"); | ||||
| 		if (fd) { | ||||
| 			let data = fd.read("all"); | ||||
| 			fd.close(); | ||||
|  | ||||
| 			try { | ||||
| 				redirector = json(data); | ||||
| 			} | ||||
| 			catch (e) { | ||||
| 				warn("firstcontact: Unable to parse JSON data in %s: %s", path, e); | ||||
|  | ||||
| 				exit(1); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		for (let r in redirector.fields) | ||||
| 			if (r.name && r.value) | ||||
| 				config[r.name] = r.value; | ||||
| 		if (!config.Redirector) { | ||||
| 			warn("Reply is missing Redirector field\n"); | ||||
| 			exit(1); | ||||
| 		} | ||||
|  | ||||
| 	} | ||||
| } | ||||
|  | ||||
| if (!fs.stat('/etc/ucentral/gateway.json')) { | ||||
| 	digicert(); | ||||
| 	store_config(); | ||||
| 	store_config_uci(); | ||||
| 	store_config_uci("/etc/config-shadow/"); | ||||
| 	warn("firstcontact: managed to look up redirector\n"); | ||||
| } | ||||
|  | ||||
| system("/etc/init.d/ucentral enable"); | ||||
| system("/etc/init.d/firstcontact disable"); | ||||
| system("reload_config"); | ||||
| system("/etc/init.d/ucentral start"); | ||||
| system("/etc/init.d/firstcontact stop"); | ||||
| @@ -1,13 +0,0 @@ | ||||
| cmake_minimum_required(VERSION 2.6) | ||||
|  | ||||
| PROJECT(digicert C) | ||||
| INCLUDE(GNUInstallDirs) | ||||
| ADD_DEFINITIONS(-Os -ggdb -Wall -Werror --std=gnu99 -Wmissing-declarations) | ||||
|  | ||||
| SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") | ||||
|  | ||||
| ADD_EXECUTABLE(digicert digicert.c) | ||||
| TARGET_LINK_LIBRARIES(digicert curl crypto ssl ubox) | ||||
| INSTALL(TARGETS digicert | ||||
| 	RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR} | ||||
| ) | ||||
| @@ -1,104 +0,0 @@ | ||||
| #define _GNU_SOURCE | ||||
| #include <stdio.h> | ||||
| #include <unistd.h> | ||||
| #include <getopt.h> | ||||
|  | ||||
| #include <curl/curl.h> | ||||
|  | ||||
| #include <libubox/ulog.h> | ||||
|  | ||||
| static const char *file_cert = "/etc/ucentral/cert.pem"; | ||||
| static const char *file_key  = "/etc/ucentral/key.pem"; | ||||
| static const char *file_json = "/etc/ucentral/redirector.json"; | ||||
| static const char *file_dbg  = "/tmp/digicert.hdr"; | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| { | ||||
| 	FILE *fp_json; | ||||
| 	FILE *fp_dbg; | ||||
| 	CURLcode res; | ||||
| 	CURL *curl; | ||||
| 	char *devid = NULL; | ||||
| 	char *url; | ||||
|  | ||||
| 	alarm(15); | ||||
|  | ||||
| 	while (1) { | ||||
| 		int option = getopt(argc, argv, "k:c:o:hi:"); | ||||
|  | ||||
| 		if (option == -1) | ||||
| 			break; | ||||
|  | ||||
| 		switch (option) { | ||||
| 		case 'k': | ||||
| 			file_key = optarg; | ||||
| 			break; | ||||
| 		case 'c': | ||||
| 			file_cert = optarg; | ||||
| 			break; | ||||
| 		case 'o': | ||||
| 			file_json = optarg; | ||||
| 			break; | ||||
| 		case 'i': | ||||
| 			devid = optarg; | ||||
| 			break; | ||||
| 		default: | ||||
| 		case 'h': | ||||
| 			printf("Usage: digicert OPTIONS\n" | ||||
| 			       "  -k <keyfile>\n" | ||||
| 			       "  -c <certfile>\n" | ||||
| 			       "  -o <outfile>\n" | ||||
| 			       "  -i <devid>\n"); | ||||
| 			return -1; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if (!devid) { | ||||
| 		fprintf(stderr, "missing devid\n"); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	ulog_open(ULOG_SYSLOG | ULOG_STDIO, LOG_DAEMON, "digicert"); | ||||
| 	ULOG_INFO("attempting first contact\n"); | ||||
|  | ||||
| 	fp_dbg = fopen(file_dbg, "wb"); | ||||
| 	fp_json = fopen(file_json, "wb"); | ||||
| 	if (!fp_json) { | ||||
| 		ULOG_ERR("failed to create %s\n", file_json); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	curl_global_init(CURL_GLOBAL_DEFAULT); | ||||
| 	curl = curl_easy_init(); | ||||
| 	if (!curl) { | ||||
| 		ULOG_ERR("curl_easy_init failed\n"); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	if (asprintf(&url, "https://clientauth.one.digicert.com/iot/api/v2/device/%s", devid) < 0) { | ||||
| 		ULOG_ERR("failed to assemble url\n"); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	curl_easy_setopt(curl, CURLOPT_URL, url); | ||||
| 	curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp_json); | ||||
| 	curl_easy_setopt(curl, CURLOPT_HEADERDATA, fp_dbg); | ||||
| 	curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, "PEM"); | ||||
| 	curl_easy_setopt(curl, CURLOPT_SSLCERT, file_cert); | ||||
| 	curl_easy_setopt(curl, CURLOPT_SSLKEYTYPE, "PEM"); | ||||
| 	curl_easy_setopt(curl, CURLOPT_SSLKEY, file_key); | ||||
| 	curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L); | ||||
| 	curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L); | ||||
|  | ||||
| 	res = curl_easy_perform(curl); | ||||
| 	if (res != CURLE_OK) | ||||
| 		ULOG_ERR("curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); | ||||
| 	else | ||||
| 		ULOG_INFO("downloaded first contact data\n"); | ||||
| 	curl_easy_cleanup(curl); | ||||
| 	curl_global_cleanup(); | ||||
|  | ||||
| 	ulog_close(); | ||||
|  | ||||
| 	return (res != CURLE_OK); | ||||
| } | ||||
| @@ -17,14 +17,16 @@ mkdir -p /tmp/certs | ||||
| tar x -C /tmp/certs -f /tmp/certs.tar | ||||
|  | ||||
| # make sure the required files exist | ||||
| [ -f /tmp/certs/cas.pem -a -f /tmp/certs/key.pem -a -f /tmp/certs/cert.pem ] || exit 1 | ||||
| [ -f /tmp/certs/gateway.json -o -f /tmp/certs/dev-id ] || exit 1 | ||||
| [ -f /tmp/certs/key.pem -a -f /tmp/certs/cert.pem ] || exit 1 | ||||
|  | ||||
| # copy the certificates to /etc | ||||
| cp /tmp/certs/*.pem /certificates | ||||
|  | ||||
| # remove old operational certs | ||||
| rm /certificates/operational.* | ||||
|  | ||||
| # copy dev-id or gateway.json | ||||
| for a in dev-id gateway.json; do | ||||
| for a in gateway.json; do | ||||
| 	if [ -f /tmp/certs/$a ]; then | ||||
| 		cp /tmp/certs/$a /certificates | ||||
| 	else | ||||
|   | ||||
							
								
								
									
										6
									
								
								feeds/tip/tip-defaults/files/etc/ucentral/insta.pem
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								feeds/tip/tip-defaults/files/etc/ucentral/insta.pem
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| -----BEGIN CERTIFICATE----- | ||||
| MIIFajCCA1KgAwIBAgICDnowDQYJKoZIhvcNAQELBQAwHzEdMBsGA1UEAwwUT3BlbkxBTiBEZW1vIFJvb3QgQ0EwHhcNMjUwMjIxMTUwMDAwWhcNMjYwMjIxMTUwMDAwWjAgMR4wHAYDVQQDExVPcGVuTEFOIERlbW8gQmlydGggQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDVWIyySul6Fv4wl1O+DQpaLRa0p+Az5L/jcqTpdVf6w+8tlmeIY9C28uDQoDjewrIkvf3lcfK86nshs02s9ehqZUnEP8+GvKM19x3JbWxeTvWwFirjHir4x897iQ606bAMbrHHtntI9ZyBZyXDGeElGJxJQNX+0d50SFq609cB3yxpBPJ67ag+4Oq0uHgROHjEQMrfwLwlAune0c1fjQDrN14PDNjMZHvvhc/pkAHxR1PP6LOFNV5NuQ58tC5N7R2EqqFbIJ8VZgcagrGRYuAuFFTaV+D7RIt9xGTuWlCyxHI7VkRBJ1mRoEr4GOrP9QFjBD8NzNK+/wnR/fZwhpEnRsgHiI33wKHBDg+l3r8tvRzuB5X6Gl/SfuAeaoCuDHMncTjQg1zGhyEwjQhUe4RY3w+yHAjeeOE6c5spOMDDdaBibkzLmSjXztuLeAdzsUcD3fvGeOvh9vG14TKEmF8puNkqEcc0W8NyUWKFdr9umdJEMbaRSSsMGtp8bDj3Ddh4PhEJrIFeo89+HwXhU6sk+wzE9BULTohahsfwOV/08t1cZ3Q04Oj1KI+4YWu8BJns5gX35rQ8GIbkXQwfvFMwqmbg+ij2o9HWdkSL4bcqW/83Ho+31ce210rVGPK9cav0CjA2Eexgxi45cbgnfoade74Qa5zXboJEBmp7rbo4swIDAQABo4GuMIGrMB8GA1UdIwQYMBaAFDzIg8eyTI3xc4A2R60f8HanhBZDMB0GA1UdDgQWBBS5xC3inqLQl+vxzn9PsjNzlZ5hYDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADBFBgNVHR8EPjA8MDqgOKA2hjRodHRwOi8vZGVtby5jZXJ0aWZpY2F0ZS5maS9jcmwvT3BlbkxBTkRlbW9Sb290Q0EuY3JsMA0GCSqGSIb3DQEBCwUAA4ICAQA9DJEjsDLqtSFkF0XTWfzbebXA+X8++Qmiukrw0s2LRx798ce0mVITRAFDLf78BeUYF0B+PQ8hgq4fWyFsXRgZVrITd1BszT3LJ2r/6xWQJVpVHzLqKgIlW/PY/uTUz+xqR0Ev6hYrmrjfya0K0XEZZqxkmrTrcECaA3RCFkWQl9ZUlb9BClmdhayO8x1XpJplIYAMKVuoPL9IUQH6HUPFnzlPNQHIK9gcFACtgPVWCJg3IAvSLa41KpRxTDwGFvlrNKtkBlGRYhFGCHWXXZn8fdQHW9vykkkfPOaPR/AVyuRzfAT6wbtVWSy38BurSdqSCuNQPQBfF2vMeUGwNbD/7B4tYrWVtnIbgxRPKvX0o3mZkKry6BJf2m/AKWA16W+i4ojnPRORLTTq9cEZ0WL6NRHCgMrbWaCs/+ADTErqK6cv7GhoOVEiqugvnz93dit2IXg4zdDJ4hF9ZSlicwgZKVvMqnNQ1iiXezIQBehgYcWwXRIfdrRPe88HgkySuDZ2lkKYdc+oTc6e7upRh4Kh2ZSipcRb6ehPan533jnQJyU8A9vFAJiQfZZ4lD3tcsqlsDnlu5YEDYSjcfnkyOH/Mlx5VVTWYGvqNNVKRDw2slSxKwVCobkcF/2dAxP9DqOaGaCnMeOaR7kMaBm5d1fwb+bCl9usQAELjZBv2vAH8g== | ||||
| -----END CERTIFICATE----- | ||||
| -----BEGIN CERTIFICATE----- | ||||
| MIIFIDCCAwigAwIBAgICDnkwDQYJKoZIhvcNAQELBQAwHzEdMBsGA1UEAwwUT3BlbkxBTiBEZW1vIFJvb3QgQ0EwHhcNMjUwMjIxMTUwMDAwWhcNMjYwMjIxMTUwMDAwWjAfMR0wGwYDVQQDDBRPcGVuTEFOIERlbW8gUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMjExylKdJWoJu9mOHPJ6yZFXKe1lE467G65acpS2FKIWnPVFjNCmATMpkMOIFzEFwyFdbQjzOidtiL+73zlE52lOJpXCfOcxDFqDYDJJ8//J1/gQWsBaKpSvgLiHU/0awkQg+yJYZpj8YZa4NkFe+zTjQScSfOsqPPb3rZ7DOQ2BKAhjVShKmVbtNil0iO0zm8vE8DNkktTNMREp2pzb8MbCAgfOkwlrby6T+rV3TvmjThGdFUb5lWDFxWtlF8W0SUII9qj7p5TdGpryeLsO0nZTBtS4HxZNdvmKOHfgcRHmSZIJigB2NzKLNrXF9JBW0WnUSwZJZAG2C1RTx6lADILPueuusyfR/hZ3koKi4PHnSiTwQghzia9K9QjNHq5z9R9ZoCnhBg1VyU4LKmp862L0sIp2vgnOYunEIi9aCYBaDwo+0FuVjZuXyDIatwVuA7TN5IWPHA6XLdOt1mmkeYy1Ldr4XHjdondhtOyeei1UFXmyyLm2+kmRYfTm91TqYmNzRgbRV2NHO50AmsnBknX4Rv3gishGe0+dV5yFcUwZud0z2rSCkuoai5tKrPT+6Y6NqkT9u9HFifIBXnLwEzVUqHRtW6SuWj2DClVQIXIUZtFnhY4GuTuf6DlzgnXO58oDVCZmCW4ULIpbqGeRsvBHR8Sw5JXP/1+TMUYhE8TAgMBAAGjZjBkMB8GA1UdIwQYMBaAFDzIg8eyTI3xc4A2R60f8HanhBZDMB0GA1UdDgQWBBQ8yIPHskyN8XOANketH/B2p4QWQzAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBATANBgkqhkiG9w0BAQsFAAOCAgEAkHZ5KR8IOrdfMFy+iOvauvZxfQ84LL6TpB2FQKDjneJUdd7c29UJJFNW/0mp4Gc6jKZab6J8Dx/pNnbH0RqFjGjeRGtJ4Sk0G7gf9zw1S7qut5WJDcisM9l/wXC+zy/KSKKPQmbt0grWOtU7+NNPh1YU76hIrInq/u2sVZyKH8SXQ957fbJk6BX6JTKyNEn05AB6rNSrbOWo8sy2MlcJ7bBsrWYI1t6GcWFh4b36bLu7/dKJWpyFNXXIkKJsgMEDpEQae56+fSSDo0KRNtYB82fNZDIQlGK81rGJWNzAahM+3GD1tgk/3ZVugfaJhcBpoHHKNOGqZAvtirLAIDocno7AzqoeIz974Rh2Olsl2/arApYPyyfi8PMYuFe/d4h+Wie8n+jh5n48lZ2Ve4PK+j+QHD6tTZS4f0bGnPL1puMxzQloltuQWgLDeVfEgrc3snLvjOg8aDzWm/es85lP8XcyW54U4t3JmrNUC2C7v+Uafx7cL7eDeunhs+BRhtGV+IUmjub2IrpqZp3zZqn+LVRdYJIy/qHhjS5+ImckXkFojOmeWhfmEmYSuNP8Oa6cGuXp829qnbxLh9Qzi3TfXV883KLse4kL5Zl7gBA/4hz2hVMyGJ8fY+VvzbaTuOXyvKJ+rGZCTcRSeotBLnIevVMiL7SqOEwN0j4Mfbznfq8= | ||||
| -----END CERTIFICATE----- | ||||
							
								
								
									
										42
									
								
								feeds/ucentral/poe/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								feeds/ucentral/poe/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | ||||
| include $(TOPDIR)/rules.mk | ||||
|  | ||||
| PKG_NAME:=poe | ||||
| PKG_VERSION:=1.0 | ||||
| PKG_RELEASE:=1 | ||||
|  | ||||
| PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) | ||||
|  | ||||
| include $(INCLUDE_DIR)/package.mk | ||||
|  | ||||
| ifeq ($(CONFIG_TARGET_ipq50xx_generic_DEVICE_sonicfi_rap630w_311g),y) | ||||
| TARGET_CFLAGS += -DPLATFORM_EWW631_B1=1 | ||||
| endif | ||||
|  | ||||
| define Package/poe | ||||
| 	SECTION:=utils | ||||
| 	CATEGORY:=Utilities | ||||
| 	TITLE:=Turn on/off PoE ports with TSP23861 chipset | ||||
| 	DEPENDS:= +libubox +libubus +libuci +libi2c | ||||
| endef | ||||
|  | ||||
| define Package/poe/description | ||||
|   Turn on/off PoE ports | ||||
| endef | ||||
|  | ||||
| define Build/Prepare | ||||
| 	mkdir -p $(PKG_BUILD_DIR) | ||||
| 	$(CP) ./src/* $(PKG_BUILD_DIR)/ | ||||
| endef | ||||
|  | ||||
|  | ||||
| define Package/poe/install | ||||
| 	$(INSTALL_DIR) $(1) | ||||
| 	$(INSTALL_DIR) $(1)/etc/config $(1)/etc/init.d | ||||
| 	$(INSTALL_BIN) ./files/poe.init $(1)/etc/init.d/poe | ||||
| 	$(INSTALL_BIN) ./files/poe.config $(1)/etc/config/poe | ||||
|  | ||||
| 	$(INSTALL_DIR) $(1)/usr/bin | ||||
| 	$(INSTALL_BIN) $(PKG_BUILD_DIR)/tps23861-poe-ctrl $(1)/usr/bin | ||||
| endef | ||||
|  | ||||
| $(eval $(call BuildPackage,poe)) | ||||
							
								
								
									
										0
									
								
								feeds/ucentral/poe/files/poe.config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								feeds/ucentral/poe/files/poe.config
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										33
									
								
								feeds/ucentral/poe/files/poe.init
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								feeds/ucentral/poe/files/poe.init
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| #!/bin/sh /etc/rc.common | ||||
|  | ||||
| START=10 | ||||
|  | ||||
| tps23861_poe_ctrl () { | ||||
| 	local section="$1" | ||||
| 	local num mode | ||||
| 	config_get num "$section" port_num | ||||
| 	config_get mode "$section" admin_mode | ||||
| 	 | ||||
| 	if [ "$mode" == "1" ]; then | ||||
| 		output=$(tps23861-poe-ctrl -p "${num}" -P on) | ||||
| 		echo "<6>${output}" > "/dev/kmsg" | ||||
| 	else | ||||
| 		output=$(tps23861-poe-ctrl -p "${num}" -P off) | ||||
| 		echo "<6>${output}" > "/dev/kmsg" | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| start(){ | ||||
| 	. /lib/functions.sh | ||||
| 	 | ||||
| 	board=$(board_name) | ||||
| 	case $board in | ||||
| 	sonicfi,rap630w-311g|\ | ||||
| 	cybertan,eww631-b1) | ||||
| 		config_load poe | ||||
| 		config_foreach tps23861_poe_ctrl port | ||||
| 		;; | ||||
| 	*) | ||||
| 		;; | ||||
| 	esac | ||||
| } | ||||
							
								
								
									
										26
									
								
								feeds/ucentral/poe/src/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								feeds/ucentral/poe/src/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| CFLAGS += -Wall -g | ||||
|  | ||||
| INCLUDES = | ||||
|  | ||||
| LDFLAGS = -lubus -lubox -li2c | ||||
|  | ||||
| LIBS =  | ||||
|  | ||||
| SRCS = tps23861-poe-ctrl.c \ | ||||
|  | ||||
| OBJS = $(SRCS:.c=.o) | ||||
|  | ||||
| MAIN = tps23861-poe-ctrl | ||||
|  | ||||
|  | ||||
| all:   $(MAIN)  | ||||
|  | ||||
| $(MAIN): $(OBJS) | ||||
| 	$(CC) $(CFLAGS) $(INCLUDES) -o $(MAIN) $(OBJS) $(LDFLAGS) $(LIBS) | ||||
| 	 | ||||
| .c.o: | ||||
| 	$(CC) $(CFLAGS) $(INCLUDES) -c $<  -o $@ | ||||
|  | ||||
| clean: | ||||
| 	$(RM) *.o *~ $(MAIN) $(TEST) | ||||
|  | ||||
							
								
								
									
										215
									
								
								feeds/ucentral/poe/src/tps23861-poe-ctrl.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										215
									
								
								feeds/ucentral/poe/src/tps23861-poe-ctrl.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,215 @@ | ||||
| /* | ||||
|  * User-space daemon formonitoring and managing PoE ports with | ||||
|  * TI TPS23861 chips. based on the Linux Kernel TPS23861 | ||||
|  * HWMON driver. | ||||
| */ | ||||
|  | ||||
| #include <stdio.h>		/* Standard input/output definitions */ | ||||
| #include <string.h>		/* String function definitions */ | ||||
| #include <unistd.h>		/* UNIX standard function definitions */ | ||||
| #include <fcntl.h>		/* File control definitions */ | ||||
| #include <errno.h>		/* Error number definitions */ | ||||
| #include <sys/ioctl.h> | ||||
| #include <linux/i2c.h> | ||||
| #include <linux/i2c-dev.h>  /* uapi/linux/i2c-dev.h */ | ||||
|  | ||||
| #include <libubox/ulog.h> | ||||
|  | ||||
| #define TPS23861_I2C_ADDR				0x20 | ||||
| #define DETECT_CLASS_RESTART			0x18 | ||||
| #define POWER_ENABLE					0x19 | ||||
| #define POWER_ON_SHIFT					0 | ||||
| #define POWER_OFF_SHIFT					4 | ||||
|  | ||||
| typedef unsigned char	u8; | ||||
|  | ||||
| #if defined(PLATFORM_EWW631_B1) | ||||
| #define TPS23861_NUM_PORTS				1 | ||||
| #endif | ||||
|  | ||||
| #define CONVERT_PORT_NUM(x)				(1 << ((u8)x-1)) | ||||
|  | ||||
| unsigned int  PORT_POWER_STATUS[TPS23861_NUM_PORTS]; | ||||
|  | ||||
| int i2c_handler = -1; | ||||
| #define ULOG_DBG(fmt, ...) ulog(LOG_DEBUG, fmt, ## __VA_ARGS__) | ||||
|  | ||||
| int open_device(void) | ||||
| { | ||||
| 	int fd, fset; | ||||
|  | ||||
| 	fd = open("/dev/i2c-0", O_RDWR); | ||||
| 	fset = fcntl(fd, F_SETFL, 0); | ||||
| 	if (fset < 0) | ||||
| 		printf("fcntl failed!\n"); | ||||
|  | ||||
| 	//if (isatty(STDIN_FILENO) == 0) | ||||
| 	//	printf("standard input is not a terminal device\n"); | ||||
|  | ||||
| 	return fd; | ||||
| } | ||||
|  | ||||
| int access_salve(int fd) | ||||
| { | ||||
| 	int ret; | ||||
|  | ||||
| 	if((ret = ioctl(fd, I2C_SLAVE, TPS23861_I2C_ADDR)) < 0) | ||||
| 	{ | ||||
| 		printf("%s: Failed to access slave bus[%s]\n",__func__, strerror(errno)); | ||||
| 		return -1; | ||||
| 	} | ||||
| 	return(ret); | ||||
| } | ||||
|  | ||||
| // Write to an I2C slave device's register: | ||||
| int i2c_write(u8 slave_addr, u8 reg, u8 data) | ||||
| { | ||||
| 	u8 outbuf[2]; | ||||
|  | ||||
| 	struct i2c_msg msgs[1]; | ||||
| 	struct i2c_rdwr_ioctl_data msgset[1]; | ||||
|  | ||||
| 	outbuf[0] = reg; | ||||
| 	outbuf[1] = data; | ||||
|  | ||||
| 	msgs[0].addr = slave_addr; | ||||
| 	msgs[0].flags = 0; | ||||
| 	msgs[0].len = 2; | ||||
| 	msgs[0].buf = outbuf; | ||||
|  | ||||
| 	msgset[0].msgs = msgs; | ||||
| 	msgset[0].nmsgs = 1; | ||||
|  | ||||
| 	if (ioctl(i2c_handler, I2C_RDWR, &msgset) < 0) { | ||||
| 		perror("ioctl(I2C_RDWR) in i2c_write"); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| void poe_set_PowerOnOff(u8 port, u8 on_off) { | ||||
| 	u8 value; | ||||
| 	u8 portBit; | ||||
| 	portBit = CONVERT_PORT_NUM(port+1); | ||||
|  | ||||
| 	if(on_off == 0) { | ||||
| 		value = (portBit << POWER_OFF_SHIFT); | ||||
| 		PORT_POWER_STATUS[port] = 0; | ||||
| 	} else { | ||||
| 		value = (portBit << POWER_ON_SHIFT); | ||||
| 		PORT_POWER_STATUS[port] = 1; | ||||
| 	} | ||||
|  | ||||
| 	ULOG_DBG("set Port%d Power Status [%d] portBit 0x[%x] value 0x[%x]\n", port+1, PORT_POWER_STATUS[port], portBit, value); | ||||
|  | ||||
| 	if(i2c_write(TPS23861_I2C_ADDR, POWER_ENABLE, value) < 0) | ||||
| 	{ | ||||
| 		ULOG_ERR("Set port%d power on-off error (0x19)\n", port); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void RestartPortDetectClass(u8 port) | ||||
| { | ||||
| 	u8 value; | ||||
|  | ||||
| 	value = (1 << port) | (1 << (port + 4)); | ||||
| 	ULOG_DBG("RestartPortDetectClass value 0x%x\n", value); | ||||
| 	if(i2c_write(TPS23861_I2C_ADDR, DETECT_CLASS_RESTART, value) < 0) { | ||||
| 			ULOG_ERR("Set port%d detection and class on error\n",port); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| int usage(const char *progname) | ||||
| { | ||||
| 	fprintf(stderr, "Usage: %s -p <1-3> -P <on|off> [options]\n" | ||||
| 			"Required options:\n" | ||||
| 			"  -p <1-3>:           Select port number (Only port 1 is supported)\n" | ||||
| 			"  -P <on|off>:        Set PSE function state <on|off>\n" | ||||
| 			"Optional options:\n" | ||||
| 			"  -d                  Enable debug mode\n" | ||||
| 			"\n", progname); | ||||
| 	return 1; | ||||
| } | ||||
|  | ||||
| static int setPSE(int port ,char *optarg) | ||||
| { | ||||
| 	int ret = 0; | ||||
| 	i2c_handler = open_device(); | ||||
| 	if (i2c_handler < 0) { | ||||
| 		ULOG_ERR("open i2c-0 device error!\n"); | ||||
| 		goto EXIT; | ||||
| 	} | ||||
|  | ||||
| 	ret = access_salve(i2c_handler); | ||||
| 	if (ret < 0) | ||||
| 	{ | ||||
| 		ULOG_ERR("The i2c-0 access error\n"); | ||||
| 		goto EXIT; | ||||
| 	} | ||||
|  | ||||
| 	if(!strncmp("on", optarg, 2)) { | ||||
| 		printf("Enable port%d PSE function\n", port); | ||||
| 		RestartPortDetectClass(port-1); | ||||
| 	} | ||||
| 	else if (!strncmp("off", optarg, 3)) { | ||||
| 		printf("Disable port%d PSE function\n", port); | ||||
| 		poe_set_PowerOnOff(port-1, 0); | ||||
| 	} | ||||
| 	else { | ||||
| 		ULOG_ERR("[Set] Do not accept this optarg!!!\n"); | ||||
| 		ret = 1; | ||||
| 	} | ||||
| EXIT: | ||||
| 	close(i2c_handler); | ||||
| 	return ret; | ||||
| } | ||||
|  | ||||
| int main(int argc, char *argv[]) | ||||
| { | ||||
| 	int ch, ret = 0, port = 0; | ||||
| 	char *PSE = NULL; | ||||
| 	if (argc == 1) { | ||||
| 		return usage(argv[0]); | ||||
| 	} | ||||
|  | ||||
|  | ||||
| 	ulog_open(ULOG_STDIO | ULOG_SYSLOG, LOG_DAEMON, "tps23861"); | ||||
| 	ulog_threshold(LOG_INFO); | ||||
|  | ||||
| 	while ((ch = getopt(argc, argv, "dp:P:")) != -1) { | ||||
| 		switch (ch) { | ||||
| 		case 'd': | ||||
| 			printf("tps23861-i2c-control ulog_threshold set to debug level\n"); | ||||
| 			ulog_threshold(LOG_DEBUG); | ||||
| 			break; | ||||
|  | ||||
| 		case 'p': | ||||
| 			port = atoi(optarg); | ||||
| 			break; | ||||
|  | ||||
| 		case 'P': | ||||
| 			PSE = optarg; | ||||
| 			break; | ||||
|  | ||||
| 		default: | ||||
| 			ret = usage(argv[0]); | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if (port < 1 || port > 3) { | ||||
| 		ret = usage(argv[0]); | ||||
| 	} | ||||
| 	else { | ||||
| 		if (PSE) { | ||||
| 			setPSE(port, PSE); | ||||
| 		} | ||||
| 		else { | ||||
| 			ret = usage(argv[0]); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return ret; | ||||
|  | ||||
| } | ||||
| @@ -4,10 +4,10 @@ PKG_NAME:=ucentral-client | ||||
| PKG_RELEASE:=1 | ||||
|  | ||||
| PKG_SOURCE_URL=https://github.com/Telecominfraproject/wlan-ucentral-client.git | ||||
| PKG_MIRROR_HASH:=20d0573e5460ae9780307ab9d54234bb75d3b98fb36806f896819918087b14df | ||||
| PKG_MIRROR_HASH:=7dfeaedf141a6377de2dc6bcd646b1640201f204db42af52777d018700bc991c | ||||
| PKG_SOURCE_PROTO:=git | ||||
| PKG_SOURCE_DATE:=2024-10-20 | ||||
| PKG_SOURCE_VERSION:=8c45f965c30d1cf11e3a5a625a5e2baf3178697f | ||||
| PKG_SOURCE_DATE:=2025-06-27 | ||||
| PKG_SOURCE_VERSION:=08a842d9921196821a19d52b9061db6c428aab3f | ||||
|  | ||||
| PKG_LICENSE:=BSD-3-Clause | ||||
| PKG_MAINTAINER:=John Crispin <john@phrozen.org> | ||||
|   | ||||
							
								
								
									
										14
									
								
								feeds/ucentral/ucentral-client/files/etc/init.d/cpm
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								feeds/ucentral/ucentral-client/files/etc/init.d/cpm
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| #!/bin/sh /etc/rc.common | ||||
|  | ||||
| START=90 | ||||
| STOP=01 | ||||
|  | ||||
| boot() { | ||||
|     mkdir -p /tmp/cpm/ || { logger -t init "Failed to create /tmp/cpm"; exit 1; } | ||||
|     opkg list-installed > /tmp/packages.state || { logger -t init "Failed to list packages"; exit 1; } | ||||
|     if [ -x /usr/share/ucentral/package_list.uc ]; then | ||||
|         /usr/share/ucentral/package_list.uc || { logger -t init "Failed to execute package_list.uc"; exit 1; } | ||||
|     else | ||||
|         logger -t init "package_list.uc not found or not executable" | ||||
|     fi | ||||
| } | ||||
| @@ -1,5 +1,5 @@ | ||||
| { | ||||
| 	"major": 4, | ||||
| 	"minor": 0, | ||||
| 	"minor": 1, | ||||
| 	"patch": 0 | ||||
| } | ||||
|   | ||||
| @@ -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:=ee5d5073bd9ae88590e419f94eb6c59f04a2fc0c3117be435bcb885e0ea28bf1 | ||||
| PKG_MIRROR_HASH:=aac8731d564f4ccd85a366417b9a02c1d3de9b6533d1474b58768249c50707f1 | ||||
| PKG_SOURCE_PROTO:=git | ||||
| PKG_SOURCE_DATE:=2025-01-27 | ||||
| PKG_SOURCE_VERSION:=b4cfdc6a1caa279ae8c6c42b6932620fb2aed9c1 | ||||
| PKG_SOURCE_DATE:=2025-06-27 | ||||
| PKG_SOURCE_VERSION:=125a148764c9ef7a02086b6fadccd7b96bfdf591 | ||||
| PKG_MAINTAINER:=John Crispin <john@phrozen.org> | ||||
| PKG_LICENSE:=BSD-3-Clause | ||||
|  | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user