[openwrt/openwrt] ar71xx: add support for ALFA Network N5Q

LEDE Commits lede-commits at lists.infradead.org
Sun Jan 14 15:14:26 PST 2018


pepe2k pushed a commit to openwrt/openwrt.git, branch master:
https://git.lede-project.org/4b0eebe9dfa49f995474322f2c6998026534a5f8

commit 4b0eebe9dfa49f995474322f2c6998026534a5f8
Author: Piotr Dymacz <pepe2k at gmail.com>
AuthorDate: Fri Jan 5 11:35:45 2018 +0100

    ar71xx: add support for ALFA Network N5Q
    
    ALFA Network N5Q is a successor of previous model, the N5 (outdoor
    CPE/AP, based on Atheros AR7240 + AR9280). New version is based on
    Atheros AR9344.
    
    Specification:
    
    - 550/400/200 MHz (CPU/DDR/AHB)
    - 64 MB of RAM (DDR2)
    - 16 MB of FLASH (SPI NOR)
    - 2x 10/100 Mbps Ethernet, with passive PoE support (24 V)
    - 2T2R 5 GHz (AR9344), with ext. PA (RFPA5542) and LNA, up to 27 dBm
    - 8x LED (7 are driven by GPIO)
    - 1x button (reset)
    - external h/w watchdog (EM6324QYSP5B, disabled and not used)
    - header for optional 802.3at/af PoE module
    - DC jack for main power input (optional, not installed by default)
    - UART header on PCB
    
    Flash instruction:
    
    You can use sysupgrade image directly in vendor firmare which is based
    on OpenWrt/LEDE. Alternatively, you can use web recovery mode in U-Boot:
    
    1. Configure PC with static IP 192.168.1.2/24.
    2. Connect PC with one of RJ45 ports, press the reset button, power up
       device, wait for first blink of all LEDs (indicates network setup),
       then keep button for 3 following blinks and release it.
    3. Open 192.168.1.1 address in your browser and upload sysupgrade image.
    
    Signed-off-by: Piotr Dymacz <pepe2k at gmail.com>
---
 target/linux/ar71xx/base-files/etc/board.d/01_leds |  10 +-
 target/linux/ar71xx/base-files/etc/diag.sh         |   3 +-
 target/linux/ar71xx/base-files/lib/ar71xx.sh       |   3 +
 .../ar71xx/base-files/lib/upgrade/platform.sh      |   1 +
 target/linux/ar71xx/config-4.4                     |   1 +
 target/linux/ar71xx/config-4.9                     |   1 +
 .../ar71xx/files/arch/mips/ath79/Kconfig.openwrt   |   8 ++
 target/linux/ar71xx/files/arch/mips/ath79/Makefile |   1 +
 .../linux/ar71xx/files/arch/mips/ath79/mach-n5q.c  | 132 +++++++++++++++++++++
 .../linux/ar71xx/files/arch/mips/ath79/machtypes.h |   1 +
 target/linux/ar71xx/generic/config-default         |   1 +
 target/linux/ar71xx/image/generic.mk               |  12 ++
 12 files changed, 172 insertions(+), 2 deletions(-)

diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds
index 97bf330..f2d66b2 100755
--- a/target/linux/ar71xx/base-files/etc/board.d/01_leds
+++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds
@@ -129,13 +129,21 @@ dr531)
 		;;
 	esac
 	;;
-ap91-5g)
+ap91-5g|\
+n5q)
 	ucidef_set_led_netdev "lan" "LAN" "$board:green:lan" "eth0"
 	ucidef_set_rssimon "wlan0" "200000" "1"
 	ucidef_set_led_rssi "signal1" "SIGNAL1" "$board:red:signal1" "wlan0" "1" "100"
 	ucidef_set_led_rssi "signal2" "SIGNAL2" "$board:orange:signal2" "wlan0" "25" "100"
 	ucidef_set_led_rssi "signal3" "SIGNAL3" "$board:green:signal3" "wlan0" "50" "100"
 	ucidef_set_led_rssi "signal4" "SIGNAL4" "$board:green:signal4" "wlan0" "75" "100"
+
+	case "$board" in
+	n5q)
+		ucidef_set_led_netdev "wan" "WAN" "$board:green:wan" "eth1"
+		ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan" "phy0tpt"
+		;;
+	esac
 	;;
 bhr-4grv2)
 	ucidef_set_led_default "power" "POWER" "buffalo:green:power" "1"
diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
index 2f2d2c3..63a9ebc 100644
--- a/target/linux/ar71xx/base-files/etc/diag.sh
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
@@ -80,7 +80,8 @@ get_status_led() {
 	gl-mifi)
 		status_led="$board:green:lan"
 		;;
-	ap91-5g)
+	ap91-5g|\
+	n5q)
 		status_led="$board:green:signal4"
 		;;
 	ap96)
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
index e90d89e..1de9d02 100755
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
@@ -768,6 +768,9 @@ ar71xx_board_detect() {
 	*"MZK-W300NH")
 		name="mzk-w300nh"
 		;;
+	*"N5Q")
+		name="n5q"
+		;;
 	*"Nanostation M")
 		name="nanostation-m"
 		ubnt_xm_board_detect
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
index 37c637b..3bfedf8 100755
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
@@ -252,6 +252,7 @@ platform_check_image() {
 	loco-m-xw|\
 	mzk-w04nu|\
 	mzk-w300nh|\
+	n5q|\
 	nanostation-m|\
 	nanostation-m-xw|\
 	nbg460n_550n_550nh|\
diff --git a/target/linux/ar71xx/config-4.4 b/target/linux/ar71xx/config-4.4
index 44af80d..c5bcc40 100644
--- a/target/linux/ar71xx/config-4.4
+++ b/target/linux/ar71xx/config-4.4
@@ -139,6 +139,7 @@ CONFIG_ATH79=y
 # CONFIG_ATH79_MACH_MYNET_REXT is not set
 # CONFIG_ATH79_MACH_MZK_W04NU is not set
 # CONFIG_ATH79_MACH_MZK_W300NH is not set
+# CONFIG_ATH79_MACH_N5Q is not set
 # CONFIG_ATH79_MACH_NBG460N is not set
 # CONFIG_ATH79_MACH_NBG6716 is not set
 # CONFIG_ATH79_MACH_OM2P is not set
diff --git a/target/linux/ar71xx/config-4.9 b/target/linux/ar71xx/config-4.9
index 401c41e..8815edf 100644
--- a/target/linux/ar71xx/config-4.9
+++ b/target/linux/ar71xx/config-4.9
@@ -137,6 +137,7 @@ CONFIG_ATH79=y
 # CONFIG_ATH79_MACH_MYNET_REXT is not set
 # CONFIG_ATH79_MACH_MZK_W04NU is not set
 # CONFIG_ATH79_MACH_MZK_W300NH is not set
+# CONFIG_ATH79_MACH_N5Q is not set
 # CONFIG_ATH79_MACH_NBG460N is not set
 # CONFIG_ATH79_MACH_NBG6716 is not set
 # CONFIG_ATH79_MACH_OM2P is not set
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
index f2717e8..4309646 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
+++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
@@ -2008,6 +2008,14 @@ config ATH79_MACH_ZCN_1523H
 	select ATH79_DEV_LEDS_GPIO
 	select ATH79_DEV_M25P80
 
+config ATH79_MACH_N5Q
+	bool "ALFA Network N5Q support"
+	select SOC_AR934X
+	select ATH79_DEV_ETH
+	select ATH79_DEV_GPIO_BUTTONS
+	select ATH79_DEV_LEDS_GPIO
+	select ATH79_DEV_WMAC
+
 config ATH79_MACH_NBG460N
 	bool "Zyxel NBG460N/550N/550NH board support"
 	select SOC_AR913X
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Makefile b/target/linux/ar71xx/files/arch/mips/ath79/Makefile
index 0e58100..53edaac 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile
+++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile
@@ -147,6 +147,7 @@ obj-$(CONFIG_ATH79_MACH_MYNET_N750)		+= mach-mynet-n750.o
 obj-$(CONFIG_ATH79_MACH_MYNET_REXT)		+= mach-mynet-rext.o
 obj-$(CONFIG_ATH79_MACH_MZK_W04NU)		+= mach-mzk-w04nu.o
 obj-$(CONFIG_ATH79_MACH_MZK_W300NH)		+= mach-mzk-w300nh.o
+obj-$(CONFIG_ATH79_MACH_N5Q)			+= mach-n5q.o
 obj-$(CONFIG_ATH79_MACH_NBG460N)		+= mach-nbg460n.o
 obj-$(CONFIG_ATH79_MACH_NBG6716)		+= mach-nbg6716.o
 obj-$(CONFIG_ATH79_MACH_RAMBUTAN)		+= mach-rambutan.o
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-n5q.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-n5q.c
new file mode 100644
index 0000000..895fc32
--- /dev/null
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-n5q.c
@@ -0,0 +1,132 @@
+/*
+ * ALFA Network N5Q board support
+ *
+ * Copyright (C) 2018 Piotr Dymacz <pepe2k at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ */
+
+#include <linux/gpio.h>
+#include <linux/platform_device.h>
+
+#include <asm/mach-ath79/ath79.h>
+#include <asm/mach-ath79/ar71xx_regs.h>
+
+#include "common.h"
+#include "dev-eth.h"
+#include "dev-gpio-buttons.h"
+#include "dev-leds-gpio.h"
+#include "dev-m25p80.h"
+#include "dev-wmac.h"
+#include "machtypes.h"
+
+#define N5Q_GPIO_LED_LAN	19
+#define N5Q_GPIO_LED_SIGNAL1	0
+#define N5Q_GPIO_LED_SIGNAL2	1
+#define N5Q_GPIO_LED_SIGNAL3	2
+#define N5Q_GPIO_LED_SIGNAL4	3
+#define N5Q_GPIO_LED_WAN	18
+#define N5Q_GPIO_LED_WLAN	12
+
+#define N5Q_GPIO_WDT_EN		16
+#define N5Q_GPIO_WDT_IN		17
+
+#define N5Q_GPIO_BTN_RESET	11
+
+#define N5Q_MAC0_OFFSET		0
+#define N5Q_MAC1_OFFSET		6
+#define N5Q_WMAC_CALDATA_OFFSET	0x1000
+
+#define N5Q_KEYS_POLL_INTERVAL		20
+#define N5Q_KEYS_DEBOUNCE_INTERVAL	(3 * N5Q_KEYS_POLL_INTERVAL)
+
+static struct gpio_led n5q_leds_gpio[] __initdata = {
+	{
+		.name		= "n5q:green:lan",
+		.gpio		= N5Q_GPIO_LED_LAN,
+		.active_low	= 1,
+	}, {
+		.name		= "n5q:red:signal1",
+		.gpio		= N5Q_GPIO_LED_SIGNAL1,
+		.active_low	= 1,
+	}, {
+		.name		= "n5q:orange:signal2",
+		.gpio		= N5Q_GPIO_LED_SIGNAL2,
+		.active_low	= 1,
+	}, {
+		.name		= "n5q:green:signal3",
+		.gpio		= N5Q_GPIO_LED_SIGNAL3,
+		.active_low	= 1,
+	}, {
+		.name		= "n5q:green:signal4",
+		.gpio		= N5Q_GPIO_LED_SIGNAL4,
+		.active_low	= 1,
+	}, {
+		.name		= "n5q:green:wan",
+		.gpio		= N5Q_GPIO_LED_WAN,
+		.active_low	= 1,
+	}, {
+		.name		= "n5q:green:wlan",
+		.gpio		= N5Q_GPIO_LED_WLAN,
+		.active_low	= 1,
+	},
+};
+
+static struct gpio_keys_button n5q_gpio_keys[] __initdata = {
+	{
+		.desc			= "reset",
+		.type			= EV_KEY,
+		.code			= KEY_RESTART,
+		.debounce_interval	= N5Q_KEYS_DEBOUNCE_INTERVAL,
+		.gpio			= N5Q_GPIO_BTN_RESET,
+		.active_low		= 1,
+	},
+};
+
+static void __init n5q_setup(void)
+{
+	u8 *art = (u8 *) KSEG1ADDR(0x1f070000);
+
+	ath79_register_m25p80(NULL);
+
+	ath79_register_mdio(1, 0x0);
+
+	ath79_switch_data.phy4_mii_en = 1;
+	ath79_switch_data.phy_poll_mask = 0xf7;
+
+	/* LAN */
+	ath79_eth1_data.duplex = DUPLEX_FULL;
+	ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII;
+	ath79_init_mac(ath79_eth1_data.mac_addr, art + N5Q_MAC1_OFFSET, 0);
+	ath79_register_eth(1);
+
+	/* WAN */
+	ath79_eth0_data.duplex = DUPLEX_FULL;
+	ath79_eth0_data.mii_bus_dev = &ath79_mdio1_device.dev;
+	ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
+	ath79_eth0_data.phy_mask = BIT(4);
+	ath79_eth0_data.speed = SPEED_100;
+	ath79_init_mac(ath79_eth0_data.mac_addr, art + N5Q_MAC0_OFFSET, 0);
+	ath79_register_eth(0);
+
+	ath79_register_leds_gpio(-1, ARRAY_SIZE(n5q_leds_gpio),
+				 n5q_leds_gpio);
+
+	ath79_register_gpio_keys_polled(-1, N5Q_KEYS_POLL_INTERVAL,
+					ARRAY_SIZE(n5q_gpio_keys),
+					n5q_gpio_keys);
+
+	gpio_request_one(N5Q_GPIO_WDT_IN,
+			 GPIOF_OUT_INIT_LOW | GPIOF_EXPORT_DIR_FIXED,
+			 "WDT input");
+
+	gpio_request_one(N5Q_GPIO_WDT_EN,
+			 GPIOF_OUT_INIT_LOW | GPIOF_EXPORT_DIR_FIXED,
+			 "WDT enable");
+
+	ath79_register_wmac(art + N5Q_WMAC_CALDATA_OFFSET, NULL);
+}
+
+MIPS_MACHINE(ATH79_MACH_N5Q, "N5Q", "ALFA Network N5Q", n5q_setup);
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
index c2cb8b6..06fa476 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
+++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
@@ -143,6 +143,7 @@ enum ath79_mach_type {
 	ATH79_MACH_MYNET_REXT,			/* WD My Net Wi-Fi Range Extender */
 	ATH79_MACH_MZK_W04NU,			/* Planex MZK-W04NU */
 	ATH79_MACH_MZK_W300NH,			/* Planex MZK-W300NH */
+	ATH79_MACH_N5Q,				/* ALFA Network N5Q */
 	ATH79_MACH_NBG460N,			/* Zyxel NBG460N/550N/550NH */
 	ATH79_MACH_NBG6616,			/* Zyxel NBG6616 */
 	ATH79_MACH_NBG6716,			/* Zyxel NBG6716 */
diff --git a/target/linux/ar71xx/generic/config-default b/target/linux/ar71xx/generic/config-default
index e9bf6f3..5d236b2 100644
--- a/target/linux/ar71xx/generic/config-default
+++ b/target/linux/ar71xx/generic/config-default
@@ -108,6 +108,7 @@ CONFIG_ATH79_MACH_MYNET_N750=y
 CONFIG_ATH79_MACH_MYNET_REXT=y
 CONFIG_ATH79_MACH_MZK_W04NU=y
 CONFIG_ATH79_MACH_MZK_W300NH=y
+CONFIG_ATH79_MACH_N5Q=y
 CONFIG_ATH79_MACH_OM2P=y
 CONFIG_ATH79_MACH_OM5P=y
 CONFIG_ATH79_MACH_OM5P_AC=y
diff --git a/target/linux/ar71xx/image/generic.mk b/target/linux/ar71xx/image/generic.mk
index d6515ac..f1efebc 100644
--- a/target/linux/ar71xx/image/generic.mk
+++ b/target/linux/ar71xx/image/generic.mk
@@ -757,6 +757,18 @@ define Device/oolite
 endef
 TARGET_DEVICES += oolite
 
+define Device/n5q
+  DEVICE_TITLE := ALFA Network N5Q
+  DEVICE_PACKAGES := rssileds -swconfig
+  BOARDNAME := N5Q
+  SUPPORTED_DEVICES := n5q
+  IMAGE_SIZE := 15872k
+  MTDPARTS := spi0.0:384k(u-boot)ro,64k(u-boot-env),64k(art)ro,-(firmware)
+  IMAGE/sysupgrade.bin := append-kernel | pad-to $$$$(BLOCKSIZE) | \
+	append-rootfs | pad-rootfs | append-metadata | check-size $$$$(IMAGE_SIZE)
+endef
+TARGET_DEVICES += n5q
+
 define Device/NBG6616
   DEVICE_TITLE := ZyXEL NBG6616
   DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport kmod-usb-storage kmod-rtc-pcf8563 kmod-ath10k ath10k-firmware-qca988x



More information about the lede-commits mailing list