[openwrt/openwrt] ipq40xx: add support for Luma Home WRTQ-329ACN

LEDE Commits lede-commits at lists.infradead.org
Fri Sep 25 13:36:25 EDT 2020


chunkeey pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/e24635710c7e6444afa463c59f3d81fe634eb3c7

commit e24635710c7e6444afa463c59f3d81fe634eb3c7
Author: Tomasz Maciej Nowak <tomek_n at o2.pl>
AuthorDate: Sun Aug 30 13:28:10 2020 +0200

    ipq40xx: add support for Luma Home WRTQ-329ACN
    
    Luma Home WRTQ-329ACN, also known as Luma WiFi System, is a dual-band
    wireless access point.
    
    Specification
    SoC: Qualcomm Atheros IPQ4018
    RAM: 256 MB DDR3
    Flash: 2 MB SPI NOR
           128 MB SPI NAND
    WIFI: 2.4 GHz 2T2R integrated
          5 GHz 2T2R integrated
    Ethernet: 2x 10/100/1000 Mbps QCA8075
    USB: 1x 2.0
    Bluetooth: 1x 4.0 CSR8510 A10, connected to USB bus
    LEDS: 16x multicolor LEDs ring, controlled by MSP430G2403 MCU
    Buttons: 1x GPIO controlled
    EEPROM: 16 Kbit, compatible with AT24C16
    UART: row of 4 holes marked on PCB as J19, starting count from the side
          of J19 marking on PCB
          1. GND, 2. RX, 3. TX, 4. 3.3V
          baud: 115200, parity: none, flow control: none
    
    The device supports OTA or USB flash drive updates, unfotunately they
    are signed. Until the signing key is known, the UART access is mandatory
    for installation. The difficult part is disassembling the casing, there
    are a lot of latches holding it together.
    
    Teardown
    Prepare three thin, but sturdy, prying tools. Place the device with back
    of it facing upwards. Start with the wall having a small notch. Insert
    first tool, until You'll feel resistance and keep it there. Repeat the
    procedure for neighbouring walls. With applying a pressure, one edge of
    the back cover should pop up. Now carefully slide one of the tools to
    free the rest of the latches.
    There's no need to solder pins to the UART holes, You can use hook clips,
    but wiring them outside the casing, will ease debuging and recovery if
    problems occur.
    
    Installation
    1. Prepare TFTP server with OpenWrt initramfs image.
    2. Connect to UART port (don't connect the voltage pin).
    3. Connect to LAN port.
    4. Power on the device, carefully observe the console output and when
       asked quickly enter the failsafe mode.
    5. Invoke 'mount_root'.
    6. After the overlayfs is mounted run:
         fw_setenv bootdelay 3
       This will allow to access U-Boot shell.
    7. Reboot the device and when prompted to stop autoboot, hit any key.
    8. Adjust "ipaddr" and "serverip" addresses in U-Boot environment, use
       'setenv' to do that, then run following commands:
         tftpboot 0x84000000 <openwrt_initramfs_image_name>
         bootm 0x84000000
       and wait till OpenWrt boots.
    9. In OpenWrt command line run following commands:
         fw_setenv openwrt "setenv mtdids nand1=spi_nand; setenv mtdparts mtdparts=spi_nand:-(ubi); ubi part ubi; ubi read 0x84000000 kernel; bootm 0x84000000"
         fw_setenv bootcmd "run openwrt"
    10. Transfer OpenWrt sysupgrade image to /tmp directory and flash it
        with:
         ubirmvol /dev/ubi0 -N ubi_rootfs
         sysupgrade -v -n /tmp/<openwrt_sysupgrade_image_name>
    11. After flashing, the access point will reboot to OpenWrt, then it's
        ready for configuration.
    
    Reverting to OEM firmware
    1. Execute installation guide steps: 1, 2, 3, 7, 8.
    2. In OpenWrt command line run following commands:
         ubirmvol /dev/ubi0 -N rootfs_data
         ubirmvol /dev/ubi0 -N rootfs
         ubirmvol /dev/ubi0 -N kernel
         ubirename /dev/ubi0 kernel1 kernel ubi_rootfs1 ubi_rootfs
         ubimkvol /dev/ubi0 -S 34 -N kernel1
         ubimkvol /dev/ubi0 -S 320 -N ubi_rootfs1
         ubimkvol /dev/ubi0 -S 264 -N rootfs_data
         fw_setenv bootcmd bootipq
    3. Reboot.
    
    Known issues
    The LEDs ring doesn't have any dedicated driver or application to control
    it, the only available option atm is to manipulate it with 'i2cset'
    command. The default action after applying power to device is spinning
    blue light. This light will stay active at all time. To disable it
    install 'i2c-tools' with opkg and run:
     i2cset -y 2 0x48 3 1 0 0 i
    The light will stay off until next cold boot.
    
    Additional information
    After completing 5. step from installation guide, one can disable asking
    for root password on OEM firmware by running:
     sed -e 's/root:x:/root::/' -i /etc/passwd
    This is useful for investigating the OEM firmware. One can look
    at the communication between the stock firmware and the vendor's
    cloud servers or as a way of making a backup of both flash chips.
    The root password seems to be constant across all sold devices.
    This is output of 'led_ctl' from OEM firmware to illustrate
    possibilities of LEDs ring:
    
    Usage: led_ctl [status | upgrade | force_upgrade | version]
           led_ctl solid    COLOR <brightness>
           led_ctl single   COLOR INDEX <brightness 0 - 15>
           led_ctl spinning COLOR <period 1 - 16 (lower = faster)>
           led_ctl fill     COLOR <period 1 - 16 (lower = faster)>
                                                 ( default is 5 )
           led_ctl flashing COLOR <on dur 1 - 128>  <off dur 1 - 128>
                                  (default is  34)  ( default is 34 )
           led_ctl pulsing  COLOR
    COLOR: red, green, blue, yellow, purple, cyan, white
    
    Signed-off-by: Tomasz Maciej Nowak <tomek_n at o2.pl>
    [squash "ipq-wifi: add BDFs for Luma Home WRTQ-329ACN" into commit,
    changed ubi volumes for easier integration, slightly reworded
    commit message, changed ubi volume layout to use standard names all
    around]
    Signed-off-by: Christian Lamparter <chunkeey at gmail.com>
---
 package/boot/uboot-envtools/files/ipq40xx          |   1 +
 package/firmware/ipq-wifi/Makefile                 |   2 +
 .../ipq-wifi/board-luma_wrtq-329acn.qca4019        | Bin 0 -> 24324 bytes
 .../ipq40xx/base-files/etc/board.d/02_network      |   3 +-
 .../etc/hotplug.d/firmware/11-ath10k-caldata       |   2 +
 .../ipq40xx/base-files/lib/upgrade/platform.sh     |   1 +
 .../arch/arm/boot/dts/qcom-ipq4018-wrtq-329acn.dts | 277 +++++++++++++++++++++
 target/linux/ipq40xx/image/Makefile                |  12 +
 .../patches-5.4/901-arm-boot-add-dts-files.patch   |   3 +-
 9 files changed, 299 insertions(+), 2 deletions(-)

diff --git a/package/boot/uboot-envtools/files/ipq40xx b/package/boot/uboot-envtools/files/ipq40xx
index 76a3346110..b1d9b18088 100644
--- a/package/boot/uboot-envtools/files/ipq40xx
+++ b/package/boot/uboot-envtools/files/ipq40xx
@@ -34,6 +34,7 @@ case "$board" in
 alfa-network,ap120c-ac |\
 edgecore,ecw5211 |\
 glinet,gl-b1300 |\
+luma,wrtq-329acn |\
 openmesh,a42 |\
 openmesh,a62)
 	ubootenv_add_uci_config "/dev/mtd5" "0x0" "0x10000" "0x10000"
diff --git a/package/firmware/ipq-wifi/Makefile b/package/firmware/ipq-wifi/Makefile
index 387b23d556..7f3e3cf14d 100644
--- a/package/firmware/ipq-wifi/Makefile
+++ b/package/firmware/ipq-wifi/Makefile
@@ -40,6 +40,7 @@ ALLWIFIBOARDS:= \
 	ezviz_cs-w3-wd1200g-eup \
 	glinet_gl-s1300 \
 	linksys_ea8300 \
+	luma_wrtq-329acn \
 	mobipromo_cm520-79f \
 	qxwlan_e2600ac
 
@@ -117,6 +118,7 @@ $(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,glinet_gl-s1300,GL.iNet GL-S1300))
 $(eval $(call generate-ipq-wifi-package,linksys_ea8300,Linksys EA8300))
+$(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,qxwlan_e2600ac,Qxwlan E2600AC))
 
diff --git a/package/firmware/ipq-wifi/board-luma_wrtq-329acn.qca4019 b/package/firmware/ipq-wifi/board-luma_wrtq-329acn.qca4019
new file mode 100644
index 0000000000..4e52602713
Binary files /dev/null and b/package/firmware/ipq-wifi/board-luma_wrtq-329acn.qca4019 differ
diff --git a/target/linux/ipq40xx/base-files/etc/board.d/02_network b/target/linux/ipq40xx/base-files/etc/board.d/02_network
index 2966fbf1fb..d744e9b7e2 100755
--- a/target/linux/ipq40xx/base-files/etc/board.d/02_network
+++ b/target/linux/ipq40xx/base-files/etc/board.d/02_network
@@ -16,7 +16,8 @@ ipq40xx_setup_interfaces()
 	8dev,jalapeno|\
 	alfa-network,ap120c-ac|\
 	engenius,emr3500|\
-	engenius,ens620ext)
+	engenius,ens620ext|\
+	luma,wrtq-329acn)
 		ucidef_set_interfaces_lan_wan "eth0" "eth1"
 		;;
 	aruba,ap-303|\
diff --git a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
index d68e8d54b8..7a7464cf9a 100644
--- a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
+++ b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
@@ -97,6 +97,7 @@ case "$FIRMWARE" in
 	edgecore,oap100 |\
 	engenius,eap1300 |\
 	engenius,eap2200 |\
+	luma,wrtq-329acn|\
 	openmesh,a42 |\
 	openmesh,a62 |\
 	qxwlan,e2600ac-c1 |\
@@ -192,6 +193,7 @@ case "$FIRMWARE" in
 	edgecore,oap100 |\
 	engenius,eap1300 |\
 	engenius,eap2200 |\
+	luma,wrtq-329acn|\
 	openmesh,a42 |\
 	openmesh,a62 |\
 	qxwlan,e2600ac-c1 |\
diff --git a/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh b/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
index 0bae8e1681..e09ab0344b 100644
--- a/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
@@ -69,6 +69,7 @@ platform_do_upgrade() {
 	edgecore,ecw5211 |\
 	edgecore,oap100 |\
 	engenius,eap2200 |\
+	luma,wrtq-329acn |\
 	mobipromo,cm520-79f |\
 	qxwlan,e2600ac-c2)
 		nand_do_upgrade "$1"
diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-wrtq-329acn.dts b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-wrtq-329acn.dts
new file mode 100644
index 0000000000..faac71489c
--- /dev/null
+++ b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-wrtq-329acn.dts
@@ -0,0 +1,277 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/soc/qcom,tcsr.h>
+
+#include "qcom-ipq4019.dtsi"
+
+/ {
+	model = "Luma Home WRTQ-329ACN";
+	compatible = "luma,wrtq-329acn";
+
+	i2c-gpio {
+		compatible = "i2c-gpio";
+		sda-gpios = <&tlmm 1 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
+		scl-gpios = <&tlmm 0 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		/* No driver exists */
+		led_ring at 48 {
+			compatible = "ti,msp430";
+			reg = <0x48>;
+		};
+
+		eeprom at 50 {
+			compatible = "atmel,24c16";
+			reg = <0x50>;
+			pagesize = <16>;
+			read-only;
+		};
+	};
+
+	keys {
+		compatible = "gpio-keys";
+
+		reset {
+			label = "reset";
+			gpios = <&tlmm 63 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+	};
+
+	soc {
+		rng at 22000 {
+			status = "okay";
+		};
+
+		mdio at 90000 {
+			status = "okay";
+
+			/delete-node/ ethernet-phy at 0;
+			/delete-node/ ethernet-phy at 1;
+			/delete-node/ ethernet-phy at 3;
+		};
+
+		ess-psgmii at 98000 {
+			status = "okay";
+		};
+
+		tcsr at 1949000 {
+			compatible = "qcom,tcsr";
+			reg = <0x1949000 0x100>;
+			qcom,wifi_glb_cfg = <TCSR_WIFI_GLB_CFG>;
+		};
+
+		tcsr at 194b000 {
+			compatible = "qcom,tcsr";
+			reg = <0x194b000 0x100>;
+			qcom,usb-hsphy-mode-select = <TCSR_USB_HSPHY_HOST_MODE>;
+		};
+
+		ess_tcsr at 1953000 {
+			compatible = "qcom,tcsr";
+			reg = <0x1953000 0x1000>;
+			qcom,ess-interface-select = <TCSR_ESS_PSGMII>;
+		};
+
+		tcsr at 1957000 {
+			compatible = "qcom,tcsr";
+			reg = <0x1957000 0x100>;
+			qcom,wifi_noc_memtype_m0_m2 = <TCSR_WIFI_NOC_MEMTYPE_M0_M2>;
+		};
+
+		usb2 at 60f8800 {
+			status = "okay";
+		};
+
+		usb3 at 8af8800 {
+			status = "okay";
+		};
+
+		crypto at 8e3a000 {
+			status = "okay";
+		};
+
+		watchdog at b017000 {
+			status = "okay";
+		};
+
+		ess-switch at c000000 {
+			status = "okay";
+
+			switch_lan_bmp = <0x1e>;
+			switch_wan_bmp = <0x20>;
+		};
+
+		edma at c080000 {
+			status = "okay";
+		};
+	};
+};
+
+&blsp_dma {
+	status = "okay";
+};
+
+
+&blsp1_spi1 {
+	status = "okay";
+
+	cs-gpios = <&tlmm 54 GPIO_ACTIVE_HIGH>,
+		   <&tlmm 59 GPIO_ACTIVE_HIGH>;
+	pinctrl-0 = <&spi0_pins>;
+	pinctrl-names = "default";
+
+	flash at 0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <24000000>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition at 0 {
+				label = "0:SBL1";
+				reg = <0x000000 0x040000>;
+				read-only;
+			};
+
+			partition at 40000 {
+				label = "0:MIBIB";
+				reg = <0x040000 0x020000>;
+				read-only;
+			};
+
+			partition at 60000 {
+				label = "0:QSEE";
+				reg = <0x060000 0x060000>;
+				read-only;
+			};
+
+			partition at c0000 {
+				label = "0:CDT";
+				reg = <0x0c0000 0x010000>;
+				read-only;
+			};
+
+			partition at d0000 {
+				label = "0:DDRPARAMS";
+				reg = <0x0d0000 0x010000>;
+				read-only;
+			};
+
+			partition at e0000 {
+				label = "0:APPSBLENV";
+				reg = <0x0e0000 0x010000>;
+			};
+
+			partition at f0000 {
+				label = "0:APPSBL";
+				reg = <0x0f0000 0x080000>;
+				read-only;
+			};
+
+			partition at 170000 {
+				label = "0:ART";
+				reg = <0x170000 0x010000>;
+				read-only;
+			};
+		};
+	};
+
+	flash at 1 {
+		status = "okay";
+
+		compatible = "spi-nand";
+		reg = <1>;
+		spi-max-frequency = <24000000>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition at 0 {
+				label = "ubi";
+				reg = <0x0000000 0x8000000>;
+			};
+		};
+	};
+};
+
+&blsp1_uart1 {
+	status = "okay";
+
+	pinctrl-0 = <&serial0_pins>;
+	pinctrl-names = "default";
+};
+
+&cryptobam {
+	status = "okay";
+};
+
+&gmac0 {
+	qcom,phy_mdio_addr = <2>;
+	qcom,poll_required = <1>;
+};
+
+&gmac1 {
+	qcom,phy_mdio_addr = <4>;
+	qcom,poll_required = <1>;
+};
+
+&tlmm {
+	serial0_pins: serial0_pinmux {
+		mux {
+			function = "blsp_uart0";
+			pins = "gpio60", "gpio61";
+			bias-disable;
+		};
+	};
+
+	spi0_pins: spi0_pinmux {
+		mux {
+			function = "blsp_spi0";
+			pins = "gpio55", "gpio56", "gpio57";
+			bias-disable;
+			drive-strength = <12>;
+		};
+
+		mux_cs {
+			function = "gpio";
+			pins = "gpio54", "gpio59";
+			bias-disable;
+			drive-strength = <2>;
+			output-high;
+		};
+	};
+};
+
+&usb2_hs_phy {
+	status = "okay";
+};
+
+&usb3_hs_phy {
+	status = "okay";
+};
+
+&usb3_ss_phy {
+	status = "okay";
+};
+
+&wifi0 {
+	status = "okay";
+
+	qcom,ath10k-calibration-variant = "Luma-WRTQ-329ACN";
+};
+
+&wifi1 {
+	status = "okay";
+
+	qcom,ath10k-calibration-variant = "Luma-WRTQ-329ACN";
+};
diff --git a/target/linux/ipq40xx/image/Makefile b/target/linux/ipq40xx/image/Makefile
index 0f03e1f429..5c76bc39b7 100644
--- a/target/linux/ipq40xx/image/Makefile
+++ b/target/linux/ipq40xx/image/Makefile
@@ -540,6 +540,18 @@ define Device/linksys_ea8300
 endef
 TARGET_DEVICES += linksys_ea8300
 
+define Device/luma_wrtq-329acn
+	$(call Device/FitImage)
+	DEVICE_VENDOR := Luma Home
+	DEVICE_MODEL := WRTQ-329ACN
+	SOC := qcom-ipq4018
+	DEVICE_PACKAGES := ipq-wifi-luma_wrtq-329acn kmod-ath3k kmod-eeprom-at24 kmod-i2c-gpio uboot-envtools
+	IMAGE_SIZE := 76632k
+	BLOCKSIZE := 128k
+	PAGESIZE := 2048
+endef
+TARGET_DEVICES += luma_wrtq-329acn
+
 define Device/meraki_mr33
 	$(call Device/FitImage)
 	DEVICE_VENDOR := Cisco Meraki
diff --git a/target/linux/ipq40xx/patches-5.4/901-arm-boot-add-dts-files.patch b/target/linux/ipq40xx/patches-5.4/901-arm-boot-add-dts-files.patch
index 2b5220d3ed..0fc50217c4 100644
--- a/target/linux/ipq40xx/patches-5.4/901-arm-boot-add-dts-files.patch
+++ b/target/linux/ipq40xx/patches-5.4/901-arm-boot-add-dts-files.patch
@@ -10,7 +10,7 @@ Signed-off-by: John Crispin <john at phrozen.org>
 
 --- a/arch/arm/boot/dts/Makefile
 +++ b/arch/arm/boot/dts/Makefile
-@@ -837,11 +837,52 @@ dtb-$(CONFIG_ARCH_QCOM) += \
+@@ -837,11 +837,53 @@ dtb-$(CONFIG_ARCH_QCOM) += \
  	qcom-apq8074-dragonboard.dtb \
  	qcom-apq8084-ifc6540.dtb \
  	qcom-apq8084-mtp.dtb \
@@ -33,6 +33,7 @@ Signed-off-by: John Crispin <john at phrozen.org>
 +	qcom-ipq4019-oap100.dtb \
 +	qcom-ipq4018-rt-ac58u.dtb \
 +	qcom-ipq4018-wre6606.dtb \
++	qcom-ipq4018-wrtq-329acn.dtb \
  	qcom-ipq4019-ap.dk01.1-c1.dtb \
  	qcom-ipq4019-ap.dk04.1-c1.dtb \
  	qcom-ipq4019-ap.dk04.1-c3.dtb \



More information about the lede-commits mailing list