[OpenWrt-Devel] [PATCH v3] ar71xx: add support for GL.iNet GL-AR750S

Lucian Cristian luci at powerneth.ro
Fri May 25 08:19:34 EDT 2018


On 25.05.2018 13:06, Luochongjun wrote:
> This patch adds supports for GL-AR750S.
>
> Specification:
> - SOC: QCA9563 (775MHz)
> - Flash: 16 MiB (W25Q128FVSG)
> - RAM: 128 MiB DDR2
> - Ethernet: 2x 1Gbps LAN + 1x 1Gbps WAN
> - Wireless: 2.4GHz (bgn) and 5GHz (ac)
> - USB: 1x USB 2.0 port
> - Button: 1x switch button, 1x reset button
> - LED: 3x LEDS (green)
>
> Flash instruction:
> Apply factory image via web-gui.
>
> Signed-off-by: Luo chongjun <luochongjun at gl-inet.com>
> ---
>   target/linux/ar71xx/base-files/etc/board.d/01_leds |   4 +
>   .../linux/ar71xx/base-files/etc/board.d/02_network |   4 +
>   .../etc/hotplug.d/firmware/11-ath10k-caldata       |   1 +
>   target/linux/ar71xx/base-files/lib/ar71xx.sh       |   3 +
>   .../ar71xx/base-files/lib/upgrade/platform.sh      |   1 +
>   target/linux/ar71xx/config-4.9                     |   1 +
>   .../ar71xx/files/arch/mips/ath79/Kconfig.openwrt   |  11 ++
>   target/linux/ar71xx/files/arch/mips/ath79/Makefile |   1 +
>   .../ar71xx/files/arch/mips/ath79/mach-gl-ar750s.c  | 193 +++++++++++++++++++++
>   .../linux/ar71xx/files/arch/mips/ath79/machtypes.h |   1 +
>   target/linux/ar71xx/generic/config-default         |   1 +
>   target/linux/ar71xx/image/generic.mk               |  13 ++
>   12 files changed, 234 insertions(+)
>   create mode 100755 target/linux/ar71xx/files/arch/mips/ath79/mach-gl-ar750s.c
>
> 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 52f1ac3..f436854 100755
> --- a/target/linux/ar71xx/base-files/etc/board.d/01_leds
> +++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds
> @@ -385,6 +385,10 @@ gl-ar750)
>   	ucidef_set_led_wlan "wlan2g" "WLAN2G" "$board:white:wlan2g" "phy1tpt"
>   	ucidef_set_led_wlan "wlan5g" "WLAN5G" "$board:white:wlan5g" "phy0tpt"
>   	;;
> +gl-ar750s)
> +	ucidef_set_led_wlan "wlan2g" "WLAN2G" "$board:green:wlan2g" "phy1tpt"
> +	ucidef_set_led_wlan "wlan5g" "WLAN5G" "$board:green:wlan5g" "phy0tpt"
> +	;;
>   gl-mifi)
>   	ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan" "phy0tpt"
>   	ucidef_set_led_netdev "wan" "WAN" "$board:green:wan" "eth0"
> diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network
> index 5898261..5f87ab1 100755
> --- a/target/linux/ar71xx/base-files/etc/board.d/02_network
> +++ b/target/linux/ar71xx/base-files/etc/board.d/02_network
> @@ -432,6 +432,10 @@ ar71xx_setup_interfaces()
>   		ucidef_add_switch "switch0" \
>   			"0 at eth1" "1:lan" "2:lan"
>   		;;
> +	gl-ar750s)
> +		ucidef_add_switch "switch0" \
> + 			"0 at eth0" "2:lan:2" "3:lan:1" "1:wan"
> +		;;
>   	jwap230)
>   		ucidef_set_interfaces_lan_wan "eth0.1" "eth1.2"
>   		ucidef_add_switch "switch0" \
> diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
> index 5d01701..f82026c 100644
> --- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
> +++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
> @@ -99,6 +99,7 @@ case "$FIRMWARE" in
>   		ath10kcal_extract "caldata" 20480 2116
>   		ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1)
>   		;;
> +	gl-ar750s|\
>   	gl-ar750|\
>   	tl-wpa8630)
>   		ath10kcal_extract "art" 20480 2116
> diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
> index 42bd80d..74aa21b 100755
> --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
> +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
> @@ -727,6 +727,9 @@ ar71xx_board_detect() {
>   	*"GL-AR750")
>   		name="gl-ar750"
>   		;;
> +	*"GL-AR750S")
> +		name="gl-ar750s"
> +		;;
>   	*"GL-CONNECT INET v1")
>   		name="gl-inet"
>   
> diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> index 284582f..d0a3f30 100755
> --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> @@ -260,6 +260,7 @@ platform_check_image() {
>   	gl-ar300m|\
>   	gl-ar300|\
>   	gl-ar750|\
> +	gl-ar750s|\
>   	gl-domino|\
>   	gl-mifi|\
>   	gl-usb150|\
> diff --git a/target/linux/ar71xx/config-4.9 b/target/linux/ar71xx/config-4.9
> index 35efd17..a453e10 100644
> --- a/target/linux/ar71xx/config-4.9
> +++ b/target/linux/ar71xx/config-4.9
> @@ -120,6 +120,7 @@ CONFIG_ATH79=y
>   # CONFIG_ATH79_MACH_GL_AR300 is not set
>   # CONFIG_ATH79_MACH_GL_AR300M is not set
>   # CONFIG_ATH79_MACH_GL_AR750 is not set
> +# CONFIG_ATH79_MACH_GL_AR750S is not set
>   # CONFIG_ATH79_MACH_GL_DOMINO is not set
>   # CONFIG_ATH79_MACH_GL_INET is not set
>   # CONFIG_ATH79_MACH_GL_MIFI 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 40d33b5..e5fb0bc 100644
> --- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
> +++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
> @@ -814,6 +814,17 @@ config ATH79_MACH_GL_AR750
>   	select ATH79_DEV_USB
>   	select ATH79_DEV_WMAC
>   
> +config ATH79_MACH_GL_AR750S
> +	bool "GL.iNet GL-AR750S support"
> +	select SOC_QCA956X
> +	select ATH79_DEV_AP9X_PCI if PCI
> +	select ATH79_DEV_ETH
> +	select ATH79_DEV_GPIO_BUTTONS
> +	select ATH79_DEV_LEDS_GPIO
> +	select ATH79_DEV_M25P80
> +	select ATH79_DEV_USB
> +	select ATH79_DEV_WMAC
> +
>   config ATH79_MACH_GL_DOMINO
>   	bool "DOMINO support"
>   	select SOC_AR933X
> diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Makefile b/target/linux/ar71xx/files/arch/mips/ath79/Makefile
> index 2124ab7..ae3fc67 100644
> --- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile
> +++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile
> @@ -130,6 +130,7 @@ obj-$(CONFIG_ATH79_MACH_GL_AR150)		+= mach-gl-ar150.o
>   obj-$(CONFIG_ATH79_MACH_GL_AR300)		+= mach-gl-ar300.o
>   obj-$(CONFIG_ATH79_MACH_GL_AR300M)		+= mach-gl-ar300m.o
>   obj-$(CONFIG_ATH79_MACH_GL_AR750)		+= mach-gl-ar750.o
> +obj-$(CONFIG_ATH79_MACH_GL_AR750S)		+= mach-gl-ar750s.o
>   obj-$(CONFIG_ATH79_MACH_GL_DOMINO)		+= mach-gl-domino.o
>   obj-$(CONFIG_ATH79_MACH_GL_INET)		+= mach-gl-inet.o
>   obj-$(CONFIG_ATH79_MACH_GL_MIFI)		+= mach-gl-mifi.o
> diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-ar750s.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-ar750s.c
> new file mode 100755
> index 0000000..b556f9b
> --- /dev/null
> +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-ar750s.c
> @@ -0,0 +1,193 @@
> +/*
> + *  GL.iNet GL-AR750S board support
> + *
> + *  Copyright (C) 2018 luochongjun <luochongjun at gl-inet.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/init.h>
> +#include <linux/pci.h>
> +#include <linux/platform_device.h>
> +#include <linux/ath9k_platform.h>
> +#include <linux/etherdevice.h>
> +
> +#include <linux/i2c.h>
> +#include <linux/i2c-gpio.h>
> +
> +#include <asm/mach-ath79/ath79.h>
> +#include <asm/mach-ath79/irq.h>
> +#include <asm/mach-ath79/ar71xx_regs.h>
> +
> +#include <linux/platform_data/phy-at803x.h>
> +#include <linux/ar8216_platform.h>
> +
> +#include "common.h"
> +#include "dev-ap9x-pci.h"
> +#include "dev-eth.h"
> +#include "dev-gpio-buttons.h"
> +#include "dev-leds-gpio.h"
> +#include "dev-spi.h"
> +#include "dev-m25p80.h"
> +#include "dev-wmac.h"
> +#include "dev-usb.h"
> +#include "machtypes.h"
> +
> +
> +#define GL_AR750S_KEYS_POLL_INTERVAL	20
> +#define GL_AR750S_KEYS_DEBOUNCE_INTERVAL	(3 * GL_AR750S_KEYS_POLL_INTERVAL)
> +
> +
> +#define GL_AR750S_GPIO_LED_WLAN2G       19
> +#define GL_AR750S_GPIO_LED_WLAN5G       20
> +#define GL_AR750S_GPIO_LED_POWER	1
> +#define GL_AR750S_GPIO_USB_POWER	7
> +
> +#define GL_AR750S_GPIO_BTN_RESET	2
> +#define GL_AR750S_GPIO_BTN_RIGHT	8
> +
> +#define GL_AR750S_MAC0_OFFSET             0x0000
> +#define GL_AR750S_WMAC_CALDATA_OFFSET     0x1000
> +#define GL_AR750S_PCI_CALDATA_OFFSET      0x5000
> +
> +#define GL_AR750S_GPIO_I2C_SDA	5
> +#define GL_AR750S_GPIO_I2C_SCL	21
> +
> +
> +
> +static struct spi_board_info gl_ar750s_spi_info[] = {
> +    {
> +        .bus_num    = 0,
> +        .chip_select    = 0,
> +        .max_speed_hz   = 25000000,
> +        .modalias   = "m25p80",
> +        .platform_data  = NULL,
> +    },
> +};
> +
> +static struct ath79_spi_platform_data gl_ar750s_spi_data = {
> +    .bus_num        = 0,
> +    .num_chipselect     = 2,
> +};
> +
> +static struct gpio_led gl_ar750s_leds_gpio[] __initdata = {
> +	{
> +		 .name           = "gl-ar750s:green:power",
> +		 .gpio           = GL_AR750S_GPIO_LED_POWER,
> +		.default_state  = LEDS_GPIO_DEFSTATE_KEEP,
> +		.active_low     = 1,
> +   	 },{
> +		 .name           = "gl-ar750s:green:usbpower",
> +		 .gpio           = GL_AR750S_GPIO_USB_POWER,
> +		.active_low     = 1,
> +   	 },{
> +		.name		= "gl-ar750s:green:wlan2g",
> +		.gpio		= GL_AR750S_GPIO_LED_WLAN2G,
> +		.active_low	= 1,
> +	},{
> +		.name		= "gl-ar750s:green:wlan5g",
> +		.gpio		= GL_AR750S_GPIO_LED_WLAN5G,
> +		.active_low	= 0,
> +	}
> +};
> +
> +static struct gpio_keys_button gl_ar750s_gpio_keys[] __initdata = {
> +    {
> +        .desc                   = "reset",
> +        .type                   = EV_KEY,
> +        .code                   = KEY_RESTART,
> +        .debounce_interval      = GL_AR750S_KEYS_DEBOUNCE_INTERVAL,
> +        .gpio                   = GL_AR750S_GPIO_BTN_RESET,
> +        .active_low             = 1,
> +       }, {
> +        .desc                   = "right",
> +        .type                   = EV_KEY,
> +        .code                   = BTN_0,
> +        .debounce_interval      = GL_AR750S_KEYS_DEBOUNCE_INTERVAL,
> +        .gpio                   = GL_AR750S_GPIO_BTN_RIGHT,
> +        .active_low             = 1,
> +       },
> +};
> +
> +static struct i2c_gpio_platform_data gl_ar750s_i2c_gpio_data = {
> +        .sda_pin        = GL_AR750S_GPIO_I2C_SDA,
> +        .scl_pin        = GL_AR750S_GPIO_I2C_SCL,
> +};
> +
> +static struct platform_device gl_ar750s_i2c_gpio_device = {
> +        .name           = "i2c-gpio",
> +        .id             = 0,
> +        .dev = {
> +                .platform_data  = &gl_ar750s_i2c_gpio_data,
> +	}
> +
> +};
> +
> +static struct ar8327_pad_cfg gl_ar750s_ar8327_pad0_cfg = {
> +	.mode = AR8327_PAD_MAC_SGMII,
> +	.sgmii_delay_en = true,
> +};
> +
> +static struct ar8327_platform_data gl_ar750s_ar8327_data = {
> +	.pad0_cfg = &gl_ar750s_ar8327_pad0_cfg,
> +	.port0_cfg = {
> +		.force_link = 1,
> +		.speed = AR8327_PORT_SPEED_1000,
> +		.duplex = 1,
> +		.txpause = 1,
> +		.rxpause = 1,
> +	},
> +};
> +
> +
> +static struct mdio_board_info gl_ar750s_mdio0_info[] = {
> +	{
> +		.bus_id = "ag71xx-mdio.0",
> +		.phy_addr = 0,
> +		.platform_data = &gl_ar750s_ar8327_data,
> +	},
> +};
> +
> +static void __init  gl_ar750s_setup(void)
> +{
> +	u8 *eeprom = (u8 *) KSEG1ADDR(0x1f050000);
> +
> +	ath79_register_spi(&gl_ar750s_spi_data, gl_ar750s_spi_info, 1);
> +
> +	ath79_init_mac(ath79_eth0_data.mac_addr,
> +	               eeprom + GL_AR750S_MAC0_OFFSET, 0);
> +
> +	ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_SGMII;
> +	ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
> +	ath79_eth0_data.phy_mask = BIT(0);
> +
> +	mdiobus_register_board_info(gl_ar750s_mdio0_info,
> +	                            ARRAY_SIZE(gl_ar750s_mdio0_info));
> +
> +	ath79_register_mdio(0, 0x00);
> +	ath79_register_eth(0);
> +
> +
> +	ath79_register_usb();
> +
> +
> +	ath79_register_wmac(eeprom + GL_AR750S_WMAC_CALDATA_OFFSET, NULL);
> +
> +
> +	ap91_pci_init(eeprom + GL_AR750S_PCI_CALDATA_OFFSET, NULL);
> +
> +	platform_device_register(&gl_ar750s_i2c_gpio_device);
> +
> +	ath79_register_leds_gpio(-1, ARRAY_SIZE(gl_ar750s_leds_gpio),
> +	                         gl_ar750s_leds_gpio);
> +
> +	ath79_register_gpio_keys_polled(-1, GL_AR750S_KEYS_POLL_INTERVAL,
> +	                                ARRAY_SIZE(gl_ar750s_gpio_keys),
> +	                                gl_ar750s_gpio_keys);
> +}
> +
> +
> +MIPS_MACHINE(ATH79_MACH_GL_AR750S, "GL-AR750S", "GL-AR750S",
> +         gl_ar750s_setup);
> diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
> index 3d5bcfb..46d499c 100644
> --- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
> +++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
> @@ -125,6 +125,7 @@ enum ath79_mach_type {
>   	ATH79_MACH_GL_AR300,			/* GL-AR300 */
>   	ATH79_MACH_GL_AR300M,			/* GL-AR300M */
>   	ATH79_MACH_GL_AR750,			/* GL.iNet GL-AR750 */
> +	ATH79_MACH_GL_AR750S,			/* GL.iNet GL-AR750S */
>   	ATH79_MACH_GL_DOMINO,			/* Domino */
>   	ATH79_MACH_GL_INET,			/* GL-CONNECT GL-INET */
>   	ATH79_MACH_GL_MIFI,			/* GL-MIFI support */
> diff --git a/target/linux/ar71xx/generic/config-default b/target/linux/ar71xx/generic/config-default
> index 3f93d6e..200c21c 100644
> --- a/target/linux/ar71xx/generic/config-default
> +++ b/target/linux/ar71xx/generic/config-default
> @@ -93,6 +93,7 @@ CONFIG_ATH79_MACH_GL_AR150=y
>   CONFIG_ATH79_MACH_GL_AR300=y
>   CONFIG_ATH79_MACH_GL_AR300M=y
>   CONFIG_ATH79_MACH_GL_AR750=y
> +CONFIG_ATH79_MACH_GL_AR750S=y
>   CONFIG_ATH79_MACH_GL_DOMINO=y
>   CONFIG_ATH79_MACH_GL_INET=y
>   CONFIG_ATH79_MACH_GL_MIFI=y
> diff --git a/target/linux/ar71xx/image/generic.mk b/target/linux/ar71xx/image/generic.mk
> index a0f6326..7577f03 100644
> --- a/target/linux/ar71xx/image/generic.mk
> +++ b/target/linux/ar71xx/image/generic.mk
> @@ -461,6 +461,19 @@ define Device/gl-ar750
>   endef
>   TARGET_DEVICES += gl-ar750
>   
> +define Device/gl-ar750s
> +  DEVICE_TITLE := GL.iNet GL-AR750S
> +  DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca9887 kmod-usb-core \
> +	kmod-usb2 kmod-usb-storage
> +  BOARDNAME := GL-AR750S
> +  SUPPORTED_DEVICES := gl-ar750s
> +  IMAGE_SIZE := 16000k
> +  MTDPARTS := spi0.0:256k(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 += gl-ar750s
> +
>   define Device/gl-domino
>     DEVICE_TITLE := GL.iNet Domino Pi
>     DEVICE_PACKAGES := kmod-usb-core kmod-usb2

sorry for asking, but don't you want to try to port this to ath79 target 
directly? it seems suitable.

most of the things are already working, for QCA9563 there is no template 
but I'll try to test a device in the following days, you can see this PR 
[1][2][3] for an example.


1 - https://github.com/openwrt/openwrt/pull/931

2 - https://github.com/openwrt/openwrt/pull/956

3 - https://github.com/openwrt/openwrt/pull/964


Regards



_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
http://lists.infradead.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list