[OpenWrt-Devel] ar71xx: add support for EnGenius ECB1750

Jo-Philipp Wich jow at openwrt.org
Mon Nov 30 14:08:54 EST 2015


Hi Andrew.

> Okay. I just want to apologize for hammering this but I have been having
> an issue trying to post the patch using my work email (office365). It
> seemed to want to send it as an attachment with dos line endings tacked
> on for some reason. I think ive got that taken care of now so here it
> is: Signed-off-by: Andrew Tyler <atyler at arocna3.com>

Please do not put such texts into the patch submission, just explain
what the patch is doing.

Unfortunately your submission is still badly whitespace mangled and
line-wrapped. Please use git-send-email to send your patches. Any
copy-paste approach is most likely going to fail.

Comments inline below.


Regards,
Jo

> 
> diff --git a/package/base-files/files/bin/config_generate
> b/package/base-files/files/bin/config_generate
> index b6675f1..e1168d8 100755
> --- a/package/base-files/files/bin/config_generate
> +++ b/package/base-files/files/bin/config_generate
> @@ -58,10 +58,7 @@ generate_network() {
>          lan)
>              uci -q batch <<-EOF
>                  set network.$1.type='bridge'
> -                set network.$1.proto='static'
> -                set network.$1.ipaddr='192.168.1.1'
> -                set network.$1.netmask='255.255.255.0'
> -                set network.$1.ip6assign='60'
> +                set network.$1.proto='dhcp'

This will pretty much brick any ar71xx board by removing the default lan
ip, so NAK.

>              EOF
>          ;;
>          wan)
> diff --git a/package/base-files/files/etc/config/network
> b/package/base-files/files/etc/config/network
> index d3cd3c6..37f6144 100644
> --- a/package/base-files/files/etc/config/network
> +++ b/package/base-files/files/etc/config/network
> @@ -9,10 +9,7 @@ config interface loopback
>  config interface lan
>      option ifname    eth0
>      option type     bridge
> -    option proto    static
> -    option ipaddr    192.168.1.1
> -    option netmask    255.255.255.0
> -    option ip6assign 60
> +    option proto    dhcp

Same, you cannot just change random default configs to accommodate a
single board.

>  
>  config globals globals
>      option ula_prefix auto
> diff --git a/package/base-files/files/etc/init.d/setwlanmac
> b/package/base-files/files/etc/init.d/setwlanmac
> new file mode 100755
> index 0000000..8230595
> --- /dev/null
> +++ b/package/base-files/files/etc/init.d/setwlanmac

Do the wifi mac extraction in uci-defaults or board.d, like the other
boards do. Also store the mac in /etc/config/wireless if there really is
a need for that.

> @@ -0,0 +1,16 @@
> +#!/bin/sh /etc/rc.common
> +# Copyright (C) 2014 OpenWrt.org
> +
> +START=98
> +STOP=15
> +
> +start() {
> +    grep athaddr /dev/mtdblock1 | cut -f2 -d= > /tmp/athaddr
> +    grep ethaddr /dev/mtdblock1 | cut -f2 -d= > /tmp/ethaddr

Why read athaddr when it is not used?

> +        ifconfig wlan1 down;

Inconsistent indentation (tabs vs. spaces, please use only tabs)

> +        ifconfig wlan1 hw ether `grep ethaddr /dev/mtdblock1 | cut -f2
> -d=`;
> +        ifconfig wlan1 up;

The mac will get lost when wifi is reinitialized.

> +}
> +stop() {
> +    echo "Stop."
> +}

No need for a stop action.

> 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 74c3417..d81843c 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
> @@ -75,6 +75,12 @@ case "$FIRMWARE" in
>          ath10kcal_extract "ART" 20480 2116
>          ath10kcal_patch_mac $(macaddr_add $(cat
> /sys/class/net/eth0/address) +16)
>          ;;
> +    ecb1750)
> +        ath10kcal_extract "art" 20480 2116
> +        ifconfig eth0 hw ether `grep ethaddr /dev/mtdblock1 | cut -f2 -d=`

That does not belong here.

> +        ath10kcal_patch_mac $(macaddr_add $(cat
> /sys/class/net/eth0/address) +1)
> +        ;;
> +
>      esac
>      ;;
>  "ath10k/cal-pci-0000:01:00.0.bin")
> diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh
> b/target/linux/ar71xx/base-files/lib/ar71xx.sh
> index df77040..761afdf 100755
> --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
> +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
> @@ -491,6 +491,9 @@ ar71xx_board_detect() {
>      *"GL AR300")
>          name="gl-ar300"
>          ;;
> +    *"EnGenius ECB1750")
> +    name="ecb1750"
> +    ;;
>      *"EnGenius EPG5000")
>          name="epg5000"
>          ;;
> diff --git
> a/target/linux/ar71xx/base-files/lib/preinit/05_set_iface_mac_ar71xx
> b/target/linux/ar71xx/base-files/lib/preinit/05_set_iface_mac_ar71xx
> index 92b3765..d8ede94 100644
> --- a/target/linux/ar71xx/base-files/lib/preinit/05_set_iface_mac_ar71xx
> +++ b/target/linux/ar71xx/base-files/lib/preinit/05_set_iface_mac_ar71xx
> @@ -41,6 +41,8 @@ preinit_set_mac_address() {
>          wrt160nl)
>              fetch_mac_from_mtd nvram lan_hwaddr wan_hwaddr
>              ;;
> +        ecb1750)
> +            fetch_mac_from_mtd u-boot-env ethaddr

Missing final ";;"

>      esac
>  }
>  
> diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> index 41886e3..d19a33c 100755
> --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> @@ -216,6 +216,7 @@ platform_check_image() {
>      dlan-pro-1200-ac | \
>      dragino2 | \
>      epg5000 | \
> +    ecb1750 | \

Make sure that the entries are ordered.

>      esr1750 | \
>      esr900 | \
>      ew-dorin | \
> diff --git a/target/linux/ar71xx/config-4.1 b/target/linux/ar71xx/config-4.1
> index eff197a..d0b0c8a 100644
> --- a/target/linux/ar71xx/config-4.1
> +++ b/target/linux/ar71xx/config-4.1
> @@ -74,6 +74,7 @@ CONFIG_ATH79_MACH_EL_M150=y
>  CONFIG_ATH79_MACH_EL_MINI=y
>  CONFIG_ATH79_MACH_EPG5000=y
>  CONFIG_ATH79_MACH_ESR1750=y
> +CONFIG_ATH79_MACH_ECB1750=y

Same, use lexical order.

>  CONFIG_ATH79_MACH_ESR900=y
>  CONFIG_ATH79_MACH_EW_DORIN=y
>  CONFIG_ATH79_MACH_F9K1115V2=y
> diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-ecb1750.c
> b/target/linux/ar71xx/files/arch/mips/ath79/mach-ecb1750.c
> new file mode 100644
> index 0000000..aa3cf43
> --- /dev/null
> +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-ecb1750.c
> @@ -0,0 +1,109 @@
> +/*
> + *  EnGenius ECB1750 board support
> + *
> + *  Andrew Tyler <atyler at arocna3.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/platform_device.h>
> +#include <linux/ar8216_platform.h>
> +
> +#include <asm/mach-ath79/ar71xx_regs.h>
> +
> +#include "common.h"
> +#include "dev-ap9x-pci.h"
> +#include "dev-gpio-buttons.h"
> +#include "dev-eth.h"
> +#include "dev-leds-gpio.h"
> +#include "dev-m25p80.h"
> +#include "dev-wmac.h"
> +#include "machtypes.h"
> +#include "pci.h"
> +
> +#define ECB1750_GPIO_LED_LAN        12
> +#define ECB1750_GPIO_LED_WLAN_2G        13
> +#define ECB1750_GPIO_LED_POWER        22
> +#define ECB1750_GPIO_LED_WLAN_5G        23
> +
> +#define ECB1750_GPIO_BTN_RESET        17
> +
> +#define ECB1750_KEYS_POLL_INTERVAL    20    /* msecs */
> +#define ECB1750_KEYS_DEBOUNCE_INTERVAL    (3 * ECB1750_KEYS_POLL_INTERVAL)
> +
> +#define ECB1750_MAC0_OFFSET        0
> +#define ECB1750_MAC1_OFFSET        1
> +#define ECB1750_WMAC_CALDATA_OFFSET    0x1000
> +#define ECB1750_PCIE_CALDATA_OFFSET   0x5000
> +
> +static struct gpio_led ecb1750_leds_gpio[] __initdata = {
> +    {
> +        .name        = "ecb1750:amber:power",
> +        .gpio        = ECB1750_GPIO_LED_POWER,
> +        .active_low    = 0,
> +    },
> +    {
> +        .name        = "ecb1750:blue:lan",
> +        .gpio        = ECB1750_GPIO_LED_LAN,
> +        .active_low    = 0,
> +    },
> +    {
> +        .name        = "ecb1750:blue:wlan24",
> +        .gpio        = ECB1750_GPIO_LED_WLAN_2G,
> +        .active_low    = 0,
> +    },
> +    {
> +        .name        = "ecb1750:blue:wlan58",
> +        .gpio        = ECB1750_GPIO_LED_WLAN_5G,
> +        .active_low    = 0,
> +    },
> +};
> +
> +static struct gpio_keys_button ecb1750_gpio_keys[] __initdata = {
> +    {
> +        .desc        = "Reset button",
> +        .type        = EV_KEY,
> +        .code        = KEY_RESTART,
> +        .debounce_interval = ECB1750_KEYS_DEBOUNCE_INTERVAL,
> +        .gpio        = ECB1750_GPIO_BTN_RESET,
> +        .active_low    = 1,
> +    },
> +};
> +
> +static void __init ecb1750_setup(void)
> +{
> +    u8 *art = (u8 *)KSEG1ADDR(0x1fff0000);
> +    u8 mac[6];
> +
> +    ath79_register_m25p80(NULL);
> +
> +    ath79_register_leds_gpio(-1, ARRAY_SIZE(ecb1750_leds_gpio),
> +                 ecb1750_leds_gpio);
> +    ath79_register_gpio_keys_polled(-1, ECB1750_KEYS_POLL_INTERVAL,
> +                    ARRAY_SIZE(ecb1750_gpio_keys),
> +                    ecb1750_gpio_keys);
> +
> +    ath79_init_mac(mac, art + ECB1750_MAC0_OFFSET, 1);
> +    ath79_init_mac(ath79_eth0_data.mac_addr, art + ECB1750_MAC0_OFFSET, 0);
> +    ath79_register_wmac(art + ECB1750_WMAC_CALDATA_OFFSET, NULL);

You appear to pass the proper mac addresses here, why do you do the mac
juggling in the boot scripts then?

> +    ath79_register_pci();
> +
> +    ath79_setup_qca955x_eth_cfg(QCA955X_ETH_CFG_RGMII_EN);
> +    ath79_register_mdio(0, 0x0);
> +
> +    ath79_init_mac(ath79_eth0_data.mac_addr, art + ECB1750_MAC0_OFFSET, 0);

You did that a few lines above already.

> +
> +    /* GMAC0 is connected to the RMGII interface */
> +    ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
> +    ath79_eth0_data.phy_mask = BIT(5);
> +    ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
> +    ath79_eth0_pll_data.pll_1000 = 0x9a000000;
> +    ath79_eth0_pll_data.pll_100  = 0x80000101;
> +    ath79_eth0_pll_data.pll_10   = 0x80001313;
> +
> +ath79_register_eth(0);

Missing indentation.

> +}
> +
> +MIPS_MACHINE(ATH79_MACH_ECB1750, "ECB1750", "EnGenius ECB1750",
> ecb1750_setup);
> diff --git a/target/linux/ar71xx/generic/profiles/engenius.mk
> b/target/linux/ar71xx/generic/profiles/engenius.mk
> index 7ea93e3..2a19f58 100644
> --- a/target/linux/ar71xx/generic/profiles/engenius.mk
> +++ b/target/linux/ar71xx/generic/profiles/engenius.mk
> @@ -16,6 +16,16 @@ endef
>  
>  $(eval $(call Profile,EAP300V2))
>  
> +define Profile/ECB1750
> +    NAME:=EnGenius ECB1750
> +    PACKAGES:=kmod-ath9k kmod-ath10k
> +endef
> +
> +define Profile/ECB1750/Description
> +    Package set optimized for the EnGenius ECB1750.
> +endef
> +
> +$(eval $(call Profile,ECB1750))
>  
>  define Profile/ESR900
>      NAME:=EnGenius ESR900
> diff --git a/target/linux/ar71xx/image/Makefile
> b/target/linux/ar71xx/image/Makefile
> index d12ad8b..5de7d82 100644
> --- a/target/linux/ar71xx/image/Makefile
> +++ b/target/linux/ar71xx/image/Makefile
> @@ -1484,6 +1484,7 @@
> cameo_ap94_mtdlayout=mtdparts=spi0.0:256k(uboot)ro,64k(config)ro,6208k(firmware)
>  cameo_ap94_mtdlayout_fat=mtdparts=spi0.0:256k(uboot)ro,64k(config)ro,7808k(firmware),64k(caldata)ro,64k at 0x660000(caldata_orig),6208k at 0x50000(firmware_orig)
>  esr900_mtdlayout=mtdparts=spi0.0:192k(u-boot)ro,64k(u-boot-env)ro,1408k(kernel),13248k(rootfs),1024k(manufacture)ro,64k(backup)ro,320k(storage)ro,64k(caldata)ro,14656k at 0x40000(firmware)
>  esr1750_mtdlayout=mtdparts=spi0.0:192k(u-boot)ro,64k(u-boot-env)ro,1408k(kernel),13248k(rootfs),1024k(manufacture)ro,64k(backup)ro,320k(storage)ro,64k(caldata)ro,14656k at 0x40000(firmware)
> +ecb1750_mtdlayout=mtdparts=spi0.0:256k(u-boot),64k(u-boot-env),1408k(kernel),14272k(rootfs),320k(userconfig),64k(art),15680k at 0x50000(firmware)
>  epg5000_mtdlayout=mtdparts=spi0.0:192k(u-boot)ro,64k(u-boot-env)ro,1408k(kernel),13248k(rootfs),1024k(manufacture)ro,64k(backup)ro,320k(storage)ro,64k(caldata)ro,14656k at 0x40000(firmware)
>  ew-dorin_mtdlayout_4M=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env),3712k(firmware),64k(art)
>  ew-dorin_mtdlayout_16M=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env),16000k(firmware),64k(art)ro
> @@ -2324,6 +2325,7 @@ $(eval $(call
> SingleProfile,dLANLzma,64k,dLAN_pro_1200_ac,dlan-pro-1200-ac,dLAN-
>  
>  $(eval $(call
> SingleProfile,EnGenius,64k,ESR900,esr900,ESR900,ttyS0,115200,$$(esr900_mtdlayout),KRuImage,,0x4e))
>  $(eval $(call
> SingleProfile,EnGenius,64k,ESR1750,esr1750,ESR1750,ttyS0,115200,$$(esr1750_mtdlayout),KRuImage,,0x61))
> +$(eval $(call
> SingleProfile,EnGenius,64k,ECB1750,ecb1750,ECB1750,ttyS0,115200,$$(ecb1750_mtdlayout),KRuImage,,0x61))
>  $(eval $(call
> SingleProfile,EnGenius,64k,EPG5000,epg5000,EPG5000,ttyS0,115200,$$(epg5000_mtdlayout),KRuImage,,0x71))
>  
>  $(eval $(call
> SingleProfile,HiWiFi,64k,HIWIFI_HC6361,hiwifi-hc6361,HiWiFi-HC6361,ttyATH0,115200,$$(hiwifi_hc6361_mtdlayout),KRuImage))
> diff --git
> a/target/linux/ar71xx/patches-4.1/914-MIPS-ath79-add-ecb1750-support.patch
> b/target/linux/ar71xx/patches-4.1/914-MIPS-ath79-add-ecb1750-support.patch
> new file mode 100644
> index 0000000..42bb18d
> --- /dev/null
> +++
> b/target/linux/ar71xx/patches-4.1/914-MIPS-ath79-add-ecb1750-support.patch
> @@ -0,0 +1,38 @@
> +--- a/arch/mips/ath79/machtypes.h
> ++++ b/arch/mips/ath79/machtypes.h
> +@@ -70,6 +70,7 @@
> +     ATH79_MACH_EAP7660D,        /* Senao EAP7660D */
> +     ATH79_MACH_EL_M150,        /* EasyLink EL-M150 */
> +     ATH79_MACH_EL_MINI,        /* EasyLink EL-MINI */
> ++    ATH79_MACH_ECB1750,        /* EnGenius ECB1750 */
> +     ATH79_MACH_ESR1750,        /* EnGenius ESR1750 */
> +     ATH79_MACH_EPG5000,        /* EnGenius EPG5000 */
> +     ATH79_MACH_F9K1115V2,        /* Belkin AC1750DB */
> +--- a/arch/mips/ath79/Makefile
> ++++ b/arch/mips/ath79/Makefile
> +@@ -83,6 +83,7 @@
> + obj-$(CONFIG_ATH79_MACH_EL_MINI)    += mach-el-mini.o
> + obj-$(CONFIG_ATH79_MACH_EPG5000)    += mach-epg5000.o
> + obj-$(CONFIG_ATH79_MACH_ESR1750)    += mach-esr1750.o
> ++obj-$(CONFIG_ATH79_MACH_ECB1750)    += mach-ecb1750.o

I suppose the entries here should be kept ordered as well (EL_MINI <
ECB1750 < EPG5000)

> + obj-$(CONFIG_ATH79_MACH_F9K1115V2)    += mach-f9k1115v2.o
> + obj-$(CONFIG_ATH79_MACH_GL_AR150)   += mach-gl-ar150.o
> + obj-$(CONFIG_ATH79_MACH_GL_AR300)    += mach-gl-ar300.o
> +--- a/arch/mips/ath79/Kconfig
> ++++ b/arch/mips/ath79/Kconfig
> +@@ -289,6 +289,15 @@
> +     select ATH79_DEV_LEDS_GPIO
> +     select ATH79_DEV_M25P80
> +     select ATH79_DEV_USB
> ++    select ATH79_DEV_WMAC
> ++
> ++config ATH79_MACH_ECB1750
> ++    bool "EnGenius ECB1750 board support"
> ++    select SOC_QCA955X
> ++    select ATH79_DEV_ETH
> ++    select ATH79_DEV_GPIO_BUTTONS
> ++    select ATH79_DEV_LEDS_GPIO
> ++    select ATH79_DEV_M25P80
> +     select ATH79_DEV_WMAC
> +
> + config ATH79_MACH_WHR_HP_G300N
> 
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel at lists.openwrt.org
> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/openwrt-devel/attachments/20151130/dda202f3/attachment.sig>
-------------- next part --------------
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list