Message ID | 1535372810-64026-1-git-send-email-guilin.wang@gl-inet.com |
---|---|
State | Accepted |
Delegated to: | John Crispin |
Headers | show |
Series | [OpenWrt-Devel] ar71xx: add support for GL.iNet GL-X1200 | expand |
On 27/08/18 14:26, wellnw wrote: > This patch adds supports for GL-X1200. > > Specification: > - SOC: QCA9563 (775MHz) > - Flash: 16 MiB (W25Q128FVSG) > - RAM: 128 MiB DDR2 > - Ethernet: 4x 1Gbps LAN + 1x 1Gbps WAN > - Wireless: 2.4GHz (bgn) and 5GHz (ac) > - USB: 1x USB 2.0 port > - Button: 1x reset button > - LED: 8x LEDS (green) > > Signed-off-by: wellnw <guilin.wang@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 | 6 + > target/linux/ar71xx/base-files/lib/ar71xx.sh | 3 + > .../ar71xx/base-files/lib/upgrade/platform.sh | 1 + > target/linux/ar71xx/config-4.14 | 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-x1200.c | 154 +++++++++++++++++++++ > .../linux/ar71xx/files/arch/mips/ath79/machtypes.h | 1 + > target/linux/ar71xx/generic/config-default | 1 + > target/linux/ar71xx/image/generic.mk | 13 ++ > 13 files changed, 201 insertions(+) > create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/mach-gl-x1200.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 af480cb..03e8157 100755 > --- a/target/linux/ar71xx/base-files/etc/board.d/01_leds > +++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds > @@ -408,6 +408,10 @@ gl-ar750s) > ucidef_set_led_wlan "wlan2g" "WLAN2G" "$board:green:wlan2g" "phy1tpt" > ucidef_set_led_wlan "wlan5g" "WLAN5G" "$board:green:wlan5g" "phy0tpt" > ;; > +gl-x1200) > + ucidef_set_led_wlan "wlan2g" "WLAN2G" "$board:green:wlan2g" "phy1tpt" > + ucidef_set_led_wlan "wlan5g" "WLAN5G" "$board:green:wlan5g" "phy0tpt" > + ;; this section aswell as several other places in this patch is not alphabetically ordered. please fix all occurrences John > 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 7f209fb..6cbd39d 100755 > --- a/target/linux/ar71xx/base-files/etc/board.d/02_network > +++ b/target/linux/ar71xx/base-files/etc/board.d/02_network > @@ -455,6 +455,10 @@ ar71xx_setup_interfaces() > ucidef_add_switch "switch0" \ > "0@eth0" "2:lan:2" "3:lan:1" "1:wan" > ;; > + gl-x1200) > + ucidef_add_switch "switch0" \ > + "0@eth0" "1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1" "5: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 e08df23..bee531a 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 > @@ -106,6 +106,12 @@ case "$FIRMWARE" in > ath10kcal_extract "art" 20480 2116 > ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1) > ;; > + gl-x1200) > + ath10kcal_extract "art" 20480 12064 > + ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \ > + /lib/firmware/ath10k/QCA9888/hw2.0/board.bin > + ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1) > + ;; > koala) > ath10kcal_extract "art" 20480 2116 > ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_binary art 12) +0) > diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh > index 05f497f..383de2d 100755 > --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh > +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh > @@ -767,6 +767,9 @@ ar71xx_board_detect() { > *"GL-AR750S") > name="gl-ar750s" > ;; > + *"GL-X1200") > + name="gl-x1200" > + ;; > *"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 3068aa4..312c371 100755 > --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh > +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh > @@ -269,6 +269,7 @@ platform_check_image() { > gl-ar300|\ > gl-ar750|\ > gl-ar750s|\ > + gl-x1200|\ > gl-domino|\ > gl-mifi|\ > gl-usb150|\ > diff --git a/target/linux/ar71xx/config-4.14 b/target/linux/ar71xx/config-4.14 > index 535b519..3e11925 100644 > --- a/target/linux/ar71xx/config-4.14 > +++ b/target/linux/ar71xx/config-4.14 > @@ -126,6 +126,7 @@ CONFIG_ATH79=y > # 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_X1200 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/config-4.9 b/target/linux/ar71xx/config-4.9 > index 8d25692..c06ec42 100644 > --- a/target/linux/ar71xx/config-4.9 > +++ b/target/linux/ar71xx/config-4.9 > @@ -126,6 +126,7 @@ CONFIG_ATH79=y > # 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_X1200 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 f60825a..74f7c91 100644 > --- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt > +++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt > @@ -858,6 +858,17 @@ config ATH79_MACH_GL_AR750S > select ATH79_DEV_USB > select ATH79_DEV_WMAC > > +config ATH79_MACH_GL_X1200 > + bool "GL.iNet GL-X1200 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 0a2fc9c..2d23bf4 100644 > --- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile > +++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile > @@ -136,6 +136,7 @@ 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_X1200) += mach-gl-x1200.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-x1200.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-x1200.c > new file mode 100644 > index 0000000..f7d1fbc > --- /dev/null > +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-x1200.c > @@ -0,0 +1,154 @@ > +/* > + * GL.iNet GL-X1200 board support > + * > + * Copyright (C) 2018 wellnw <guilin.wang@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 <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_X1200_KEYS_POLL_INTERVAL 20 > +#define GL_X1200_KEYS_DEBOUNCE_INTERVAL (3 * GL_X1200_KEYS_POLL_INTERVAL) > + > +#define GL_X1200_GPIO_LED_WLAN2G 19 > +#define GL_X1200_GPIO_LED_WLAN5G 20 > +#define GL_X1200_GPIO_LED_POWER 1 > +#define GL_X1200_GPIO_USB_POWER 5 > + > +#define GL_X1200_GPIO_BTN_RESET 2 > + > +#define GL_X1200_MAC0_OFFSET 0x0000 > +#define GL_X1200_WMAC_CALDATA_OFFSET 0x1000 > +#define GL_X1200_PCI_CALDATA_OFFSET 0x5000 > + > +static struct spi_board_info gl_x1200_spi_info[] = { > + { > + .bus_num = 0, > + .chip_select = 0, > + .max_speed_hz = 25000000, > + .modalias = "m25p80", > + .platform_data = NULL, > + }, > +}; > + > +static struct ath79_spi_platform_data gl_x1200_spi_data = { > + .bus_num = 0, > + .num_chipselect = 2, > +}; > + > +static struct gpio_led gl_x1200_leds_gpio[] __initdata = { > + { > + .name = "gl-x1200:green:power", > + .gpio = GL_X1200_GPIO_LED_POWER, > + .default_state = LEDS_GPIO_DEFSTATE_KEEP, > + .active_low = 1, > + },{ > + .name = "gl-x1200:green:usbpower", > + .gpio = GL_X1200_GPIO_USB_POWER, > + .active_low = 1, > + },{ > + .name = "gl-x1200:green:wlan2g", > + .gpio = GL_X1200_GPIO_LED_WLAN2G, > + .active_low = 1, > + },{ > + .name = "gl-x1200:green:wlan5g", > + .gpio = GL_X1200_GPIO_LED_WLAN5G, > + .active_low = 0, > + } > +}; > + > +static struct gpio_keys_button gl_x1200_gpio_keys[] __initdata = { > + { > + .desc = "reset", > + .type = EV_KEY, > + .code = KEY_RESTART, > + .debounce_interval = GL_X1200_KEYS_DEBOUNCE_INTERVAL, > + .gpio = GL_X1200_GPIO_BTN_RESET, > + .active_low = 1, > + }, > +}; > + > +static struct ar8327_pad_cfg gl_x1200_ar8327_pad0_cfg = { > + .mode = AR8327_PAD_MAC_SGMII, > + .sgmii_delay_en = true, > +}; > + > +static struct ar8327_platform_data gl_x1200_ar8327_data = { > + .pad0_cfg = &gl_x1200_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_x1200_mdio0_info[] = { > + { > + .bus_id = "ag71xx-mdio.0", > + .mdio_addr = 0, > + .platform_data = &gl_x1200_ar8327_data, > + }, > +}; > + > +static void __init gl_x1200_setup(void) > +{ > + u8 *eeprom = (u8 *) KSEG1ADDR(0x1f050000); > + > + ath79_register_spi(&gl_x1200_spi_data, gl_x1200_spi_info, 1); > + > + ath79_init_mac(ath79_eth0_data.mac_addr, > + eeprom + GL_X1200_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_x1200_mdio0_info, > + ARRAY_SIZE(gl_x1200_mdio0_info)); > + > + ath79_register_mdio(0, 0x00); > + ath79_register_eth(0); > + > + ath79_register_usb(); > + > + ath79_register_wmac(eeprom + GL_X1200_WMAC_CALDATA_OFFSET, NULL); > + > + ap91_pci_init(eeprom + GL_X1200_PCI_CALDATA_OFFSET, NULL); > + > + ath79_register_leds_gpio(-1, ARRAY_SIZE(gl_x1200_leds_gpio), > + gl_x1200_leds_gpio); > + > + ath79_register_gpio_keys_polled(-1, GL_X1200_KEYS_POLL_INTERVAL, > + ARRAY_SIZE(gl_x1200_gpio_keys), > + gl_x1200_gpio_keys); > +} > + > +MIPS_MACHINE(ATH79_MACH_GL_X1200, "GL-X1200", "GL-X1200", > + gl_x1200_setup); > diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h > index 987e80b..0919b8a 100644 > --- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h > +++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h > @@ -133,6 +133,7 @@ enum ath79_mach_type { > 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_X1200, /* GL.iNet GL-X1200 */ > 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 89024c1..31c4ddd 100644 > --- a/target/linux/ar71xx/generic/config-default > +++ b/target/linux/ar71xx/generic/config-default > @@ -96,6 +96,7 @@ 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_X1200=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 3b32081..03a761a 100644 > --- a/target/linux/ar71xx/image/generic.mk > +++ b/target/linux/ar71xx/image/generic.mk > @@ -523,6 +523,19 @@ define Device/gl-ar750s > endef > TARGET_DEVICES += gl-ar750s > > +define Device/gl-x1200 > + DEVICE_TITLE := GL.iNet GL-X1200 > + DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca9887 kmod-usb-core \ > + kmod-usb2 kmod-usb-storage > + BOARDNAME := GL-X1200 > + SUPPORTED_DEVICES := gl-x1200 > + 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-x1200 > + > define Device/gl-domino > DEVICE_TITLE := GL.iNet Domino Pi > DEVICE_PACKAGES := kmod-usb-core kmod-usb2
On Dienstag, 28. August 2018 09:38:39 CEST John Crispin wrote: > > +gl-x1200) > > + ucidef_set_led_wlan "wlan2g" "WLAN2G" "$board:green:wlan2g" "phy1tpt" > > + ucidef_set_led_wlan "wlan5g" "WLAN5G" "$board:green:wlan5g" "phy0tpt" > > + ;; > > this section aswell as several other places in this patch is not > alphabetically ordered. please fix all occurrences And this section could also be merged together with the gl-ar750s section. > > + gl-x1200) > > + ath10kcal_extract "art" 20480 12064 > > + ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \ > > + /lib/firmware/ath10k/QCA9888/hw2.0/board.bin > > + ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1) > > + ;; [...] > > + DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca9887 kmod-usb-core \ > > + kmod-usb2 kmod-usb-storage Is the 5GHz now a QCA9888 or a QCA9887? And why are you linking the pre-cal data to board.bin? QCA9888 has its BDF stored in the board-2.bin [1] (selected by the bmi from the OTP and the variant string from DT/SMBIOS) and per device pre-cal data is stored in /lib/firmware/ath10k/pre-cal-*.bin. The OTP is then merging both and applying extra modifications on top of it. The result is then automatically given to the actual QCA9888 firmware. See for example the OpenMesh A62 for an device with an QCA9888. As you may notice, it is using device tree - something which ar71xx is not using. But the new target ath79 does. Kind regards, Sven [1] https://github.com/openwrt/openwrt/pull/713#issuecomment-369511149
27.08.2018 14:26, wellnw: > This patch adds supports for GL-X1200. > > Specification: > - SOC: QCA9563 (775MHz) > - Flash: 16 MiB (W25Q128FVSG) > - RAM: 128 MiB DDR2 > - Ethernet: 4x 1Gbps LAN + 1x 1Gbps WAN > - Wireless: 2.4GHz (bgn) and 5GHz (ac) > - USB: 1x USB 2.0 port > - Button: 1x reset button > - LED: 8x LEDS (green) > > Signed-off-by: wellnw <guilin.wang@gl-inet.com> Please provide your full name in the Signed-off-by. From our submitting patches guideline [0]: If you add support for new hardware: Include in your commit message ... and how to install OpenWrt on it. Mathias [0] https://openwrt.org/submitting-patches
Hi,Sven I am using the QCA9886 chip for the first time. I saw the example you gave. I think the following code should be deleted. ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin /lib/firmware/ath10k/QCA9888/hw2.0/board.bin Thank you ------------------ Original ------------------ From: "Sven Eckelmann"<sven.eckelmann@openmesh.com>; Date: Tue, Aug 28, 2018 04:04 PM To: "John Crispin"<john@phrozen.org>; Cc: "wellnw"<guilin.wang@gl-inet.com>; "openwrt-devel"<openwrt-devel@lists.openwrt.org>; Subject: Re: [OpenWrt-Devel] [PATCH] ar71xx: add support for GL.iNet GL-X1200 On Dienstag, 28. August 2018 09:38:39 CEST John Crispin wrote: > > +gl-x1200) > > + ucidef_set_led_wlan "wlan2g" "WLAN2G" "$board:green:wlan2g" "phy1tpt" > > + ucidef_set_led_wlan "wlan5g" "WLAN5G" "$board:green:wlan5g" "phy0tpt" > > + ;; > > this section aswell as several other places in this patch is not > alphabetically ordered. please fix all occurrences And this section could also be merged together with the gl-ar750s section. > > + gl-x1200) > > + ath10kcal_extract "art" 20480 12064 > > + ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \ > > + /lib/firmware/ath10k/QCA9888/hw2.0/board.bin > > + ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1) > > + ;; [...] > > + DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca9887 kmod-usb-core \ > > + kmod-usb2 kmod-usb-storage Is the 5GHz now a QCA9888 or a QCA9887? And why are you linking the pre-cal data to board.bin? QCA9888 has its BDF stored in the board-2.bin [1] (selected by the bmi from the OTP and the variant string from DT/SMBIOS) and per device pre-cal data is stored in /lib/firmware/ath10k/pre-cal-*.bin. The OTP is then merging both and applying extra modifications on top of it. The result is then automatically given to the actual QCA9888 firmware. See for example the OpenMesh A62 for an device with an QCA9888. As you may notice, it is using device tree - something which ar71xx is not using. But the new target ath79 does. Kind regards, Sven [1] https://github.com/openwrt/openwrt/pull/713#issuecomment-369511149 <div>Hi,Sven</div><div> I am using the QCA9886 chip for the first time. I saw the example you gave.</div><div> I think the following code should be deleted.</div><div> ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin /lib/firmware/ath10k/QCA9888/hw2.0/board.bin</div><div><includetail><div> </div><div>Thank you</div><div> </div><div style="font:Verdana normal 14px;color:#000;"><div style="FONT-SIZE: 12px;FONT-FAMILY: Arial Narrow;padding:2px 0 2px 0;">------------------ Original ------------------</div><div style="FONT-SIZE: 12px;background:#efefef;padding:8px;"><div id="menu_sender"><b>From: </b> "Sven Eckelmann"<sven.eckelmann@openmesh.com>;</div><div><b>Date: </b> Tue, Aug 28, 2018 04:04 PM</div><div><b>To: </b> "John Crispin"<john@phrozen.org>; <wbr></div><div><b>Cc: </b> "wellnw"<guilin.wang@gl-inet.com>; "openwrt-devel"<openwrt-devel@lists.openwrt.org>; <wbr></div><div><b>Subject: </b> Re: [OpenWrt-Devel] [PATCH] ar71xx: add support for GL.iNet GL-X1200</div></div><div> </div><div style="position:relative;">On Dienstag, 28. August 2018 09:38:39 CEST John Crispin wrote:<br>> > +gl-x1200)<br>> > + ucidef_set_led_wlan "wlan2g" "WLAN2G" "$board:green:wlan2g" "phy1tpt"<br>> > + ucidef_set_led_wlan "wlan5g" "WLAN5G" "$board:green:wlan5g" "phy0tpt"<br>> > + ;;<br>> <br>> this section aswell as several other places in this patch is not <br>> alphabetically ordered. please fix all occurrences<br><br>And this section could also be merged together with the gl-ar750s section.<br><br>> > + gl-x1200)<br>> > + ath10kcal_extract "art" 20480 12064<br>> > + ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \<br>> > + /lib/firmware/ath10k/QCA9888/hw2.0/board.bin<br>> > + ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1)<br>> > + ;;<br>[...]<br>> > + DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca9887 kmod-usb-core \<br>> > + kmod-usb2 kmod-usb-storage<br><br>Is the 5GHz now a QCA9888 or a QCA9887? And why are you linking the pre-cal <br>data to board.bin? QCA9888 has its BDF stored in the board-2.bin [1] (selected by <br>the bmi from the OTP and the variant string from DT/SMBIOS) and per device <br>pre-cal data is stored in /lib/firmware/ath10k/pre-cal-*.bin. The OTP is then<br>merging both and applying extra modifications on top of it. The result is then<br>automatically given to the actual QCA9888 firmware.<br><br>See for example the OpenMesh A62 for an device with an QCA9888. As you may <br>notice, it is using device tree - something which ar71xx is not using. But the <br>new target ath79 does.<br><br>Kind regards,<br> Sven<br><br>[1] https://github.com/openwrt/openwrt/pull/713#issuecomment-369511149<br></div></div><!--<![endif]--></includetail></div>
On Dienstag, 28. August 2018 17:26:36 CEST Wang guilin wrote: > Hi,Sven > I am using the QCA9886 chip for the first time. I saw the example you gave. > I think the following code should be deleted. > ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin /lib/firmware/ath10k/QCA9888/hw2.0/board.bin But you also have to submit the correct BDF to Kalle Valo when it is not the same as the default one. Right now the board-2.bin provides: * bus=pci,bmi-chip-id=0,bmi-board-id=16.bin created size: 12064 * bus=pci,bmi-chip-id=0,bmi-board-id=17.bin created size: 12064 * bus=pci,bmi-chip-id=0,bmi-board-id=18.bin created size: 12064 * bus=pci,bmi-chip-id=0,bmi-board-id=23.bin created size: 12064 * bus=pci,bmi-chip-id=0,bmi-board-id=24.bin created size: 12064 * bus=pci,bmi-chip-id=0,bmi-board-id=25.bin created size: 12064 * bus=pci,bmi-chip-id=0,bmi-board-id=16,variant=OM-A62.bin created size: 12064 As you can see, the OpenMesh A62 used the reference board with the bmi-board-id=16 but required some changes in the BDF. Thus I had to submit the modified bus=pci,bmi-chip-id=0,bmi-board-id=16,variant=OM-A62.bin to Kalle for integration in QCA9888/hw2.0/board-2.bin of https://github.com/kvalo/ath10k-firmware. And then you have to tell ath10k to load the BDF with the variant= string and not the one without it. Of course, I don't know whether you had to change anything in the BDF or not. So I cannot say whether it is enough for you to just delete this symlink. Kind regards, Sven
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 af480cb..03e8157 100755 --- a/target/linux/ar71xx/base-files/etc/board.d/01_leds +++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds @@ -408,6 +408,10 @@ gl-ar750s) ucidef_set_led_wlan "wlan2g" "WLAN2G" "$board:green:wlan2g" "phy1tpt" ucidef_set_led_wlan "wlan5g" "WLAN5G" "$board:green:wlan5g" "phy0tpt" ;; +gl-x1200) + 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 7f209fb..6cbd39d 100755 --- a/target/linux/ar71xx/base-files/etc/board.d/02_network +++ b/target/linux/ar71xx/base-files/etc/board.d/02_network @@ -455,6 +455,10 @@ ar71xx_setup_interfaces() ucidef_add_switch "switch0" \ "0@eth0" "2:lan:2" "3:lan:1" "1:wan" ;; + gl-x1200) + ucidef_add_switch "switch0" \ + "0@eth0" "1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1" "5: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 e08df23..bee531a 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 @@ -106,6 +106,12 @@ case "$FIRMWARE" in ath10kcal_extract "art" 20480 2116 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1) ;; + gl-x1200) + ath10kcal_extract "art" 20480 12064 + ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \ + /lib/firmware/ath10k/QCA9888/hw2.0/board.bin + ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1) + ;; koala) ath10kcal_extract "art" 20480 2116 ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_binary art 12) +0) diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh index 05f497f..383de2d 100755 --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh @@ -767,6 +767,9 @@ ar71xx_board_detect() { *"GL-AR750S") name="gl-ar750s" ;; + *"GL-X1200") + name="gl-x1200" + ;; *"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 3068aa4..312c371 100755 --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh @@ -269,6 +269,7 @@ platform_check_image() { gl-ar300|\ gl-ar750|\ gl-ar750s|\ + gl-x1200|\ gl-domino|\ gl-mifi|\ gl-usb150|\ diff --git a/target/linux/ar71xx/config-4.14 b/target/linux/ar71xx/config-4.14 index 535b519..3e11925 100644 --- a/target/linux/ar71xx/config-4.14 +++ b/target/linux/ar71xx/config-4.14 @@ -126,6 +126,7 @@ CONFIG_ATH79=y # 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_X1200 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/config-4.9 b/target/linux/ar71xx/config-4.9 index 8d25692..c06ec42 100644 --- a/target/linux/ar71xx/config-4.9 +++ b/target/linux/ar71xx/config-4.9 @@ -126,6 +126,7 @@ CONFIG_ATH79=y # 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_X1200 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 f60825a..74f7c91 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt +++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt @@ -858,6 +858,17 @@ config ATH79_MACH_GL_AR750S select ATH79_DEV_USB select ATH79_DEV_WMAC +config ATH79_MACH_GL_X1200 + bool "GL.iNet GL-X1200 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 0a2fc9c..2d23bf4 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile +++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile @@ -136,6 +136,7 @@ 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_X1200) += mach-gl-x1200.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-x1200.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-x1200.c new file mode 100644 index 0000000..f7d1fbc --- /dev/null +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-x1200.c @@ -0,0 +1,154 @@ +/* + * GL.iNet GL-X1200 board support + * + * Copyright (C) 2018 wellnw <guilin.wang@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 <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_X1200_KEYS_POLL_INTERVAL 20 +#define GL_X1200_KEYS_DEBOUNCE_INTERVAL (3 * GL_X1200_KEYS_POLL_INTERVAL) + +#define GL_X1200_GPIO_LED_WLAN2G 19 +#define GL_X1200_GPIO_LED_WLAN5G 20 +#define GL_X1200_GPIO_LED_POWER 1 +#define GL_X1200_GPIO_USB_POWER 5 + +#define GL_X1200_GPIO_BTN_RESET 2 + +#define GL_X1200_MAC0_OFFSET 0x0000 +#define GL_X1200_WMAC_CALDATA_OFFSET 0x1000 +#define GL_X1200_PCI_CALDATA_OFFSET 0x5000 + +static struct spi_board_info gl_x1200_spi_info[] = { + { + .bus_num = 0, + .chip_select = 0, + .max_speed_hz = 25000000, + .modalias = "m25p80", + .platform_data = NULL, + }, +}; + +static struct ath79_spi_platform_data gl_x1200_spi_data = { + .bus_num = 0, + .num_chipselect = 2, +}; + +static struct gpio_led gl_x1200_leds_gpio[] __initdata = { + { + .name = "gl-x1200:green:power", + .gpio = GL_X1200_GPIO_LED_POWER, + .default_state = LEDS_GPIO_DEFSTATE_KEEP, + .active_low = 1, + },{ + .name = "gl-x1200:green:usbpower", + .gpio = GL_X1200_GPIO_USB_POWER, + .active_low = 1, + },{ + .name = "gl-x1200:green:wlan2g", + .gpio = GL_X1200_GPIO_LED_WLAN2G, + .active_low = 1, + },{ + .name = "gl-x1200:green:wlan5g", + .gpio = GL_X1200_GPIO_LED_WLAN5G, + .active_low = 0, + } +}; + +static struct gpio_keys_button gl_x1200_gpio_keys[] __initdata = { + { + .desc = "reset", + .type = EV_KEY, + .code = KEY_RESTART, + .debounce_interval = GL_X1200_KEYS_DEBOUNCE_INTERVAL, + .gpio = GL_X1200_GPIO_BTN_RESET, + .active_low = 1, + }, +}; + +static struct ar8327_pad_cfg gl_x1200_ar8327_pad0_cfg = { + .mode = AR8327_PAD_MAC_SGMII, + .sgmii_delay_en = true, +}; + +static struct ar8327_platform_data gl_x1200_ar8327_data = { + .pad0_cfg = &gl_x1200_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_x1200_mdio0_info[] = { + { + .bus_id = "ag71xx-mdio.0", + .mdio_addr = 0, + .platform_data = &gl_x1200_ar8327_data, + }, +}; + +static void __init gl_x1200_setup(void) +{ + u8 *eeprom = (u8 *) KSEG1ADDR(0x1f050000); + + ath79_register_spi(&gl_x1200_spi_data, gl_x1200_spi_info, 1); + + ath79_init_mac(ath79_eth0_data.mac_addr, + eeprom + GL_X1200_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_x1200_mdio0_info, + ARRAY_SIZE(gl_x1200_mdio0_info)); + + ath79_register_mdio(0, 0x00); + ath79_register_eth(0); + + ath79_register_usb(); + + ath79_register_wmac(eeprom + GL_X1200_WMAC_CALDATA_OFFSET, NULL); + + ap91_pci_init(eeprom + GL_X1200_PCI_CALDATA_OFFSET, NULL); + + ath79_register_leds_gpio(-1, ARRAY_SIZE(gl_x1200_leds_gpio), + gl_x1200_leds_gpio); + + ath79_register_gpio_keys_polled(-1, GL_X1200_KEYS_POLL_INTERVAL, + ARRAY_SIZE(gl_x1200_gpio_keys), + gl_x1200_gpio_keys); +} + +MIPS_MACHINE(ATH79_MACH_GL_X1200, "GL-X1200", "GL-X1200", + gl_x1200_setup); diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h index 987e80b..0919b8a 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h +++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h @@ -133,6 +133,7 @@ enum ath79_mach_type { 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_X1200, /* GL.iNet GL-X1200 */ 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 89024c1..31c4ddd 100644 --- a/target/linux/ar71xx/generic/config-default +++ b/target/linux/ar71xx/generic/config-default @@ -96,6 +96,7 @@ 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_X1200=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 3b32081..03a761a 100644 --- a/target/linux/ar71xx/image/generic.mk +++ b/target/linux/ar71xx/image/generic.mk @@ -523,6 +523,19 @@ define Device/gl-ar750s endef TARGET_DEVICES += gl-ar750s +define Device/gl-x1200 + DEVICE_TITLE := GL.iNet GL-X1200 + DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca9887 kmod-usb-core \ + kmod-usb2 kmod-usb-storage + BOARDNAME := GL-X1200 + SUPPORTED_DEVICES := gl-x1200 + 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-x1200 + define Device/gl-domino DEVICE_TITLE := GL.iNet Domino Pi DEVICE_PACKAGES := kmod-usb-core kmod-usb2
This patch adds supports for GL-X1200. Specification: - SOC: QCA9563 (775MHz) - Flash: 16 MiB (W25Q128FVSG) - RAM: 128 MiB DDR2 - Ethernet: 4x 1Gbps LAN + 1x 1Gbps WAN - Wireless: 2.4GHz (bgn) and 5GHz (ac) - USB: 1x USB 2.0 port - Button: 1x reset button - LED: 8x LEDS (green) Signed-off-by: wellnw <guilin.wang@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 | 6 + target/linux/ar71xx/base-files/lib/ar71xx.sh | 3 + .../ar71xx/base-files/lib/upgrade/platform.sh | 1 + target/linux/ar71xx/config-4.14 | 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-x1200.c | 154 +++++++++++++++++++++ .../linux/ar71xx/files/arch/mips/ath79/machtypes.h | 1 + target/linux/ar71xx/generic/config-default | 1 + target/linux/ar71xx/image/generic.mk | 13 ++ 13 files changed, 201 insertions(+) create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/mach-gl-x1200.c