This commit adds support for the GL-AR750 (2.4G radio only)
authorRISCi_ATOM <bob@bobcall.me>
Thu, 23 Aug 2018 09:32:40 +0000 (05:32 -0400)
committerRISCi_ATOM <bob@bobcall.me>
Thu, 23 Aug 2018 09:32:40 +0000 (05:32 -0400)
While this router does have an 802.11ac chipset (QCA9887) which
requires non-free firmware (loadable firmware blobs), the main raido in the SoC
can still be used and does not require non-free firmware / blobs since it
is an ath9k chipset...

As it stands, it is not possible to use the 802.11ac radio due to lack of
drivers, the firmware loading mech. has been removed (linux-libre kernel)
and libreCMC does not include or pull needed firmware. The libreCMC project is
not endorsing the usage of the non-free chpset and the barriers are sufficient
that no one can use libreCMC with the non-free components.

TLDR; It is not possible to use the non-free chipset with libreCMC but the device
can still be used as a wireless router without non-free blobs.

Specification:

- 650/597/216 MHz (CPU/DDR/AHB)
- 128 MB of RAM (DDR2)
- 16 MB of FLASH (SPI NOR)
- 3x 10/100 Mbps Ethernet
- 2T2R 2.4 GHz (QCA9531)
- 1T1R 5 GHz (QCA9887)
- 1x USB 2.0 (power controlled by GPIO)
- 1x microSD (GL857L)
- 3x LED (all driven by GPIO)
- 1x button (reset)
- 1x 2-pos switch
- header for optional PoE module
- 1x micro USB for main power input
- UART + I2C header on PCB

Based upon upstream commit : 2e5252d346e2ec832a203af778b5c1d949f0ae5f

12 files changed:
target/linux/ar71xx/base-files/etc/board.d/01_leds
target/linux/ar71xx/base-files/etc/board.d/02_network
target/linux/ar71xx/base-files/etc/diag.sh
target/linux/ar71xx/base-files/lib/ar71xx.sh
target/linux/ar71xx/base-files/lib/preinit/05_set_preinit_iface_ar71xx
target/linux/ar71xx/base-files/lib/upgrade/platform.sh
target/linux/ar71xx/config-4.4
target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
target/linux/ar71xx/files/arch/mips/ath79/Makefile
target/linux/ar71xx/files/arch/mips/ath79/mach-gl-ar750.c [new file with mode: 0644]
target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
target/linux/ar71xx/image/generic.mk

index f9ba7f65fac8782efb5eefe2dc4b962004e04cfa..40e0ecff45b77a0df39375c4cb886c5b51ee53be 100755 (executable)
@@ -286,6 +286,9 @@ gl-ar150|\
 gl-usb150|\
 gl-ar300|\
 gl-ar300m|\
+gl-ar750)
+       ucidef_set_led_wlan "wlan2g" "WLAN2G" "$board:white:wlan2g" "phy0tpt"
+       ;;
 gl-mifi)
        ucidef_set_led_wlan "wlan" "WLAN" "$board:wlan" "phy0tpt"
 
index f7ee11fb17ec8e445c80634a5f4d9e8767b4b6b3..90c0a07b8926d3d4985410af35fb0751f5e23eae 100755 (executable)
@@ -348,6 +348,7 @@ ar71xx_setup_interfaces()
        onion-omega)
                ucidef_set_interface_lan "wlan0"
                ;;
+       gl-ar750|\
        rb-435g)
                ucidef_set_interfaces_lan_wan "eth1" "eth0"
                ucidef_add_switch "switch0" \
index bc2fc2f774c4f2f0bbfa6e43d9b9a55e9b63153d..61a224d08dd7c9fa90e2b26248238afb686fba31 100644 (file)
@@ -187,6 +187,7 @@ get_status_led() {
        esr1750)
                status_led="$board:amber:power"
                ;;
+       gl-ar750|\
        esr900)
                status_led="engenius:amber:power"
                ;;
@@ -478,7 +479,8 @@ set_state() {
        done)
                status_led_on
                case $(ar71xx_board_name) in
-               gl-ar300m)
+               gl-ar300m|\
+               gl-ar750)
                        fw_printenv lc >/dev/null 2>&1 && fw_setenv "bootcount" 0
                        ;;
                qihoo-c301)
index f98e7d6850e061a8e95b079da980bebc06819bf9..2e9dcfb06ee0092bcb1e429ce694a882f4959257 100755 (executable)
@@ -632,6 +632,9 @@ ar71xx_board_detect() {
        *"GL-AR300M")
                name="gl-ar300m"
                ;;
+       *"GL-AR750")
+               name="gl-ar750"
+               ;;
        *"GL-MIFI")
                name="gl-mifi"
                ;;
index d677599d8c6380d9920e95abc9fb4b92cc0cec29..f36ca89e7b005dbb0da9df8deffd6cc4f5a6223b 100644 (file)
@@ -17,6 +17,7 @@ set_preinit_iface() {
        archer-c7 |\
        bhr-4grv2 |\
        dir-505-a1 |\
+       gl-ar750 |\
        gl-inet |\
        jwap003 |\
        pb42 |\
index 708ca307c3bf320c9bee88f5bec6ead6748e2972..ec7cbce9d333caaad0d4e7a8a50d06dc061d3f0f 100755 (executable)
@@ -275,6 +275,7 @@ platform_check_image() {
                return 1
        ;;
        gl-ar300|\
+       gl-ar750|\
        gl-domino|\
        gl-mifi|\
        hiwifi-hc6361|\
index 6a7dde03c5c1b9659c26b1a1630bbb4f380e6c47..26e9ec2878074414431db4e0c19cb95ee194919f 100644 (file)
@@ -106,6 +106,7 @@ CONFIG_ATH79_MACH_GL_AR150=y
 CONFIG_ATH79_MACH_GL_USB150=y
 CONFIG_ATH79_MACH_GL_AR300=y
 CONFIG_ATH79_MACH_GL_AR300M=y
+CONFIG_ATH79_MACH_GL_AR750=y
 CONFIG_ATH79_MACH_GL_DOMINO=y
 CONFIG_ATH79_MACH_GL_INET=y
 CONFIG_ATH79_MACH_GL_MIFI=y
index d74bce5a788a4232eb0e52ad1b4ff5a2c28d5686..8fa61df28e2e262c81c62ac294fed8b8da26415c 100644 (file)
@@ -691,6 +691,17 @@ config ATH79_MACH_GL_AR300M
        select ATH79_DEV_USB
        select ATH79_DEV_WMAC
 
+config ATH79_MACH_GL_AR750
+       bool "GL.iNet GL-AR750 support"
+       select SOC_QCA953X
+       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
index 3c2f62c65a8cf425f0fe03c34bce41e4bc42469b..a750fefb414d8d094be1392ce7173232878bff57 100644 (file)
@@ -110,6 +110,7 @@ obj-$(CONFIG_ATH79_MACH_GL_USB150)              += mach-gl-usb150.o
 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_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-ar750.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-ar750.c
new file mode 100644 (file)
index 0000000..778dc13
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * GL.iNet GL-AR750 board support
+ *
+ * Copyright (C) 2018 Piotr Dymacz <pepe2k@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/i2c.h>
+#include <linux/i2c-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-ap9x-pci.h"
+#include "dev-eth.h"
+#include "dev-gpio-buttons.h"
+#include "dev-leds-gpio.h"
+#include "dev-m25p80.h"
+#include "dev-usb.h"
+#include "dev-wmac.h"
+#include "machtypes.h"
+
+#define GL_AR750_GPIO_LED_POWER                12
+#define GL_AR750_GPIO_LED_WLAN2G       14
+#define GL_AR750_GPIO_LED_WLAN5G       13
+
+#define GL_AR750_GPIO_BTN_RESET                3
+#define GL_AR750_GPIO_BTN_SW1          0
+
+#define GL_AR750_GPIO_I2C_SCL          16
+#define GL_AR750_GPIO_I2C_SDA          17
+
+#define GL_AR750_GPIO_USB_POWER                2
+
+#define GL_AR750_KEYS_POLL_INTERVAL    20
+#define GL_AR750_KEYS_DEBOUNCE_INTERVAL        (3 * GL_AR750_KEYS_POLL_INTERVAL)
+
+#define GL_AR750_MAC0_OFFSET           0
+#define GL_AR750_WMAC2G_CALDATA_OFFSET 0x1000
+#define GL_AR750_WMAC5G_CALDATA_OFFSET 0x5000
+
+static struct gpio_led gl_ar750_leds_gpio[] __initdata = {
+       {
+               .name           = "gl-ar750:white:power",
+               .gpio           = GL_AR750_GPIO_LED_POWER,
+               .default_state  = LEDS_GPIO_DEFSTATE_KEEP,
+               .active_low     = 1,
+       }, {
+               .name           = "gl-ar750:white:wlan2g",
+               .gpio           = GL_AR750_GPIO_LED_WLAN2G,
+               .active_low     = 1,
+       }, {
+               .name           = "gl-ar750:white:wlan5g",
+               .gpio           = GL_AR750_GPIO_LED_WLAN5G,
+               .active_low     = 1,
+       },
+};
+
+static struct gpio_keys_button gl_ar750_gpio_keys[] __initdata = {
+       {
+               .desc                   = "reset",
+               .type                   = EV_KEY,
+               .code                   = KEY_RESTART,
+               .debounce_interval      = GL_AR750_KEYS_DEBOUNCE_INTERVAL,
+               .gpio                   = GL_AR750_GPIO_BTN_RESET,
+               .active_low             = 1,
+       }, {
+               .desc                   = "sw1",
+               .type                   = EV_KEY,
+               .code                   = BTN_0,
+               .debounce_interval      = GL_AR750_KEYS_DEBOUNCE_INTERVAL,
+               .gpio                   = GL_AR750_GPIO_BTN_SW1,
+               .active_low             = 1,
+       },
+};
+
+static struct i2c_gpio_platform_data gl_ar750_i2c_gpio_data = {
+       .sda_pin = GL_AR750_GPIO_I2C_SDA,
+       .scl_pin = GL_AR750_GPIO_I2C_SCL,
+};
+
+static struct platform_device gl_ar750_i2c_gpio = {
+       .name   = "i2c-gpio",
+       .id     = 0,
+       .dev    = {
+               .platform_data = &gl_ar750_i2c_gpio_data,
+       },
+};
+
+static void __init gl_ar750_setup(void)
+{
+       u8 *art = (u8 *) KSEG1ADDR(0x1f050000);
+
+       ath79_register_m25p80(NULL);
+
+       ath79_setup_ar933x_phy4_switch(false, false);
+       ath79_register_mdio(0, 0x0);
+
+       ath79_switch_data.phy4_mii_en = 1;
+       ath79_switch_data.phy_poll_mask = 0xfc;
+
+       /* WAN */
+       ath79_eth0_data.duplex = DUPLEX_FULL;
+       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 + GL_AR750_MAC0_OFFSET, 0);
+       ath79_register_eth(0);
+
+       /* 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 + GL_AR750_MAC0_OFFSET, 1);
+       ath79_register_eth(1);
+
+       /* Disable JTAG (enables GPIO0-3) */
+       ath79_gpio_function_enable(AR934X_GPIO_FUNC_JTAG_DISABLE);
+
+       ath79_register_leds_gpio(-1, ARRAY_SIZE(gl_ar750_leds_gpio),
+                                gl_ar750_leds_gpio);
+
+       ath79_register_gpio_keys_polled(-1, GL_AR750_KEYS_POLL_INTERVAL,
+                                       ARRAY_SIZE(gl_ar750_gpio_keys),
+                                       gl_ar750_gpio_keys);
+
+       gpio_request_one(GL_AR750_GPIO_USB_POWER,
+                        GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
+                        "USB power");
+
+       platform_device_register(&gl_ar750_i2c_gpio);
+
+       ath79_register_usb();
+
+       ath79_register_wmac(art + GL_AR750_WMAC2G_CALDATA_OFFSET, NULL);
+
+       ap91_pci_init(art + GL_AR750_WMAC5G_CALDATA_OFFSET, NULL);
+}
+
+MIPS_MACHINE(ATH79_MACH_GL_AR750, "GL-AR750", "GL.iNet GL-AR750",
+            gl_ar750_setup);
+
index 540aeaf3daeb7d1b15fe481d5c18538d07dda304..7ae30b1a8376d028ecf7b99c81240f6198f83ab4 100644 (file)
@@ -100,6 +100,7 @@ enum ath79_mach_type {
        ATH79_MACH_GL_AR150,                    /* GL-AR150 support */
        ATH79_MACH_GL_AR300,                    /* GL-AR300 */
        ATH79_MACH_GL_AR300M,                   /* GL-AR300M */
+       ATH79_MACH_GL_AR750,                    /* GL-AR750 */
        ATH79_MACH_GL_DOMINO,                   /* Domino */
        ATH79_MACH_GL_INET,                     /* GL-CONNECT GL-INET */
        ATH79_MACH_GL_MIFI,                     /* GL-MIFI support */
index 8ee6736feb4c6babff5e8d1b54cb70ce5d7c091a..ee7cf84a01133cdbdd7ec4319bfb8e034d9fcc33 100644 (file)
@@ -171,6 +171,19 @@ define Device/gl-ar300m
 endef
 TARGET_DEVICES += gl-ar300m
 
+define Device/gl-ar750
+  DEVICE_TITLE := GL.iNet GL-AR750
+  DEVICE_PACKAGES := kmod-usb-core \
+       kmod-usb2 kmod-usb-storage
+  BOARDNAME := GL-AR750
+  SUPPORTED_DEVICES := gl-ar750
+  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-ar750
+
 define Device/gl-domino
   DEVICE_TITLE := GL Domino Pi
   DEVICE_PACKAGES := kmod-usb-core kmod-usb2