mirror of
				https://github.com/Telecominfraproject/wlan-ap.git
				synced 2025-10-31 18:38:10 +00:00 
			
		
		
		
	Compare commits
	
		
			38 Commits
		
	
	
		
			v4.1.0
			...
			v4.1.1-RC1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 9d06b517dc | ||
|   | f2afe49977 | ||
|   | 04cc064026 | ||
|   | 14778e1d2f | ||
|   | 9712ce581f | ||
|   | a4dbeb376e | ||
|   | 02b0457b28 | ||
|   | 42007a147f | ||
|   | d1e18425b0 | ||
|   | 125c75c49b | ||
|   | d98e18a143 | ||
|   | fd170fabed | ||
|   | 9b2d80f2b4 | ||
|   | 5c892e7a0c | ||
|   | 6ed93db422 | ||
|   | 92d67c15dd | ||
|   | 460180f42e | ||
|   | ed57759824 | ||
|   | 957e3ca997 | ||
|   | 7c2b8e8de0 | ||
|   | 741007178f | ||
|   | e9d3e39d5e | ||
|   | b82a2c5da1 | ||
|   | 15429f39d8 | ||
|   | 5df274325b | ||
|   | 2e4972e9ad | ||
|   | a25480d479 | ||
|   | 2f625c35f0 | ||
|   | b5422f80e4 | ||
|   | 1ed503613d | ||
|   | f8954418f1 | ||
|   | 3abc6a4463 | ||
|   | 811b63de93 | ||
|   | c66020fbc6 | ||
|   | da7682166f | ||
|   | bd50dfdf96 | ||
|   | cbf0e536df | ||
|   | 20a7a48c9f | 
| @@ -0,0 +1,14 @@ | |||||||
|  | --- a/hostapd/ctrl_iface.c	2025-09-24 14:15:25.135668867 +0800 | ||||||
|  | +++ b/hostapd/ctrl_iface.c	2025-09-24 15:32:46.082317382 +0800 | ||||||
|  | @@ -2657,6 +2657,11 @@ static int hostapd_ctrl_iface_chan_switc | ||||||
|  |  		break; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | +    /* Initialize HT/VHT/HE parameters */ | ||||||
|  | +    settings.freq_params.ht_enabled = iface->conf->ieee80211n; | ||||||
|  | +    settings.freq_params.vht_enabled = iface->conf->ieee80211ac; | ||||||
|  | +    settings.freq_params.he_enabled = iface->conf->ieee80211ax; | ||||||
|  | + | ||||||
|  |  	if (settings.freq_params.center_freq1) | ||||||
|  |  		dfs_range += hostapd_is_dfs_overlap( | ||||||
|  |  			iface, bandwidth, settings.freq_params.center_freq1); | ||||||
| @@ -47,6 +47,10 @@ ALLWIFIBOARDS:= \ | |||||||
| 	indio-um-310ax-v1 \ | 	indio-um-310ax-v1 \ | ||||||
| 	indio-um-510axp-v1 \ | 	indio-um-510axp-v1 \ | ||||||
| 	indio-um-510axm-v1 \ | 	indio-um-510axm-v1 \ | ||||||
|  | 	indio-um-325ax-v2 \ | ||||||
|  | 	indio-um-335ax \ | ||||||
|  | 	indio-um-525axp \ | ||||||
|  | 	indio-um-525axm \ | ||||||
| 	muxi-ap3220l \ | 	muxi-ap3220l \ | ||||||
| 	plasmacloud-pax1800 \ | 	plasmacloud-pax1800 \ | ||||||
| 	wallys-dr5018 \ | 	wallys-dr5018 \ | ||||||
| @@ -441,6 +445,10 @@ $(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-310ax-v1,Indio UM-310AX V1)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,indio-um-510axp-v1,Indio UM-510AXP V1)) | $(eval $(call generate-ath11k-wifi-package,indio-um-510axp-v1,Indio UM-510AXP V1)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,indio-um-510axm-v1,Indio UM-510AXM V1)) | $(eval $(call generate-ath11k-wifi-package,indio-um-510axm-v1,Indio UM-510AXM V1)) | ||||||
|  | $(eval $(call generate-ath11k-wifi-package,indio-um-325ax-v2,Indio UM-325AX V2)) | ||||||
|  | $(eval $(call generate-ath11k-wifi-package,indio-um-335ax,Indio UM-335AX)) | ||||||
|  | $(eval $(call generate-ath11k-wifi-package,indio-um-525axp,Indio UM-525AXP)) | ||||||
|  | $(eval $(call generate-ath11k-wifi-package,indio-um-525axm,Indio UM-525AXM)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,sonicfi-rap630c-311g,Sonicfi RAP630C 311G)) | $(eval $(call generate-ath11k-wifi-package,sonicfi-rap630c-311g,Sonicfi RAP630C 311G)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,sonicfi-rap630w-311g,Sonicfi RAP630W 311G)) | $(eval $(call generate-ath11k-wifi-package,sonicfi-rap630w-311g,Sonicfi RAP630W 311G)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,sonicfi-rap630w-312g,Sonicfi RAP630W 312G)) | $(eval $(call generate-ath11k-wifi-package,sonicfi-rap630w-312g,Sonicfi RAP630W 312G)) | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-325ax-v2.bin.IPQ5018
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-325ax-v2.bin.IPQ5018
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-325ax-v2.bin.QCN6122
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-325ax-v2.bin.QCN6122
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-335ax.bin.IPQ5018
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-335ax.bin.IPQ5018
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-335ax.bin.QCN9074
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-335ax.bin.QCN9074
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-525axm.bin.IPQ5018
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-525axm.bin.IPQ5018
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-525axm.bin.QCN6122
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-525axm.bin.QCN6122
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-525axp.bin.IPQ5018
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-525axp.bin.IPQ5018
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-525axp.bin.QCN6122
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-525axp.bin.QCN6122
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -16,6 +16,14 @@ edgecore,eap104) | |||||||
| 	ucidef_set_led_netdev "wan" "wan" "yellow:uplink" "eth0" | 	ucidef_set_led_netdev "wan" "wan" "yellow:uplink" "eth0" | ||||||
|         ucidef_set_led_default "power" "POWER" "green:power" "on" |         ucidef_set_led_default "power" "POWER" "green:power" "on" | ||||||
| 	;; | 	;; | ||||||
|  | indio,um-325ax-v2|\ | ||||||
|  | indio,um-335ax|\ | ||||||
|  | indio,um-525axm|\ | ||||||
|  | indio,um-525axp) | ||||||
|  | 	ucidef_set_led_wlan "wlan2g" "WLAN2G" "led_2g" "phy0tpt" | ||||||
|  | 	ucidef_set_led_wlan "wlan5g" "WLAN5G" "led_5g" "phy1tpt" | ||||||
|  | 	ucidef_set_led_default "power" "POWER" "led_sys" "on" | ||||||
|  | 	;; | ||||||
| cig,wf186h|\ | cig,wf186h|\ | ||||||
| cig,wf186w) | cig,wf186w) | ||||||
|         ucidef_set_led_default "power" "POWER" "green:status" "on" |         ucidef_set_led_default "power" "POWER" "green:status" "on" | ||||||
|   | |||||||
| @@ -48,6 +48,15 @@ qcom_setup_interfaces() | |||||||
| 		ucidef_add_switch "switch1" \ | 		ucidef_add_switch "switch1" \ | ||||||
| 			"6u@eth1" "1:lan" "2:lan" "3:lan" "4:lan" | 			"6u@eth1" "1:lan" "2:lan" "3:lan" "4:lan" | ||||||
| 		;; | 		;; | ||||||
|  | 	indio,um-325ax-v2|\ | ||||||
|  | 	indio,um-335ax|\ | ||||||
|  | 	indio,um-525axm|\ | ||||||
|  | 	indio,um-525axp) | ||||||
|  | 		ucidef_set_interface_wan "eth1" | ||||||
|  | 		ucidef_set_interface_lan "eth0" | ||||||
|  | 		ucidef_add_switch "switch1" \ | ||||||
|  | 			"6@eth1" "1:lan" "2:lan" "3:lan" "4:lan" | ||||||
|  | 		;; | ||||||
| 	emplus,wap385c|\ | 	emplus,wap385c|\ | ||||||
| 	hfcl,ion4x_w|\ | 	hfcl,ion4x_w|\ | ||||||
| 	hfcl,ion4xi_w) | 	hfcl,ion4xi_w) | ||||||
|   | |||||||
| @@ -142,6 +142,10 @@ ath11k/IPQ5018/hw1.0/caldata.bin) | |||||||
| 	emplus,wap385c|\ | 	emplus,wap385c|\ | ||||||
| 	hfcl,ion4x_w|\ | 	hfcl,ion4x_w|\ | ||||||
| 	hfcl,ion4xi_w|\ | 	hfcl,ion4xi_w|\ | ||||||
|  | 	indio,um-325ax-v2|\ | ||||||
|  | 	indio,um-335ax|\ | ||||||
|  | 	indio,um-525axm|\ | ||||||
|  | 	indio,um-525axp|\ | ||||||
| 	optimcloud,d60|\ | 	optimcloud,d60|\ | ||||||
| 	optimcloud,d60-5g|\ | 	optimcloud,d60-5g|\ | ||||||
| 	optimcloud,d50|\ | 	optimcloud,d50|\ | ||||||
| @@ -183,6 +187,9 @@ ath11k/qcn6122/hw1.0/caldata_1.bin) | |||||||
| 	;; | 	;; | ||||||
| ath11k/qcn6122/hw1.0/caldata_2.bin) | ath11k/qcn6122/hw1.0/caldata_2.bin) | ||||||
| 	case "$board" in | 	case "$board" in | ||||||
|  | 	indio,um-325ax-v2|\ | ||||||
|  | 	indio,um-525axm|\ | ||||||
|  | 	indio,um-525axp|\ | ||||||
| 	wallys,dr5018|\ | 	wallys,dr5018|\ | ||||||
| 	edgecore,eap104|\ | 	edgecore,eap104|\ | ||||||
| 	edgecore,oap101-6e|\ | 	edgecore,oap101-6e|\ | ||||||
| @@ -201,6 +208,7 @@ ath11k/qcn6122/hw1.0/caldata_2.bin) | |||||||
| 	;; | 	;; | ||||||
| ath11k/QCN9074/hw1.0/caldata_1.bin) | ath11k/QCN9074/hw1.0/caldata_1.bin) | ||||||
| 	case "$board" in | 	case "$board" in | ||||||
|  | 	indio,um-335ax|\ | ||||||
| 	optimcloud,d60|\ | 	optimcloud,d60|\ | ||||||
| 	optimcloud,d60-5g|\ | 	optimcloud,d60-5g|\ | ||||||
| 	optimcloud,d50|\ | 	optimcloud,d50|\ | ||||||
| @@ -234,6 +242,9 @@ ath11k-macs) | |||||||
| 	edgecore,oap101|\ | 	edgecore,oap101|\ | ||||||
| 	edgecore,oap101-6e|\ | 	edgecore,oap101-6e|\ | ||||||
| 	edgecore,oap101e-6e|\ | 	edgecore,oap101e-6e|\ | ||||||
|  | 	indio,um-325ax-v2|\ | ||||||
|  | 	indio,um-525axp|\ | ||||||
|  | 	indio,um-525axm|\ | ||||||
| 	optimcloud,d60|\ | 	optimcloud,d60|\ | ||||||
| 	optimcloud,d60-5g|\ | 	optimcloud,d60-5g|\ | ||||||
| 	optimcloud,d50|\ | 	optimcloud,d50|\ | ||||||
|   | |||||||
| @@ -81,6 +81,10 @@ platform_check_image() { | |||||||
| 	wallys,dr5018|\ | 	wallys,dr5018|\ | ||||||
| 	hfcl,ion4x_w|\ | 	hfcl,ion4x_w|\ | ||||||
| 	hfcl,ion4xi_w|\ | 	hfcl,ion4xi_w|\ | ||||||
|  | 	indio,um-325ax-v2|\ | ||||||
|  | 	indio,um-335ax|\ | ||||||
|  | 	indio,um-525axp|\ | ||||||
|  | 	indio,um-525axm|\ | ||||||
| 	optimcloud,d60|\ | 	optimcloud,d60|\ | ||||||
| 	optimcloud,d60-5g|\ | 	optimcloud,d60-5g|\ | ||||||
| 	optimcloud,d50|\ | 	optimcloud,d50|\ | ||||||
| @@ -107,6 +111,10 @@ platform_do_upgrade() { | |||||||
|  |  | ||||||
| 	board=$(board_name) | 	board=$(board_name) | ||||||
| 	case $board in | 	case $board in | ||||||
|  | 	indio,um-325ax-v2|\ | ||||||
|  | 	indio,um-335ax|\ | ||||||
|  | 	indio,um-525axp|\ | ||||||
|  | 	indio,um-525axm|\ | ||||||
| 	edgecore,oap101|\ | 	edgecore,oap101|\ | ||||||
| 	edgecore,oap101-6e|\ | 	edgecore,oap101-6e|\ | ||||||
| 	edgecore,oap101e|\ | 	edgecore,oap101e|\ | ||||||
|   | |||||||
| @@ -0,0 +1,941 @@ | |||||||
|  | /dts-v1/; | ||||||
|  | /* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. | ||||||
|  |  * | ||||||
|  |  * Permission to use, copy, modify, and/or distribute this software for any | ||||||
|  |  * purpose with or without fee is hereby granted, provided that the above | ||||||
|  |  * copyright notice and this permission notice appear in all copies. | ||||||
|  |  * | ||||||
|  |  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||||||
|  |  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||||||
|  |  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||||||
|  |  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||||||
|  |  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||||||
|  |  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||||||
|  |  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include "ipq5018.dtsi" | ||||||
|  | #include <dt-bindings/input/input.h> | ||||||
|  |  | ||||||
|  | / { | ||||||
|  | 	#address-cells = <0x2>; | ||||||
|  | 	#size-cells = <0x2>; | ||||||
|  | 	model = "Indio UM-325AX V2"; | ||||||
|  | 	compatible = "indio,um-325ax-v2", "qcom,ipq5018-mp03.5-c1", "qcom,ipq5018"; | ||||||
|  | 	interrupt-parent = <&intc>; | ||||||
|  |  | ||||||
|  | 	aliases { | ||||||
|  | 		sdhc1 = &sdhc_1; /* SDC1 eMMC slot */ | ||||||
|  | 		serial0 = &blsp1_uart1; | ||||||
|  | 		serial1 = &blsp1_uart2; | ||||||
|  | 		ethernet0 = "/soc/dp1"; | ||||||
|  | 		ethernet1 = "/soc/dp2"; | ||||||
|  |                 //led-failsafe = &led_red; | ||||||
|  |                 //led-running = &led_green; | ||||||
|  |                 //led-upgrade = &led_green; | ||||||
|  |                 //led-gateway = &led_blue; | ||||||
|  |                 //led-factory = &led_blue; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	chosen { | ||||||
|  | 		bootargs = "console=ttyMSM0,115200,n8 rw init=/init"; | ||||||
|  | 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||||
|  | 		bootargs-append = " swiotlb=1"; | ||||||
|  | 	#else | ||||||
|  | 		bootargs-append = " swiotlb=1 coherent_pool=2M"; | ||||||
|  | 	#endif | ||||||
|  | 		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  |          15MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_1|              |                         | | ||||||
|  | 	 * |  M3 Dump |  0x4E200000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_1|              |                         | | ||||||
|  | 	 * |   QDSS   |  0x4E300000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |   data   |  0x4E400000  |          15MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |  M3 Dump |  0x4F300000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |   QDSS   |  0x4F400000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * |                                                   | | ||||||
|  | 	 * |            Rest of the memory for Linux           | | ||||||
|  | 	 * |                                                   | | ||||||
|  | 	 * +===================================================+ | ||||||
|  | 	 */ | ||||||
|  | 		q6_mem_regions: q6_mem_regions@4B000000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4B000000 0x0 0x4500000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		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 0xF00000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		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_data2: q6_qcn6122_data2@4E400000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4E400000 0x0 0xF00000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		m3_dump_qcn6122_2: m3_dump_qcn6122_2@4F300000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4F300000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_etr_2: q6_qcn6122_etr_2@4F400000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4F400000 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  |          14MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * |  IPQ5018 |              |                         | | ||||||
|  | 	 * |  M3 Dump |  0x4D200000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * |  IPQ5018 |              |                         | | ||||||
|  | 	 * |   QDSS   |  0x4D300000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * |  IPQ5018 |              |                         | | ||||||
|  | 	 * |  Caldb   |  0x4D400000  |           2MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_1|              |                         | | ||||||
|  | 	 * |   data   |  0x4D600000  |          16MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_1|              |                         | | ||||||
|  | 	 * |  M3 Dump |  0x4E600000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_1|              |                         | | ||||||
|  | 	 * |   QDSS   |  0x4E700000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_1|              |                         | | ||||||
|  | 	 * |  Caldb   |  0x4E800000  |           5MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |   data   |  0x4ED00000  |          16MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |  M3 Dump |  0x4FD00000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |   QDSS   |  0x4FE00000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |  Caldb   |  0x4FF00000  |           5MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * |                                                   | | ||||||
|  | 	 * |            Rest of the memory for Linux           | | ||||||
|  | 	 * |                                                   | | ||||||
|  | 	 * +===================================================+ | ||||||
|  | 	 */ | ||||||
|  | 		q6_mem_regions: q6_mem_regions@4B000000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4B000000 0x0 0x5400000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		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 0xE00000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		m3_dump: m3_dump@4D200000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4D200000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_etr_region: q6_etr_dump@4D300000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4D300000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_caldb_region: q6_caldb_region@4D400000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4D400000 0x0 0x200000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_data1: q6_qcn6122_data1@4D600000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4D600000 0x0 0x1000000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		m3_dump_qcn6122_1: m3_dump_qcn6122_1@4E600000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4E600000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_etr_1: q6_qcn6122_etr_1@4E700000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4E700000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_caldb_1: q6_qcn6122_caldb_1@4E800000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4E800000 0x0 0x500000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_data2: q6_qcn6122_data2@4E900000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4ED00000 0x0 0x1000000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		m3_dump_qcn6122_2: m3_dump_qcn6122_2@4FD00000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4FD00000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_etr_2: q6_qcn6122_etr_2@4FE00000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4FE00000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_caldb_2: q6_qcn6122_caldb_2@4FF00000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4FF00000 0x0 0x500000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 	#endif | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	soc { | ||||||
|  | 		gpio-watchdog { | ||||||
|  | 			compatible = "linux,wdt-gpio"; | ||||||
|  | 			gpios = <&tlmm 27 GPIO_ACTIVE_LOW>; | ||||||
|  | 			hw_algo = "toggle"; | ||||||
|  | 			hw_margin_ms = <5000>; | ||||||
|  | 			always-running; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		serial@78af000 { | ||||||
|  | 			status = "ok"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		blsp1_uart2: serial@78b0000 { | ||||||
|  | 			pinctrl-0 = <&blsp1_uart_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		qpic_bam: dma@7984000{ | ||||||
|  | 			status = "ok"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		nand: qpic-nand@79b0000 { | ||||||
|  | 			pinctrl-0 = <&qspi_nand_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 			status = "ok"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		spi_0: spi@78b5000 { /* BLSP1 QUP0 */ | ||||||
|  | 			pinctrl-0 = <&blsp0_spi_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 			cs-select = <0>; | ||||||
|  | 			status = "ok"; | ||||||
|  |  | ||||||
|  | 			m25p80@0 { | ||||||
|  | 				#address-cells = <1>; | ||||||
|  | 				#size-cells = <1>; | ||||||
|  | 				reg = <0>; | ||||||
|  | 				compatible = "n25q128a11"; | ||||||
|  | 				linux,modalias = "m25p80", "n25q128a11"; | ||||||
|  | 				spi-max-frequency = <50000000>; | ||||||
|  | 				use-default-sizes; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		mdio0: mdio@88000 { | ||||||
|  | 			status = "ok"; | ||||||
|  |  | ||||||
|  | 			ethernet-phy@0 { | ||||||
|  | 				reg = <7>; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		mdio1: mdio@90000 { | ||||||
|  | 			status = "ok"; | ||||||
|  | 			pinctrl-0 = <&mdio1_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 			phy-reset-gpio = <&tlmm 39 0>; | ||||||
|  |  | ||||||
|  | 			ethernet-phy@0 { | ||||||
|  | 				reg = <28>; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		ess-instance { | ||||||
|  | 			num_devices = <0x1>; | ||||||
|  | 			ess-switch@0x39c00000 { | ||||||
|  | 				switch_mac_mode = <0xf>; /* mac mode for uniphy instance*/ | ||||||
|  | 				cmnblk_clk = "internal_96MHz"; /* cmnblk clk*/ | ||||||
|  | 				qcom,port_phyinfo { | ||||||
|  | 					port@0 { | ||||||
|  | 						port_id = <1>; | ||||||
|  | 						phy_address = <7>; | ||||||
|  | 						mdiobus = <&mdio0>; | ||||||
|  | 					}; | ||||||
|  | 					port@1 { | ||||||
|  | 						port_id = <2>; | ||||||
|  | 						phy_address = <0x1c>; | ||||||
|  | 						mdiobus = <&mdio1>; | ||||||
|  | 						port_mac_sel = "QGMAC_PORT"; | ||||||
|  | 					}; | ||||||
|  | 				}; | ||||||
|  | 				led_source@0 { | ||||||
|  | 					source = <0>; | ||||||
|  | 					mode = "normal"; | ||||||
|  | 					speed = "all"; | ||||||
|  | 					blink_en = "enable"; | ||||||
|  | 					active = "high"; | ||||||
|  | 				}; | ||||||
|  | 			}; | ||||||
|  | 				ess-switch1@1 { | ||||||
|  | 				compatible = "qcom,ess-switch-qca83xx"; | ||||||
|  | 				device_id = <1>; | ||||||
|  | 				switch_access_mode = "mdio"; | ||||||
|  | 				mdio-bus = <&mdio1>; | ||||||
|  | 				reset_gpio = <0x28>; | ||||||
|  | 				switch_cpu_bmp = <0x40>;  /* cpu port bitmap */ | ||||||
|  | 				switch_lan_bmp = <0x1e>; /* lan port bitmap */ | ||||||
|  | 				switch_wan_bmp = <0x0>;  /* wan port bitmap */ | ||||||
|  | 				qca,ar8327-initvals = < | ||||||
|  | 						0x00004 0x7600000   /* PAD0_MODE */ | ||||||
|  | 						0x00008 0x1000000   /* PAD5_MODE */ | ||||||
|  | 						0x0000c 0x80        /* PAD6_MODE */ | ||||||
|  | 						0x00010 0x2613a0    /* PORT6 FORCE MODE*/ | ||||||
|  | 						0x000e4 0xaa545     /* MAC_POWER_SEL */ | ||||||
|  | 						0x000e0 0xc74164de  /* SGMII_CTRL */ | ||||||
|  | 						0x0007c 0x4e        /* PORT0_STATUS */ | ||||||
|  | 						0x00094 0x4e        /* PORT6_STATUS */ | ||||||
|  | 				>; | ||||||
|  | 				qcom,port_phyinfo { | ||||||
|  | 					port@0 { | ||||||
|  | 						port_id = <1>; | ||||||
|  | 						phy_address = <28>; | ||||||
|  | 					}; | ||||||
|  | 				}; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		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"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		dp2 { | ||||||
|  | 			device_type = "network"; | ||||||
|  | 			compatible = "qcom,nss-dp"; | ||||||
|  | 			clocks = <&gcc GCC_SNOC_GMAC1_AXI_CLK>; | ||||||
|  | 			clock-names = "nss-snoc-gmac-axi-clk"; | ||||||
|  | 			qcom,id = <2>; | ||||||
|  | 			reg = <0x39D00000 0x10000>; | ||||||
|  | 			interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>; | ||||||
|  | 			qcom,mactype = <2>; | ||||||
|  | 			qcom,link-poll = <1>; | ||||||
|  | 			qcom,phy-mdio-addr = <28>; | ||||||
|  | 			mdio-bus = <&mdio1>; | ||||||
|  | 			local-mac-address = [000000000000]; | ||||||
|  | 			phy-mode = "sgmii"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		qcom,test@0 { | ||||||
|  | 			status = "ok"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		nss-macsec1 { | ||||||
|  | 			compatible = "qcom,nss-macsec"; | ||||||
|  | 			phy_addr = <0x1c>; | ||||||
|  | 			mdiobus = <&mdio1>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		lpass: lpass@0xA000000{ | ||||||
|  | 			status = "disabled"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		pcm: pcm@0xA3C0000{ | ||||||
|  | 			pinctrl-0 = <&audio_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 			status = "disabled"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		pcm_lb: pcm_lb@0 { | ||||||
|  | 			status = "disabled"; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	thermal-zones { | ||||||
|  | 		status = "ok"; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &tlmm { | ||||||
|  | 	pinctrl-0 = <&blsp0_uart_pins &phy_led_pins>; | ||||||
|  | 	pinctrl-names = "default"; | ||||||
|  |  | ||||||
|  | 	blsp0_uart_pins: uart_pins { | ||||||
|  | 		blsp0_uart_rx_tx { | ||||||
|  | 			pins = "gpio20", "gpio21"; | ||||||
|  | 			function = "blsp0_uart0"; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	blsp1_uart_pins: blsp1_uart_pins { | ||||||
|  | 		blsp1_uart_rx_tx { | ||||||
|  | 			pins = "gpio22", "gpio24", "gpio23", "gpio25"; | ||||||
|  | 			function = "blsp1_uart2"; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	blsp0_spi_pins: blsp0_spi_pins { | ||||||
|  | 		mux { | ||||||
|  | 			pins = "gpio10", "gpio11", "gpio12", "gpio13"; | ||||||
|  | 			function = "blsp0_spi"; | ||||||
|  | 			drive-strength = <2>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	qspi_nand_pins: qspi_nand_pins { | ||||||
|  | 		qspi_clock { | ||||||
|  | 			pins = "gpio9"; | ||||||
|  | 			function = "qspi_clk"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_cs { | ||||||
|  | 			pins = "gpio8"; | ||||||
|  | 			function = "qspi_cs"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_data_0 { | ||||||
|  | 			pins = "gpio7"; | ||||||
|  | 			function = "qspi0"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_data_1 { | ||||||
|  | 			pins = "gpio6"; | ||||||
|  | 			function = "qspi1"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_data_2 { | ||||||
|  | 			pins = "gpio5"; | ||||||
|  | 			function = "qspi2"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_data_3 { | ||||||
|  | 			pins = "gpio4"; | ||||||
|  | 			function = "qspi3"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	mdio1_pins: mdio_pinmux { | ||||||
|  | 		mux_0 { | ||||||
|  | 			pins = "gpio36"; | ||||||
|  | 			function = "mdc"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-up; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		mux_1 { | ||||||
|  | 			pins = "gpio37"; | ||||||
|  | 			function = "mdio"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-up; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	phy_led_pins: phy_led_pins { | ||||||
|  | 		gephy_led_pin { | ||||||
|  | 			pins = "gpio46"; | ||||||
|  | 			function = "led0"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-down; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	i2c_pins: i2c_pins { | ||||||
|  | 		i2c_scl { | ||||||
|  | 			pins = "gpio25"; | ||||||
|  | 			function = "blsp2_i2c1"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		i2c_sda { | ||||||
|  | 			pins = "gpio26"; | ||||||
|  | 			function = "blsp2_i2c1"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	button_pins: button_pins { | ||||||
|  | 		reset_button { | ||||||
|  | 			pins = "gpio38"; | ||||||
|  | 			function = "gpio"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-up; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | audio_pins: audio_pinmux { | ||||||
|  | }; | ||||||
|  |         leds_pins: leds_pins { | ||||||
|  |                 led_5g { | ||||||
|  |                         pins = "gpio34"; | ||||||
|  |                         function = "gpio"; | ||||||
|  |                         drive-strength = <8>; | ||||||
|  |                         bias-pull-down; | ||||||
|  |                 }; | ||||||
|  |                 led_2g { | ||||||
|  |                         pins = "gpio33"; | ||||||
|  |                         function = "gpio"; | ||||||
|  |                         drive-strength = <8>; | ||||||
|  |                         bias-pull-down; | ||||||
|  |                 }; | ||||||
|  |                 led_sys { | ||||||
|  |                         pins = "gpio26"; | ||||||
|  |                         function = "gpio"; | ||||||
|  |                         drive-strength = <8>; | ||||||
|  |                         bias-pull-down; | ||||||
|  |                 }; | ||||||
|  | 		led_onekey { | ||||||
|  |                         pins = "gpio28"; | ||||||
|  |                         function = "gpio"; | ||||||
|  |                         drive-strength = <8>; | ||||||
|  |                         bias-pull-down; | ||||||
|  |                 }; | ||||||
|  |         }; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &soc { | ||||||
|  | 	gpio_keys { | ||||||
|  | 		compatible = "gpio-keys"; | ||||||
|  | 		pinctrl-0 = <&button_pins>; | ||||||
|  | 		pinctrl-names = "default"; | ||||||
|  |  | ||||||
|  | 		button@1 { | ||||||
|  | 			label = "reset"; | ||||||
|  | 			linux,code = <KEY_RESTART>; | ||||||
|  | 			gpios = <&tlmm 38 GPIO_ACTIVE_LOW>; | ||||||
|  | 			linux,input-type = <1>; | ||||||
|  | 			debounce-interval = <60>; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  |         leds { | ||||||
|  |                 compatible = "gpio-leds"; | ||||||
|  |                 pinctrl-0 = <&leds_pins>; | ||||||
|  |                 pinctrl-names = "default"; | ||||||
|  |  | ||||||
|  |                 led_blue: led@34 { | ||||||
|  |                         label = "led_5g"; | ||||||
|  |                         gpios = <&tlmm 34 GPIO_ACTIVE_LOW>; | ||||||
|  |                         linux,default-trigger = "led_5g"; | ||||||
|  |                         default-state = "off"; | ||||||
|  |                 }; | ||||||
|  |                 led_green: led@33 { | ||||||
|  |                         label = "led_2g"; | ||||||
|  |                         gpios = <&tlmm 33 GPIO_ACTIVE_LOW>; | ||||||
|  |                         linux,default-trigger = "led_2g"; | ||||||
|  |                         default-state = "off"; | ||||||
|  |                 }; | ||||||
|  |                 led_red: led@26 { | ||||||
|  |                         label = "led_sys"; | ||||||
|  |                         gpios = <&tlmm 26 GPIO_ACTIVE_LOW>; | ||||||
|  |                         linux,default-trigger = "led_sys"; | ||||||
|  |                         default-state = "off"; | ||||||
|  |                 }; | ||||||
|  | 		led@28 { | ||||||
|  |                         label = "led_onekey"; | ||||||
|  |                         gpios = <&tlmm 28 GPIO_ACTIVE_LOW>; | ||||||
|  |                         linux,default-trigger = "led_onekey"; | ||||||
|  |                         default-state = "off"; | ||||||
|  |                 }; | ||||||
|  |         }; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &q6v5_wcss { | ||||||
|  | 	compatible = "qcom,ipq5018-q6-mpd"; | ||||||
|  | 	#address-cells = <1>; | ||||||
|  | 	#size-cells = <1>; | ||||||
|  | 	ranges; | ||||||
|  | 	firmware = "IPQ5018/q6_fw.mdt"; | ||||||
|  | 	reg = <0x0cd00000 0x4040>, | ||||||
|  | 		<0x1938000 0x8>, | ||||||
|  | 		<0x193d204 0x4>; | ||||||
|  | 	reg-names = "qdsp6", | ||||||
|  | 			"tcsr-msip", | ||||||
|  | 			"tcsr-q6"; | ||||||
|  | 	resets = <&gcc GCC_WCSSAON_RESET>, | ||||||
|  | 			<&gcc GCC_WCSS_Q6_BCR>; | ||||||
|  |  | ||||||
|  | 	reset-names = "wcss_aon_reset", | ||||||
|  | 			"wcss_q6_reset"; | ||||||
|  |  | ||||||
|  | 	clocks = <&gcc GCC_Q6_AXIS_CLK>, | ||||||
|  | 		<&gcc GCC_WCSS_ECAHB_CLK>, | ||||||
|  | 		<&gcc GCC_Q6_AXIM_CLK>, | ||||||
|  | 		<&gcc GCC_Q6_AXIM2_CLK>, | ||||||
|  | 		<&gcc GCC_Q6_AHB_CLK>, | ||||||
|  | 		<&gcc GCC_Q6_AHB_S_CLK>, | ||||||
|  | 		<&gcc GCC_WCSS_AXI_S_CLK>; | ||||||
|  | 	clock-names = "gcc_q6_axis_clk", | ||||||
|  | 		"gcc_wcss_ecahb_clk", | ||||||
|  | 		"gcc_q6_axim_clk", | ||||||
|  | 		"gcc_q6_axim2_clk", | ||||||
|  | 		"gcc_q6_ahb_clk", | ||||||
|  | 		"gcc_q6_ahb_s_clk", | ||||||
|  | 		"gcc_wcss_axi_s_clk"; | ||||||
|  |  | ||||||
|  | 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||||
|  | 		memory-region = <&q6_mem_regions>, <&q6_etr_region>; | ||||||
|  | 	#else | ||||||
|  | 		memory-region = <&q6_mem_regions>, <&q6_etr_region>, | ||||||
|  | 				<&q6_caldb_region>; | ||||||
|  | 	#endif | ||||||
|  |  | ||||||
|  | 	qcom,rproc = <&q6v5_wcss>; | ||||||
|  | 	qcom,bootargs_smem = <507>; | ||||||
|  | 	boot-args = <0x1 0x4 0x3 0x0F 0x0 0x0>, | ||||||
|  | 			<0x2 0x4 0x2 0x12 0x0 0x0>; | ||||||
|  | 	status = "ok"; | ||||||
|  | 	q6_wcss_pd1: remoteproc_pd1@4ab000 { | ||||||
|  | 		compatible = "qcom,ipq5018-wcss-ahb-mpd"; | ||||||
|  | 		reg = <0x4ab000 0x20>; | ||||||
|  | 		reg-names = "rmb"; | ||||||
|  | 		firmware = "IPQ5018/q6_fw.mdt"; | ||||||
|  | 		m3_firmware = "IPQ5018/m3_fw.mdt"; | ||||||
|  | 		interrupts-extended = <&wcss_smp2p_in 8 0>, | ||||||
|  | 					<&wcss_smp2p_in 9 0>, | ||||||
|  | 					<&wcss_smp2p_in 12 0>, | ||||||
|  | 					<&wcss_smp2p_in 11 0>; | ||||||
|  | 		interrupt-names = "fatal", | ||||||
|  | 					"ready", | ||||||
|  | 					"spawn-ack", | ||||||
|  | 					"stop-ack"; | ||||||
|  |  | ||||||
|  | 		resets = <&gcc GCC_WCSSAON_RESET>, | ||||||
|  | 				<&gcc GCC_WCSS_BCR>, | ||||||
|  | 				<&gcc GCC_CE_BCR>; | ||||||
|  | 		reset-names = "wcss_aon_reset", | ||||||
|  | 				"wcss_reset", | ||||||
|  | 				"ce_reset"; | ||||||
|  |  | ||||||
|  | 		clocks = <&gcc GCC_WCSS_AHB_S_CLK>, | ||||||
|  | 				<&gcc GCC_WCSS_ACMT_CLK>, | ||||||
|  | 				<&gcc GCC_WCSS_AXI_M_CLK>; | ||||||
|  | 		clock-names = "gcc_wcss_ahb_s_clk", | ||||||
|  | 					"gcc_wcss_acmt_clk", | ||||||
|  | 					"gcc_wcss_axi_m_clk"; | ||||||
|  |  | ||||||
|  | 		qcom,halt-regs = <&tcsr_q6_block 0xa000 0xd000 0x0>; | ||||||
|  |  | ||||||
|  | 		qcom,smem-states = <&wcss_smp2p_out 8>, | ||||||
|  | 					<&wcss_smp2p_out 9>, | ||||||
|  | 					<&wcss_smp2p_out 10>; | ||||||
|  | 		qcom,smem-state-names = "shutdown", | ||||||
|  | 					"stop", | ||||||
|  | 					"spawn"; | ||||||
|  | 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||||
|  | 		memory-region = <&q6_ipq5018_data>, <&m3_dump>, | ||||||
|  | 				<&q6_etr_region>; | ||||||
|  | 	#else | ||||||
|  | 		memory-region = <&q6_ipq5018_data>, <&m3_dump>, | ||||||
|  | 				<&q6_etr_region>, <&q6_caldb_region>; | ||||||
|  | 	#endif | ||||||
|  |  | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	q6_wcss_pd2: remoteproc_pd2 { | ||||||
|  | 		compatible = "qcom,ipq5018-wcss-pcie-mpd"; | ||||||
|  | 		firmware = "IPQ5018/q6_fw.mdt"; | ||||||
|  | 		m3_firmware = "qcn6122/m3_fw.mdt"; | ||||||
|  | 		interrupts-extended = <&wcss_smp2p_in 16 0>, | ||||||
|  | 					<&wcss_smp2p_in 17 0>, | ||||||
|  | 					<&wcss_smp2p_in 20 0>, | ||||||
|  | 					<&wcss_smp2p_in 19 0>; | ||||||
|  | 		interrupt-names = "fatal", | ||||||
|  | 					"ready", | ||||||
|  | 					"spawn-ack", | ||||||
|  | 					"stop-ack"; | ||||||
|  |  | ||||||
|  | 		qcom,smem-states = <&wcss_smp2p_out 16>, | ||||||
|  | 					<&wcss_smp2p_out 17>, | ||||||
|  | 					<&wcss_smp2p_out 18>; | ||||||
|  | 		qcom,smem-state-names = "shutdown", | ||||||
|  | 					"stop", | ||||||
|  | 					"spawn"; | ||||||
|  | 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||||
|  | 		memory-region = <&q6_qcn6122_data1>, <&m3_dump_qcn6122_1>, | ||||||
|  | 				<&q6_qcn6122_etr_1>; | ||||||
|  | 	#else | ||||||
|  | 		memory-region = <&q6_qcn6122_data1>, <&m3_dump_qcn6122_1>, | ||||||
|  | 				<&q6_qcn6122_etr_1>, <&q6_qcn6122_caldb_1>; | ||||||
|  | 	#endif | ||||||
|  |  | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	q6_wcss_pd3: remoteproc_pd3 { | ||||||
|  | 		compatible = "qcom,ipq5018-wcss-pcie-mpd"; | ||||||
|  | 		firmware = "IPQ5018/q6_fw.mdt"; | ||||||
|  | 		interrupts-extended = <&wcss_smp2p_in 24 0>, | ||||||
|  | 					<&wcss_smp2p_in 25 0>, | ||||||
|  | 					<&wcss_smp2p_in 28 0>, | ||||||
|  | 					<&wcss_smp2p_in 27 0>; | ||||||
|  | 		interrupt-names = "fatal", | ||||||
|  | 					"ready", | ||||||
|  | 					"spawn-ack", | ||||||
|  | 					"stop-ack"; | ||||||
|  |  | ||||||
|  | 		qcom,smem-states = <&wcss_smp2p_out 24>, | ||||||
|  | 					<&wcss_smp2p_out 25>, | ||||||
|  | 					<&wcss_smp2p_out 26>; | ||||||
|  | 		qcom,smem-state-names = "shutdown", | ||||||
|  | 					"stop", | ||||||
|  | 					"spawn"; | ||||||
|  | 	#ifdef	__IPQ_MEM_PROFILE_256_MB__ | ||||||
|  | 		memory-region = <&q6_qcn6122_data2>, <&m3_dump_qcn6122_2>, | ||||||
|  | 				<&q6_qcn6122_etr_2>; | ||||||
|  | 	#else | ||||||
|  | 		memory-region = <&q6_qcn6122_data2>, <&m3_dump_qcn6122_2>, | ||||||
|  | 				<&q6_qcn6122_etr_2>, <&q6_qcn6122_caldb_2>; | ||||||
|  | 	#endif | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &i2c_0 { | ||||||
|  | 	pinctrl-0 = <&i2c_pins>; | ||||||
|  | 	pinctrl-names = "default"; | ||||||
|  | 	status = "disabled"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &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 = <0x4D400000 0x4D400000 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 = <0x50>; | ||||||
|  | #ifdef __CNSS2__ | ||||||
|  | 	qcom,bdf-addr = <0x4D600000 0x4D600000 0x4D300000 0x0 0x0>; | ||||||
|  | 	qcom,caldb-addr = <0x4E800000 0x4E800000 0 0 0>; | ||||||
|  | 	qcom,caldb-size = <0x500000>; | ||||||
|  | 	mem-region = <&q6_qcn6122_data1>; | ||||||
|  | #else | ||||||
|  | 	memory-region = <&q6_qcn6122_data1>; | ||||||
|  | #endif | ||||||
|  | 	status = "disabled"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &wifi2 { | ||||||
|  | 	/* QCN6122 6G */ | ||||||
|  | 	qcom,multipd_arch; | ||||||
|  | 	qcom,userpd-subsys-name = "q6v5_wcss_userpd3"; | ||||||
|  | 	qcom,rproc = <&q6_wcss_pd3>; | ||||||
|  | #ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||||
|  | 	qcom,tgt-mem-mode = <2>; | ||||||
|  | #else | ||||||
|  | 	qcom,tgt-mem-mode = <1>; | ||||||
|  | #endif | ||||||
|  | 	qcom,board_id = <0xb0>; | ||||||
|  | #ifdef __CNSS2__ | ||||||
|  | 	qcom,bdf-addr = <0x4ED00000 0x4ED00000 0x4E400000 0x0 0x0>; | ||||||
|  | 	qcom,caldb-addr = <0x4FF00000 0x4FF00000 0 0 0>; | ||||||
|  | 	qcom,caldb-size = <0x500000>; | ||||||
|  | 	mem-region = <&q6_qcn6122_data2>; | ||||||
|  | #else | ||||||
|  | 	memory-region = <&q6_qcn6122_data2>; | ||||||
|  | #endif | ||||||
|  | 	status = "ok"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | &usb3 { | ||||||
|  | 	status = "ok"; | ||||||
|  | 	device-power-gpio = <&tlmm 24 1>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &dwc_0 { | ||||||
|  | 	/delete-property/ #phy-cells; | ||||||
|  | 	/delete-property/ phys; | ||||||
|  | 	/delete-property/ phy-names; | ||||||
|  | }; | ||||||
|  | &hs_m31phy_0 { | ||||||
|  | 	status = "ok"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &eud { | ||||||
|  | 	status = "ok"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &pcie_x1 { | ||||||
|  | 	#status = "disabled"; | ||||||
|  | 	#perst-gpio = <&tlmm 18 1>; | ||||||
|  | 	perst-gpio = <&tlmm 18 GPIO_ACTIVE_LOW>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &pcie_x2 { | ||||||
|  | 	#status = "disabled"; | ||||||
|  | 	#perst-gpio = <&tlmm 15 1>; | ||||||
|  | 	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 >; | ||||||
|  |  | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
| @@ -0,0 +1,731 @@ | |||||||
|  | /dts-v1/; | ||||||
|  | /* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. | ||||||
|  |  * Copyright (c) 2025, Shubham Vishwakarma <shubhamvis98@fossfrog.in>. | ||||||
|  |  * | ||||||
|  |  * 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 = "Indio UM-335AX"; | ||||||
|  | 	compatible = "indio,um-335ax", "qcom,ipq5018-ap-mp03.1", "qcom,ipq5018-mp03.1", "qcom,ipq5018"; | ||||||
|  | 	interrupt-parent = <&intc>; | ||||||
|  |  | ||||||
|  | 	aliases { | ||||||
|  | 		sdhc1 = &sdhc_1; /* SDC1 eMMC slot */ | ||||||
|  | 		serial0 = &blsp1_uart1; | ||||||
|  | 		serial1 = &blsp1_uart2; | ||||||
|  | 		ethernet0 = "/soc/dp1"; | ||||||
|  | 		ethernet1 = "/soc/dp2"; | ||||||
|  | 		led-boot = &led_red; | ||||||
|  | 		led-failsafe = &led_red; | ||||||
|  | 		led-running = &led_red; | ||||||
|  | 		led-upgrade = &led_red; | ||||||
|  |  | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	chosen { | ||||||
|  | 		bootargs = "console=ttyMSM0,115200,n8 rw init=/init"; | ||||||
|  | 		bootargs-append = " swiotlb=1 coherent_pool=2M"; | ||||||
|  | 		stdout-path = "serial0"; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	gpio-watchdog { | ||||||
|  | 		compatible = "linux,wdt-gpio"; | ||||||
|  | 		gpios = <&tlmm 27 GPIO_ACTIVE_LOW>; | ||||||
|  | 		hw_algo = "toggle"; | ||||||
|  | 		hw_margin_ms = <5000>; | ||||||
|  | 		always-running; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	reserved-memory { | ||||||
|  | 		q6_mem_regions: q6_mem_regions@4B000000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4B000000 0x0 0x1800000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_ipq5018_data: q6_ipq5018_data@4C400000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4C400000 0x0 0xE00000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		m3_dump: m3_dump@4C800000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4C800000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_etr_region: q6_etr_dump@4C900000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4C900000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_caldb_region: q6_caldb_region@4CA00000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4CA00000 0x0 0x200000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		qcn9000_pcie0: qcn9000_pcie0@4cc00000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4CC00000 0x0 0x2600000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 	#if defined(__CNSS2__) | ||||||
|  | 		mhi_region1: dma_pool1@4F200000 { | ||||||
|  | 			compatible = "shared-dma-pool"; | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4F200000 0x0 0x900000>; | ||||||
|  | 		}; | ||||||
|  | 	#endif | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	soc { | ||||||
|  | 		serial@78af000 { | ||||||
|  | 			status = "ok"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		blsp1_uart2: serial@78b0000 { | ||||||
|  | 			pinctrl-0 = <&blsp1_uart_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		qpic_bam: dma@7984000{ | ||||||
|  | 			status = "ok"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		nand: qpic-nand@79b0000 { | ||||||
|  | 			pinctrl-0 = <&qspi_nand_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 			status = "ok"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		spi_0: spi@78b5000 { /* BLSP1 QUP0 */ | ||||||
|  | 			pinctrl-0 = <&blsp0_spi_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 			cs-select = <0>; | ||||||
|  | 			status = "ok"; | ||||||
|  |  | ||||||
|  | 			m25p80@0 { | ||||||
|  | 				#address-cells = <1>; | ||||||
|  | 				#size-cells = <1>; | ||||||
|  | 				reg = <0>; | ||||||
|  | 				compatible = "n25q128a11"; | ||||||
|  | 				linux,modalias = "m25p80", "n25q128a11"; | ||||||
|  | 				spi-max-frequency = <50000000>; | ||||||
|  | 				use-default-sizes; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		mdio0: mdio@88000 { | ||||||
|  | 			status = "ok"; | ||||||
|  |  | ||||||
|  | 			ethernet-phy@0 { | ||||||
|  | 				reg = <7>; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		mdio1: mdio@90000 { | ||||||
|  | 			status = "ok"; | ||||||
|  | 			pinctrl-0 = <&mdio1_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 			phy-reset-gpio = <&tlmm 39 0>; | ||||||
|  |  | ||||||
|  | 			ethernet-phy@0 { | ||||||
|  | 				reg = <28>; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		ess-instance { | ||||||
|  | 			num_devices = <0x1>; | ||||||
|  | 			ess-switch@0x39c00000 { | ||||||
|  | 				switch_mac_mode = <0xf>; /* mac mode for uniphy instance*/ | ||||||
|  | 				cmnblk_clk = "internal_96MHz"; /* cmnblk clk*/ | ||||||
|  | 				qcom,port_phyinfo { | ||||||
|  | 					port@0 { | ||||||
|  | 						port_id = <1>; | ||||||
|  | 						phy_address = <7>; | ||||||
|  | 						mdiobus = <&mdio0>; | ||||||
|  | 					}; | ||||||
|  | 					port@1 { | ||||||
|  | 						port_id = <2>; | ||||||
|  | 						phy_address = <0x1c>; | ||||||
|  | 						mdiobus = <&mdio1>; | ||||||
|  | 						port_mac_sel = "QGMAC_PORT"; | ||||||
|  | 					}; | ||||||
|  | 				}; | ||||||
|  | 				led_source@0 { | ||||||
|  | 					source = <0>; | ||||||
|  | 					mode = "normal"; | ||||||
|  | 					speed = "all"; | ||||||
|  | 					blink_en = "enable"; | ||||||
|  | 					active = "high"; | ||||||
|  | 				}; | ||||||
|  | 			}; | ||||||
|  | 				ess-switch1@1 { | ||||||
|  | 				compatible = "qcom,ess-switch-qca83xx"; | ||||||
|  | 				device_id = <1>; | ||||||
|  | 				switch_access_mode = "mdio"; | ||||||
|  | 				mdio-bus = <&mdio1>; | ||||||
|  | 				reset_gpio = <0x28>; | ||||||
|  | 				switch_cpu_bmp = <0x40>;  /* cpu port bitmap */ | ||||||
|  | 				switch_lan_bmp = <0x1e>; /* lan port bitmap */ | ||||||
|  | 				switch_wan_bmp = <0x0>;  /* wan port bitmap */ | ||||||
|  | 				qca,ar8327-initvals = < | ||||||
|  | 						0x00004 0x7600000   /* PAD0_MODE */ | ||||||
|  | 						0x00008 0x1000000   /* PAD5_MODE */ | ||||||
|  | 						0x0000c 0x80        /* PAD6_MODE */ | ||||||
|  | 						0x00010 0x2613a0    /* PORT6 FORCE MODE*/ | ||||||
|  | 						0x000e4 0xaa545     /* MAC_POWER_SEL */ | ||||||
|  | 						0x000e0 0xc74164de  /* SGMII_CTRL */ | ||||||
|  | 						0x0007c 0x4e        /* PORT0_STATUS */ | ||||||
|  | 						0x00094 0x4e        /* PORT6_STATUS */ | ||||||
|  | 				>; | ||||||
|  | 				qcom,port_phyinfo { | ||||||
|  | 					port@0 { | ||||||
|  | 						port_id = <1>; | ||||||
|  | 						phy_address = <28>; | ||||||
|  | 					}; | ||||||
|  | 				}; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		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"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		dp2 { | ||||||
|  | 			device_type = "network"; | ||||||
|  | 			compatible = "qcom,nss-dp"; | ||||||
|  | 			clocks = <&gcc GCC_SNOC_GMAC1_AXI_CLK>; | ||||||
|  | 			clock-names = "nss-snoc-gmac-axi-clk"; | ||||||
|  | 			qcom,id = <2>; | ||||||
|  | 			reg = <0x39D00000 0x10000>; | ||||||
|  | 			interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>; | ||||||
|  | 			qcom,mactype = <2>; | ||||||
|  | 			qcom,link-poll = <1>; | ||||||
|  | 			qcom,phy-mdio-addr = <28>; | ||||||
|  | 			mdio-bus = <&mdio1>; | ||||||
|  | 			local-mac-address = [000000000000]; | ||||||
|  | 			phy-mode = "sgmii"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		qcom,test@0 { | ||||||
|  | 			status = "ok"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		nss-macsec1 { | ||||||
|  | 			compatible = "qcom,nss-macsec"; | ||||||
|  | 			phy_addr = <0x1c>; | ||||||
|  | 			mdiobus = <&mdio1>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		lpass: lpass@0xA000000{ | ||||||
|  | 			status = "disabled"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		pcm: pcm@0xA3C0000{ | ||||||
|  | 			pinctrl-0 = <&audio_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 			status = "disabled"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		pcm_lb: pcm_lb@0 { | ||||||
|  | 			status = "disabled"; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	thermal-zones { | ||||||
|  | 		status = "ok"; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &tlmm { | ||||||
|  | 	pinctrl-0 = <&blsp0_uart_pins &phy_led_pins>; | ||||||
|  | 	pinctrl-names = "default"; | ||||||
|  |  | ||||||
|  | 	blsp0_uart_pins: uart_pins { | ||||||
|  | 		blsp0_uart_rx_tx { | ||||||
|  | 			pins = "gpio20", "gpio21"; | ||||||
|  | 			function = "blsp0_uart0"; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	blsp1_uart_pins: blsp1_uart_pins { | ||||||
|  | 		blsp1_uart_rx_tx { | ||||||
|  | 			pins = "gpio22", "gpio24", "gpio23", "gpio25"; | ||||||
|  | 			function = "blsp1_uart2"; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	blsp0_spi_pins: blsp0_spi_pins { | ||||||
|  | 		mux { | ||||||
|  | 			pins = "gpio10", "gpio11", "gpio12", "gpio13"; | ||||||
|  | 			function = "blsp0_spi"; | ||||||
|  | 			drive-strength = <2>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	qspi_nand_pins: qspi_nand_pins { | ||||||
|  | 		qspi_clock { | ||||||
|  | 			pins = "gpio9"; | ||||||
|  | 			function = "qspi_clk"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_cs { | ||||||
|  | 			pins = "gpio8"; | ||||||
|  | 			function = "qspi_cs"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_data_0 { | ||||||
|  | 			pins = "gpio7"; | ||||||
|  | 			function = "qspi0"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_data_1 { | ||||||
|  | 			pins = "gpio6"; | ||||||
|  | 			function = "qspi1"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_data_2 { | ||||||
|  | 			pins = "gpio5"; | ||||||
|  | 			function = "qspi2"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_data_3 { | ||||||
|  | 			pins = "gpio4"; | ||||||
|  | 			function = "qspi3"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	mdio1_pins: mdio_pinmux { | ||||||
|  | 		mux_0 { | ||||||
|  | 			pins = "gpio36"; | ||||||
|  | 			function = "mdc"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-up; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		mux_1 { | ||||||
|  | 			pins = "gpio37"; | ||||||
|  | 			function = "mdio"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-up; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	phy_led_pins: phy_led_pins { | ||||||
|  | 		gephy_led_pin { | ||||||
|  | 			pins = "gpio46"; | ||||||
|  | 			function = "led0"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-down; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	i2c_pins: i2c_pins { | ||||||
|  | 		i2c_scl { | ||||||
|  | 			pins = "gpio25"; | ||||||
|  | 			function = "blsp2_i2c1"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		i2c_sda { | ||||||
|  | 			pins = "gpio26"; | ||||||
|  | 			function = "blsp2_i2c1"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	button_pins: button_pins { | ||||||
|  | 		reset_button { | ||||||
|  | 			pins = "gpio38"; | ||||||
|  | 			function = "gpio"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-up; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	audio_pins: audio_pinmux { | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	leds_pins: leds_pins { | ||||||
|  | 		led_blue: led_5g { | ||||||
|  | 			label = "led_5g"; | ||||||
|  | 			pins = "gpio34"; | ||||||
|  | 			function = "gpio"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-down; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		led_green: led_2g { | ||||||
|  | 			label = "led_2g"; | ||||||
|  | 			pins = "gpio33"; | ||||||
|  | 			function = "gpio"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-down; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		led_red: led_sys { | ||||||
|  | 			label = "led_sys"; | ||||||
|  | 			pins = "gpio26"; | ||||||
|  | 			function = "gpio"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-down; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		led_onekey { | ||||||
|  | 			pins = "gpio28"; | ||||||
|  | 			function = "gpio"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-down; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &soc { | ||||||
|  | 	gpio_keys { | ||||||
|  | 		compatible = "gpio-keys"; | ||||||
|  | 		pinctrl-0 = <&button_pins>; | ||||||
|  | 		pinctrl-names = "default"; | ||||||
|  |  | ||||||
|  | 		button@1 { | ||||||
|  | 			label = "reset"; | ||||||
|  | 			linux,code = <KEY_RESTART>; | ||||||
|  | 			gpios = <&tlmm 38 GPIO_ACTIVE_LOW>; | ||||||
|  | 			linux,input-type = <1>; | ||||||
|  | 			debounce-interval = <60>; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	leds { | ||||||
|  | 		compatible = "gpio-leds"; | ||||||
|  | 		pinctrl-0 = <&leds_pins>; | ||||||
|  | 		pinctrl-names = "default"; | ||||||
|  |  | ||||||
|  | 		led@33 { | ||||||
|  | 			label = "led_5g"; | ||||||
|  | 			gpios = <&tlmm 34 GPIO_ACTIVE_LOW>; | ||||||
|  | 			linux,default-trigger = "led_5g"; | ||||||
|  | 			default-state = "off"; | ||||||
|  | 		}; | ||||||
|  | 		led@34 { | ||||||
|  | 			label = "led_2g"; | ||||||
|  | 			gpios = <&tlmm 33 GPIO_ACTIVE_LOW>; | ||||||
|  | 			linux,default-trigger = "led_2g"; | ||||||
|  | 			default-state = "off"; | ||||||
|  | 		}; | ||||||
|  | 		led@26 { | ||||||
|  | 			label = "led_sys"; | ||||||
|  | 			gpios = <&tlmm 26 GPIO_ACTIVE_LOW>; | ||||||
|  | 			linux,default-trigger = "led_sys"; | ||||||
|  | 			default-state = "on"; | ||||||
|  | 		}; | ||||||
|  | 		led@28 { | ||||||
|  | 			label = "led_onekey"; | ||||||
|  | 			gpios = <&tlmm 28 GPIO_ACTIVE_LOW>; | ||||||
|  | 			linux,default-trigger = "led_onekey"; | ||||||
|  | 			default-state = "off"; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &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"; | ||||||
|  |  | ||||||
|  | 	memory-region = <&q6_mem_regions>, <&q6_etr_region>, | ||||||
|  | 			<&q6_caldb_region>; | ||||||
|  |  | ||||||
|  | 	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"; | ||||||
|  | 		memory-region = <&q6_ipq5018_data>, <&m3_dump>, | ||||||
|  | 				<&q6_etr_region>, <&q6_caldb_region>; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &i2c_0 { | ||||||
|  | 	pinctrl-0 = <&i2c_pins>; | ||||||
|  | 	pinctrl-names = "default"; | ||||||
|  | 	// status = "disabled"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &usb3 { | ||||||
|  | 	status = "ok"; | ||||||
|  | 	device-power-gpio = <&tlmm 24 1>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &dwc_0 { | ||||||
|  | 	/delete-property/ #phy-cells; | ||||||
|  | 	/delete-property/ phys; | ||||||
|  | 	/delete-property/ phy-names; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &blsp1_uart1 { | ||||||
|  | 	status = "ok"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &ssuniphy_0 { | ||||||
|  | 	status = "ok"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &hs_m31phy_0 { | ||||||
|  | 	status = "ok"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &eud { | ||||||
|  | 	status = "ok"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &pcie_x1 { | ||||||
|  | 	perst-gpio = <&tlmm 18 GPIO_ACTIVE_LOW>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &pcie_x2 { | ||||||
|  | 	status = "ok"; | ||||||
|  | 	perst-gpio = <&tlmm 15 GPIO_ACTIVE_LOW>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &wcss { | ||||||
|  | 	status = "ok"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &pcie_x2phy { | ||||||
|  | 	status = "ok"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &pcie_x1_rp { | ||||||
|  | 	status = "disabled"; | ||||||
|  |  | ||||||
|  | 	mhi_0: qcom,mhi@0 { | ||||||
|  | 		reg = <0 0 0 0 0 >; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &pcie_x2_rp { | ||||||
|  | 	status = "ok"; | ||||||
|  |  | ||||||
|  | 	mhi_1: qcom,mhi@1 { | ||||||
|  | 		reg = <0 0 0 0 0 >; | ||||||
|  | 		qrtr_instance_id = <0x20>; | ||||||
|  | 		qti,disable-rddm-prealloc; | ||||||
|  | 		qti,rddm-seg-len = <0x1000>; | ||||||
|  | 		#address-cells = <0x2>; | ||||||
|  | 		#size-cells = <0x2>; | ||||||
|  | #if defined(__CNSS2__) | ||||||
|  | 		memory-region = <0>,<&mhi_region1>; | ||||||
|  | #else | ||||||
|  | 		base-addr = <0x4CB00000>; | ||||||
|  | 		m3-dump-addr = <0x4DF00000>; | ||||||
|  | 		etr-addr = <0x4E000000>; | ||||||
|  | 		qcom,caldb-addr = <0x4E100000>; | ||||||
|  | 		pageable-addr = <0x4E900000>; | ||||||
|  | 		qcom,tgt-mem-mode = <0x1>; | ||||||
|  | #endif | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &wifi0 { | ||||||
|  | 	/* IPQ5018 */ | ||||||
|  | 	qcom,multipd_arch; | ||||||
|  | 	qcom,rproc = <&q6_wcss_pd1>; | ||||||
|  | 	qcom,userpd-subsys-name = "q6v5_wcss_userpd1"; | ||||||
|  | 	qcom,tgt-mem-mode = <1>; | ||||||
|  | 	qcom,board_id = <0x24>; | ||||||
|  | #ifdef __CNSS2__ | ||||||
|  | 	qcom,bdf-addr = <0x4C400000 0x4C400000 0x4C400000 0x0 0x0>; | ||||||
|  | 	qcom,caldb-addr = <0x4D400000 0x4D400000 0 0 0>; | ||||||
|  | 	qcom,caldb-size = <0x200000>; | ||||||
|  | 	mem-region = <&q6_ipq5018_data>; | ||||||
|  | #else | ||||||
|  | 	memory-region = <&q6_ipq5018_data>; | ||||||
|  | #endif | ||||||
|  | 	status = "ok"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &wifi3 { | ||||||
|  | 	/* QCN9000 5G */ | ||||||
|  | 	board_id = <0xa0>; | ||||||
|  | 	hremote_node = <&qcn9000_pcie0>; | ||||||
|  | #ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||||
|  | 	/* QCN9000 tgt-mem-mode=2 layout - 17MB | ||||||
|  | 	 * +=========+==============+=========+ | ||||||
|  | 	 * |  Region | Start Offset |   Size  | | ||||||
|  | 	 * +---------+--------------+---------+ | ||||||
|  | 	 * | HREMOTE |  0x4C900000  |   11MB  | | ||||||
|  | 	 * +---------+--------------+---------+ | ||||||
|  | 	 * | M3 Dump |  0x4D400000  |   1MB   | | ||||||
|  | 	 * +---------+--------------+---------+ | ||||||
|  | 	 * |   ETR   |  0x4D500000  |   1MB   | | ||||||
|  | 	 * +---------+--------------+---------+ | ||||||
|  | 	 * | Pageable|  0x4D600000  |   4MB   | | ||||||
|  | 	 * +==================================+ | ||||||
|  | 	 */ | ||||||
|  | 	base-addr = <0x4C900000>; | ||||||
|  | 	m3-dump-addr = <0x4D400000>; | ||||||
|  | 	etr-addr = <0x4D500000>; | ||||||
|  | 	caldb-addr = <0>; | ||||||
|  | 	pageable-addr = <0x4D600000>; | ||||||
|  | 	caldb-size = <0>; | ||||||
|  | 	hremote-size = <0xB00000>; | ||||||
|  | 	tgt-mem-mode = <0x2>; | ||||||
|  | 	pageable-size = <0x400000>; | ||||||
|  | #elif __IPQ_MEM_PROFILE_512_MB__ | ||||||
|  | 	/* QCN9000 tgt-mem-mode=1 layout - 26MB | ||||||
|  | 	 * +=========+==============+=========+ | ||||||
|  | 	 * |  Region | Start Offset |   Size  | | ||||||
|  | 	 * +---------+--------------+---------+ | ||||||
|  | 	 * | HREMOTE |  0x4CB00000  |   12MB  | | ||||||
|  | 	 * +---------+--------------+---------+ | ||||||
|  | 	 * | M3 Dump |  0x4D700000  |   1MB   | | ||||||
|  | 	 * +---------+--------------+---------+ | ||||||
|  | 	 * |   ETR   |  0x4D800000  |   1MB   | | ||||||
|  | 	 * +---------+--------------+---------+ | ||||||
|  | 	 * |  Caldb  |  0x4D900000  |   8MB   | | ||||||
|  | 	 * +---------+--------------+---------+ | ||||||
|  | 	 * | Pageable|  0x4E100000  |   4MB   | | ||||||
|  | 	 * +==================================+ | ||||||
|  | 	 */ | ||||||
|  | 	base-addr = <0x4CB00000>; | ||||||
|  | 	m3-dump-addr = <0x4D700000>; | ||||||
|  | 	etr-addr = <0x4D800000>; | ||||||
|  | 	caldb-addr = <0x4D900000>; | ||||||
|  | 	pageable-addr = <0x4E100000>; | ||||||
|  | 	caldb-size = <0x800000>; | ||||||
|  | 	hremote-size = <0xC00000>; | ||||||
|  | 	tgt-mem-mode = <0x1>; | ||||||
|  | 	pageable-size = <0x400000>; | ||||||
|  | #else | ||||||
|  | 	/* QCN9000 tgt-mem-mode=0 layout - 53MB | ||||||
|  | 	 * +=========+==============+=========+ | ||||||
|  | 	 * |  Region | Start Offset |   Size  | | ||||||
|  | 	 * +---------+--------------+---------+ | ||||||
|  | 	 * | HREMOTE |  0x4CB00000  |   35MB  | | ||||||
|  | 	 * +---------+--------------+---------+ | ||||||
|  | 	 * | M3 Dump |  0x4EE00000  |   1MB   | | ||||||
|  | 	 * +---------+--------------+---------+ | ||||||
|  | 	 * |   ETR   |  0x4EF00000  |   1MB   | | ||||||
|  | 	 * +---------+--------------+---------+ | ||||||
|  | 	 * |  Caldb  |  0x4F000000  |   8MB   | | ||||||
|  | 	 * +---------+--------------+---------+ | ||||||
|  | 	 * | Pageable|  0x4F800000  |   8MB   | | ||||||
|  | 	 * +==================================+ | ||||||
|  | 	 */ | ||||||
|  | 	base-addr = <0x4CB00000>; | ||||||
|  | 	m3-dump-addr = <0x4EE00000>; | ||||||
|  | 	etr-addr = <0x4EF00000>; | ||||||
|  | 	caldb-addr = <0x4F000000>; | ||||||
|  | 	pageable-addr = <0x4F800000>; | ||||||
|  | 	hremote-size = <0x2300000>; | ||||||
|  | 	caldb-size = <0x800000>; | ||||||
|  | 	tgt-mem-mode = <0x0>; | ||||||
|  | 	pageable-size = <0x800000>; | ||||||
|  | #endif | ||||||
|  | 	status = "ok"; | ||||||
|  | }; | ||||||
| @@ -0,0 +1,941 @@ | |||||||
|  | /dts-v1/; | ||||||
|  | /* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. | ||||||
|  |  * | ||||||
|  |  * Permission to use, copy, modify, and/or distribute this software for any | ||||||
|  |  * purpose with or without fee is hereby granted, provided that the above | ||||||
|  |  * copyright notice and this permission notice appear in all copies. | ||||||
|  |  * | ||||||
|  |  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||||||
|  |  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||||||
|  |  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||||||
|  |  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||||||
|  |  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||||||
|  |  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||||||
|  |  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include "ipq5018.dtsi" | ||||||
|  | #include <dt-bindings/input/input.h> | ||||||
|  |  | ||||||
|  | / { | ||||||
|  | 	#address-cells = <0x2>; | ||||||
|  | 	#size-cells = <0x2>; | ||||||
|  | 	model = "Indio UM-525AXM"; | ||||||
|  | 	compatible = "indio,um-525axm", "qcom,ipq5018-mp03.5-c1", "qcom,ipq5018"; | ||||||
|  | 	interrupt-parent = <&intc>; | ||||||
|  |  | ||||||
|  | 	aliases { | ||||||
|  | 		sdhc1 = &sdhc_1; /* SDC1 eMMC slot */ | ||||||
|  | 		serial0 = &blsp1_uart1; | ||||||
|  | 		serial1 = &blsp1_uart2; | ||||||
|  | 		ethernet0 = "/soc/dp1"; | ||||||
|  | 		ethernet1 = "/soc/dp2"; | ||||||
|  |                 //led-failsafe = &led_red; | ||||||
|  |                 //led-running = &led_green; | ||||||
|  |                 //led-upgrade = &led_green; | ||||||
|  |                 //led-gateway = &led_blue; | ||||||
|  |                 //led-factory = &led_blue; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	chosen { | ||||||
|  | 		bootargs = "console=ttyMSM0,115200,n8 rw init=/init"; | ||||||
|  | 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||||
|  | 		bootargs-append = " swiotlb=1"; | ||||||
|  | 	#else | ||||||
|  | 		bootargs-append = " swiotlb=1 coherent_pool=2M"; | ||||||
|  | 	#endif | ||||||
|  | 		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  |          15MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_1|              |                         | | ||||||
|  | 	 * |  M3 Dump |  0x4E200000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_1|              |                         | | ||||||
|  | 	 * |   QDSS   |  0x4E300000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |   data   |  0x4E400000  |          15MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |  M3 Dump |  0x4F300000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |   QDSS   |  0x4F400000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * |                                                   | | ||||||
|  | 	 * |            Rest of the memory for Linux           | | ||||||
|  | 	 * |                                                   | | ||||||
|  | 	 * +===================================================+ | ||||||
|  | 	 */ | ||||||
|  | 		q6_mem_regions: q6_mem_regions@4B000000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4B000000 0x0 0x4500000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		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 0xF00000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		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_data2: q6_qcn6122_data2@4E400000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4E400000 0x0 0xF00000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		m3_dump_qcn6122_2: m3_dump_qcn6122_2@4F300000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4F300000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_etr_2: q6_qcn6122_etr_2@4F400000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4F400000 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  |          14MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * |  IPQ5018 |              |                         | | ||||||
|  | 	 * |  M3 Dump |  0x4D200000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * |  IPQ5018 |              |                         | | ||||||
|  | 	 * |   QDSS   |  0x4D300000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * |  IPQ5018 |              |                         | | ||||||
|  | 	 * |  Caldb   |  0x4D400000  |           2MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_1|              |                         | | ||||||
|  | 	 * |   data   |  0x4D600000  |          16MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_1|              |                         | | ||||||
|  | 	 * |  M3 Dump |  0x4E600000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_1|              |                         | | ||||||
|  | 	 * |   QDSS   |  0x4E700000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_1|              |                         | | ||||||
|  | 	 * |  Caldb   |  0x4E800000  |           5MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |   data   |  0x4ED00000  |          16MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |  M3 Dump |  0x4FD00000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |   QDSS   |  0x4FE00000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |  Caldb   |  0x4FF00000  |           5MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * |                                                   | | ||||||
|  | 	 * |            Rest of the memory for Linux           | | ||||||
|  | 	 * |                                                   | | ||||||
|  | 	 * +===================================================+ | ||||||
|  | 	 */ | ||||||
|  | 		q6_mem_regions: q6_mem_regions@4B000000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4B000000 0x0 0x5400000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		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 0xE00000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		m3_dump: m3_dump@4D200000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4D200000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_etr_region: q6_etr_dump@4D300000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4D300000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_caldb_region: q6_caldb_region@4D400000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4D400000 0x0 0x200000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_data1: q6_qcn6122_data1@4D600000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4D600000 0x0 0x1000000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		m3_dump_qcn6122_1: m3_dump_qcn6122_1@4E600000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4E600000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_etr_1: q6_qcn6122_etr_1@4E700000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4E700000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_caldb_1: q6_qcn6122_caldb_1@4E800000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4E800000 0x0 0x500000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_data2: q6_qcn6122_data2@4E900000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4ED00000 0x0 0x1000000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		m3_dump_qcn6122_2: m3_dump_qcn6122_2@4FD00000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4FD00000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_etr_2: q6_qcn6122_etr_2@4FE00000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4FE00000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_caldb_2: q6_qcn6122_caldb_2@4FF00000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4FF00000 0x0 0x500000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 	#endif | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	soc { | ||||||
|  | 		gpio-watchdog { | ||||||
|  | 			compatible = "linux,wdt-gpio"; | ||||||
|  | 			gpios = <&tlmm 27 GPIO_ACTIVE_LOW>; | ||||||
|  | 			hw_algo = "toggle"; | ||||||
|  | 			hw_margin_ms = <5000>; | ||||||
|  | 			always-running; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		serial@78af000 { | ||||||
|  | 			status = "ok"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		blsp1_uart2: serial@78b0000 { | ||||||
|  | 			pinctrl-0 = <&blsp1_uart_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		qpic_bam: dma@7984000{ | ||||||
|  | 			status = "ok"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		nand: qpic-nand@79b0000 { | ||||||
|  | 			pinctrl-0 = <&qspi_nand_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 			status = "ok"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		spi_0: spi@78b5000 { /* BLSP1 QUP0 */ | ||||||
|  | 			pinctrl-0 = <&blsp0_spi_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 			cs-select = <0>; | ||||||
|  | 			status = "ok"; | ||||||
|  |  | ||||||
|  | 			m25p80@0 { | ||||||
|  | 				#address-cells = <1>; | ||||||
|  | 				#size-cells = <1>; | ||||||
|  | 				reg = <0>; | ||||||
|  | 				compatible = "n25q128a11"; | ||||||
|  | 				linux,modalias = "m25p80", "n25q128a11"; | ||||||
|  | 				spi-max-frequency = <50000000>; | ||||||
|  | 				use-default-sizes; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		mdio0: mdio@88000 { | ||||||
|  | 			status = "ok"; | ||||||
|  |  | ||||||
|  | 			ethernet-phy@0 { | ||||||
|  | 				reg = <7>; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		mdio1: mdio@90000 { | ||||||
|  | 			status = "ok"; | ||||||
|  | 			pinctrl-0 = <&mdio1_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 			phy-reset-gpio = <&tlmm 39 0>; | ||||||
|  |  | ||||||
|  | 			ethernet-phy@0 { | ||||||
|  | 				reg = <28>; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		ess-instance { | ||||||
|  | 			num_devices = <0x1>; | ||||||
|  | 			ess-switch@0x39c00000 { | ||||||
|  | 				switch_mac_mode = <0xf>; /* mac mode for uniphy instance*/ | ||||||
|  | 				cmnblk_clk = "internal_96MHz"; /* cmnblk clk*/ | ||||||
|  | 				qcom,port_phyinfo { | ||||||
|  | 					port@0 { | ||||||
|  | 						port_id = <1>; | ||||||
|  | 						phy_address = <7>; | ||||||
|  | 						mdiobus = <&mdio0>; | ||||||
|  | 					}; | ||||||
|  | 					port@1 { | ||||||
|  | 						port_id = <2>; | ||||||
|  | 						phy_address = <0x1c>; | ||||||
|  | 						mdiobus = <&mdio1>; | ||||||
|  | 						port_mac_sel = "QGMAC_PORT"; | ||||||
|  | 					}; | ||||||
|  | 				}; | ||||||
|  | 				led_source@0 { | ||||||
|  | 					source = <0>; | ||||||
|  | 					mode = "normal"; | ||||||
|  | 					speed = "all"; | ||||||
|  | 					blink_en = "enable"; | ||||||
|  | 					active = "high"; | ||||||
|  | 				}; | ||||||
|  | 			}; | ||||||
|  | 				ess-switch1@1 { | ||||||
|  | 				compatible = "qcom,ess-switch-qca83xx"; | ||||||
|  | 				device_id = <1>; | ||||||
|  | 				switch_access_mode = "mdio"; | ||||||
|  | 				mdio-bus = <&mdio1>; | ||||||
|  | 				reset_gpio = <0x28>; | ||||||
|  | 				switch_cpu_bmp = <0x40>;  /* cpu port bitmap */ | ||||||
|  | 				switch_lan_bmp = <0x1e>; /* lan port bitmap */ | ||||||
|  | 				switch_wan_bmp = <0x0>;  /* wan port bitmap */ | ||||||
|  | 				qca,ar8327-initvals = < | ||||||
|  | 						0x00004 0x7600000   /* PAD0_MODE */ | ||||||
|  | 						0x00008 0x1000000   /* PAD5_MODE */ | ||||||
|  | 						0x0000c 0x80        /* PAD6_MODE */ | ||||||
|  | 						0x00010 0x2613a0    /* PORT6 FORCE MODE*/ | ||||||
|  | 						0x000e4 0xaa545     /* MAC_POWER_SEL */ | ||||||
|  | 						0x000e0 0xc74164de  /* SGMII_CTRL */ | ||||||
|  | 						0x0007c 0x4e        /* PORT0_STATUS */ | ||||||
|  | 						0x00094 0x4e        /* PORT6_STATUS */ | ||||||
|  | 				>; | ||||||
|  | 				qcom,port_phyinfo { | ||||||
|  | 					port@0 { | ||||||
|  | 						port_id = <1>; | ||||||
|  | 						phy_address = <28>; | ||||||
|  | 					}; | ||||||
|  | 				}; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		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"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		dp2 { | ||||||
|  | 			device_type = "network"; | ||||||
|  | 			compatible = "qcom,nss-dp"; | ||||||
|  | 			clocks = <&gcc GCC_SNOC_GMAC1_AXI_CLK>; | ||||||
|  | 			clock-names = "nss-snoc-gmac-axi-clk"; | ||||||
|  | 			qcom,id = <2>; | ||||||
|  | 			reg = <0x39D00000 0x10000>; | ||||||
|  | 			interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>; | ||||||
|  | 			qcom,mactype = <2>; | ||||||
|  | 			qcom,link-poll = <1>; | ||||||
|  | 			qcom,phy-mdio-addr = <28>; | ||||||
|  | 			mdio-bus = <&mdio1>; | ||||||
|  | 			local-mac-address = [000000000000]; | ||||||
|  | 			phy-mode = "sgmii"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		qcom,test@0 { | ||||||
|  | 			status = "ok"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		nss-macsec1 { | ||||||
|  | 			compatible = "qcom,nss-macsec"; | ||||||
|  | 			phy_addr = <0x1c>; | ||||||
|  | 			mdiobus = <&mdio1>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		lpass: lpass@0xA000000{ | ||||||
|  | 			status = "disabled"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		pcm: pcm@0xA3C0000{ | ||||||
|  | 			pinctrl-0 = <&audio_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 			status = "disabled"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		pcm_lb: pcm_lb@0 { | ||||||
|  | 			status = "disabled"; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	thermal-zones { | ||||||
|  | 		status = "ok"; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &tlmm { | ||||||
|  | 	pinctrl-0 = <&blsp0_uart_pins &phy_led_pins>; | ||||||
|  | 	pinctrl-names = "default"; | ||||||
|  |  | ||||||
|  | 	blsp0_uart_pins: uart_pins { | ||||||
|  | 		blsp0_uart_rx_tx { | ||||||
|  | 			pins = "gpio20", "gpio21"; | ||||||
|  | 			function = "blsp0_uart0"; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	blsp1_uart_pins: blsp1_uart_pins { | ||||||
|  | 		blsp1_uart_rx_tx { | ||||||
|  | 			pins = "gpio22", "gpio24", "gpio23", "gpio25"; | ||||||
|  | 			function = "blsp1_uart2"; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	blsp0_spi_pins: blsp0_spi_pins { | ||||||
|  | 		mux { | ||||||
|  | 			pins = "gpio10", "gpio11", "gpio12", "gpio13"; | ||||||
|  | 			function = "blsp0_spi"; | ||||||
|  | 			drive-strength = <2>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	qspi_nand_pins: qspi_nand_pins { | ||||||
|  | 		qspi_clock { | ||||||
|  | 			pins = "gpio9"; | ||||||
|  | 			function = "qspi_clk"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_cs { | ||||||
|  | 			pins = "gpio8"; | ||||||
|  | 			function = "qspi_cs"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_data_0 { | ||||||
|  | 			pins = "gpio7"; | ||||||
|  | 			function = "qspi0"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_data_1 { | ||||||
|  | 			pins = "gpio6"; | ||||||
|  | 			function = "qspi1"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_data_2 { | ||||||
|  | 			pins = "gpio5"; | ||||||
|  | 			function = "qspi2"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_data_3 { | ||||||
|  | 			pins = "gpio4"; | ||||||
|  | 			function = "qspi3"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	mdio1_pins: mdio_pinmux { | ||||||
|  | 		mux_0 { | ||||||
|  | 			pins = "gpio36"; | ||||||
|  | 			function = "mdc"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-up; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		mux_1 { | ||||||
|  | 			pins = "gpio37"; | ||||||
|  | 			function = "mdio"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-up; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	phy_led_pins: phy_led_pins { | ||||||
|  | 		gephy_led_pin { | ||||||
|  | 			pins = "gpio46"; | ||||||
|  | 			function = "led0"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-down; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	i2c_pins: i2c_pins { | ||||||
|  | 		i2c_scl { | ||||||
|  | 			pins = "gpio25"; | ||||||
|  | 			function = "blsp2_i2c1"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		i2c_sda { | ||||||
|  | 			pins = "gpio26"; | ||||||
|  | 			function = "blsp2_i2c1"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	button_pins: button_pins { | ||||||
|  | 		reset_button { | ||||||
|  | 			pins = "gpio38"; | ||||||
|  | 			function = "gpio"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-up; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | audio_pins: audio_pinmux { | ||||||
|  | }; | ||||||
|  |         leds_pins: leds_pins { | ||||||
|  |                 led_5g { | ||||||
|  |                         pins = "gpio34"; | ||||||
|  |                         function = "gpio"; | ||||||
|  |                         drive-strength = <8>; | ||||||
|  |                         bias-pull-down; | ||||||
|  |                 }; | ||||||
|  |                 led_2g { | ||||||
|  |                         pins = "gpio33"; | ||||||
|  |                         function = "gpio"; | ||||||
|  |                         drive-strength = <8>; | ||||||
|  |                         bias-pull-down; | ||||||
|  |                 }; | ||||||
|  |                 led_sys { | ||||||
|  |                         pins = "gpio26"; | ||||||
|  |                         function = "gpio"; | ||||||
|  |                         drive-strength = <8>; | ||||||
|  |                         bias-pull-down; | ||||||
|  |                 }; | ||||||
|  | 		led_onekey { | ||||||
|  |                         pins = "gpio28"; | ||||||
|  |                         function = "gpio"; | ||||||
|  |                         drive-strength = <8>; | ||||||
|  |                         bias-pull-down; | ||||||
|  |                 }; | ||||||
|  |         }; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &soc { | ||||||
|  | 	gpio_keys { | ||||||
|  | 		compatible = "gpio-keys"; | ||||||
|  | 		pinctrl-0 = <&button_pins>; | ||||||
|  | 		pinctrl-names = "default"; | ||||||
|  |  | ||||||
|  | 		button@1 { | ||||||
|  | 			label = "reset"; | ||||||
|  | 			linux,code = <KEY_RESTART>; | ||||||
|  | 			gpios = <&tlmm 38 GPIO_ACTIVE_LOW>; | ||||||
|  | 			linux,input-type = <1>; | ||||||
|  | 			debounce-interval = <60>; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  |         leds { | ||||||
|  |                 compatible = "gpio-leds"; | ||||||
|  |                 pinctrl-0 = <&leds_pins>; | ||||||
|  |                 pinctrl-names = "default"; | ||||||
|  |  | ||||||
|  |                 led_blue: led@34 { | ||||||
|  |                         label = "led_5g"; | ||||||
|  |                         gpios = <&tlmm 34 GPIO_ACTIVE_LOW>; | ||||||
|  |                         linux,default-trigger = "led_5g"; | ||||||
|  |                         default-state = "off"; | ||||||
|  |                 }; | ||||||
|  |                 led_green: led@33 { | ||||||
|  |                         label = "led_2g"; | ||||||
|  |                         gpios = <&tlmm 33 GPIO_ACTIVE_LOW>; | ||||||
|  |                         linux,default-trigger = "led_2g"; | ||||||
|  |                         default-state = "off"; | ||||||
|  |                 }; | ||||||
|  |                 led_red: led@26 { | ||||||
|  |                         label = "led_sys"; | ||||||
|  |                         gpios = <&tlmm 26 GPIO_ACTIVE_LOW>; | ||||||
|  |                         linux,default-trigger = "led_sys"; | ||||||
|  |                         default-state = "off"; | ||||||
|  |                 }; | ||||||
|  | 		led@28 { | ||||||
|  |                         label = "led_onekey"; | ||||||
|  |                         gpios = <&tlmm 28 GPIO_ACTIVE_LOW>; | ||||||
|  |                         linux,default-trigger = "led_onekey"; | ||||||
|  |                         default-state = "off"; | ||||||
|  |                 }; | ||||||
|  |         }; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &q6v5_wcss { | ||||||
|  | 	compatible = "qcom,ipq5018-q6-mpd"; | ||||||
|  | 	#address-cells = <1>; | ||||||
|  | 	#size-cells = <1>; | ||||||
|  | 	ranges; | ||||||
|  | 	firmware = "IPQ5018/q6_fw.mdt"; | ||||||
|  | 	reg = <0x0cd00000 0x4040>, | ||||||
|  | 		<0x1938000 0x8>, | ||||||
|  | 		<0x193d204 0x4>; | ||||||
|  | 	reg-names = "qdsp6", | ||||||
|  | 			"tcsr-msip", | ||||||
|  | 			"tcsr-q6"; | ||||||
|  | 	resets = <&gcc GCC_WCSSAON_RESET>, | ||||||
|  | 			<&gcc GCC_WCSS_Q6_BCR>; | ||||||
|  |  | ||||||
|  | 	reset-names = "wcss_aon_reset", | ||||||
|  | 			"wcss_q6_reset"; | ||||||
|  |  | ||||||
|  | 	clocks = <&gcc GCC_Q6_AXIS_CLK>, | ||||||
|  | 		<&gcc GCC_WCSS_ECAHB_CLK>, | ||||||
|  | 		<&gcc GCC_Q6_AXIM_CLK>, | ||||||
|  | 		<&gcc GCC_Q6_AXIM2_CLK>, | ||||||
|  | 		<&gcc GCC_Q6_AHB_CLK>, | ||||||
|  | 		<&gcc GCC_Q6_AHB_S_CLK>, | ||||||
|  | 		<&gcc GCC_WCSS_AXI_S_CLK>; | ||||||
|  | 	clock-names = "gcc_q6_axis_clk", | ||||||
|  | 		"gcc_wcss_ecahb_clk", | ||||||
|  | 		"gcc_q6_axim_clk", | ||||||
|  | 		"gcc_q6_axim2_clk", | ||||||
|  | 		"gcc_q6_ahb_clk", | ||||||
|  | 		"gcc_q6_ahb_s_clk", | ||||||
|  | 		"gcc_wcss_axi_s_clk"; | ||||||
|  |  | ||||||
|  | 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||||
|  | 		memory-region = <&q6_mem_regions>, <&q6_etr_region>; | ||||||
|  | 	#else | ||||||
|  | 		memory-region = <&q6_mem_regions>, <&q6_etr_region>, | ||||||
|  | 				<&q6_caldb_region>; | ||||||
|  | 	#endif | ||||||
|  |  | ||||||
|  | 	qcom,rproc = <&q6v5_wcss>; | ||||||
|  | 	qcom,bootargs_smem = <507>; | ||||||
|  | 	boot-args = <0x1 0x4 0x3 0x0F 0x0 0x0>, | ||||||
|  | 			<0x2 0x4 0x2 0x12 0x0 0x0>; | ||||||
|  | 	status = "ok"; | ||||||
|  | 	q6_wcss_pd1: remoteproc_pd1@4ab000 { | ||||||
|  | 		compatible = "qcom,ipq5018-wcss-ahb-mpd"; | ||||||
|  | 		reg = <0x4ab000 0x20>; | ||||||
|  | 		reg-names = "rmb"; | ||||||
|  | 		firmware = "IPQ5018/q6_fw.mdt"; | ||||||
|  | 		m3_firmware = "IPQ5018/m3_fw.mdt"; | ||||||
|  | 		interrupts-extended = <&wcss_smp2p_in 8 0>, | ||||||
|  | 					<&wcss_smp2p_in 9 0>, | ||||||
|  | 					<&wcss_smp2p_in 12 0>, | ||||||
|  | 					<&wcss_smp2p_in 11 0>; | ||||||
|  | 		interrupt-names = "fatal", | ||||||
|  | 					"ready", | ||||||
|  | 					"spawn-ack", | ||||||
|  | 					"stop-ack"; | ||||||
|  |  | ||||||
|  | 		resets = <&gcc GCC_WCSSAON_RESET>, | ||||||
|  | 				<&gcc GCC_WCSS_BCR>, | ||||||
|  | 				<&gcc GCC_CE_BCR>; | ||||||
|  | 		reset-names = "wcss_aon_reset", | ||||||
|  | 				"wcss_reset", | ||||||
|  | 				"ce_reset"; | ||||||
|  |  | ||||||
|  | 		clocks = <&gcc GCC_WCSS_AHB_S_CLK>, | ||||||
|  | 				<&gcc GCC_WCSS_ACMT_CLK>, | ||||||
|  | 				<&gcc GCC_WCSS_AXI_M_CLK>; | ||||||
|  | 		clock-names = "gcc_wcss_ahb_s_clk", | ||||||
|  | 					"gcc_wcss_acmt_clk", | ||||||
|  | 					"gcc_wcss_axi_m_clk"; | ||||||
|  |  | ||||||
|  | 		qcom,halt-regs = <&tcsr_q6_block 0xa000 0xd000 0x0>; | ||||||
|  |  | ||||||
|  | 		qcom,smem-states = <&wcss_smp2p_out 8>, | ||||||
|  | 					<&wcss_smp2p_out 9>, | ||||||
|  | 					<&wcss_smp2p_out 10>; | ||||||
|  | 		qcom,smem-state-names = "shutdown", | ||||||
|  | 					"stop", | ||||||
|  | 					"spawn"; | ||||||
|  | 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||||
|  | 		memory-region = <&q6_ipq5018_data>, <&m3_dump>, | ||||||
|  | 				<&q6_etr_region>; | ||||||
|  | 	#else | ||||||
|  | 		memory-region = <&q6_ipq5018_data>, <&m3_dump>, | ||||||
|  | 				<&q6_etr_region>, <&q6_caldb_region>; | ||||||
|  | 	#endif | ||||||
|  |  | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	q6_wcss_pd2: remoteproc_pd2 { | ||||||
|  | 		compatible = "qcom,ipq5018-wcss-pcie-mpd"; | ||||||
|  | 		firmware = "IPQ5018/q6_fw.mdt"; | ||||||
|  | 		m3_firmware = "qcn6122/m3_fw.mdt"; | ||||||
|  | 		interrupts-extended = <&wcss_smp2p_in 16 0>, | ||||||
|  | 					<&wcss_smp2p_in 17 0>, | ||||||
|  | 					<&wcss_smp2p_in 20 0>, | ||||||
|  | 					<&wcss_smp2p_in 19 0>; | ||||||
|  | 		interrupt-names = "fatal", | ||||||
|  | 					"ready", | ||||||
|  | 					"spawn-ack", | ||||||
|  | 					"stop-ack"; | ||||||
|  |  | ||||||
|  | 		qcom,smem-states = <&wcss_smp2p_out 16>, | ||||||
|  | 					<&wcss_smp2p_out 17>, | ||||||
|  | 					<&wcss_smp2p_out 18>; | ||||||
|  | 		qcom,smem-state-names = "shutdown", | ||||||
|  | 					"stop", | ||||||
|  | 					"spawn"; | ||||||
|  | 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||||
|  | 		memory-region = <&q6_qcn6122_data1>, <&m3_dump_qcn6122_1>, | ||||||
|  | 				<&q6_qcn6122_etr_1>; | ||||||
|  | 	#else | ||||||
|  | 		memory-region = <&q6_qcn6122_data1>, <&m3_dump_qcn6122_1>, | ||||||
|  | 				<&q6_qcn6122_etr_1>, <&q6_qcn6122_caldb_1>; | ||||||
|  | 	#endif | ||||||
|  |  | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	q6_wcss_pd3: remoteproc_pd3 { | ||||||
|  | 		compatible = "qcom,ipq5018-wcss-pcie-mpd"; | ||||||
|  | 		firmware = "IPQ5018/q6_fw.mdt"; | ||||||
|  | 		interrupts-extended = <&wcss_smp2p_in 24 0>, | ||||||
|  | 					<&wcss_smp2p_in 25 0>, | ||||||
|  | 					<&wcss_smp2p_in 28 0>, | ||||||
|  | 					<&wcss_smp2p_in 27 0>; | ||||||
|  | 		interrupt-names = "fatal", | ||||||
|  | 					"ready", | ||||||
|  | 					"spawn-ack", | ||||||
|  | 					"stop-ack"; | ||||||
|  |  | ||||||
|  | 		qcom,smem-states = <&wcss_smp2p_out 24>, | ||||||
|  | 					<&wcss_smp2p_out 25>, | ||||||
|  | 					<&wcss_smp2p_out 26>; | ||||||
|  | 		qcom,smem-state-names = "shutdown", | ||||||
|  | 					"stop", | ||||||
|  | 					"spawn"; | ||||||
|  | 	#ifdef	__IPQ_MEM_PROFILE_256_MB__ | ||||||
|  | 		memory-region = <&q6_qcn6122_data2>, <&m3_dump_qcn6122_2>, | ||||||
|  | 				<&q6_qcn6122_etr_2>; | ||||||
|  | 	#else | ||||||
|  | 		memory-region = <&q6_qcn6122_data2>, <&m3_dump_qcn6122_2>, | ||||||
|  | 				<&q6_qcn6122_etr_2>, <&q6_qcn6122_caldb_2>; | ||||||
|  | 	#endif | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &i2c_0 { | ||||||
|  | 	pinctrl-0 = <&i2c_pins>; | ||||||
|  | 	pinctrl-names = "default"; | ||||||
|  | 	status = "disabled"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &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 = <0x4D400000 0x4D400000 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 = <0x50>; | ||||||
|  | #ifdef __CNSS2__ | ||||||
|  | 	qcom,bdf-addr = <0x4D600000 0x4D600000 0x4D300000 0x0 0x0>; | ||||||
|  | 	qcom,caldb-addr = <0x4E800000 0x4E800000 0 0 0>; | ||||||
|  | 	qcom,caldb-size = <0x500000>; | ||||||
|  | 	mem-region = <&q6_qcn6122_data1>; | ||||||
|  | #else | ||||||
|  | 	memory-region = <&q6_qcn6122_data1>; | ||||||
|  | #endif | ||||||
|  | 	status = "disabled"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &wifi2 { | ||||||
|  | 	/* QCN6122 6G */ | ||||||
|  | 	qcom,multipd_arch; | ||||||
|  | 	qcom,userpd-subsys-name = "q6v5_wcss_userpd3"; | ||||||
|  | 	qcom,rproc = <&q6_wcss_pd3>; | ||||||
|  | #ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||||
|  | 	qcom,tgt-mem-mode = <2>; | ||||||
|  | #else | ||||||
|  | 	qcom,tgt-mem-mode = <1>; | ||||||
|  | #endif | ||||||
|  | 	qcom,board_id = <0xb0>; | ||||||
|  | #ifdef __CNSS2__ | ||||||
|  | 	qcom,bdf-addr = <0x4ED00000 0x4ED00000 0x4E400000 0x0 0x0>; | ||||||
|  | 	qcom,caldb-addr = <0x4FF00000 0x4FF00000 0 0 0>; | ||||||
|  | 	qcom,caldb-size = <0x500000>; | ||||||
|  | 	mem-region = <&q6_qcn6122_data2>; | ||||||
|  | #else | ||||||
|  | 	memory-region = <&q6_qcn6122_data2>; | ||||||
|  | #endif | ||||||
|  | 	status = "ok"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | &usb3 { | ||||||
|  | 	status = "ok"; | ||||||
|  | 	device-power-gpio = <&tlmm 24 1>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &dwc_0 { | ||||||
|  | 	/delete-property/ #phy-cells; | ||||||
|  | 	/delete-property/ phys; | ||||||
|  | 	/delete-property/ phy-names; | ||||||
|  | }; | ||||||
|  | &hs_m31phy_0 { | ||||||
|  | 	status = "ok"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &eud { | ||||||
|  | 	status = "ok"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &pcie_x1 { | ||||||
|  | 	#status = "disabled"; | ||||||
|  | 	#perst-gpio = <&tlmm 18 1>; | ||||||
|  | 	perst-gpio = <&tlmm 18 GPIO_ACTIVE_LOW>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &pcie_x2 { | ||||||
|  | 	#status = "disabled"; | ||||||
|  | 	#perst-gpio = <&tlmm 15 1>; | ||||||
|  | 	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 >; | ||||||
|  |  | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
| @@ -0,0 +1,941 @@ | |||||||
|  | /dts-v1/; | ||||||
|  | /* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. | ||||||
|  |  * | ||||||
|  |  * Permission to use, copy, modify, and/or distribute this software for any | ||||||
|  |  * purpose with or without fee is hereby granted, provided that the above | ||||||
|  |  * copyright notice and this permission notice appear in all copies. | ||||||
|  |  * | ||||||
|  |  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||||||
|  |  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||||||
|  |  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||||||
|  |  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||||||
|  |  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||||||
|  |  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||||||
|  |  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include "ipq5018.dtsi" | ||||||
|  | #include <dt-bindings/input/input.h> | ||||||
|  |  | ||||||
|  | / { | ||||||
|  | 	#address-cells = <0x2>; | ||||||
|  | 	#size-cells = <0x2>; | ||||||
|  | 	model = "Indio UM-525AXP"; | ||||||
|  | 	compatible = "indio,um-525axp", "qcom,ipq5018-mp03.5-c1", "qcom,ipq5018"; | ||||||
|  | 	interrupt-parent = <&intc>; | ||||||
|  |  | ||||||
|  | 	aliases { | ||||||
|  | 		sdhc1 = &sdhc_1; /* SDC1 eMMC slot */ | ||||||
|  | 		serial0 = &blsp1_uart1; | ||||||
|  | 		serial1 = &blsp1_uart2; | ||||||
|  | 		ethernet0 = "/soc/dp1"; | ||||||
|  | 		ethernet1 = "/soc/dp2"; | ||||||
|  |                 //led-failsafe = &led_red; | ||||||
|  |                 //led-running = &led_green; | ||||||
|  |                 //led-upgrade = &led_green; | ||||||
|  |                 //led-gateway = &led_blue; | ||||||
|  |                 //led-factory = &led_blue; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	chosen { | ||||||
|  | 		bootargs = "console=ttyMSM0,115200,n8 rw init=/init"; | ||||||
|  | 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||||
|  | 		bootargs-append = " swiotlb=1"; | ||||||
|  | 	#else | ||||||
|  | 		bootargs-append = " swiotlb=1 coherent_pool=2M"; | ||||||
|  | 	#endif | ||||||
|  | 		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  |          15MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_1|              |                         | | ||||||
|  | 	 * |  M3 Dump |  0x4E200000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_1|              |                         | | ||||||
|  | 	 * |   QDSS   |  0x4E300000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |   data   |  0x4E400000  |          15MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |  M3 Dump |  0x4F300000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |   QDSS   |  0x4F400000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * |                                                   | | ||||||
|  | 	 * |            Rest of the memory for Linux           | | ||||||
|  | 	 * |                                                   | | ||||||
|  | 	 * +===================================================+ | ||||||
|  | 	 */ | ||||||
|  | 		q6_mem_regions: q6_mem_regions@4B000000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4B000000 0x0 0x4500000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		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 0xF00000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		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_data2: q6_qcn6122_data2@4E400000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4E400000 0x0 0xF00000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		m3_dump_qcn6122_2: m3_dump_qcn6122_2@4F300000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4F300000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_etr_2: q6_qcn6122_etr_2@4F400000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4F400000 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  |          14MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * |  IPQ5018 |              |                         | | ||||||
|  | 	 * |  M3 Dump |  0x4D200000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * |  IPQ5018 |              |                         | | ||||||
|  | 	 * |   QDSS   |  0x4D300000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * |  IPQ5018 |              |                         | | ||||||
|  | 	 * |  Caldb   |  0x4D400000  |           2MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_1|              |                         | | ||||||
|  | 	 * |   data   |  0x4D600000  |          16MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_1|              |                         | | ||||||
|  | 	 * |  M3 Dump |  0x4E600000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_1|              |                         | | ||||||
|  | 	 * |   QDSS   |  0x4E700000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_1|              |                         | | ||||||
|  | 	 * |  Caldb   |  0x4E800000  |           5MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |   data   |  0x4ED00000  |          16MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |  M3 Dump |  0x4FD00000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |   QDSS   |  0x4FE00000  |           1MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * | QCN6122_2|              |                         | | ||||||
|  | 	 * |  Caldb   |  0x4FF00000  |           5MB           | | ||||||
|  | 	 * +----------+--------------+-------------------------+ | ||||||
|  | 	 * |                                                   | | ||||||
|  | 	 * |            Rest of the memory for Linux           | | ||||||
|  | 	 * |                                                   | | ||||||
|  | 	 * +===================================================+ | ||||||
|  | 	 */ | ||||||
|  | 		q6_mem_regions: q6_mem_regions@4B000000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4B000000 0x0 0x5400000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		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 0xE00000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		m3_dump: m3_dump@4D200000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4D200000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_etr_region: q6_etr_dump@4D300000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4D300000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_caldb_region: q6_caldb_region@4D400000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4D400000 0x0 0x200000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_data1: q6_qcn6122_data1@4D600000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4D600000 0x0 0x1000000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		m3_dump_qcn6122_1: m3_dump_qcn6122_1@4E600000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4E600000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_etr_1: q6_qcn6122_etr_1@4E700000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4E700000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_caldb_1: q6_qcn6122_caldb_1@4E800000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4E800000 0x0 0x500000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_data2: q6_qcn6122_data2@4E900000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4ED00000 0x0 0x1000000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		m3_dump_qcn6122_2: m3_dump_qcn6122_2@4FD00000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4FD00000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_etr_2: q6_qcn6122_etr_2@4FE00000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4FE00000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_caldb_2: q6_qcn6122_caldb_2@4FF00000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4FF00000 0x0 0x500000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 	#endif | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	soc { | ||||||
|  | 		gpio-watchdog { | ||||||
|  | 			compatible = "linux,wdt-gpio"; | ||||||
|  | 			gpios = <&tlmm 27 GPIO_ACTIVE_LOW>; | ||||||
|  | 			hw_algo = "toggle"; | ||||||
|  | 			hw_margin_ms = <5000>; | ||||||
|  | 			always-running; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		serial@78af000 { | ||||||
|  | 			status = "ok"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		blsp1_uart2: serial@78b0000 { | ||||||
|  | 			pinctrl-0 = <&blsp1_uart_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		qpic_bam: dma@7984000{ | ||||||
|  | 			status = "ok"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		nand: qpic-nand@79b0000 { | ||||||
|  | 			pinctrl-0 = <&qspi_nand_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 			status = "ok"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		spi_0: spi@78b5000 { /* BLSP1 QUP0 */ | ||||||
|  | 			pinctrl-0 = <&blsp0_spi_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 			cs-select = <0>; | ||||||
|  | 			status = "ok"; | ||||||
|  |  | ||||||
|  | 			m25p80@0 { | ||||||
|  | 				#address-cells = <1>; | ||||||
|  | 				#size-cells = <1>; | ||||||
|  | 				reg = <0>; | ||||||
|  | 				compatible = "n25q128a11"; | ||||||
|  | 				linux,modalias = "m25p80", "n25q128a11"; | ||||||
|  | 				spi-max-frequency = <50000000>; | ||||||
|  | 				use-default-sizes; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		mdio0: mdio@88000 { | ||||||
|  | 			status = "ok"; | ||||||
|  |  | ||||||
|  | 			ethernet-phy@0 { | ||||||
|  | 				reg = <7>; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		mdio1: mdio@90000 { | ||||||
|  | 			status = "ok"; | ||||||
|  | 			pinctrl-0 = <&mdio1_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 			phy-reset-gpio = <&tlmm 39 0>; | ||||||
|  |  | ||||||
|  | 			ethernet-phy@0 { | ||||||
|  | 				reg = <28>; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		ess-instance { | ||||||
|  | 			num_devices = <0x1>; | ||||||
|  | 			ess-switch@0x39c00000 { | ||||||
|  | 				switch_mac_mode = <0xf>; /* mac mode for uniphy instance*/ | ||||||
|  | 				cmnblk_clk = "internal_96MHz"; /* cmnblk clk*/ | ||||||
|  | 				qcom,port_phyinfo { | ||||||
|  | 					port@0 { | ||||||
|  | 						port_id = <1>; | ||||||
|  | 						phy_address = <7>; | ||||||
|  | 						mdiobus = <&mdio0>; | ||||||
|  | 					}; | ||||||
|  | 					port@1 { | ||||||
|  | 						port_id = <2>; | ||||||
|  | 						phy_address = <0x1c>; | ||||||
|  | 						mdiobus = <&mdio1>; | ||||||
|  | 						port_mac_sel = "QGMAC_PORT"; | ||||||
|  | 					}; | ||||||
|  | 				}; | ||||||
|  | 				led_source@0 { | ||||||
|  | 					source = <0>; | ||||||
|  | 					mode = "normal"; | ||||||
|  | 					speed = "all"; | ||||||
|  | 					blink_en = "enable"; | ||||||
|  | 					active = "high"; | ||||||
|  | 				}; | ||||||
|  | 			}; | ||||||
|  | 				ess-switch1@1 { | ||||||
|  | 				compatible = "qcom,ess-switch-qca83xx"; | ||||||
|  | 				device_id = <1>; | ||||||
|  | 				switch_access_mode = "mdio"; | ||||||
|  | 				mdio-bus = <&mdio1>; | ||||||
|  | 				reset_gpio = <0x28>; | ||||||
|  | 				switch_cpu_bmp = <0x40>;  /* cpu port bitmap */ | ||||||
|  | 				switch_lan_bmp = <0x1e>; /* lan port bitmap */ | ||||||
|  | 				switch_wan_bmp = <0x0>;  /* wan port bitmap */ | ||||||
|  | 				qca,ar8327-initvals = < | ||||||
|  | 						0x00004 0x7600000   /* PAD0_MODE */ | ||||||
|  | 						0x00008 0x1000000   /* PAD5_MODE */ | ||||||
|  | 						0x0000c 0x80        /* PAD6_MODE */ | ||||||
|  | 						0x00010 0x2613a0    /* PORT6 FORCE MODE*/ | ||||||
|  | 						0x000e4 0xaa545     /* MAC_POWER_SEL */ | ||||||
|  | 						0x000e0 0xc74164de  /* SGMII_CTRL */ | ||||||
|  | 						0x0007c 0x4e        /* PORT0_STATUS */ | ||||||
|  | 						0x00094 0x4e        /* PORT6_STATUS */ | ||||||
|  | 				>; | ||||||
|  | 				qcom,port_phyinfo { | ||||||
|  | 					port@0 { | ||||||
|  | 						port_id = <1>; | ||||||
|  | 						phy_address = <28>; | ||||||
|  | 					}; | ||||||
|  | 				}; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		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"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		dp2 { | ||||||
|  | 			device_type = "network"; | ||||||
|  | 			compatible = "qcom,nss-dp"; | ||||||
|  | 			clocks = <&gcc GCC_SNOC_GMAC1_AXI_CLK>; | ||||||
|  | 			clock-names = "nss-snoc-gmac-axi-clk"; | ||||||
|  | 			qcom,id = <2>; | ||||||
|  | 			reg = <0x39D00000 0x10000>; | ||||||
|  | 			interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>; | ||||||
|  | 			qcom,mactype = <2>; | ||||||
|  | 			qcom,link-poll = <1>; | ||||||
|  | 			qcom,phy-mdio-addr = <28>; | ||||||
|  | 			mdio-bus = <&mdio1>; | ||||||
|  | 			local-mac-address = [000000000000]; | ||||||
|  | 			phy-mode = "sgmii"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		qcom,test@0 { | ||||||
|  | 			status = "ok"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		nss-macsec1 { | ||||||
|  | 			compatible = "qcom,nss-macsec"; | ||||||
|  | 			phy_addr = <0x1c>; | ||||||
|  | 			mdiobus = <&mdio1>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		lpass: lpass@0xA000000{ | ||||||
|  | 			status = "disabled"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		pcm: pcm@0xA3C0000{ | ||||||
|  | 			pinctrl-0 = <&audio_pins>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 			status = "disabled"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		pcm_lb: pcm_lb@0 { | ||||||
|  | 			status = "disabled"; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	thermal-zones { | ||||||
|  | 		status = "ok"; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &tlmm { | ||||||
|  | 	pinctrl-0 = <&blsp0_uart_pins &phy_led_pins>; | ||||||
|  | 	pinctrl-names = "default"; | ||||||
|  |  | ||||||
|  | 	blsp0_uart_pins: uart_pins { | ||||||
|  | 		blsp0_uart_rx_tx { | ||||||
|  | 			pins = "gpio20", "gpio21"; | ||||||
|  | 			function = "blsp0_uart0"; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	blsp1_uart_pins: blsp1_uart_pins { | ||||||
|  | 		blsp1_uart_rx_tx { | ||||||
|  | 			pins = "gpio22", "gpio24", "gpio23", "gpio25"; | ||||||
|  | 			function = "blsp1_uart2"; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	blsp0_spi_pins: blsp0_spi_pins { | ||||||
|  | 		mux { | ||||||
|  | 			pins = "gpio10", "gpio11", "gpio12", "gpio13"; | ||||||
|  | 			function = "blsp0_spi"; | ||||||
|  | 			drive-strength = <2>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	qspi_nand_pins: qspi_nand_pins { | ||||||
|  | 		qspi_clock { | ||||||
|  | 			pins = "gpio9"; | ||||||
|  | 			function = "qspi_clk"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_cs { | ||||||
|  | 			pins = "gpio8"; | ||||||
|  | 			function = "qspi_cs"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_data_0 { | ||||||
|  | 			pins = "gpio7"; | ||||||
|  | 			function = "qspi0"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_data_1 { | ||||||
|  | 			pins = "gpio6"; | ||||||
|  | 			function = "qspi1"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_data_2 { | ||||||
|  | 			pins = "gpio5"; | ||||||
|  | 			function = "qspi2"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		qspi_data_3 { | ||||||
|  | 			pins = "gpio4"; | ||||||
|  | 			function = "qspi3"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	mdio1_pins: mdio_pinmux { | ||||||
|  | 		mux_0 { | ||||||
|  | 			pins = "gpio36"; | ||||||
|  | 			function = "mdc"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-up; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		mux_1 { | ||||||
|  | 			pins = "gpio37"; | ||||||
|  | 			function = "mdio"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-up; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	phy_led_pins: phy_led_pins { | ||||||
|  | 		gephy_led_pin { | ||||||
|  | 			pins = "gpio46"; | ||||||
|  | 			function = "led0"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-down; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	i2c_pins: i2c_pins { | ||||||
|  | 		i2c_scl { | ||||||
|  | 			pins = "gpio25"; | ||||||
|  | 			function = "blsp2_i2c1"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		i2c_sda { | ||||||
|  | 			pins = "gpio26"; | ||||||
|  | 			function = "blsp2_i2c1"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	button_pins: button_pins { | ||||||
|  | 		reset_button { | ||||||
|  | 			pins = "gpio38"; | ||||||
|  | 			function = "gpio"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-up; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | audio_pins: audio_pinmux { | ||||||
|  | }; | ||||||
|  |         leds_pins: leds_pins { | ||||||
|  |                 led_5g { | ||||||
|  |                         pins = "gpio34"; | ||||||
|  |                         function = "gpio"; | ||||||
|  |                         drive-strength = <8>; | ||||||
|  |                         bias-pull-down; | ||||||
|  |                 }; | ||||||
|  |                 led_2g { | ||||||
|  |                         pins = "gpio33"; | ||||||
|  |                         function = "gpio"; | ||||||
|  |                         drive-strength = <8>; | ||||||
|  |                         bias-pull-down; | ||||||
|  |                 }; | ||||||
|  |                 led_sys { | ||||||
|  |                         pins = "gpio26"; | ||||||
|  |                         function = "gpio"; | ||||||
|  |                         drive-strength = <8>; | ||||||
|  |                         bias-pull-down; | ||||||
|  |                 }; | ||||||
|  | 		led_onekey { | ||||||
|  |                         pins = "gpio28"; | ||||||
|  |                         function = "gpio"; | ||||||
|  |                         drive-strength = <8>; | ||||||
|  |                         bias-pull-down; | ||||||
|  |                 }; | ||||||
|  |         }; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &soc { | ||||||
|  | 	gpio_keys { | ||||||
|  | 		compatible = "gpio-keys"; | ||||||
|  | 		pinctrl-0 = <&button_pins>; | ||||||
|  | 		pinctrl-names = "default"; | ||||||
|  |  | ||||||
|  | 		button@1 { | ||||||
|  | 			label = "reset"; | ||||||
|  | 			linux,code = <KEY_RESTART>; | ||||||
|  | 			gpios = <&tlmm 38 GPIO_ACTIVE_LOW>; | ||||||
|  | 			linux,input-type = <1>; | ||||||
|  | 			debounce-interval = <60>; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  |         leds { | ||||||
|  |                 compatible = "gpio-leds"; | ||||||
|  |                 pinctrl-0 = <&leds_pins>; | ||||||
|  |                 pinctrl-names = "default"; | ||||||
|  |  | ||||||
|  |                 led_blue: led@34 { | ||||||
|  |                         label = "led_5g"; | ||||||
|  |                         gpios = <&tlmm 34 GPIO_ACTIVE_LOW>; | ||||||
|  |                         linux,default-trigger = "led_5g"; | ||||||
|  |                         default-state = "off"; | ||||||
|  |                 }; | ||||||
|  |                 led_green: led@33 { | ||||||
|  |                         label = "led_2g"; | ||||||
|  |                         gpios = <&tlmm 33 GPIO_ACTIVE_LOW>; | ||||||
|  |                         linux,default-trigger = "led_2g"; | ||||||
|  |                         default-state = "off"; | ||||||
|  |                 }; | ||||||
|  |                 led_red: led@26 { | ||||||
|  |                         label = "led_sys"; | ||||||
|  |                         gpios = <&tlmm 26 GPIO_ACTIVE_LOW>; | ||||||
|  |                         linux,default-trigger = "led_sys"; | ||||||
|  |                         default-state = "off"; | ||||||
|  |                 }; | ||||||
|  | 		led@28 { | ||||||
|  |                         label = "led_onekey"; | ||||||
|  |                         gpios = <&tlmm 28 GPIO_ACTIVE_LOW>; | ||||||
|  |                         linux,default-trigger = "led_onekey"; | ||||||
|  |                         default-state = "off"; | ||||||
|  |                 }; | ||||||
|  |         }; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &q6v5_wcss { | ||||||
|  | 	compatible = "qcom,ipq5018-q6-mpd"; | ||||||
|  | 	#address-cells = <1>; | ||||||
|  | 	#size-cells = <1>; | ||||||
|  | 	ranges; | ||||||
|  | 	firmware = "IPQ5018/q6_fw.mdt"; | ||||||
|  | 	reg = <0x0cd00000 0x4040>, | ||||||
|  | 		<0x1938000 0x8>, | ||||||
|  | 		<0x193d204 0x4>; | ||||||
|  | 	reg-names = "qdsp6", | ||||||
|  | 			"tcsr-msip", | ||||||
|  | 			"tcsr-q6"; | ||||||
|  | 	resets = <&gcc GCC_WCSSAON_RESET>, | ||||||
|  | 			<&gcc GCC_WCSS_Q6_BCR>; | ||||||
|  |  | ||||||
|  | 	reset-names = "wcss_aon_reset", | ||||||
|  | 			"wcss_q6_reset"; | ||||||
|  |  | ||||||
|  | 	clocks = <&gcc GCC_Q6_AXIS_CLK>, | ||||||
|  | 		<&gcc GCC_WCSS_ECAHB_CLK>, | ||||||
|  | 		<&gcc GCC_Q6_AXIM_CLK>, | ||||||
|  | 		<&gcc GCC_Q6_AXIM2_CLK>, | ||||||
|  | 		<&gcc GCC_Q6_AHB_CLK>, | ||||||
|  | 		<&gcc GCC_Q6_AHB_S_CLK>, | ||||||
|  | 		<&gcc GCC_WCSS_AXI_S_CLK>; | ||||||
|  | 	clock-names = "gcc_q6_axis_clk", | ||||||
|  | 		"gcc_wcss_ecahb_clk", | ||||||
|  | 		"gcc_q6_axim_clk", | ||||||
|  | 		"gcc_q6_axim2_clk", | ||||||
|  | 		"gcc_q6_ahb_clk", | ||||||
|  | 		"gcc_q6_ahb_s_clk", | ||||||
|  | 		"gcc_wcss_axi_s_clk"; | ||||||
|  |  | ||||||
|  | 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||||
|  | 		memory-region = <&q6_mem_regions>, <&q6_etr_region>; | ||||||
|  | 	#else | ||||||
|  | 		memory-region = <&q6_mem_regions>, <&q6_etr_region>, | ||||||
|  | 				<&q6_caldb_region>; | ||||||
|  | 	#endif | ||||||
|  |  | ||||||
|  | 	qcom,rproc = <&q6v5_wcss>; | ||||||
|  | 	qcom,bootargs_smem = <507>; | ||||||
|  | 	boot-args = <0x1 0x4 0x3 0x0F 0x0 0x0>, | ||||||
|  | 			<0x2 0x4 0x2 0x12 0x0 0x0>; | ||||||
|  | 	status = "ok"; | ||||||
|  | 	q6_wcss_pd1: remoteproc_pd1@4ab000 { | ||||||
|  | 		compatible = "qcom,ipq5018-wcss-ahb-mpd"; | ||||||
|  | 		reg = <0x4ab000 0x20>; | ||||||
|  | 		reg-names = "rmb"; | ||||||
|  | 		firmware = "IPQ5018/q6_fw.mdt"; | ||||||
|  | 		m3_firmware = "IPQ5018/m3_fw.mdt"; | ||||||
|  | 		interrupts-extended = <&wcss_smp2p_in 8 0>, | ||||||
|  | 					<&wcss_smp2p_in 9 0>, | ||||||
|  | 					<&wcss_smp2p_in 12 0>, | ||||||
|  | 					<&wcss_smp2p_in 11 0>; | ||||||
|  | 		interrupt-names = "fatal", | ||||||
|  | 					"ready", | ||||||
|  | 					"spawn-ack", | ||||||
|  | 					"stop-ack"; | ||||||
|  |  | ||||||
|  | 		resets = <&gcc GCC_WCSSAON_RESET>, | ||||||
|  | 				<&gcc GCC_WCSS_BCR>, | ||||||
|  | 				<&gcc GCC_CE_BCR>; | ||||||
|  | 		reset-names = "wcss_aon_reset", | ||||||
|  | 				"wcss_reset", | ||||||
|  | 				"ce_reset"; | ||||||
|  |  | ||||||
|  | 		clocks = <&gcc GCC_WCSS_AHB_S_CLK>, | ||||||
|  | 				<&gcc GCC_WCSS_ACMT_CLK>, | ||||||
|  | 				<&gcc GCC_WCSS_AXI_M_CLK>; | ||||||
|  | 		clock-names = "gcc_wcss_ahb_s_clk", | ||||||
|  | 					"gcc_wcss_acmt_clk", | ||||||
|  | 					"gcc_wcss_axi_m_clk"; | ||||||
|  |  | ||||||
|  | 		qcom,halt-regs = <&tcsr_q6_block 0xa000 0xd000 0x0>; | ||||||
|  |  | ||||||
|  | 		qcom,smem-states = <&wcss_smp2p_out 8>, | ||||||
|  | 					<&wcss_smp2p_out 9>, | ||||||
|  | 					<&wcss_smp2p_out 10>; | ||||||
|  | 		qcom,smem-state-names = "shutdown", | ||||||
|  | 					"stop", | ||||||
|  | 					"spawn"; | ||||||
|  | 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||||
|  | 		memory-region = <&q6_ipq5018_data>, <&m3_dump>, | ||||||
|  | 				<&q6_etr_region>; | ||||||
|  | 	#else | ||||||
|  | 		memory-region = <&q6_ipq5018_data>, <&m3_dump>, | ||||||
|  | 				<&q6_etr_region>, <&q6_caldb_region>; | ||||||
|  | 	#endif | ||||||
|  |  | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	q6_wcss_pd2: remoteproc_pd2 { | ||||||
|  | 		compatible = "qcom,ipq5018-wcss-pcie-mpd"; | ||||||
|  | 		firmware = "IPQ5018/q6_fw.mdt"; | ||||||
|  | 		m3_firmware = "qcn6122/m3_fw.mdt"; | ||||||
|  | 		interrupts-extended = <&wcss_smp2p_in 16 0>, | ||||||
|  | 					<&wcss_smp2p_in 17 0>, | ||||||
|  | 					<&wcss_smp2p_in 20 0>, | ||||||
|  | 					<&wcss_smp2p_in 19 0>; | ||||||
|  | 		interrupt-names = "fatal", | ||||||
|  | 					"ready", | ||||||
|  | 					"spawn-ack", | ||||||
|  | 					"stop-ack"; | ||||||
|  |  | ||||||
|  | 		qcom,smem-states = <&wcss_smp2p_out 16>, | ||||||
|  | 					<&wcss_smp2p_out 17>, | ||||||
|  | 					<&wcss_smp2p_out 18>; | ||||||
|  | 		qcom,smem-state-names = "shutdown", | ||||||
|  | 					"stop", | ||||||
|  | 					"spawn"; | ||||||
|  | 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||||
|  | 		memory-region = <&q6_qcn6122_data1>, <&m3_dump_qcn6122_1>, | ||||||
|  | 				<&q6_qcn6122_etr_1>; | ||||||
|  | 	#else | ||||||
|  | 		memory-region = <&q6_qcn6122_data1>, <&m3_dump_qcn6122_1>, | ||||||
|  | 				<&q6_qcn6122_etr_1>, <&q6_qcn6122_caldb_1>; | ||||||
|  | 	#endif | ||||||
|  |  | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	q6_wcss_pd3: remoteproc_pd3 { | ||||||
|  | 		compatible = "qcom,ipq5018-wcss-pcie-mpd"; | ||||||
|  | 		firmware = "IPQ5018/q6_fw.mdt"; | ||||||
|  | 		interrupts-extended = <&wcss_smp2p_in 24 0>, | ||||||
|  | 					<&wcss_smp2p_in 25 0>, | ||||||
|  | 					<&wcss_smp2p_in 28 0>, | ||||||
|  | 					<&wcss_smp2p_in 27 0>; | ||||||
|  | 		interrupt-names = "fatal", | ||||||
|  | 					"ready", | ||||||
|  | 					"spawn-ack", | ||||||
|  | 					"stop-ack"; | ||||||
|  |  | ||||||
|  | 		qcom,smem-states = <&wcss_smp2p_out 24>, | ||||||
|  | 					<&wcss_smp2p_out 25>, | ||||||
|  | 					<&wcss_smp2p_out 26>; | ||||||
|  | 		qcom,smem-state-names = "shutdown", | ||||||
|  | 					"stop", | ||||||
|  | 					"spawn"; | ||||||
|  | 	#ifdef	__IPQ_MEM_PROFILE_256_MB__ | ||||||
|  | 		memory-region = <&q6_qcn6122_data2>, <&m3_dump_qcn6122_2>, | ||||||
|  | 				<&q6_qcn6122_etr_2>; | ||||||
|  | 	#else | ||||||
|  | 		memory-region = <&q6_qcn6122_data2>, <&m3_dump_qcn6122_2>, | ||||||
|  | 				<&q6_qcn6122_etr_2>, <&q6_qcn6122_caldb_2>; | ||||||
|  | 	#endif | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &i2c_0 { | ||||||
|  | 	pinctrl-0 = <&i2c_pins>; | ||||||
|  | 	pinctrl-names = "default"; | ||||||
|  | 	status = "disabled"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &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 = <0x4D400000 0x4D400000 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 = <0x50>; | ||||||
|  | #ifdef __CNSS2__ | ||||||
|  | 	qcom,bdf-addr = <0x4D600000 0x4D600000 0x4D300000 0x0 0x0>; | ||||||
|  | 	qcom,caldb-addr = <0x4E800000 0x4E800000 0 0 0>; | ||||||
|  | 	qcom,caldb-size = <0x500000>; | ||||||
|  | 	mem-region = <&q6_qcn6122_data1>; | ||||||
|  | #else | ||||||
|  | 	memory-region = <&q6_qcn6122_data1>; | ||||||
|  | #endif | ||||||
|  | 	status = "disabled"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &wifi2 { | ||||||
|  | 	/* QCN6122 6G */ | ||||||
|  | 	qcom,multipd_arch; | ||||||
|  | 	qcom,userpd-subsys-name = "q6v5_wcss_userpd3"; | ||||||
|  | 	qcom,rproc = <&q6_wcss_pd3>; | ||||||
|  | #ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||||
|  | 	qcom,tgt-mem-mode = <2>; | ||||||
|  | #else | ||||||
|  | 	qcom,tgt-mem-mode = <1>; | ||||||
|  | #endif | ||||||
|  | 	qcom,board_id = <0xb0>; | ||||||
|  | #ifdef __CNSS2__ | ||||||
|  | 	qcom,bdf-addr = <0x4ED00000 0x4ED00000 0x4E400000 0x0 0x0>; | ||||||
|  | 	qcom,caldb-addr = <0x4FF00000 0x4FF00000 0 0 0>; | ||||||
|  | 	qcom,caldb-size = <0x500000>; | ||||||
|  | 	mem-region = <&q6_qcn6122_data2>; | ||||||
|  | #else | ||||||
|  | 	memory-region = <&q6_qcn6122_data2>; | ||||||
|  | #endif | ||||||
|  | 	status = "ok"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | &usb3 { | ||||||
|  | 	status = "ok"; | ||||||
|  | 	device-power-gpio = <&tlmm 24 1>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &dwc_0 { | ||||||
|  | 	/delete-property/ #phy-cells; | ||||||
|  | 	/delete-property/ phys; | ||||||
|  | 	/delete-property/ phy-names; | ||||||
|  | }; | ||||||
|  | &hs_m31phy_0 { | ||||||
|  | 	status = "ok"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &eud { | ||||||
|  | 	status = "ok"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &pcie_x1 { | ||||||
|  | 	#status = "disabled"; | ||||||
|  | 	#perst-gpio = <&tlmm 18 1>; | ||||||
|  | 	perst-gpio = <&tlmm 18 GPIO_ACTIVE_LOW>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &pcie_x2 { | ||||||
|  | 	#status = "disabled"; | ||||||
|  | 	#perst-gpio = <&tlmm 15 1>; | ||||||
|  | 	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 >; | ||||||
|  |  | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
| @@ -151,6 +151,14 @@ | |||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4F000000 0x0 0x100000>; | 			reg = <0x0 0x4F000000 0x0 0x100000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
|  | 		ramoops: ramoops@4f100000 { | ||||||
|  | 			compatible = "ramoops"; | ||||||
|  | 			reg = <0x0 0x4f100000 0x0 0x80000>; | ||||||
|  | 			record-size = <0x20000>; | ||||||
|  | 			console-size = <0x20000>; | ||||||
|  | 			pmsg-size = <0x20000>; | ||||||
|  | 		}; | ||||||
| 	#else | 	#else | ||||||
| 	/*                 512MB/1GB Profiles | 	/*                 512MB/1GB Profiles | ||||||
| 	 * +==========+==============+=========================+ | 	 * +==========+==============+=========================+ | ||||||
| @@ -285,6 +293,13 @@ | |||||||
| 			reg = <0x0 0x4F800000 0x0 0x500000>; | 			reg = <0x0 0x4F800000 0x0 0x500000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
|  | 		ramoops: ramoops@4fd00000 { | ||||||
|  | 			compatible = "ramoops"; | ||||||
|  | 			reg = <0x0 0x4fd00000 0x0 0x80000>; | ||||||
|  | 			record-size = <0x20000>; | ||||||
|  | 			console-size = <0x20000>; | ||||||
|  | 			pmsg-size = <0x20000>; | ||||||
|  | 		}; | ||||||
| 	#endif | 	#endif | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -151,6 +151,14 @@ | |||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4F000000 0x0 0x100000>; | 			reg = <0x0 0x4F000000 0x0 0x100000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
|  | 		ramoops: ramoops@4f100000 { | ||||||
|  | 			compatible = "ramoops"; | ||||||
|  | 			reg = <0x0 0x4f100000 0x0 0x80000>; | ||||||
|  | 			record-size = <0x20000>; | ||||||
|  | 			console-size = <0x20000>; | ||||||
|  | 			pmsg-size = <0x20000>; | ||||||
|  | 		}; | ||||||
| 	#else | 	#else | ||||||
| 	/*                 512MB/1GB Profiles | 	/*                 512MB/1GB Profiles | ||||||
| 	 * +==========+==============+=========================+ | 	 * +==========+==============+=========================+ | ||||||
| @@ -285,6 +293,13 @@ | |||||||
| 			reg = <0x0 0x4F800000 0x0 0x500000>; | 			reg = <0x0 0x4F800000 0x0 0x500000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
|  | 		ramoops: ramoops@4fd00000 { | ||||||
|  | 			compatible = "ramoops"; | ||||||
|  | 			reg = <0x0 0x4fd00000 0x0 0x80000>; | ||||||
|  | 			record-size = <0x20000>; | ||||||
|  | 			console-size = <0x20000>; | ||||||
|  | 			pmsg-size = <0x20000>; | ||||||
|  | 		}; | ||||||
| 	#endif | 	#endif | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -154,6 +154,14 @@ | |||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4F000000 0x0 0x100000>; | 			reg = <0x0 0x4F000000 0x0 0x100000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
|  | 		ramoops: ramoops@4f100000 { | ||||||
|  | 			compatible = "ramoops"; | ||||||
|  | 			reg = <0x0 0x4f100000 0x0 0x80000>; | ||||||
|  | 			record-size = <0x20000>; | ||||||
|  | 			console-size = <0x20000>; | ||||||
|  | 			pmsg-size = <0x20000>; | ||||||
|  | 		}; | ||||||
| 	#else | 	#else | ||||||
| 	/*		 512MB/1GB Profiles | 	/*		 512MB/1GB Profiles | ||||||
| 	 * +==========+==============+=========================+ | 	 * +==========+==============+=========================+ | ||||||
| @@ -288,6 +296,13 @@ | |||||||
| 			reg = <0x0 0x4F800000 0x0 0x500000>; | 			reg = <0x0 0x4F800000 0x0 0x500000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
|  | 		ramoops: ramoops@4fd00000 { | ||||||
|  | 			compatible = "ramoops"; | ||||||
|  | 			reg = <0x0 0x4fd00000 0x0 0x80000>; | ||||||
|  | 			record-size = <0x20000>; | ||||||
|  | 			console-size = <0x20000>; | ||||||
|  | 			pmsg-size = <0x20000>; | ||||||
|  | 		}; | ||||||
| 	#endif | 	#endif | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -93,6 +93,42 @@ define Device/edgecore_eap104 | |||||||
| endef | endef | ||||||
| TARGET_DEVICES += edgecore_eap104 | TARGET_DEVICES += edgecore_eap104 | ||||||
|  |  | ||||||
|  | define Device/indio_um-325ax-v2 | ||||||
|  |   DEVICE_TITLE := Indio UM-325ax-V2 | ||||||
|  |   DEVICE_DTS := qcom-ipq5018-indio-um-325ax-v2 | ||||||
|  |   SUPPORTED_DEVICES := indio,um-325ax-v2 | ||||||
|  |   DEVICE_PACKAGES := ath11k-wifi-indio-um-325ax-v2 ath11k-firmware-ipq50xx-spruce ath11k-firmware-qcn6122 | ||||||
|  |   DEVICE_DTS_CONFIG := config@mp03.5-c1 | ||||||
|  | endef | ||||||
|  | TARGET_DEVICES += indio_um-325ax-v2 | ||||||
|  |  | ||||||
|  | define Device/indio_um-335ax | ||||||
|  |   DEVICE_TITLE := Indio UM-335ax | ||||||
|  |   DEVICE_DTS := qcom-ipq5018-indio-um-335ax | ||||||
|  |   SUPPORTED_DEVICES := indio,um-335ax | ||||||
|  |   DEVICE_PACKAGES := ath11k-wifi-indio-um-335ax ath11k-firmware-qcn9000 ath11k-firmware-ipq50xx-spruce | ||||||
|  |   DEVICE_DTS_CONFIG := config@mp03.1 | ||||||
|  | endef | ||||||
|  | TARGET_DEVICES += indio_um-335ax | ||||||
|  |  | ||||||
|  | define Device/indio_um-525axp | ||||||
|  |   DEVICE_TITLE := Indio UM-525axp | ||||||
|  |   DEVICE_DTS := qcom-ipq5018-indio-um-525axp | ||||||
|  |   SUPPORTED_DEVICES := indio,um-525axp | ||||||
|  |   DEVICE_PACKAGES := ath11k-wifi-indio-um-525axp ath11k-firmware-ipq50xx-spruce ath11k-firmware-qcn6122 | ||||||
|  |   DEVICE_DTS_CONFIG := config@mp03.5-c1 | ||||||
|  | endef | ||||||
|  | TARGET_DEVICES += indio_um-525axp | ||||||
|  |  | ||||||
|  | define Device/indio_um-525axm | ||||||
|  |   DEVICE_TITLE := Indio UM-525axm | ||||||
|  |   DEVICE_DTS := qcom-ipq5018-indio-um-525axm | ||||||
|  |   SUPPORTED_DEVICES := indio,um-525axm | ||||||
|  |   DEVICE_PACKAGES := ath11k-wifi-indio-um-525axm ath11k-firmware-ipq50xx-spruce ath11k-firmware-qcn6122 | ||||||
|  |   DEVICE_DTS_CONFIG := config@mp03.5-c1 | ||||||
|  | endef | ||||||
|  | TARGET_DEVICES += indio_um-525axm | ||||||
|  |  | ||||||
| define Device/udaya_a6_id2 | define Device/udaya_a6_id2 | ||||||
|   DEVICE_TITLE := Udaya A6 - ID2 |   DEVICE_TITLE := Udaya A6 - ID2 | ||||||
|   DEVICE_DTS := qcom-ipq5018-udaya-a6-id2 |   DEVICE_DTS := qcom-ipq5018-udaya-a6-id2 | ||||||
|   | |||||||
| @@ -169,7 +169,8 @@ | |||||||
| 		compatible = "mediatek,eth-mac"; | 		compatible = "mediatek,eth-mac"; | ||||||
| 		reg = <0>; | 		reg = <0>; | ||||||
| 		phy-mode = "sgmii"; | 		phy-mode = "sgmii"; | ||||||
| 		phy-handle = <&phy1>;      // add phy handler | 		phy-handle = <&phy30>; | ||||||
|  | 		phy-handle2 = <&phy1>; | ||||||
| 		mtd-mac-address = <&factory 0x24>; | 		mtd-mac-address = <&factory 0x24>; | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
| @@ -193,6 +194,16 @@ | |||||||
| 			nvmem-cell-names = "phy-cal-data"; | 			nvmem-cell-names = "phy-cal-data"; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
|  | 		phy30: ethernet-phy@30 { // AN8801SB | ||||||
|  | 			compatible = "ethernet-phy-idc0ff.0421"; | ||||||
|  | 			reg = <30>; //0x1e | ||||||
|  | 			phy-mode = "sgmii"; | ||||||
|  | 			full-duplex; | ||||||
|  | 			pause; | ||||||
|  | 			airoha,surge = <0>; | ||||||
|  | 			airoha,polarity = <2>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
| 		phy1: ethernet-phy@1 { | 		phy1: ethernet-phy@1 { | ||||||
| 			compatible = "ethernet-phy-id03a2.9471"; | 			compatible = "ethernet-phy-id03a2.9471"; | ||||||
| 			reg = <24>;            // set phy address to 0x18 | 			reg = <24>;            // set phy address to 0x18 | ||||||
| @@ -201,7 +212,6 @@ | |||||||
| 			reset-deassert-us = <20000>; | 			reset-deassert-us = <20000>; | ||||||
| 			phy-mode = "sgmii"; | 			phy-mode = "sgmii"; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 	}; | 	}; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -93,6 +93,11 @@ $(call Package/ath12k-wifi-default) | |||||||
|     TITLE:=board-2.bin for NWA130BE |     TITLE:=board-2.bin for NWA130BE | ||||||
| endef | 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 | define Package/ath12k-wifi-cig-wf672 | ||||||
| $(call Package/ath12k-wifi-default) | $(call Package/ath12k-wifi-default) | ||||||
|     TITLE:=board-2.bin for WF672 |     TITLE:=board-2.bin for WF672 | ||||||
| @@ -191,6 +196,14 @@ define Package/ath12k-wifi-zyxel-nwa130be/install | |||||||
| 	$(INSTALL_DATA) ./board-2.bin.nwa130be.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin | 	$(INSTALL_DATA) ./board-2.bin.nwa130be.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin | ||||||
| endef | endef | ||||||
|  |  | ||||||
|  | define Package/ath12k-wifi-zyxel-nwa50be/install | ||||||
|  | 	$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN6432/hw1.0/ | ||||||
|  | 	$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/ | ||||||
|  | 	$(INSTALL_DATA) ./board-2.bin.nwa50be.QCN6432 $(1)/lib/firmware/ath12k/QCN6432/hw1.0/board-2.bin | ||||||
|  | 	$(INSTALL_DATA) ./board-2.bin.nwa50be.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin | ||||||
|  | 	$(INSTALL_DATA) ./ipq5332_qcn6432.regdb $(1)/lib/firmware/ath12k/QCN6432/hw1.0/regdb.bin | ||||||
|  | endef | ||||||
|  |  | ||||||
| define Package/ath12k-wifi-cig-wf672/install | define Package/ath12k-wifi-cig-wf672/install | ||||||
| 	$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/ | 	$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/ | ||||||
| 	$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/ | 	$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/ | ||||||
| @@ -210,4 +223,5 @@ $(eval $(call BuildPackage,ath12k-wifi-cig-wf189h)) | |||||||
| $(eval $(call BuildPackage,ath12k-wifi-sercomm-ap72tip)) | $(eval $(call BuildPackage,ath12k-wifi-sercomm-ap72tip)) | ||||||
| $(eval $(call BuildPackage,ath12k-wifi-sercomm-ap72tip-v4)) | $(eval $(call BuildPackage,ath12k-wifi-sercomm-ap72tip-v4)) | ||||||
| $(eval $(call BuildPackage,ath12k-wifi-zyxel-nwa130be)) | $(eval $(call BuildPackage,ath12k-wifi-zyxel-nwa130be)) | ||||||
|  | $(eval $(call BuildPackage,ath12k-wifi-zyxel-nwa50be)) | ||||||
| $(eval $(call BuildPackage,ath12k-wifi-cig-wf672)) | $(eval $(call BuildPackage,ath12k-wifi-cig-wf672)) | ||||||
|   | |||||||
							
								
								
									
										20
									
								
								feeds/qca-wifi-7/ath12k-wifi/board-2-nwa50be-IPQ5332.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								feeds/qca-wifi-7/ath12k-wifi/board-2-nwa50be-IPQ5332.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | [ | ||||||
|  |     { | ||||||
|  |         "board": [ | ||||||
|  |             { | ||||||
|  |                 "names": [ | ||||||
|  |                     "bus=ahb,qmi-chip-id=0,qmi-board-id=18" | ||||||
|  |                 ], | ||||||
|  |                 "data": "nwa50be-IPQ5332.bin" | ||||||
|  |             } | ||||||
|  |         ], | ||||||
|  |         "regdb": [ | ||||||
|  |             { | ||||||
|  |                 "names": [ | ||||||
|  |                     "bus=ahb,qmi-chip-id=0,qmi-board-id=18" | ||||||
|  |                 ], | ||||||
|  |                 "data": "ipq5332.regdb" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     } | ||||||
|  | ] | ||||||
							
								
								
									
										20
									
								
								feeds/qca-wifi-7/ath12k-wifi/board-2-nwa50be-QCN6432.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								feeds/qca-wifi-7/ath12k-wifi/board-2-nwa50be-QCN6432.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | [ | ||||||
|  |     { | ||||||
|  |         "board": [ | ||||||
|  |             { | ||||||
|  |                 "names": [ | ||||||
|  |                     "bus=ahb,qmi-chip-id=0,qmi-board-id=112" | ||||||
|  |                 ], | ||||||
|  |                 "data": "nwa50be-QCN6432.bin" | ||||||
|  |             } | ||||||
|  |         ], | ||||||
|  |         "regdb": [ | ||||||
|  |             { | ||||||
|  |                 "names": [ | ||||||
|  |                     "bus=ahb,qmi-chip-id=0,qmi-board-id=112" | ||||||
|  |                 ], | ||||||
|  |                 "data": "ipq5332_qcn6432.regdb" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     } | ||||||
|  | ] | ||||||
							
								
								
									
										
											BIN
										
									
								
								feeds/qca-wifi-7/ath12k-wifi/board-2.bin.nwa50be.IPQ5332
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/qca-wifi-7/ath12k-wifi/board-2.bin.nwa50be.IPQ5332
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/qca-wifi-7/ath12k-wifi/board-2.bin.nwa50be.QCN6432
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/qca-wifi-7/ath12k-wifi/board-2.bin.nwa50be.QCN6432
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -18,3 +18,6 @@ $encoder -c board-2-ap72tip-v4-QCN92XX.json -o board-2.bin.ap72tip-v4.QCN92XX | |||||||
|  |  | ||||||
| $encoder -c board-2-nwa130be-IPQ5332.json -o board-2.bin.nwa130be.IPQ5332 | $encoder -c board-2-nwa130be-IPQ5332.json -o board-2.bin.nwa130be.IPQ5332 | ||||||
| $encoder -c board-2-nwa130be-QCN92XX.json -o board-2.bin.nwa130be.QCN92XX | $encoder -c board-2-nwa130be-QCN92XX.json -o board-2.bin.nwa130be.QCN92XX | ||||||
|  |  | ||||||
|  | $encoder -c board-2-nwa50be-IPQ5332.json -o board-2.bin.nwa50be.IPQ5332 | ||||||
|  | $encoder -c board-2-nwa50be-QCN6432.json -o board-2.bin.nwa50be.QCN6432 | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								feeds/qca-wifi-7/ath12k-wifi/nwa50be-IPQ5332.bin
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/qca-wifi-7/ath12k-wifi/nwa50be-IPQ5332.bin
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/qca-wifi-7/ath12k-wifi/nwa50be-QCN6432.bin
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/qca-wifi-7/ath12k-wifi/nwa50be-QCN6432.bin
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -24,7 +24,9 @@ endef | |||||||
|  |  | ||||||
| define KernelPackage/cig-wifi-mode-sw/install | define KernelPackage/cig-wifi-mode-sw/install | ||||||
| 	$(INSTALL_DIR) $(1)/usr/sbin/ | 	$(INSTALL_DIR) $(1)/usr/sbin/ | ||||||
|  | 	$(INSTALL_DIR) $(1)/etc/init.d/ | ||||||
| 	$(INSTALL_BIN) ./files/cig_wifi_mode_sw $(1)/usr/sbin/cig_wms | 	$(INSTALL_BIN) ./files/cig_wifi_mode_sw $(1)/usr/sbin/cig_wms | ||||||
|  | 	$(INSTALL_BIN) ./files/cig_wifi_mode_boot $(1)/etc/init.d/cig_wmb | ||||||
| endef | endef | ||||||
|  |  | ||||||
| $(eval $(call KernelPackage,cig-wifi-mode-sw)) | $(eval $(call KernelPackage,cig-wifi-mode-sw)) | ||||||
|   | |||||||
							
								
								
									
										13
									
								
								feeds/qca-wifi-7/cig-platform-pkg/cig-wifi-mode-sw/files/cig_wifi_mode_boot
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										13
									
								
								feeds/qca-wifi-7/cig-platform-pkg/cig-wifi-mode-sw/files/cig_wifi_mode_boot
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | #!/bin/sh /etc/rc.common | ||||||
|  |  | ||||||
|  | START=60 | ||||||
|  |  | ||||||
|  | boot(){ | ||||||
|  | 	local bands=$(cat /proc/rf_switch) | ||||||
|  |  | ||||||
|  | 	if [ "x$bands" = "x3" ]; then | ||||||
|  | 		echo "AFC is not ready, switch to 2-band mode" >/dev/console | ||||||
|  | 		echo 2 > /proc/rf_switch | ||||||
|  | 		firstboot -y -r | ||||||
|  | 	fi | ||||||
|  | } | ||||||
| @@ -259,8 +259,13 @@ const phy_proto = { | |||||||
| 			addr[0] ^= idx << 2; | 			addr[0] ^= idx << 2; | ||||||
| 			break; | 			break; | ||||||
| 		case "b5": | 		case "b5": | ||||||
| 			if (mbssid) | 			if (mbssid) { | ||||||
|  | 				let b5 = addr[5]; | ||||||
|  | 				addr[5] = addr[3]; | ||||||
|  | 				addr[3] = b5; | ||||||
|  | 				addr[5] &= ~0xf; | ||||||
| 				addr[0] |= 2; | 				addr[0] |= 2; | ||||||
|  | 			} | ||||||
| 			addr[5] ^= idx; | 			addr[5] ^= idx; | ||||||
| 			break; | 			break; | ||||||
| 		default: | 		default: | ||||||
|   | |||||||
| @@ -14,13 +14,17 @@ ipq53xx_setup_interfaces() | |||||||
| 		;; | 		;; | ||||||
| 	cig,wf189|\ | 	cig,wf189|\ | ||||||
| 	edgecore,eap105|\ | 	edgecore,eap105|\ | ||||||
| 	sercomm,ap72tip|\ | 	sercomm,ap72tip) | ||||||
|  | 		ucidef_set_interfaces_lan_wan "eth1" "eth0" | ||||||
|  | 		;; | ||||||
| 	sonicfi,rap750w-311a) | 	sonicfi,rap750w-311a) | ||||||
| 		ucidef_set_interfaces_lan_wan "eth1" "eth0" | 		ucidef_set_interfaces_lan_wan "eth1" "eth0" | ||||||
|  | 		ucidef_add_switch "switch1" "0u@eth1" "3:lan" "2:lan" "1:lan" | ||||||
| 		;; | 		;; | ||||||
| 	sonicfi,rap7110c-341x|\ | 	sonicfi,rap7110c-341x|\ | ||||||
| 	sonicfi,rap750e-h|\ | 	sonicfi,rap750e-h|\ | ||||||
| 	sonicfi,rap750e-s) | 	sonicfi,rap750e-s|\ | ||||||
|  | 	zyxel,nwa50be) | ||||||
| 		ucidef_set_interfaces_lan_wan "" "eth0" | 		ucidef_set_interfaces_lan_wan "" "eth0" | ||||||
| 		;; | 		;; | ||||||
| 	cig,wf189w) | 	cig,wf189w) | ||||||
| @@ -127,6 +131,16 @@ qcom_setup_macs() | |||||||
| 		ucidef_set_wireless_macaddr_base 5g $(macaddr_add "$wan_mac" 3) | 		ucidef_set_wireless_macaddr_base 5g $(macaddr_add "$wan_mac" 3) | ||||||
| 		ucidef_set_wireless_macaddr_base 6g $(macaddr_add "$wan_mac" 4) | 		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/:$//')" | ||||||
|  | 		ucidef_set_network_device_mac eth0 $wan_mac | ||||||
|  | 		ucidef_set_label_macaddr $wan_mac | ||||||
|  | 		ucidef_set_wireless_macaddr_base 2g $(macaddr_add "$wan_mac" 1) | ||||||
|  | 		ucidef_set_wireless_macaddr_base 5g $(macaddr_add "$wan_mac" 2) | ||||||
|  | 		;; | ||||||
|         *) |         *) | ||||||
|                 wan_mac=$(cat /sys/class/net/eth1/address) |                 wan_mac=$(cat /sys/class/net/eth1/address) | ||||||
|                 lan_mac=$(macaddr_add "$wan_mac" 1) |                 lan_mac=$(macaddr_add "$wan_mac" 1) | ||||||
|   | |||||||
| @@ -67,7 +67,8 @@ ath12k/IPQ5332/hw1.0/caldata.bin) | |||||||
| 	emplus,wap7635|\ | 	emplus,wap7635|\ | ||||||
| 	sercomm,ap72tip-v4|\ | 	sercomm,ap72tip-v4|\ | ||||||
| 	sercomm,ap72tip|\ | 	sercomm,ap72tip|\ | ||||||
| 	zyxel,nwa130be) | 	zyxel,nwa130be|\ | ||||||
|  | 	zyxel,nwa50be) | ||||||
| 		caldata_extract "0:ART" 0x1000 0x20000 | 		caldata_extract "0:ART" 0x1000 0x20000 | ||||||
| 		;; | 		;; | ||||||
| 	cig,wf672) | 	cig,wf672) | ||||||
| @@ -124,6 +125,9 @@ ath12k/QCN6432/hw1.0/cal-ahb-soc@0:wifi2@c0000000.bin) | |||||||
| 	cig,wf189w) | 	cig,wf189w) | ||||||
| 		caldata_extract "0:ART" 0x58800 0x20000 | 		caldata_extract "0:ART" 0x58800 0x20000 | ||||||
| 		;; | 		;; | ||||||
|  | 	zyxel,nwa50be) | ||||||
|  | 		caldata_extract "0:ART" 0x58800 0x2d000 | ||||||
|  | 		;; | ||||||
| 	esac | 	esac | ||||||
| 	;; | 	;; | ||||||
| ath12k/IPQ5332/hw1.0/board-2.bin) | ath12k/IPQ5332/hw1.0/board-2.bin) | ||||||
|   | |||||||
| @@ -9,14 +9,5 @@ boot() { | |||||||
| 	edgecore,eap105) | 	edgecore,eap105) | ||||||
| 		ssdk_sh debug phy set 0x1 0x601FD032 0xff | 		ssdk_sh debug phy set 0x1 0x601FD032 0xff | ||||||
| 		;; | 		;; | ||||||
| 	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 | 	esac | ||||||
| } | } | ||||||
|   | |||||||
| @@ -174,7 +174,8 @@ platform_do_upgrade() { | |||||||
| 		sonicfi_dualimage_check | 		sonicfi_dualimage_check | ||||||
| 		nand_upgrade_tar "$1" | 		nand_upgrade_tar "$1" | ||||||
| 		;; | 		;; | ||||||
| 	zyxel,nwa130be) | 	zyxel,nwa130be|\ | ||||||
|  | 	zyxel,nwa50be) | ||||||
| 		nand_upgrade_tar "$1" | 		nand_upgrade_tar "$1" | ||||||
| 		;; | 		;; | ||||||
| 	esac | 	esac | ||||||
|   | |||||||
| @@ -1180,7 +1180,7 @@ CONFIG_QTI_LICENSE_MANAGER=y | |||||||
| # CONFIG_SYMBOLIC_ERRNAME is not set | # CONFIG_SYMBOLIC_ERRNAME is not set | ||||||
| # CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set | # CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set | ||||||
| # CONFIG_LEDS_CLASS_MULTICOLOR is not set | # CONFIG_LEDS_CLASS_MULTICOLOR is not set | ||||||
| # CONFIG_LEDS_TRIGGER_HEARTBEAT is not set | CONFIG_LEDS_TRIGGER_HEARTBEAT=y  | ||||||
| # CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY is not set | # CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY is not set | ||||||
| # CONFIG_PINCTRL_SINGLE is not set | # CONFIG_PINCTRL_SINGLE is not set | ||||||
| # CONFIG_RANDOM_TRUST_BOOTLOADER is not set | # CONFIG_RANDOM_TRUST_BOOTLOADER is not set | ||||||
|   | |||||||
| @@ -18,6 +18,21 @@ | |||||||
| 	model = "Zyxel NWA130BE"; | 	model = "Zyxel NWA130BE"; | ||||||
| 	compatible = "zyxel,nwa130be", "qcom,ipq5332-ap-mi01.6", "qcom,ipq5332-rdp468", "qcom,ipq5332"; | 	compatible = "zyxel,nwa130be", "qcom,ipq5332-ap-mi01.6", "qcom,ipq5332-rdp468", "qcom,ipq5332"; | ||||||
|  |  | ||||||
|  | 	reserved-memory { | ||||||
|  | 		#address-cells = <2>; | ||||||
|  | 		#size-cells = <2>; | ||||||
|  | 		ranges; | ||||||
|  |  | ||||||
|  | 		ramoops@49c00000 { | ||||||
|  | 			compatible = "ramoops"; | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x49c00000 0x0 0x100000>; | ||||||
|  | 			record-size = <0x20000>; | ||||||
|  | 			console-size = <0x20000>; | ||||||
|  | 			pmsg-size = <0x20000>; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
| 	aliases { | 	aliases { | ||||||
| 		serial0 = &blsp1_uart0; | 		serial0 = &blsp1_uart0; | ||||||
| 		serial1 = &blsp1_uart1; | 		serial1 = &blsp1_uart1; | ||||||
| @@ -128,6 +143,26 @@ | |||||||
| 					blink_en = "enable"; | 					blink_en = "enable"; | ||||||
| 					active = "high"; | 					active = "high"; | ||||||
| 				}; | 				}; | ||||||
|  |  | ||||||
|  | 				qcom,port_ledinfo { | ||||||
|  | 					port@1 { | ||||||
|  | 						port = <2>; | ||||||
|  | 						led_source@0 { | ||||||
|  | 							source = <0>; | ||||||
|  | 							mode = "normal"; | ||||||
|  | 							speed = "2500M"; | ||||||
|  | 							active = "high"; | ||||||
|  | 							blink_en = "enable"; | ||||||
|  | 						}; | ||||||
|  | 						led_source@1 { | ||||||
|  | 							source = <1>; | ||||||
|  | 							mode = "normal"; | ||||||
|  | 							speed = "10M", "100M","1000M"; | ||||||
|  | 							active = "high"; | ||||||
|  | 							blink_en = "enable"; | ||||||
|  | 						}; | ||||||
|  | 					}; | ||||||
|  | 				}; | ||||||
| 			}; | 			}; | ||||||
|  |  | ||||||
| 			ess-switch1@1 { | 			ess-switch1@1 { | ||||||
| @@ -164,6 +199,26 @@ | |||||||
| 					}; | 					}; | ||||||
| 				}; | 				}; | ||||||
|  |  | ||||||
|  | 				qcom,port_ledinfo { | ||||||
|  | 					port@3 { | ||||||
|  | 						port = <3>; | ||||||
|  | 						led_source@0 { | ||||||
|  | 							source = <0>; | ||||||
|  | 							mode = "normal"; | ||||||
|  | 							speed = "2500M"; | ||||||
|  | 							active = "high"; | ||||||
|  | 							blink_en = "enable"; | ||||||
|  | 						}; | ||||||
|  | 						led_source@1 { | ||||||
|  | 							source = <1>; | ||||||
|  | 							mode = "normal"; | ||||||
|  | 							speed = "10M", "100M","1000M"; | ||||||
|  | 							active = "high"; | ||||||
|  | 							blink_en = "enable"; | ||||||
|  | 						}; | ||||||
|  | 					}; | ||||||
|  | 				}; | ||||||
|  |  | ||||||
| 				led_source@2 { | 				led_source@2 { | ||||||
| 					source = <2>; | 					source = <2>; | ||||||
| 					mode = "normal"; | 					mode = "normal"; | ||||||
|   | |||||||
							
								
								
									
										956
									
								
								feeds/qca-wifi-7/ipq53xx/dts/ipq5332-zyxel-nwa50be.dts
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										956
									
								
								feeds/qca-wifi-7/ipq53xx/dts/ipq5332-zyxel-nwa50be.dts
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,956 @@ | |||||||
|  | // 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; | ||||||
|  |  | ||||||
|  | 		ramoops@49c00000 { | ||||||
|  | 			compatible = "ramoops"; | ||||||
|  | 			reg = <0x0 0x49c00000 0x0 0x100000>; | ||||||
|  | 			record-size = <0x20000>; | ||||||
|  | 			console-size = <0x20000>; | ||||||
|  | 			pmsg-size = <0x20000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		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 30 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 = <0xc>; /* 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>; | ||||||
|  | 					}; | ||||||
|  | 				}; | ||||||
|  | 				qcom,port_ledinfo { | ||||||
|  | 					port@0 { | ||||||
|  | 						port = <2>; | ||||||
|  | 						led_source@0 { | ||||||
|  | 							source = <0>; | ||||||
|  | 							mode = "normal"; | ||||||
|  | 							speed = "2500M"; | ||||||
|  | 							active = "high"; | ||||||
|  | 							blink_en = "enable"; | ||||||
|  | 						}; | ||||||
|  | 						led_source@1 { | ||||||
|  | 							source = <1>; | ||||||
|  | 							mode = "normal"; | ||||||
|  | 							speed = "10M", "100M","1000M"; | ||||||
|  | 							active = "high"; | ||||||
|  | 							blink_en = "enable"; | ||||||
|  | 						}; | ||||||
|  | 					}; | ||||||
|  | 				}; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		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 = <2>; | ||||||
|  | 			chip_info = <0 1 1>, | ||||||
|  | 				    <1 1 0>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		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 = "okay"; | ||||||
|  | 				}; | ||||||
|  |  | ||||||
|  | 				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 = "okay"; | ||||||
|  | 				}; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &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>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &xo { | ||||||
|  | 	clock-frequency = <24000000>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &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 { | ||||||
|  | 		board_info { | ||||||
|  | 			pins = "gpio2", "gpio3"; | ||||||
|  | 			function = "gpio"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-down; | ||||||
|  | 			input-enable; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		apd_dc_in { | ||||||
|  | 			pins = "gpio24"; | ||||||
|  | 			function = "gpio"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-down; //Adapter un-plug | ||||||
|  | 			input-enable; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		poe_status { | ||||||
|  | 			pins = "gpio34"; | ||||||
|  | 			function = "gpio"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-up; //AF | ||||||
|  | 			input-enable; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		/* To MR pin */ | ||||||
|  | 		rst_mb { | ||||||
|  | 			pins = "gpio29"; | ||||||
|  | 			function = "gpio"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			output-high; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		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 = "okay"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &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 = "disabled"; | ||||||
|  | 	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 = <1>; | ||||||
|  | 	qcom,wide_band = <1>; | ||||||
|  | 	status = "okay"; | ||||||
|  | 	interrupts = <GIC_SPI 410 IRQ_TYPE_EDGE_RISING>; | ||||||
|  | 	interrupt-names = "umac_reset"; | ||||||
|  | }; | ||||||
| @@ -162,6 +162,22 @@ define Device/zyxel_nwa130be | |||||||
| endef | endef | ||||||
| TARGET_DEVICES += zyxel_nwa130be | 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-nwa50be ath12k-firmware-ipq5332-peb-peb -ath12k-firmware-qcn92xx | ||||||
|  | endef | ||||||
|  | TARGET_DEVICES += zyxel_nwa50be | ||||||
|  |  | ||||||
| define Device/cig_wf672 | define Device/cig_wf672 | ||||||
|   DEVICE_TITLE := CIG WF672 |   DEVICE_TITLE := CIG WF672 | ||||||
|   DEVICE_DTS := ipq5332-cig-wf672 |   DEVICE_DTS := ipq5332-cig-wf672 | ||||||
|   | |||||||
| @@ -0,0 +1,33 @@ | |||||||
|  | From f7b27331b915477cd289c37b56efb0d28b2d6f38 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Antonio Wu <antonio.wu@cybertan.com.tw> | ||||||
|  | Date: Tue, 5 Aug 2025 10:39:58 +0000 | ||||||
|  | Subject: [PATCH] Add IPQ_MEM_PROFILE in arm64 kconfig | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  arch/arm64/Kconfig | 10 ++++++++++ | ||||||
|  |  1 file changed, 10 insertions(+) | ||||||
|  |  | ||||||
|  | diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig | ||||||
|  | index 702a289..7864e79 100644 | ||||||
|  | --- a/arch/arm64/Kconfig | ||||||
|  | +++ b/arch/arm64/Kconfig | ||||||
|  | @@ -2143,6 +2143,16 @@ config STACKPROTECTOR_PER_TASK | ||||||
|  |  	def_bool y | ||||||
|  |  	depends on STACKPROTECTOR && CC_HAVE_STACKPROTECTOR_SYSREG | ||||||
|  |   | ||||||
|  | +config IPQ_MEM_PROFILE | ||||||
|  | +	int "Select Memory Profile" | ||||||
|  | +	range 0 1024 | ||||||
|  | +	default 0 | ||||||
|  | +	help | ||||||
|  | +	  This option select memory profile to be used, which defines | ||||||
|  | +	  the reserved memory configuration used in device tree. | ||||||
|  | + | ||||||
|  | +	  If unsure, say 0 | ||||||
|  | + | ||||||
|  |  # The GPIO number here must be sorted by descending number. In case of | ||||||
|  |  # a multiplatform kernel, we just want the highest value required by the | ||||||
|  |  # selected platforms. | ||||||
|  | --  | ||||||
|  | 2.17.1 | ||||||
|  |  | ||||||
| @@ -0,0 +1,63 @@ | |||||||
|  | Index: backports-6.5-rc3/drivers/net/wireless/ath/ath12k/thermal.h | ||||||
|  | =================================================================== | ||||||
|  | --- backports-6.5-rc3.orig/drivers/net/wireless/ath/ath12k/thermal.h | ||||||
|  | +++ backports-6.5-rc3/drivers/net/wireless/ath/ath12k/thermal.h | ||||||
|  | @@ -13,35 +13,35 @@ | ||||||
|  |   | ||||||
|  |  /* Below temperatures are in celsius */ | ||||||
|  |  #define ATH12K_THERMAL_LVL0_TEMP_LOW_MARK -100 | ||||||
|  | -#define ATH12K_THERMAL_LVL0_TEMP_HIGH_MARK 100 | ||||||
|  | -#define ATH12K_THERMAL_LVL1_TEMP_LOW_MARK 95 | ||||||
|  | -#define ATH12K_THERMAL_LVL1_TEMP_HIGH_MARK 105 | ||||||
|  | -#define ATH12K_THERMAL_LVL2_TEMP_LOW_MARK 100 | ||||||
|  | -#define ATH12K_THERMAL_LVL2_TEMP_HIGH_MARK 110 | ||||||
|  | -#define ATH12K_THERMAL_LVL3_TEMP_LOW_MARK 105 | ||||||
|  | -#define ATH12K_THERMAL_LVL3_TEMP_HIGH_MARK 120 | ||||||
|  | +#define ATH12K_THERMAL_LVL0_TEMP_HIGH_MARK 110 | ||||||
|  | +#define ATH12K_THERMAL_LVL1_TEMP_LOW_MARK 105 | ||||||
|  | +#define ATH12K_THERMAL_LVL1_TEMP_HIGH_MARK 115 | ||||||
|  | +#define ATH12K_THERMAL_LVL2_TEMP_LOW_MARK 110 | ||||||
|  | +#define ATH12K_THERMAL_LVL2_TEMP_HIGH_MARK 120 | ||||||
|  | +#define ATH12K_THERMAL_LVL3_TEMP_LOW_MARK 115 | ||||||
|  | +#define ATH12K_THERMAL_LVL3_TEMP_HIGH_MARK 125 | ||||||
|  |   | ||||||
|  |  #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_LVL4_V2_TEMP_LOW_MARK 105 | ||||||
|  | +#define ATH12K_THERMAL_LVL0_V2_TEMP_HIGH_MARK 105 | ||||||
|  | +#define ATH12K_THERMAL_LVL1_V2_TEMP_LOW_MARK 100 | ||||||
|  | +#define ATH12K_THERMAL_LVL1_V2_TEMP_HIGH_MARK 110 | ||||||
|  | +#define ATH12K_THERMAL_LVL2_V2_TEMP_LOW_MARK 105 | ||||||
|  | +#define ATH12K_THERMAL_LVL2_V2_TEMP_HIGH_MARK 115 | ||||||
|  | +#define ATH12K_THERMAL_LVL3_V2_TEMP_LOW_MARK 110 | ||||||
|  | +#define ATH12K_THERMAL_LVL3_V2_TEMP_HIGH_MARK 120 | ||||||
|  | +#define ATH12K_THERMAL_LVL4_V2_TEMP_LOW_MARK 110 | ||||||
|  |  #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 30 | ||||||
|  | +#define ATH12K_THERMAL_LVL2_DUTY_CYCLE 50 | ||||||
|  | +#define ATH12K_THERMAL_LVL3_DUTY_CYCLE 70 | ||||||
|  |   | ||||||
|  | -#define ATH12K_THERMAL_LVL0_V2_DUTY_CYCLE ATH12K_THERMAL_LVL0_DUTY_CYCLE | ||||||
|  | -#define ATH12K_THERMAL_LVL1_V2_DUTY_CYCLE ATH12K_THERMAL_LVL0_DUTY_CYCLE | ||||||
|  | -#define ATH12K_THERMAL_LVL2_V2_DUTY_CYCLE ATH12K_THERMAL_LVL1_DUTY_CYCLE | ||||||
|  | -#define ATH12K_THERMAL_LVL3_V2_DUTY_CYCLE ATH12K_THERMAL_LVL2_DUTY_CYCLE | ||||||
|  | -#define ATH12K_THERMAL_LVL4_V2_DUTY_CYCLE ATH12K_THERMAL_LVL3_DUTY_CYCLE | ||||||
|  | +#define ATH12K_THERMAL_LVL0_V2_DUTY_CYCLE 0 | ||||||
|  | +#define ATH12K_THERMAL_LVL1_V2_DUTY_CYCLE 20 | ||||||
|  | +#define ATH12K_THERMAL_LVL2_V2_DUTY_CYCLE 40 | ||||||
|  | +#define ATH12K_THERMAL_LVL3_V2_DUTY_CYCLE 80 | ||||||
|  | +#define ATH12K_THERMAL_LVL4_V2_DUTY_CYCLE 100 | ||||||
|  |   | ||||||
|  |  #define THERMAL_CONFIG_POUT0                        0 | ||||||
|  |  #define THERMAL_CONFIG_POUT1                        12 | ||||||
| @@ -0,0 +1,57 @@ | |||||||
|  | --- a/drivers/net/wireless/ath/ath12k/thermal.h | ||||||
|  | +++ b/drivers/net/wireless/ath/ath12k/thermal.h | ||||||
|  | @@ -13,34 +13,34 @@ | ||||||
|  |   | ||||||
|  |  /* Below temperatures are in celsius */ | ||||||
|  |  #define ATH12K_THERMAL_LVL0_TEMP_LOW_MARK -100 | ||||||
|  | -#define ATH12K_THERMAL_LVL0_TEMP_HIGH_MARK 100 | ||||||
|  | -#define ATH12K_THERMAL_LVL1_TEMP_LOW_MARK 95 | ||||||
|  | -#define ATH12K_THERMAL_LVL1_TEMP_HIGH_MARK 105 | ||||||
|  | -#define ATH12K_THERMAL_LVL2_TEMP_LOW_MARK 100 | ||||||
|  | -#define ATH12K_THERMAL_LVL2_TEMP_HIGH_MARK 110 | ||||||
|  | -#define ATH12K_THERMAL_LVL3_TEMP_LOW_MARK 105 | ||||||
|  | +#define ATH12K_THERMAL_LVL0_TEMP_HIGH_MARK 105 | ||||||
|  | +#define ATH12K_THERMAL_LVL1_TEMP_LOW_MARK 100 | ||||||
|  | +#define ATH12K_THERMAL_LVL1_TEMP_HIGH_MARK 110 | ||||||
|  | +#define ATH12K_THERMAL_LVL2_TEMP_LOW_MARK 105 | ||||||
|  | +#define ATH12K_THERMAL_LVL2_TEMP_HIGH_MARK 115 | ||||||
|  | +#define ATH12K_THERMAL_LVL3_TEMP_LOW_MARK 110 | ||||||
|  |  #define ATH12K_THERMAL_LVL3_TEMP_HIGH_MARK 120 | ||||||
|  |   | ||||||
|  |  #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_LVL4_V2_TEMP_LOW_MARK 105 | ||||||
|  | +#define ATH12K_THERMAL_LVL0_V2_TEMP_HIGH_MARK 105 | ||||||
|  | +#define ATH12K_THERMAL_LVL1_V2_TEMP_LOW_MARK 100 | ||||||
|  | +#define ATH12K_THERMAL_LVL1_V2_TEMP_HIGH_MARK 110 | ||||||
|  | +#define ATH12K_THERMAL_LVL2_V2_TEMP_LOW_MARK 105 | ||||||
|  | +#define ATH12K_THERMAL_LVL2_V2_TEMP_HIGH_MARK 115 | ||||||
|  | +#define ATH12K_THERMAL_LVL3_V2_TEMP_LOW_MARK 110 | ||||||
|  | +#define ATH12K_THERMAL_LVL3_V2_TEMP_HIGH_MARK 120 | ||||||
|  | +#define ATH12K_THERMAL_LVL4_V2_TEMP_LOW_MARK 110 | ||||||
|  |  #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 30 | ||||||
|  | +#define ATH12K_THERMAL_LVL2_DUTY_CYCLE 50 | ||||||
|  | +#define ATH12K_THERMAL_LVL3_DUTY_CYCLE 70 | ||||||
|  |   | ||||||
|  |  #define ATH12K_THERMAL_LVL0_V2_DUTY_CYCLE ATH12K_THERMAL_LVL0_DUTY_CYCLE | ||||||
|  | -#define ATH12K_THERMAL_LVL1_V2_DUTY_CYCLE ATH12K_THERMAL_LVL0_DUTY_CYCLE | ||||||
|  | -#define ATH12K_THERMAL_LVL2_V2_DUTY_CYCLE ATH12K_THERMAL_LVL1_DUTY_CYCLE | ||||||
|  | -#define ATH12K_THERMAL_LVL3_V2_DUTY_CYCLE ATH12K_THERMAL_LVL2_DUTY_CYCLE | ||||||
|  | +#define ATH12K_THERMAL_LVL1_V2_DUTY_CYCLE ATH12K_THERMAL_LVL1_DUTY_CYCLE | ||||||
|  | +#define ATH12K_THERMAL_LVL2_V2_DUTY_CYCLE ATH12K_THERMAL_LVL2_DUTY_CYCLE | ||||||
|  | +#define ATH12K_THERMAL_LVL3_V2_DUTY_CYCLE ATH12K_THERMAL_LVL3_DUTY_CYCLE | ||||||
|  |  #define ATH12K_THERMAL_LVL4_V2_DUTY_CYCLE ATH12K_THERMAL_LVL3_DUTY_CYCLE | ||||||
|  |   | ||||||
|  |  #define THERMAL_CONFIG_POUT0                        0 | ||||||
| @@ -0,0 +1,74 @@ | |||||||
|  | From 357da3320f8bcad056b905fb85cad3a29c343d31 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: YenLin Pan <yenlin.pan@zyxel.com.tw> | ||||||
|  | Date: Tue, 12 Aug 2025 15:41:39 +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 | 34 +++++++++++------------ | ||||||
|  |  1 file changed, 17 insertions(+), 17 deletions(-) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/net/wireless/ath/ath12k/thermal.h b/drivers/net/wireless/ath/ath12k/thermal.h | ||||||
|  | index 5c91906..e81f9a4 100644 | ||||||
|  | --- a/drivers/net/wireless/ath/ath12k/thermal.h | ||||||
|  | +++ b/drivers/net/wireless/ath/ath12k/thermal.h | ||||||
|  | @@ -13,34 +13,34 @@ | ||||||
|  |   | ||||||
|  |  /* 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 | ||||||
|  | -#define ATH12K_THERMAL_LVL2_V2_DUTY_CYCLE ATH12K_THERMAL_LVL1_DUTY_CYCLE | ||||||
|  | -#define ATH12K_THERMAL_LVL3_V2_DUTY_CYCLE ATH12K_THERMAL_LVL2_DUTY_CYCLE | ||||||
|  | +#define ATH12K_THERMAL_LVL1_V2_DUTY_CYCLE ATH12K_THERMAL_LVL1_DUTY_CYCLE | ||||||
|  | +#define ATH12K_THERMAL_LVL2_V2_DUTY_CYCLE ATH12K_THERMAL_LVL2_DUTY_CYCLE | ||||||
|  | +#define ATH12K_THERMAL_LVL3_V2_DUTY_CYCLE ATH12K_THERMAL_LVL3_DUTY_CYCLE | ||||||
|  |  #define ATH12K_THERMAL_LVL4_V2_DUTY_CYCLE ATH12K_THERMAL_LVL3_DUTY_CYCLE | ||||||
|  |   | ||||||
|  |  #define THERMAL_CONFIG_POUT0                        0 | ||||||
|  | --  | ||||||
|  | 2.34.1 | ||||||
|  |  | ||||||
							
								
								
									
										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 | ||||||
|  | } | ||||||
| @@ -25,6 +25,11 @@ copy_certificates() { | |||||||
| } | } | ||||||
|  |  | ||||||
| boot() { | boot() { | ||||||
|  | 	case "$(board_name)" in | ||||||
|  | 	sonicfi,rap6*) | ||||||
|  | 		touch /tmp/squashfs | ||||||
|  | 	;; | ||||||
|  | 	esac | ||||||
| 	[ -f /etc/ucentral/key.pem ] && return | 	[ -f /etc/ucentral/key.pem ] && return | ||||||
| 	/usr/bin/mount_certs | 	/usr/bin/mount_certs | ||||||
| 	copy_certificates | 	copy_certificates | ||||||
|   | |||||||
| @@ -37,13 +37,16 @@ sonicfi,rap7*) | |||||||
| 		mtd=$(find_mtd_index certificates) | 		mtd=$(find_mtd_index certificates) | ||||||
| 		[ -n "$mtd" ] && mount -t ext4 /dev/mtdblock$mtd /certificates | 		[ -n "$mtd" ] && mount -t ext4 /dev/mtdblock$mtd /certificates | ||||||
| 	fi | 	fi | ||||||
| 	if [ ! -f /certificates/cert.pem ] || [ ! -f /certificates/key.pem ]; then | 	;; | ||||||
| 		part=$(tar_part_lookup "0:BOOTCONFIG" "0:BOOTCONFIG1") | sonicfi,rap6*) | ||||||
| 		if [ -n "part" ]; then | 	mtd=$(find_mtd_index certificates) | ||||||
| 			mmc_dev=$(echo $(find_mmc_part "$part") | sed 's/^.\{5\}//') | 	if [ "$(head -c 4 /dev/mtd$mtd)" == "hsqs" ]; then | ||||||
| 			[ -n "$mmc_dev" ] && tar xf /dev/$mmc_dev -C /certificates | 		mount -t squashfs /dev/mtdblock$mtd /mnt | ||||||
| 		fi | 		cp /mnt/* /certificates | ||||||
|  | 		umount /mnt | ||||||
| 	fi | 	fi | ||||||
|  | 		mtd=$(find_mtd_index devinfo) | ||||||
|  | 		[ -n "$mtd" ] && tar xf /dev/mtdblock$mtd -C /certificates | ||||||
| 	;; | 	;; | ||||||
| udaya,a5-id2|\ | udaya,a5-id2|\ | ||||||
| yuncore,ax820) | yuncore,ax820) | ||||||
| @@ -59,19 +62,6 @@ yuncore,ax820) | |||||||
| 		[ -n "$mtd" ] && tar xf /dev/mtdblock$mtd -C /certificates | 		[ -n "$mtd" ] && tar xf /dev/mtdblock$mtd -C /certificates | ||||||
| 	fi | 	fi | ||||||
| 	;; | 	;; | ||||||
| sonicfi,rap6*) |  | ||||||
| 	mtd=$(find_mtd_index certificates) |  | ||||||
| 	if [ "$(head -c 4 /dev/mtd$mtd)" == "hsqs" ]; then |  | ||||||
| 		mount -t squashfs /dev/mtdblock$mtd /mnt |  | ||||||
| 		cp /mnt/* /certificates |  | ||||||
| 		umount /mnt |  | ||||||
| 	fi |  | ||||||
| 	part=$(tar_part_lookup "devinfo" "certificates") |  | ||||||
| 	if [ -n "$part" ]; then |  | ||||||
| 		mtd=$(find_mtd_index $part) |  | ||||||
| 		[ -n "$mtd" ] && tar xf /dev/mtdblock$mtd -C /certificates |  | ||||||
| 	fi |  | ||||||
| 	;; |  | ||||||
| *) | *) | ||||||
| 	mtd=$(find_mtd_index certificates) | 	mtd=$(find_mtd_index certificates) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -14,13 +14,6 @@ tar_part_lookup() { | |||||||
|  |  | ||||||
| . /lib/functions.sh | . /lib/functions.sh | ||||||
| case "$(board_name)" in | case "$(board_name)" in | ||||||
| sonicfi,rap7110c-341x) |  | ||||||
| 	cd /certificates |  | ||||||
| 	tar cf /tmp/certs.tar . |  | ||||||
| 	part=$(tar_part_lookup "0:BOOTCONFIG" "0:BOOTCONFIG1") |  | ||||||
| 	mmc_dev=$(echo $(find_mmc_part $part) | sed 's/^.\{5\}//') |  | ||||||
| 	dd if=/tmp/certs.tar of=/dev/$mmc_dev |  | ||||||
| 	;; |  | ||||||
| udaya,a5-id2|\ | udaya,a5-id2|\ | ||||||
| yuncore,ax820) | yuncore,ax820) | ||||||
| 	cd /certificates | 	cd /certificates | ||||||
| @@ -33,8 +26,7 @@ sonicfi,rap6*) | |||||||
| 	if [ "$(fw_printenv -n store_certs_disabled)" != "1" ]; then | 	if [ "$(fw_printenv -n store_certs_disabled)" != "1" ]; then | ||||||
| 		cd /certificates | 		cd /certificates | ||||||
| 		tar cf /tmp/certs.tar . | 		tar cf /tmp/certs.tar . | ||||||
| 		part=$(tar_part_lookup "devinfo" "certificates") | 		mtd=$(find_mtd_index devinfo) | ||||||
| 		mtd=$(find_mtd_index $part) |  | ||||||
| 		block_size=$(cat /sys/class/mtd/mtd$mtd/size) | 		block_size=$(cat /sys/class/mtd/mtd$mtd/size) | ||||||
| 		dd if=/tmp/certs.tar of=/tmp/certs_pad.tar bs=$block_size conv=sync | 		dd if=/tmp/certs.tar of=/tmp/certs_pad.tar bs=$block_size conv=sync | ||||||
| 		mtd write /tmp/certs_pad.tar /dev/mtd$mtd | 		mtd write /tmp/certs_pad.tar /dev/mtd$mtd | ||||||
|   | |||||||
| @@ -23,6 +23,7 @@ let ubus = libubus.connect(); | |||||||
| let uci = libuci.cursor(); | let uci = libuci.cursor(); | ||||||
| let state = DISCOVER; | let state = DISCOVER; | ||||||
| let discovery_method = ""; | let discovery_method = ""; | ||||||
|  | let discovery_block_list = []; | ||||||
| let validate_time; | let validate_time; | ||||||
| let offline_time; | let offline_time; | ||||||
| let orphan_time; | let orphan_time; | ||||||
| @@ -102,6 +103,9 @@ function gateway_load() { | |||||||
| } | } | ||||||
|  |  | ||||||
| function discovery_state_write() { | function discovery_state_write() { | ||||||
|  | 	if (length(discovery_method) == 0) | ||||||
|  | 		return; | ||||||
|  |  | ||||||
| 	let discovery_state = { | 	let discovery_state = { | ||||||
| 		"type": discovery_method, | 		"type": discovery_method, | ||||||
| 		"updated": time() | 		"updated": time() | ||||||
| @@ -155,6 +159,7 @@ function set_state(set) { | |||||||
| 		ulog(LOG_INFO, 'Wait for validation\n'); | 		ulog(LOG_INFO, 'Wait for validation\n'); | ||||||
| 		validate_time = time(); | 		validate_time = time(); | ||||||
| 		state = VALIDATING; | 		state = VALIDATING; | ||||||
|  | 		push(discovery_block_list, discovery_method); | ||||||
| 		break; | 		break; | ||||||
|  |  | ||||||
| 	case ONLINE: | 	case ONLINE: | ||||||
| @@ -163,6 +168,7 @@ function set_state(set) { | |||||||
| 			ulog(LOG_INFO, 'Setting cloud controller to validated\n'); | 			ulog(LOG_INFO, 'Setting cloud controller to validated\n'); | ||||||
| 			gateway_write({ valid: true }); | 			gateway_write({ valid: true }); | ||||||
| 			discovery_state_write(); | 			discovery_state_write(); | ||||||
|  | 			discovery_block_list = []; | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
|  |  | ||||||
| @@ -231,6 +237,13 @@ function time_is_valid() { | |||||||
| 	return valid; | 	return valid; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | function is_discover_method_blacked() { | ||||||
|  | 	if (discovery_method in discovery_block_list) | ||||||
|  | 		return true; | ||||||
|  |  | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  |  | ||||||
| function interval_handler() { | function interval_handler() { | ||||||
| 	printf(`State ${state}\n`); | 	printf(`State ${state}\n`); | ||||||
| 	switch(state) { | 	switch(state) { | ||||||
| @@ -260,19 +273,21 @@ function interval_handler() { | |||||||
| 		if (!time_is_valid()) | 		if (!time_is_valid()) | ||||||
| 			return; | 			return; | ||||||
|  |  | ||||||
| 		discovery_method = DISCOVER_DHCP; |  | ||||||
| 		if (discover_dhcp()) |  | ||||||
| 			return; |  | ||||||
|  |  | ||||||
| 		if (system('/usr/bin/est_client enroll')) | 		if (system('/usr/bin/est_client enroll')) | ||||||
| 			return; | 			return; | ||||||
|  |  | ||||||
|  | 		discovery_method = DISCOVER_DHCP; | ||||||
|  | 		if (!is_discover_method_blacked() && discover_dhcp()) | ||||||
|  | 			return; | ||||||
|  |  | ||||||
| 		discovery_method = DISCOVER_FLASH; | 		discovery_method = DISCOVER_FLASH; | ||||||
| 		if (!discover_flash()) | 		if (!is_discover_method_blacked() && !discover_flash()) | ||||||
| 			return; | 			return; | ||||||
|  |  | ||||||
| 		discovery_method = DISCOVER_LOOKUP; | 		discovery_method = DISCOVER_LOOKUP; | ||||||
| 		redirector_lookup(); | 		redirector_lookup(); | ||||||
|  |  | ||||||
|  | 		discovery_block_list = []; | ||||||
| 		break; | 		break; | ||||||
|  |  | ||||||
| 	case VALIDATING: | 	case VALIDATING: | ||||||
|   | |||||||
| @@ -5,8 +5,8 @@ import * as fs from 'fs'; | |||||||
|  |  | ||||||
| let cmd = ARGV[0]; | let cmd = ARGV[0]; | ||||||
| let ifname = getenv("interface"); | let ifname = getenv("interface"); | ||||||
| let opt138 = getenv("opt138"); | let opt138 = fs.readfile('/tmp/dhcp-option-138'); | ||||||
| let opt224 = getenv("opt224"); | let opt224 = fs.readfile('/tmp/dhcp-option-224'); | ||||||
|  |  | ||||||
| if (cmd != 'bound' && cmd != 'renew') | if (cmd != 'bound' && cmd != 'renew') | ||||||
| 	exit(0); | 	exit(0); | ||||||
| @@ -23,14 +23,14 @@ let cloud = { | |||||||
| 	lease: true, | 	lease: true, | ||||||
| }; | }; | ||||||
| if (opt138) { | if (opt138) { | ||||||
| 	let dhcp = hexdec(opt138); | 	let dhcp = opt138; | ||||||
| 	dhcp = split(dhcp, ':'); | 	dhcp = split(dhcp, ':'); | ||||||
| 	cloud.dhcp_server = dhcp[0]; | 	cloud.dhcp_server = dhcp[0]; | ||||||
| 	cloud.dhcp_port = dhcp[1] ?? 15002; | 	cloud.dhcp_port = dhcp[1] ?? 15002; | ||||||
| 	cloud.no_validation = true; | 	cloud.no_validation = true; | ||||||
| } | } | ||||||
| if (opt224) { | if (opt224) { | ||||||
| 	let dhcp = hexdec(opt224); | 	let dhcp = opt224; | ||||||
| 	dhcp = split(dhcp, ':'); | 	dhcp = split(dhcp, ':'); | ||||||
| 	cloud.dhcp_server = dhcp[0]; | 	cloud.dhcp_server = dhcp[0]; | ||||||
| 	cloud.dhcp_port = dhcp[1] ?? 15002; | 	cloud.dhcp_port = dhcp[1] ?? 15002; | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ PKG_NAME:=ucentral-client | |||||||
| PKG_RELEASE:=1 | PKG_RELEASE:=1 | ||||||
|  |  | ||||||
| PKG_SOURCE_URL=https://github.com/Telecominfraproject/wlan-ucentral-client.git | PKG_SOURCE_URL=https://github.com/Telecominfraproject/wlan-ucentral-client.git | ||||||
|  | PKG_MIRROR_HASH:=2935998d6074f0c290d9b96c2988c89aae6f405608f12a0063fa7215498bae9a | ||||||
| PKG_SOURCE_PROTO:=git | PKG_SOURCE_PROTO:=git | ||||||
| PKG_SOURCE_DATE:=2025-08-11 | PKG_SOURCE_DATE:=2025-08-11 | ||||||
| PKG_SOURCE_VERSION:=549e84e5fea7230c5471d6a3dbddcc7d3152f665 | PKG_SOURCE_VERSION:=549e84e5fea7230c5471d6a3dbddcc7d3152f665 | ||||||
|   | |||||||
| @@ -2,6 +2,8 @@ | |||||||
|  |  | ||||||
| 'use strict'; | 'use strict'; | ||||||
|  |  | ||||||
|  | push(REQUIRE_SEARCH_PATH, '/usr/share/ucentral/*.uc'); | ||||||
|  |  | ||||||
| import * as libubus from 'ubus'; | import * as libubus from 'ubus'; | ||||||
| import * as libuci from 'uci'; | import * as libuci from 'uci'; | ||||||
| import * as uloop from 'uloop'; | import * as uloop from 'uloop'; | ||||||
| @@ -36,6 +38,7 @@ let ucentral_running = false; | |||||||
| let pending_events = []; | let pending_events = []; | ||||||
| let relay = {}; | let relay = {}; | ||||||
| let net_config = {}; | let net_config = {}; | ||||||
|  | let vlan_refcount = {}; | ||||||
|  |  | ||||||
|  |  | ||||||
| function config_load() { | function config_load() { | ||||||
| @@ -52,6 +55,20 @@ function config_load() { | |||||||
| 	net_config = {}; | 	net_config = {}; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | function vlan_refcount_init() { | ||||||
|  | 	let stations = require('wifi.station'); | ||||||
|  |  | ||||||
|  | 	vlan_refcount = {}; | ||||||
|  |  | ||||||
|  | 	for (let k, v in stations) { | ||||||
|  | 		let vlan = split(k, '-v')[1]; | ||||||
|  | 		let count = length(v); | ||||||
|  | 		if (vlan && count > 0) { | ||||||
|  | 			vlan_refcount[vlan] = count; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| function match(object, type, list) { | function match(object, type, list) { | ||||||
| 	if (object in list || type in list) | 	if (object in list || type in list) | ||||||
| 		return true; | 		return true; | ||||||
| @@ -258,6 +275,13 @@ handlers = { | |||||||
| 	}, | 	}, | ||||||
|  |  | ||||||
| 	vlan_add: function(notify) { | 	vlan_add: function(notify) { | ||||||
|  | 		let vlan_id = `${notify.data.vlan_id}`; | ||||||
|  | 		vlan_refcount[vlan_id] = (vlan_refcount[vlan_id] || 0) + 1; | ||||||
|  |  | ||||||
|  | 		if (vlan_refcount[vlan_id] > 1) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 		if (config.config.swconfig) | 		if (config.config.swconfig) | ||||||
| 			return handlers.vlan_add_swconfig(notify); | 			return handlers.vlan_add_swconfig(notify); | ||||||
|  |  | ||||||
| @@ -280,6 +304,14 @@ handlers = { | |||||||
| 	}, | 	}, | ||||||
|  |  | ||||||
| 	vlan_remove: function(notify) { | 	vlan_remove: function(notify) { | ||||||
|  | 		let vlan_id = `${notify.data.vlan_id}`; | ||||||
|  | 		vlan_refcount[vlan_id] = (vlan_refcount[vlan_id] || 1) - 1; | ||||||
|  |  | ||||||
|  | 		if (vlan_refcount[vlan_id] > 0) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 		delete vlan_refcount[vlan_id]; | ||||||
|  |  | ||||||
| 		if (config.config.swconfig) | 		if (config.config.swconfig) | ||||||
| 			return; | 			return; | ||||||
| 		for (let wan in wan_ports) { | 		for (let wan in wan_ports) { | ||||||
| @@ -624,6 +656,7 @@ let ubus_methods = { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| config_load(); | config_load(); | ||||||
|  | vlan_refcount_init(); | ||||||
|  |  | ||||||
| hapd_subscriber = ubus.subscriber(hapd_subscriber_notify_cb, hapd_subscriber_remove_cb); | hapd_subscriber = ubus.subscriber(hapd_subscriber_notify_cb, hapd_subscriber_remove_cb); | ||||||
| dhcp_subscriber = ubus.subscriber(dhcp_subscriber_notify_cb, dhcp_subscriber_remove_cb); | dhcp_subscriber = ubus.subscriber(dhcp_subscriber_notify_cb, dhcp_subscriber_remove_cb); | ||||||
|   | |||||||
| @@ -4,9 +4,10 @@ PKG_NAME:=ucentral-schema | |||||||
| PKG_RELEASE:=1 | PKG_RELEASE:=1 | ||||||
|  |  | ||||||
| PKG_SOURCE_URL=https://github.com/Telecominfraproject/wlan-ucentral-schema.git | PKG_SOURCE_URL=https://github.com/Telecominfraproject/wlan-ucentral-schema.git | ||||||
|  | PKG_MIRROR_HASH:=f72d2e5b01ecb7a488d50d860da63664d992e50c7e046fed866be6733bab3c1c | ||||||
| PKG_SOURCE_PROTO:=git | PKG_SOURCE_PROTO:=git | ||||||
| PKG_SOURCE_DATE:=2025-08-04 | PKG_SOURCE_DATE:=2025-09-29 | ||||||
| PKG_SOURCE_VERSION:=1c6b3095cb9e398fcbfcb2bf995365066eb76b21 | PKG_SOURCE_VERSION:=676e1550c53b7d48a54aa759f65d341168627c5e | ||||||
| PKG_MAINTAINER:=John Crispin <john@phrozen.org> | PKG_MAINTAINER:=John Crispin <john@phrozen.org> | ||||||
| PKG_LICENSE:=BSD-3-Clause | PKG_LICENSE:=BSD-3-Clause | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,10 @@ | |||||||
| #!/usr/bin/ucode  | #!/usr/bin/ucode  | ||||||
|  | import { readfile } from "fs"; | ||||||
|  |  | ||||||
| let nl = require("nl80211"); | let nl = require("nl80211"); | ||||||
| let def = nl.const; | let def = nl.const; | ||||||
|  | let board_name = rtrim(readfile('/tmp/sysinfo/board_name'), '\n'); | ||||||
|  | let phy_index = 0; | ||||||
|  |  | ||||||
| function phy_get() { | function phy_get() { | ||||||
| 	let res = nl.request(def.NL80211_CMD_GET_WIPHY, def.NLM_F_DUMP, { split_wiphy_dump: true }); | 	let res = nl.request(def.NL80211_CMD_GET_WIPHY, def.NLM_F_DUMP, { split_wiphy_dump: true }); | ||||||
| @@ -12,5 +15,11 @@ function phy_get() { | |||||||
| 	return res; | 	return res; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | switch(board_name) { | ||||||
|  | case 'edgecore,eap112': | ||||||
|  |         phy_index = 1; | ||||||
|  |         break; | ||||||
|  | } | ||||||
|  |  | ||||||
| let phys = phy_get(); | let phys = phy_get(); | ||||||
| printf("%d\n", phys[0].max_ap_assoc || 32); | printf("%d\n", phys[phy_index].max_ap_assoc || 32); | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ define Package/udhcpinject | |||||||
| 	SECTION:=net | 	SECTION:=net | ||||||
| 	CATEGORY:=Network | 	CATEGORY:=Network | ||||||
| 	TITLE:=An agent to inject DHCP option | 	TITLE:=An agent to inject DHCP option | ||||||
| 	DEPENDS:=+libpcap +kmod-ifb +tc | 	DEPENDS:=+libpcap +kmod-ifb +tc +libuci | ||||||
| 	MAINTAINER:=kmk <alex18_huang@accton.com> | 	MAINTAINER:=kmk <alex18_huang@accton.com> | ||||||
| endef | endef | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,10 +1,19 @@ | |||||||
| # config device 'uplink' | #config network 'wan0' | ||||||
| #   list port 'eth0' | #        option upstream 'up0v0' | ||||||
| # | #        list ssid5G '18-KMK-YAYA' | ||||||
| # config ssids 'ssids' | #        list ssid5G '18-KMK-AKIHO' | ||||||
| #   list ssid 'EAP101-ERICHI' | #        list ssid2G '18-KMK-YAYA' | ||||||
| #   list ssid 'EAP101-AKIHO' | #        list ssid2G '18-KMK-AKIHO' | ||||||
| #   list ssid 'EAP101-DAMAYU' | #        option count '4' | ||||||
| # |  | ||||||
| # config dhcpinject 'dhcpinject' | #config network 'wan284' | ||||||
| #   option iface_count '6' | #        option upstream 'up1v284' | ||||||
|  | #        list ssid5G '18-KMK-SARAN' | ||||||
|  | #        list ssid2G '18-KMK-SARAN' | ||||||
|  | #        option count '2' | ||||||
|  |  | ||||||
|  | #config network 'wan283' | ||||||
|  | #        option upstream 'up2v283' | ||||||
|  | #        list ssid5G '18-KMK-ERICHI' | ||||||
|  | #        list ssid2G '18-KMK-ERICHI' | ||||||
|  | #        option count '2' | ||||||
|   | |||||||
| @@ -9,55 +9,18 @@ SERVICE_NAME="dhcpinject" | |||||||
| PROG=/usr/bin/udhcpinject | PROG=/usr/bin/udhcpinject | ||||||
|  |  | ||||||
| start_service() { | start_service() { | ||||||
|     local ssids="" |     # check if config file has contents by executing `uci get dhcpinject.@network[0]` | ||||||
|     local ports="" |     if [ -z "$(uci get dhcpinject.@network[0] 2>/dev/null)" ]; then | ||||||
|     local ifaces="" |         echo "No upstreams specified, exiting $SERVICE_NAME" | ||||||
|  |         return 0 | ||||||
|     # Function to process each ssid |  | ||||||
|     append_ssid() { |  | ||||||
|         local value="$1" |  | ||||||
|         if [ -n "$ssids" ]; then |  | ||||||
|             ssids="$ssids,$value" |  | ||||||
|         else |  | ||||||
|             ssids="$value" |  | ||||||
|     fi |     fi | ||||||
|     } |     # Wait for wifi to be up | ||||||
|  |     ubus -t 90 wait_for network.wireless | ||||||
|     append_port() { |  | ||||||
|         local value="$1" |  | ||||||
|         if [ -n "$ports" ]; then |  | ||||||
|             ports="$ports,$value" |  | ||||||
|         else |  | ||||||
|             ports="$value" |  | ||||||
|         fi |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     # Load the dhcpinject config |  | ||||||
|     config_load dhcpinject |  | ||||||
|  |  | ||||||
|     # Get the list of SSIDs |  | ||||||
|     config_list_foreach ssids ssid append_ssid |  | ||||||
|  |  | ||||||
|     # Get the list of ports |  | ||||||
|     config_list_foreach uplink port append_port |  | ||||||
|  |  | ||||||
|     # Get the iface_count |  | ||||||
|     config_get ifaces dhcpinject iface_count |  | ||||||
|      |  | ||||||
|     # Fallback to eth0 if no ports are specified |  | ||||||
|     if [ -z "$ports" ]; then |  | ||||||
|         ports="eth0" |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     # Optional: Log or echo for debugging |  | ||||||
|     logger -t dhcp_inject "Generated SSIDs=$ssids, Uplink=$ports, IFACEs=$ifaces" |  | ||||||
|  |  | ||||||
|     procd_open_instance "$SERVICE_NAME" |     procd_open_instance "$SERVICE_NAME" | ||||||
|     procd_set_param command $PROG |     procd_set_param command $PROG | ||||||
|     procd_set_param env SSIDs="$ssids" PORTs="$ports" IFACEs="$ifaces" |  | ||||||
|     procd_set_param respawn 3600 10 10 |     procd_set_param respawn 3600 10 10 | ||||||
|     procd_set_param file /etc/config/dhcpinject |     procd_set_param file /etc/config/dhcpinject | ||||||
|     procd_set_param reload_signal SIGHUP |  | ||||||
|     procd_close_instance |     procd_close_instance | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ obj-y := udhcpinject.o | |||||||
| all: udhcpinject | all: udhcpinject | ||||||
|  |  | ||||||
| udhcpinject: $(obj-y) | udhcpinject: $(obj-y) | ||||||
| 	$(CC) $(LDFLAGS) -lpcap -o $@ $(obj-y) | 	$(CC) $(LDFLAGS) -lpcap -luci -o $@ $(obj-y) | ||||||
|  |  | ||||||
| %.o: %.c | %.o: %.c | ||||||
| 	$(CC) $(CFLAGS) $(TARGET_CFLAGS) -c $< -o $@ | 	$(CC) $(CFLAGS) $(TARGET_CFLAGS) -c $< -o $@ | ||||||
|   | |||||||
| @@ -6,286 +6,81 @@ | |||||||
| #include <linux/ip.h> | #include <linux/ip.h> | ||||||
| #include <linux/udp.h> | #include <linux/udp.h> | ||||||
| #include <net/if.h> | #include <net/if.h> | ||||||
| #include <netinet/in.h> |  | ||||||
| #include <pcap.h> | #include <pcap.h> | ||||||
| #include <signal.h> | #include <signal.h> | ||||||
| #include <stdio.h> |  | ||||||
| #include <stdlib.h> |  | ||||||
| #include <string.h> |  | ||||||
| #include <sys/socket.h> | #include <sys/socket.h> | ||||||
| #include <syslog.h> | #include <syslog.h> | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
|  | #include <uci.h> | ||||||
|  |  | ||||||
| #include "udhcpinject.h" | #include "udhcpinject.h" | ||||||
|  |  | ||||||
| #define MAX_INTERFACES 48 | // Cleanup function | ||||||
| #define MAX_PORTS 8 | void cleanup() | ||||||
|  | { | ||||||
|  |     syslog(LOG_INFO, "Cleaning up resources...\n"); | ||||||
|  |  | ||||||
| // Global variables |     if (handle) | ||||||
| struct iface_info *iface_map = NULL; |     { | ||||||
| static struct port_info *ports = NULL; |         pcap_close(handle); | ||||||
| int iface_count = 0; |         handle = NULL; | ||||||
| int port_count = 0; |     } | ||||||
| int total_iface = 0; |  | ||||||
| static pcap_t *handle = NULL; |  | ||||||
| static char *provided_ssids = NULL; |  | ||||||
| static char *provided_ports = NULL; |  | ||||||
|  |  | ||||||
| // Function to cleanup tc rules |     if (iface_map) | ||||||
| void cleanup_tc() { |     { | ||||||
|         char cmd[1024]; |         char cmd[1024]; | ||||||
|     for (int i = 0; i < iface_count; i++) { |         for (int i = 0; i < iface_map_size; i++) | ||||||
|  |         { | ||||||
|             snprintf(cmd, sizeof(cmd), "tc filter del dev %s ingress pref 32 2>/dev/null", |             snprintf(cmd, sizeof(cmd), "tc filter del dev %s ingress pref 32 2>/dev/null", | ||||||
|                      iface_map[i].iface); |                      iface_map[i].iface); | ||||||
|             system(cmd); |             system(cmd); | ||||||
|         } |         } | ||||||
| } |  | ||||||
|  |  | ||||||
| // Cleanup function |  | ||||||
| void cleanup() { |  | ||||||
|     syslog(LOG_INFO, "Cleaning up resources...\n"); |  | ||||||
|     cleanup_tc(); |  | ||||||
|  |  | ||||||
|     if (handle) { |  | ||||||
|         pcap_close(handle); |  | ||||||
|         handle = NULL; |  | ||||||
|     } |  | ||||||
|     if (ports) { |  | ||||||
|         for (int i = 0; i < port_count; i++) { |  | ||||||
|             if (ports[i].sock >= 0) { |  | ||||||
|                 close(ports[i].sock); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         free(ports); |  | ||||||
|         ports = NULL; |  | ||||||
|         port_count = 0; |  | ||||||
|     } |  | ||||||
|     if (iface_map) { |  | ||||||
|         free(iface_map); |         free(iface_map); | ||||||
|         iface_map = NULL; |  | ||||||
|         iface_count = 0; |  | ||||||
|     } |     } | ||||||
|     if (provided_ssids) { |  | ||||||
|         free(provided_ssids); |     if (port_map) | ||||||
|         provided_ssids = NULL; |     { | ||||||
|  |         for (int i = 0; i < port_map_size; i++) | ||||||
|  |         { | ||||||
|  |             close(port_map[i].sock); | ||||||
|         } |         } | ||||||
|     if (provided_ports) { |         free(port_map); | ||||||
|         free(provided_ports); |  | ||||||
|         provided_ports = NULL; |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     syslog(LOG_INFO, "Cleanup complete.\n"); |     syslog(LOG_INFO, "Cleanup complete.\n"); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Function to parse SSIDs and populate iface_map | int setup_tc() | ||||||
| int parse_ssids(const char *ssids) { | { | ||||||
|     if (iface_map) { |     char cmd[512]; | ||||||
|         free(iface_map); |  | ||||||
|         iface_map = NULL; |  | ||||||
|         iface_count = 0; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     // Create a set of provided SSIDs for efficient lookup |  | ||||||
|     char ssids_copy[256]; |  | ||||||
|     strncpy(ssids_copy, ssids, sizeof(ssids_copy) - 1); |  | ||||||
|     ssids_copy[sizeof(ssids_copy) - 1] = '\0'; |  | ||||||
|  |  | ||||||
|     // Count number of SSIDs for allocation |  | ||||||
|     int ssid_count = 1; // Start at 1 for first SSID |  | ||||||
|     for (int i = 0; ssids_copy[i]; i++) { |  | ||||||
|         if (ssids_copy[i] == ',') |  | ||||||
|             ssid_count++; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     char **ssid_set = malloc(ssid_count * sizeof(char *)); |  | ||||||
|     if (!ssid_set) { |  | ||||||
|         syslog(LOG_ERR, "Failed to allocate memory for SSID set\n"); |  | ||||||
|         return -1; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     int ssid_idx = 0; |  | ||||||
|     char *token = strtok(ssids_copy, ","); |  | ||||||
|     while (token) { |  | ||||||
|         ssid_set[ssid_idx++] = token; |  | ||||||
|         token = strtok(NULL, ","); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     // Execute iwinfo command and capture output |  | ||||||
|     FILE *pipe = popen("iwinfo | grep wlan -A1 | grep -v \"^--\" | tr -d '\"' " |  | ||||||
|                        "| awk '/wlan/ {name=$1; essid=$3} /Access Point/ " |  | ||||||
|                        "{print name \"=\" essid \",\" $3}' | tr -d ':'", |  | ||||||
|                        "r"); |  | ||||||
|     if (!pipe) { |  | ||||||
|         syslog(LOG_ERR, "Failed to execute iwinfo command\n"); |  | ||||||
|         free(ssid_set); |  | ||||||
|         return -1; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     char line[256]; |  | ||||||
|     while (fgets(line, sizeof(line), pipe) != NULL) { |  | ||||||
|         // Remove trailing newline |  | ||||||
|         line[strcspn(line, "\n")] = 0; |  | ||||||
|  |  | ||||||
|         // Parse line format: wlanX=SSID,BSSID |  | ||||||
|         char *iface = strtok(line, "="); |  | ||||||
|         char *rest = strtok(NULL, "="); |  | ||||||
|         if (!iface || !rest) |  | ||||||
|             continue; |  | ||||||
|  |  | ||||||
|         char *essid = strtok(rest, ","); |  | ||||||
|         char *bssid = strtok(NULL, ","); |  | ||||||
|         if (!essid || !bssid) |  | ||||||
|             continue; |  | ||||||
|  |  | ||||||
|         // Check if this SSID is in our provided set |  | ||||||
|         int match = 0; |  | ||||||
|         for (int i = 0; i < ssid_idx; i++) { |  | ||||||
|             if (strcmp(essid, ssid_set[i]) == 0) { |  | ||||||
|                 match = 1; |  | ||||||
|                 break; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         if (!match) |  | ||||||
|             continue; |  | ||||||
|  |  | ||||||
|         // Add matching interface to iface_map |  | ||||||
|         if (iface_count >= MAX_INTERFACES) { |  | ||||||
|             syslog(LOG_ERR, "Too many matching interfaces, max is %d\n", |  | ||||||
|                    MAX_INTERFACES); |  | ||||||
|             pclose(pipe); |  | ||||||
|             free(ssid_set); |  | ||||||
|             return -1; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         iface_map = |  | ||||||
|             realloc(iface_map, (iface_count + 1) * sizeof(struct iface_info)); |  | ||||||
|         if (!iface_map) { |  | ||||||
|             syslog(LOG_ERR, "Failed to reallocate iface_map\n"); |  | ||||||
|             pclose(pipe); |  | ||||||
|             free(ssid_set); |  | ||||||
|             return -1; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         struct iface_info *info = &iface_map[iface_count]; |  | ||||||
|         info->serial = iface_count + 1; |  | ||||||
|  |  | ||||||
|         strncpy(info->iface, iface, LEN_IFACE); |  | ||||||
|         info->iface[LEN_IFACE] = '\0'; |  | ||||||
|  |  | ||||||
|         strncpy(info->essid, essid, LEN_ESSID); |  | ||||||
|         info->essid[LEN_ESSID] = '\0'; |  | ||||||
|  |  | ||||||
|         strncpy(info->bssid, bssid, LEN_BSSID); |  | ||||||
|         info->bssid[LEN_BSSID] = '\0'; |  | ||||||
|  |  | ||||||
|         iface_count++; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     int pipe_status = pclose(pipe); |  | ||||||
|     if (pipe_status == -1) { |  | ||||||
|         syslog(LOG_ERR, "Error closing iwinfo pipe: %s\n", strerror(errno)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     free(ssid_set); |  | ||||||
|  |  | ||||||
|     if (iface_count == 0) { |  | ||||||
|         syslog(LOG_ERR, "No matching interfaces found for provided SSIDs\n"); |  | ||||||
|         return -1; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     if (iface_count != total_iface) { |  | ||||||
|         syslog(LOG_ERR, "Expect %d but only %d interfaces were found.\n", total_iface, iface_count); |  | ||||||
|         return -1; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     syslog(LOG_INFO, "Found %d matching interfaces\n", iface_count); |  | ||||||
|     return 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| int parse_ports(const char *port_list) { |  | ||||||
|     if (ports) { |  | ||||||
|         for (int i = 0; i < port_count; i++) { |  | ||||||
|             if (ports[i].sock >= 0) { |  | ||||||
|                 close(ports[i].sock); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         free(ports); |  | ||||||
|         ports = NULL; |  | ||||||
|         port_count = 0; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     char ports_copy[256]; |  | ||||||
|     strncpy(ports_copy, port_list, sizeof(ports_copy) - 1); |  | ||||||
|     ports_copy[sizeof(ports_copy) - 1] = '\0'; |  | ||||||
|  |  | ||||||
|     port_count = 1; |  | ||||||
|     for (int i = 0; ports_copy[i]; i++) { |  | ||||||
|         if (ports_copy[i] == ',') { |  | ||||||
|             port_count++; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     if (port_count > MAX_PORTS) { |  | ||||||
|         syslog(LOG_ERR, "Too many ports specified, maximum is %d\n", MAX_PORTS); |  | ||||||
|         return -1; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     ports = calloc(port_count, sizeof(struct port_info)); |  | ||||||
|     if (!ports) { |  | ||||||
|         syslog(LOG_ERR, "Failed to allocate memory for ports\n"); |  | ||||||
|         return -1; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     char *token = strtok(ports_copy, ","); |  | ||||||
|     int idx = 0; |  | ||||||
|     while (token && idx < port_count) { |  | ||||||
|         strncpy(ports[idx].name, token, LEN_IFACE); |  | ||||||
|         ports[idx].name[LEN_IFACE] = '\0'; |  | ||||||
|  |  | ||||||
|         ports[idx].sock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); |  | ||||||
|         if (ports[idx].sock < 0) { |  | ||||||
|             syslog(LOG_ERR, "Socket creation failed for %s: %s\n", |  | ||||||
|                    ports[idx].name, strerror(errno)); |  | ||||||
|             return -1; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         ports[idx].ifindex = if_nametoindex(ports[idx].name); |  | ||||||
|         if (ports[idx].ifindex == 0) { |  | ||||||
|             syslog(LOG_ERR, "Failed to get interface index for %s: %s\n", |  | ||||||
|                    ports[idx].name, strerror(errno)); |  | ||||||
|             return -1; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         token = strtok(NULL, ","); |  | ||||||
|         idx++; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     syslog(LOG_INFO, "Configured %d ports for forwarding\n", port_count); |  | ||||||
|     return 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| int setup_tc() { |  | ||||||
|     char cmd[1024]; |  | ||||||
|  |  | ||||||
|  |     // check if ifb-inject exists, if not create it | ||||||
|     snprintf(cmd, sizeof(cmd), "ip link show ifb-inject >/dev/null 2>&1"); |     snprintf(cmd, sizeof(cmd), "ip link show ifb-inject >/dev/null 2>&1"); | ||||||
|     if (system(cmd) != 0) { |     if (system(cmd) != 0) | ||||||
|  |     { | ||||||
|         snprintf(cmd, sizeof(cmd), |         snprintf(cmd, sizeof(cmd), | ||||||
|                  "ip link add name ifb-inject type ifb && ip link set " |                  "ip link add name ifb-inject type ifb && ip link set " | ||||||
|                  "ifb-inject up"); |                  "ifb-inject up"); | ||||||
|         if (system(cmd) != 0) { |         if (system(cmd) != 0) | ||||||
|  |         { | ||||||
|             syslog(LOG_ERR, "Failed to setup ifb-inject\n"); |             syslog(LOG_ERR, "Failed to setup ifb-inject\n"); | ||||||
|             return -1; |             return -1; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     for (int i = 0; i < iface_count; i++) { |     for (int i = 0; i < iface_map_size; i++) | ||||||
|  |     { | ||||||
|         snprintf(cmd, sizeof(cmd), "tc qdisc add dev %s ingress 2>/dev/null 1>2", |         snprintf(cmd, sizeof(cmd), "tc qdisc add dev %s ingress 2>/dev/null 1>2", | ||||||
|                  iface_map[i].iface); |                  iface_map[i].iface); | ||||||
|         int result = system(cmd); |         int result = system(cmd); | ||||||
|         if (result == 2) { |         if (result == 2) | ||||||
|  |         { | ||||||
|             syslog(LOG_INFO, "Ingress qdisc already exists for %s\n", iface_map[i].iface); |             syslog(LOG_INFO, "Ingress qdisc already exists for %s\n", iface_map[i].iface); | ||||||
|         } |         } | ||||||
|         else if (result == 1) { |         else if (result == 1) | ||||||
|  |         { | ||||||
|             syslog(LOG_ERR, "Failed to add qdisc for %s\n", iface_map[i].iface); |             syslog(LOG_ERR, "Failed to add qdisc for %s\n", iface_map[i].iface); | ||||||
|             return -1; |             return -1; | ||||||
|         } |         } | ||||||
| @@ -300,7 +95,8 @@ int setup_tc() { | |||||||
|                  "action mirred egress mirror dev ifb-inject pipe " |                  "action mirred egress mirror dev ifb-inject pipe " | ||||||
|                  "action drop", |                  "action drop", | ||||||
|                  iface_map[i].iface, iface_map[i].serial); |                  iface_map[i].iface, iface_map[i].serial); | ||||||
|         if (system(cmd) != 0) { |         if (system(cmd) != 0) | ||||||
|  |         { | ||||||
|             syslog(LOG_ERR, "Failed to setup tc for %s\n", iface_map[i].iface); |             syslog(LOG_ERR, "Failed to setup tc for %s\n", iface_map[i].iface); | ||||||
|             return -1; |             return -1; | ||||||
|         } |         } | ||||||
| @@ -308,82 +104,172 @@ int setup_tc() { | |||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| // Signal handler | int parse_iwinfo_by_essid(struct iface_info *iface) | ||||||
| void signal_handler(int sig) { | { | ||||||
|     if (sig == SIGTERM) { |     char cmd[256]; | ||||||
|         syslog(LOG_INFO, "Received SIGTERM, cleaning up...\n"); |     FILE *fp; | ||||||
|         cleanup(); |     char output[128]; | ||||||
|         exit(0); |     char *line; | ||||||
|     } else if (sig == SIGHUP) { |  | ||||||
|         syslog(LOG_INFO, "Received reload signal, reconfiguring...\n"); |  | ||||||
|         // Clean up existing resources |  | ||||||
|         cleanup_tc(); |  | ||||||
|  |  | ||||||
|         // Free old SSIDs and get new ones |     snprintf(cmd, sizeof(cmd), IWINFO_CMD, iface->essid, iface->frequency); | ||||||
|         if (provided_ssids) { |  | ||||||
|             free(provided_ssids); |     fp = popen(cmd, "r"); | ||||||
|         } |     if (fp == NULL) | ||||||
|         provided_ssids = getenv("SSIDs"); |     { | ||||||
|         if (!provided_ssids) { |         syslog(LOG_ERR, "Failed to execute command: %s\n", cmd); | ||||||
|             syslog(LOG_ERR, "No SSIDs provided on reload\n"); |         return 1; | ||||||
|             return; |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|         // Reload SSIDs |     // Read the first line (interface name) | ||||||
|         if (parse_ssids(provided_ssids) != 0) { |     line = fgets(output, sizeof(output), fp); | ||||||
|             syslog(LOG_ERR, "Failed to reload SSIDs configuration\n"); |     if (line) | ||||||
|             return; |     { | ||||||
|  |         output[strcspn(output, "\n")] = '\0'; // Remove trailing newline | ||||||
|  |         snprintf(iface->iface, LEN_IFACE + 1, output); | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         return 1; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|         // Free old ports and get new ones |     // Read the second line (BSSID) | ||||||
|         if (provided_ports) { |     line = fgets(output, sizeof(output), fp); | ||||||
|             free(provided_ports); |     if (line) | ||||||
|  |     { | ||||||
|  |         output[strcspn(output, "\n")] = '\0'; // Remove trailing newline | ||||||
|  |         snprintf(iface->bssid, LEN_BSSID + 1, output); | ||||||
|     } |     } | ||||||
|         provided_ports = getenv("PORTs"); |     else | ||||||
|         if (!provided_ports) { |     { | ||||||
|             syslog(LOG_ERR, "No PORTs provided on reload\n"); |         return 1; | ||||||
|             return; |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|         // Close existing sockets and reopen with new config |     // Close the pipe | ||||||
|         if (ports) { |     pclose(fp); | ||||||
|             for (int i = 0; i < port_count; i++) { |     return 0; | ||||||
|                 if (ports[i].sock >= 0) { |  | ||||||
|                     close(ports[i].sock); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             free(ports); |  | ||||||
|             ports = NULL; |  | ||||||
|             port_count = 0; |  | ||||||
|         } |  | ||||||
|          |  | ||||||
|         // Reload ports |  | ||||||
|         if (parse_ports(provided_ports) != 0) { |  | ||||||
|             syslog(LOG_ERR, "Failed to reload ports configuration\n"); |  | ||||||
|             return; |  | ||||||
|         } |  | ||||||
|          |  | ||||||
|         // Reapply tc rules |  | ||||||
|         if (setup_tc() == 0) { |  | ||||||
|             syslog(LOG_INFO, "Reloaded with SSIDs: %s and Ports: %s\n", |  | ||||||
|                    provided_ssids, provided_ports); |  | ||||||
|         } else { |  | ||||||
|             syslog(LOG_ERR, "Failed to reload tc configuration\n"); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } | } | ||||||
|  |  | ||||||
| char *get_hostname() { | void add_iface_info(const char *essid, const char *upstream, const char *freq, int serial) | ||||||
|     static char hostname[256]; | { | ||||||
|     if (gethostname(hostname, sizeof(hostname)) != 0) { |     iface_map = realloc(iface_map, (iface_map_size + 1) * sizeof(struct iface_info)); | ||||||
|         strcpy(hostname, "unknown"); |     if (!iface_map) | ||||||
|  |     { | ||||||
|  |         syslog(LOG_ERR, "Memory allocation failed\n"); | ||||||
|  |         exit(1); | ||||||
|     } |     } | ||||||
|     return hostname; |     struct iface_info *info = &iface_map[iface_map_size]; | ||||||
|  |     memset(info, 0, sizeof(struct iface_info)); | ||||||
|  |     // use snprintf to copy essid to info->essid | ||||||
|  |     snprintf(info->essid, LEN_ESSID + 1, essid); | ||||||
|  |     snprintf(info->upstream, LEN_IFACE + 1, upstream); | ||||||
|  |     snprintf(info->frequency, 2, freq); | ||||||
|  |     info->serial = serial; | ||||||
|  |     iface_map_size++; | ||||||
| } | } | ||||||
|  |  | ||||||
| struct iface_info *find_iface_info_by_vlan(int vlan_id) { | int parse_uci_config() | ||||||
|     for (int i = 0; i < iface_count; i++) { | { | ||||||
|         if (iface_map[i].serial == vlan_id) { |     struct uci_context *ctx = uci_alloc_context(); | ||||||
|  |     if (!ctx) | ||||||
|  |     { | ||||||
|  |         syslog(LOG_ERR, "Failed to allocate UCI context\n"); | ||||||
|  |         return 1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     struct uci_package *pkg = NULL; | ||||||
|  |     if (uci_load(ctx, CONFIG_PATH, &pkg) != UCI_OK) | ||||||
|  |     { | ||||||
|  |         syslog(LOG_ERR, "Failed to load UCI config\n"); | ||||||
|  |         uci_free_context(ctx); | ||||||
|  |         return 1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     int serial = 1; | ||||||
|  |     struct uci_element *e; | ||||||
|  |     uci_foreach_element(&pkg->sections, e) | ||||||
|  |     { | ||||||
|  |         struct uci_section *s = uci_to_section(e); | ||||||
|  |         if (!strcmp(s->type, "network")) | ||||||
|  |         { | ||||||
|  |             const char *upstream = uci_lookup_option_string(ctx, s, "upstream"); | ||||||
|  |             if (!upstream) | ||||||
|  |                 continue; | ||||||
|  |             syslog(LOG_INFO, "Processing ssids with upstream %s", upstream); | ||||||
|  |             struct uci_option *opt, *opt2; | ||||||
|  |  | ||||||
|  |             opt = uci_lookup_option(ctx, s, "freq"); | ||||||
|  |             if (opt && opt->type == UCI_TYPE_LIST) | ||||||
|  |             { | ||||||
|  |                 struct uci_element *i; | ||||||
|  |                 char *freq_type = NULL; | ||||||
|  |                 uci_foreach_element(&opt->v.list, i) | ||||||
|  |                 { | ||||||
|  |                     // parse 6G ifaces | ||||||
|  |                     if (!strcmp(i->name, "6G")) | ||||||
|  |                     { | ||||||
|  |                         opt2 = uci_lookup_option(ctx, s, "ssid6G"); | ||||||
|  |                         freq_type = "6"; | ||||||
|  |                     } | ||||||
|  |                     // parse 5G ifaces | ||||||
|  |                     else if (!strcmp(i->name, "5G")) | ||||||
|  |                     { | ||||||
|  |                         opt2 = uci_lookup_option(ctx, s, "ssid5G"); | ||||||
|  |                         freq_type = "5"; | ||||||
|  |                     } | ||||||
|  |                     // parse 2G ifaces | ||||||
|  |                     else if (!strcmp(i->name, "2G")) | ||||||
|  |                     { | ||||||
|  |                         opt2 = uci_lookup_option(ctx, s, "ssid2G"); | ||||||
|  |                         freq_type = "2"; | ||||||
|  |                     } | ||||||
|  |  | ||||||
|  |                     if (opt2 && opt2->type == UCI_TYPE_LIST) | ||||||
|  |                     { | ||||||
|  |                         struct uci_element *i; | ||||||
|  |                         uci_foreach_element(&opt2->v.list, i) | ||||||
|  |                         { | ||||||
|  |                             add_iface_info(i->name, upstream, freq_type, serial++); | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             // initialize socket to upstream interface, say "up0v0" | ||||||
|  |             port_map = realloc(port_map, (port_map_size + 1) * sizeof(struct port_info)); | ||||||
|  |             int sock = socket(AF_PACKET, SOCK_RAW, 0); | ||||||
|  |             if (sock < 0) | ||||||
|  |             { | ||||||
|  |                 syslog(LOG_ERR, "Failed to create socket for %s\n", upstream); | ||||||
|  |                 continue; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             // Get interface index | ||||||
|  |             int ifindex = if_nametoindex(upstream); | ||||||
|  |             if (ifindex == 0) | ||||||
|  |             { | ||||||
|  |                 syslog(LOG_ERR, "Failed to get ifindex for %s\n", upstream); | ||||||
|  |                 close(sock); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             // Store in port_map | ||||||
|  |             snprintf(port_map[port_map_size].name, LEN_IFACE + 1, upstream); | ||||||
|  |             port_map[port_map_size].sock = sock; | ||||||
|  |             port_map[port_map_size].ifindex = ifindex; | ||||||
|  |             port_map_size++; | ||||||
|  |             syslog(LOG_INFO, "Initialized socket for upstream interface %s", upstream); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     uci_free_context(ctx); | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | struct iface_info *find_iface_info_by_vlan(int vlan_id) | ||||||
|  | { | ||||||
|  |     for (int i = 0; i < iface_map_size; i++) | ||||||
|  |     { | ||||||
|  |         if (iface_map[i].serial == vlan_id) | ||||||
|  |         { | ||||||
|             return &iface_map[i]; |             return &iface_map[i]; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @@ -391,13 +277,15 @@ struct iface_info *find_iface_info_by_vlan(int vlan_id) { | |||||||
| } | } | ||||||
|  |  | ||||||
| void process_packet(unsigned char *user, const struct pcap_pkthdr *header, | void process_packet(unsigned char *user, const struct pcap_pkthdr *header, | ||||||
|                     const unsigned char *packet) { |                     const unsigned char *packet) | ||||||
|  | { | ||||||
|     int orig_len = header->len; |     int orig_len = header->len; | ||||||
|     struct ethhdr *eth = (struct ethhdr *)packet; |     struct ethhdr *eth = (struct ethhdr *)packet; | ||||||
|     int vlan_id = -1; |     int vlan_id = -1; | ||||||
|     int eth_offset = sizeof(struct ethhdr); |     int eth_offset = sizeof(struct ethhdr); | ||||||
|  |  | ||||||
|     if (ntohs(eth->h_proto) != ETH_P_8021Q) { |     if (ntohs(eth->h_proto) != ETH_P_8021Q) | ||||||
|  |     { | ||||||
|         syslog(LOG_DEBUG, |         syslog(LOG_DEBUG, | ||||||
|                "No VLAN header found in packet (EtherType: 0x%04x)\n", |                "No VLAN header found in packet (EtherType: 0x%04x)\n", | ||||||
|                ntohs(eth->h_proto)); |                ntohs(eth->h_proto)); | ||||||
| @@ -409,11 +297,14 @@ void process_packet(unsigned char *user, const struct pcap_pkthdr *header, | |||||||
|     eth_offset += sizeof(struct vlan_hdr); |     eth_offset += sizeof(struct vlan_hdr); | ||||||
|  |  | ||||||
|     struct iface_info *info = find_iface_info_by_vlan(vlan_id); |     struct iface_info *info = find_iface_info_by_vlan(vlan_id); | ||||||
|     if (!info) { |     if (!info) | ||||||
|  |     { | ||||||
|         syslog(LOG_ERR, "No interface info found for VLAN ID %d\n", vlan_id); |         syslog(LOG_ERR, "No interface info found for VLAN ID %d\n", vlan_id); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     syslog(LOG_INFO, "Received dhcp packet with vlan id %d from iface %s of length: %d", vlan_id, info->iface, header->len); | ||||||
|  |  | ||||||
|     char *hostname = get_hostname(); |     char *hostname = get_hostname(); | ||||||
|     int circuit_id_len = strlen(info->bssid) + 1 + strlen(info->essid); |     int circuit_id_len = strlen(info->bssid) + 1 + strlen(info->essid); | ||||||
|     int remote_id_len = strlen(hostname); |     int remote_id_len = strlen(hostname); | ||||||
| @@ -429,13 +320,16 @@ void process_packet(unsigned char *user, const struct pcap_pkthdr *header, | |||||||
|     int dhcp_len = ntohs(udp->len) - sizeof(struct udphdr); |     int dhcp_len = ntohs(udp->len) - sizeof(struct udphdr); | ||||||
|  |  | ||||||
|     int options_end = -1; |     int options_end = -1; | ||||||
|     for (int i = dhcp_len - 1; i >= 0; i--) { |     for (int i = dhcp_len - 1; i >= 0; i--) | ||||||
|         if (dhcp_start[i] == 0xFF) { // End option |     { | ||||||
|  |         if (dhcp_start[i] == 0xFF) | ||||||
|  |         { // End option | ||||||
|             options_end = i; |             options_end = i; | ||||||
|             break; |             break; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     if (options_end == -1) { |     if (options_end == -1) | ||||||
|  |     { | ||||||
|         syslog(LOG_DEBUG, "Could not find DHCP options end tag\n"); |         syslog(LOG_DEBUG, "Could not find DHCP options end tag\n"); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| @@ -445,7 +339,8 @@ void process_packet(unsigned char *user, const struct pcap_pkthdr *header, | |||||||
|     int orig_options_len = options_end; |     int orig_options_len = options_end; | ||||||
|     int new_len = orig_len - 4 - 1 + opt82_len + 1; |     int new_len = orig_len - 4 - 1 + opt82_len + 1; | ||||||
|     unsigned char *new_packet = malloc(new_len); |     unsigned char *new_packet = malloc(new_len); | ||||||
|     if (!new_packet) { |     if (!new_packet) | ||||||
|  |     { | ||||||
|         syslog(LOG_ERR, "Failed to allocate memory for new packet\n"); |         syslog(LOG_ERR, "Failed to allocate memory for new packet\n"); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| @@ -501,10 +396,12 @@ void process_packet(unsigned char *user, const struct pcap_pkthdr *header, | |||||||
|     new_ip->check = 0; |     new_ip->check = 0; | ||||||
|     unsigned int sum = 0; |     unsigned int sum = 0; | ||||||
|     unsigned short *ip_ptr = (unsigned short *)new_ip; |     unsigned short *ip_ptr = (unsigned short *)new_ip; | ||||||
|     for (int i = 0; i < ip->ihl * 2; i++) { |     for (int i = 0; i < ip->ihl * 2; i++) | ||||||
|  |     { | ||||||
|         sum += *ip_ptr++; |         sum += *ip_ptr++; | ||||||
|     } |     } | ||||||
|     while (sum >> 16) { |     while (sum >> 16) | ||||||
|  |     { | ||||||
|         sum = (sum & 0xFFFF) + (sum >> 16); |         sum = (sum & 0xFFFF) + (sum >> 16); | ||||||
|     } |     } | ||||||
|     new_ip->check = ~sum; |     new_ip->check = ~sum; | ||||||
| @@ -524,13 +421,16 @@ void process_packet(unsigned char *user, const struct pcap_pkthdr *header, | |||||||
|     unsigned char *udp_start = (unsigned char *)new_udp; |     unsigned char *udp_start = (unsigned char *)new_udp; | ||||||
|     int udp_total_len = ntohs(new_udp->len); |     int udp_total_len = ntohs(new_udp->len); | ||||||
|     unsigned short *udp_ptr = (unsigned short *)udp_start; |     unsigned short *udp_ptr = (unsigned short *)udp_start; | ||||||
|     for (int i = 0; i < udp_total_len / 2; i++) { |     for (int i = 0; i < udp_total_len / 2; i++) | ||||||
|  |     { | ||||||
|         sum += *udp_ptr++; |         sum += *udp_ptr++; | ||||||
|     } |     } | ||||||
|     if (udp_total_len % 2) { |     if (udp_total_len % 2) | ||||||
|  |     { | ||||||
|         sum += *(unsigned char *)udp_ptr; |         sum += *(unsigned char *)udp_ptr; | ||||||
|     } |     } | ||||||
|     while (sum >> 16) { |     while (sum >> 16) | ||||||
|  |     { | ||||||
|         sum = (sum & 0xFFFF) + (sum >> 16); |         sum = (sum & 0xFFFF) + (sum >> 16); | ||||||
|     } |     } | ||||||
|     new_udp->check = ~sum; |     new_udp->check = ~sum; | ||||||
| @@ -542,92 +442,91 @@ void process_packet(unsigned char *user, const struct pcap_pkthdr *header, | |||||||
|     socket_address.sll_family = AF_PACKET; |     socket_address.sll_family = AF_PACKET; | ||||||
|     socket_address.sll_protocol = htons(ETH_P_ALL); |     socket_address.sll_protocol = htons(ETH_P_ALL); | ||||||
|  |  | ||||||
|     for (int i = 0; i < port_count; i++) { |     for (int i = 0; i < port_map_size; i++) | ||||||
|         socket_address.sll_ifindex = ports[i].ifindex; |     { | ||||||
|          |         if (!strcmp(info->upstream, port_map[i].name)) | ||||||
|         if (sendto(ports[i].sock, new_packet, new_len, 0, |         { | ||||||
|                   (struct sockaddr *)&socket_address, |             socket_address.sll_ifindex = port_map[i].ifindex; | ||||||
|                   sizeof(socket_address)) < 0) { |             if (sendto(port_map[i].sock, new_packet, new_len, 0, (struct sockaddr *)&socket_address, | ||||||
|  |                        sizeof(socket_address)) < 0) | ||||||
|  |             { | ||||||
|                 syslog(LOG_ERR, "Failed to send packet to %s: %s\n", |                 syslog(LOG_ERR, "Failed to send packet to %s: %s\n", | ||||||
|                    ports[i].name, strerror(errno)); |                        info->upstream, strerror(errno)); | ||||||
|         } else { |             } | ||||||
|             syslog(LOG_DEBUG, |             else | ||||||
|  |             { | ||||||
|  |                 syslog(LOG_INFO, | ||||||
|                        "Successfully forwarded packet to %s (new length: %d)\n", |                        "Successfully forwarded packet to %s (new length: %d)\n", | ||||||
|                    ports[i].name, new_len); |                        info->upstream, new_len); | ||||||
|  |             } | ||||||
|  |             break; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     free(new_packet); |     free(new_packet); | ||||||
| } | } | ||||||
|  |  | ||||||
| int main(int argc, char *argv[]) { | void signal_handler(int sig) | ||||||
|  | { | ||||||
|  |     switch (sig) | ||||||
|  |     { | ||||||
|  |     case SIGTERM: | ||||||
|  |     case SIGHUP: | ||||||
|  |         cleanup(); | ||||||
|  |         break; | ||||||
|  |     default: | ||||||
|  |         break; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int main(int argc, char *argv[]) | ||||||
|  | { | ||||||
|     openlog("dhcp_inject:", LOG_PID | LOG_CONS, LOG_DAEMON); |     openlog("dhcp_inject:", LOG_PID | LOG_CONS, LOG_DAEMON); | ||||||
|  |  | ||||||
|     signal(SIGTERM, signal_handler); |     signal(SIGTERM, signal_handler); | ||||||
|     signal(SIGHUP, signal_handler); |     signal(SIGHUP, signal_handler); | ||||||
|  |  | ||||||
|     // Read IFACEs from environment variable |     if (parse_uci_config() != 0) | ||||||
|     char *iface_env = getenv("IFACEs"); |     { | ||||||
|     if (!iface_env) { |         syslog(LOG_ERR, "Failed to parse UCI configuration\n"); | ||||||
|         syslog(LOG_ERR, "No IFACEs provided. Exiting...\n"); |  | ||||||
|         cleanup(); |  | ||||||
|         return 1; |  | ||||||
|     } |  | ||||||
|     total_iface = atoi(iface_env); |  | ||||||
|     if (total_iface <= 0) { |  | ||||||
|         syslog(LOG_ERR, "Invalid IFACEs value: %s. Exiting...\n", iface_env); |  | ||||||
|         cleanup(); |         cleanup(); | ||||||
|         return 1; |         return 1; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     provided_ssids = getenv("SSIDs"); |     for (int i = 0; i < iface_map_size; i++) | ||||||
|     syslog(LOG_INFO, "Provided SSIDs: %s\n", provided_ssids); |     { | ||||||
|     if (!provided_ssids && argc > 1) { |         if (parse_iwinfo_by_essid(&iface_map[i]) != 0) | ||||||
|         provided_ssids = strdup(argv[1]); |         { | ||||||
|     } |             syslog(LOG_ERR, "Failed to get iface info for ESSID: %s\n", iface_map[i].essid); | ||||||
|     if (!provided_ssids) { |  | ||||||
|         syslog(LOG_ERR, "No SSIDs provided. Exiting...\n"); |  | ||||||
|         return 1; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     provided_ports = getenv("PORTs"); |  | ||||||
|     syslog(LOG_INFO, "Provided PORTs: %s\n", provided_ports); |  | ||||||
|     if (!provided_ports) { |  | ||||||
|         syslog(LOG_ERR, "No PORTs provided. Exiting...\n"); |  | ||||||
|             cleanup(); |             cleanup(); | ||||||
|             return 1; |             return 1; | ||||||
|         } |         } | ||||||
|  |         else | ||||||
|     if (parse_ssids(provided_ssids) != 0) { |         { | ||||||
|         syslog(LOG_ERR, "Failed to parse SSIDs\n"); |             syslog(LOG_INFO, "iface_info[%d]: iface='%s', freq='%s', essid='%s', bssid='%s', upstream='%s', serial=%d\n", | ||||||
|         cleanup(); |                    i, iface_map[i].iface, iface_map[i].frequency, iface_map[i].essid, iface_map[i].bssid, | ||||||
|         return 1; |                    iface_map[i].upstream, iface_map[i].serial); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (parse_ports(provided_ports) != 0) { |     if (setup_tc() != 0) | ||||||
|         syslog(LOG_ERR, "Failed to parse ports\n"); |     { | ||||||
|         cleanup(); |  | ||||||
|         return 1; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     if (setup_tc() != 0) { |  | ||||||
|         syslog(LOG_ERR, "Setup failed\n"); |         syslog(LOG_ERR, "Setup failed\n"); | ||||||
|         cleanup(); |         cleanup(); | ||||||
|         return 1; |         return 1; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     syslog(LOG_INFO, "Setup complete for SSIDs: %s and Ports: %s\n", |  | ||||||
|            provided_ssids, provided_ports); |  | ||||||
|  |  | ||||||
|     char errbuf[PCAP_ERRBUF_SIZE]; |     char errbuf[PCAP_ERRBUF_SIZE]; | ||||||
|     handle = pcap_open_live("ifb-inject", BUFSIZ, 1, 1000, errbuf); |     handle = pcap_open_live("ifb-inject", BUFSIZ, 1, 1000, errbuf); | ||||||
|     if (handle == NULL) { |     if (handle == NULL) | ||||||
|  |     { | ||||||
|         syslog(LOG_ERR, "Couldn't open device ifb-inject: %s\n", errbuf); |         syslog(LOG_ERR, "Couldn't open device ifb-inject: %s\n", errbuf); | ||||||
|         cleanup(); |         cleanup(); | ||||||
|         return 1; |         return 1; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (pcap_loop(handle, -1, process_packet, NULL) < 0) { |     if (pcap_loop(handle, -1, process_packet, NULL) < 0) | ||||||
|  |     { | ||||||
|         syslog(LOG_ERR, "pcap_loop failed: %s\n", pcap_geterr(handle)); |         syslog(LOG_ERR, "pcap_loop failed: %s\n", pcap_geterr(handle)); | ||||||
|         cleanup(); |         cleanup(); | ||||||
|         return 1; |         return 1; | ||||||
|   | |||||||
| @@ -1,9 +1,27 @@ | |||||||
| #include <stdint.h> | #include <stdint.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
| #include <netinet/in.h> | #include <netinet/in.h> | ||||||
|  |  | ||||||
| #define LEN_ESSID 32 | #define LEN_ESSID 32 | ||||||
| #define LEN_BSSID 12 | #define LEN_BSSID 12 | ||||||
| #define LEN_IFACE 15 | #define LEN_IFACE 15 | ||||||
|  | #define LEN_FREQ 3 | ||||||
|  |  | ||||||
|  | #define MAX_INTERFACES 48 | ||||||
|  | #define MAX_PORTS 8 | ||||||
|  |  | ||||||
|  | #define CONFIG_PATH "/etc/config/dhcpinject" | ||||||
|  |  | ||||||
|  | #define IWINFO_CMD "iwinfo | grep %s -A2 | grep '.*Channel:.*\\(%s\\..*\\) GHz' -B2 | awk '/ESSID/{print $1} /Access Point/{gsub(/:/, \"\", $3); print $3}'" | ||||||
|  |  | ||||||
|  | static pcap_t 		*handle = NULL; | ||||||
|  |  | ||||||
|  | static int 			 iface_map_size = 0; | ||||||
|  | struct iface_info 	*iface_map = NULL; | ||||||
|  | static int 			 port_map_size = 0; | ||||||
|  | struct port_info 	*port_map = NULL; | ||||||
|  |  | ||||||
| // DHCP header structure | // DHCP header structure | ||||||
| struct dhcp_packet { | struct dhcp_packet { | ||||||
| @@ -25,11 +43,15 @@ struct dhcp_packet { | |||||||
| 	uint8_t options[]; | 	uint8_t options[]; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | // up4094v4094 | ||||||
|  |  | ||||||
| // Structure to hold interface info | // Structure to hold interface info | ||||||
| struct iface_info { | struct iface_info { | ||||||
|     char iface[LEN_IFACE + 1]; |     char iface[LEN_IFACE + 1]; | ||||||
|     char essid[LEN_ESSID + 1]; |     char essid[LEN_ESSID + 1]; | ||||||
|     char bssid[LEN_BSSID + 1]; |     char bssid[LEN_BSSID + 1]; | ||||||
|  | 	char upstream[LEN_IFACE + 1]; | ||||||
|  | 	char frequency[4]; | ||||||
|     int serial; |     int serial; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| @@ -44,3 +66,11 @@ struct vlan_hdr { | |||||||
|     __be16 h_vlan_TCI;                // VLAN Tag Control Information |     __be16 h_vlan_TCI;                // VLAN Tag Control Information | ||||||
|     __be16 h_vlan_encapsulated_proto; // Encapsulated protocol |     __be16 h_vlan_encapsulated_proto; // Encapsulated protocol | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | char *get_hostname() { | ||||||
|  |     static char hostname[256]; | ||||||
|  |     if (gethostname(hostname, sizeof(hostname)) != 0) { | ||||||
|  |         strcpy(hostname, "unknown"); | ||||||
|  |     } | ||||||
|  |     return hostname; | ||||||
|  | } | ||||||
|   | |||||||
| @@ -1,16 +1,22 @@ | |||||||
| From ec135e7aefac08806fbabb0634a2bd88a169dfc6 Mon Sep 17 00:00:00 2001 | From 937c4ba769b4d3a0b5cb804e54fd8bece8efac47 Mon Sep 17 00:00:00 2001 | ||||||
| From: John Crispin <john@phrozen.org> | From: Shubham Vishwakarma <shubhamvis98@fossfrog.in> | ||||||
| Date: Sat, 15 Jul 2023 15:25:59 +0200 | Date: Mon, 29 Sep 2025 10:35:54 +0530 | ||||||
| Subject: [PATCH 58/68] ramips: add mt7621_indio_um-305ax | Subject: [PATCH 58/68] ramips: mt7621: add mt7621 indio um-305ax | ||||||
| 
 | 
 | ||||||
| Signed-off-by: John Crispin <john@phrozen.org> | Changelog: | ||||||
|  | - Fix MAC address assignment for Ethernet ports
 | ||||||
|  | - Fix Ethernet port configuration (was not working in the current DTS
 | ||||||
|  |   because GPIOs 23 and 24, used for LEDs, are RGMII2 pins) | ||||||
|  | - Add package kmod-7915-firmware to enable Wi-Fi
 | ||||||
|  | 
 | ||||||
|  | Signed-off-by: Shubham Vishwakarma <shubhamvis98@fossfrog.in> | ||||||
| ---
 | ---
 | ||||||
|  target/linux/ath79/image/generic.mk           |  22 +-- |  target/linux/ath79/image/generic.mk           |  22 +-- | ||||||
|  .../ramips/dts/mt7621_indio_um-305ax.dts      | 146 ++++++++++++++++++ |  .../ramips/dts/mt7621_indio_um-305ax.dts      | 168 ++++++++++++++++++ | ||||||
|  target/linux/ramips/image/mt7621.mk           |  11 ++ |  target/linux/ramips/image/mt7621.mk           |  11 ++ | ||||||
|  .../mt7621/base-files/etc/board.d/02_network  |   6 + |  .../mt7621/base-files/etc/board.d/02_network  |   6 + | ||||||
|  .../etc/hotplug.d/ieee80211/10_fix_wifi_mac   |   6 + |  .../etc/hotplug.d/ieee80211/10_fix_wifi_mac   |   6 + | ||||||
|  5 files changed, 180 insertions(+), 11 deletions(-) |  5 files changed, 202 insertions(+), 11 deletions(-) | ||||||
|  create mode 100644 target/linux/ramips/dts/mt7621_indio_um-305ax.dts |  create mode 100644 target/linux/ramips/dts/mt7621_indio_um-305ax.dts | ||||||
| 
 | 
 | ||||||
| diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk
 | diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk
 | ||||||
| @@ -55,27 +61,30 @@ index 5882feafcb..a98a5e816f 100644 | |||||||
|    DEVICE_VENDOR := YunCore |    DEVICE_VENDOR := YunCore | ||||||
| diff --git a/target/linux/ramips/dts/mt7621_indio_um-305ax.dts b/target/linux/ramips/dts/mt7621_indio_um-305ax.dts
 | diff --git a/target/linux/ramips/dts/mt7621_indio_um-305ax.dts b/target/linux/ramips/dts/mt7621_indio_um-305ax.dts
 | ||||||
| new file mode 100644 | new file mode 100644 | ||||||
| index 0000000000..79cffbdec2
 | index 0000000000..42837dd9fe
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/target/linux/ramips/dts/mt7621_indio_um-305ax.dts
 | +++ b/target/linux/ramips/dts/mt7621_indio_um-305ax.dts
 | ||||||
| @@ -0,0 +1,146 @@
 | @@ -0,0 +1,168 @@
 | ||||||
| +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
 | +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
 | ||||||
|  | +/*
 | ||||||
|  | + * Copyright (c) 2025, Shubham Vishwakarma <shubhamvis98@fossfrog.in>
 | ||||||
|  | + */
 | ||||||
|  | +
 | ||||||
|  | +/dts-v1/;
 | ||||||
| +
 | +
 | ||||||
| +#include "mt7621.dtsi"
 | +#include "mt7621.dtsi"
 | ||||||
| +
 |  | ||||||
| +#include <dt-bindings/gpio/gpio.h>
 | +#include <dt-bindings/gpio/gpio.h>
 | ||||||
| +#include <dt-bindings/input/input.h>
 | +#include <dt-bindings/input/input.h>
 | ||||||
| +
 | +
 | ||||||
| +/ {
 | +/ {
 | ||||||
| +	compatible = "indio,um-305ax", "mediatek,mt7621-soc";
 | +	compatible = "indio,um-305ax", "mediatek,mt7621-soc";
 | ||||||
| +	model = "INDIO UM-305AX";
 | +	model = "Indio UM-305AX";
 | ||||||
| +
 | +
 | ||||||
| +	aliases {
 | +	aliases {
 | ||||||
| +		led-boot = &led_green;
 | +		led-boot = &led_green;
 | ||||||
| +		led-failsafe = &led_red;
 | +		led-failsafe = &led_green;
 | ||||||
| +		led-running = &led_blue;
 | +		led-running = &led_green;
 | ||||||
| +		led-upgrade = &led_red;
 | +		led-upgrade = &led_green;
 | ||||||
| +		label-mac-device = &wan_port;
 |  | ||||||
| +	};
 | +	};
 | ||||||
| +
 | +
 | ||||||
| +	chosen {
 | +	chosen {
 | ||||||
| @@ -84,6 +93,11 @@ index 0000000000..79cffbdec2 | |||||||
| +	};
 | +	};
 | ||||||
| +
 | +
 | ||||||
| +	leds {
 | +	leds {
 | ||||||
|  | +		/*
 | ||||||
|  | +		* GPIO 23 and 24 LEDs won’t work because these pins are part of the RGMII2 pin group.
 | ||||||
|  | +		* To make the LEDs work, we need to change the &state_default node’s group variable
 | ||||||
|  | +		* to "rgmii2", which restores LED functionality but disables the Ethernet ports.
 | ||||||
|  | +		*/
 | ||||||
| +		compatible = "gpio-leds";
 | +		compatible = "gpio-leds";
 | ||||||
| +
 | +
 | ||||||
| +		led_blue: blue {
 | +		led_blue: blue {
 | ||||||
| @@ -119,7 +133,7 @@ index 0000000000..79cffbdec2 | |||||||
| +
 | +
 | ||||||
| +&state_default {
 | +&state_default {
 | ||||||
| +	gpio {
 | +	gpio {
 | ||||||
| +		groups = "rgmii2";
 | +		groups = "jtag", "wdt";
 | ||||||
| +		function = "gpio";
 | +		function = "gpio";
 | ||||||
| +	};
 | +	};
 | ||||||
| +};
 | +};
 | ||||||
| @@ -136,15 +150,19 @@ index 0000000000..79cffbdec2 | |||||||
| +};
 | +};
 | ||||||
| +
 | +
 | ||||||
| +&gmac0 {
 | +&gmac0 {
 | ||||||
| +	mtd-mac-address = <&factory 0x4>;
 | +	status = "okay";
 | ||||||
|  | +	nvmem-cells = <&macaddr_offset>;
 | ||||||
|  | +	nvmem-cell-names = "mac-address";
 | ||||||
| +};
 | +};
 | ||||||
| +
 | +
 | ||||||
| +&switch0 {
 | +&switch0 {
 | ||||||
| +	ports {
 | +	ports {
 | ||||||
| +		wan_port: port@0 {
 | +		port@0 {
 | ||||||
| +			status = "okay";
 | +			status = "okay";
 | ||||||
| +			label = "wan";
 | +			label = "wan";
 | ||||||
| +			mtd-mac-address = <&factory 0x28>;
 | +			nvmem-cells = <&macaddr_offset>;
 | ||||||
|  | +			nvmem-cell-names = "mac-address";
 | ||||||
|  | +			mac-address-increment = <1>;
 | ||||||
| +		};
 | +		};
 | ||||||
| +
 | +
 | ||||||
| +		port@1 {
 | +		port@1 {
 | ||||||
| @@ -205,6 +223,16 @@ index 0000000000..79cffbdec2 | |||||||
| +	};
 | +	};
 | ||||||
| +};
 | +};
 | ||||||
| +
 | +
 | ||||||
|  | +&factory {
 | ||||||
|  | +	compatible = "nvmem-cells";
 | ||||||
|  | +	#address-cells = <1>;
 | ||||||
|  | +	#size-cells = <1>;
 | ||||||
|  | +
 | ||||||
|  | +	macaddr_offset: macaddr@4 {
 | ||||||
|  | +		reg = <0x4 0x6>;
 | ||||||
|  | +	};
 | ||||||
|  | +};
 | ||||||
|  | +
 | ||||||
| diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
 | diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
 | ||||||
| index 962d7ef440..8790a2fa50 100644
 | index 962d7ef440..8790a2fa50 100644
 | ||||||
| --- a/target/linux/ramips/image/mt7621.mk
 | --- a/target/linux/ramips/image/mt7621.mk
 | ||||||
| @@ -269,5 +297,5 @@ index 3467e783f0..d5bd50fdf7 100644 | |||||||
|  		[ "$PHYNBR" = "1" ] && \ |  		[ "$PHYNBR" = "1" ] && \ | ||||||
|  			macaddr_add "$(mtd_get_mac_binary factory 0x4)" 1 > /sys${DEVPATH}/macaddress |  			macaddr_add "$(mtd_get_mac_binary factory 0x4)" 1 > /sys${DEVPATH}/macaddress | ||||||
| -- 
 | -- 
 | ||||||
| 2.34.1 | 2.47.3 | ||||||
| 
 | 
 | ||||||
							
								
								
									
										38
									
								
								patches/0100-sonicfi_rap63xc-211g-enable-pstore.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								patches/0100-sonicfi_rap63xc-211g-enable-pstore.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | From adbd8be88f9c5af3f79dc106bc0f2ace5eb50768 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: jackcybertan <jack.tsai@cybertan.com.tw> | ||||||
|  | Date: Thu, 21 Aug 2025 15:22:51 +0800 | ||||||
|  | Subject: [PATCH] sonicfi_rap63xc-211g: enable pstore | ||||||
|  |  | ||||||
|  | Signed-off-by: jackcybertan <jack.tsai@cybertan.com.tw> | ||||||
|  | --- | ||||||
|  |  .../ramips/dts/mt7621_sonicfi_rap63xc-211g.dts     | 14 ++++++++++++++ | ||||||
|  |  1 file changed, 14 insertions(+) | ||||||
|  |  | ||||||
|  | diff --git a/target/linux/ramips/dts/mt7621_sonicfi_rap63xc-211g.dts b/target/linux/ramips/dts/mt7621_sonicfi_rap63xc-211g.dts | ||||||
|  | index b64ca5708b..d076d682c9 100755 | ||||||
|  | --- a/target/linux/ramips/dts/mt7621_sonicfi_rap63xc-211g.dts | ||||||
|  | +++ b/target/linux/ramips/dts/mt7621_sonicfi_rap63xc-211g.dts | ||||||
|  | @@ -79,6 +79,20 @@ | ||||||
|  |  			linux,code = <KEY_RESTART>; | ||||||
|  |  		}; | ||||||
|  |  	}; | ||||||
|  | + | ||||||
|  | +	reserved-memory { | ||||||
|  | +		#address-cells = <1>; | ||||||
|  | +		#size-cells = <1>; | ||||||
|  | +		ranges; | ||||||
|  | + | ||||||
|  | +		ramoops: ramoops@ff80000 { | ||||||
|  | +			 compatible = "ramoops"; | ||||||
|  | +			 reg = <0x0ff80000 0x80000>; | ||||||
|  | +			 record-size = <0x20000>; | ||||||
|  | +			 console-size = <0x20000>; | ||||||
|  | +			 pmsg-size = <0x20000>; | ||||||
|  | +		 }; | ||||||
|  | +	}; | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  |  &spi0 { | ||||||
|  | --  | ||||||
|  | 2.34.1 | ||||||
|  |  | ||||||
							
								
								
									
										25
									
								
								patches/0101-ipq53xx-add-KERNEL_IPQ_MEM_PROFILE.patch
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										25
									
								
								patches/0101-ipq53xx-add-KERNEL_IPQ_MEM_PROFILE.patch
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  | From 40894005e2c114664a44abb0ffadb1cb945a88e2 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Antonio Wu <antonio.wu@cybertan.com.tw> | ||||||
|  | Date: Mon, 4 Aug 2025 05:10:41 +0000 | ||||||
|  | Subject: [PATCH] add KERNEL_IPQ_MEM_PROFILE for IPQ53XX  | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  config/Config-kernel.in | 2 +- | ||||||
|  |  1 file changed, 1 insertion(+), 1 deletion(-) | ||||||
|  |  | ||||||
|  | diff --git a/config/Config-kernel.in b/config/Config-kernel.in | ||||||
|  | index 3529696559..b7f13eccbe 100644 | ||||||
|  | --- a/config/Config-kernel.in | ||||||
|  | +++ b/config/Config-kernel.in | ||||||
|  | @@ -6,7 +6,7 @@ config KERNEL_IPQ_MEM_PROFILE | ||||||
|  |  	int "Different memory profile " | ||||||
|  |  	range 0 1024 | ||||||
|  |  	default 512 | ||||||
|  | -	depends on TARGET_ipq807x || TARGET_ipq60xx || TARGET_ipq50xx || TARGET_ipq95xx | ||||||
|  | +	depends on TARGET_ipq807x || TARGET_ipq60xx || TARGET_ipq50xx || TARGET_ipq95xx || TARGET_ipq53xx | ||||||
|  |  	help | ||||||
|  |  	  This option select memory profile to be used,which defines | ||||||
|  |  	  the reserved memory configuration used in device tree. | ||||||
|  | --  | ||||||
|  | 2.17.1 | ||||||
|  |  | ||||||
							
								
								
									
										68
									
								
								patches/0101-support-dhcp-opt138-opt224.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								patches/0101-support-dhcp-opt138-opt224.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | |||||||
|  | From ba5c63cc0cbbacd952a5c2cfd873439bf5adc86a Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Tanya Singh <tanya_singh@accton.com> | ||||||
|  | Date: Thu, 18 Sep 2025 13:21:38 +0800 | ||||||
|  | Subject: [PATCH] netifd: Support DHCP option 138 and DHCP option 224 | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  .../netifd/files/lib/netifd/dhcp.script       | 10 ++++++++++ | ||||||
|  |  .../patches/601-dhcp_opt138_opt224.patch      | 20 +++++++++++++++++++ | ||||||
|  |  2 files changed, 30 insertions(+) | ||||||
|  |  create mode 100644 package/utils/busybox/patches/601-dhcp_opt138_opt224.patch | ||||||
|  |  | ||||||
|  | diff --git a/package/network/config/netifd/files/lib/netifd/dhcp.script b/package/network/config/netifd/files/lib/netifd/dhcp.script | ||||||
|  | index 6fcf139beb..9c4366f48b 100755 | ||||||
|  | --- a/package/network/config/netifd/files/lib/netifd/dhcp.script | ||||||
|  | +++ b/package/network/config/netifd/files/lib/netifd/dhcp.script | ||||||
|  | @@ -4,6 +4,8 @@ | ||||||
|  |  . /lib/functions.sh | ||||||
|  |  . /lib/netifd/netifd-proto.sh | ||||||
|  |   | ||||||
|  | +rm -rf /tmp/dhcp-option-* | ||||||
|  | + | ||||||
|  |  set_classless_routes() { | ||||||
|  |  	local max=128 | ||||||
|  |  	while [ -n "$1" -a -n "$2" -a $max -gt 0 ]; do | ||||||
|  | @@ -111,6 +113,14 @@ case "$1" in | ||||||
|  |  	;; | ||||||
|  |  esac | ||||||
|  |   | ||||||
|  | +if [ -n "${opt138}" ]; then | ||||||
|  | +	echo -n "${opt138}" > /tmp/dhcp-option-138 | ||||||
|  | +fi | ||||||
|  | + | ||||||
|  | +if [ -n "${opt224}" ]; then | ||||||
|  | +	echo -n "${opt224}" > /tmp/dhcp-option-224 | ||||||
|  | +fi | ||||||
|  | + | ||||||
|  |  # user rules | ||||||
|  |  [ -f /etc/udhcpc.user ] && . /etc/udhcpc.user "$@" | ||||||
|  |  for f in /etc/udhcpc.user.d/*; do | ||||||
|  | diff --git a/package/utils/busybox/patches/601-dhcp_opt138_opt224.patch b/package/utils/busybox/patches/601-dhcp_opt138_opt224.patch | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000000..38e53be78c | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/package/utils/busybox/patches/601-dhcp_opt138_opt224.patch | ||||||
|  | @@ -0,0 +1,20 @@ | ||||||
|  | +--- a/networking/udhcp/common.c	2025-09-18 13:15:38.313248300 +0800 | ||||||
|  | ++++ b/networking/udhcp/common.c	2025-09-18 13:17:50.078418978 +0800 | ||||||
|  | +@@ -55,6 +55,8 @@ const struct dhcp_optflag dhcp_optflags[ | ||||||
|  | + 	{ OPTION_STRING                           , 0x43 }, /* DHCP_BOOT_FILE     */ | ||||||
|  | + //TODO: not a string, but a set of LASCII strings: | ||||||
|  | + //	{ OPTION_STRING                           , 0x4D }, /* DHCP_USER_CLASS    */ | ||||||
|  | ++	{ OPTION_IP								  , 0x8A }, /* DHCP_OPT138        */ | ||||||
|  | ++	{ OPTION_STRING		          			  , 0xE0 }, /* DHCP_OPT224        */ | ||||||
|  | + 	{ OPTION_STRING                           , 0x64 }, /* DHCP_PCODE         */ | ||||||
|  | + 	{ OPTION_STRING                           , 0x65 }, /* DHCP_TCODE         */ | ||||||
|  | + #if ENABLE_FEATURE_UDHCP_RFC3397 | ||||||
|  | +@@ -124,6 +126,8 @@ const char dhcp_option_strings[] ALIGN1 | ||||||
|  | + 	"tftp" "\0"             /* DHCP_TFTP_SERVER_NAME*/ | ||||||
|  | + 	"bootfile" "\0"         /* DHCP_BOOT_FILE       */ | ||||||
|  | + //	"userclass" "\0"        /* DHCP_USER_CLASS      */ | ||||||
|  | ++	"opt138" "\0"           /* DHCP_OPT138          */ | ||||||
|  | ++	"opt224" "\0"           /* DHCP_OPT224          */ | ||||||
|  | + 	"tzstr" "\0"            /* DHCP_PCODE           */ | ||||||
|  | + 	"tzdbstr" "\0"          /* DHCP_TCODE           */ | ||||||
|  | + #if ENABLE_FEATURE_UDHCP_RFC3397 | ||||||
|  | --  | ||||||
|  | 2.34.1 | ||||||
|  |  | ||||||
| @@ -16,3 +16,5 @@ packages: | |||||||
|   - iperf3 |   - iperf3 | ||||||
|   - sysstat |   - sysstat | ||||||
|   - kmod-cig-poe-judgment |   - kmod-cig-poe-judgment | ||||||
|  | diffconfig: | | ||||||
|  |   CONFIG_KERNEL_IPQ_MEM_PROFILE=0  | ||||||
|   | |||||||
| @@ -15,3 +15,5 @@ packages: | |||||||
|   - iperf3 |   - iperf3 | ||||||
|   - sysstat |   - sysstat | ||||||
|   - kmod-cig-poe-judgment |   - kmod-cig-poe-judgment | ||||||
|  | diffconfig: | | ||||||
|  |   CONFIG_KERNEL_IPQ_MEM_PROFILE=0 | ||||||
|   | |||||||
| @@ -15,3 +15,5 @@ packages: | |||||||
|   - iperf3 |   - iperf3 | ||||||
|   - sysstat |   - sysstat | ||||||
|   - kmod-cig-poe-judgment |   - kmod-cig-poe-judgment | ||||||
|  | diffconfig: | | ||||||
|  |   CONFIG_KERNEL_IPQ_MEM_PROFILE=0  | ||||||
|   | |||||||
| @@ -24,5 +24,6 @@ packages: | |||||||
|   - kmod-iio-ilps22qs |   - kmod-iio-ilps22qs | ||||||
|   - kmod-cig-poe-judgment  |   - kmod-cig-poe-judgment  | ||||||
| diffconfig: | | diffconfig: | | ||||||
|  |   CONFIG_KERNEL_IPQ_MEM_PROFILE=0 | ||||||
|   CONFIG_BUSYBOX_CUSTOM=y |   CONFIG_BUSYBOX_CUSTOM=y | ||||||
|   CONFIG_BUSYBOX_CONFIG_STTY=y |   CONFIG_BUSYBOX_CONFIG_STTY=y | ||||||
|   | |||||||
| @@ -12,3 +12,5 @@ include: | |||||||
| packages: | packages: | ||||||
|   - ipq53xx |   - ipq53xx | ||||||
|   - qca-ssdk-shell |   - qca-ssdk-shell | ||||||
|  | diffconfig: | | ||||||
|  |   CONFIG_KERNEL_IPQ_MEM_PROFILE=0 | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								profiles/indio_um-325ax-v2.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								profiles/indio_um-325ax-v2.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | --- | ||||||
|  | profile: indio_um-325ax-v2 | ||||||
|  | target: ipq50xx | ||||||
|  | subtarget: generic | ||||||
|  | description: Build image for the Indio um-325ax-v2 | ||||||
|  | image: bin/targets/ipq50xx/generic/openwrt-ipq50xx-indio_um-325ax-v2-squashfs-sysupgrade.tar | ||||||
|  | feeds: | ||||||
|  |   - name: ipq807x | ||||||
|  |     path: ../../feeds/ipq807x_v5.4 | ||||||
|  | include: | ||||||
|  |   - ucentral-ap | ||||||
|  | packages: | ||||||
|  |   - ipq50xx | ||||||
|  | diffconfig: | | ||||||
|  |   CONFIG_KERNEL_IPQ_MEM_PROFILE=512 | ||||||
|  |   CONFIG_BUSYBOX_CUSTOM=y | ||||||
|  |   CONFIG_BUSYBOX_CONFIG_STTY=y | ||||||
|  |    | ||||||
|  |    | ||||||
							
								
								
									
										18
									
								
								profiles/indio_um-335ax.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								profiles/indio_um-335ax.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | |||||||
|  | --- | ||||||
|  | profile: indio_um-335ax | ||||||
|  | target: ipq50xx | ||||||
|  | subtarget: generic | ||||||
|  | description: Build image for the Indio um-335ax | ||||||
|  | image: bin/targets/ipq50xx/generic/openwrt-ipq50xx-indio_um-335ax-squashfs-sysupgrade.tar | ||||||
|  | feeds: | ||||||
|  |   - name: ipq807x | ||||||
|  |     path: ../../feeds/ipq807x_v5.4 | ||||||
|  | include: | ||||||
|  |   - ucentral-ap | ||||||
|  | packages: | ||||||
|  |   - ipq50xx | ||||||
|  | diffconfig: | | ||||||
|  |   CONFIG_KERNEL_IPQ_MEM_PROFILE=512 | ||||||
|  |   CONFIG_BUSYBOX_CUSTOM=y | ||||||
|  |   CONFIG_BUSYBOX_CONFIG_STTY=y | ||||||
|  |  | ||||||
							
								
								
									
										17
									
								
								profiles/indio_um-525axm.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								profiles/indio_um-525axm.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | --- | ||||||
|  | profile: indio_um-525axm | ||||||
|  | target: ipq50xx | ||||||
|  | subtarget: generic | ||||||
|  | description: Build image for the Indio um-525axm | ||||||
|  | image: bin/targets/ipq50xx/generic/openwrt-ipq50xx-indio_um-525axm-squashfs-sysupgrade.tar | ||||||
|  | feeds: | ||||||
|  |   - name: ipq807x | ||||||
|  |     path: ../../feeds/ipq807x_v5.4 | ||||||
|  | include: | ||||||
|  |   - ucentral-ap | ||||||
|  | packages: | ||||||
|  |   - ipq50xx | ||||||
|  | diffconfig: | | ||||||
|  |   CONFIG_KERNEL_IPQ_MEM_PROFILE=512 | ||||||
|  |   CONFIG_BUSYBOX_CUSTOM=y | ||||||
|  |   CONFIG_BUSYBOX_CONFIG_STTY=y   | ||||||
							
								
								
									
										19
									
								
								profiles/indio_um-525axp.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								profiles/indio_um-525axp.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | --- | ||||||
|  | profile: indio_um-525axp | ||||||
|  | target: ipq50xx | ||||||
|  | subtarget: generic | ||||||
|  | description: Build image for the Indio um-525axp | ||||||
|  | image: bin/targets/ipq50xx/generic/openwrt-ipq50xx-indio_um-525axp-squashfs-sysupgrade.tar | ||||||
|  | feeds: | ||||||
|  |   - name: ipq807x | ||||||
|  |     path: ../../feeds/ipq807x_v5.4 | ||||||
|  | include: | ||||||
|  |   - ucentral-ap | ||||||
|  | packages: | ||||||
|  |   - ipq50xx | ||||||
|  | diffconfig: | | ||||||
|  |   CONFIG_KERNEL_IPQ_MEM_PROFILE=512 | ||||||
|  |   CONFIG_BUSYBOX_CUSTOM=y | ||||||
|  |   CONFIG_BUSYBOX_CONFIG_STTY=y | ||||||
|  |    | ||||||
|  |    | ||||||
| @@ -13,3 +13,5 @@ packages: | |||||||
|   - ipq53xx |   - ipq53xx | ||||||
|   - qca-ssdk-shell |   - qca-ssdk-shell | ||||||
|   - e2fsprogs |   - e2fsprogs | ||||||
|  | diffconfig: | | ||||||
|  |   CONFIG_KERNEL_IPQ_MEM_PROFILE=0 | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								profiles/zyxel_nwa50be.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								profiles/zyxel_nwa50be.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | --- | ||||||
|  | profile: zyxel_nwa50be | ||||||
|  | target: ipq53xx | ||||||
|  | subtarget: generic | ||||||
|  | description: Build image for the zyxel nwa50be | ||||||
|  | image: bin/targets/ipq53xx/generic/openwrt-ipq53xx-zyxel_nwa50be-squashfs-sysupgrade.tar | ||||||
|  | feeds: | ||||||
|  |   - name: qca | ||||||
|  |     path: ../../feeds/qca-wifi-7 | ||||||
|  | packages: | ||||||
|  |   - ipq53xx | ||||||
|  |   - qca-ssdk-shell | ||||||
|  | include: | ||||||
|  |   - ucentral-ap | ||||||
|  | diffconfig: | | ||||||
|  |   CONFIG_KERNEL_IPQ_MEM_PROFILE=0 | ||||||
							
								
								
									
										2
									
								
								setup.py
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								setup.py
									
									
									
									
									
								
							| @@ -87,7 +87,7 @@ def setup_tree(): | |||||||
| 		for patch in patches: | 		for patch in patches: | ||||||
| 			run(["git", "am", "-3", str(base_dir / patch)], check=True) | 			run(["git", "am", "-3", str(base_dir / patch)], check=True) | ||||||
| 		run( | 		run( | ||||||
| 			["ln", "-s", profiles, "profiles"], check=True, | 			["ln", "-rs", profiles, "profiles"], check=True, | ||||||
| 		) | 		) | ||||||
| 		print("### Patches done") | 		print("### Patches done") | ||||||
| 	except: | 	except: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user