ipq40xx: add support for Plasma Cloud PA1200
Device specifications:
* QCA IPQ4018
* 256 MB of RAM
* 32 MB of SPI NOR flash (w25q256)
  - 2x 15 MB available; but one of the 15 MB regions is the recovery image
* 2T2R 2.4 GHz
  - QCA4019 hw1.0 (SoC)
  - requires special BDF in QCA4019/hw1.0/board-2.bin with
    bus=ahb,bmi-chip-id=0,bmi-board-id=16,variant=PlasmaCloud-PA1200
* 2T2R 5 GHz
  - QCA4019 hw1.0 (SoC)
  - requires special BDF in QCA4019/hw1.0/board-2.bin with
    bus=ahb,bmi-chip-id=0,bmi-board-id=17,variant=PlasmaCloud-PA1200
* 3x GPIO-LEDs for status (cyan, purple, yellow)
* 1x GPIO-button (reset)
* 1x USB (xHCI)
* TTL pins are on board (arrow points to VCC, then follows: GND, TX, RX)
* 2x gigabit ethernet
  - phy@mdio4:
    + Label: Ethernet 1
    + gmac0 (ethaddr) in original firmware
    + used as LAN interface
  - phy@mdio3:
    + Label: Ethernet 2
    + gmac1 (eth1addr) in original firmware
    + 802.3af/at POE(+)
    + used as WAN interface
* 12V/24V 1A DC
Flashing instructions:
The tool ap51-flash (https://github.com/ap51-flash/ap51-flash) should be
used to transfer the factory image to the u-boot when the device boots up.
Signed-off-by: Marek Lindner <marek.lindner@kaiwoo.ai>
[sven@narfation.org: prepare commit message, rebase, use all LEDs, switch
to dualboot_datachk upgrade script, use eth1 as designated WAN interface]
Signed-off-by: Sven Eckelmann <sven@narfation.org>
			
			
This commit is contained in:
		 Marek Lindner
					Marek Lindner
				
			
				
					committed by
					
						 Petr Štetiar
						Petr Štetiar
					
				
			
			
				
	
			
			
			 Petr Štetiar
						Petr Štetiar
					
				
			
						parent
						
							8a891bfaa0
						
					
				
				
					commit
					ea5bb6bbfe
				
			| @@ -36,7 +36,8 @@ edgecore,ecw5211 |\ | |||||||
| glinet,gl-b1300 |\ | glinet,gl-b1300 |\ | ||||||
| luma,wrtq-329acn |\ | luma,wrtq-329acn |\ | ||||||
| openmesh,a42 |\ | openmesh,a42 |\ | ||||||
| openmesh,a62) | openmesh,a62 |\ | ||||||
|  | plasmacloud,pa1200) | ||||||
| 	ubootenv_add_uci_config "/dev/mtd5" "0x0" "0x10000" "0x10000" | 	ubootenv_add_uci_config "/dev/mtd5" "0x0" "0x10000" "0x10000" | ||||||
| 	;; | 	;; | ||||||
| buffalo,wtr-m2133hp) | buffalo,wtr-m2133hp) | ||||||
|   | |||||||
| @@ -42,6 +42,7 @@ ALLWIFIBOARDS:= \ | |||||||
| 	linksys_mr8300-v0 \ | 	linksys_mr8300-v0 \ | ||||||
| 	luma_wrtq-329acn \ | 	luma_wrtq-329acn \ | ||||||
| 	mobipromo_cm520-79f \ | 	mobipromo_cm520-79f \ | ||||||
|  | 	plasmacloud_pa1200 \ | ||||||
| 	qxwlan_e2600ac | 	qxwlan_e2600ac | ||||||
|  |  | ||||||
| ALLWIFIPACKAGES:=$(foreach BOARD,$(ALLWIFIBOARDS),ipq-wifi-$(BOARD)) | ALLWIFIPACKAGES:=$(foreach BOARD,$(ALLWIFIBOARDS),ipq-wifi-$(BOARD)) | ||||||
| @@ -120,6 +121,7 @@ $(eval $(call generate-ipq-wifi-package,linksys_ea8300,Linksys EA8300)) | |||||||
| $(eval $(call generate-ipq-wifi-package,linksys_mr8300-v0,Linksys MR8300)) | $(eval $(call generate-ipq-wifi-package,linksys_mr8300-v0,Linksys MR8300)) | ||||||
| $(eval $(call generate-ipq-wifi-package,luma_wrtq-329acn,Luma WRTQ-329ACN)) | $(eval $(call generate-ipq-wifi-package,luma_wrtq-329acn,Luma WRTQ-329ACN)) | ||||||
| $(eval $(call generate-ipq-wifi-package,mobipromo_cm520-79f,MobiPromo CM520-79F)) | $(eval $(call generate-ipq-wifi-package,mobipromo_cm520-79f,MobiPromo CM520-79F)) | ||||||
|  | $(eval $(call generate-ipq-wifi-package,plasmacloud_pa1200,Plasma Cloud PA1200)) | ||||||
| $(eval $(call generate-ipq-wifi-package,qxwlan_e2600ac,Qxwlan E2600AC)) | $(eval $(call generate-ipq-wifi-package,qxwlan_e2600ac,Qxwlan E2600AC)) | ||||||
|  |  | ||||||
| $(foreach PACKAGE,$(ALLWIFIPACKAGES),$(eval $(call BuildPackage,$(PACKAGE)))) | $(foreach PACKAGE,$(ALLWIFIPACKAGES),$(eval $(call BuildPackage,$(PACKAGE)))) | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								package/firmware/ipq-wifi/board-plasmacloud_pa1200.ipq4019
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								package/firmware/ipq-wifi/board-plasmacloud_pa1200.ipq4019
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -7,7 +7,7 @@ | |||||||
| # | # | ||||||
|  |  | ||||||
| usage() { | usage() { | ||||||
| 	echo "Usage: $0 <OM2P|OM5P|OM5PAC|MR600|MR900|MR1750|A60|A42|A62|PA300> <out file path> <kernel path> <rootfs path>" | 	echo "Usage: $0 <OM2P|OM5P|OM5PAC|MR600|MR900|MR1750|A60|A42|A62|PA300|PA1200> <out file path> <kernel path> <rootfs path>" | ||||||
| 	rm -f $CFG_OUT | 	rm -f $CFG_OUT | ||||||
| 	exit 1 | 	exit 1 | ||||||
| } | } | ||||||
| @@ -33,7 +33,7 @@ case $CE_TYPE in | |||||||
| 		SIZE_FACTOR=1 | 		SIZE_FACTOR=1 | ||||||
| 		SIZE_FORMAT="%d" | 		SIZE_FORMAT="%d" | ||||||
| 		;; | 		;; | ||||||
| 	A42) | 	A42|PA1200) | ||||||
| 		MAX_PART_SIZE=15616 | 		MAX_PART_SIZE=15616 | ||||||
| 		KERNEL_FLASH_ADDR=0x180000 | 		KERNEL_FLASH_ADDR=0x180000 | ||||||
| 		SIZE_FACTOR=1024 | 		SIZE_FACTOR=1024 | ||||||
|   | |||||||
| @@ -17,7 +17,8 @@ ipq40xx_setup_interfaces() | |||||||
| 	alfa-network,ap120c-ac|\ | 	alfa-network,ap120c-ac|\ | ||||||
| 	engenius,emr3500|\ | 	engenius,emr3500|\ | ||||||
| 	engenius,ens620ext|\ | 	engenius,ens620ext|\ | ||||||
| 	luma,wrtq-329acn) | 	luma,wrtq-329acn|\ | ||||||
|  | 	plasmacloud,pa1200) | ||||||
| 		ucidef_set_interfaces_lan_wan "eth0" "eth1" | 		ucidef_set_interfaces_lan_wan "eth0" "eth1" | ||||||
| 		;; | 		;; | ||||||
| 	aruba,ap-303|\ | 	aruba,ap-303|\ | ||||||
|   | |||||||
| @@ -101,6 +101,7 @@ case "$FIRMWARE" in | |||||||
| 	luma,wrtq-329acn|\ | 	luma,wrtq-329acn|\ | ||||||
| 	openmesh,a42 |\ | 	openmesh,a42 |\ | ||||||
| 	openmesh,a62 |\ | 	openmesh,a62 |\ | ||||||
|  | 	plasmacloud,pa1200 |\ | ||||||
| 	qxwlan,e2600ac-c1 |\ | 	qxwlan,e2600ac-c1 |\ | ||||||
| 	qxwlan,e2600ac-c2 |\ | 	qxwlan,e2600ac-c2 |\ | ||||||
| 	unielec,u4019-32m) | 	unielec,u4019-32m) | ||||||
| @@ -198,6 +199,7 @@ case "$FIRMWARE" in | |||||||
| 	luma,wrtq-329acn|\ | 	luma,wrtq-329acn|\ | ||||||
| 	openmesh,a42 |\ | 	openmesh,a42 |\ | ||||||
| 	openmesh,a62 |\ | 	openmesh,a62 |\ | ||||||
|  | 	plasmacloud,pa1200 |\ | ||||||
| 	qxwlan,e2600ac-c1 |\ | 	qxwlan,e2600ac-c1 |\ | ||||||
| 	qxwlan,e2600ac-c2 |\ | 	qxwlan,e2600ac-c2 |\ | ||||||
| 	unielec,u4019-32m) | 	unielec,u4019-32m) | ||||||
|   | |||||||
| @@ -44,6 +44,7 @@ platform_do_upgrade_dualboot_datachk() { | |||||||
| 	# boot anymore to Linux until it was reflashed with ap51-flash. | 	# boot anymore to Linux until it was reflashed with ap51-flash. | ||||||
| 	local next_boot_part="1" | 	local next_boot_part="1" | ||||||
| 	case "$(board_name)" in | 	case "$(board_name)" in | ||||||
|  | 	plasmacloud,pa1200|\ | ||||||
| 	openmesh,a42) | 	openmesh,a42) | ||||||
| 		primary_kernel_mtd=8 | 		primary_kernel_mtd=8 | ||||||
| 		;; | 		;; | ||||||
|   | |||||||
| @@ -111,7 +111,8 @@ platform_do_upgrade() { | |||||||
| 		nand_do_upgrade "$1" | 		nand_do_upgrade "$1" | ||||||
| 		;; | 		;; | ||||||
| 	openmesh,a42 |\ | 	openmesh,a42 |\ | ||||||
| 	openmesh,a62) | 	openmesh,a62 |\ | ||||||
|  | 	plasmacloud,pa1200) | ||||||
| 		PART_NAME="inactive" | 		PART_NAME="inactive" | ||||||
| 		platform_do_upgrade_dualboot_datachk "$1" | 		platform_do_upgrade_dualboot_datachk "$1" | ||||||
| 		;; | 		;; | ||||||
|   | |||||||
| @@ -0,0 +1,197 @@ | |||||||
|  | // SPDX-License-Identifier: GPL-2.0-or-later OR MIT | ||||||
|  | /* Copyright (c) 2017-2020, Sven Eckelmann <sven@narfation.org> | ||||||
|  |  * Copyright (c) 2018, Marek Lindner <marek.lindner@kaiwoo.ai> | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include "qcom-ipq4019.dtsi" | ||||||
|  | #include <dt-bindings/gpio/gpio.h> | ||||||
|  | #include <dt-bindings/input/input.h> | ||||||
|  | #include <dt-bindings/soc/qcom,tcsr.h> | ||||||
|  |  | ||||||
|  | / { | ||||||
|  | 	model = "Plasma Cloud PA1200"; | ||||||
|  | 	compatible = "plasmacloud,pa1200"; | ||||||
|  |  | ||||||
|  | 	soc { | ||||||
|  | 		rng@22000 { | ||||||
|  | 			status = "okay"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		mdio@90000 { | ||||||
|  | 			status = "okay"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		ess-psgmii@98000 { | ||||||
|  | 			status = "okay"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		tcsr@194b000 { | ||||||
|  | 			/* select hostmode */ | ||||||
|  | 			compatible = "qcom,tcsr"; | ||||||
|  | 			reg = <0x194b000 0x100>; | ||||||
|  | 			qcom,usb-hsphy-mode-select = <TCSR_USB_HSPHY_HOST_MODE>; | ||||||
|  | 			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: usb2@60f8800 { | ||||||
|  | 			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 = &led_status_purple; | ||||||
|  | 		led-failsafe = &led_status_yellow; | ||||||
|  | 		led-running = &led_status_cyan; | ||||||
|  | 		led-upgrade = &led_status_yellow; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	leds { | ||||||
|  | 		compatible = "gpio-leds"; | ||||||
|  |  | ||||||
|  | 		led_status_cyan: status_cyan { | ||||||
|  | 			label = "cyan:status"; | ||||||
|  | 			gpios = <&tlmm 0 GPIO_ACTIVE_HIGH>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		led_status_purple: status_purple { | ||||||
|  | 			label = "purple:status"; | ||||||
|  | 			gpios = <&tlmm 1 GPIO_ACTIVE_HIGH>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		led_status_yellow: status_yellow { | ||||||
|  | 			label = "yellow:status"; | ||||||
|  | 			gpios = <&tlmm 2 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 = "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>; | ||||||
|  |  | ||||||
|  | 	flash@0 { | ||||||
|  | 		#address-cells = <1>; | ||||||
|  | 		#size-cells = <1>; | ||||||
|  | 		compatible = "jedec,spi-nor"; | ||||||
|  | 		reg = <0>; | ||||||
|  | 		spi-max-frequency = <24000000>; | ||||||
|  | 		/* partitions are passed via bootloader */ | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &blsp1_uart1 { | ||||||
|  | 	pinctrl-0 = <&serial_pins>; | ||||||
|  | 	pinctrl-names = "default"; | ||||||
|  | 	status = "okay"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &cryptobam { | ||||||
|  | 	status = "okay"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &gmac0 { | ||||||
|  | 	qcom,phy_mdio_addr = <4>; | ||||||
|  | 	qcom,poll_required = <1>; | ||||||
|  | 	qcom,forced_speed = <1000>; | ||||||
|  | 	qcom,forced_duplex = <1>; | ||||||
|  | 	vlan_tag = <2 0x20>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &gmac1 { | ||||||
|  | 	qcom,phy_mdio_addr = <3>; | ||||||
|  | 	qcom,poll_required = <1>; | ||||||
|  | 	qcom,forced_speed = <1000>; | ||||||
|  | 	qcom,forced_duplex = <1>; | ||||||
|  | 	vlan_tag = <1 0x10>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &usb2_hs_phy { | ||||||
|  | 	status = "okay"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &wifi0 { | ||||||
|  | 	status = "okay"; | ||||||
|  | 	qcom,ath10k-calibration-variant = "PlasmaCloud-PA1200"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &wifi1 { | ||||||
|  | 	status = "okay"; | ||||||
|  | 	qcom,ath10k-calibration-variant = "PlasmaCloud-PA1200"; | ||||||
|  | }; | ||||||
| @@ -648,6 +648,22 @@ define Device/openmesh_a62 | |||||||
| endef | endef | ||||||
| TARGET_DEVICES += openmesh_a62 | TARGET_DEVICES += openmesh_a62 | ||||||
|  |  | ||||||
|  | define Device/plasmacloud_pa1200 | ||||||
|  | 	$(call Device/FitImageLzma) | ||||||
|  | 	DEVICE_VENDOR := Plasma Cloud | ||||||
|  | 	DEVICE_MODEL := PA1200 | ||||||
|  | 	SOC := qcom-ipq4018 | ||||||
|  | 	DEVICE_DTS_CONFIG := config@pc.pa1200 | ||||||
|  | 	BLOCKSIZE := 64k | ||||||
|  | 	KERNEL = kernel-bin | lzma | fit lzma $$(DTS_DIR)/$$(DEVICE_DTS).dtb | pad-to $$(BLOCKSIZE) | ||||||
|  | 	IMAGE_SIZE := 15616k | ||||||
|  | 	IMAGES += factory.bin | ||||||
|  | 	IMAGE/factory.bin := append-rootfs | pad-rootfs | openmesh-image ce_type=PA1200 | ||||||
|  | 	IMAGE/sysupgrade.bin/squashfs := append-rootfs | pad-rootfs | sysupgrade-tar rootfs=$$$$@ | append-metadata | ||||||
|  | 	DEVICE_PACKAGES := uboot-envtools ipq-wifi-plasmacloud-pa1200 | ||||||
|  | endef | ||||||
|  | TARGET_DEVICES += plasmacloud_pa1200 | ||||||
|  |  | ||||||
| define Device/qcom_ap-dk01.1-c1 | define Device/qcom_ap-dk01.1-c1 | ||||||
| 	DEVICE_VENDOR := Qualcomm Atheros | 	DEVICE_VENDOR := Qualcomm Atheros | ||||||
| 	DEVICE_MODEL := AP-DK01.1 | 	DEVICE_MODEL := AP-DK01.1 | ||||||
|   | |||||||
| @@ -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,54 @@ dtb-$(CONFIG_ARCH_QCOM) += \ | @@ -837,11 +837,55 @@ 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 \ | ||||||
| @@ -31,6 +31,7 @@ Signed-off-by: John Crispin <john@phrozen.org> | |||||||
| +	qcom-ipq4018-meshpoint-one.dtb \ | +	qcom-ipq4018-meshpoint-one.dtb \ | ||||||
| +	qcom-ipq4018-nbg6617.dtb \ | +	qcom-ipq4018-nbg6617.dtb \ | ||||||
| +	qcom-ipq4019-oap100.dtb \ | +	qcom-ipq4019-oap100.dtb \ | ||||||
|  | +	qcom-ipq4018-pa1200.dtb \ | ||||||
| +	qcom-ipq4018-rt-ac58u.dtb \ | +	qcom-ipq4018-rt-ac58u.dtb \ | ||||||
| +	qcom-ipq4018-wre6606.dtb \ | +	qcom-ipq4018-wre6606.dtb \ | ||||||
| +	qcom-ipq4018-wrtq-329acn.dtb \ | +	qcom-ipq4018-wrtq-329acn.dtb \ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user