Message ID | 20180816001516.15741-1-mail@david-bauer.net |
---|---|
State | Changes Requested |
Headers | show |
Series | [OpenWrt-Devel,v2] ath79: add support for Fritz!Box 4020 | expand |
I was informed that gpio-hogs might be the thing we are looking for, i will look into that. So this patch should be hold back for now. On 8/16/18 2:15 AM, David Bauer wrote: > This commit adds support for the AVM Fritz!Box 4020 WiFi-router. > > SoC: Qualcomm Atheros QCA9561 (Dragonfly) 750MHz > RAM: Winbond W971GG6KB-25 > FLASH: Macronix MX25L12835F > WiFi: QCA9561 b/g/n 3x3 450Mbit/s > USB: 1x USB 2.0 > IN: WPS button, WiFi button > OUT: Power LED green, Internet LED green, WLAN LED green, > LAN LED green, INFO LED green, INFO LED red > UART: Header Next to Black metal shield > Pinout is 3.3V - RX - TX - GND (Square Pad is 3.3V) > The Serial setting is 115200-8-N-1. > > Tested and working: > - Ethernet (LAN + WAN) > - WiFi (correct MAC) > - Installation via EVA bootloader > - OpenWRT sysupgrade > - Buttons > - LEDs > > Not working: > - USB port > > Installation via EVA: > In the first seconds after Power is connected, the bootloader will > listen for FTP connections on 169.254.157.1 (Might also be 192.168.178.1). > Firmware can be uploaded like following: > > ftp> quote USER adam2 > ftp> quote PASS adam2 > ftp> binary > ftp> debug > ftp> passive > ftp> quote MEDIA FLSH > ftp> put openwrt-sysupgrade.bin mtd1 > > Note that this procedure might take up to two minutes. After transfer is > complete you need to powercycle the device to boot OpenWRT. > > Signed-off-by: David Bauer <mail@david-bauer.net> > --- > > v2 changes: > - add annotation for initial output-line-state setting > - rebase onto current master > > .../ath79/base-files/etc/board.d/01_leds | 4 + > .../ath79/base-files/etc/board.d/02_network | 5 + > .../etc/hotplug.d/firmware/10-ath9k-eeprom | 3 + > .../linux/ath79/dts/qca9561_avm_fritz4020.dts | 172 ++++++++++++++++++ > target/linux/ath79/image/generic.mk | 14 ++ > .../005-gpio-74x164-add-initvals.patch | 15 ++ > 6 files changed, 213 insertions(+) > create mode 100644 target/linux/ath79/dts/qca9561_avm_fritz4020.dts > create mode 100644 target/linux/ath79/patches-4.14/005-gpio-74x164-add-initvals.patch > > diff --git a/target/linux/ath79/base-files/etc/board.d/01_leds b/target/linux/ath79/base-files/etc/board.d/01_leds > index c3dc1bbe56..f058bf599e 100755 > --- a/target/linux/ath79/base-files/etc/board.d/01_leds > +++ b/target/linux/ath79/base-files/etc/board.d/01_leds > @@ -17,6 +17,10 @@ avm,fritz300e) > ucidef_set_led_rssi "rssimediumhigh" "RSSIMEDIUMHIGH" "$boardname:green:rssi3" "wlan0" "60" "100" > ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "$boardname:green:rssi4" "wlan0" "80" "100" > ;; > +avm,fritz4020) > + ucidef_set_led_netdev "wan" "WAN" "$boardname:green:wan" "eth0" > + ucidef_set_led_switch "lan" "LAN" "$boardname:green:lan" "switch0" "0x1E" > + ;; > etactica,eg200) > ucidef_set_led_netdev "lan" "LAN" "$boardname:red:eth0" "eth0" > ucidef_set_led_oneshot "modbus" "Modbus" "$boardname:red:modbus" "100" "33" > diff --git a/target/linux/ath79/base-files/etc/board.d/02_network b/target/linux/ath79/base-files/etc/board.d/02_network > index a29a295c56..6cd1686e23 100755 > --- a/target/linux/ath79/base-files/etc/board.d/02_network > +++ b/target/linux/ath79/base-files/etc/board.d/02_network > @@ -43,6 +43,7 @@ ath79_setup_interfaces() > etactica,eg200) > ucidef_set_interface_lan "eth0" "dhcp" > ;; > + avm,fritz4020|\ > glinet,ar150|\ > glinet,ar300m) > ucidef_set_interfaces_lan_wan "eth1" "eth0" > @@ -155,6 +156,10 @@ ath79_setup_macs() > avm,fritz300e) > lan_mac=$(fritz_tffs -n maca -i $(find_mtd_part "tffs (1)")) > ;; > + avm,fritz4020) > + lan_mac=$(fritz_tffs -n maca -i $(find_mtd_part "tffs (1)")) > + wan_mac=$(fritz_tffs -n macb -i $(find_mtd_part "tffs (1)")) > + ;; > dlink,dir-825-b1) > lan_mac=$(mtd_get_mac_text "caldata" 65440) > wan_mac=$(mtd_get_mac_text "caldata" 65460) > diff --git a/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom > index f71139c55c..c36b566a35 100644 > --- a/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom > +++ b/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom > @@ -97,6 +97,9 @@ board=$(board_name) > case "$FIRMWARE" in > "ath9k-eeprom-ahb-18100000.wmac.bin") > case $board in > + avm,fritz4020) > + ath9k_eeprom_extract_reverse "urlader" 5441 1088 > + ;; > iodata,wn-ac1600dgr2) > ath9k_eeprom_extract "art" 4096 1088 > ath9k_patch_fw_mac $(mtd_get_mac_ascii u-boot-env ethaddr) 2 > diff --git a/target/linux/ath79/dts/qca9561_avm_fritz4020.dts b/target/linux/ath79/dts/qca9561_avm_fritz4020.dts > new file mode 100644 > index 0000000000..a4e059efd4 > --- /dev/null > +++ b/target/linux/ath79/dts/qca9561_avm_fritz4020.dts > @@ -0,0 +1,172 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT > +/dts-v1/; > + > +#include <dt-bindings/gpio/gpio.h> > +#include <dt-bindings/input/input.h> > + > +#include "qca956x.dtsi" > + > +/ { > + compatible = "avm,fritz4020", "qca,qca9560"; > + model = "AVM FRITZ!Box 4020"; > + > + aliases { > + led-boot = &power; > + led-failsafe = &info_red; > + led-running = &power; > + led-upgrade = &info_red; > + }; > + > + chosen { > + bootargs = "console=ttyS0,115200n8"; > + }; > + > + led_spi { > + compatible = "spi-gpio"; > + #address-cells = <1>; > + #size-cells = <0>; > + > + gpio-sck = <&gpio 20 GPIO_ACTIVE_HIGH>; > + gpio-mosi = <&gpio 19 GPIO_ACTIVE_HIGH>; > + num-chipselects = <0>; > + > + led_gpio: led_gpio@0 { > + compatible = "fairchild,74hc595"; > + reg = <0>; > + gpio-controller; > + #gpio-cells = <2>; > + registers-number = <1>; > + lines-initial-states = /bits/ 8 <0xff>; > + spi-max-frequency = <10000000>; > + }; > + }; > + > + leds { > + compatible = "gpio-leds"; > + > + power: power { > + label = "fritz4020:green:power"; > + gpios = <&led_gpio 2 GPIO_ACTIVE_LOW>; > + default-state = "on"; > + }; > + > + wlan { > + label = "fritz4020:green:wlan"; > + gpios = <&led_gpio 3 GPIO_ACTIVE_LOW>; > + linux,default-trigger = "phy0tpt"; > + default-state = "off"; > + }; > + > + lan { > + label = "fritz4020:green:lan"; > + gpios = <&led_gpio 0 GPIO_ACTIVE_LOW>; > + default-state = "off"; > + }; > + > + wan { > + label = "fritz4020:green:wan"; > + gpios = <&led_gpio 4 GPIO_ACTIVE_LOW>; > + default-state = "off"; > + }; > + > + info { > + label = "fritz4020:green:info"; > + gpios = <&led_gpio 6 GPIO_ACTIVE_LOW>; > + default-state = "off"; > + }; > + > + info_red: info_red { > + label = "fritz4020:red:info"; > + gpios = <&led_gpio 1 GPIO_ACTIVE_LOW>; > + default-state = "off"; > + }; > + }; > + > + keys { > + compatible = "gpio-keys-polled"; > + poll-interval = <100>; > + > + wps_button { > + label = "WPS button"; > + linux,code = <KEY_WPS_BUTTON>; > + gpios = <&gpio 2 GPIO_ACTIVE_HIGH>; > + }; > + > + wlan_button { > + label = "WLAN button"; > + linux,code = <KEY_RFKILL>; > + gpios = <&gpio 21 GPIO_ACTIVE_HIGH>; > + }; > + }; > +}; > + > +&uart { > + status = "okay"; > +}; > + > +&gpio { > + status = "okay"; > +}; > + > +&spi { > + status = "okay"; > + num-cs = <1>; > + > + flash@0 { > + compatible = "jedec,spi-nor"; > + reg = <0>; > + spi-max-frequency = <25000000>; > + > + partitions { > + compatible = "fixed-partitions"; > + #address-cells = <1>; > + #size-cells = <1>; > + > + partition@0 { > + label = "urlader"; > + reg = <0x000000 0x020000>; > + read-only; > + }; > + > + partition@1 { > + label = "firmware"; > + reg = <0x020000 0xee0000>; > + }; > + > + partition@2 { > + label = "tffs (1)"; > + reg = <0xf00000 0x080000>; > + read-only; > + }; > + > + partition@3 { > + label = "tffs (2)"; > + reg = <0xf80000 0x080000>; > + read-only; > + }; > + }; > + }; > +}; > + > +ð0 { > + status = "okay"; > + > + phy-mode = "mii"; > + phy-handle = <&swphy0>; > + > + gmac-config { > + device = <&gmac>; > + > + switch-phy-addr-swap = <1>; > + switch-phy-swap = <1>; > + }; > +}; > + > +ð1 { > + status = "okay"; > +}; > + > +&wmac { > + status = "okay"; > + qca,no-eeprom; > +}; > diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk > index 01020810cc..64043d7535 100644 > --- a/target/linux/ath79/image/generic.mk > +++ b/target/linux/ath79/image/generic.mk > @@ -13,6 +13,20 @@ define Device/avm_fritz300e > endef > TARGET_DEVICES += avm_fritz300e > > +define Device/avm_fritz4020 > + ATH_SOC := qca9561 > + DEVICE_TITLE := AVM FRITZ!Box 4020 > + IMAGE_SIZE := 15232k > + KERNEL := kernel-bin | append-dtb | lzma | eva-image > + KERNEL_INITRAMFS := $$(KERNEL) > + IMAGE/sysupgrade.bin := append-kernel | pad-to 64k | \ > + append-squashfs-fakeroot-be | pad-to 256 | \ > + append-rootfs | pad-rootfs | append-metadata | check-size $$$$(IMAGE_SIZE) > + DEVICE_PACKAGES := fritz-tffs > + SUPPORTED_DEVICES += fritz4020 > +endef > +TARGET_DEVICES += avm_fritz4020 > + > define Device/buffalo_wzr-hp-g450h > ATH_SOC := ar7242 > DEVICE_TITLE := Buffalo WZR-HP-G450H > diff --git a/target/linux/ath79/patches-4.14/005-gpio-74x164-add-initvals.patch b/target/linux/ath79/patches-4.14/005-gpio-74x164-add-initvals.patch > new file mode 100644 > index 0000000000..d72f7140c2 > --- /dev/null > +++ b/target/linux/ath79/patches-4.14/005-gpio-74x164-add-initvals.patch > @@ -0,0 +1,15 @@ > +Index: linux-4.14.62/drivers/gpio/gpio-74x164.c > +=================================================================== > +--- linux-4.14.62.orig/drivers/gpio/gpio-74x164.c > ++++ linux-4.14.62/drivers/gpio/gpio-74x164.c > +@@ -151,6 +151,10 @@ static int gen_74x164_probe(struct spi_d > + chip->gpio_chip.parent = &spi->dev; > + chip->gpio_chip.owner = THIS_MODULE; > + > ++ /* Set initial output line values */ > ++ of_property_read_u8_array(spi->dev.of_node, "lines-initial-states", chip->buffer, > ++ chip->registers); > ++ > + mutex_init(&chip->lock); > + > + ret = __gen_74x164_write_config(chip); >
diff --git a/target/linux/ath79/base-files/etc/board.d/01_leds b/target/linux/ath79/base-files/etc/board.d/01_leds index c3dc1bbe56..f058bf599e 100755 --- a/target/linux/ath79/base-files/etc/board.d/01_leds +++ b/target/linux/ath79/base-files/etc/board.d/01_leds @@ -17,6 +17,10 @@ avm,fritz300e) ucidef_set_led_rssi "rssimediumhigh" "RSSIMEDIUMHIGH" "$boardname:green:rssi3" "wlan0" "60" "100" ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "$boardname:green:rssi4" "wlan0" "80" "100" ;; +avm,fritz4020) + ucidef_set_led_netdev "wan" "WAN" "$boardname:green:wan" "eth0" + ucidef_set_led_switch "lan" "LAN" "$boardname:green:lan" "switch0" "0x1E" + ;; etactica,eg200) ucidef_set_led_netdev "lan" "LAN" "$boardname:red:eth0" "eth0" ucidef_set_led_oneshot "modbus" "Modbus" "$boardname:red:modbus" "100" "33" diff --git a/target/linux/ath79/base-files/etc/board.d/02_network b/target/linux/ath79/base-files/etc/board.d/02_network index a29a295c56..6cd1686e23 100755 --- a/target/linux/ath79/base-files/etc/board.d/02_network +++ b/target/linux/ath79/base-files/etc/board.d/02_network @@ -43,6 +43,7 @@ ath79_setup_interfaces() etactica,eg200) ucidef_set_interface_lan "eth0" "dhcp" ;; + avm,fritz4020|\ glinet,ar150|\ glinet,ar300m) ucidef_set_interfaces_lan_wan "eth1" "eth0" @@ -155,6 +156,10 @@ ath79_setup_macs() avm,fritz300e) lan_mac=$(fritz_tffs -n maca -i $(find_mtd_part "tffs (1)")) ;; + avm,fritz4020) + lan_mac=$(fritz_tffs -n maca -i $(find_mtd_part "tffs (1)")) + wan_mac=$(fritz_tffs -n macb -i $(find_mtd_part "tffs (1)")) + ;; dlink,dir-825-b1) lan_mac=$(mtd_get_mac_text "caldata" 65440) wan_mac=$(mtd_get_mac_text "caldata" 65460) diff --git a/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom index f71139c55c..c36b566a35 100644 --- a/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom +++ b/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom @@ -97,6 +97,9 @@ board=$(board_name) case "$FIRMWARE" in "ath9k-eeprom-ahb-18100000.wmac.bin") case $board in + avm,fritz4020) + ath9k_eeprom_extract_reverse "urlader" 5441 1088 + ;; iodata,wn-ac1600dgr2) ath9k_eeprom_extract "art" 4096 1088 ath9k_patch_fw_mac $(mtd_get_mac_ascii u-boot-env ethaddr) 2 diff --git a/target/linux/ath79/dts/qca9561_avm_fritz4020.dts b/target/linux/ath79/dts/qca9561_avm_fritz4020.dts new file mode 100644 index 0000000000..a4e059efd4 --- /dev/null +++ b/target/linux/ath79/dts/qca9561_avm_fritz4020.dts @@ -0,0 +1,172 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include <dt-bindings/gpio/gpio.h> +#include <dt-bindings/input/input.h> + +#include "qca956x.dtsi" + +/ { + compatible = "avm,fritz4020", "qca,qca9560"; + model = "AVM FRITZ!Box 4020"; + + aliases { + led-boot = &power; + led-failsafe = &info_red; + led-running = &power; + led-upgrade = &info_red; + }; + + chosen { + bootargs = "console=ttyS0,115200n8"; + }; + + led_spi { + compatible = "spi-gpio"; + #address-cells = <1>; + #size-cells = <0>; + + gpio-sck = <&gpio 20 GPIO_ACTIVE_HIGH>; + gpio-mosi = <&gpio 19 GPIO_ACTIVE_HIGH>; + num-chipselects = <0>; + + led_gpio: led_gpio@0 { + compatible = "fairchild,74hc595"; + reg = <0>; + gpio-controller; + #gpio-cells = <2>; + registers-number = <1>; + lines-initial-states = /bits/ 8 <0xff>; + spi-max-frequency = <10000000>; + }; + }; + + leds { + compatible = "gpio-leds"; + + power: power { + label = "fritz4020:green:power"; + gpios = <&led_gpio 2 GPIO_ACTIVE_LOW>; + default-state = "on"; + }; + + wlan { + label = "fritz4020:green:wlan"; + gpios = <&led_gpio 3 GPIO_ACTIVE_LOW>; + linux,default-trigger = "phy0tpt"; + default-state = "off"; + }; + + lan { + label = "fritz4020:green:lan"; + gpios = <&led_gpio 0 GPIO_ACTIVE_LOW>; + default-state = "off"; + }; + + wan { + label = "fritz4020:green:wan"; + gpios = <&led_gpio 4 GPIO_ACTIVE_LOW>; + default-state = "off"; + }; + + info { + label = "fritz4020:green:info"; + gpios = <&led_gpio 6 GPIO_ACTIVE_LOW>; + default-state = "off"; + }; + + info_red: info_red { + label = "fritz4020:red:info"; + gpios = <&led_gpio 1 GPIO_ACTIVE_LOW>; + default-state = "off"; + }; + }; + + keys { + compatible = "gpio-keys-polled"; + poll-interval = <100>; + + wps_button { + label = "WPS button"; + linux,code = <KEY_WPS_BUTTON>; + gpios = <&gpio 2 GPIO_ACTIVE_HIGH>; + }; + + wlan_button { + label = "WLAN button"; + linux,code = <KEY_RFKILL>; + gpios = <&gpio 21 GPIO_ACTIVE_HIGH>; + }; + }; +}; + +&uart { + status = "okay"; +}; + +&gpio { + status = "okay"; +}; + +&spi { + status = "okay"; + num-cs = <1>; + + flash@0 { + compatible = "jedec,spi-nor"; + reg = <0>; + spi-max-frequency = <25000000>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "urlader"; + reg = <0x000000 0x020000>; + read-only; + }; + + partition@1 { + label = "firmware"; + reg = <0x020000 0xee0000>; + }; + + partition@2 { + label = "tffs (1)"; + reg = <0xf00000 0x080000>; + read-only; + }; + + partition@3 { + label = "tffs (2)"; + reg = <0xf80000 0x080000>; + read-only; + }; + }; + }; +}; + +ð0 { + status = "okay"; + + phy-mode = "mii"; + phy-handle = <&swphy0>; + + gmac-config { + device = <&gmac>; + + switch-phy-addr-swap = <1>; + switch-phy-swap = <1>; + }; +}; + +ð1 { + status = "okay"; +}; + +&wmac { + status = "okay"; + qca,no-eeprom; +}; diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk index 01020810cc..64043d7535 100644 --- a/target/linux/ath79/image/generic.mk +++ b/target/linux/ath79/image/generic.mk @@ -13,6 +13,20 @@ define Device/avm_fritz300e endef TARGET_DEVICES += avm_fritz300e +define Device/avm_fritz4020 + ATH_SOC := qca9561 + DEVICE_TITLE := AVM FRITZ!Box 4020 + IMAGE_SIZE := 15232k + KERNEL := kernel-bin | append-dtb | lzma | eva-image + KERNEL_INITRAMFS := $$(KERNEL) + IMAGE/sysupgrade.bin := append-kernel | pad-to 64k | \ + append-squashfs-fakeroot-be | pad-to 256 | \ + append-rootfs | pad-rootfs | append-metadata | check-size $$$$(IMAGE_SIZE) + DEVICE_PACKAGES := fritz-tffs + SUPPORTED_DEVICES += fritz4020 +endef +TARGET_DEVICES += avm_fritz4020 + define Device/buffalo_wzr-hp-g450h ATH_SOC := ar7242 DEVICE_TITLE := Buffalo WZR-HP-G450H diff --git a/target/linux/ath79/patches-4.14/005-gpio-74x164-add-initvals.patch b/target/linux/ath79/patches-4.14/005-gpio-74x164-add-initvals.patch new file mode 100644 index 0000000000..d72f7140c2 --- /dev/null +++ b/target/linux/ath79/patches-4.14/005-gpio-74x164-add-initvals.patch @@ -0,0 +1,15 @@ +Index: linux-4.14.62/drivers/gpio/gpio-74x164.c +=================================================================== +--- linux-4.14.62.orig/drivers/gpio/gpio-74x164.c ++++ linux-4.14.62/drivers/gpio/gpio-74x164.c +@@ -151,6 +151,10 @@ static int gen_74x164_probe(struct spi_d + chip->gpio_chip.parent = &spi->dev; + chip->gpio_chip.owner = THIS_MODULE; + ++ /* Set initial output line values */ ++ of_property_read_u8_array(spi->dev.of_node, "lines-initial-states", chip->buffer, ++ chip->registers); ++ + mutex_init(&chip->lock); + + ret = __gen_74x164_write_config(chip);
This commit adds support for the AVM Fritz!Box 4020 WiFi-router. SoC: Qualcomm Atheros QCA9561 (Dragonfly) 750MHz RAM: Winbond W971GG6KB-25 FLASH: Macronix MX25L12835F WiFi: QCA9561 b/g/n 3x3 450Mbit/s USB: 1x USB 2.0 IN: WPS button, WiFi button OUT: Power LED green, Internet LED green, WLAN LED green, LAN LED green, INFO LED green, INFO LED red UART: Header Next to Black metal shield Pinout is 3.3V - RX - TX - GND (Square Pad is 3.3V) The Serial setting is 115200-8-N-1. Tested and working: - Ethernet (LAN + WAN) - WiFi (correct MAC) - Installation via EVA bootloader - OpenWRT sysupgrade - Buttons - LEDs Not working: - USB port Installation via EVA: In the first seconds after Power is connected, the bootloader will listen for FTP connections on 169.254.157.1 (Might also be 192.168.178.1). Firmware can be uploaded like following: ftp> quote USER adam2 ftp> quote PASS adam2 ftp> binary ftp> debug ftp> passive ftp> quote MEDIA FLSH ftp> put openwrt-sysupgrade.bin mtd1 Note that this procedure might take up to two minutes. After transfer is complete you need to powercycle the device to boot OpenWRT. Signed-off-by: David Bauer <mail@david-bauer.net> --- v2 changes: - add annotation for initial output-line-state setting - rebase onto current master .../ath79/base-files/etc/board.d/01_leds | 4 + .../ath79/base-files/etc/board.d/02_network | 5 + .../etc/hotplug.d/firmware/10-ath9k-eeprom | 3 + .../linux/ath79/dts/qca9561_avm_fritz4020.dts | 172 ++++++++++++++++++ target/linux/ath79/image/generic.mk | 14 ++ .../005-gpio-74x164-add-initvals.patch | 15 ++ 6 files changed, 213 insertions(+) create mode 100644 target/linux/ath79/dts/qca9561_avm_fritz4020.dts create mode 100644 target/linux/ath79/patches-4.14/005-gpio-74x164-add-initvals.patch