ipq40xx: add support for EnGenius EMR3500
SOC: IPQ4018 / QCA Dakota CPU: Quad-Core ARMv7 Processor rev 5 (v7l) Cortex-A7 DRAM: 256 MiB NOR: 32 MiB ETH: Qualcomm Atheros QCA8072 (2 ports) USB: 1 x 2.0 (Host controller in the SoC) WLAN1: Qualcomm Atheros QCA4018 2.4GHz 802.11bgn 2:2x2 WLAN2: Qualcomm Atheros QCA4018 5GHz 802.11a/n/ac 2:2x2 INPUT: RESET Button LEDS: White, Blue, Red, Orange Flash instruction: From EnGenius firmware to OpenWrt firmware: In Firmware Upgrade page, upgrade your openwrt-ipq40xx-generic-engenius_emr3500-squashfs-factory.bin directly. From OpenWrt firmware to EnGenius firmware: 1. Setup a TFTP server on your computer and configure static IP to 192.168.99.8 Put the EnGenius firmware in the TFTP server directory on your computer. 2. Power up EMR3500. Press 4 and then press any key to enter u-boot. 3. Download EnGenius firmware (IPQ40xx) # tftpboot 0x84000000 openwrt-ipq40xx-emr3500-nor-fw-s.img 4. Flash the firmware (IPQ40xx) # imgaddr=0x84000000 && source 0x84000000:script 5. Reboot (IPQ40xx) # reset Signed-off-by: Yen-Ting-Shen <frank.shen@senao.com> [squashed update patch, updated to 5.4, dropped BOARD_NAME, migrated to SOC] Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
This commit is contained in:
		 Yen-Ting-Shen
					Yen-Ting-Shen
				
			
				
					committed by
					
						 Christian Lamparter
						Christian Lamparter
					
				
			
			
				
	
			
			
			 Christian Lamparter
						Christian Lamparter
					
				
			
						parent
						
							6785695056
						
					
				
				
					commit
					3f61e5e1b9
				
			| @@ -32,6 +32,7 @@ ALLWIFIBOARDS:= \ | |||||||
| 	dlink_dap2610 \ | 	dlink_dap2610 \ | ||||||
| 	engenius_eap2200 \ | 	engenius_eap2200 \ | ||||||
| 	engenius_emd1 \ | 	engenius_emd1 \ | ||||||
|  | 	engenius_emr3500 \ | ||||||
| 	ezviz_cs-w3-wd1200g-eup \ | 	ezviz_cs-w3-wd1200g-eup \ | ||||||
| 	linksys_ea8300 \ | 	linksys_ea8300 \ | ||||||
| 	mobipromo_cm520-79f \ | 	mobipromo_cm520-79f \ | ||||||
| @@ -103,6 +104,7 @@ $(eval $(call generate-ipq-wifi-package,cellc_rtl30vw, Cell C RTL30VW)) | |||||||
| $(eval $(call generate-ipq-wifi-package,dlink_dap2610,D-Link DAP-2610)) | $(eval $(call generate-ipq-wifi-package,dlink_dap2610,D-Link DAP-2610)) | ||||||
| $(eval $(call generate-ipq-wifi-package,engenius_eap2200,EnGenius EAP2200)) | $(eval $(call generate-ipq-wifi-package,engenius_eap2200,EnGenius EAP2200)) | ||||||
| $(eval $(call generate-ipq-wifi-package,engenius_emd1,EnGenius EMD1)) | $(eval $(call generate-ipq-wifi-package,engenius_emd1,EnGenius EMD1)) | ||||||
|  | $(eval $(call generate-ipq-wifi-package,engenius_emr3500,EnGenius EMR3500)) | ||||||
| $(eval $(call generate-ipq-wifi-package,ezviz_cs-w3-wd1200g-eup,EZVIZ CS-W3-WD1200G EUP)) | $(eval $(call generate-ipq-wifi-package,ezviz_cs-w3-wd1200g-eup,EZVIZ CS-W3-WD1200G EUP)) | ||||||
| $(eval $(call generate-ipq-wifi-package,linksys_ea8300,Linksys EA8300)) | $(eval $(call generate-ipq-wifi-package,linksys_ea8300,Linksys EA8300)) | ||||||
| $(eval $(call generate-ipq-wifi-package,mobipromo_cm520-79f,MobiPromo CM520-79F)) | $(eval $(call generate-ipq-wifi-package,mobipromo_cm520-79f,MobiPromo CM520-79F)) | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								package/firmware/ipq-wifi/board-engenius_emr3500.qca4019
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								package/firmware/ipq-wifi/board-engenius_emr3500.qca4019
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -15,6 +15,7 @@ ipq40xx_setup_interfaces() | |||||||
| 	8dev,habanero-dvk|\ | 	8dev,habanero-dvk|\ | ||||||
| 	8dev,jalapeno|\ | 	8dev,jalapeno|\ | ||||||
| 	alfa-network,ap120c-ac|\ | 	alfa-network,ap120c-ac|\ | ||||||
|  | 	engenius,emr3500|\ | ||||||
| 	engenius,ens620ext) | 	engenius,ens620ext) | ||||||
| 		ucidef_set_interfaces_lan_wan "eth0" "eth1" | 		ucidef_set_interfaces_lan_wan "eth0" "eth1" | ||||||
| 		;; | 		;; | ||||||
| @@ -130,6 +131,11 @@ ipq40xx_setup_macs() | |||||||
| 		lan_mac=$(mtd_get_mac_ascii 0:APPSBLENV ethaddr) | 		lan_mac=$(mtd_get_mac_ascii 0:APPSBLENV ethaddr) | ||||||
| 		label_mac=$lan_mac | 		label_mac=$lan_mac | ||||||
| 		;; | 		;; | ||||||
|  | 	engenius,emr3500) | ||||||
|  | 		wan_mac=$(mtd_get_mac_ascii 0:APPSBLENV wanaddr) | ||||||
|  | 		lan_mac=$(mtd_get_mac_ascii 0:APPSBLENV ethaddr) | ||||||
|  | 		label_mac=$wan_mac | ||||||
|  | 		;; | ||||||
| 	engenius,ens620ext) | 	engenius,ens620ext) | ||||||
| 		wan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr) | 		wan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr) | ||||||
| 		lan_mac=$(macaddr_add "$wan_mac" 1) | 		lan_mac=$(macaddr_add "$wan_mac" 1) | ||||||
|   | |||||||
| @@ -101,6 +101,10 @@ case "$FIRMWARE" in | |||||||
| 		caldata_extract "0:ART" 0x1000 0x2f20 | 		caldata_extract "0:ART" 0x1000 0x2f20 | ||||||
| 		ath10k_patch_mac $(mtd_get_mac_ascii 0:APPSBLENV wlanaddr) | 		ath10k_patch_mac $(mtd_get_mac_ascii 0:APPSBLENV wlanaddr) | ||||||
| 		;; | 		;; | ||||||
|  | 	engenius,emr3500) | ||||||
|  | 		caldata_extract "0:ART" 0x1000 0x2f20 | ||||||
|  | 		ath10k_patch_mac $(mtd_get_mac_ascii 0:APPSBLENV ethaddr) | ||||||
|  | 		;; | ||||||
| 	engenius,ens620ext) | 	engenius,ens620ext) | ||||||
| 		caldata_extract "ART" 0x1000 0x2f20 | 		caldata_extract "ART" 0x1000 0x2f20 | ||||||
| 		ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) +2) | 		ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) +2) | ||||||
| @@ -185,6 +189,10 @@ case "$FIRMWARE" in | |||||||
| 		caldata_extract "0:ART" 0x5000 0x2f20 | 		caldata_extract "0:ART" 0x5000 0x2f20 | ||||||
| 		ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii 0:APPSBLENV wlanaddr) +1) | 		ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii 0:APPSBLENV wlanaddr) +1) | ||||||
| 		;; | 		;; | ||||||
|  | 	engenius,emr3500) | ||||||
|  | 		caldata_extract "0:ART" 0x5000 0x2f20 | ||||||
|  | 		ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii 0:APPSBLENV ethaddr) +1) | ||||||
|  | 		;; | ||||||
| 	engenius,ens620ext) | 	engenius,ens620ext) | ||||||
| 		caldata_extract "ART" 0x5000 0x2f20 | 		caldata_extract "ART" 0x5000 0x2f20 | ||||||
| 		ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) +3) | 		ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) +3) | ||||||
|   | |||||||
| @@ -0,0 +1,235 @@ | |||||||
|  | // SPDX-License-Identifier: GPL-2.0-or-later | ||||||
|  |  | ||||||
|  | #include "qcom-ipq4019.dtsi" | ||||||
|  | #include <dt-bindings/gpio/gpio.h> | ||||||
|  | #include <dt-bindings/input/input.h> | ||||||
|  | #include <dt-bindings/soc/qcom,tcsr.h> | ||||||
|  |  | ||||||
|  | / { | ||||||
|  | 	model = "EnGenius EMR3500"; | ||||||
|  | 	compatible = "engenius,emr3500"; | ||||||
|  |  | ||||||
|  | 	soc { | ||||||
|  | 		rng@22000 { | ||||||
|  | 			status = "okay"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		mdio@90000 { | ||||||
|  | 			status = "okay"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		ess-psgmii@98000 { | ||||||
|  | 			status = "okay"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		tcsr@1949000 { | ||||||
|  | 			compatible = "qcom,tcsr"; | ||||||
|  | 			reg = <0x1949000 0x100>; | ||||||
|  | 			qcom,wifi_glb_cfg = <TCSR_WIFI_GLB_CFG>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		ess_tcsr@1953000 { | ||||||
|  | 			compatible = "qcom,tcsr"; | ||||||
|  | 			reg = <0x1953000 0x1000>; | ||||||
|  | 			qcom,ess-interface-select = <TCSR_ESS_PSGMII>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		tcsr@1957000 { | ||||||
|  | 			compatible = "qcom,tcsr"; | ||||||
|  | 			reg = <0x1957000 0x100>; | ||||||
|  | 			qcom,wifi_noc_memtype_m0_m2 = <TCSR_WIFI_NOC_MEMTYPE_M0_M2>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		usb2_hs_phy: hsphy@a8000 { | ||||||
|  | 			status = "okay"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		crypto@8e3a000 { | ||||||
|  | 			status = "okay"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		watchdog@b017000 { | ||||||
|  | 			status = "okay"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		ess-switch@c000000 { | ||||||
|  | 			status = "okay"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		edma@c080000 { | ||||||
|  | 			status = "okay"; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	keys { | ||||||
|  | 		compatible = "gpio-keys"; | ||||||
|  |  | ||||||
|  | 		reset { | ||||||
|  | 			label = "reset"; | ||||||
|  | 			gpios = <&tlmm 59 GPIO_ACTIVE_LOW>; | ||||||
|  | 			linux,code = <KEY_RESTART>; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	aliases { | ||||||
|  | 		led-boot = &power; | ||||||
|  | 		led-failsafe = &power; | ||||||
|  | 		led-running = &power; | ||||||
|  | 		led-upgrade = &power; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	leds { | ||||||
|  | 		compatible = "gpio-leds"; | ||||||
|  |  | ||||||
|  | 		power: white { | ||||||
|  | 			label = "emr3500:white:power"; | ||||||
|  | 			gpios = <&tlmm 4 GPIO_ACTIVE_HIGH>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		blue { | ||||||
|  | 			label = "emr3500:blue"; | ||||||
|  | 			gpios = <&tlmm 2 GPIO_ACTIVE_HIGH>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		red { | ||||||
|  | 			label = "emr3500:red"; | ||||||
|  | 			gpios = <&tlmm 0 GPIO_ACTIVE_HIGH>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		orange { | ||||||
|  | 			label = "emr3500:orange"; | ||||||
|  | 			gpios = <&tlmm 1 GPIO_ACTIVE_HIGH>; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &tlmm { | ||||||
|  | 	serial_pins: serial_pinmux { | ||||||
|  | 		mux { | ||||||
|  | 			pins = "gpio60", "gpio61"; | ||||||
|  | 			function = "blsp_uart0"; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	spi_0_pins: spi_0_pinmux { | ||||||
|  | 		pin { | ||||||
|  | 			function = "blsp_spi0"; | ||||||
|  | 			pins = "gpio54", "gpio55", "gpio56", "gpio57"; | ||||||
|  | 			drive-strength = <12>; | ||||||
|  | 			bias-disable; | ||||||
|  | 		}; | ||||||
|  | 		pin_cs { | ||||||
|  | 			function = "gpio"; | ||||||
|  | 			pins = "gpio54"; | ||||||
|  | 			drive-strength = <2>; | ||||||
|  | 			bias-disable; | ||||||
|  | 			output-high; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &blsp_dma { | ||||||
|  | 	status = "okay"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &blsp1_spi1 { | ||||||
|  | 	pinctrl-0 = <&spi_0_pins>; | ||||||
|  | 	pinctrl-names = "default"; | ||||||
|  | 	status = "okay"; | ||||||
|  | 	cs-gpios = <&tlmm 54 GPIO_ACTIVE_HIGH>; | ||||||
|  |  | ||||||
|  | 	m25p80@0 { | ||||||
|  | 		compatible = "jedec,spi-nor"; | ||||||
|  | 		reg = <0>; | ||||||
|  | 		spi-max-frequency = <24000000>; | ||||||
|  | 		partitions { | ||||||
|  | 			compatible = "fixed-partitions"; | ||||||
|  | 			#address-cells = <1>; | ||||||
|  | 			#size-cells = <1>; | ||||||
|  |  | ||||||
|  | 			partition@0 { | ||||||
|  | 				label = "0:SBL1"; | ||||||
|  | 				reg = <0x00000000 0x00040000>; | ||||||
|  | 				read-only; | ||||||
|  | 			}; | ||||||
|  | 			partition@40000 { | ||||||
|  | 				label = "0:MIBIB"; | ||||||
|  | 				reg = <0x00040000 0x00020000>; | ||||||
|  | 				read-only; | ||||||
|  | 			}; | ||||||
|  | 			partition@60000 { | ||||||
|  | 				label = "0:QSEE"; | ||||||
|  | 				reg = <0x00060000 0x00060000>; | ||||||
|  | 				read-only; | ||||||
|  | 			}; | ||||||
|  | 			partition@c0000 { | ||||||
|  | 				label = "0:CDT"; | ||||||
|  | 				reg = <0x000c0000 0x00010000>; | ||||||
|  | 				read-only; | ||||||
|  | 			}; | ||||||
|  | 			partition@d0000 { | ||||||
|  | 				label = "0:DDRPARAMS"; | ||||||
|  | 				reg = <0x000d0000 0x00010000>; | ||||||
|  | 				read-only; | ||||||
|  | 			}; | ||||||
|  | 			partition@e0000 { | ||||||
|  | 				label = "0:APPSBLENV"; | ||||||
|  | 				reg = <0x000e0000 0x00010000>; | ||||||
|  | 				read-only; | ||||||
|  | 			}; | ||||||
|  | 			partition@f0000 { | ||||||
|  | 				label = "0:APPSBL"; | ||||||
|  | 				reg = <0x000f0000 0x00080000>; | ||||||
|  | 				read-only; | ||||||
|  | 			}; | ||||||
|  | 			partition@170000 { | ||||||
|  | 				label = "0:ART"; | ||||||
|  | 				reg = <0x00170000 0x00010000>; | ||||||
|  | 				read-only; | ||||||
|  | 			}; | ||||||
|  | 			partition@180000 { | ||||||
|  | 				label = "userconfig"; | ||||||
|  | 				reg = <0x00180000 0x00080000>; | ||||||
|  | 				read-only; | ||||||
|  | 			}; | ||||||
|  | 			partition@200000 { | ||||||
|  | 				compatible = "denx,fit"; | ||||||
|  | 				label = "firmware"; | ||||||
|  | 				reg = <0x200000 0x1e00000>; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &blsp1_uart1 { | ||||||
|  | 	pinctrl-0 = <&serial_pins>; | ||||||
|  | 	pinctrl-names = "default"; | ||||||
|  | 	status = "okay"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &cryptobam { | ||||||
|  | 	status = "okay"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &gmac0 { | ||||||
|  | 	vlan_tag = <1 0x10>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &gmac1 { | ||||||
|  | 	vlan_tag = <2 0x20>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &usb2_hs_phy { | ||||||
|  | 	status = "okay"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &wifi0 { | ||||||
|  | 	status = "okay"; | ||||||
|  | 	qcom,ath10k-calibration-variant = "EnGenius-EMR3500"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &wifi1 { | ||||||
|  | 	status = "okay"; | ||||||
|  | 	qcom,ath10k-calibration-variant = "EnGenius-EMR3500"; | ||||||
|  | }; | ||||||
| @@ -378,6 +378,20 @@ define Device/engenius_emd1 | |||||||
| endef | endef | ||||||
| TARGET_DEVICES += engenius_emd1 | TARGET_DEVICES += engenius_emd1 | ||||||
|  |  | ||||||
|  | define Device/engenius_emr3500 | ||||||
|  | 	$(call Device/FitImage) | ||||||
|  | 	DEVICE_VENDOR := EnGenius | ||||||
|  | 	DEVICE_MODEL := EMR3500 | ||||||
|  | 	DEVICE_DTS_CONFIG := config@4 | ||||||
|  | 	SOC := qcom-ipq4018 | ||||||
|  | 	KERNEL_SIZE := 4096k | ||||||
|  | 	IMAGE_SIZE := 30720k | ||||||
|  | 	IMAGES := sysupgrade.bin factory.bin | ||||||
|  | 	IMAGE/sysupgrade.bin := append-kernel | append-rootfs | pad-rootfs | append-metadata | ||||||
|  | 	IMAGE/factory.bin := qsdk-ipq-factory-nor | check-size | ||||||
|  | endef | ||||||
|  | TARGET_DEVICES += engenius_emr3500 | ||||||
|  |  | ||||||
| define Device/engenius_ens620ext | define Device/engenius_ens620ext | ||||||
| 	$(call Device/FitImage) | 	$(call Device/FitImage) | ||||||
| 	DEVICE_VENDOR := EnGenius | 	DEVICE_VENDOR := EnGenius | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: John Crispin <john@phrozen.org> | |||||||
|  |  | ||||||
| --- a/arch/arm/boot/dts/Makefile | --- a/arch/arm/boot/dts/Makefile | ||||||
| +++ b/arch/arm/boot/dts/Makefile | +++ b/arch/arm/boot/dts/Makefile | ||||||
| @@ -837,11 +837,47 @@ dtb-$(CONFIG_ARCH_QCOM) += \ | @@ -837,11 +837,48 @@ dtb-$(CONFIG_ARCH_QCOM) += \ | ||||||
|  	qcom-apq8074-dragonboard.dtb \ |  	qcom-apq8074-dragonboard.dtb \ | ||||||
|  	qcom-apq8084-ifc6540.dtb \ |  	qcom-apq8084-ifc6540.dtb \ | ||||||
|  	qcom-apq8084-mtp.dtb \ |  	qcom-apq8084-mtp.dtb \ | ||||||
| @@ -21,6 +21,7 @@ Signed-off-by: John Crispin <john@phrozen.org> | |||||||
| +	qcom-ipq4018-ea6350v3.dtb \ | +	qcom-ipq4018-ea6350v3.dtb \ | ||||||
| +	qcom-ipq4018-eap1300.dtb \ | +	qcom-ipq4018-eap1300.dtb \ | ||||||
| +	qcom-ipq4018-emd1.dtb \ | +	qcom-ipq4018-emd1.dtb \ | ||||||
|  | +	qcom-ipq4018-emr3500.dtb \ | ||||||
| +	qcom-ipq4018-ens620ext.dtb \ | +	qcom-ipq4018-ens620ext.dtb \ | ||||||
| +	qcom-ipq4018-ex6100v2.dtb \ | +	qcom-ipq4018-ex6100v2.dtb \ | ||||||
| +	qcom-ipq4018-ex6150v2.dtb \ | +	qcom-ipq4018-ex6150v2.dtb \ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user