mirror of
				https://github.com/Telecominfraproject/wlan-ap.git
				synced 2025-10-31 02:17:58 +00:00 
			
		
		
		
	Compare commits
	
		
			13 Commits
		
	
	
		
			v3.2.1-rc1
			...
			v3.2.1-rc3
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 18bf0d347d | ||
|   | ee80309fc3 | ||
|   | f091db1792 | ||
|   | 5f1d562f61 | ||
|   | 5aa975b70c | ||
|   | 47f71743f4 | ||
|   | e6f20ce347 | ||
|   | 717b0ce261 | ||
|   | e3c805a714 | ||
|   | 3047402b91 | ||
|   | 4dcd206466 | ||
|   | d3bb3be528 | ||
|   | 958ac1b6b0 | 
							
								
								
									
										2
									
								
								.github/workflows/build-dev.yml
									
									
									
									
										vendored
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/build-dev.yml
									
									
									
									
										vendored
									
									
										
										
										Normal file → Executable file
									
								
							| @@ -21,7 +21,7 @@ jobs: | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         target: [ 'cig_wf186h', 'cig_wf186w', 'cig_wf188n', 'cig_wf196', 'cig_wf189', 'cybertan_eww631-a1', 'cybertan_eww631-b1','sonicfi_rap630c-311g', 'sonicfi_rap630w-311g', 'sonicfi_rap630w-211g', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_eap105', 'edgecore_eap111', 'edgecore_eap112', 'edgecore_oap101', 'edgecore_oap101-6e', 'edgecore_oap101e', 'edgecore_oap101e-6e', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'hfcl_ion4x_3', 'hfcl_ion4xi_w', 'hfcl_ion4x_w', 'indio_um-305ax', 'sercomm_ap72tip', 'udaya_a6-id2', 'udaya_a6-od2', 'wallys_dr5018', 'wallys_dr6018', 'wallys_dr6018-v4', 'yuncore_ax820', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650', 'yuncore_fap655' ] | ||||
|         target: [ 'cig_wf186h', 'cig_wf186w', 'cig_wf188n', 'cig_wf196', 'cig_wf189', 'cybertan_eww631-a1', 'cybertan_eww631-b1', 'cybertan_rap63xc-211g','sonicfi_rap630c-311g', 'sonicfi_rap630w-311g', 'sonicfi_rap630w-211g', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_eap105', 'edgecore_eap111', 'edgecore_eap112', 'edgecore_oap101', 'edgecore_oap101-6e', 'edgecore_oap101e', 'edgecore_oap101e-6e', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'hfcl_ion4x_3', 'hfcl_ion4xi_w', 'hfcl_ion4x_w', 'indio_um-305ax', 'sercomm_ap72tip', 'udaya_a6-id2', 'udaya_a6-od2', 'wallys_dr5018', 'wallys_dr6018', 'wallys_dr6018-v4', 'yuncore_ax820', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650', 'yuncore_fap655' ] | ||||
|  | ||||
|     steps: | ||||
|     - uses: actions/checkout@v3 | ||||
|   | ||||
							
								
								
									
										10
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/Makefile
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										10
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/Makefile
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							| @@ -32,8 +32,7 @@ ALLWIFIBOARDS:= \ | ||||
| 	cybertan-eww622-a1 \ | ||||
| 	cybertan-eww631-a1 \ | ||||
| 	cybertan-eww631-b1 \ | ||||
| 	sonicfi-rap630c-311g \ | ||||
| 	sonicfi-rap630w-311g \ | ||||
| 	cybertan-rap630w-312g \ | ||||
| 	edgecore-eap101 \ | ||||
| 	gl-ax1800 \ | ||||
| 	gl-axt1800 \ | ||||
| @@ -51,6 +50,8 @@ ALLWIFIBOARDS:= \ | ||||
| 	wallys-dr5018 \ | ||||
| 	wallys-dr6018 \ | ||||
| 	wallys-dr6018-v4 \ | ||||
| 	sonicfi-rap630c-311g \ | ||||
| 	sonicfi-rap630w-311g \ | ||||
| 	tplink-ex227 \ | ||||
| 	tplink-ex447 \ | ||||
| 	yuncore-ax840 \ | ||||
| @@ -393,8 +394,7 @@ $(eval $(call generate-ath11k-wifi-package,cig-wf194c4,Cigtech WF194c4)) | ||||
| $(eval $(call generate-ath11k-wifi-package,cybertan-eww622-a1,CyberTan EWW622 A1)) | ||||
| $(eval $(call generate-ath11k-wifi-package,cybertan-eww631-a1,CyberTan EWW631 A1)) | ||||
| $(eval $(call generate-ath11k-wifi-package,cybertan-eww631-b1,CyberTan EWW631 B1)) | ||||
| $(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,cybertan-rap630w-312g,CyberTan RAP630W 312G)) | ||||
| $(eval $(call generate-ath11k-wifi-package,sercomm-wallaby,Sercomm Kiwi)) | ||||
| $(eval $(call generate-ath11k-wifi-package,wallys-dr6018,Wallys DR6018)) | ||||
| $(eval $(call generate-ath11k-wifi-package,wallys-dr6018-v4,Wallys DR6018 V4)) | ||||
| @@ -406,6 +406,8 @@ $(eval $(call generate-ath11k-wifi-package,liteon-wpx8324,Liteon WPX8324)) | ||||
| $(eval $(call generate-ath11k-wifi-package,indio-um-310ax-v1,Indio UM-310AX V1)) | ||||
| $(eval $(call generate-ath11k-wifi-package,indio-um-510axp-v1,Indio UM-510AXP V1)) | ||||
| $(eval $(call generate-ath11k-wifi-package,indio-um-510axm-v1,Indio UM-510AXM V1)) | ||||
| $(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,tplink-ex227,TP-Link EX227)) | ||||
| $(eval $(call generate-ath11k-wifi-package,tplink-ex447,TP-Link EX447)) | ||||
| $(eval $(call generate-ath11k-wifi-package,yuncore-ax840,YunCore AX840)) | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-cybertan-rap630w-312g.bin.IPQ5018
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-cybertan-rap630w-312g.bin.IPQ5018
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-cybertan-rap630w-312g.bin.QCN6122
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/board-cybertan-rap630w-312g.bin.QCN6122
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -24,6 +24,11 @@ cybertan,eww631-a1|\ | ||||
| cybertan,eww631-b1) | ||||
|         ucidef_set_led_default "power" "POWER" "sys:blue" "on" | ||||
| 	;; | ||||
| cybertan,rap630w-312g) | ||||
| 	ucidef_set_led_default "power" "POWER" "red:power" "on" | ||||
| 	ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy0tpt" | ||||
| 	ucidef_set_led_wlan "wlan5g" "WLAN5G" "green:wifi5" "phy1tpt" | ||||
| 	;; | ||||
| sonicfi,rap630c-311g|\ | ||||
| sonicfi,rap630w-311g) | ||||
|         ucidef_set_led_default "power" "POWER" "pwm:blue" "on" | ||||
|   | ||||
| @@ -27,6 +27,10 @@ qcom_setup_interfaces() | ||||
| 	cybertan,eww631-b1) | ||||
| 		ucidef_add_switch "switch1" "5:wan" "2:lan" "3:lan" "4:lan" "6@eth0" | ||||
| 		;; | ||||
| 	cybertan,rap630w-312g) | ||||
| 		ucidef_add_switch "switch1" \ | ||||
| 			"6@eth1" "1:lan" "2:lan" "3:lan" "4:lan" "5:wan" | ||||
| 		;; | ||||
| 	udaya,a6-id2) | ||||
| 		ucidef_set_interface_wan "eth1" | ||||
| 		ucidef_set_interface_lan "eth0" | ||||
|   | ||||
| @@ -123,6 +123,7 @@ ath11k/IPQ5018/hw1.0/caldata.bin) | ||||
| 	sonicfi,rap630w-311g|\ | ||||
| 	cybertan,eww631-a1|\ | ||||
| 	cybertan,eww631-b1|\ | ||||
| 	cybertan,rap630w-312g|\ | ||||
| 	edgecore,eap104|\ | ||||
| 	edgecore,oap101|\ | ||||
| 	edgecore,oap101-6e|\ | ||||
| @@ -151,6 +152,7 @@ ath11k/qcn6122/hw1.0/caldata_1.bin) | ||||
| 	sonicfi,rap630w-311g|\ | ||||
| 	cybertan,eww631-a1|\ | ||||
| 	cybertan,eww631-b1|\ | ||||
| 	cybertan,rap630w-312g|\ | ||||
| 	edgecore,oap101|\ | ||||
| 	edgecore,oap101-6e|\ | ||||
| 	edgecore,oap101e|\ | ||||
| @@ -217,6 +219,7 @@ ath11k-macs) | ||||
| 	optimcloud,d60-5g|\ | ||||
| 	optimcloud,d50|\ | ||||
| 	optimcloud,d50-5g|\ | ||||
| 	cybertan,rap630w-312g|\ | ||||
| 	yuncore,fap655) | ||||
| 		ath11k_generate_macs | ||||
| 		;; | ||||
|   | ||||
| @@ -74,6 +74,7 @@ platform_check_image() { | ||||
| 	sonicfi,rap630w-311g|\ | ||||
| 	cybertan,eww631-a1|\ | ||||
| 	cybertan,eww631-b1|\ | ||||
| 	cybertan,rap630w-312g|\ | ||||
| 	edgecore,eap104|\ | ||||
| 	wallys,dr5018|\ | ||||
| 	hfcl,ion4x_w|\ | ||||
| @@ -145,13 +146,14 @@ platform_do_upgrade() { | ||||
| 	sonicfi,rap630c-311g|\ | ||||
| 	sonicfi,rap630w-311g|\ | ||||
| 	cybertan,eww631-a1|\ | ||||
| 	cybertan,eww631-b1) | ||||
| 	cybertan,eww631-b1|\ | ||||
| 	cybertan,rap630w-312g) | ||||
| 		boot_part=$(fw_printenv bootfrom | cut  -d = -f2) | ||||
| 			echo "Current bootfrom is $boot_part" | ||||
| 			if [[ $boot_part == 1 ]]; then | ||||
| 				CI_UBIPART="rootfs" | ||||
| 				CI_FWSETENV="bootfrom 0" | ||||
| 		else | ||||
| 			elif [[ $boot_part == 0 ]]; then | ||||
| 				CI_UBIPART="rootfs_1" | ||||
| 				CI_FWSETENV="bootfrom 1" | ||||
| 			fi | ||||
|   | ||||
| @@ -0,0 +1,925 @@ | ||||
| /dts-v1/; | ||||
| /* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved. | ||||
|  * | ||||
|  * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved. | ||||
|  * | ||||
|  * Permission to use, copy, modify, and/or distribute this software for any | ||||
|  * purpose with or without fee is hereby granted, provided that the above | ||||
|  * copyright notice and this permission notice appear in all copies. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||||
|  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||||
|  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||||
|  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||||
|  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||||
|  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||||
|  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include "ipq5018.dtsi" | ||||
| #include <dt-bindings/input/input.h> | ||||
|  | ||||
| / { | ||||
| 	#address-cells = <0x2>; | ||||
| 	#size-cells = <0x2>; | ||||
| 	model = "Cybertan RAP630W-312G"; | ||||
| 	compatible = "cybertan,rap630w-312g", "qcom,ipq5018-mp03.3", "qcom,ipq5018"; | ||||
| 	interrupt-parent = <&intc>; | ||||
|  | ||||
| 	aliases { | ||||
| 		sdhc1 = &sdhc_1; /* SDC1 eMMC slot */ | ||||
| 		serial0 = &blsp1_uart1; | ||||
| 		serial1 = &blsp1_uart2; | ||||
| 		ethernet0 = "/soc/dp1"; | ||||
|                 ethernet1 = "/soc/dp2"; | ||||
|  | ||||
| 		led-boot = &led_power; | ||||
| 		led-failsafe = &led_power; | ||||
| 		led-running = &led_power; | ||||
| 		led-upgrade = &led_power; | ||||
| 	}; | ||||
|  | ||||
| 	chosen { | ||||
| 		bootargs = "console=ttyMSM0,115200,n8 rw init=/init"; | ||||
| 		bootargs-append = " swiotlb=1 coherent_pool=2M"; | ||||
| 		stdout-path = "serial0"; | ||||
| 	}; | ||||
|  | ||||
| 	reserved-memory { | ||||
| 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||
| 	/*		   256 MB Profile | ||||
| 	 * +==========+==============+=========================+ | ||||
| 	 * |	  |	      |			 | | ||||
| 	 * |  Region  | Start Offset |	  Size	   | | ||||
| 	 * |	  |	      |			 | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |    NSS   |  0x40000000  |	   8MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |   Linux  |  0x40800000  | Depends on total memory | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |   uboot  |  0x4A600000  |	   4MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |    SBL   |  0x4AA00000  |	   1MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |   smem   |  0x4AB00000  |	   1MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |    TZ    |  0x4AC00000  |	   4MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |    Q6    |	      |			 | | ||||
| 	 * |   code/  |  0x4B000000  |	  20MB	   | | ||||
| 	 * |   data   |	      |			 | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |  IPQ5018 |	      |			 | | ||||
| 	 * |   data   |  0x4C400000  |	  13MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |  IPQ5018 |	      |			 | | ||||
| 	 * |  M3 Dump |  0x4D100000  |	   1MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |  IPQ5018 |	      |			 | | ||||
| 	 * |   QDSS   |  0x4D200000  |	   1MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_1|	      |			 | | ||||
| 	 * |   data   |  0x4D300000  |	  13MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_1|	      |			 | | ||||
| 	 * |  M3 Dump |  0x4E000000  |	   1MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_1|	      |			 | | ||||
| 	 * |   QDSS   |  0x4E100000  |	   1MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_2|	      |			 | | ||||
| 	 * |   data   |  0x4E200000  |	  13MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_2|	      |			 | | ||||
| 	 * |  M3 Dump |  0x4EF00000  |	   1MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_2|	      |			 | | ||||
| 	 * |   QDSS   |  0x4F000000  |	   1MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |						   | | ||||
| 	 * |	    Rest of the memory for Linux	   | | ||||
| 	 * |						   | | ||||
| 	 * +===================================================+ | ||||
| 	 */ | ||||
| 		q6_mem_regions: q6_mem_regions@4B000000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4B000000 0x0 0x4100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_code_data: q6_code_data@4B000000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4B000000 0x0 0x1400000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_ipq5018_data: q6_ipq5018_data@4C400000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4C400000 0x0 0xD00000>; | ||||
| 		}; | ||||
|  | ||||
| 		m3_dump: m3_dump@4D100000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4D100000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_etr_region: q6_etr_dump@4D200000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4D200000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_data1: q6_qcn6122_data1@4D300000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4D300000 0x0 0xD00000>; | ||||
| 		}; | ||||
|  | ||||
| 		m3_dump_qcn6122_1: m3_dump_qcn6122_1@4E000000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4E000000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_etr_1: q6_qcn6122_etr_1@4E100000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4E100000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_data2: q6_qcn6122_data2@4E200000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4E200000 0x0 0xD00000>; | ||||
| 		}; | ||||
|  | ||||
| 		m3_dump_qcn6122_2: m3_dump_qcn6122_2@4EF00000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4EF00000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_etr_2: q6_qcn6122_etr_2@4F000000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4F000000 0x0 0x100000>; | ||||
| 		}; | ||||
| 	#else | ||||
| 	/*		 512MB/1GB Profiles | ||||
| 	 * +==========+==============+=========================+ | ||||
| 	 * |	  |	      |			 | | ||||
| 	 * |  Region  | Start Offset |	  Size	   | | ||||
| 	 * |	  |	      |			 | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |    NSS   |  0x40000000  |	  16MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |   Linux  |  0x41000000  | Depends on total memory | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |   uboot  |  0x4A600000  |	   4MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |    SBL   |  0x4AA00000  |	   1MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |   smem   |  0x4AB00000  |	   1MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |    TZ    |  0x4AC00000  |	   4MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |    Q6    |	      |			 | | ||||
| 	 * |   code/  |  0x4B000000  |	  20MB	   | | ||||
| 	 * |   data   |	      |			 | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |  IPQ5018 |	      |			 | | ||||
| 	 * |   data   |  0x4C400000  |	  13MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |  IPQ5018 |	      |			 | | ||||
| 	 * |  M3 Dump |  0x4D100000  |	   1MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |  IPQ5018 |	      |			 | | ||||
| 	 * |   QDSS   |  0x4D200000  |	   1MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |  IPQ5018 |	      |			 | | ||||
| 	 * |  Caldb   |  0x4D300000  |	   2MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_1|	      |			 | | ||||
| 	 * |   data   |  0x4D500000  |	  13MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_1|	      |			 | | ||||
| 	 * |  M3 Dump |  0x4E200000  |	   1MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_1|	      |			 | | ||||
| 	 * |   QDSS   |  0x4E300000  |	   1MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_1|	      |			 | | ||||
| 	 * |  Caldb   |  0x4E400000  |	   5MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_2|	      |			 | | ||||
| 	 * |   data   |  0x4E900000  |	  13MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_2|	      |			 | | ||||
| 	 * |  M3 Dump |  0x4F600000  |	   1MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_2|	      |			 | | ||||
| 	 * |   QDSS   |  0x4F700000  |	   1MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * | QCN6122_2|	      |			 | | ||||
| 	 * |  Caldb   |  0x4F800000  |	   5MB	   | | ||||
| 	 * +----------+--------------+-------------------------+ | ||||
| 	 * |						   | | ||||
| 	 * |	    Rest of the memory for Linux	   | | ||||
| 	 * |						   | | ||||
| 	 * +===================================================+ | ||||
| 	 */ | ||||
| 		q6_mem_regions: q6_mem_regions@4B000000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4B000000 0x0 0x4D00000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_code_data: q6_code_data@4B000000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4B000000 0x0 01400000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_ipq5018_data: q6_ipq5018_data@4C400000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4C400000 0x0 0xD00000>; | ||||
| 		}; | ||||
|  | ||||
| 		m3_dump: m3_dump@4D100000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4D100000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_etr_region: q6_etr_dump@4D200000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4D200000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_caldb_region: q6_caldb_region@4D300000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4D300000 0x0 0x200000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_data1: q6_qcn6122_data1@4D500000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4D500000 0x0 0xD00000>; | ||||
| 		}; | ||||
|  | ||||
| 		m3_dump_qcn6122_1: m3_dump_qcn6122_1@4E200000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4E200000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_etr_1: q6_qcn6122_etr_1@4E300000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4E300000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_caldb_1: q6_qcn6122_caldb_1@4E400000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4E400000 0x0 0x500000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_data2: q6_qcn6122_data2@4E900000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4E900000 0x0 0xD00000>; | ||||
| 		}; | ||||
|  | ||||
| 		m3_dump_qcn6122_2: m3_dump_qcn6122_2@4F600000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4F600000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_etr_2: q6_qcn6122_etr_2@4F700000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4F700000 0x0 0x100000>; | ||||
| 		}; | ||||
|  | ||||
| 		q6_qcn6122_caldb_2: q6_qcn6122_caldb_2@4F800000 { | ||||
| 			no-map; | ||||
| 			reg = <0x0 0x4F800000 0x0 0x500000>; | ||||
| 		}; | ||||
|  | ||||
| 	#endif | ||||
| 	}; | ||||
|  | ||||
| 	soc { | ||||
| 		serial@78af000 { | ||||
| 			status = "ok"; | ||||
| 		}; | ||||
|  | ||||
| 		blsp1_uart2: serial@78b0000 { | ||||
| 			pinctrl-0 = <&blsp1_uart_pins>; | ||||
| 			pinctrl-names = "default"; | ||||
| 			status = "disabled"; | ||||
| 		}; | ||||
|  | ||||
| 		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 16 0>; | ||||
| 			ethernet-phy@0 { | ||||
| 				reg = <0>; | ||||
| 			}; | ||||
|  | ||||
| 			ethernet-phy@1 { | ||||
| 				reg = <1>; | ||||
| 			}; | ||||
|  | ||||
| 			ethernet-phy@2 { | ||||
| 				reg = <2>; | ||||
| 			}; | ||||
|  | ||||
| 			ethernet-phy@3 { | ||||
| 				reg = <3>; | ||||
| 			}; | ||||
| 			ethernet-phy@4 { | ||||
| 				reg = <4>; | ||||
| 			}; | ||||
| 		}; | ||||
|  | ||||
| 		ess-instance { | ||||
| 			num_devices = <0x2>; | ||||
| 			ess-switch@0x39c00000 { | ||||
| 				compatible = "qcom,ess-switch-ipq50xx"; | ||||
| 				device_id = <0>; | ||||
| 				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>; | ||||
| 						phy_dac = <0x10 0x10>; | ||||
| 						mdiobus = <&mdio0>; | ||||
| 					}; | ||||
| 					port@1 { | ||||
| 						mdio-bus = <&mdio0>; | ||||
| 						port_id = <2>; | ||||
| 						forced-speed = <1000>; | ||||
| 						forced-duplex = <1>; | ||||
| 					}; | ||||
| 				}; | ||||
| 				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 = <&tlmm 0x10 0>;   /* gpio 16 */ | ||||
| 				switch_cpu_bmp = <0x40>;  /* cpu port bitmap */ | ||||
| 				switch_lan_bmp = <0x3e>; /* 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 = <0>; | ||||
| 					}; | ||||
| 					port@1 { | ||||
| 						port_id = <2>; | ||||
| 						phy_address = <1>; | ||||
| 					}; | ||||
| 					port@2 { | ||||
| 						port_id = <3>; | ||||
| 						phy_address = <2>; | ||||
| 					}; | ||||
| 					port@3 { | ||||
| 						port_id = <4>; | ||||
| 						phy_address = <3>; | ||||
| 					}; | ||||
| 					port@4 { | ||||
| 						port_id = <5>; | ||||
| 						phy_address = <4>; | ||||
| 					}; | ||||
| 				}; | ||||
| 			}; | ||||
| 		}; | ||||
|  | ||||
| 		wifi0: wifi@c000000 { | ||||
| 			status = "ok"; | ||||
| 		}; | ||||
|  | ||||
| 		dp1 { | ||||
| 			device_type = "network"; | ||||
| 			compatible = "qcom,nss-dp"; | ||||
| 			clocks = <&gcc GCC_SNOC_GMAC0_AXI_CLK>; | ||||
| 			clock-names = "nss-snoc-gmac-axi-clk"; | ||||
| 			qcom,id = <1>; | ||||
| 			reg = <0x39C00000 0x10000>; | ||||
| 			interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>; | ||||
| 			qcom,mactype = <2>; | ||||
| 			qcom,link-poll = <1>; | ||||
| 			qcom,phy-mdio-addr = <7>; | ||||
| 			mdio-bus = <&mdio0>; | ||||
| 			local-mac-address = [000000000000]; | ||||
| 			phy-mode = "sgmii"; | ||||
| 		}; | ||||
|  | ||||
| 		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>; | ||||
| 			mdio-bus = <&mdio1>; | ||||
| 			local-mac-address = [000000000000]; | ||||
| 			phy-mode = "sgmii"; | ||||
| 		}; | ||||
|  | ||||
| 		nss-macsec1 { | ||||
| 			compatible = "qcom,nss-macsec"; | ||||
| 			phy_addr = <0x1c>; | ||||
| 			mdiobus = <&mdio1>; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	qcom,test@0 { | ||||
| 		status = "ok"; | ||||
| 	}; | ||||
|  | ||||
| 	thermal-zones { | ||||
| 		status = "ok"; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &tlmm { | ||||
| 	pinctrl-0 = <&blsp0_uart_pins>; | ||||
| 	pinctrl-names = "default"; | ||||
|  | ||||
| 	blsp0_uart_pins: uart_pins { | ||||
| 		blsp0_uart_rx_tx { | ||||
| 			pins = "gpio20", "gpio21"; | ||||
| 			function = "blsp0_uart0"; | ||||
| 			bias-disable; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	blsp1_uart_pins: blsp1_uart_pins { | ||||
| 		blsp1_uart_rx_tx { | ||||
| 			pins = "gpio23", "gpio25", "gpio24", "gpio26"; | ||||
| 			function = "blsp1_uart2"; | ||||
| 			bias-disable; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	blsp0_spi_pins: blsp0_spi_pins { | ||||
| 		mux { | ||||
| 			pins = "gpio10", "gpio11", "gpio12", "gpio13"; | ||||
| 			function = "blsp0_spi"; | ||||
| 			drive-strength = <2>; | ||||
| 			bias-disable; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	qspi_nand_pins: qspi_nand_pins { | ||||
| 		qspi_clock { | ||||
| 			pins = "gpio9"; | ||||
| 			function = "qspi_clk"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-disable; | ||||
| 		}; | ||||
|  | ||||
| 		qspi_cs { | ||||
| 			pins = "gpio8"; | ||||
| 			function = "qspi_cs"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-disable; | ||||
| 		}; | ||||
|  | ||||
| 		qspi_data { | ||||
| 			pins = "gpio4", "gpio5", "gpio6", "gpio7"; | ||||
| 			function = "qspi_data"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-disable; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	mdio1_pins: mdio_pinmux { | ||||
| 		mux_0 { | ||||
| 			pins = "gpio36"; | ||||
| 			function = "mdc"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-up; | ||||
| 		}; | ||||
|  | ||||
| 		mux_1 { | ||||
| 			pins = "gpio37"; | ||||
| 			function = "mdio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-up; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| //	phy_led_pins: phy_led_pins { | ||||
| //		gephy_led_pin { | ||||
| //			pins = "gpio50"; | ||||
| //			function = "led0"; | ||||
| //			drive-strength = <8>; | ||||
| //			bias-pull-down; | ||||
| //		}; | ||||
| //	}; | ||||
|  | ||||
| 	button_pins: button_pins { | ||||
| 		wps_button { | ||||
| 			pins = "gpio38"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-up; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	leds_pins: leds_pins { | ||||
| 		led_sys { | ||||
| 			pins = "gpio24"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
|  | ||||
| 		led_5g { | ||||
| 			pins = "gpio22"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
|  | ||||
| 		led_2g { | ||||
| 			pins = "gpio23"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <8>; | ||||
| 			bias-pull-down; | ||||
| 		}; | ||||
| 		led_onekey { | ||||
| 	            pins = "gpio46"; | ||||
|         	    function = "gpio"; | ||||
|         	    drive-strength = <8>; | ||||
|         	    bias-pull-down; | ||||
|         	};  | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &soc { | ||||
| 	gpio_keys { | ||||
| 		compatible = "gpio-keys"; | ||||
| 		pinctrl-0 = <&button_pins>; | ||||
| 		pinctrl-names = "default"; | ||||
| 		button@1 { | ||||
| 			label = "restart"; | ||||
| 			linux,code = <KEY_RESTART>; | ||||
| 			gpios = <&tlmm 38 GPIO_ACTIVE_LOW>; | ||||
| 			linux,input-type = <1>; | ||||
| 			debounce-interval = <60>; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	leds { | ||||
|   	      compatible = "gpio-leds"; | ||||
| 		pinctrl-0 = <&leds_pins>; | ||||
| 		pinctrl-names = "default"; | ||||
|  | ||||
| 		led_power: led24 { | ||||
| 			label = "red:power"; | ||||
| 			gpios = <&tlmm 24 GPIO_ACTIVE_LOW>; | ||||
| 			linux,default-trigger = "default-on"; | ||||
| 			default-state = "on"; | ||||
| 		}; | ||||
|  | ||||
| 		led22 { | ||||
| 			label = "green:wifi5"; | ||||
| 			gpios = <&tlmm 22 GPIO_ACTIVE_LOW>; | ||||
| 			linux,default-trigger = "default-on"; | ||||
| 			default-state = "off"; | ||||
| 		}; | ||||
|  | ||||
| 		led23 { | ||||
| 			label = "green:wifi2"; | ||||
| 			gpios = <&tlmm 23 GPIO_ACTIVE_LOW>; | ||||
| 			linux,default-trigger = "default-on"; | ||||
| 			default-state = "off"; | ||||
| 		}; | ||||
| 		led46 { | ||||
|   			label = "led_onekey"; | ||||
| 			gpios = <&tlmm 46 GPIO_ACTIVE_LOW>;   | ||||
| 			linux,default-trigger = "led_onekey"; | ||||
| 			default-state = "off"; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
|  | ||||
| 	 gpio_keys { | ||||
| 		compatible = "gpio-keys"; | ||||
| 		pinctrl-0 = <&button_pins>; | ||||
| 		pinctrl-names = "default"; | ||||
|  | ||||
| 		wps { | ||||
| 			label = "reset"; | ||||
| 			linux,code = <KEY_RESTART>; | ||||
| 			gpios = <&tlmm 32 GPIO_ACTIVE_LOW>; | ||||
| 			linux,input-type = <1>; | ||||
| 			debounce-interval = <60>; | ||||
| 		}; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &q6v5_wcss { | ||||
| 	compatible = "qcom,ipq5018-q6-mpd"; | ||||
| 	#address-cells = <1>; | ||||
| 	#size-cells = <1>; | ||||
| 	ranges; | ||||
| 	firmware = "IPQ5018/q6_fw.mdt"; | ||||
| 	reg = <0x0cd00000 0x4040>, | ||||
| 		<0x1938000 0x8>, | ||||
| 		<0x193d204 0x4>; | ||||
| 	reg-names = "qdsp6", | ||||
| 			"tcsr-msip", | ||||
| 			"tcsr-q6"; | ||||
| 	resets = <&gcc GCC_WCSSAON_RESET>, | ||||
| 			<&gcc GCC_WCSS_Q6_BCR>; | ||||
|  | ||||
| 	reset-names = "wcss_aon_reset", | ||||
| 			"wcss_q6_reset"; | ||||
|  | ||||
| 	clocks = <&gcc GCC_Q6_AXIS_CLK>, | ||||
| 		<&gcc GCC_WCSS_ECAHB_CLK>, | ||||
| 		<&gcc GCC_Q6_AXIM_CLK>, | ||||
| 		<&gcc GCC_Q6_AXIM2_CLK>, | ||||
| 		<&gcc GCC_Q6_AHB_CLK>, | ||||
| 		<&gcc GCC_Q6_AHB_S_CLK>, | ||||
| 		<&gcc GCC_WCSS_AXI_S_CLK>; | ||||
| 	clock-names = "gcc_q6_axis_clk", | ||||
| 		"gcc_wcss_ecahb_clk", | ||||
| 		"gcc_q6_axim_clk", | ||||
| 		"gcc_q6_axim2_clk", | ||||
| 		"gcc_q6_ahb_clk", | ||||
| 		"gcc_q6_ahb_s_clk", | ||||
| 		"gcc_wcss_axi_s_clk"; | ||||
|  | ||||
| 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||
| 		memory-region = <&q6_mem_regions>, <&q6_etr_region>; | ||||
| 	#else | ||||
| 		memory-region = <&q6_mem_regions>, <&q6_etr_region>, | ||||
| 				<&q6_caldb_region>; | ||||
| 	#endif | ||||
|  | ||||
| 	qcom,rproc = <&q6v5_wcss>; | ||||
| 	qcom,bootargs_smem = <507>; | ||||
| 	boot-args = <0x1 0x4 0x3 0x0F 0x0 0x0>, | ||||
| 			<0x2 0x4 0x2 0x12 0x0 0x0>; | ||||
| 	status = "ok"; | ||||
| 	q6_wcss_pd1: remoteproc_pd1@4ab000 { | ||||
| 		compatible = "qcom,ipq5018-wcss-ahb-mpd"; | ||||
| 		reg = <0x4ab000 0x20>; | ||||
| 		reg-names = "rmb"; | ||||
| 		firmware = "IPQ5018/q6_fw.mdt"; | ||||
| 		m3_firmware = "IPQ5018/m3_fw.mdt"; | ||||
| 		interrupts-extended = <&wcss_smp2p_in 8 0>, | ||||
| 					<&wcss_smp2p_in 9 0>, | ||||
| 					<&wcss_smp2p_in 12 0>, | ||||
| 					<&wcss_smp2p_in 11 0>; | ||||
| 		interrupt-names = "fatal", | ||||
| 					"ready", | ||||
| 					"spawn-ack", | ||||
| 					"stop-ack"; | ||||
|  | ||||
| 		resets = <&gcc GCC_WCSSAON_RESET>, | ||||
| 				<&gcc GCC_WCSS_BCR>, | ||||
| 				<&gcc GCC_CE_BCR>; | ||||
| 		reset-names = "wcss_aon_reset", | ||||
| 				"wcss_reset", | ||||
| 				"ce_reset"; | ||||
|  | ||||
| 		clocks = <&gcc GCC_WCSS_AHB_S_CLK>, | ||||
| 				<&gcc GCC_WCSS_ACMT_CLK>, | ||||
| 				<&gcc GCC_WCSS_AXI_M_CLK>; | ||||
| 		clock-names = "gcc_wcss_ahb_s_clk", | ||||
| 					"gcc_wcss_acmt_clk", | ||||
| 					"gcc_wcss_axi_m_clk"; | ||||
|  | ||||
| 		qcom,halt-regs = <&tcsr_q6_block 0xa000 0xd000 0x0>; | ||||
|  | ||||
| 		qcom,smem-states = <&wcss_smp2p_out 8>, | ||||
| 					<&wcss_smp2p_out 9>, | ||||
| 					<&wcss_smp2p_out 10>; | ||||
| 		qcom,smem-state-names = "shutdown", | ||||
| 					"stop", | ||||
| 					"spawn"; | ||||
| 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||
| 		memory-region = <&q6_ipq5018_data>, <&m3_dump>, | ||||
| 				<&q6_etr_region>; | ||||
| 	#else | ||||
| 		memory-region = <&q6_ipq5018_data>, <&m3_dump>, | ||||
| 				<&q6_etr_region>, <&q6_caldb_region>; | ||||
| 	#endif | ||||
|  | ||||
| 	}; | ||||
|  | ||||
| 	q6_wcss_pd2: remoteproc_pd2 { | ||||
| 		compatible = "qcom,ipq5018-wcss-pcie-mpd"; | ||||
| 		firmware = "IPQ5018/q6_fw.mdt"; | ||||
| 		m3_firmware = "qcn6122/m3_fw.mdt"; | ||||
| 		interrupts-extended = <&wcss_smp2p_in 16 0>, | ||||
| 					<&wcss_smp2p_in 17 0>, | ||||
| 					<&wcss_smp2p_in 20 0>, | ||||
| 					<&wcss_smp2p_in 19 0>; | ||||
| 		interrupt-names = "fatal", | ||||
| 					"ready", | ||||
| 					"spawn-ack", | ||||
| 					"stop-ack"; | ||||
|  | ||||
| 		qcom,smem-states = <&wcss_smp2p_out 16>, | ||||
| 					<&wcss_smp2p_out 17>, | ||||
| 					<&wcss_smp2p_out 18>; | ||||
| 		qcom,smem-state-names = "shutdown", | ||||
| 					"stop", | ||||
| 					"spawn"; | ||||
| 	#ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||
| 		memory-region = <&q6_qcn6122_data1>, <&m3_dump_qcn6122_1>, | ||||
| 				<&q6_qcn6122_etr_1>; | ||||
| 	#else | ||||
| 		memory-region = <&q6_qcn6122_data1>, <&m3_dump_qcn6122_1>, | ||||
| 				<&q6_qcn6122_etr_1>, <&q6_qcn6122_caldb_1>; | ||||
| 	#endif | ||||
|  | ||||
| 	}; | ||||
|  | ||||
| 	q6_wcss_pd3: remoteproc_pd3 { | ||||
| 		compatible = "qcom,ipq5018-wcss-pcie-mpd"; | ||||
| 		firmware = "IPQ5018/q6_fw.mdt"; | ||||
| 		interrupts-extended = <&wcss_smp2p_in 24 0>, | ||||
| 					<&wcss_smp2p_in 25 0>, | ||||
| 					<&wcss_smp2p_in 28 0>, | ||||
| 					<&wcss_smp2p_in 27 0>; | ||||
| 		interrupt-names = "fatal", | ||||
| 					"ready", | ||||
| 					"spawn-ack", | ||||
| 					"stop-ack"; | ||||
|  | ||||
| 		qcom,smem-states = <&wcss_smp2p_out 24>, | ||||
| 					<&wcss_smp2p_out 25>, | ||||
| 					<&wcss_smp2p_out 26>; | ||||
| 		qcom,smem-state-names = "shutdown", | ||||
| 					"stop", | ||||
| 					"spawn"; | ||||
| 	#ifdef	__IPQ_MEM_PROFILE_256_MB__ | ||||
| 		memory-region = <&q6_qcn6122_data2>, <&m3_dump_qcn6122_2>, | ||||
| 				<&q6_qcn6122_etr_2>; | ||||
| 	#else | ||||
| 		memory-region = <&q6_qcn6122_data2>, <&m3_dump_qcn6122_2>, | ||||
| 				<&q6_qcn6122_etr_2>, <&q6_qcn6122_caldb_2>; | ||||
| 	#endif | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &wifi0 { | ||||
| 	/* IPQ5018 */ | ||||
| 	qcom,multipd_arch; | ||||
| 	qcom,rproc = <&q6_wcss_pd1>; | ||||
| 	qcom,userpd-subsys-name = "q6v5_wcss_userpd1"; | ||||
| #ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||
| 	qcom,tgt-mem-mode = <2>; | ||||
| #else | ||||
| 	qcom,tgt-mem-mode = <1>; | ||||
| #endif | ||||
| 	qcom,board_id = <0x23>; | ||||
| #ifdef __CNSS2__ | ||||
| 	qcom,bdf-addr = <0x4C400000 0x4C400000 0x4C400000 0x0 0x0>; | ||||
| 	qcom,caldb-addr = <0x4D300000 0x4D300000 0 0 0>; | ||||
| 	qcom,caldb-size = <0x200000>; | ||||
| 	mem-region = <&q6_ipq5018_data>; | ||||
| #else | ||||
| 	memory-region = <&q6_ipq5018_data>; | ||||
| #endif | ||||
| 	status = "ok"; | ||||
| }; | ||||
|  | ||||
| &wifi1 { | ||||
| 	/* QCN6122 5G */ | ||||
| 	qcom,multipd_arch; | ||||
| 	qcom,userpd-subsys-name = "q6v5_wcss_userpd2"; | ||||
| 	qcom,rproc = <&q6_wcss_pd2>; | ||||
| #ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||
| 	qcom,tgt-mem-mode = <2>; | ||||
| #else | ||||
| 	qcom,tgt-mem-mode = <1>; | ||||
| #endif | ||||
| 	qcom,board_id = <0x60>; | ||||
| #ifdef __CNSS2__ | ||||
| 	qcom,bdf-addr = <0x4D500000 0x4D500000 0x4D300000 0x0 0x0>; | ||||
| 	qcom,caldb-addr = <0x4E400000 0x4E400000 0 0 0>; | ||||
| 	qcom,caldb-size = <0x500000>; | ||||
| 	mem-region = <&q6_qcn6122_data1>; | ||||
| #else | ||||
| 	memory-region = <&q6_qcn6122_data1>; | ||||
| #endif | ||||
| 	status = "ok"; | ||||
| }; | ||||
|  | ||||
| &wifi2 { | ||||
| 	/* QCN6122 6G */ | ||||
| 	qcom,multipd_arch; | ||||
| 	qcom,userpd-subsys-name = "q6v5_wcss_userpd3"; | ||||
| 	qcom,rproc = <&q6_wcss_pd3>; | ||||
| #ifdef __IPQ_MEM_PROFILE_256_MB__ | ||||
| 	qcom,tgt-mem-mode = <2>; | ||||
| #else | ||||
| 	qcom,tgt-mem-mode = <1>; | ||||
| #endif | ||||
| 	qcom,board_id = <0xb0>; | ||||
| #ifdef __CNSS2__ | ||||
| 	qcom,bdf-addr = <0x4E900000 0x4E900000 0x4E200000 0x0 0x0>; | ||||
| 	qcom,caldb-addr = <0x4F800000 0x4F800000 0 0 0>; | ||||
| 	qcom,caldb-size = <0x500000>; | ||||
| 	mem-region = <&q6_qcn6122_data2>; | ||||
| #else | ||||
| 	memory-region = <&q6_qcn6122_data2>; | ||||
| #endif | ||||
| 	status = "disabled"; | ||||
| }; | ||||
|  | ||||
| &usb3 { | ||||
|        status = "ok"; | ||||
|        /* device-power-gpio = <&tlmm 24 1>; */ | ||||
| }; | ||||
|  | ||||
| &dwc_0 { | ||||
|        /delete-property/ #phy-cells; | ||||
|        /delete-property/ phys; | ||||
|        /delete-property/ phy-names; | ||||
| }; | ||||
|  | ||||
| &hs_m31phy_0 { | ||||
|        status = "ok"; | ||||
| }; | ||||
|  | ||||
| &eud { | ||||
| 	status = "ok"; | ||||
| }; | ||||
|  | ||||
| &pcie_x1 { | ||||
| 	perst-gpio = <&tlmm 18 GPIO_ACTIVE_LOW>; | ||||
| }; | ||||
|  | ||||
| &pcie_x2 { | ||||
| 	perst-gpio = <&tlmm 15 GPIO_ACTIVE_LOW>; | ||||
| }; | ||||
|  | ||||
| &pcie_x1_rp { | ||||
| 	status = "disabled"; | ||||
|  | ||||
| 	mhi_0: qcom,mhi@0 { | ||||
| 		reg = <0 0 0 0 0 >; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &pcie_x2_rp { | ||||
| 	status = "disabled"; | ||||
|  | ||||
| 	mhi_1: qcom,mhi@1 { | ||||
| 		reg = <0 0 0 0 0 >; | ||||
|  | ||||
| 	}; | ||||
| }; | ||||
							
								
								
									
										11
									
								
								feeds/ipq807x_v5.4/ipq50xx/image/ipq50xx.mk
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										11
									
								
								feeds/ipq807x_v5.4/ipq50xx/image/ipq50xx.mk
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							| @@ -40,6 +40,17 @@ define Device/cybertan_eww631_b1 | ||||
| endef | ||||
| TARGET_DEVICES += cybertan_eww631_b1 | ||||
|  | ||||
| define Device/cybertan_rap630w_312g | ||||
|   DEVICE_TITLE := CyberTan RAP630W-312G | ||||
|   DEVICE_DTS := qcom-ipq5018-rap630w-312g | ||||
|   SUPPORTED_DEVICES := cybertan,rap630w-312g | ||||
|   DEVICE_PACKAGES := ath11k-wifi-cybertan-rap630w-312g ath11k-firmware-ipq50xx-map-spruce \ | ||||
|                      -kmod-usb-dwc3-of-simple kmod-usb-dwc3-qcom kmod-usb3 \ | ||||
|                      kmod-usb-uas kmod-fs-msdos kmod-fs-ntfs | ||||
|   DEVICE_DTS_CONFIG := config@mp03.3 | ||||
| endef | ||||
| TARGET_DEVICES += cybertan_rap630w_312g | ||||
|  | ||||
| define Device/sonicfi_rap630c_311g | ||||
|   DEVICE_TITLE := Sonicfi RAP630C-311G | ||||
|   DEVICE_DTS := qcom-ipq5018-rap630c-311g | ||||
|   | ||||
							
								
								
									
										177
									
								
								feeds/ipq807x_v5.4/ipq50xx/modules.mk
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										177
									
								
								feeds/ipq807x_v5.4/ipq50xx/modules.mk
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							| @@ -52,6 +52,183 @@ define KernelPackage/tpm-tis-i2c/description | ||||
| endef | ||||
| $(eval $(call KernelPackage,tpm-tis-i2c)) | ||||
|  | ||||
| define KernelPackage/usb-dwc3-internal | ||||
|   TITLE:=DWC3 USB controller driver | ||||
|   DEPENDS:=+USB_GADGET_SUPPORT:kmod-usb-gadget | ||||
|   KCONFIG:= \ | ||||
|         CONFIG_USB_DWC3 \ | ||||
|         CONFIG_USB_DWC3_HOST=n \ | ||||
|         CONFIG_USB_DWC3_GADGET=n \ | ||||
|         CONFIG_USB_DWC3_DUAL_ROLE=y \ | ||||
|         CONFIG_EXTCON=y \ | ||||
|         CONFIG_USB_DWC3_DEBUG=n \ | ||||
|         CONFIG_USB_DWC3_VERBOSE=n | ||||
|   FILES:= $(LINUX_DIR)/drivers/usb/dwc3/dwc3.ko | ||||
|   AUTOLOAD:=$(call AutoLoad,84,dwc3) | ||||
|   $(call AddPlatformDepends/usb) | ||||
| endef | ||||
|  | ||||
| define KernelPackage/usb-dwc3-internal/description | ||||
|  This driver provides support for the Dual Role SuperSpeed | ||||
|  USB Controller based on the Synopsys DesignWare USB3 IP Core | ||||
| endef | ||||
|  | ||||
| $(eval $(call KernelPackage,usb-dwc3-internal)) | ||||
|  | ||||
| define KernelPackage/usb-dwc3-qcom-internal | ||||
|   TITLE:=DWC3 QTI USB driver | ||||
|   DEPENDS:=@!LINUX_4_14 @(TARGET_ipq40xx||TARGET_ipq806x||TARGET_ipq807x||TARGET_ipq60xx||TARGET_ipq95xx||TARGET_ipq50xx||TARGET_ipq53xx) +kmod-usb-dwc3-internal | ||||
|   KCONFIG:= CONFIG_USB_DWC3_QCOM | ||||
|   FILES:= $(LINUX_DIR)/drivers/usb/dwc3/dwc3-qcom.ko | ||||
|   AUTOLOAD:=$(call AutoLoad,83,dwc3-qcom) | ||||
|   $(call AddPlatformDepends/usb) | ||||
| endef | ||||
|  | ||||
| define KernelPackage/usb-dwc3-qcom-internal/description | ||||
|  Some QTI SoCs use DesignWare Core IP for USB2/3 functionality. | ||||
|  This driver also handles Qscratch wrapper which is needed for | ||||
|  peripheral mode support. | ||||
| endef | ||||
|  | ||||
| $(eval $(call KernelPackage,usb-dwc3-qcom-internal)) | ||||
|  | ||||
| define KernelPackage/usb-configfs | ||||
|  TITLE:= USB functions | ||||
|   KCONFIG:=CONFIG_USB_CONFIGFS \ | ||||
| 	CONFIG_USB_CONFIGFS_SERIAL=n \ | ||||
| 	CONFIG_USB_CONFIGFS_ACM=n \ | ||||
| 	CONFIG_USB_CONFIGFS_OBEX=n \ | ||||
| 	CONFIG_USB_CONFIGFS_NCM=n \ | ||||
| 	CONFIG_USB_CONFIGFS_ECM=n \ | ||||
| 	CONFIG_USB_CONFIGFS_ECM_SUBSET=n \ | ||||
| 	CONFIG_USB_CONFIGFS_RNDIS=n \ | ||||
| 	CONFIG_USB_CONFIGFS_EEM=n \ | ||||
| 	CONFIG_USB_CONFIGFS_MASS_STORAGE=n \ | ||||
| 	CONFIG_USB_CONFIGFS_F_LB_SS=n \ | ||||
| 	CONFIG_USB_CONFIGFS_F_FS=n \ | ||||
| 	CONFIG_USB_CONFIGFS_F_UAC1=n \ | ||||
| 	CONFIG_USB_CONFIGFS_F_UAC2=n \ | ||||
| 	CONFIG_USB_CONFIGFS_F_MIDI=n \ | ||||
| 	CONFIG_USB_CONFIGFS_F_HID=n \ | ||||
| 	CONFIG_USB_CONFIGFS_F_PRINTER=n \ | ||||
| 	CONFIG_USB_CONFIGFS_F_QDSS=n | ||||
|   $(call AddPlatformDepends/usb) | ||||
| endef | ||||
|  | ||||
| define KernelPackage/usb-configfs/description | ||||
|  USB functions | ||||
| endef | ||||
|  | ||||
| $(eval $(call KernelPackage,usb-configfs)) | ||||
|  | ||||
| define KernelPackage/usb-f-diag | ||||
|   TITLE:=USB DIAG | ||||
|   KCONFIG:=CONFIG_USB_F_DIAG \ | ||||
| 	CONFIG_USB_CONFIGFS_F_DIAG=y \ | ||||
| 	CONFIG_DIAG_OVER_USB=y | ||||
|   DEPENDS:=+kmod-usb-lib-composite +kmod-usb-configfs | ||||
|   FILES:=$(LINUX_DIR)/drivers/usb/gadget/function/usb_f_diag.ko | ||||
|   AUTOLOAD:=$(call AutoLoad,52,usb_f_diag) | ||||
|   $(call AddPlatformDepends/usb) | ||||
| endef | ||||
|  | ||||
| define KernelPackage/usb-f-diag/description | ||||
|  USB DIAG | ||||
| endef | ||||
|  | ||||
| $(eval $(call KernelPackage,usb-f-diag)) | ||||
|  | ||||
| define KernelPackage/usb-uas | ||||
|   TITLE:=USB Attched SCSI support | ||||
|   DEPENDS:= +kmod-scsi-core +kmod-usb-storage | ||||
|   KCONFIG:=CONFIG_USB_UAS | ||||
|   FILES:=$(LINUX_DIR)/drivers/usb/storage/uas.ko | ||||
|   AUTOLOAD:=$(call AutoProbe,uas) | ||||
|   $(call AddPlatformDepends/usb) | ||||
| endef | ||||
|  | ||||
| define KernelPackage/usb-uas/description | ||||
|  Kernel support for USB Attached SCSI devices (UAS) | ||||
| endef | ||||
|  | ||||
| $(eval $(call KernelPackage,usb-uas)) | ||||
|  | ||||
|  | ||||
| define KernelPackage/diag-char | ||||
|   TITLE:=CHAR DIAG | ||||
|   KCONFIG:= CONFIG_DIAG_MHI=y@ge5.4 \ | ||||
| 	  CONFIG_DIAG_OVER_PCIE=n@ge5.4 \ | ||||
| 	  CONFIG_DIAGFWD_BRIDGE_CODE=y \ | ||||
| 	  CONFIG_DIAG_CHAR | ||||
|   DEPENDS:=+kmod-lib-crc-ccitt +USB_CONFIGFS_F_DIAG:kmod-usb-f-diag +USB_CONFIGFS_F_DIAG:kmod-usb-core | ||||
|   FILES:=$(LINUX_DIR)/drivers/char/diag/diagchar.ko | ||||
| ifneq (,$(findstring $(CONFIG_KERNEL_IPQ_MEM_PROFILE), 256)$(CONFIG_LOWMEM_FLASH)) | ||||
|    AUTOLOAD:= | ||||
| else | ||||
|    AUTOLOAD:=$(call AutoLoad,52,diagchar) | ||||
| endif | ||||
| endef | ||||
|  | ||||
| define KernelPackage/diag-char/description | ||||
|  CHAR DIAG | ||||
| endef | ||||
|  | ||||
| $(eval $(call KernelPackage,diag-char)) | ||||
|  | ||||
| define KernelPackage/usb-f-qdss | ||||
|   TITLE:=USB QDSS | ||||
|   KCONFIG:=CONFIG_USB_F_QDSS \ | ||||
| 	CONFIG_USB_CONFIGFS_F_QDSS=y | ||||
|   DEPENDS:=@TARGET_ipq807x||TARGET_ipq60xx||TARGET_ipq_ipq807x||TARGET_ipq_ipq807x_64||TARGET_ipq_ipq60xx||TARGET_ipq_ipq60xx_64||TARGET_ipq_ipq50xx||TARGET_ipq_ipq50xx_64 +kmod-usb-lib-composite +kmod-usb-configfs +kmod-lib-crc-ccitt +kmod-usb-dwc3 +TARGET_ipq_ipq60xx:kmod-usb-dwc3-qcom +TARGET_ipq_ipq60xx_64:kmod-usb-dwc3-qcom +TARGET_ipq_ipq50xx:kmod-usb-dwc3-qcom +TARGET_ipq_ipq50xx_64:kmod-usb-dwc3-qcom +TARGET_ipq_ipq807x:kmod-usb-dwc3-of-simple +TARGET_ipq_ipq807x_64:kmod-usb-dwc3-of-simple +TARGET_ipq60xx:kmod-usb-dwc3-qcom +TARGET_ipq60xx:kmod-usb-dwc3-of-simple +TARGET_ipq807x:kmod-usb-dwc3-qcom +TARGET_ipq807x:kmod-usb-dwc3-of-simple | ||||
|   FILES:=$(LINUX_DIR)/drivers/usb/gadget/function/usb_f_qdss.ko \ | ||||
| 	$(LINUX_DIR)/drivers/usb/gadget/function/u_qdss.ko | ||||
|   AUTOLOAD:=$(call AutoLoad,52,usb_f_qdss) | ||||
|   $(call AddPlatformDepends/usb) | ||||
| endef | ||||
|  | ||||
| define KernelPackage/usb-f-qdss/description | ||||
|  USB QDSS | ||||
| endef | ||||
|  | ||||
| $(eval $(call KernelPackage,usb-f-qdss)) | ||||
|  | ||||
| define KernelPackage/usb-gdiag | ||||
|   TITLE:=USB GDIAG support | ||||
|   KCONFIG:=CONFIG_USB_G_DIAG | ||||
|   FILES:=\ | ||||
|        $(LINUX_DIR)/drivers/usb/gadget/legacy/g_diag.ko | ||||
|   AUTOLOAD:=$(call AutoLoad,52,g_diag) | ||||
|   DEPENDS:=@TARGET_ipq807x||TARGET_ipq60xx||TARGET_ipq95xx||TARGET_ipq_ipq60xx||TARGET_ipq_ipq60xx_64||TARGET_ipq50xx||TARGET_ipq53xx +kmod-usb-gadget +kmod-usb-lib-composite | ||||
|   $(call AddPlatformDepends/usb) | ||||
| endef | ||||
|  | ||||
| define KernelPackage/usb-gdiag/description | ||||
|  Kernel support for USB gdiag mode | ||||
| endef | ||||
|  | ||||
| $(eval $(call KernelPackage,usb-gdiag)) | ||||
|  | ||||
| define KernelPackage/usb-phy-ipq5018 | ||||
|   TITLE:=DWC3 USB PHY driver for IPQ5018 | ||||
|   DEPENDS:=@TARGET_ipq50xx||TARGET_ipq53xx | ||||
|   KCONFIG:= \ | ||||
| 	CONFIG_USB_QCA_M31_PHY \ | ||||
| 	CONFIG_PHY_IPQ_UNIPHY_USB | ||||
|   FILES:= \ | ||||
| 	$(LINUX_DIR)/drivers/usb/phy/phy-qca-m31.ko \ | ||||
| 	$(LINUX_DIR)/drivers/phy/phy-qca-uniphy.ko@le4.4 \ | ||||
| 	$(LINUX_DIR)/drivers/phy/qualcomm/phy-qca-uniphy.ko@ge5.4 | ||||
|   AUTOLOAD:=$(call AutoLoad,85,phy-qca-m31 phy-qca-uniphy) | ||||
|   $(call AddDepends/usb) | ||||
| endef | ||||
|  | ||||
| define KernelPackage/usb-phy-ipq5018/description | ||||
|  This driver provides support for the USB PHY drivers | ||||
|  within the IPQ5018 SoCs. | ||||
| endef | ||||
|  | ||||
| $(eval $(call KernelPackage,usb-phy-ipq5018)) | ||||
|  | ||||
| define KernelPackage/bootconfig | ||||
|   SUBMENU:=Other modules | ||||
|   TITLE:=Bootconfig partition for failsafe | ||||
|   | ||||
| @@ -1,38 +0,0 @@ | ||||
| --- a/drivers/net/wireless/ath/ath11k/peer.c | ||||
| +++ b/drivers/net/wireless/ath/ath11k/peer.c | ||||
| @@ -819,8 +819,13 @@ int ath11k_peer_delete(struct ath11k *ar | ||||
|  				} | ||||
|  			} | ||||
|  #endif | ||||
| -		ath11k_peer_rhash_delete(ar->ab, peer); | ||||
| +		if (peer->vdev_id == vdev_id) | ||||
| +			ath11k_peer_rhash_delete(ar->ab, peer); | ||||
|  	} | ||||
| + | ||||
| +	if (!peer) | ||||
| +		peer = ath11k_peer_find(ar->ab, vdev_id, addr); | ||||
| + | ||||
|  	spin_unlock_bh(&ar->ab->base_lock); | ||||
|  	mutex_unlock(&ar->ab->tbl_mtx_lock); | ||||
|  #ifdef CPTCFG_ATH11K_NSS_SUPPORT | ||||
| @@ -870,8 +875,18 @@ int ath11k_peer_create(struct ath11k *ar | ||||
|  	spin_lock_bh(&ar->ab->base_lock); | ||||
|  	peer = ath11k_peer_find_by_addr(ar->ab, param->peer_addr); | ||||
|  	if (peer) { | ||||
| -		spin_unlock_bh(&ar->ab->base_lock); | ||||
| -		return -EINVAL; | ||||
| +		if (peer->vdev_id == param->vdev_id) { | ||||
| +			spin_unlock_bh(&ar->ab->base_lock); | ||||
| +			return -EINVAL; | ||||
| +		} | ||||
| + | ||||
| +		/* Assume sta is transitioning to another band. | ||||
| +		 * Remove here the peer from rhash. | ||||
| +		 */ | ||||
| +		mutex_lock(&ar->ab->tbl_mtx_lock); | ||||
| +		ath11k_peer_rhash_delete(ar->ab, peer); | ||||
| +		mutex_unlock(&ar->ab->tbl_mtx_lock); | ||||
| + | ||||
|  	} | ||||
|  	spin_unlock_bh(&ar->ab->base_lock); | ||||
|   | ||||
| @@ -30,12 +30,9 @@ qcom_setup_macs() | ||||
|         cig,wf189) | ||||
|                 mtd=$(find_mtd_chardev "0:APPSBLENV") | ||||
|                 [ -z "$mtd" ] && return; | ||||
|                 mac=$(grep BaseMacAddress= $mtd | cut -dx -f2) | ||||
|                 [ -z "$mac" ] && return; | ||||
|                 wan_mac=$(macaddr_canonicalize $mac) | ||||
|                 wan_mac=$(grep eth1addr= $mtd | cut -d= -f2) | ||||
|                 [ -z "$wan_mac" ] && return; | ||||
| 		lan_mac=$(macaddr_add "$wan_mac" 1) | ||||
|                 ucidef_set_network_device_mac eth0 $lan_mac | ||||
|                 ucidef_set_network_device_mac eth1 $wan_mac | ||||
|                  ucidef_set_label_macaddr $wan_mac | ||||
|                 ;; | ||||
|         edgecore,eap105) | ||||
| @@ -48,9 +45,6 @@ qcom_setup_macs() | ||||
|                 lan_mac=$(macaddr_add "$wan_mac" 1) | ||||
|                 ;; | ||||
|         esac | ||||
|         [ -n "$lan_mac" ] && ucidef_set_interface_macaddr "lan" $lan_mac | ||||
|         [ -n "$wan_mac" ] && ucidef_set_interface_macaddr "wan" $wan_mac | ||||
|         [ -n "$wan_mac" ] && ucidef_set_label_macaddr "$wan_mac" | ||||
| } | ||||
|  | ||||
| board_config_update | ||||
|   | ||||
| @@ -0,0 +1,56 @@ | ||||
| From de4d3e25a555dedd70793d0362b1e501ed1a77f1 Mon Sep 17 00:00:00 2001 | ||||
| From: Benjamin Lin <benjamin-jw.lin@mediatek.com> | ||||
| Date: Tue, 30 Apr 2024 10:28:29 +0800 | ||||
| Subject: [PATCH] mac80211: mtk: fix inconsistent QoS mapping between AP and | ||||
|  AP_VLAN VIFs | ||||
|  | ||||
| Fix inconsistent QoS mapping between AP and AP_VLAN IFs. | ||||
| Specifically, when WDS AP IF is connected by a WDS STA, the QoS map of the AP_VLAN VIF is NULL. | ||||
| So the QoS types of packets to the WDS STA will be determined using the default mapping rule. | ||||
| However, SoftMAC driver uses the QoS map of the AP VIF, which may already be set. | ||||
| Therefore, it is possible that the QoS mappings of SW and HW are inconsistent. | ||||
| Thus, sync QoS map of AP VIF to that of AP_VLAN VIF. | ||||
|  | ||||
| Signed-off-by: Benjamin Lin <benjamin-jw.lin@mediatek.com> | ||||
| --- | ||||
|  net/mac80211/iface.c | 23 ++++++++++++++++++++++- | ||||
|  1 file changed, 22 insertions(+), 1 deletion(-) | ||||
|  | ||||
| diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c | ||||
| index ef32d53..138ad79 100644 | ||||
| --- a/net/mac80211/iface.c | ||||
| +++ b/net/mac80211/iface.c | ||||
| @@ -297,8 +297,29 @@ static int ieee80211_check_concurrent_iface(struct ieee80211_sub_if_data *sdata, | ||||
|  			 * can only add VLANs to enabled APs | ||||
|  			 */ | ||||
|  			if (iftype == NL80211_IFTYPE_AP_VLAN && | ||||
| -			    nsdata->vif.type == NL80211_IFTYPE_AP) | ||||
| +			    nsdata->vif.type == NL80211_IFTYPE_AP) { | ||||
| +				struct mac80211_qos_map *old_qos_map, *new_qos_map = NULL; | ||||
| + | ||||
|  				sdata->bss = &nsdata->u.ap; | ||||
| + | ||||
| +				rcu_read_lock(); | ||||
| +				old_qos_map = rcu_dereference(nsdata->qos_map); | ||||
| +				if (old_qos_map) { | ||||
| +					new_qos_map = kzalloc(sizeof(*new_qos_map), GFP_KERNEL); | ||||
| +					if (!new_qos_map) { | ||||
| +						rcu_read_unlock(); | ||||
| +						return -ENOMEM; | ||||
| +					} | ||||
| +					memcpy(&new_qos_map->qos_map, &old_qos_map->qos_map, | ||||
| +					       sizeof(new_qos_map->qos_map)); | ||||
| +				} | ||||
| +				rcu_read_unlock(); | ||||
| + | ||||
| +				old_qos_map = sdata_dereference(sdata->qos_map, sdata); | ||||
| +				rcu_assign_pointer(sdata->qos_map, new_qos_map); | ||||
| +				if (old_qos_map) | ||||
| +					kfree_rcu(old_qos_map, rcu_head); | ||||
| +			} | ||||
|  		} | ||||
|  	} | ||||
|   | ||||
| --  | ||||
| 2.18.0 | ||||
|  | ||||
| @@ -0,0 +1,27 @@ | ||||
| -----BEGIN RSA PRIVATE KEY----- | ||||
| MIIEpQIBAAKCAQEAylkhSz5UGwJnJjIchwS8KeJEmf2apWM40/z3ukTZHvnzR6cH | ||||
| Wvx0uahlMaHdnXlt1+a1ZjEr9VIehFsnad1MmF0p3evHSdW95q4KXn7QXD0kfTrs | ||||
| yiBbUbrzG+VSokpTY0xoUaqxSJWZyf0cytnnB+HYHVdjj5zshNHzJRCH494hB50m | ||||
| wzw3jyB15DAQzCrd3nhRpb/SwdaMV80M9AzhxfvL6vMpWn+GcA9SPMEZupbFYPZv | ||||
| 7H/tDr6f+ZFQH8LCOuzA3wELbm6ML2pzRhR6iL8d8yft6k02uQ3C5mGXgz1LD7io | ||||
| alEu3LrvkcUdcBmaaBlO3cdvvSygArZZXFsIFwIDAQABAoIBAQCBbgGd34Bsxly0 | ||||
| Udltg9nX8KNw3IbOw2jWMDlFLES1S6wRaQWLbXA8UTppROA8mi9oqmndtBYqFRzw | ||||
| DF5pmOQlkXH2QZp34ABYTXrUdslQNsvgTpCnuYqv/KUEcusoY+Jy4azYkBZWF1sH | ||||
| mJ+SIU9l+1ABdKR6eCXRz3l3e9twJMCoNbC6Sjohw32+YnFhChBKYH4v2tIbKGed | ||||
| L/xBli4a9JqGHDI3+wY/3bDy2pr88RL631ru3KWN0QfokKv1dMDFFxnes7bhIeTD | ||||
| oOJeCMPKOx6QU1zsNOb2N2OYfsrOplSRRVCL8TVgtu5dI2TnVyDrcD0NpeB0MSRt | ||||
| ZLTwbAwBAoGBAP09NKF2RcsbJ6yhnXcGIBqL9SJP4SYPf0AAy0w4PQdtDE5B1QFF | ||||
| xoIiGKZ+JOGnYiuaRpk4+EJyQvCQyMxS+4H69D6PwaerzJtvAzYDnOOyMAgxAcoU | ||||
| pQEgjuChwKkWy1qiIBUrl20fNbrNHxVrZhHvNSWtLicC1MK7gPn9iPhvAoGBAMyN | ||||
| 4xeSkBgnYbrJm0xdtzZ+xS88UAGR71Fi+o/3f3CFR355ffWKFtRDMP+sj6CtH2Xq | ||||
| ukIYawKuhO7DsuSw1DVYDpkKYHqxSMsAd2wqwNxKpR0dTPKXZ5qPUiumIOlCt0sn | ||||
| ekYk62KoJPessuqjzBsFfR9uh2ouUK3M0eO8a67ZAoGBAJcM0f7ZIEpE2UZkZBth | ||||
| wPZ0svQTd3WPWtSfZKQDC4wJZIStSdNnfj+S/OcaaP9cKvddH203iQWBSCJcChmu | ||||
| Caz/Nn62mslbdUDlV6H5R7SdTX8lVC7oX3+rnu2oLdXt7cAS4lYeWUVSj2bsAPVy | ||||
| yUA7UZU2lkfYrXW2B/mVXATrAoGBAMr/LBSioFk4C+agWHvqrP1pxSnhQsysFMHB | ||||
| 5kKlLVVvDspWq0fXKFyx6ZhxmX+tDvHHhdw9+0SICOgiUhBd49qkbqg2AhUAhure | ||||
| paU0sHxtn3pLL6e31VsvTC6BCTwzt07f+JpP3UDk+PrJ6iytLMrMIaXlvIEFQY+Z | ||||
| KdpFjN/RAoGAZc16tSE3zAON5/cYrCMRGrU1uNG2r7sWvUWSRKUB74Cgqhic9PS3 | ||||
| JQYHmfp7PN3EjLZvzSV08G9+qKatKUmuAErPviU+dEdUt1Yu3gws42I3fNYon02z | ||||
| m7elGc61q6FXewd7KC4C4o7ZtkiZZK0E6JkLZLvwuSS6kNl2cg0Ak3s= | ||||
| -----END RSA PRIVATE KEY----- | ||||
| @@ -0,0 +1,27 @@ | ||||
| -----BEGIN RSA PRIVATE KEY----- | ||||
| MIIEogIBAAKCAQEAtxDPiHAgUZ/gQ4Go50eDuJ4URkhBZfIwIfwhZgGduW8x8fCY | ||||
| kQjLthFY4rRX0kDTy+jg6Ov5jfXu3Gw4tjnNNQEzKhLv4eZfAgF9RCkXAyJnfDOJ | ||||
| qKBLkvquiCiwPQrray5ZmUGecO6/L1LmTd1ktwJfgkbV3Pos6oFDEpJDvf5HKa6C | ||||
| q2vqAs8GEP9RhqF4MTvqZkcxCwTp+f3neLVu1srK767Li7oEIpp0uhVAXLcBKo4N | ||||
| j7SkZPLDsLN03IikpsTeqWF8b5RZKYy1vGXH/f72GTpVWg6J5qpluv6wR6nqM2P4 | ||||
| cWcT9LPRTVKAcBoEwuDJUhAOaTAAObQw7LAzUQIDAQABAoIBAB6mrOjeRTsFdso2 | ||||
| wm3+9loJ9cESxghotZBrI7htmtf6ezVUIGdgPqN8YhKLOY0Vl6CznDzDjeQsAlNb | ||||
| t18jbG1shwGLbCi5pryyPSQVcSnwL72G74yRUjYIzQI1NdTyqBopB412hC3Ke65T | ||||
| xgXRhNRzjERG0fYO2UhmXjGU1czQpuD2B9z9owAo4bN8MJ0rS/4ADFtnpblUF6aP | ||||
| tknVHAV3UQY6JNkqlUHIYtkWLutUmsOzExN0/pX8wXaVN31qdSvh5REAszPAQuCA | ||||
| cxCdYF6aFi/xs0ICG8xmfYmcTMMNHPXxhRK849wGWVTGSE/fh5MHFzMt6ZuVCl3M | ||||
| 26nrlmUCgYEA2cen+S2TNs54xsOaC6TxV8Lf4UtAlnD8O6MrkNt458D0Iy3Tpsl0 | ||||
| 4kwX2bKFPBQAkIoDZJtZ3l5y4pSBwq5Ive4je/vJ2M33Mqfqp9VD0Uodkwrj5wGU | ||||
| T9VBIqF3utZHXLV0NQuYlssN8K83ZmU4IWjrtc/Qncix6L4fTJMExYsCgYEA1zGG | ||||
| S9R1hkCWgFZ5N8Ix0HjnWpwoPiU/jbtdjUl49K0aLybe98tztlkeqyO4nFw6Rohg | ||||
| InfRQ/wEMlBeEWYgTHqMOfJCCWLeY8bGh3lU2MVSE2IkPlbb7/XIH5DXLpHi9fBh | ||||
| 3rARGv34J2vWuDFhbDcoI+dJkfQ1cX5aRrb13hMCgYBHGw9XJnBIlsWMcFUdtC8w | ||||
| rmoWz1E5TY6tkispUt95G+Eak13luSU2tg2bgNRLt2QvzUAqWybOmhv8quxrOih6 | ||||
| CwT++EkBRs6NdZICVnmcHgzl88pRpIxePIzV186V7FzEgmJ851pc8dONYEhAYJAh | ||||
| KHa9mCrPObYM/faOM/p83QKBgBE5t6ROR3INrX5sbZuXAeHMK8jHAzmmRaYUv3JV | ||||
| 1UbQrG3l0KdJM+P+0kOkwlxRzaBjvj5EFQ46GCPm5wDBighVLvBcggi6T07xVGb3 | ||||
| wWDwupcunfQXg9d7dx9/upnRt7c0HMF0monslnahXTi1SzUcXSwykWMLh1OkZ5mN | ||||
| f7TdAoGABh4DU0SB7bY8LnQ21jNlzi3qdj4EKMkfQyTVDiT84hXi42OhGN23jKuI | ||||
| 2tl6KMqdsN/GLNCPGy5VMfbQCFyyn3g2gHc2Cl90LRf/PsQ4v4HD/c+bjEPJUrYe | ||||
| W2sPfHJqK3UsUL68JVaVsHZZ49oM1wJr0bn82Pl/+kNe02Njs2U= | ||||
| -----END RSA PRIVATE KEY----- | ||||
| @@ -0,0 +1,21 @@ | ||||
| -----BEGIN CERTIFICATE----- | ||||
| MIIDazCCAlOgAwIBAgIUDRQDKYZevoXzVn+I8sJA7oo0TWowDQYJKoZIhvcNAQEL | ||||
| BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM | ||||
| GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yNDA0MDIwNTIwMDhaFw0yNDA1 | ||||
| MDIwNTIwMDhaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw | ||||
| HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB | ||||
| AQUAA4IBDwAwggEKAoIBAQDDjDRntDuzUIXdSe3E21pEcuxOahgVU+BJnNuNR0xi | ||||
| hAhgaFmRHHQKOgVkzld288+ofsxo2O+N22lDv/Vkk1FnRXrY6j1xeaRcoEEDkCvD | ||||
| YxZsn7qrVWuzR7zowGjep8jYGvRY6zkWhz1c1FqHdW7TOqijK66+h8tnXM88C8Jb | ||||
| OFAxRWxDreNNK+lvqRutLk1iEqChk1bRp0Dy8du3cbPTaCnMF8J0FPXuDmwJnPO0 | ||||
| 6Hh6lBuNoN8arCKrZHlX4WUo+u+ghVPw3VygjTAYDHItjF+rCNTAQUnUAG14asIC | ||||
| s4Px+/spq6XnSj1Cl/+LxF9azXoILLkHze7Hdm0Tw8ObAgMBAAGjUzBRMB0GA1Ud | ||||
| DgQWBBSklcF1xTKDDwQDJ2y7O776Cqr7czAfBgNVHSMEGDAWgBSklcF1xTKDDwQD | ||||
| J2y7O776Cqr7czAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAZ | ||||
| XRrrtzpdZ+Rm9q8jUdUYguI+5t9Rw8RZbo1Uv9C4XAU6UqATGkD/wt073sEZCd/1 | ||||
| /BX83pyBaFROJzXSILH9lkyNyTy2Q45i8RG8Y8xk4iCUIMkrTZl3q42ZGgVKgHDz | ||||
| q5m8Gn+VrkeVtPPfM77FFlPVqTbfFpwccanki8Qbd6w95ttx2/OCNkTJJokNA1E8 | ||||
| 5FHF9eFiB/T9LqHKuT1W6/sPfETF+IIhIhTSpBP31tPfMgZYqqDmaY1cJotinI5t | ||||
| 7WopbjdXKZUfF+wUwChR7Hsuo0zQ8W6Jc+X4hzDTE7bmE/5YZ6Do0q0L1I84vEof | ||||
| MBzUGXqXXFL7fFvjMQ6j | ||||
| -----END CERTIFICATE----- | ||||
| @@ -0,0 +1,27 @@ | ||||
| -----BEGIN RSA PRIVATE KEY----- | ||||
| MIIEpAIBAAKCAQEAw4w0Z7Q7s1CF3UntxNtaRHLsTmoYFVPgSZzbjUdMYoQIYGhZ | ||||
| kRx0CjoFZM5XdvPPqH7MaNjvjdtpQ7/1ZJNRZ0V62Oo9cXmkXKBBA5Arw2MWbJ+6 | ||||
| q1Vrs0e86MBo3qfI2Br0WOs5Foc9XNRah3Vu0zqooyuuvofLZ1zPPAvCWzhQMUVs | ||||
| Q63jTSvpb6kbrS5NYhKgoZNW0adA8vHbt3Gz02gpzBfCdBT17g5sCZzztOh4epQb | ||||
| jaDfGqwiq2R5V+FlKPrvoIVT8N1coI0wGAxyLYxfqwjUwEFJ1ABteGrCArOD8fv7 | ||||
| Kaul50o9Qpf/i8RfWs16CCy5B83ux3ZtE8PDmwIDAQABAoIBAAwDPuzn+4rmdXLE | ||||
| qeCgAQmXbcDbb6NPxcV/51TkfmLG7aTOhEIP12kRa2dn7aOXEritIW2Hdh/mzK6m | ||||
| yjJlgmivsf5FVYT1Dg3KonPPlYCpQ6VkopkH5FfdHlPGDisvb30nGr+jo5worrJX | ||||
| MUCFDEvZnKZ5doCp4ur0np53snbcAQrTAJX8BqiHKiFhxszjgClelz2cuh1EqBG9 | ||||
| UylxK8q26uAOG1+fzbLqLEqpHxwjunU98/P8H+kTOCRg3eSlDK5gJP7psG6siPdd | ||||
| d/vDKfxglUzf7FozBY1MkTnPE6dQqUuofd1kMYaLqC61IZf+c7Rpqu7dTanIt+T7 | ||||
| xhI68sECgYEA/hOGDIyGrVFOpN4rmplGtWzgBkXOf5Dj7l4CaKSvxEcUTfTLWvY4 | ||||
| OsIehari2w3eUl+dfmYXBZ+Q0QtEuWjdxv0biE3PFgBmHJbvJEoZNs5b57gnP4hm | ||||
| C/vwwn3gV+mVnhwpkv0AUXLZLkwpA2RdybRC4xfiylOfqPrPmCw+TbECgYEAxQc8 | ||||
| KyFN1Kk2gG6mkdKEto0fO9sSToq6lvnShhm7HflFIfqXF2O3gytvwnRBrX4JWQpH | ||||
| CeRCQfDssiz3zM8pLUcple2xUuZbjJovkulYu3bvP8XItL/YNIo5OF8dlpV46kQY | ||||
| QWTgTYpeEDYQWUzp+UyrcSJhTH0XJcVL9npXfQsCgYEAvS2SSPO1L4VztiRKeTEZ | ||||
| SerIH0OIzsj2Pby3tGyzBsUZ5DWZ2J+uHGn/Se2EPjBkUhcpcDzZdXFq5YurXxYq | ||||
| 04gQIPw2bh5b6XukkfOuNHWQTsd6Sb7opJGxoU8SZMLiiThU6EIDI6IM/YDtpL3t | ||||
| a0sR5n8ZeSasoagmPBrtRPECgYEAiui/7fSMB/vI9iGNBFA0yvOR6sRYEtHSHXFC | ||||
| kNMBTm+Y4wzmi1H9Ztgv8hu+1k9+zazmSr4ITK9MYY48osQHVunOEutC0pygPO/T | ||||
| zLMBoSGIKiEKkQyUpO4yy2Cb3rfBSQD7TNePIHwGN022lw8YAnCgiqHfkWq78CA6 | ||||
| nyrAFeMCgYBDciC+Haz5Z38qzUrHYeTpFnUzKn6JW9RezCD61+LGHnhSaIm+9SsR | ||||
| gtyzSr8K1btoMxKjZeGc0zbYvgtbZFviUtb1ixevqI2K58IT/vPELxlE4AYq5pZQ | ||||
| /1/lITNjBLuAfZG7TCQK2JCPVGkTKpk9ewRXnfncfP2sFxVdYOFALQ== | ||||
| -----END RSA PRIVATE KEY----- | ||||
| @@ -0,0 +1,378 @@ | ||||
| /dts-v1/; | ||||
| #include "mt7981.dtsi" | ||||
| / { | ||||
| 	model = "SENAO JEAP6500"; | ||||
| 	compatible = "senao,jeap6500"; | ||||
| 	chosen { | ||||
| 		bootargs = "console=ttyS0,115200n1 loglevel=8  \ | ||||
| 				earlycon=uart8250,mmio32,0x11002000"; | ||||
| 	}; | ||||
|  | ||||
| 	memory { | ||||
| 		reg = <0 0x40000000 0 0x10000000>; | ||||
| 	}; | ||||
|  | ||||
| 	gpio-keys { | ||||
| 		compatible = "gpio-keys"; | ||||
|  | ||||
| 		reset { | ||||
| 			label = "reset"; | ||||
| 			linux,code = <KEY_RESTART>; | ||||
| 			gpios = <&pio 1 GPIO_ACTIVE_LOW>; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	nmbm_spim_nand { | ||||
| 		compatible = "generic,nmbm"; | ||||
|  | ||||
| 		#address-cells = <1>; | ||||
| 		#size-cells = <1>; | ||||
|  | ||||
| 		lower-mtd-device = <&spi_nand>; | ||||
| 		forced-create; | ||||
|  | ||||
| 		partitions { | ||||
| 			compatible = "fixed-partitions"; | ||||
| 			#address-cells = <1>; | ||||
| 			#size-cells = <1>; | ||||
|  | ||||
| 			partition@0 { | ||||
| 				label = "BL2"; | ||||
| 				reg = <0x00000 0x0100000>; | ||||
| 				read-only; | ||||
| 			}; | ||||
|  | ||||
| 			partition@100000 { | ||||
| 				label = "u-boot-env"; | ||||
| 				reg = <0x0100000 0x0080000>; | ||||
| 			}; | ||||
|  | ||||
| 			factory: partition@180000 { | ||||
| 				label = "Factory"; | ||||
| 				reg = <0x180000 0x0200000>; | ||||
| 			}; | ||||
|  | ||||
| 			partition@380000 { | ||||
| 				label = "FIP"; | ||||
| 				reg = <0x380000 0x0200000>; | ||||
| 			}; | ||||
|  | ||||
| 			partition@580000 { | ||||
| 				label = "ubi"; | ||||
| 				reg = <0x580000 0x6E00000>; | ||||
| 			}; | ||||
|  | ||||
| 			partition@7380000 { | ||||
| 				label = "ubi_1"; | ||||
| 				reg = <0x7380000 0x6E00000>; | ||||
| 			}; | ||||
|  | ||||
| 			partition@E180000 { | ||||
| 				label = "cert"; | ||||
| 				reg = <0xE180000 0x0060000>; | ||||
| 			}; | ||||
|  | ||||
| 			partition@E1E0000 { | ||||
| 				label = "userconfig"; | ||||
| 				reg = <0xE1E0000 0x00a0000>; | ||||
| 			}; | ||||
|  | ||||
| 			partition@E280000 { | ||||
| 				label = "crashdump"; | ||||
| 				reg = <0xE280000 0x0060000>; | ||||
| 			}; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	sound_wm8960 { | ||||
| 		compatible = "mediatek,mt79xx-wm8960-machine"; | ||||
| 		mediatek,platform = <&afe>; | ||||
| 		audio-routing = "Headphone", "HP_L", | ||||
| 				"Headphone", "HP_R", | ||||
| 				"LINPUT1", "AMIC", | ||||
| 				"RINPUT1", "AMIC"; | ||||
| 		mediatek,audio-codec = <&wm8960>; | ||||
| 		status = "disabled"; | ||||
| 	}; | ||||
|  | ||||
| 	sound_si3218x { | ||||
| 		compatible = "mediatek,mt79xx-si3218x-machine"; | ||||
| 		mediatek,platform = <&afe>; | ||||
| 		mediatek,ext-codec = <&proslic_spi>; | ||||
| 		status = "disabled"; | ||||
| 	}; | ||||
|  | ||||
| 	leds { | ||||
| 		compatible = "gpio-leds"; | ||||
| 		power { | ||||
| 			label = "power"; | ||||
| 			gpios = <&pio 12 GPIO_ACTIVE_LOW>; | ||||
| 			drive-strength = <MTK_DRIVE_16mA>; | ||||
| 			default-state = "on"; | ||||
| 		}; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &afe { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pcm_pins>; | ||||
| 	status = "disabled"; | ||||
| }; | ||||
|  | ||||
| &i2c0 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&i2c_pins>; | ||||
| 	status = "disabled"; | ||||
|  | ||||
| 	wm8960: wm8960@1a { | ||||
| 		compatible = "wlf,wm8960"; | ||||
| 		reg = <0x1a>; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &uart0 { | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  | ||||
| &uart2 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&uart2_pins>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  | ||||
| &watchdog { | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  | ||||
| ð { | ||||
|         status = "okay"; | ||||
|  | ||||
|         gmac0: mac@0 { | ||||
|                 compatible = "mediatek,eth-mac"; | ||||
|                 reg = <0>; | ||||
|                 phy-mode = "sgmii"; | ||||
|                 phy-handle = <&phy5>; | ||||
|         }; | ||||
|  | ||||
| 	gmac1: mac@1 { | ||||
| 		compatible = "mediatek,eth-mac"; | ||||
| 		reg = <1>; | ||||
| 		phy-mode = "gmii"; | ||||
| 		phy-handle = <&phy0>; | ||||
| 	}; | ||||
|  | ||||
|         mdio: mdio-bus { | ||||
|                 #address-cells = <1>; | ||||
|                 #size-cells = <0>; | ||||
| 		reset-gpios = <&pio 39 1>; | ||||
|  | ||||
| 		phy0: ethernet-phy@0 { | ||||
| 			compatible = "ethernet-phy-id03a2.9461"; | ||||
| 			reg = <0>; | ||||
| 			phy-mode = "gmii"; | ||||
| 			nvmem-cells = <&phy_calibration>; | ||||
| 			nvmem-cell-names = "phy-cal-data"; | ||||
| 		}; | ||||
|  | ||||
| 		phy5: phy@5 { | ||||
| 			compatible = "ethernet-phy-idc0ff.0421"; | ||||
| 			reg = <26>; | ||||
| 			phy-mode = "sgmii"; | ||||
| 			full-duplex; | ||||
| 			pause; | ||||
| 			airoha,polarity = <2>; | ||||
| 		}; | ||||
|         }; | ||||
| }; | ||||
|  | ||||
| &hnat { | ||||
| 	mtketh-wan = "eth0"; | ||||
| 	mtketh-lan = "eth1"; | ||||
| 	mtketh-max-gmac = <2>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  | ||||
| &spi0 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&spi0_flash_pins>; | ||||
| 	status = "okay"; | ||||
| 	spi_nand: spi_nand@0 { | ||||
| 		#address-cells = <1>; | ||||
| 		#size-cells = <1>; | ||||
| 		compatible = "spi-nand"; | ||||
| 		reg = <0>; | ||||
| 		spi-max-frequency = <52000000>; | ||||
| 		spi-tx-bus-width = <4>; | ||||
| 		spi-rx-bus-width = <4>; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &spi1 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&spic_pins>; | ||||
| 	status = "disabled"; | ||||
|  | ||||
| 	proslic_spi: proslic_spi@0 { | ||||
| 		compatible = "silabs,proslic_spi"; | ||||
| 		reg = <0>; | ||||
| 		spi-max-frequency = <10000000>; | ||||
| 		spi-cpha = <1>; | ||||
| 		spi-cpol = <1>; | ||||
| 		channel_count = <1>; | ||||
| 		debug_level = <4>;       /* 1 = TRC, 2 = DBG, 4 = ERR */ | ||||
| 		reset_gpio = <&pio 15 0>; | ||||
| 		ig,enable-spi = <1>;     /* 1: Enable, 0: Disable */ | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &wbsys { | ||||
| 	mediatek,mtd-eeprom = <&factory 0x0000>; | ||||
| 	status = "okay"; | ||||
| 	pinctrl-names = "dbdc"; | ||||
| 	pinctrl-0 = <&wf_dbdc_pins>; | ||||
| }; | ||||
|  | ||||
| &spi2 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&spi2_pins>; | ||||
| 	status = "okay"; | ||||
|  | ||||
| 	tpm_spi_tis@0 { | ||||
| 		compatible = "tcg,tpm_tis-spi"; | ||||
| 		reg = <0>; | ||||
| 		#address-cells = <1>; | ||||
| 		#size-cells = <1>; | ||||
| 		spi-max-frequency = <1000000>; | ||||
| 		spi-tx-buswidth = <4>; | ||||
| 		spi-rx-buswidth = <4>; | ||||
| 		reset-gpios = <&pio 31 1>; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &pio { | ||||
|  | ||||
| 	i2c_pins: i2c-pins-g0 { | ||||
|                 mux { | ||||
|                         function = "i2c"; | ||||
|                         groups = "i2c0_0"; | ||||
|                 }; | ||||
|         }; | ||||
|  | ||||
|         pcm_pins: pcm-pins-g0 { | ||||
|                 mux { | ||||
|                         function = "pcm"; | ||||
|                         groups = "pcm"; | ||||
|                 }; | ||||
|         }; | ||||
|  | ||||
|         pwm0_pin: pwm0-pin-g0 { | ||||
|                 mux { | ||||
|                         function = "pwm"; | ||||
|                         groups = "pwm0_0"; | ||||
|                 }; | ||||
|         }; | ||||
|  | ||||
|         pwm1_pin: pwm1-pin-g0 { | ||||
|                 mux { | ||||
|                         function = "pwm"; | ||||
|                         groups = "pwm1_0"; | ||||
|                 }; | ||||
|         }; | ||||
|  | ||||
|         pwm2_pin: pwm2-pin { | ||||
|                 mux { | ||||
|                         function = "pwm"; | ||||
|                         groups = "pwm2"; | ||||
|                 }; | ||||
|         }; | ||||
|  | ||||
| 	spi0_flash_pins: spi0-pins { | ||||
| 		mux { | ||||
| 			function = "spi"; | ||||
| 			groups = "spi0", "spi0_wp_hold"; | ||||
| 		}; | ||||
|  | ||||
| 		conf-pu { | ||||
| 			pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP"; | ||||
| 			drive-strength = <MTK_DRIVE_8mA>; | ||||
| 			bias-pull-up = <MTK_PUPD_SET_R1R0_11>; | ||||
| 		}; | ||||
|  | ||||
| 		conf-pd { | ||||
| 			pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO"; | ||||
| 			drive-strength = <MTK_DRIVE_8mA>; | ||||
| 			bias-pull-down = <MTK_PUPD_SET_R1R0_11>; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	spic_pins: spi1-pins { | ||||
| 		mux { | ||||
| 			function = "spi"; | ||||
| 			groups = "spi1_1"; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	spi2_pins: spi2-pins { | ||||
| 		mux { | ||||
| 			function = "spi"; | ||||
| 			groups = "spi2"; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	uart1_pins: uart1-pins-g1 { | ||||
|                 mux { | ||||
|                         function = "uart"; | ||||
|                         groups = "uart1_1"; | ||||
|                 }; | ||||
|         }; | ||||
|  | ||||
| 	uart2_pins: uart2-pins-g1 { | ||||
| 		mux { | ||||
|                         function = "uart"; | ||||
|                         groups = "uart2_1"; | ||||
|                 }; | ||||
| 		ble_loader { | ||||
| 			pins = "SPI1_MISO"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <MTK_DRIVE_8mA>; | ||||
| 			bias-pull-up = <MTK_PUPD_SET_R1R0_11>; | ||||
| 			output-high; | ||||
| 		}; | ||||
| 		ble_reset { | ||||
| 			pins = "SPI1_CS"; | ||||
| 			function = "gpio"; | ||||
| 			drive-strength = <MTK_DRIVE_8mA>; | ||||
| 			bias-pull-up = <MTK_PUPD_SET_R1R0_11>; | ||||
| 			output-high; | ||||
| 		}; | ||||
|         }; | ||||
|  | ||||
| 	wf_dbdc_pins: wf_dbdc-pins { | ||||
| 		mux { | ||||
| 			function = "eth"; | ||||
| 			groups = "wf0_mode1"; | ||||
| 		}; | ||||
| 		conf { | ||||
| 			pins = "WF_HB1", "WF_HB2", "WF_HB3", "WF_HB4", | ||||
| 			       "WF_HB0", "WF_HB0_B", "WF_HB5", "WF_HB6", | ||||
| 			       "WF_HB7", "WF_HB8", "WF_HB9", "WF_HB10", | ||||
| 			       "WF_TOP_CLK", "WF_TOP_DATA", "WF_XO_REQ", | ||||
| 			       "WF_CBA_RESETB", "WF_DIG_RESETB"; | ||||
| 			drive-strength = <MTK_DRIVE_4mA>; | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	pta_pins: pta-pins { | ||||
| 		mux { | ||||
| 			function = "pta"; | ||||
| 			groups = "pta_ext_0"; | ||||
| 		}; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| &xhci { | ||||
| 	mediatek,u3p-dis-msk = <0x0>; | ||||
| 	phys = <&u2port0 PHY_TYPE_USB2>, | ||||
| 	       <&u3port0 PHY_TYPE_USB3>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
| @@ -456,6 +456,190 @@ static ssize_t pppq_toggle_write(struct file *file, const char __user *ptr, | ||||
| 	return len; | ||||
| } | ||||
|  | ||||
| int pse_info_usage(struct seq_file *m, void *private) | ||||
| { | ||||
| 	pr_info("====================Advanced Settings====================\n"); | ||||
| 	pr_info("Usage: echo [port] [option] > /sys/kernel/debug/mtketh/pse_info\n"); | ||||
| 	pr_info("             0~15     0~2      Show PSE info\n"); | ||||
| 	pr_info("                       3       Show PSE legacy info\n"); | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int pse_info_open(struct inode *inode, struct file *file) | ||||
| { | ||||
| 	return single_open(file, pse_info_usage, inode->i_private); | ||||
| } | ||||
|  | ||||
| void pse_lgc_info_get_v2(struct mtk_eth *eth, int port, u32 dbg1, u32 dbg2) | ||||
| { | ||||
| 	struct mtk_pse_fs_lgc_info_v2 *info; | ||||
| 	u64 val; | ||||
|  | ||||
| 	info = (struct mtk_pse_fs_lgc_info_v2 *)&val; | ||||
|  | ||||
| 	val = mtk_r32(eth, dbg1); | ||||
| 	val |= ((u64)mtk_r32(eth, dbg2) << 32); | ||||
|  | ||||
| 	pr_info("PSE port%d legacy FS info (v2)\n", port); | ||||
| 	pr_info("=========================================\n"); | ||||
| 	pr_info("sport=%d, fport=%d, dr_idx=%d, ppe_crsn=%d\n", | ||||
| 		info->sport, info->fport, info->dr_idx, info->ppe_crsn); | ||||
| 	pr_info("l2_len=%d, l3_len=%d, l3_pidx=%d\n", | ||||
| 		info->l2_len, info->l3_len, info->l3_pidx); | ||||
| 	pr_info("is_l4f=%d, is_l4vld=%d, is_tack=%d\n", | ||||
| 		info->is_l4f, info->is_l4vld, info->is_tack); | ||||
| 	pr_info("is_ip4f=%d, is_ip4=%d, is_ip6=%d\n", | ||||
| 		info->is_ip4f, info->is_ip4, info->is_ip6); | ||||
| 	pr_info("=========================================\n"); | ||||
| } | ||||
|  | ||||
| void pse_lgc_info_get_v3(struct mtk_eth *eth, int port, u32 dbg1, u32 dbg2) | ||||
| { | ||||
| 	struct mtk_pse_fs_lgc_info_v3 *info; | ||||
| 	u64 val; | ||||
|  | ||||
| 	info = (struct mtk_pse_fs_lgc_info_v3 *)&val; | ||||
|  | ||||
| 	val = mtk_r32(eth, dbg1); | ||||
| 	val |= ((u64)mtk_r32(eth, dbg2) << 32); | ||||
|  | ||||
| 	pr_info("PSE port%d legacy FS info (v3)\n", port); | ||||
| 	pr_info("=========================================\n"); | ||||
| 	pr_info("sport=%d, fport=%d, ppe_crsn=%d\n", | ||||
| 		info->sport, info->fport, info->ppe_crsn); | ||||
| 	pr_info("l2_len=%d, l3_len=%d, l3_pidx=%d\n", | ||||
| 		info->l2_len, info->l3_len, info->l3_pidx); | ||||
| 	pr_info("is_l4f=%d, is_l4vld=%d, is_tack=%d\n", | ||||
| 		info->is_l4f, info->is_l4vld, info->is_tack); | ||||
| 	pr_info("is_ip4f=%d, is_ip4=%d, is_ip6=%d\n", | ||||
| 		info->is_ip4f, info->is_ip4, info->is_ip6); | ||||
| 	pr_info("is_snap=%d, vofst=%d, pl_end=%d\n", | ||||
| 		info->is_snap, info->vofst, info->pl_end); | ||||
| 	pr_info("is_err_pkt=%d, err_pkt_action=%d\n", | ||||
| 		info->is_err_pkt, info->err_pkt_action); | ||||
| 	pr_info("=========================================\n"); | ||||
| } | ||||
|  | ||||
| void pse_info_get_gdm(struct mtk_eth *eth, int port, int index, int options) | ||||
| { | ||||
| 	u32 dbg1[2] = {MTK_FE_GDM1_DBG1, MTK_FE_GDM2_DBG1}; | ||||
| 	u32 dbg2[2] = {MTK_FE_GDM1_DBG2, MTK_FE_GDM2_DBG2}; | ||||
|  | ||||
| 	if (index < 0 || index > 1) | ||||
| 		return; | ||||
|  | ||||
| 	if (options == 3) | ||||
| 		pse_lgc_info_get_v2(eth, port, dbg1[index], dbg2[index]); | ||||
| 	else | ||||
| 		pr_info("Not supported\n"); | ||||
| } | ||||
|  | ||||
| void pse_info_get_cdm(struct mtk_eth *eth, int port, int index, int options) | ||||
| { | ||||
| 	u32 dbg1[7] = {MTK_FE_CDM1_DBG1, MTK_FE_CDM2_DBG1, MTK_FE_CDM3_DBG1, | ||||
| 		       MTK_FE_CDM4_DBG1, MTK_FE_CDM5_DBG1, MTK_FE_CDM6_DBG1, | ||||
| 		       MTK_FE_CDM7_DBG1}; | ||||
| 	u32 dbg2[7] = {MTK_FE_CDM1_DBG2, MTK_FE_CDM2_DBG2, MTK_FE_CDM3_DBG2, | ||||
| 		       MTK_FE_CDM4_DBG2, MTK_FE_CDM5_DBG2, MTK_FE_CDM6_DBG2, | ||||
| 		       MTK_FE_CDM7_DBG2}; | ||||
|  | ||||
| 	if (index < 0 || index > 6) | ||||
| 		return; | ||||
|  | ||||
| 	if (options == 3) { | ||||
| #if defined(CONFIG_MEDIATEK_NETSYS_V3) | ||||
| 		if (index > 1 && index < 7) | ||||
| 			return pse_lgc_info_get_v3(eth, port, dbg1[index], dbg2[index]); | ||||
| #endif | ||||
| 		pse_lgc_info_get_v2(eth, port, dbg1[index], dbg2[index]); | ||||
| 	} else | ||||
| 		pr_info("Not supported\n"); | ||||
| } | ||||
|  | ||||
| int pse_info_get(struct mtk_eth *eth, int port, int options) | ||||
| { | ||||
| 	switch (port) { | ||||
| 	case PSE_GDM1_PORT: | ||||
| 		pse_info_get_gdm(eth, port, 0, options); | ||||
| 		break; | ||||
| 	case PSE_GDM2_PORT: | ||||
| 		pse_info_get_gdm(eth, port, 1, options); | ||||
| 		break; | ||||
| 	case PSE_ADMA_PORT: | ||||
| 		pse_info_get_cdm(eth, port, 0, options); | ||||
| 		break; | ||||
| 	case PSE_QDMA_TX_PORT: | ||||
| 	case PSE_QDMA_RX_PORT: | ||||
| 		pse_info_get_cdm(eth, port, 1, options); | ||||
| 		break; | ||||
| 	case PSE_WDMA0_PORT: | ||||
| 		pse_info_get_cdm(eth, port, 2, options); | ||||
| 		break; | ||||
| 	case PSE_WDMA1_PORT: | ||||
| 		pse_info_get_cdm(eth, port, 3, options); | ||||
| 		break; | ||||
| 	case PSE_WDMA2_PORT: | ||||
| 		pse_info_get_cdm(eth, port, 4, options); | ||||
| 		break; | ||||
| 	case PSE_TDMA_PORT: | ||||
| 		pse_info_get_cdm(eth, port, 5, options); | ||||
| 		break; | ||||
| 	case PSE_EIP197_PORT: | ||||
| 		pse_info_get_cdm(eth, port, 6, options); | ||||
| 		break; | ||||
| 		break; | ||||
| 	default: | ||||
| 		pr_info("Not supported\n"); | ||||
| 		break; | ||||
| 	} | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static ssize_t pse_info_write(struct file *file, const char __user *buffer, | ||||
| 			      size_t count, loff_t *off) | ||||
| { | ||||
| 	struct seq_file *m = file->private_data; | ||||
| 	struct mtk_eth *eth = m->private; | ||||
| 	long arg0 = 0, arg1 = 0; | ||||
| 	char buf[32]; | ||||
| 	char *p_buf; | ||||
| 	char *p_token = NULL; | ||||
| 	char *p_delimiter = " \t"; | ||||
| 	u32 len = count; | ||||
| 	int ret; | ||||
|  | ||||
| 	if (len >= sizeof(buf)) { | ||||
| 		pr_info("input handling fail!\n"); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	if (copy_from_user(buf, buffer, len)) | ||||
| 		return -EFAULT; | ||||
|  | ||||
| 	buf[len] = '\0'; | ||||
|  | ||||
| 	p_buf = buf; | ||||
| 	p_token = strsep(&p_buf, p_delimiter); | ||||
| 	if (!p_token) | ||||
| 		arg0 = 0; | ||||
| 	else | ||||
| 		ret = kstrtol(p_token, 10, &arg0); | ||||
|  | ||||
| 	if (arg0 >= 0 && arg0 <= 15) { | ||||
| 		p_token = strsep(&p_buf, p_delimiter); | ||||
| 		if (!p_token) | ||||
| 			arg1 = 0; | ||||
| 		else | ||||
| 			ret = kstrtol(p_token, 10, &arg1); | ||||
| 	} | ||||
|  | ||||
| 	pse_info_get(eth, arg0, arg1); | ||||
|  | ||||
| 	return len; | ||||
| } | ||||
|  | ||||
| static const struct file_operations fops_reg_w = { | ||||
| 	.owner = THIS_MODULE, | ||||
| 	.open = simple_open, | ||||
| @@ -479,6 +663,15 @@ static const struct file_operations fops_pppq_toggle = { | ||||
| 	.release = single_release, | ||||
| }; | ||||
|  | ||||
| static const struct file_operations fops_pse_info = { | ||||
| 	.owner = THIS_MODULE, | ||||
| 	.open = pse_info_open, | ||||
| 	.read = seq_read, | ||||
| 	.llseek = seq_lseek, | ||||
| 	.write = pse_info_write, | ||||
| 	.release = single_release, | ||||
| }; | ||||
|  | ||||
| static const struct file_operations fops_mt7530sw_reg_w = { | ||||
| 	.owner = THIS_MODULE, | ||||
| 	.open = simple_open, | ||||
| @@ -501,6 +694,8 @@ int mtketh_debugfs_init(struct mtk_eth *eth) | ||||
| 		ret = -ENOMEM; | ||||
| 	} | ||||
|  | ||||
| 	debugfs_create_file("pse_info", 0444, | ||||
| 			    eth_debug.root, eth, &fops_pse_info); | ||||
| 	debugfs_create_file("pppq_toggle", 0444, | ||||
| 			    eth_debug.root, eth, &fops_pppq_toggle); | ||||
| 	debugfs_create_file("phy_regs", S_IRUGO, | ||||
|   | ||||
| @@ -30,6 +30,24 @@ | ||||
| #define MTK_FE_GDM1_FSM			0x228 | ||||
| #define MTK_FE_GDM2_FSM			0x22C | ||||
| #define MTK_FE_GDM3_FSM			0x23C | ||||
| #define MTK_FE_CDM1_DBG1		0x200 | ||||
| #define MTK_FE_CDM1_DBG2		0x204 | ||||
| #define MTK_FE_CDM2_DBG1		0x208 | ||||
| #define MTK_FE_CDM2_DBG2		0x20C | ||||
| #define MTK_FE_CDM3_DBG1		0x230 | ||||
| #define MTK_FE_CDM3_DBG2		0x234 | ||||
| #define MTK_FE_CDM4_DBG1		0x290 | ||||
| #define MTK_FE_CDM4_DBG2		0x294 | ||||
| #define MTK_FE_CDM5_DBG1		0x310 | ||||
| #define MTK_FE_CDM5_DBG2		0x314 | ||||
| #define MTK_FE_CDM6_DBG1		0x320 | ||||
| #define MTK_FE_CDM6_DBG2		0x324 | ||||
| #define MTK_FE_CDM7_DBG1		0x330 | ||||
| #define MTK_FE_CDM7_DBG2		0x334 | ||||
| #define MTK_FE_GDM1_DBG1		0x210 | ||||
| #define MTK_FE_GDM1_DBG2		0x214 | ||||
| #define MTK_FE_GDM2_DBG1		0x218 | ||||
| #define MTK_FE_GDM2_DBG2		0x21C | ||||
| #define MTK_FE_PSE_FREE			0x240 | ||||
| #define MTK_FE_DROP_FQ			0x244 | ||||
| #define MTK_FE_DROP_FC			0x248 | ||||
| @@ -175,6 +193,46 @@ | ||||
| 	mtk_w32(eth, reg_val, MTK_LRO_CTRL_DW2_CFG(x));			\ | ||||
| } | ||||
|  | ||||
| struct mtk_pse_fs_lgc_info_v2 { | ||||
| 	u32 rev3 : 14; | ||||
| 	u32 ppe_crsn: 5; | ||||
| 	u32 sport : 4; | ||||
| 	u32 is_l4f: 1; | ||||
| 	u32 is_l4vld: 1; | ||||
| 	u32 is_tack : 1; | ||||
| 	u32 is_ip4f : 1; | ||||
| 	u32 is_ip4 : 1; | ||||
| 	u32 is_ip6 : 1; | ||||
| 	u32 dr_idx : 2; | ||||
| 	u32 rev2 : 4; | ||||
| 	u32 l3_pidx : 2; | ||||
| 	u32 rev : 2; | ||||
| 	u32 fport : 4; | ||||
| 	u32 l2_len : 7; | ||||
| 	u32 l3_len : 14; | ||||
| } __packed; | ||||
|  | ||||
| struct mtk_pse_fs_lgc_info_v3 { | ||||
| 	u32 is_snap : 1; | ||||
| 	u32 vofst : 3; | ||||
| 	u32 l3_pidx : 2; | ||||
| 	u32 pse_sport : 4; | ||||
| 	u32 fport : 4; | ||||
| 	u32 ppe_crsn: 5; | ||||
| 	u32 sport : 4; | ||||
| 	u32 is_l4f: 1; | ||||
| 	u32 is_l4vld: 1; | ||||
| 	u32 is_tack : 1; | ||||
| 	u32 is_ip4f : 1; | ||||
| 	u32 is_ip4 : 1; | ||||
| 	u32 is_ip6 : 1; | ||||
| 	u32 is_err_pkt : 1; | ||||
| 	u32 err_pkt_action : 2; | ||||
| 	u32 pl_end : 11; | ||||
| 	u32 l2_len : 7; | ||||
| 	u32 l3_len : 14; | ||||
| } __packed; | ||||
|  | ||||
| struct mtk_lro_alt_v1_info0 { | ||||
| 	u32 dtp : 16; | ||||
| 	u32 stp : 16; | ||||
|   | ||||
| @@ -1158,10 +1158,9 @@ static void mtk_mac_link_up(struct phylink_config *config, unsigned int mode, | ||||
| 		} | ||||
|  | ||||
| 		/* Configure duplex */ | ||||
| 		if (duplex == DUPLEX_FULL || | ||||
| 		    interface == PHY_INTERFACE_MODE_SGMII) | ||||
| 		mcr |= MAC_MCR_FORCE_DPX; | ||||
| 		else if (interface == PHY_INTERFACE_MODE_GMII) | ||||
| 		if (duplex == DUPLEX_HALF && | ||||
| 		    interface == PHY_INTERFACE_MODE_GMII) | ||||
| 			mcr |= MAC_MCR_PRMBL_LMT_EN; | ||||
|  | ||||
| 		/* Configure pause modes - | ||||
| @@ -3868,17 +3867,9 @@ static int mtk_start_dma(struct mtk_eth *eth) | ||||
|  | ||||
| 	if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) { | ||||
| 		val = mtk_r32(eth, reg_map->qdma.glo_cfg); | ||||
| 		if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V3)) { | ||||
| 		if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) || | ||||
| 		    MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V3)) { | ||||
| 			val &= ~(MTK_RESV_BUF_MASK | MTK_DMA_SIZE_MASK); | ||||
| 			mtk_w32(eth, | ||||
| 				val | MTK_TX_DMA_EN | MTK_RX_DMA_EN | | ||||
| 				MTK_DMA_SIZE_16DWORDS | MTK_TX_WB_DDONE | | ||||
| 				MTK_NDP_CO_PRO | MTK_MUTLI_CNT | | ||||
| 				MTK_RESV_BUF | MTK_WCOMP_EN | | ||||
| 				MTK_DMAD_WR_WDONE | MTK_CHK_DDONE_EN | | ||||
| 				MTK_RX_2B_OFFSET, reg_map->qdma.glo_cfg); | ||||
| 		} else if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) { | ||||
| 			val &= ~MTK_RESV_BUF_MASK; | ||||
| 			mtk_w32(eth, | ||||
| 				val | MTK_TX_DMA_EN | MTK_RX_DMA_EN | | ||||
| 				MTK_DMA_SIZE_32DWORDS | MTK_TX_WB_DDONE | | ||||
| @@ -4418,7 +4409,7 @@ static int mtk_hw_init(struct mtk_eth *eth, u32 type) | ||||
|  | ||||
| 		/* GDM and CDM Threshold */ | ||||
| 		mtk_w32(eth, 0x00000004, MTK_CDM2_THRES); | ||||
| 		mtk_w32(eth, 0x00000707, MTK_CDMW0_THRES); | ||||
| 		mtk_w32(eth, 0x08000707, MTK_CDMW0_THRES); | ||||
| 		mtk_w32(eth, 0x00000077, MTK_CDMW1_THRES); | ||||
|  | ||||
| 		/* Disable GDM1 RX CRC stripping */ | ||||
|   | ||||
| @@ -119,7 +119,7 @@ void cr_set_field(void __iomem *reg, u32 field, u32 val) | ||||
| } | ||||
|  | ||||
| /*boundary entry can't be used to accelerate data flow*/ | ||||
| static void exclude_boundary_entry(struct foe_entry *foe_table_cpu) | ||||
| void exclude_boundary_entry(struct foe_entry *foe_table_cpu) | ||||
| { | ||||
| 	int entry_base = 0; | ||||
| 	int bad_entry, i, j; | ||||
|   | ||||
| @@ -145,6 +145,7 @@ | ||||
| #define HASH_MODE (0x3 << 14) /* RW */ | ||||
| #define SCAN_MODE (0x3 << 16) /* RW */ | ||||
| #define XMODE (0x3 << 18) /* RW */ | ||||
| #define HASH_DBG (0x3 << 21) /* RW */ | ||||
| #define TICK_SEL (0x1 << 24) /* RW */ | ||||
| #define DSCP_TRFC_ECN_EN (0x1 << 25) /* RW */ | ||||
|  | ||||
| @@ -1146,6 +1147,7 @@ enum FoeIpAct { | ||||
| #define NR_WDMA1_PORT 9 | ||||
| #define NR_WDMA2_PORT 13 | ||||
| #define NR_GMAC3_PORT 15 | ||||
| #define NR_QDMA_TPORT 1 | ||||
| #define LAN_DEV_NAME hnat_priv->lan | ||||
| #define LAN2_DEV_NAME hnat_priv->lan2 | ||||
| #define IS_WAN(dev)                                                            \ | ||||
| @@ -1310,6 +1312,7 @@ int hnat_enable_hook(void); | ||||
| int hnat_disable_hook(void); | ||||
| void hnat_cache_ebl(int enable); | ||||
| void hnat_qos_shaper_ebl(u32 id, u32 enable); | ||||
| void exclude_boundary_entry(struct foe_entry *foe_table_cpu); | ||||
| void set_gmac_ppe_fwd(int gmac_no, int enable); | ||||
| int entry_detail(u32 ppe_id, int index); | ||||
| int entry_delete_by_mac(u8 *mac); | ||||
|   | ||||
| @@ -755,6 +755,7 @@ int cr_set_usage(int level) | ||||
| 	pr_info("              5     0~255      Set TCP keep alive interval\n"); | ||||
| 	pr_info("              6     0~255      Set UDP keep alive interval\n"); | ||||
| 	pr_info("              7     0~1        Set hnat counter update to nf_conntrack\n"); | ||||
| 	pr_info("              8     0~6        Set PPE hash debug mode\n"); | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
| @@ -866,6 +867,56 @@ int set_nf_update_toggle(int toggle) | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
|  | ||||
| int set_hash_dbg_mode(int dbg_mode) | ||||
| { | ||||
| 	static const char * const hash_dbg_mode[] = { | ||||
| 		"Normal", "Source port[15:0]", | ||||
| 		"IPv4 source IP[15:0]", "IPv6 source IP[15:0]", "Destination port[15:0]", | ||||
| 		"IPv4 destination IP[15:0]", "IPv6 destination IP[15:0]" }; | ||||
| 	unsigned int foe_table_sz, foe_acct_tb_sz, ppe_id, i; | ||||
|  | ||||
| 	if (dbg_mode < 0 || dbg_mode > 6) { | ||||
| 		pr_info("Invalid hash debug mode %d\n", dbg_mode); | ||||
| 		pr_info("[debug mode]\n"); | ||||
| 		for (i = 0; i <= 6; i++) | ||||
| 			pr_info("		%d	%s\n", i, hash_dbg_mode[i]); | ||||
| 		return -EINVAL; | ||||
| 	} | ||||
|  | ||||
| 	foe_table_sz = hnat_priv->foe_etry_num * sizeof(struct foe_entry); | ||||
| 	foe_acct_tb_sz = hnat_priv->foe_etry_num * sizeof(struct hnat_accounting); | ||||
|  | ||||
| 	/* send all traffic back to the DMA engine */ | ||||
| 	set_gmac_ppe_fwd(NR_GMAC1_PORT, 0); | ||||
| 	set_gmac_ppe_fwd(NR_GMAC2_PORT, 0); | ||||
| 	set_gmac_ppe_fwd(NR_GMAC3_PORT, 0); | ||||
|  | ||||
| 	for (ppe_id = 0; ppe_id < CFG_PPE_NUM; ppe_id++) { | ||||
| 		cr_set_field(hnat_priv->ppe_base[ppe_id] + PPE_TB_CFG, | ||||
| 			     HASH_DBG, dbg_mode); | ||||
|  | ||||
| 		memset(hnat_priv->foe_table_cpu[ppe_id], 0, foe_table_sz); | ||||
|  | ||||
| 		if (hnat_priv->data->version == MTK_HNAT_V1_1) | ||||
| 			exclude_boundary_entry(hnat_priv->foe_table_cpu[ppe_id]); | ||||
|  | ||||
| 		if (hnat_priv->data->per_flow_accounting) | ||||
| 			memset(hnat_priv->acct[ppe_id], 0, foe_acct_tb_sz); | ||||
| 	} | ||||
|  | ||||
| 	/* clear HWNAT cache */ | ||||
| 	hnat_cache_ebl(1); | ||||
|  | ||||
| 	set_gmac_ppe_fwd(NR_GMAC1_PORT, 1); | ||||
| 	set_gmac_ppe_fwd(NR_GMAC2_PORT, 1); | ||||
| 	set_gmac_ppe_fwd(NR_GMAC3_PORT, 1); | ||||
|  | ||||
| 	pr_info("Hash debug mode enabled, set to %s mode\n", hash_dbg_mode[dbg_mode]); | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static const debugfs_write_func hnat_set_func[] = { | ||||
| 	[0] = hnat_set_usage, | ||||
| 	[1] = hnat_cpu_reason, | ||||
| @@ -887,6 +938,7 @@ static const debugfs_write_func cr_set_func[] = { | ||||
| 	[2] = tcp_bind_lifetime, [3] = fin_bind_lifetime, | ||||
| 	[4] = udp_bind_lifetime, [5] = tcp_keep_alive, | ||||
| 	[6] = udp_keep_alive,    [7] = set_nf_update_toggle, | ||||
| 	[8] = set_hash_dbg_mode, | ||||
| }; | ||||
|  | ||||
| int read_mib(struct mtk_hnat *h, u32 ppe_id, | ||||
| @@ -1897,6 +1949,7 @@ ssize_t hnat_setting_write(struct file *file, const char __user *buffer, | ||||
| 	case 5: | ||||
| 	case 6: | ||||
| 	case 7: | ||||
| 	case 8: | ||||
| 		p_token = strsep(&p_buf, p_delimiter); | ||||
| 		if (!p_token) | ||||
| 			arg1 = 0; | ||||
|   | ||||
| @@ -1614,7 +1614,7 @@ static unsigned int skb_to_hnat_info(struct sk_buff *skb, | ||||
| 					     IS_LAN_GRP(dev)) || | ||||
| 					    (IS_PPPQ_MODE && | ||||
| 					     IS_PPPQ_PATH(dev, skb))) | ||||
| 						entry.ipv4_hnapt.tport_id = 1; | ||||
| 						entry.ipv4_hnapt.tport_id = NR_QDMA_TPORT; | ||||
| 					else | ||||
| 						entry.ipv4_hnapt.tport_id = 0; | ||||
| #else | ||||
| @@ -1813,7 +1813,8 @@ static unsigned int skb_to_hnat_info(struct sk_buff *skb, | ||||
| 				entry.ipv4_hnapt.iblk2.fqos = 0; | ||||
| 			else | ||||
| #if defined(CONFIG_MEDIATEK_NETSYS_V3) | ||||
| 				entry.ipv4_hnapt.tport_id = HQOS_FLAG(dev, skb, qid) ? 1 : 0; | ||||
| 				entry.ipv4_hnapt.tport_id = HQOS_FLAG(dev, skb, qid) ? | ||||
| 							    NR_QDMA_TPORT : 0; | ||||
| #else | ||||
| 				entry.ipv4_hnapt.iblk2.fqos = HQOS_FLAG(dev, skb, qid) ? 1 : 0; | ||||
| #endif | ||||
| @@ -1853,16 +1854,16 @@ static unsigned int skb_to_hnat_info(struct sk_buff *skb, | ||||
| 				case IPV4_MAP_E: | ||||
| 				case IPV4_MAP_T: | ||||
| 					entry.ipv4_mape.tport_id = | ||||
| 						HQOS_FLAG(dev, skb, qid) ? 1 : 0; | ||||
| 						HQOS_FLAG(dev, skb, qid) ? NR_QDMA_TPORT : 0; | ||||
| 					break; | ||||
| 				case IPV6_HNAPT: | ||||
| 				case IPV6_HNAT: | ||||
| 					entry.ipv6_hnapt.tport_id = | ||||
| 						HQOS_FLAG(dev, skb, qid) ? 1 : 0; | ||||
| 						HQOS_FLAG(dev, skb, qid) ? NR_QDMA_TPORT : 0; | ||||
| 					break; | ||||
| 				default: | ||||
| 					entry.ipv6_5t_route.tport_id = | ||||
| 						HQOS_FLAG(dev, skb, qid) ? 1 : 0; | ||||
| 						HQOS_FLAG(dev, skb, qid) ? NR_QDMA_TPORT : 0; | ||||
| 					break; | ||||
| 				} | ||||
| #else | ||||
| @@ -2001,7 +2002,7 @@ int mtk_sw_nat_hook_tx(struct sk_buff *skb, int gmac_no) | ||||
| 			entry.ipv4_hnapt.winfo.bssid = skb_hnat_bss_id(skb); | ||||
| 			entry.ipv4_hnapt.winfo.wcid = skb_hnat_wc_id(skb); | ||||
| #if defined(CONFIG_MEDIATEK_NETSYS_V3) | ||||
| 			entry.ipv4_hnapt.tport_id = IS_HQOS_DL_MODE ? 1 : 0; | ||||
| 			entry.ipv4_hnapt.tport_id = IS_HQOS_DL_MODE ? NR_QDMA_TPORT : 0; | ||||
| 			entry.ipv4_hnapt.iblk2.rxid = skb_hnat_rx_id(skb); | ||||
| 			entry.ipv4_hnapt.iblk2.winfoi = 1; | ||||
| 			entry.ipv4_hnapt.winfo_pao.usr_info = | ||||
| @@ -2059,7 +2060,7 @@ int mtk_sw_nat_hook_tx(struct sk_buff *skb, int gmac_no) | ||||
| 		entry.ipv6_hnapt.winfo_pao.is_sp = skb_hnat_is_sp(skb); | ||||
| 		entry.ipv6_hnapt.winfo_pao.hf = skb_hnat_hf(skb); | ||||
| 		entry.ipv6_hnapt.winfo_pao.amsdu = skb_hnat_amsdu(skb); | ||||
| 		entry.ipv6_hnapt.tport_id = IS_HQOS_DL_MODE ? 1 : 0; | ||||
| 		entry.ipv6_hnapt.tport_id = IS_HQOS_DL_MODE ? NR_QDMA_TPORT : 0; | ||||
| #endif | ||||
| 	} else { | ||||
| 		entry.ipv6_5t_route.iblk2.fqos = 0; | ||||
| @@ -2075,7 +2076,7 @@ int mtk_sw_nat_hook_tx(struct sk_buff *skb, int gmac_no) | ||||
| 			case IPV4_MAP_T: | ||||
| 				entry.ipv4_mape.winfo.bssid = skb_hnat_bss_id(skb); | ||||
| 				entry.ipv4_mape.winfo.wcid = skb_hnat_wc_id(skb); | ||||
| 				entry.ipv4_mape.tport_id = IS_HQOS_DL_MODE ? 1 : 0; | ||||
| 				entry.ipv4_mape.tport_id = IS_HQOS_DL_MODE ? NR_QDMA_TPORT : 0; | ||||
| 				entry.ipv4_mape.iblk2.rxid = skb_hnat_rx_id(skb); | ||||
| 				entry.ipv4_mape.iblk2.winfoi = 1; | ||||
| 				entry.ipv4_mape.winfo_pao.usr_info = | ||||
| @@ -2096,7 +2097,7 @@ int mtk_sw_nat_hook_tx(struct sk_buff *skb, int gmac_no) | ||||
| 			default: | ||||
| 				entry.ipv6_5t_route.winfo.bssid = skb_hnat_bss_id(skb); | ||||
| 				entry.ipv6_5t_route.winfo.wcid = skb_hnat_wc_id(skb); | ||||
| 				entry.ipv6_5t_route.tport_id = IS_HQOS_DL_MODE ? 1 : 0; | ||||
| 				entry.ipv6_5t_route.tport_id = IS_HQOS_DL_MODE ? NR_QDMA_TPORT : 0; | ||||
| 				entry.ipv6_5t_route.iblk2.rxid = skb_hnat_rx_id(skb); | ||||
| 				entry.ipv6_5t_route.iblk2.winfoi = 1; | ||||
| 				entry.ipv6_5t_route.winfo_pao.usr_info = | ||||
|   | ||||
| @@ -46,10 +46,20 @@ | ||||
|  | ||||
| #define MTK_EXT_PAGE_ACCESS			0x1f | ||||
| #define MTK_PHY_PAGE_STANDARD			0x0000 | ||||
| #define MTK_PHY_PAGE_EXTENDED_1			0x1 | ||||
| #define MTK_PHY_AUX_CTRL_AND_STATUS		(0x14) | ||||
| #define   MTK_PHY_ENABLE_DOWNSHIFT		BIT(4) | ||||
|  | ||||
| /* Registers on Token Ring debug nodes */ | ||||
| #define MTK_PHY_PAGE_EXTENDED_52B5		0x52b5 | ||||
|  | ||||
| /* ch_addr = 0x0, node_addr = 0xf, data_addr = 0x3c */ | ||||
| #define AUTO_NP_10XEN				BIT(6) | ||||
|  | ||||
| struct mtk_i2p5ge_phy_priv { | ||||
| 	bool fw_loaded; | ||||
| 	u16 tr_low; | ||||
| 	u16 tr_high; | ||||
| }; | ||||
|  | ||||
| enum { | ||||
| @@ -59,6 +69,67 @@ enum { | ||||
| 	PHY_AUX_SPD_2500, | ||||
| }; | ||||
|  | ||||
| static void tr_access(struct phy_device *phydev, bool read, u8 ch_addr, u8 node_addr, u8 data_addr) | ||||
| { | ||||
| 	u16 tr_cmd = BIT(15); /* bit 14 & 0 are reserved */ | ||||
|  | ||||
| 	if (read) | ||||
| 		tr_cmd |= BIT(13); | ||||
|  | ||||
| 	tr_cmd |= (((ch_addr & 0x3) << 11) | | ||||
| 		   ((node_addr & 0xf) << 7) | | ||||
| 		   ((data_addr & 0x3f) << 1)); | ||||
| 	dev_dbg(&phydev->mdio.dev, "tr_cmd: 0x%x\n", tr_cmd); | ||||
| 	__phy_write(phydev, 0x10, tr_cmd); | ||||
| } | ||||
|  | ||||
| static void __tr_read(struct phy_device *phydev, u8 ch_addr, u8 node_addr, u8 data_addr) | ||||
| { | ||||
| 	struct mtk_i2p5ge_phy_priv *priv = phydev->priv; | ||||
|  | ||||
| 	tr_access(phydev, true, ch_addr, node_addr, data_addr); | ||||
| 	priv->tr_low = __phy_read(phydev, 0x11); | ||||
| 	priv->tr_high = __phy_read(phydev, 0x12); | ||||
| 	dev_dbg(&phydev->mdio.dev, "tr_high read: 0x%x, tr_low read: 0x%x\n", | ||||
| 		priv->tr_high, priv->tr_low); | ||||
| } | ||||
|  | ||||
| static void tr_read(struct phy_device *phydev, u8 ch_addr, u8 node_addr, u8 data_addr) | ||||
| { | ||||
| 	phy_select_page(phydev, MTK_PHY_PAGE_EXTENDED_52B5); | ||||
| 	__tr_read(phydev, ch_addr, node_addr, data_addr); | ||||
| 	phy_restore_page(phydev, MTK_PHY_PAGE_STANDARD, 0); | ||||
| } | ||||
|  | ||||
| static void __tr_write(struct phy_device *phydev, u8 ch_addr, u8 node_addr, u8 data_addr, | ||||
| 		       u32 tr_data) | ||||
| { | ||||
| 	__phy_write(phydev, 0x11, tr_data & 0xffff); | ||||
| 	__phy_write(phydev, 0x12, tr_data >> 16); | ||||
| 	tr_access(phydev, false, ch_addr, node_addr, data_addr); | ||||
| } | ||||
|  | ||||
| static void tr_write(struct phy_device *phydev, u8 ch_addr, u8 node_addr, u8 data_addr, u32 tr_data) | ||||
| { | ||||
| 	phy_select_page(phydev, MTK_PHY_PAGE_EXTENDED_52B5); | ||||
| 	__tr_write(phydev, ch_addr, node_addr, data_addr, tr_data); | ||||
| 	phy_restore_page(phydev, MTK_PHY_PAGE_STANDARD, 0); | ||||
| } | ||||
|  | ||||
| static void tr_modify(struct phy_device *phydev, u8 ch_addr, u8 node_addr, u8 data_addr, | ||||
| 		     u32 mask, u32 set) | ||||
| { | ||||
| 	u32 tr_data; | ||||
| 	struct mtk_i2p5ge_phy_priv *priv = phydev->priv; | ||||
|  | ||||
| 	phy_select_page(phydev, MTK_PHY_PAGE_EXTENDED_52B5); | ||||
| 	__tr_read(phydev, ch_addr, node_addr, data_addr); | ||||
| 	tr_data = (priv->tr_high << 16) | priv->tr_low; | ||||
| 	tr_data = (tr_data & ~mask) | set; | ||||
| 	__tr_write(phydev, ch_addr, node_addr, data_addr, tr_data); | ||||
| 	phy_restore_page(phydev, MTK_PHY_PAGE_STANDARD, 0); | ||||
| } | ||||
|  | ||||
| static int mtk_2p5ge_phy_read_page(struct phy_device *phydev) | ||||
| { | ||||
| 	return __phy_read(phydev, MTK_EXT_PAGE_ACCESS); | ||||
| @@ -71,14 +142,14 @@ static int mtk_2p5ge_phy_write_page(struct phy_device *phydev, int page) | ||||
|  | ||||
| static int mt7988_2p5ge_phy_probe(struct phy_device *phydev) | ||||
| { | ||||
| 	struct mtk_i2p5ge_phy_priv *phy_priv; | ||||
| 	struct mtk_i2p5ge_phy_priv *priv; | ||||
|  | ||||
| 	phy_priv = devm_kzalloc(&phydev->mdio.dev, | ||||
| 	priv = devm_kzalloc(&phydev->mdio.dev, | ||||
| 				sizeof(struct mtk_i2p5ge_phy_priv), GFP_KERNEL); | ||||
| 	if (!phy_priv) | ||||
| 	if (!priv) | ||||
| 		return -ENOMEM; | ||||
|  | ||||
| 	phydev->priv = phy_priv; | ||||
| 	phydev->priv = priv; | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
| @@ -91,11 +162,11 @@ static int mt7988_2p5ge_phy_config_init(struct phy_device *phydev) | ||||
| 	struct device_node *np; | ||||
| 	void __iomem *pmb_addr; | ||||
| 	void __iomem *md32_en_cfg_base; | ||||
| 	struct mtk_i2p5ge_phy_priv *phy_priv = phydev->priv; | ||||
| 	struct mtk_i2p5ge_phy_priv *priv = phydev->priv; | ||||
| 	u16 reg; | ||||
| 	struct pinctrl *pinctrl; | ||||
|  | ||||
| 	if (!phy_priv->fw_loaded) { | ||||
| 	if (!priv->fw_loaded) { | ||||
| 		np = of_find_compatible_node(NULL, NULL, "mediatek,2p5gphy-fw"); | ||||
| 		if (!np) | ||||
| 			return -ENOENT; | ||||
| @@ -131,9 +202,11 @@ static int mt7988_2p5ge_phy_config_init(struct phy_device *phydev) | ||||
| 		writew(reg & ~MD32_EN, md32_en_cfg_base); | ||||
| 		writew(reg | MD32_EN, md32_en_cfg_base); | ||||
| 		phy_set_bits(phydev, 0, BIT(15)); | ||||
| 		/* We need a delay here to stabilize initialization of MCU */ | ||||
| 		usleep_range(7000, 8000); | ||||
| 		dev_info(dev, "Firmware loading/trigger ok.\n"); | ||||
|  | ||||
| 		phy_priv->fw_loaded = true; | ||||
| 		priv->fw_loaded = true; | ||||
| 	} | ||||
|  | ||||
| 	/* Setup LED */ | ||||
| @@ -154,10 +227,12 @@ static int mt7988_2p5ge_phy_config_init(struct phy_device *phydev) | ||||
| 		       MTK_PHY_LPI_SIG_EN_LO_THRESH100_MASK, 0); | ||||
|  | ||||
| 	/* Enable 16-bit next page exchange bit if 1000-BT isn't advertizing */ | ||||
| 	phy_select_page(phydev, MTK_PHY_PAGE_EXTENDED_52B5); | ||||
| 	__phy_write(phydev, 0x11, 0xfbfa); | ||||
| 	__phy_write(phydev, 0x12, 0xc3); | ||||
| 	__phy_write(phydev, 0x10, 0x87f8); | ||||
| 	tr_modify(phydev, 0x0, 0xf, 0x3c, AUTO_NP_10XEN, | ||||
| 		  FIELD_PREP(AUTO_NP_10XEN, 0x1)); | ||||
|  | ||||
| 	/* Enable downshift */ | ||||
| 	phy_select_page(phydev, MTK_PHY_PAGE_EXTENDED_1); | ||||
| 	__phy_set_bits(phydev, MTK_PHY_AUX_CTRL_AND_STATUS, MTK_PHY_ENABLE_DOWNSHIFT); | ||||
| 	phy_restore_page(phydev, MTK_PHY_PAGE_STANDARD, 0); | ||||
|  | ||||
| 	return 0; | ||||
| @@ -223,6 +298,7 @@ static int mt7988_2p5ge_phy_get_features(struct phy_device *phydev) | ||||
| static int mt7988_2p5ge_phy_read_status(struct phy_device *phydev) | ||||
| { | ||||
| 	int ret; | ||||
| 	u16 status; | ||||
|  | ||||
| 	ret = genphy_update_link(phydev); | ||||
| 	if (ret) | ||||
| @@ -247,6 +323,8 @@ static int mt7988_2p5ge_phy_read_status(struct phy_device *phydev) | ||||
| 		linkmode_zero(phydev->lp_advertising); | ||||
| 	} | ||||
|  | ||||
| 	status = phy_read(phydev, MII_BMSR); | ||||
| 	if (status & BMSR_LSTATUS) { | ||||
| 		ret = phy_read(phydev, PHY_AUX_CTRL_STATUS); | ||||
| 		if (ret < 0) | ||||
| 			return ret; | ||||
| @@ -272,6 +350,7 @@ static int mt7988_2p5ge_phy_read_status(struct phy_device *phydev) | ||||
| 		phydev->duplex = (ret & MTK_PHY_FDX_ENABLE) ? DUPLEX_FULL : DUPLEX_HALF; | ||||
| 		/* FIXME: The current firmware always enables rate adaptation mode. */ | ||||
| 		phydev->rate_matching = RATE_MATCH_PAUSE; | ||||
| 	} | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|   | ||||
| @@ -109,7 +109,6 @@ | ||||
| #define CK_TOP_F26M			48 | ||||
| #define CK_TOP_AUD_L			49 | ||||
| #define CK_TOP_A_TUNER			50 | ||||
| #define CLK_TOP_CONN_MCUSYS_SEL		50 | ||||
| #define CK_TOP_U2U3_REF			51 | ||||
| #define CK_TOP_U2U3_SYS			52 | ||||
| #define CK_TOP_U2U3_XHCI		53 | ||||
| @@ -122,7 +121,6 @@ | ||||
| #define CK_TOP_PWM_SEL			60 | ||||
| #define CK_TOP_I2C_SEL			61 | ||||
| #define CK_TOP_PEXTP_TL_SEL		62 | ||||
| #define CLK_TOP_AP2CNN_HOST_SEL		62 | ||||
| #define CK_TOP_EMMC_250M_SEL		63 | ||||
| #define CK_TOP_EMMC_416M_SEL		64 | ||||
| #define CK_TOP_F_26M_ADC_SEL		65 | ||||
|   | ||||
| @@ -1,5 +1,27 @@ | ||||
| KERNEL_LOADADDR := 0x48080000 | ||||
|  | ||||
| define Build/fit-sign | ||||
| 	$(TOPDIR)/scripts/mkits-secure_boot.sh \ | ||||
| 		-D $(DEVICE_NAME) \ | ||||
| 		-o $@.its \ | ||||
| 		-k $@ \ | ||||
| 		$(if $(word 2,$(1)),-d $(word 2,$(1))) -C $(word 1,$(1)) \ | ||||
| 		-a $(KERNEL_LOADADDR) \ | ||||
| 		-e $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \ | ||||
| 		-c $(if $(DEVICE_DTS_CONFIG),$(DEVICE_DTS_CONFIG),"config-1") \ | ||||
| 		-A $(LINUX_KARCH) \ | ||||
| 		-v $(LINUX_VERSION) \ | ||||
| 		$(if $(FIT_KEY_NAME),-S $(FIT_KEY_NAME)) \ | ||||
| 		$(if $(FW_AR_VER),-r $(FW_AR_VER)) \ | ||||
| 		$(if $(CONFIG_TARGET_ROOTFS_SQUASHFS),-R $(ROOTFS/squashfs/$(DEVICE_NAME))) | ||||
| 		PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage \ | ||||
| 		-f $@.its \ | ||||
| 		$(if $(FIT_KEY_DIR),-k $(FIT_KEY_DIR)) \ | ||||
| 		-r \ | ||||
| 		$@.new | ||||
| 	@mv $@.new $@ | ||||
| endef | ||||
|  | ||||
| define Device/mt7981-spim-nor-rfb | ||||
|   DEVICE_VENDOR := MediaTek | ||||
|   DEVICE_MODEL := mt7981-spim-nor-rfb | ||||
| @@ -235,3 +257,28 @@ define Device/mt7981-fpga-sd | ||||
|   IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata | ||||
| endef | ||||
| TARGET_DEVICES += mt7981-fpga-sd | ||||
|  | ||||
| define Device/senao_jeap6500 | ||||
|   DEVICE_VENDOR := SENAO | ||||
|   DEVICE_MODEL := JEAP6500 | ||||
|   DEVICE_DTS := mt7981-senao-jeap6500 | ||||
|   DEVICE_DTS_DIR := $(DTS_DIR)/mediatek | ||||
|   SUPPORTED_DEVICES := senao,jeap6500 | ||||
|   DEVICE_PACKAGES := kmod-mt7981-firmware kmod-mt7915e uboot-envtools -procd-ujail | ||||
|   UBINIZE_OPTS := -E 5 | ||||
|   BLOCKSIZE := 128k | ||||
|   PAGESIZE := 2048 | ||||
|   IMAGE_SIZE := 65536k | ||||
|   KERNEL_IN_UBI := 1 | ||||
|   FIT_KEY_DIR := $(DTS_DIR)/mediatek/keys/senao_jeap6500 | ||||
|   FIT_KEY_NAME := fit_key | ||||
|   IMAGES += factory.bin | ||||
|   IMAGE/factory.bin := append-ubi | check-size $$$$(IMAGE_SIZE) | ||||
|   IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata | ||||
|   KERNEL = kernel-bin | lzma | \ | ||||
| 	fit-sign lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb | ||||
|   KERNEL_INITRAMFS = kernel-bin | lzma | \ | ||||
| 	fit-sign lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb with-initrd | ||||
| endef | ||||
| TARGET_DEVICES += senao_jeap6500 | ||||
| DEFAULT_DEVICE_VARS += FIT_KEY_DIR FIT_KEY_NAME | ||||
|   | ||||
| @@ -23,6 +23,9 @@ mediatek_setup_interfaces() | ||||
| 	*2500wan-p5*) | ||||
| 		ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" wan | ||||
| 		;; | ||||
| 	senao,jeap6500) | ||||
| 		ucidef_set_interfaces_lan_wan "eth1" "eth0" | ||||
| 		;; | ||||
| 	sonicfi,rap630w-211g) | ||||
| 		ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" eth1 | ||||
| 		;;		 | ||||
| @@ -47,6 +50,18 @@ mediatek_setup_macs() | ||||
| 		lan_mac_offset="0x24" | ||||
| 		wan_mac_offset="0x2a" | ||||
| 		;; | ||||
| 	senao,jeap6500) | ||||
| 		hw_mac_addr=$(mtd_get_mac_ascii u-boot-env ethaddr) | ||||
| 		lan_mac="$hw_mac_addr" | ||||
| 		wan_mac=$(macaddr_add $hw_mac_addr 1) | ||||
| 		if [ -n "$lan_mac" ]; then | ||||
| 			ucidef_set_interface_macaddr "lan" "$lan_mac" | ||||
| 		fi | ||||
| 		if [ -n "$wan_mac" ]; then | ||||
| 			ucidef_set_interface_macaddr "wan" "$wan_mac" | ||||
| 			ucidef_set_label_macaddr "$wan_mac" | ||||
| 		fi | ||||
| 		;; | ||||
| 	sonicfi,rap630w-211g) | ||||
| 		sysfs="/sys/class/ieee80211" | ||||
| 		env_dev=$(get_boot_param "boot_param.env_part") | ||||
|   | ||||
| @@ -0,0 +1,18 @@ | ||||
| [ "$ACTION" == "add" ] || exit 0 | ||||
|  | ||||
| PHYNBR=${DEVPATH##*/phy} | ||||
|  | ||||
| [ -n $PHYNBR ] || exit 0 | ||||
|  | ||||
| . /lib/functions.sh | ||||
| . /lib/functions/system.sh | ||||
|  | ||||
| board=$(board_name) | ||||
|  | ||||
| case "$board" in | ||||
| 	senao,jeap6500) | ||||
| 		hw_mac_addr=$(mtd_get_mac_ascii u-boot-env ethaddr) | ||||
| 		[ "$PHYNBR" = "0" ] && macaddr_add $hw_mac_addr 2 > /sys${DEVPATH}/macaddress | ||||
| 		[ "$PHYNBR" = "1" ] && macaddr_add $hw_mac_addr 3 > /sys${DEVPATH}/macaddress | ||||
| 	;; | ||||
| esac | ||||
| @@ -16,7 +16,8 @@ board=$(board_name) | ||||
|  | ||||
| case "$board" in | ||||
| edgecore,eap111|\ | ||||
| edgecore,eap112) | ||||
| edgecore,eap112|\ | ||||
| senao,jeap6500) | ||||
| 	ubootenv_add_uci_config "/dev/mtd2" "0x0" "0x20000" "0x20000" | ||||
| 	;; | ||||
| sonicfi,rap630w-211g) | ||||
|   | ||||
| @@ -0,0 +1,487 @@ | ||||
| # Copyright (C) 2014 OpenWrt.org | ||||
| # | ||||
|  | ||||
| . /lib/functions.sh | ||||
|  | ||||
| # 'kernel' partition or UBI volume on NAND contains the kernel | ||||
| CI_KERNPART="${CI_KERNPART:-kernel}" | ||||
|  | ||||
| # 'ubi' partition on NAND contains UBI | ||||
| # There are also CI_KERN_UBIPART and CI_ROOT_UBIPART if kernel | ||||
| # and rootfs are on separated UBIs. | ||||
| CI_UBIPART="${CI_UBIPART:-ubi}" | ||||
|  | ||||
| # 'rootfs' UBI volume on NAND contains the rootfs | ||||
| CI_ROOTPART="${CI_ROOTPART:-rootfs}" | ||||
|  | ||||
| # update uboot-env if upgrade suceeded | ||||
| CI_FWSETENV= | ||||
|  | ||||
| ubi_mknod() { | ||||
| 	local dir="$1" | ||||
| 	local dev="/dev/$(basename $dir)" | ||||
|  | ||||
| 	[ -e "$dev" ] && return 0 | ||||
|  | ||||
| 	local devid="$(cat $dir/dev)" | ||||
| 	local major="${devid%%:*}" | ||||
| 	local minor="${devid##*:}" | ||||
| 	mknod "$dev" c $major $minor | ||||
| } | ||||
|  | ||||
| nand_find_volume() { | ||||
| 	local ubidevdir ubivoldir | ||||
| 	ubidevdir="/sys/class/ubi/" | ||||
| 	[ ! -d "$ubidevdir" ] && return 1 | ||||
| 	for ubivoldir in $ubidevdir/${1}_*; do | ||||
| 		[ ! -d "$ubivoldir" ] && continue | ||||
| 		if [ "$( cat $ubivoldir/name )" = "$2" ]; then | ||||
| 			basename $ubivoldir | ||||
| 			ubi_mknod "$ubivoldir" | ||||
| 			return 0 | ||||
| 		fi | ||||
| 	done | ||||
| } | ||||
|  | ||||
| nand_find_ubi() { | ||||
| 	local ubidevdir ubidev mtdnum cmtdnum | ||||
| 	mtdnum="$( find_mtd_index $1 )" | ||||
| 	[ ! "$mtdnum" ] && return 1 | ||||
| 	for ubidevdir in /sys/class/ubi/ubi*; do | ||||
| 		[ ! -e "$ubidevdir/mtd_num" ] && continue | ||||
| 		cmtdnum="$( cat $ubidevdir/mtd_num )" | ||||
| 		if [ "$mtdnum" = "$cmtdnum" ]; then | ||||
| 			ubidev=$( basename $ubidevdir ) | ||||
| 			ubi_mknod "$ubidevdir" | ||||
| 			echo $ubidev | ||||
| 			return 0 | ||||
| 		fi | ||||
| 	done | ||||
| } | ||||
|  | ||||
| nand_get_magic_long() { | ||||
| 	(${3}cat "$1" | dd bs=4 "skip=${2:-0}" count=1 | hexdump -v -n 4 -e '1/1 "%02x"') 2> /dev/null | ||||
| } | ||||
|  | ||||
| get_magic_long_tar() { | ||||
| 	(tar xO${3}f "$1" "$2" | dd bs=4 count=1 | hexdump -v -n 4 -e '1/1 "%02x"') 2> /dev/null | ||||
| } | ||||
|  | ||||
| identify() { | ||||
| 	identify_magic_long $(nand_get_magic_long "$@") | ||||
| } | ||||
|  | ||||
| identify_tar() { | ||||
| 	identify_magic_long $(get_magic_long_tar "$@") | ||||
| } | ||||
|  | ||||
| identify_if_gzip() { | ||||
| 	if [ "$(identify "$1")" = gzip ]; then echo -n z; fi | ||||
| } | ||||
|  | ||||
| nand_restore_config() { | ||||
| 	local ubidev=$( nand_find_ubi "${CI_ROOT_UBIPART:-$CI_UBIPART}" ) | ||||
| 	local ubivol="$( nand_find_volume $ubidev rootfs_data )" | ||||
| 	if [ ! "$ubivol" ]; then | ||||
| 		ubivol="$( nand_find_volume $ubidev "$CI_ROOTPART" )" | ||||
| 		if [ ! "$ubivol" ]; then | ||||
| 			echo "cannot find ubifs data volume" | ||||
| 			return 1 | ||||
| 		fi | ||||
| 	fi | ||||
| 	mkdir /tmp/new_root | ||||
| 	if ! mount -t ubifs /dev/$ubivol /tmp/new_root; then | ||||
| 		echo "cannot mount ubifs volume $ubivol" | ||||
| 		rmdir /tmp/new_root | ||||
| 		return 1 | ||||
| 	fi | ||||
| 	if mv "$1" "/tmp/new_root/$BACKUP_FILE"; then | ||||
| 		if umount /tmp/new_root; then | ||||
| 			echo "configuration saved" | ||||
| 			rmdir /tmp/new_root | ||||
| 			return 0 | ||||
| 		fi | ||||
| 	else | ||||
| 		umount /tmp/new_root | ||||
| 	fi | ||||
| 	echo "could not save configuration to ubifs volume $ubivol" | ||||
| 	rmdir /tmp/new_root | ||||
| 	return 1 | ||||
| } | ||||
|  | ||||
| nand_remove_ubiblock() { | ||||
| 	local ubivol="$1" | ||||
|  | ||||
| 	local ubiblk="ubiblock${ubivol:3}" | ||||
| 	if [ -e "/dev/$ubiblk" ]; then | ||||
| 		umount "/dev/$ubiblk" && echo "unmounted /dev/$ubiblk" || : | ||||
| 		if ! ubiblock -r "/dev/$ubivol"; then | ||||
| 			echo "cannot remove $ubiblk" | ||||
| 			return 1 | ||||
| 		fi | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| nand_attach_ubi() { | ||||
| 	local ubipart="$1" | ||||
| 	local has_env="${2:-0}" | ||||
|  | ||||
| 	local mtdnum="$( find_mtd_index "$ubipart" )" | ||||
| 	if [ ! "$mtdnum" ]; then | ||||
| 		>&2 echo "cannot find ubi mtd partition $ubipart" | ||||
| 		return 1 | ||||
| 	fi | ||||
|  | ||||
| 	local ubidev="$( nand_find_ubi "$ubipart" )" | ||||
| 	if [ ! "$ubidev" ]; then | ||||
| 		>&2 ubiattach -m "$mtdnum" | ||||
| 		ubidev="$( nand_find_ubi "$ubipart" )" | ||||
|  | ||||
| 		if [ ! "$ubidev" ]; then | ||||
| 			>&2 ubiformat /dev/mtd$mtdnum -y | ||||
| 			>&2 ubiattach -m "$mtdnum" | ||||
| 			ubidev="$( nand_find_ubi "$ubipart" )" | ||||
|  | ||||
| 			if [ ! "$ubidev" ]; then | ||||
| 				>&2 echo "cannot attach ubi mtd partition $ubipart" | ||||
| 				return 1 | ||||
| 			fi | ||||
|  | ||||
| 			if [ "$has_env" -gt 0 ]; then | ||||
| 				>&2 ubimkvol /dev/$ubidev -n 0 -N ubootenv -s 1MiB | ||||
| 				>&2 ubimkvol /dev/$ubidev -n 1 -N ubootenv2 -s 1MiB | ||||
| 			fi | ||||
| 		fi | ||||
| 	fi | ||||
|  | ||||
| 	echo "$ubidev" | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| nand_detach_ubi() { | ||||
| 	local ubipart="$1" | ||||
|  | ||||
| 	local mtdnum="$( find_mtd_index "$ubipart" )" | ||||
| 	if [ ! "$mtdnum" ]; then | ||||
| 		echo "cannot find ubi mtd partition $ubipart" | ||||
| 		return 1 | ||||
| 	fi | ||||
|  | ||||
| 	local ubidev="$( nand_find_ubi "$ubipart" )" | ||||
| 	if [ "$ubidev" ]; then | ||||
| 		for ubivol in $(find /dev -name "${ubidev}_*" -maxdepth 1 | sort); do | ||||
| 			ubivol="${ubivol:5}" | ||||
| 			nand_remove_ubiblock "$ubivol" || : | ||||
| 			umount "/dev/$ubivol" && echo "unmounted /dev/$ubivol" || : | ||||
| 		done | ||||
| 		if ! ubidetach -m "$mtdnum"; then | ||||
| 			echo "cannot detach ubi mtd partition $ubipart" | ||||
| 			return 1 | ||||
| 		fi | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| nand_upgrade_prepare_ubi() { | ||||
| 	local rootfs_length="$1" | ||||
| 	local rootfs_type="$2" | ||||
| 	local rootfs_data_max="$(fw_printenv -n rootfs_data_max 2> /dev/null)" | ||||
| 	[ -n "$rootfs_data_max" ] && rootfs_data_max=$((rootfs_data_max)) | ||||
|  | ||||
| 	local kernel_length="$3" | ||||
| 	local has_env="${4:-0}" | ||||
| 	local kern_ubidev | ||||
| 	local root_ubidev | ||||
|  | ||||
| 	[ -n "$rootfs_length" -o -n "$kernel_length" ] || return 1 | ||||
|  | ||||
| 	if [ -n "$CI_KERN_UBIPART" -a -n "$CI_ROOT_UBIPART" ]; then | ||||
| 		kern_ubidev="$( nand_attach_ubi "$CI_KERN_UBIPART" "$has_env" )" | ||||
| 		[ -n "$kern_ubidev" ] || return 1 | ||||
| 		root_ubidev="$( nand_attach_ubi "$CI_ROOT_UBIPART" )" | ||||
| 		[ -n "$root_ubidev" ] || return 1 | ||||
| 	else | ||||
| 		kern_ubidev="$( nand_attach_ubi "$CI_UBIPART" "$has_env" )" | ||||
| 		[ -n "$kern_ubidev" ] || return 1 | ||||
| 		root_ubidev="$kern_ubidev" | ||||
| 	fi | ||||
|  | ||||
| 	local kern_ubivol="$( nand_find_volume $kern_ubidev "$CI_KERNPART" )" | ||||
| 	local root_ubivol="$( nand_find_volume $root_ubidev "$CI_ROOTPART" )" | ||||
| 	local data_ubivol="$( nand_find_volume $root_ubidev rootfs_data )" | ||||
| 	[ "$root_ubivol" = "$kern_ubivol" ] && root_ubivol= | ||||
|  | ||||
| 	# remove ubiblocks | ||||
| 	[ "$kern_ubivol" ] && { nand_remove_ubiblock $kern_ubivol || return 1; } | ||||
| 	[ "$root_ubivol" ] && { nand_remove_ubiblock $root_ubivol || return 1; } | ||||
| 	[ "$data_ubivol" ] && { nand_remove_ubiblock $data_ubivol || return 1; } | ||||
|  | ||||
| 	# kill volumes | ||||
| 	[ "$kern_ubivol" ] && ubirmvol /dev/$kern_ubidev -N "$CI_KERNPART" || : | ||||
| 	[ "$root_ubivol" ] && ubirmvol /dev/$root_ubidev -N "$CI_ROOTPART" || : | ||||
| 	[ "$data_ubivol" ] && ubirmvol /dev/$root_ubidev -N rootfs_data || : | ||||
|  | ||||
| 	# create kernel vol | ||||
| 	if [ -n "$kernel_length" ]; then | ||||
| 		if ! ubimkvol /dev/$kern_ubidev -N "$CI_KERNPART" -s $kernel_length; then | ||||
| 			echo "cannot create kernel volume" | ||||
| 			return 1; | ||||
| 		fi | ||||
| 	fi | ||||
|  | ||||
| 	# create rootfs vol | ||||
| 	if [ -n "$rootfs_length" ]; then | ||||
| 		local rootfs_size_param | ||||
| 		if [ "$rootfs_type" = "ubifs" ]; then | ||||
| 			rootfs_size_param="-m" | ||||
| 		else | ||||
| 			rootfs_size_param="-s $rootfs_length" | ||||
| 		fi | ||||
| 		if ! ubimkvol /dev/$root_ubidev -N "$CI_ROOTPART" $rootfs_size_param; then | ||||
| 			echo "cannot create rootfs volume" | ||||
| 			return 1; | ||||
| 		fi | ||||
| 	fi | ||||
|  | ||||
| 	# create rootfs_data vol for non-ubifs rootfs | ||||
| 	if [ "$rootfs_type" != "ubifs" ]; then | ||||
| 		local rootfs_data_size_param="-m" | ||||
| 		if [ -n "$rootfs_data_max" ]; then | ||||
| 			rootfs_data_size_param="-s $rootfs_data_max" | ||||
| 		fi | ||||
| 		if ! ubimkvol /dev/$root_ubidev -N rootfs_data $rootfs_data_size_param; then | ||||
| 			if ! ubimkvol /dev/$root_ubidev -N rootfs_data -m; then | ||||
| 				echo "cannot initialize rootfs_data volume" | ||||
| 				return 1 | ||||
| 			fi | ||||
| 		fi | ||||
| 	fi | ||||
|  | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| # Write the UBI image to MTD ubi partition | ||||
| nand_upgrade_ubinized() { | ||||
| 	local ubi_file="$1" | ||||
| 	local gz="$2" | ||||
|  | ||||
| 	local ubi_length=$( (${gz}cat "$ubi_file" | wc -c) 2> /dev/null) | ||||
|  | ||||
| 	nand_detach_ubi "$CI_UBIPART" || return 1 | ||||
|  | ||||
| 	local mtdnum="$( find_mtd_index "$CI_UBIPART" )" | ||||
| 	${gz}cat "$ubi_file" | ubiformat "/dev/mtd$mtdnum" -S "$ubi_length" -y -f - && ubiattach -m "$mtdnum" | ||||
| } | ||||
|  | ||||
| # Write the UBIFS image to UBI rootfs volume | ||||
| nand_upgrade_ubifs() { | ||||
| 	local ubifs_file="$1" | ||||
| 	local gz="$2" | ||||
|  | ||||
| 	local ubifs_length=$( (${gz}cat "$ubifs_file" | wc -c) 2> /dev/null) | ||||
|  | ||||
| 	nand_upgrade_prepare_ubi "$ubifs_length" "ubifs" "" "" || return 1 | ||||
|  | ||||
| 	local ubidev="$( nand_find_ubi "$CI_UBIPART" )" | ||||
| 	local root_ubivol="$(nand_find_volume $ubidev "$CI_ROOTPART")" | ||||
| 	${gz}cat "$ubifs_file" | ubiupdatevol /dev/$root_ubivol -s "$ubifs_length" - | ||||
| } | ||||
|  | ||||
| # Write the FIT image to UBI kernel volume | ||||
| nand_upgrade_fit() { | ||||
| 	local fit_file="$1" | ||||
| 	local gz="$2" | ||||
|  | ||||
| 	local fit_length=$( (${gz}cat "$fit_file" | wc -c) 2> /dev/null) | ||||
|  | ||||
| 	nand_upgrade_prepare_ubi "" "" "$fit_length" "1" || return 1 | ||||
|  | ||||
| 	local fit_ubidev="$(nand_find_ubi "$CI_UBIPART")" | ||||
| 	local fit_ubivol="$(nand_find_volume $fit_ubidev "$CI_KERNPART")" | ||||
| 	${gz}cat "$fit_file" | ubiupdatevol /dev/$fit_ubivol -s "$fit_length" - | ||||
| } | ||||
|  | ||||
| # Write images in the TAR file to MTD partitions and/or UBI volumes as required | ||||
| nand_upgrade_tar() { | ||||
| 	local tar_file="$1" | ||||
| 	local gz="$2" | ||||
| 	local jffs2_markers="${CI_JFFS2_CLEAN_MARKERS:-0}" | ||||
|  | ||||
| 	# WARNING: This fails if tar contains more than one 'sysupgrade-*' directory. | ||||
| 	local board_dir="$(tar t${gz}f "$tar_file" | grep -m 1 '^sysupgrade-.*/$')" | ||||
| 	board_dir="${board_dir%/}" | ||||
|  | ||||
| 	local kernel_mtd kernel_length | ||||
| 	if [ "$CI_KERNPART" != "none" ]; then | ||||
| 		kernel_mtd="$(find_mtd_index "$CI_KERNPART")" | ||||
| 		kernel_length=$( (tar xO${gz}f "$tar_file" "$board_dir/kernel" | wc -c) 2> /dev/null) | ||||
| 		[ "$kernel_length" = 0 ] && kernel_length= | ||||
| 	fi | ||||
| 	local rootfs_length=$( (tar xO${gz}f "$tar_file" "$board_dir/root" | wc -c) 2> /dev/null) | ||||
| 	[ "$rootfs_length" = 0 ] && rootfs_length= | ||||
| 	local rootfs_type | ||||
| 	[ "$rootfs_length" ] && rootfs_type="$(identify_tar "$tar_file" "$board_dir/root" "$gz")" | ||||
|  | ||||
| 	local ubi_kernel_length | ||||
| 	if [ "$kernel_length" ]; then | ||||
| 		if [ "$kernel_mtd" ]; then | ||||
| 			# On some devices, the raw kernel and ubi partitions overlap. | ||||
| 			# These devices brick if the kernel partition is erased. | ||||
| 			# Hence only invalidate kernel for now. | ||||
| 			dd if=/dev/zero bs=4096 count=1 2> /dev/null | \ | ||||
| 				mtd write - "$CI_KERNPART" | ||||
| 		else | ||||
| 			ubi_kernel_length="$kernel_length" | ||||
| 		fi | ||||
| 	fi | ||||
|  | ||||
| 	local has_env=0 | ||||
| 	nand_upgrade_prepare_ubi "$rootfs_length" "$rootfs_type" "$ubi_kernel_length" "$has_env" || return 1 | ||||
|  | ||||
| 	if [ "$rootfs_length" ]; then | ||||
| 		local ubidev="$( nand_find_ubi "${CI_ROOT_UBIPART:-$CI_UBIPART}" )" | ||||
| 		local root_ubivol="$( nand_find_volume $ubidev "$CI_ROOTPART" )" | ||||
| 		tar xO${gz}f "$tar_file" "$board_dir/root" | \ | ||||
| 			ubiupdatevol /dev/$root_ubivol -s "$rootfs_length" - | ||||
| 	fi | ||||
| 	if [ "$kernel_length" ]; then | ||||
| 		if [ "$kernel_mtd" ]; then | ||||
| 			if [ "$jffs2_markers" = 1 ]; then | ||||
| 				flash_erase -j "/dev/mtd${kernel_mtd}" 0 0 | ||||
| 				tar xO${gz}f "$tar_file" "$board_dir/kernel" | \ | ||||
| 					nandwrite "/dev/mtd${kernel_mtd}" - | ||||
| 			else | ||||
| 				tar xO${gz}f "$tar_file" "$board_dir/kernel" | \ | ||||
| 					mtd write - "$CI_KERNPART" | ||||
| 			fi | ||||
| 		else | ||||
| 			local ubidev="$( nand_find_ubi "${CI_KERN_UBIPART:-$CI_UBIPART}" )" | ||||
| 			local kern_ubivol="$( nand_find_volume $ubidev "$CI_KERNPART" )" | ||||
| 			tar xO${gz}f "$tar_file" "$board_dir/kernel" | \ | ||||
| 				ubiupdatevol /dev/$kern_ubivol -s "$kernel_length" - | ||||
| 		fi | ||||
| 	fi | ||||
|  | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| nand_verify_if_gzip_file() { | ||||
| 	local file="$1" | ||||
| 	local gz="$2" | ||||
|  | ||||
| 	if [ "$gz" = z ]; then | ||||
| 		echo "verifying compressed sysupgrade file integrity" | ||||
| 		if ! gzip -t "$file"; then | ||||
| 			echo "corrupted compressed sysupgrade file" | ||||
| 			return 1 | ||||
| 		fi | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| nand_verify_tar_file() { | ||||
| 	local file="$1" | ||||
| 	local gz="$2" | ||||
|  | ||||
| 	echo "verifying sysupgrade tar file integrity" | ||||
| 	if ! tar xO${gz}f "$file" > /dev/null; then | ||||
| 		echo "corrupted sysupgrade tar file" | ||||
| 		return 1 | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| nand_do_flash_file() { | ||||
| 	local file="$1" | ||||
|  | ||||
| 	local gz="$(identify_if_gzip "$file")" | ||||
| 	local file_type="$(identify "$file" "" "$gz")" | ||||
|  | ||||
| 	[ ! "$(find_mtd_index "$CI_UBIPART")" ] && CI_UBIPART=rootfs | ||||
|  | ||||
| 	case "$file_type" in | ||||
| 		"fit") | ||||
| 			nand_verify_if_gzip_file "$file" "$gz" || return 1 | ||||
| 			nand_upgrade_fit "$file" "$gz" | ||||
| 			;; | ||||
| 		"ubi") | ||||
| 			nand_verify_if_gzip_file "$file" "$gz" || return 1 | ||||
| 			nand_upgrade_ubinized "$file" "$gz" | ||||
| 			;; | ||||
| 		"ubifs") | ||||
| 			nand_verify_if_gzip_file "$file" "$gz" || return 1 | ||||
| 			nand_upgrade_ubifs "$file" "$gz" | ||||
| 			;; | ||||
| 		*) | ||||
| 			nand_verify_tar_file "$file" "$gz" || return 1 | ||||
| 			nand_upgrade_tar "$file" "$gz" | ||||
| 			;; | ||||
| 	esac | ||||
| } | ||||
|  | ||||
| nand_do_restore_config() { | ||||
| 	local conf_tar="/tmp/sysupgrade.tgz" | ||||
| 	[ ! -f "$conf_tar" ] || nand_restore_config "$conf_tar" | ||||
| } | ||||
|  | ||||
| # Recognize type of passed file and start the upgrade process | ||||
| nand_do_upgrade() { | ||||
| 	local file="$1" | ||||
|  | ||||
| 	sync | ||||
| 	nand_do_flash_file "$file" && nand_do_upgrade_success | ||||
| 	nand_do_upgrade_failed | ||||
| } | ||||
|  | ||||
| nand_do_upgrade_success() { | ||||
| 	platform_post_upgrade_success | ||||
| 	if nand_do_restore_config && sync; then | ||||
| 		[ -n "$CI_FWSETENV" ] && fw_setenv $CI_FWSETENV | ||||
| 		echo "sysupgrade successful" | ||||
| 		umount -a | ||||
| 		reboot -f | ||||
| 	fi | ||||
| 	nand_do_upgrade_failed | ||||
| } | ||||
|  | ||||
| nand_do_upgrade_failed() { | ||||
| 	sync | ||||
| 	echo "sysupgrade failed" | ||||
| 	# Should we reboot or bring up some failsafe mode instead? | ||||
| 	umount -a | ||||
| 	reboot -f | ||||
| } | ||||
|  | ||||
| # Check if passed file is a valid one for NAND sysupgrade. | ||||
| # Currently it accepts 4 types of files: | ||||
| # 1) UBI: a ubinized image containing required UBI volumes. | ||||
| # 2) UBIFS: a UBIFS rootfs volume image. | ||||
| # 3) FIT: a FIT image containing kernel and rootfs. | ||||
| # 4) TAR: an archive that includes directory "sysupgrade-${BOARD_NAME}" containing | ||||
| #         a non-empty "CONTROL" file and required partition and/or volume images. | ||||
| # | ||||
| # You usually want to call this function in platform_check_image. | ||||
| # | ||||
| # $(1): board name, used in case of passing TAR file | ||||
| # $(2): file to be checked | ||||
| nand_do_platform_check() { | ||||
| 	local board_name="$1" | ||||
| 	local file="$2" | ||||
|  | ||||
| 	local gz="$(identify_if_gzip "$file")" | ||||
| 	local file_type="$(identify "$file" "" "$gz")" | ||||
| 	local control_length=$( (tar xO${gz}f "$file" "sysupgrade-${board_name//,/_}/CONTROL" | wc -c) 2> /dev/null) | ||||
|  | ||||
| 	if [ "$control_length" = 0 ]; then | ||||
| 		control_length=$( (tar xO${gz}f "$file" "sysupgrade-${board_name//_/,}/CONTROL" | wc -c) 2> /dev/null) | ||||
| 	fi | ||||
|  | ||||
| 	if [ "$control_length" != 0 ]; then | ||||
| 		nand_verify_tar_file "$file" "$gz" || return 1 | ||||
| 	else | ||||
| 		nand_verify_if_gzip_file "$file" "$gz" || return 1 | ||||
| 		if [ "$file_type" != "fit" -a "$file_type" != "ubi" -a "$file_type" != "ubifs" ]; then | ||||
| 			echo "invalid sysupgrade file" | ||||
| 			return 1 | ||||
| 		fi | ||||
| 	fi | ||||
|  | ||||
| 	return 0 | ||||
| } | ||||
| @@ -1,4 +1,17 @@ | ||||
| REQUIRE_IMAGE_METADATA=1 | ||||
|  | ||||
| senao_swap_active_fw() { | ||||
| 	echo "Doing swap active_fw" > /dev/console | ||||
| 	tmp_active_fw=$(fw_printenv -n active_fw) | ||||
| 	if [ $tmp_active_fw == "0" ]; then | ||||
| 		fw_setenv active_fw 1 | ||||
| 		fw_setenv mtdparts nmbm0:1024k\(bl2\),512k\(u-boot-env\),2048k\(factory\),2048k\(fip\),112640k\(ubi_1\),112640k\(ubi\),384k\(cert\),640k\(userconfig\),384k\(crashdump\) | ||||
| 	else | ||||
| 		fw_setenv active_fw 0 | ||||
| 		fw_setenv mtdparts nmbm0:1024k\(bl2\),512k\(u-boot-env\),2048k\(factory\),2048k\(fip\),112640k\(ubi\),112640k\(ubi_1\),384k\(cert\),640k\(userconfig\),384k\(crashdump\) | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| platform_do_upgrade() { | ||||
| 	local board=$(board_name) | ||||
|  | ||||
| @@ -33,6 +46,10 @@ platform_do_upgrade() { | ||||
| 		fi | ||||
| 		nand_do_upgrade "$1" | ||||
| 		;; | ||||
| 	senao,jeap6500) | ||||
| 		CI_UBIPART="ubi_1" | ||||
| 		nand_do_upgrade "$1" | ||||
| 		;; | ||||
| 	sonicfi,rap630w-211g) | ||||
| 		chmod +x /tmp/root/lib/upgrade/sonicfi/nand_sonicfi_rap630w_211g.sh | ||||
| 		/tmp/root/lib/upgrade/sonicfi/nand_sonicfi_rap630w_211g.sh "$1" | ||||
| @@ -48,7 +65,8 @@ platform_check_image() { | ||||
|  | ||||
| 	case "$board" in | ||||
| 	edgecore,eap111|\ | ||||
| 	edgecore,eap112) | ||||
| 	edgecore,eap112|\ | ||||
| 	senao,jeap6500) | ||||
| 		nand_do_platform_check "$board" "$1" | ||||
| 		return $? | ||||
| 		;; | ||||
| @@ -63,3 +81,13 @@ platform_check_image() { | ||||
|  | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| platform_post_upgrade_success() { | ||||
| 	local board=$(board_name) | ||||
|  | ||||
| 	case "$board" in | ||||
| 		senao,jeap6500) | ||||
| 			senao_swap_active_fw | ||||
| 		;; | ||||
| 	esac | ||||
| } | ||||
|   | ||||
| @@ -1,51 +0,0 @@ | ||||
| RAMFS_COPY_BIN='mkfs.f2fs blkid blockdev fw_printenv fw_setenv' | ||||
| RAMFS_COPY_DATA="/etc/fw_env.config /var/lock/fw_printenv.lock" | ||||
|  | ||||
| platform_do_upgrade() { | ||||
| 	local board=$(board_name) | ||||
|  | ||||
| 	case "$board" in | ||||
| 	*snand*) | ||||
| 		ubi_do_upgrade "$1" | ||||
| 		;; | ||||
| 	*emmc*) | ||||
| 		mtk_mmc_do_upgrade "$1" | ||||
| 		;; | ||||
| 	*) | ||||
| 		default_do_upgrade "$1" | ||||
| 		;; | ||||
| 	esac | ||||
| } | ||||
|  | ||||
| PART_NAME=firmware | ||||
|  | ||||
| platform_check_image() { | ||||
| 	local board=$(board_name) | ||||
| 	local magic="$(get_magic_long "$1")" | ||||
|  | ||||
| 	[ "$#" -gt 1 ] && return 1 | ||||
|  | ||||
| 	case "$board" in | ||||
| 	*snand* |\ | ||||
| 	*emmc*) | ||||
| 		# tar magic `ustar` | ||||
| 		magic="$(dd if="$1" bs=1 skip=257 count=5 2>/dev/null)" | ||||
|  | ||||
| 		[ "$magic" != "ustar" ] && { | ||||
| 			echo "Invalid image type." | ||||
| 			return 1 | ||||
| 		} | ||||
|  | ||||
| 		return 0 | ||||
| 		;; | ||||
| 	*) | ||||
| 		[ "$magic" != "d00dfeed" ] && { | ||||
| 			echo "Invalid image type." | ||||
| 			return 1 | ||||
| 		} | ||||
| 		return 0 | ||||
| 		;; | ||||
| 	esac | ||||
|  | ||||
| 	return 0 | ||||
| } | ||||
| @@ -523,3 +523,8 @@ CONFIG_NF_FLOW_TABLE=m | ||||
| CONFIG_NF_FLOW_TABLE_NETLINK=m | ||||
| CONFIG_INIT_STACK_NONE=y | ||||
| # CONFIG_INIT_STACK_ALL is not set | ||||
| CONFIG_AIROHA_AN8801_PHY=y | ||||
| CONFIG_SECURITYFS=y | ||||
| CONFIG_TCG_TIS_CORE=y | ||||
| CONFIG_TCG_TIS_SPI=y | ||||
| CONFIG_TCG_TPM=y | ||||
|   | ||||
| @@ -0,0 +1,397 @@ | ||||
| --- a/drivers/crypto/inside-secure/safexcel.c | ||||
| +++ b/drivers/crypto/inside-secure/safexcel.c | ||||
| @@ -1222,6 +1222,7 @@ static struct safexcel_alg_template *saf | ||||
|  	&safexcel_alg_cfb_aes, | ||||
|  	&safexcel_alg_ofb_aes, | ||||
|  	&safexcel_alg_ctr_aes, | ||||
| +	&safexcel_alg_basic_ctr_aes, | ||||
|  	&safexcel_alg_md5, | ||||
|  	&safexcel_alg_sha1, | ||||
|  	&safexcel_alg_sha224, | ||||
| --- a/drivers/crypto/inside-secure/safexcel.h | ||||
| +++ b/drivers/crypto/inside-secure/safexcel.h | ||||
| @@ -930,6 +930,7 @@ extern struct safexcel_alg_template safe | ||||
|  extern struct safexcel_alg_template safexcel_alg_cfb_aes; | ||||
|  extern struct safexcel_alg_template safexcel_alg_ofb_aes; | ||||
|  extern struct safexcel_alg_template safexcel_alg_ctr_aes; | ||||
| +extern struct safexcel_alg_template safexcel_alg_basic_ctr_aes; | ||||
|  extern struct safexcel_alg_template safexcel_alg_md5; | ||||
|  extern struct safexcel_alg_template safexcel_alg_sha1; | ||||
|  extern struct safexcel_alg_template safexcel_alg_sha224; | ||||
| --- a/drivers/crypto/inside-secure/safexcel_cipher.c | ||||
| +++ b/drivers/crypto/inside-secure/safexcel_cipher.c | ||||
| @@ -51,6 +51,8 @@ struct safexcel_cipher_ctx { | ||||
|  	u8 xcm;  /* 0=authenc, 1=GCM, 2 reserved for CCM */ | ||||
|  	u8 aadskip; | ||||
|  	u8 blocksz; | ||||
| +	bool basic_ctr; | ||||
| +	u32 processed; | ||||
|  	u32 ivmask; | ||||
|  	u32 ctrinit; | ||||
|   | ||||
| @@ -79,7 +81,7 @@ struct safexcel_cipher_req { | ||||
|  static int safexcel_skcipher_iv(struct safexcel_cipher_ctx *ctx, u8 *iv, | ||||
|  				struct safexcel_command_desc *cdesc) | ||||
|  { | ||||
| -	if (ctx->mode == CONTEXT_CONTROL_CRYPTO_MODE_CTR_LOAD) { | ||||
| +	if (ctx->mode == CONTEXT_CONTROL_CRYPTO_MODE_CTR_LOAD && !(ctx->basic_ctr)) { | ||||
|  		cdesc->control_data.options |= EIP197_OPTION_4_TOKEN_IV_CMD; | ||||
|  		/* 32 bit nonce */ | ||||
|  		cdesc->control_data.token[0] = ctx->nonce; | ||||
| @@ -513,8 +515,8 @@ static int safexcel_aead_setkey(struct c | ||||
|  	memcpy(ctx->opad, &ostate.state, ctx->state_sz); | ||||
|   | ||||
|  	memzero_explicit(&keys, sizeof(keys)); | ||||
| -	return 0; | ||||
|   | ||||
| +	return 0; | ||||
|  badkey: | ||||
|  	memzero_explicit(&keys, sizeof(keys)); | ||||
|  	return err; | ||||
| @@ -622,6 +624,43 @@ static int safexcel_context_control(stru | ||||
|  	return 0; | ||||
|  } | ||||
|   | ||||
| +static int safexcel_queue_req(struct crypto_async_request *base, | ||||
| +			struct safexcel_cipher_req *sreq, | ||||
| +			enum safexcel_cipher_direction dir) | ||||
| +{ | ||||
| +	struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(base->tfm); | ||||
| +	struct safexcel_crypto_priv *priv = ctx->priv; | ||||
| +	int ret, ring; | ||||
| + | ||||
| +	sreq->needs_inv = false; | ||||
| +	sreq->direction = dir; | ||||
| + | ||||
| +	if (ctx->base.ctxr) { | ||||
| +		if (priv->flags & EIP197_TRC_CACHE && ctx->base.needs_inv) { | ||||
| +			sreq->needs_inv = true; | ||||
| +			ctx->base.needs_inv = false; | ||||
| +		} | ||||
| +	} else { | ||||
| +		ctx->base.ring = safexcel_select_ring(priv); | ||||
| +		ctx->base.ctxr = dma_pool_zalloc(priv->context_pool, | ||||
| +						 EIP197_GFP_FLAGS(*base), | ||||
| +						 &ctx->base.ctxr_dma); | ||||
| +		if (!ctx->base.ctxr) | ||||
| +			return -ENOMEM; | ||||
| +	} | ||||
| + | ||||
| +	ring = ctx->base.ring; | ||||
| + | ||||
| +	spin_lock_bh(&priv->ring[ring].queue_lock); | ||||
| +	ret = crypto_enqueue_request(&priv->ring[ring].queue, base); | ||||
| +	spin_unlock_bh(&priv->ring[ring].queue_lock); | ||||
| + | ||||
| +	queue_work(priv->ring[ring].workqueue, | ||||
| +		   &priv->ring[ring].work_data.work); | ||||
| + | ||||
| +	return ret; | ||||
| +} | ||||
| + | ||||
|  static int safexcel_handle_req_result(struct safexcel_crypto_priv *priv, int ring, | ||||
|  				      struct crypto_async_request *async, | ||||
|  				      struct scatterlist *src, | ||||
| @@ -635,6 +674,7 @@ static int safexcel_handle_req_result(st | ||||
|  	struct safexcel_cipher_ctx *ctx = crypto_skcipher_ctx(skcipher); | ||||
|  	struct safexcel_result_desc *rdesc; | ||||
|  	int ndesc = 0; | ||||
| +	int flag; | ||||
|   | ||||
|  	*ret = 0; | ||||
|   | ||||
| @@ -677,7 +717,13 @@ static int safexcel_handle_req_result(st | ||||
|  				    crypto_skcipher_ivsize(skcipher))); | ||||
|  	} | ||||
|   | ||||
| -	*should_complete = true; | ||||
| +	if (ctx->basic_ctr && ctx->processed != cryptlen) { | ||||
| +		*should_complete = false; | ||||
| +		flag = safexcel_queue_req(async, sreq, sreq->direction); | ||||
| +	} else { | ||||
| +		*should_complete = true; | ||||
| +		ctx->processed = 0; | ||||
| +	} | ||||
|   | ||||
|  	return ndesc; | ||||
|  } | ||||
| @@ -700,12 +746,16 @@ static int safexcel_send_req(struct cryp | ||||
|  	unsigned int totlen; | ||||
|  	unsigned int totlen_src = cryptlen + assoclen; | ||||
|  	unsigned int totlen_dst = totlen_src; | ||||
| +	unsigned int pass_byte = 0; | ||||
| +	unsigned int pass; | ||||
|  	struct safexcel_token *atoken; | ||||
|  	int n_cdesc = 0, n_rdesc = 0; | ||||
|  	int queued, i, ret = 0; | ||||
|  	bool first = true; | ||||
|   | ||||
| -	sreq->nr_src = sg_nents_for_len(src, totlen_src); | ||||
| +	pass_byte = ctx->processed; | ||||
| +	pass = pass_byte; | ||||
| +	sreq->nr_src = sg_nents_for_len(src, totlen_src + pass_byte); | ||||
|   | ||||
|  	if (ctx->aead) { | ||||
|  		/* | ||||
| @@ -736,7 +786,7 @@ static int safexcel_send_req(struct cryp | ||||
|  				    crypto_skcipher_ivsize(skcipher))); | ||||
|  	} | ||||
|   | ||||
| -	sreq->nr_dst = sg_nents_for_len(dst, totlen_dst); | ||||
| +	sreq->nr_dst = sg_nents_for_len(dst, totlen_dst + pass_byte); | ||||
|   | ||||
|  	/* | ||||
|  	 * Remember actual input length, source buffer length may be | ||||
| @@ -798,14 +848,23 @@ static int safexcel_send_req(struct cryp | ||||
|  	for_each_sg(src, sg, sreq->nr_src, i) { | ||||
|  		int len = sg_dma_len(sg); | ||||
|   | ||||
| +		if (pass) { | ||||
| +			if (pass >= len) { | ||||
| +				pass -= len; | ||||
| +				continue; | ||||
| +			} | ||||
| +			len = len - pass; | ||||
| +		} | ||||
|  		/* Do not overflow the request */ | ||||
|  		if (queued < len) | ||||
|  			len = queued; | ||||
|   | ||||
|  		cdesc = safexcel_add_cdesc(priv, ring, !n_cdesc, | ||||
| -					   !(queued - len), | ||||
| -					   sg_dma_address(sg), len, totlen, | ||||
| -					   ctx->base.ctxr_dma, &atoken); | ||||
| +					!(queued - len), | ||||
| +					sg_dma_address(sg) + pass, len, | ||||
| +					totlen, ctx->base.ctxr_dma, &atoken); | ||||
| +		pass = 0; | ||||
| + | ||||
|  		if (IS_ERR(cdesc)) { | ||||
|  			/* No space left in the command descriptor ring */ | ||||
|  			ret = PTR_ERR(cdesc); | ||||
| @@ -820,6 +879,7 @@ static int safexcel_send_req(struct cryp | ||||
|  		if (!queued) | ||||
|  			break; | ||||
|  	} | ||||
| + | ||||
|  skip_cdesc: | ||||
|  	/* Add context control words and token to first command descriptor */ | ||||
|  	safexcel_context_control(ctx, base, sreq, first_cdesc); | ||||
| @@ -831,11 +891,20 @@ skip_cdesc: | ||||
|  		safexcel_skcipher_token(ctx, iv, first_cdesc, atoken, | ||||
|  					cryptlen); | ||||
|   | ||||
| +	pass = pass_byte; | ||||
|  	/* result descriptors */ | ||||
|  	for_each_sg(dst, sg, sreq->nr_dst, i) { | ||||
|  		bool last = (i == sreq->nr_dst - 1); | ||||
|  		u32 len = sg_dma_len(sg); | ||||
|   | ||||
| +		if (pass) { | ||||
| +			if (pass >= len) { | ||||
| +				pass -= len; | ||||
| +				continue; | ||||
| +			} | ||||
| +			len -= pass; | ||||
| +		} | ||||
| + | ||||
|  		/* only allow the part of the buffer we know we need */ | ||||
|  		if (len > totlen_dst) | ||||
|  			len = totlen_dst; | ||||
| @@ -855,9 +924,11 @@ skip_cdesc: | ||||
|  						   len - assoclen); | ||||
|  			assoclen = 0; | ||||
|  		} else { | ||||
| + | ||||
|  			rdesc = safexcel_add_rdesc(priv, ring, first, last, | ||||
| -						   sg_dma_address(sg), | ||||
| -						   len); | ||||
| +					   sg_dma_address(sg) + pass, | ||||
| +					   len); | ||||
| +			pass = 0; | ||||
|  		} | ||||
|  		if (IS_ERR(rdesc)) { | ||||
|  			/* No space left in the result descriptor ring */ | ||||
| @@ -892,6 +963,7 @@ skip_cdesc: | ||||
|   | ||||
|  	*commands = n_cdesc; | ||||
|  	*results = n_rdesc; | ||||
| + | ||||
|  	return 0; | ||||
|   | ||||
|  rdesc_rollback: | ||||
| @@ -1033,6 +1105,26 @@ static int safexcel_cipher_send_inv(stru | ||||
|  	return 0; | ||||
|  } | ||||
|   | ||||
| +static void accum_iv(u8 *iv, u32 blocks) | ||||
| +{ | ||||
| +	u32 *counter; | ||||
| +	int i; | ||||
| + | ||||
| +	for (i = 12; i >= 0; i = i - 4) { | ||||
| +		counter = (u32 *) &iv[i]; | ||||
| +		if (be32_to_cpu(*counter) + blocks >= be32_to_cpu(*counter)) { | ||||
| +			*counter = cpu_to_be32(be32_to_cpu(*counter) + blocks); | ||||
| +			blocks = 0; | ||||
| +		} else { | ||||
| +			*counter = cpu_to_be32(be32_to_cpu(*counter) + blocks); | ||||
| +			blocks = 1; | ||||
| +		} | ||||
| + | ||||
| +		if (blocks == 0) | ||||
| +			break; | ||||
| +	} | ||||
| +} | ||||
| + | ||||
|  static int safexcel_skcipher_send(struct crypto_async_request *async, int ring, | ||||
|  				  int *commands, int *results) | ||||
|  { | ||||
| @@ -1049,6 +1141,8 @@ static int safexcel_skcipher_send(struct | ||||
|  	} else { | ||||
|  		struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req); | ||||
|  		u8 input_iv[AES_BLOCK_SIZE]; | ||||
| +		u32 blocks; | ||||
| +		u32 *counter; | ||||
|   | ||||
|  		/* | ||||
|  		 * Save input IV in case of CBC decrypt mode | ||||
| @@ -1056,9 +1150,29 @@ static int safexcel_skcipher_send(struct | ||||
|  		 */ | ||||
|  		memcpy(input_iv, req->iv, crypto_skcipher_ivsize(skcipher)); | ||||
|   | ||||
| -		ret = safexcel_send_req(async, ring, sreq, req->src, | ||||
| +		if (ctx->mode == CONTEXT_CONTROL_CRYPTO_MODE_CTR_LOAD && ctx->basic_ctr) { | ||||
| +			counter = (u32 *) &req->iv[12]; | ||||
| +			blocks = (req->cryptlen / ctx->blocksz) - (ctx->processed / 16); | ||||
| +			if (req->cryptlen % ctx->blocksz) | ||||
| +				blocks++; | ||||
| +			if (be32_to_cpu(*counter) + blocks < be32_to_cpu(*counter)) { | ||||
| +				blocks = 0 - be32_to_cpu(*counter); | ||||
| +				ret = safexcel_send_req(async, ring, sreq, req->src, | ||||
| +						req->dst, min(blocks * AES_BLOCK_SIZE, req->cryptlen), 0, 0, input_iv, | ||||
| +						commands, results); | ||||
| +				ctx->processed += min(blocks * AES_BLOCK_SIZE, req->cryptlen); | ||||
| +			} else { | ||||
| +				ret = safexcel_send_req(async, ring, sreq, req->src, | ||||
| +						req->dst, req->cryptlen - ctx->processed, | ||||
| +						0, 0, input_iv, commands, results); | ||||
| +				ctx->processed = req->cryptlen; | ||||
| +			} | ||||
| +			accum_iv(req->iv, blocks); | ||||
| +		} else { | ||||
| +			ret = safexcel_send_req(async, ring, sreq, req->src, | ||||
|  					req->dst, req->cryptlen, 0, 0, input_iv, | ||||
|  					commands, results); | ||||
| +		} | ||||
|  	} | ||||
|   | ||||
|  	sreq->rdescs = *results; | ||||
| @@ -1152,43 +1266,6 @@ static int safexcel_aead_exit_inv(struct | ||||
|  	return safexcel_cipher_exit_inv(tfm, &req->base, sreq, &result); | ||||
|  } | ||||
|   | ||||
| -static int safexcel_queue_req(struct crypto_async_request *base, | ||||
| -			struct safexcel_cipher_req *sreq, | ||||
| -			enum safexcel_cipher_direction dir) | ||||
| -{ | ||||
| -	struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(base->tfm); | ||||
| -	struct safexcel_crypto_priv *priv = ctx->priv; | ||||
| -	int ret, ring; | ||||
| - | ||||
| -	sreq->needs_inv = false; | ||||
| -	sreq->direction = dir; | ||||
| - | ||||
| -	if (ctx->base.ctxr) { | ||||
| -		if (priv->flags & EIP197_TRC_CACHE && ctx->base.needs_inv) { | ||||
| -			sreq->needs_inv = true; | ||||
| -			ctx->base.needs_inv = false; | ||||
| -		} | ||||
| -	} else { | ||||
| -		ctx->base.ring = safexcel_select_ring(priv); | ||||
| -		ctx->base.ctxr = dma_pool_zalloc(priv->context_pool, | ||||
| -						 EIP197_GFP_FLAGS(*base), | ||||
| -						 &ctx->base.ctxr_dma); | ||||
| -		if (!ctx->base.ctxr) | ||||
| -			return -ENOMEM; | ||||
| -	} | ||||
| - | ||||
| -	ring = ctx->base.ring; | ||||
| - | ||||
| -	spin_lock_bh(&priv->ring[ring].queue_lock); | ||||
| -	ret = crypto_enqueue_request(&priv->ring[ring].queue, base); | ||||
| -	spin_unlock_bh(&priv->ring[ring].queue_lock); | ||||
| - | ||||
| -	queue_work(priv->ring[ring].workqueue, | ||||
| -		   &priv->ring[ring].work_data.work); | ||||
| - | ||||
| -	return ret; | ||||
| -} | ||||
| - | ||||
|  static int safexcel_encrypt(struct skcipher_request *req) | ||||
|  { | ||||
|  	return safexcel_queue_req(&req->base, skcipher_request_ctx(req), | ||||
| @@ -1216,6 +1293,8 @@ static int safexcel_skcipher_cra_init(st | ||||
|  	ctx->base.send = safexcel_skcipher_send; | ||||
|  	ctx->base.handle_result = safexcel_skcipher_handle_result; | ||||
|  	ctx->ivmask = EIP197_OPTION_4_TOKEN_IV_CMD; | ||||
| +	ctx->basic_ctr = false; | ||||
| +	ctx->processed = 0; | ||||
|  	ctx->ctrinit = 1; | ||||
|  	return 0; | ||||
|  } | ||||
| @@ -1496,6 +1575,44 @@ struct safexcel_alg_template safexcel_al | ||||
|  	}, | ||||
|  }; | ||||
|   | ||||
| +static int safexcel_skcipher_basic_aes_ctr_cra_init(struct crypto_tfm *tfm) | ||||
| +{ | ||||
| +	struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(tfm); | ||||
| + | ||||
| +	safexcel_skcipher_cra_init(tfm); | ||||
| +	ctx->alg = SAFEXCEL_AES; | ||||
| +	ctx->blocksz = AES_BLOCK_SIZE; | ||||
| +	ctx->mode = CONTEXT_CONTROL_CRYPTO_MODE_CTR_LOAD; | ||||
| +	ctx->basic_ctr = true; | ||||
| +	return 0; | ||||
| +} | ||||
| + | ||||
| +struct safexcel_alg_template safexcel_alg_basic_ctr_aes = { | ||||
| +	.type = SAFEXCEL_ALG_TYPE_SKCIPHER, | ||||
| +	.algo_mask = SAFEXCEL_ALG_AES, | ||||
| +	.alg.skcipher = { | ||||
| +		.setkey = safexcel_skcipher_aes_setkey, | ||||
| +		.encrypt = safexcel_encrypt, | ||||
| +		.decrypt = safexcel_decrypt, | ||||
| +		.min_keysize = AES_MIN_KEY_SIZE, | ||||
| +		.max_keysize = AES_MAX_KEY_SIZE, | ||||
| +		.ivsize = AES_BLOCK_SIZE, | ||||
| +		.base = { | ||||
| +			.cra_name = "ctr(aes)", | ||||
| +			.cra_driver_name = "safexcel-basic-ctr-aes", | ||||
| +			.cra_priority = SAFEXCEL_CRA_PRIORITY, | ||||
| +			.cra_flags = CRYPTO_ALG_ASYNC | | ||||
| +					 CRYPTO_ALG_KERN_DRIVER_ONLY, | ||||
| +			.cra_blocksize = 1, | ||||
| +			.cra_ctxsize = sizeof(struct safexcel_cipher_ctx), | ||||
| +			.cra_alignmask = 0, | ||||
| +			.cra_init = safexcel_skcipher_basic_aes_ctr_cra_init, | ||||
| +			.cra_exit = safexcel_skcipher_cra_exit, | ||||
| +			.cra_module = THIS_MODULE, | ||||
| +		}, | ||||
| +	}, | ||||
| +}; | ||||
| + | ||||
|  static int safexcel_des_setkey(struct crypto_skcipher *ctfm, const u8 *key, | ||||
|  			       unsigned int len) | ||||
|  { | ||||
| @@ -1724,6 +1841,9 @@ static int safexcel_aead_cra_init(struct | ||||
|  	ctx->aead = true; | ||||
|  	ctx->base.send = safexcel_aead_send; | ||||
|  	ctx->base.handle_result = safexcel_aead_handle_result; | ||||
| +	ctx->basic_ctr = false; | ||||
| +	ctx->processed = 0; | ||||
| + | ||||
|  	return 0; | ||||
|  } | ||||
|   | ||||
| @@ -0,0 +1,63 @@ | ||||
| Index: linux-5.4.246/drivers/char/tpm/tpm_tis_spi.c | ||||
| =================================================================== | ||||
| --- linux-5.4.246.orig/drivers/char/tpm/tpm_tis_spi.c | ||||
| +++ linux-5.4.246/drivers/char/tpm/tpm_tis_spi.c | ||||
| @@ -199,11 +199,35 @@ static const struct tpm_tis_phy_ops tpm_ | ||||
|  	.do_calibration = tpm_tis_spi_do_calibration, | ||||
|  }; | ||||
|   | ||||
| +int reset_tpm(struct spi_device *dev) | ||||
| +{ | ||||
| +	int error; | ||||
| +	struct gpio_desc *reset_gpio; | ||||
| +	reset_gpio = gpiod_get_optional(&dev->dev, "reset", GPIOD_OUT_LOW); | ||||
| +	error = PTR_ERR_OR_ZERO(reset_gpio); | ||||
| + | ||||
| +	printk("Doing tpm reset!!"); | ||||
| + | ||||
| +	if(error) { | ||||
| +		printk("get tpm reset gpio fail!!!!!\n"); | ||||
| +		return error; | ||||
| +	} | ||||
| + | ||||
| +	if(reset_gpio) | ||||
| +		gpiod_set_consumer_name(reset_gpio, "TPM reset"); | ||||
| + | ||||
| +	return 0; | ||||
| +} | ||||
| + | ||||
|  static int tpm_tis_spi_probe(struct spi_device *dev) | ||||
|  { | ||||
|  	struct tpm_tis_spi_phy *phy; | ||||
|  	int irq; | ||||
|   | ||||
| +	if(reset_tpm(dev)){ | ||||
| +		printk("!!!tpm reset fail!!\n"); | ||||
| +	} | ||||
| + | ||||
|  	phy = devm_kzalloc(&dev->dev, sizeof(struct tpm_tis_spi_phy), | ||||
|  			   GFP_KERNEL); | ||||
|  	if (!phy) | ||||
| Index: linux-5.4.246/drivers/spi/spi.c | ||||
| =================================================================== | ||||
| --- linux-5.4.246.orig/drivers/spi/spi.c | ||||
| +++ linux-5.4.246/drivers/spi/spi.c | ||||
| @@ -1124,8 +1124,17 @@ int spi_do_calibration(struct spi_contro | ||||
|  	bool hit; | ||||
|   | ||||
|  	/* Make sure we can start calibration */ | ||||
| +#if 1 | ||||
| +	if(!ctlr->cal_target || !ctlr->cal_rule) { | ||||
| +		return 0; | ||||
| +	} else if(!ctlr->append_caldata) { | ||||
| +		pr_err("%s: calibration is enabled but no controller data.\n", __func__); | ||||
| +		return -EINVAL; | ||||
| +	} | ||||
| +#else | ||||
|  	if(!ctlr->cal_target || !ctlr->cal_rule || !ctlr->append_caldata) | ||||
|  		return -EINVAL; | ||||
| +#endif | ||||
|  	datalen = ctlr->cal_rule->datalen; | ||||
|  	addrlen = ctlr->cal_rule->addrlen; | ||||
|   | ||||
|  | ||||
| @@ -4,7 +4,7 @@ | ||||
|  		mtk_qdma_debugfs_init(eth); | ||||
|  	} | ||||
|   | ||||
| +	if (of_machine_is_compatible("edgecore,eap111")) {
 | ||||
| +	if (of_machine_is_compatible("edgecore,eap111") || of_machine_is_compatible("edgecore,eap112")) {
 | ||||
| +		sprintf(eth->netdev[0]->name, "eth1");
 | ||||
| +		sprintf(eth->netdev[1]->name, "eth0");
 | ||||
| +	}
 | ||||
| @@ -0,0 +1,58 @@ | ||||
| From b241c6831557c3141801dc2f87e839269ef7bad1 Mon Sep 17 00:00:00 2001 | ||||
| From: Howard Hsu <howard-yh.hsu@mediatek.com> | ||||
| Date: Fri, 19 Apr 2024 15:43:23 +0800 | ||||
| Subject: [PATCH] wifi: mt76: mt7915: adjust rx filter | ||||
|  | ||||
| Adjust rx filter setting to drop the packet that we do not need to | ||||
| receive. | ||||
|  | ||||
| Fixes: e57b7901469f ("mt76: add mac80211 driver for MT7915 PCIe-based chipsets") | ||||
| Signed-off-by: Howard Hsu <howard-yh.hsu@mediatek.com> | ||||
| --- | ||||
|  mt7915/main.c | 11 +++++++---- | ||||
|  1 file changed, 7 insertions(+), 4 deletions(-) | ||||
|  | ||||
| diff --git a/mt7915/main.c b/mt7915/main.c | ||||
| index 26f9a5a..137e09a 100644 | ||||
| --- a/mt7915/main.c | ||||
| +++ b/mt7915/main.c | ||||
| @@ -489,7 +489,8 @@ static int mt7915_config(struct ieee80211_hw *hw, u32 changed) | ||||
|  			rxfilter |= MT_WF_RFCR_DROP_OTHER_UC; | ||||
|  			dev->monitor_mask &= ~BIT(band); | ||||
|  		} else { | ||||
| -			rxfilter &= ~MT_WF_RFCR_DROP_OTHER_UC; | ||||
| +			rxfilter &= ~(MT_WF_RFCR_DROP_A2_BSSID | | ||||
| +				      MT_WF_RFCR_DROP_OTHER_UC); | ||||
|  			dev->monitor_mask |= BIT(band); | ||||
|  		} | ||||
|   | ||||
| @@ -552,13 +553,14 @@ static void mt7915_configure_filter(struct ieee80211_hw *hw, | ||||
|  			   MT_WF_RFCR_DROP_MCAST | | ||||
|  			   MT_WF_RFCR_DROP_BCAST | | ||||
|  			   MT_WF_RFCR_DROP_DUPLICATE | | ||||
| -			   MT_WF_RFCR_DROP_A2_BSSID | | ||||
|  			   MT_WF_RFCR_DROP_UNWANTED_CTL | | ||||
|  			   MT_WF_RFCR_DROP_STBC_MULTI); | ||||
| +	phy->rxfilter |= MT_WF_RFCR_DROP_VERSION; | ||||
|   | ||||
|  	MT76_FILTER(OTHER_BSS, MT_WF_RFCR_DROP_OTHER_TIM | | ||||
|  			       MT_WF_RFCR_DROP_A3_MAC | | ||||
| -			       MT_WF_RFCR_DROP_A3_BSSID); | ||||
| +			       MT_WF_RFCR_DROP_A3_BSSID | | ||||
| +			       MT_WF_RFCR_DROP_A2_BSSID); | ||||
|   | ||||
|  	MT76_FILTER(FCSFAIL, MT_WF_RFCR_DROP_FCSFAIL); | ||||
|   | ||||
| @@ -569,7 +571,8 @@ static void mt7915_configure_filter(struct ieee80211_hw *hw, | ||||
|  	*total_flags = flags; | ||||
|  	rxfilter = phy->rxfilter; | ||||
|  	if (hw->conf.flags & IEEE80211_CONF_MONITOR) | ||||
| -		rxfilter &= ~MT_WF_RFCR_DROP_OTHER_UC; | ||||
| +		rxfilter &= ~(MT_WF_RFCR_DROP_A2_BSSID | | ||||
| +			      MT_WF_RFCR_DROP_OTHER_UC); | ||||
|  	else | ||||
|  		rxfilter |= MT_WF_RFCR_DROP_OTHER_UC; | ||||
|  	mt76_wr(dev, MT_WF_RFCR(band), rxfilter); | ||||
| --  | ||||
| 2.18.0 | ||||
|  | ||||
							
								
								
									
										81
									
								
								feeds/mediatek-sdk/mt76/patches/a02-roaming_fix.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								feeds/mediatek-sdk/mt76/patches/a02-roaming_fix.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,81 @@ | ||||
| --- a/mt7915/main.c | ||||
| +++ b/mt7915/main.c | ||||
| @@ -412,6 +412,13 @@ static int mt7915_set_key(struct ieee802 | ||||
|  	int idx = key->keyidx; | ||||
|  	int err = 0; | ||||
|   | ||||
| +	if (sta && !wcid->sta) { | ||||
| +		if (cmd != SET_KEY) | ||||
| +			return 0; | ||||
| + | ||||
| +		return -EOPNOTSUPP; | ||||
| +	} | ||||
| + | ||||
|  	/* The hardware does not support per-STA RX GTK, fallback | ||||
|  	 * to software mode for these. | ||||
|  	 */ | ||||
| @@ -803,6 +810,56 @@ mt7915_event_callback(struct ieee80211_h | ||||
|  	return; | ||||
|  } | ||||
|   | ||||
| +struct drop_sta_iter { | ||||
| +	struct mt7915_dev *dev; | ||||
| +	struct ieee80211_hw *hw; | ||||
| +	struct ieee80211_vif *vif; | ||||
| +	u8 sta_addr[ETH_ALEN]; | ||||
| +}; | ||||
| + | ||||
| +static void | ||||
| +__mt7915_drop_sta(void *ptr, u8 *mac, struct ieee80211_vif *vif) | ||||
| +{ | ||||
| +	struct drop_sta_iter *data = ptr; | ||||
| +	struct ieee80211_sta *sta; | ||||
| +	struct mt7915_sta *msta; | ||||
| + | ||||
| +	if (vif == data->vif || vif->type != NL80211_IFTYPE_AP) | ||||
| +		return; | ||||
| + | ||||
| +	sta = ieee80211_find_sta_by_ifaddr(data->hw, data->sta_addr, mac); | ||||
| +	if (!sta) | ||||
| +		return; | ||||
| + | ||||
| +	msta = (struct mt7915_sta *)sta->drv_priv; | ||||
| +	mt7915_mcu_add_sta(data->dev, vif, sta, false); | ||||
| +	msta->wcid.sta = 0; | ||||
| +} | ||||
| + | ||||
| +static void | ||||
| +mt7915_drop_other_sta(struct mt7915_dev *dev, struct ieee80211_vif *vif, | ||||
| +		      struct ieee80211_sta *sta) | ||||
| +{ | ||||
| +	struct mt76_phy *ext_phy = dev->mt76.phys[MT_BAND1]; | ||||
| +	struct drop_sta_iter data = { | ||||
| +		.dev = dev, | ||||
| +		.hw = dev->mphy.hw, | ||||
| +		.vif = vif, | ||||
| +	}; | ||||
| + | ||||
| +	if (vif->type != NL80211_IFTYPE_AP) | ||||
| +		return; | ||||
| + | ||||
| +	memcpy(data.sta_addr, sta->addr, ETH_ALEN); | ||||
| +	ieee80211_iterate_active_interfaces(data.hw, 0, __mt7915_drop_sta, &data); | ||||
| + | ||||
| +	if (!ext_phy) | ||||
| +		return; | ||||
| + | ||||
| +	data.hw = ext_phy->hw; | ||||
| +	ieee80211_iterate_active_interfaces(data.hw, 0, __mt7915_drop_sta, &data); | ||||
| +} | ||||
| + | ||||
|  int mt7915_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif, | ||||
|  		       struct ieee80211_sta *sta) | ||||
|  { | ||||
| @@ -843,6 +900,7 @@ int mt7915_mac_sta_add(struct mt76_dev * | ||||
|  	mt7915_mac_wtbl_update(dev, idx, | ||||
|  			       MT_WTBL_UPDATE_ADM_COUNT_CLEAR); | ||||
|   | ||||
| +	mt7915_drop_other_sta(dev, vif, sta); | ||||
|  	ret = mt7915_mcu_add_sta(dev, vif, sta, true); | ||||
|  	if (ret) | ||||
|  		return ret; | ||||
| @@ -1,6 +1,6 @@ | ||||
| #!/bin/sh /etc/rc.common | ||||
|  | ||||
| START=99 | ||||
| START=98 | ||||
| USE_PROCD=1 | ||||
| PROG=/usr/bin/cloud_discovery | ||||
|  | ||||
| @@ -23,10 +23,12 @@ start_service() { | ||||
| 		/usr/share/ucentral/ucentral.uc /etc/ucentral/ucentral.cfg.0000000001 > /dev/null | ||||
|  | ||||
| 	[ "$(fw_printenv -n pki2)" -eq 1 ] || { | ||||
| 		[ -f /etc/ucentral/gateway.json ] || /etc/init.d/firstcontact start | ||||
| 		/etc/init.d/cloud_discover disable | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	/etc/init.d/firstcontact disable | ||||
|  | ||||
| 	procd_open_instance | ||||
| 	procd_set_param command "$PROG" | ||||
| 	procd_set_param respawn | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| #!/bin/sh /etc/rc.common | ||||
|  | ||||
| START=99 | ||||
| USE_PROCD=1 | ||||
| PROG=/usr/bin/ucode | ||||
|  | ||||
|   | ||||
| @@ -1,5 +1,7 @@ | ||||
| #!/bin/sh /etc/rc.common | ||||
|  | ||||
| START=99 | ||||
| STOP=01 | ||||
| USE_PROCD=1 | ||||
| PROG=/usr/sbin/ucentral | ||||
|  | ||||
|   | ||||
| @@ -4,10 +4,10 @@ PKG_NAME:=ucentral-schema | ||||
| PKG_RELEASE:=1 | ||||
|  | ||||
| PKG_SOURCE_URL=https://github.com/Telecominfraproject/wlan-ucentral-schema.git | ||||
| PKG_MIRROR_HASH:=3d81bd854793ef66c0cb11d7c3445aebcd7e20e969c7a1d6f33ce2dc510f4ec1 | ||||
| PKG_MIRROR_HASH:=dbe35cf019f2b4f33a365c9d1e4d999af02d08ddcb5a6483fe950459ef442e4d | ||||
| PKG_SOURCE_PROTO:=git | ||||
| PKG_SOURCE_DATE:=2024-07-03 | ||||
| PKG_SOURCE_VERSION:=6e3e2df40de8f99ea62a495b53c9cf7c03ba494c | ||||
| PKG_SOURCE_VERSION:=1ddca91b8e321fee614dad9db33662c9041fe6e3 | ||||
| PKG_MAINTAINER:=John Crispin <john@phrozen.org> | ||||
| PKG_LICENSE:=BSD-3-Clause | ||||
|  | ||||
|   | ||||
							
								
								
									
										115
									
								
								patches/0078-secure-boot-sha256.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								patches/0078-secure-boot-sha256.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,115 @@ | ||||
| From 95dfd6ea3a2c06a81a4513fe943d640d4d990194 Mon Sep 17 00:00:00 2001 | ||||
| From: "steven.lin" <steven.lin@senao.com> | ||||
| Date: Mon, 11 Nov 2024 09:28:18 +0800 | ||||
| Subject: [PATCH] secure boot support sha256 | ||||
|  | ||||
| --- | ||||
|  scripts/mkits-secure_boot.sh | 37 ++++++++++++++++++++++++++++++++---- | ||||
|  1 file changed, 33 insertions(+), 4 deletions(-) | ||||
|  | ||||
| diff --git a/scripts/mkits-secure_boot.sh b/scripts/mkits-secure_boot.sh | ||||
| index 1c7f292618..0a09792971 100755 | ||||
| --- a/scripts/mkits-secure_boot.sh | ||||
| +++ b/scripts/mkits-secure_boot.sh | ||||
| @@ -17,7 +17,7 @@ | ||||
|  usage() { | ||||
|  	printf "Usage: %s -A arch -C comp -a addr -e entry" "$(basename "$0")" | ||||
|  	printf " -v version -k kernel [-D name -n address -d dtb] -o its_file" | ||||
| -	printf " [-s script] [-S key_name_hint] [-r ar_ver] [-R rootfs]" | ||||
| +	printf " [-s script] [-S key_name_hint] [-b key_alg] [-r ar_ver] [-R rootfs] [-m rfsk]" | ||||
|   | ||||
|  	printf "\n\t-A ==> set architecture to 'arch'" | ||||
|  	printf "\n\t-C ==> set compression type 'comp'" | ||||
| @@ -32,18 +32,21 @@ usage() { | ||||
|  	printf "\n\t-o ==> create output file 'its_file'" | ||||
|  	printf "\n\t-s ==> include u-boot script 'script'" | ||||
|  	printf "\n\t-S ==> add signature at configurations and assign its key_name_hint by 'key_name_hint'" | ||||
| +	printf "\n\t-b ==> set key algorithm" | ||||
|  	printf "\n\t-r ==> set anti-rollback version to 'fw_ar_ver' (dec)" | ||||
| -	printf "\n\t-R ==> specify rootfs file for embedding hash\n" | ||||
| +	printf "\n\t-R ==> specify rootfs file for embedding hash" | ||||
| +	printf "\n\t-m ==> include encrypted rootfs key'\n" | ||||
|  	exit 1 | ||||
|  } | ||||
|   | ||||
|  FDTNUM=1 | ||||
|   | ||||
| -while getopts ":A:a:c:C:D:d:e:k:n:o:v:s:S:r:R:" OPTION | ||||
| +while getopts ":A:a:b:c:C:D:d:e:k:n:o:v:s:S:r:R:m:" OPTION | ||||
|  do | ||||
|  	case $OPTION in | ||||
|  		A ) ARCH=$OPTARG;; | ||||
|  		a ) LOAD_ADDR=$OPTARG;; | ||||
| +		b ) KEY_ALG=$OPTARG;; | ||||
|  		c ) CONFIG=$OPTARG;; | ||||
|  		C ) COMPRESS=$OPTARG;; | ||||
|  		D ) DEVICE=$OPTARG;; | ||||
| @@ -57,6 +60,7 @@ do | ||||
|  		S ) KEY_NAME_HINT=$OPTARG;; | ||||
|  		r ) AR_VER=$OPTARG;; | ||||
|  		R ) ROOTFS_FILE=$OPTARG;; | ||||
| +		m ) ROOTFS_KEY=$OPTARG;; | ||||
|  		* ) echo "Invalid option passed to '$0' (options:$*)" | ||||
|  		usage;; | ||||
|  	esac | ||||
| @@ -91,6 +95,19 @@ if [ -n "${DTB}" ]; then | ||||
|  	FDT_PROP="fdt = \"fdt-$FDTNUM\";" | ||||
|  fi | ||||
|   | ||||
| +# Conditionally create encrypted rootfs-key information | ||||
| +if [ -n "${ROOTFS_KEY}" ]; then | ||||
| +	RFSK_NODE=" | ||||
| +			rfsk = <$(cat ${ROOTFS_KEY} | od -An -t x1 -w256 | sed 's/ //g; s/.\{8\}/0x& /g; s/.$//g')>;"; | ||||
| + | ||||
| +	FIT_SECRET_NODE=" | ||||
| +	fit-secrets { | ||||
| +		${CONFIG} { | ||||
| +		}; | ||||
| +	}; | ||||
| +" | ||||
| +fi | ||||
| + | ||||
|  # Conditionally create rootfs hash information | ||||
|  if [ -f "${ROOTFS_FILE}" ]; then | ||||
|  	ROOTFS_SIZE=$(stat -c %s ${ROOTFS_FILE}) | ||||
| @@ -149,11 +166,20 @@ fi | ||||
|   | ||||
|  # Conditionally create signature information | ||||
|  if [ -n "${KEY_NAME_HINT}" ]; then | ||||
| +	if [[ "${KEY_NAME_HINT}" == "offline,"* ]]; then | ||||
| +		KEY_NAME_HINT=$(echo -n "${KEY_NAME_HINT}" | sed "s/^.*[,]//g") | ||||
| +		SIGN_OFFLINE=" | ||||
| +				sign-offline = <1>;" | ||||
| +	fi | ||||
| +	if [ -z "${KEY_ALG}" ]; then | ||||
| +		KEY_ALG="sha256,rsa2048" | ||||
| +	fi | ||||
|  	SIGNATURE="\ | ||||
|  			signature { | ||||
| -				algo = \"sha1,rsa2048\"; | ||||
| +				algo = \"${KEY_ALG}\"; | ||||
|  				key-name-hint = \"${KEY_NAME_HINT}\"; | ||||
|  ${SIGN_IMAGES} | ||||
| +${SIGN_OFFLINE} | ||||
|  			};\ | ||||
|  " | ||||
|  fi | ||||
| @@ -200,12 +226,15 @@ ${ROOTFS} | ||||
|  		${CONFIG} { | ||||
|  			description = \"OpenWrt\"; | ||||
|  ${FW_AR_VER} | ||||
| +${RFSK_NODE} | ||||
|  ${LOADABLES} | ||||
|  			kernel = \"kernel-1\"; | ||||
|  			${FDT_PROP} | ||||
|  ${SIGNATURE} | ||||
|  		}; | ||||
|  	}; | ||||
| + | ||||
| +${FIT_SECRET_NODE} | ||||
|  };" | ||||
|   | ||||
|  # Write .its file to disk | ||||
| --  | ||||
| 2.43.2 | ||||
|  | ||||
							
								
								
									
										333
									
								
								patches/0080-rampis-add-mt7621-cybertan-rap63xc-211g-support.patch
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										333
									
								
								patches/0080-rampis-add-mt7621-cybertan-rap63xc-211g-support.patch
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,333 @@ | ||||
| From ba018e2a24d85b7eabe0ed5a43d2c0a5ffccac7c Mon Sep 17 00:00:00 2001 | ||||
| From: "wingate.chi" <wingate.chi@cybertan.com.tw> | ||||
| Date: Mon, 9 Dec 2024 03:06:26 +0000 | ||||
| Subject: [PATCH] rampis: add mt7621 cybertan rap63xc-211g support | ||||
|  | ||||
| Signed-off-by: wingate.chi <wingate.chi@cybertan.com.tw> | ||||
| --- | ||||
|  package/boot/uboot-envtools/files/ramips      |   1 + | ||||
|  .../dts/mt7621_cybertan_rap63xc-211g.dts      | 204 ++++++++++++++++++ | ||||
|  target/linux/ramips/image/mt7621.mk           |   9 + | ||||
|  .../mt7621/base-files/etc/board.d/01_leds     |   6 + | ||||
|  .../mt7621/base-files/etc/board.d/02_network  |   6 + | ||||
|  .../etc/hotplug.d/ieee80211/10_fix_wifi_mac   |   5 + | ||||
|  6 files changed, 231 insertions(+) | ||||
|  mode change 100644 => 100755 package/boot/uboot-envtools/files/ramips | ||||
|  create mode 100755 target/linux/ramips/dts/mt7621_cybertan_rap63xc-211g.dts | ||||
|  mode change 100644 => 100755 target/linux/ramips/image/mt7621.mk | ||||
|  mode change 100644 => 100755 target/linux/ramips/mt7621/base-files/etc/board.d/01_leds | ||||
|  mode change 100644 => 100755 target/linux/ramips/mt7621/base-files/etc/board.d/02_network | ||||
|  mode change 100644 => 100755 target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac | ||||
|  | ||||
| diff --git a/package/boot/uboot-envtools/files/ramips b/package/boot/uboot-envtools/files/ramips | ||||
| old mode 100644 | ||||
| new mode 100755 | ||||
| index 8c7ce71c49..522bf03254 | ||||
| --- a/package/boot/uboot-envtools/files/ramips | ||||
| +++ b/package/boot/uboot-envtools/files/ramips | ||||
| @@ -28,6 +28,7 @@ alfa-network,ax1800rm|\ | ||||
|  allnet,all0256n-4m|\ | ||||
|  allnet,all0256n-8m|\ | ||||
|  allnet,all5002|\ | ||||
| +cybertan,rap63xc-211g|\ | ||||
|  yuncore,ax820) | ||||
|  	ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x10000" "0x10000" | ||||
|  	;; | ||||
| diff --git a/target/linux/ramips/dts/mt7621_cybertan_rap63xc-211g.dts b/target/linux/ramips/dts/mt7621_cybertan_rap63xc-211g.dts | ||||
| new file mode 100755 | ||||
| index 0000000000..149277a825 | ||||
| --- /dev/null | ||||
| +++ b/target/linux/ramips/dts/mt7621_cybertan_rap63xc-211g.dts | ||||
| @@ -0,0 +1,204 @@ | ||||
| +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT | ||||
| + | ||||
| +#include "mt7621.dtsi" | ||||
| + | ||||
| +#include <dt-bindings/gpio/gpio.h> | ||||
| +#include <dt-bindings/input/input.h> | ||||
| +#include <dt-bindings/leds/common.h> | ||||
| + | ||||
| +/ { | ||||
| +	compatible = "cybertan,rap63xc-211g", "mediatek,mt7621-soc"; | ||||
| +	model = "CyberTan RAP63XC-211G"; | ||||
| + | ||||
| +	aliases { | ||||
| +		led-boot = &led_system; | ||||
| +		led-failsafe = &led_system; | ||||
| +		led-running = &led_system; | ||||
| +		led-upgrade = &led_system; | ||||
| +	}; | ||||
| + | ||||
| +	chosen { | ||||
| +		bootargs = "console=ttyS0,115200"; | ||||
| +	}; | ||||
| + | ||||
| +	leds { | ||||
| +		compatible = "gpio-leds"; | ||||
| + | ||||
| +		/* At least 2 RAP63XC-211G variants are known and cannot be distinguished (same hw rev): | ||||
| +		   - System LED green GPIO 15; red and blue apparently not connected | ||||
| +		   - System LED red GPIO 15, WLAN2G LED green GPIO 14, WLAN5G LED blue GPIO 16 | ||||
| +		   The canonical values taken from a Yuncore datasheet are: | ||||
| +		   - System LED green GPIO 15, WLAN2G LED blue GPIO 14, WLAN5G LED red GPIO 16 | ||||
| +		   All 3 colors relate to the same single RGB LED showing up on the front lightpipe. | ||||
| +		   As a result, all 3 LEDs are defined even if only one may be available, and | ||||
| +		   the color information is absent as it is not reliable */ | ||||
| +		wlan2g { | ||||
| +			label = "wlan2g"; | ||||
| +			gpios = <&gpio 14 GPIO_ACTIVE_LOW>; | ||||
| +			linux,default-trigger = "phy0radio"; | ||||
| +		}; | ||||
| + | ||||
| +		led_system: system { | ||||
| +			label = "system"; | ||||
| +			gpios = <&gpio 15 GPIO_ACTIVE_LOW>; | ||||
| +		}; | ||||
| + | ||||
| +		wlan5g { | ||||
| +			label = "wlan5g"; | ||||
| +			gpios = <&gpio 16 GPIO_ACTIVE_LOW>; | ||||
| +			linux,default-trigger = "phy1radio"; | ||||
| +		}; | ||||
| + | ||||
| +		wan { | ||||
| +			color = <LED_COLOR_ID_GREEN>; | ||||
| +			function = LED_FUNCTION_WAN; | ||||
| +			gpios = <&switch0 0 GPIO_ACTIVE_LOW>; | ||||
| +		}; | ||||
| + | ||||
| +		lan { | ||||
| +			color = <LED_COLOR_ID_GREEN>; | ||||
| +			function = LED_FUNCTION_LAN; | ||||
| +			gpios = <&switch0 3 GPIO_ACTIVE_LOW>; | ||||
| +		}; | ||||
| +	}; | ||||
| + | ||||
| +	watchdog { | ||||
| +		compatible = "linux,wdt-gpio"; | ||||
| +		gpios = <&gpio 0 GPIO_ACTIVE_LOW>; | ||||
| +		hw_algo = "toggle"; | ||||
| +		hw_margin_ms = <200>; | ||||
| +		always-running; | ||||
| +	}; | ||||
| + | ||||
| +	keys { | ||||
| +		compatible = "gpio-keys"; | ||||
| + | ||||
| +		reset { | ||||
| +			label = "reset"; | ||||
| +			gpios = <&gpio 18 GPIO_ACTIVE_LOW>; | ||||
| +			linux,code = <KEY_RESTART>; | ||||
| +		}; | ||||
| +	}; | ||||
| +}; | ||||
| + | ||||
| +&spi0 { | ||||
| +	status = "okay"; | ||||
| + | ||||
| +	flash@0 { | ||||
| +		compatible = "jedec,spi-nor"; | ||||
| +		reg = <0>; | ||||
| +		spi-max-frequency = <20000000>; | ||||
| +		m25p,fast-read; | ||||
| + | ||||
| +		partitions { | ||||
| +			compatible = "fixed-partitions"; | ||||
| +			#address-cells = <1>; | ||||
| +			#size-cells = <1>; | ||||
| + | ||||
| +			partition@0 { | ||||
| +				label = "Bootloader"; | ||||
| +				reg = <0x0 0x30000>; | ||||
| +				read-only; | ||||
| +			}; | ||||
| + | ||||
| +			partition@30000 { | ||||
| +				label = "Config"; | ||||
| +				reg = <0x30000 0x10000>; | ||||
| +			/*	read-only;  */ | ||||
| +			}; | ||||
| + | ||||
| +			/* range 0x40000 to 0x50000 is empty in vendor | ||||
| +			 * firmware, so we do not use it either | ||||
| +			 */ | ||||
| + | ||||
| +			factory: partition@50000 { | ||||
| +				label = "Factory"; | ||||
| +				reg = <0x50000 0x40000>; | ||||
| +				read-only; | ||||
| +			}; | ||||
| + | ||||
| +			partition@90000 { | ||||
| +				compatible = "denx,uimage"; | ||||
| +				label = "firmware"; | ||||
| +				reg = <0x90000 0xf50000>; | ||||
| +			}; | ||||
| + | ||||
| +			partition@fe0000 { | ||||
| +				label = "devinfo"; | ||||
| +				reg = <0xfe0000 0x10000>; | ||||
| +			}; | ||||
| + | ||||
| +			partition@ff0000 { | ||||
| +				label = "certificates"; | ||||
| +				reg = <0xff0000 0x10000>; | ||||
| +			}; | ||||
| +		}; | ||||
| +	}; | ||||
| +}; | ||||
| + | ||||
| +&pcie { | ||||
| +	status = "okay"; | ||||
| +}; | ||||
| + | ||||
| +&pcie1 { | ||||
| +	wifi@0,0 { | ||||
| +		compatible = "mediatek,mt76"; | ||||
| +		reg = <0x0000 0 0 0 0>; | ||||
| +		mediatek,mtd-eeprom = <&factory 0x0>; | ||||
| +		mediatek,disable-radar-background; | ||||
| +	}; | ||||
| +}; | ||||
| + | ||||
| +&gmac0 { | ||||
| +	nvmem-cells = <&macaddr_factory_4>; | ||||
| +	nvmem-cell-names = "mac-address"; | ||||
| +	mac-address-increment = <1>; | ||||
| +}; | ||||
| + | ||||
| +&gmac1 { | ||||
| +	status = "okay"; | ||||
| +	label = "wan"; | ||||
| +	phy-handle = <ðphy0>; | ||||
| + | ||||
| +	nvmem-cells = <&macaddr_factory_4>; | ||||
| +	nvmem-cell-names = "mac-address"; | ||||
| +}; | ||||
| + | ||||
| +&mdio { | ||||
| +	ethphy0: ethernet-phy@0 { | ||||
| +		reg = <0>; | ||||
| +	}; | ||||
| +}; | ||||
| + | ||||
| +&switch0 { | ||||
| +	gpio-controller; | ||||
| +	#gpio-cells = <2>; | ||||
| + | ||||
| +	ports { | ||||
| +		port@1 { | ||||
| +			status = "okay"; | ||||
| +			label = "lan"; | ||||
| +		}; | ||||
| +	}; | ||||
| +}; | ||||
| + | ||||
| +&state_default { | ||||
| +	gpio { | ||||
| +		groups = "jtag", "wdt"; | ||||
| +		function = "gpio"; | ||||
| +	}; | ||||
| +}; | ||||
| + | ||||
| +&factory { | ||||
| +	compatible = "nvmem-cells"; | ||||
| +	#address-cells = <1>; | ||||
| +	#size-cells = <1>; | ||||
| + | ||||
| +	macaddr_factory_4: macaddr@4 { | ||||
| +		reg = <0x4 0x6>; | ||||
| +	}; | ||||
| + | ||||
| +	macaddr_factory_e000: macaddr@e000 { | ||||
| +		reg = <0xe000 0x6>; | ||||
| +	}; | ||||
| +}; | ||||
| diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk | ||||
| old mode 100644 | ||||
| new mode 100755 | ||||
| index 8790a2fa50..1a1959bdc4 | ||||
| --- a/target/linux/ramips/image/mt7621.mk | ||||
| +++ b/target/linux/ramips/image/mt7621.mk | ||||
| @@ -581,6 +581,15 @@ define Device/cudy_x6-v2 | ||||
|  endef | ||||
|  TARGET_DEVICES += cudy_x6-v2 | ||||
|   | ||||
| +define Device/cybertan_rap63xc-211g | ||||
| +  $(Device/dsa-migration) | ||||
| +  IMAGE_SIZE := 15808k | ||||
| +  DEVICE_VENDOR := CyberTan | ||||
| +  DEVICE_MODEL := RAP63XC-211G | ||||
| +  DEVICE_PACKAGES := kmod-mt7915-firmware uboot-envtools | ||||
| +endef | ||||
| +TARGET_DEVICES += cybertan_rap63xc-211g | ||||
| + | ||||
|  define Device/dlink_dap-1620-b1 | ||||
|    DEVICE_VENDOR := D-Link | ||||
|    DEVICE_MODEL := DAP-1620 | ||||
| diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds b/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds | ||||
| old mode 100644 | ||||
| new mode 100755 | ||||
| index 3ceac60434..84cc404019 | ||||
| --- a/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds | ||||
| +++ b/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds | ||||
| @@ -64,6 +64,12 @@ cudy,wr2100) | ||||
|  	ucidef_set_led_netdev "lan4" "lan4" "green:lan4" "lan4" | ||||
|  	ucidef_set_led_netdev "wan" "wan" "green:wan" "wan" | ||||
|  	;; | ||||
| +cybertan,rap63xc-211g) | ||||
| +	ucidef_set_led_netdev "wifi2g" "Wifi2G" "wlan2g" "wlan0" "link" | ||||
| +	ucidef_set_led_netdev "wifi5g" "Wifi5G" "wlan5g" "wlan1" "link" | ||||
| +	ucidef_set_led_netdev "lan" "LAN" "green:lan" "lan" | ||||
| +	ucidef_set_led_netdev "wan" "WAN" "green:wan" "wan" | ||||
| +	;; | ||||
|  d-team,newifi-d2) | ||||
|  	ucidef_set_led_netdev "internet" "internet" "amber:internet" "wan" | ||||
|  	ucidef_set_led_netdev "wlan2g" "WiFi 2.4GHz" "blue:wlan2g" "wlan0" | ||||
| diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network | ||||
| old mode 100644 | ||||
| new mode 100755 | ||||
| index 0f6b7fd526..d3944a47c4 | ||||
| --- a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network | ||||
| +++ b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network | ||||
| @@ -91,6 +91,7 @@ ramips_setup_interfaces() | ||||
|  		uci add_list firewall.@zone[1].network='eth_om' | ||||
|  		;; | ||||
|  	cudy,m1800|\ | ||||
| +	cybertan,rap63xc-211g|\ | ||||
|  	yuncore,ax820|\ | ||||
|  	zyxel,nt7101) | ||||
|  		ucidef_set_interfaces_lan_wan "lan" "wan" | ||||
| @@ -204,6 +205,11 @@ ramips_setup_macs() | ||||
|  		lan_mac=$wan_mac | ||||
|  		label_mac=$wan_mac | ||||
|  		;; | ||||
| +	cybertan,rap63xc-211g) | ||||
| +		wan_mac=$(mtd_get_mac_binary Factory 0x4) | ||||
| +		lan_mac=$(macaddr_add "$wan_mac" 1) | ||||
| +		label_mac=$wan_mac | ||||
| +		;; | ||||
|  	dlink,dir-860l-b1) | ||||
|  		lan_mac=$(mtd_get_mac_ascii factory lanmac) | ||||
|  		wan_mac=$(mtd_get_mac_ascii factory wanmac) | ||||
| diff --git a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac | ||||
| old mode 100644 | ||||
| new mode 100755 | ||||
| index d5bd50fdf7..7ead3274b0 | ||||
| --- a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac | ||||
| +++ b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac | ||||
| @@ -33,6 +33,11 @@ case "$board" in | ||||
|  		[ "$PHYNBR" = "1" ] && \ | ||||
|  		macaddr_setbit_la "$(macaddr_add $hw_mac_addr 0x100000)" > /sys${DEVPATH}/macaddress | ||||
|  		;; | ||||
| +	cybertan,rap63xc-211g) | ||||
| +		hw_mac_addr="$(mtd_get_mac_binary Factory 0x4)" | ||||
| +		[ "$PHYNBR" = "0" ] && macaddr_add $hw_mac_addr 2 > /sys${DEVPATH}/macaddress | ||||
| +		[ "$PHYNBR" = "1" ] && macaddr_add $hw_mac_addr 3 > /sys${DEVPATH}/macaddress | ||||
| +		;; | ||||
|  	dlink,dap-1620-b1|\ | ||||
|  	dlink,dir-853-a1) | ||||
|  		lan_mac_addr="$(mtd_get_mac_binary factory 0xe000)" | ||||
| --  | ||||
| 2.17.1 | ||||
|  | ||||
							
								
								
									
										28
									
								
								patches/0081-ipq50xx-fix-compile-error-with-scsi-core.patch
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										28
									
								
								patches/0081-ipq50xx-fix-compile-error-with-scsi-core.patch
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| From c3b15680de7b17c2c67c9d523463d8689cb811e0 Mon Sep 17 00:00:00 2001 | ||||
| From: "wingate.chi" <wingate.chi@cybertan.com.tw> | ||||
| Date: Mon, 2 Dec 2024 03:16:27 +0000 | ||||
| Subject: [PATCH] ipq50xx: fix compile error of scsi-core\n this is reference | ||||
|  qsdk 12.2 SPF | ||||
|  | ||||
| --- | ||||
|  package/kernel/linux/modules/block.mk | 1 - | ||||
|  1 file changed, 1 deletion(-) | ||||
|  mode change 100644 => 100755 package/kernel/linux/modules/block.mk | ||||
|  | ||||
| diff --git a/package/kernel/linux/modules/block.mk b/package/kernel/linux/modules/block.mk | ||||
| old mode 100644 | ||||
| new mode 100755 | ||||
| index 4ee3f78f38..5e8c69a202 | ||||
| --- a/package/kernel/linux/modules/block.mk | ||||
| +++ b/package/kernel/linux/modules/block.mk | ||||
| @@ -525,7 +525,6 @@ define KernelPackage/scsi-core | ||||
|  	CONFIG_BLK_DEV_SD | ||||
|    FILES:= \ | ||||
|  	$(LINUX_DIR)/drivers/scsi/scsi_mod.ko \ | ||||
| -	$(LINUX_DIR)/drivers/scsi/scsi_common.ko \ | ||||
|  	$(LINUX_DIR)/drivers/scsi/sd_mod.ko | ||||
|    AUTOLOAD:=$(call AutoLoad,40,scsi_mod scsi_common sd_mod,1) | ||||
|  endef | ||||
| --  | ||||
| 2.17.1 | ||||
|  | ||||
							
								
								
									
										17
									
								
								profiles/cybertan_rap630w-312g.yml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										17
									
								
								profiles/cybertan_rap630w-312g.yml
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| --- | ||||
| profile: cybertan_rap630w_312g | ||||
| target: ipq50xx | ||||
| subtarget: generic | ||||
| description: Build image for the Cybertan Wallmount EAP RAP630W-312G | ||||
| image: bin/targets/ipq50xx/generic/openwrt-ipq50xx-cybertan_rap630w_312g-squashfs-sysupgrade.tar | ||||
| feeds: | ||||
|   - name: ipq807x | ||||
|     path: ../../feeds/ipq807x_v5.4 | ||||
| packages: | ||||
|   - ipq50xx | ||||
|   - e2fsprogs | ||||
|   - losetup | ||||
| include: | ||||
|   - ucentral-ap | ||||
| diffconfig: | | ||||
|   CONFIG_KERNEL_IPQ_MEM_PROFILE=512 | ||||
							
								
								
									
										8
									
								
								profiles/cybertan_rap63xc-211g.yml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								profiles/cybertan_rap63xc-211g.yml
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| --- | ||||
| profile: cybertan_rap63xc-211g | ||||
| target: ramips | ||||
| subtarget: mt7621 | ||||
| description: Build image for the Cybertan EAP RAP63XC-211G | ||||
| image: bin/targets/ramips/mt7621/openwrt-ramips-mt7621-cybertan_rap63xc-211g-squashfs-sysupgrade.bin | ||||
| include: | ||||
|   - ucentral-ap | ||||
							
								
								
									
										13
									
								
								profiles/senao_jeap6500.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								profiles/senao_jeap6500.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| --- | ||||
| profile: senao_jeap6500 | ||||
| target: mediatek | ||||
| subtarget: mt7981 | ||||
| description: Build image for the SENAO JEAP6500 | ||||
| image: bin/targets/mediatek/mt7981/openwrt-mediatek-mt7981-senao_jeap6500-squashfs-sysupgrade.bin | ||||
| feeds: | ||||
|   - name: mediatek | ||||
|     path: ../../feeds/mediatek-sdk | ||||
| packages: | ||||
|   - mediatek | ||||
| include: | ||||
|   - ucentral-ap | ||||
		Reference in New Issue
	
	Block a user