Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: Huawei ap5030dn #1

Closed
wants to merge 56 commits into from
Closed
Show file tree
Hide file tree
Changes from 40 commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
509d0af
Add initial Huawei ap5030dn model
CodingMarco Aug 26, 2023
9e54884
Flash layout from uboot cmdline
CodingMarco Aug 28, 2023
861ebb1
Remove unneeded USB driver, move squashfs size to property
CodingMarco Sep 2, 2023
92512a6
dts: Add 9600 baudrate (same as u-boot) & watchdog
CodingMarco Sep 2, 2023
6359f51
Make firmware partition as large as vendor firmware has it
CodingMarco Sep 2, 2023
f79739c
Correct flash partitions, add wifi & ethernet MACs and PHYs
CodingMarco Sep 3, 2023
651ea7f
Use mtd concat to combine SysImageA & SysImageB vendor partitions int…
CodingMarco Sep 6, 2023
72e4fdb
generic.mk: generate kernel and squashfs
CodingMarco Sep 6, 2023
bd2aac9
Device tree: move art locations to separate referencing node, add eth…
CodingMarco Sep 7, 2023
7c5e920
generic.mk: Pad rootfs to minimum required size, otherwise u-boot wil…
CodingMarco Sep 8, 2023
94b876a
02_network: Set both ethernet interfaces as LAN (not WAN) interfaces
CodingMarco Sep 8, 2023
efc874c
generik.mk: Make ROOTFS_MIN_SIZE larger because u-boot otherwise give…
CodingMarco Sep 8, 2023
634dd0f
Make eth0 work using fixed-link
CodingMarco Sep 9, 2023
f8fdc16
02_network: Add AP5030DN to lan_mac and label_mac setup
CodingMarco Sep 9, 2023
53b8220
dts: Remove eth1 MAC address increment since vendor FW also doesn't h…
CodingMarco Sep 9, 2023
e111554
dts: Remove unnecessary wlan0 section from pcie0
CodingMarco Sep 9, 2023
d9ed0b5
dts: Remove phy0 switch register values since there is no such switch
CodingMarco Sep 9, 2023
ab46441
dts: Add LEDs, increase watchdog margin to 1s (datasheet says 1.6s)
CodingMarco Sep 9, 2023
b67997b
dts: Add 'Default' GPIO-button as restart button
CodingMarco Sep 9, 2023
8bf4630
Add AP5030DN u-boot env-tools support
CodingMarco Sep 10, 2023
bf7a1cf
dts: Change u-boot env label to OpenWrt-default 'u-boot-env' instead …
CodingMarco Sep 10, 2023
08bdfa8
dts: Add correct phy addresses & pll-data for 1000Mbps (100/10 still …
CodingMarco Sep 10, 2023
69a5103
dts: pll-data values left-over from u-boot
CodingMarco Sep 11, 2023
b2b2db1
Use fixed-link for eth0 again
CodingMarco Sep 13, 2023
75b5ca0
dts: Decrease watchdog margin to 100ms
CodingMarco Sep 14, 2023
9c6fd3e
dts: Rename BiosA / BiosB to more openwrt-compatible names u-boot-a a…
CodingMarco Sep 14, 2023
475c496
dts: Make BootupA/B writable as they contain kernel start address whi…
CodingMarco Sep 14, 2023
819b57e
dts: Merge fwconcat0/1 with ConfigA/B to gain more usable flash space
CodingMarco Sep 14, 2023
4679fd0
Use phy0 for eth0 again since it doesn't make a difference. U-Boot st…
CodingMarco Sep 16, 2023
0b88d1d
sysupgrade platform.sh: Add Huawei AP5030DN: Write beginning of 'firm…
CodingMarco Sep 16, 2023
7f74662
Remove flashAll partition which was only used for debugging purposes
CodingMarco Sep 16, 2023
5477584
Fix MAC addresses. Use offsets 0-3 for eth0, eth1, wlan0 and wlan1 re…
CodingMarco Sep 23, 2023
a5eef89
Clean up device tree
CodingMarco Sep 23, 2023
13400dd
Add kernel 5.15 and 6.1 patches to add suspend & resume callbacks to …
CodingMarco Oct 12, 2023
2cbb3b2
Move device makefile definition down to keep alphabetical order
CodingMarco Dec 18, 2023
1ba6d84
Compress ramdisk with LZMA for AP5030DN
CodingMarco Jan 13, 2024
6bdfebf
Remove 5.15 patch again since it is not needed anymore
CodingMarco Mar 18, 2024
837bcd2
Add patch to backport-6.1 since it is now upstream in 6.8
CodingMarco Mar 18, 2024
c9d551f
Use nvmem fixed-layout for mac address cal art
CodingMarco Mar 18, 2024
e1734c3
Initial draft for fixing LZMA & watchdog problems using lzma-loader
CodingMarco Mar 29, 2024
cb19eea
Improve watchdog-related init in LZMA loader
CodingMarco Mar 29, 2024
5cda532
Add pinctrl to watchdog
CodingMarco Mar 29, 2024
839fcc7
Label restart button 'reset'
CodingMarco Mar 29, 2024
0498727
Add comment about the BootupA/B partitions
CodingMarco Mar 29, 2024
7422c21
Disable SoC-internal watchdog to avoid clash with driver of external one
CodingMarco Mar 30, 2024
b8fb607
generik.mk: Remove leftovers from development/debugging
CodingMarco Mar 30, 2024
01bad17
platform.sh: Use mtd lookup by name
CodingMarco Mar 30, 2024
7e48810
Remove prepend-loader-okli again since it does essentially the same a…
CodingMarco Mar 30, 2024
fd7a246
Add description comment to Build/loader-okli
CodingMarco Mar 30, 2024
4bb81d4
Rename kernel patch to include version of first release
CodingMarco Mar 30, 2024
c7d6425
platform.sh: Improve explanation of kernel start address
CodingMarco Mar 30, 2024
2209179
Fix eth0 pll for all speeds, modern LED syntax
CodingMarco Mar 30, 2024
79decb2
Fix IMAGE_SIZE, add KERNEL_SIZE
CodingMarco Mar 30, 2024
3706b6f
Remove loader-okli comment
CodingMarco Mar 30, 2024
440dc68
Fix LOADER_FLASH_OFFS
CodingMarco Mar 30, 2024
43f49f4
Add backport-6.6 patch
CodingMarco Mar 30, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions package/boot/uboot-envtools/files/ath79
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,9 @@ domywifi,dw33d)
glinet,gl-ar150)
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x8000" "0x10000"
;;
huawei,ap5030dn)
ubootenv_add_uci_config "/dev/mtd3" "0x0" "0x20000" "0x20000"
;;
netgear,wndr3700|\
netgear,wndr3700-v2|\
netgear,wndrmac-v1)
Expand Down
230 changes: 230 additions & 0 deletions target/linux/ath79/dts/qca9550_huawei_ap5030dn.dts
Original file line number Diff line number Diff line change
@@ -0,0 +1,230 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT

#include "qca955x.dtsi"

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>

/ {
model = "Huawei AP5030DN";
compatible = "huawei,ap5030dn", "qca,qca9550", "qca,qca9558";

chosen {
bootargs = "console=ttyS0,9600n8";
};

aliases {
led-boot = &led_power_red;
led-failsafe = &led_power_red;
led-running = &led_power_green;
led-upgrade = &led_power_red;
};

leds {
compatible = "gpio-leds";

led_power_green: power_green {
label = "green:power";
gpios = <&gpio 18 GPIO_ACTIVE_HIGH>;
default-state = "on";
};

led_power_red: power_red {
label = "red:power";
gpios = <&gpio 11 GPIO_ACTIVE_HIGH>;
};
CodingMarco marked this conversation as resolved.
Show resolved Hide resolved

};

keys {
compatible = "gpio-keys";

restart {
label = "Restart button";
CodingMarco marked this conversation as resolved.
Show resolved Hide resolved
linux,code = <KEY_RESTART>;
gpios = <&gpio 21 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
};

watchdog {
compatible = "linux,wdt-gpio";
gpios = <&gpio 15 GPIO_ACTIVE_HIGH>;
hw_algo = "toggle";
hw_margin_ms = <100>;
always-running;
};

CodingMarco marked this conversation as resolved.
Show resolved Hide resolved
virtual_flash {
compatible = "mtd-concat";
devices = <&fwconcat0 &fwconcat1>;

partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;

partition@0 {
label = "firmware";
reg = <0x0 0x1e00000>;
compatible = "openwrt,uimage", "denx,uimage";
};
};
};
};

&spi {
status = "okay";

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 = "u-boot-a";
reg = <0x0 0x80000>;
read-only;
};

partition@80000 {
label = "BootupA";
reg = <0x80000 0x20000>;
};

partition@a0000 {
label = "BootupB";
reg = <0xa0000 0x20000>;
};
CodingMarco marked this conversation as resolved.
Show resolved Hide resolved

partition@c0000 {
label = "u-boot-env";
reg = <0xc0000 0x20000>;
read-only;
};

partition@e0000 {
label = "BoardData";
reg = <0xe0000 0x20000>;
read-only;
};

// In the vendor layout, there are the "SysImageA" (12 MiB)
// and the "ConfigA" (3 MiB) partitions here.
fwconcat0: partition@100000 {
label = "fwconcat0";
reg = <0x100000 0xF00000>;
};

partition@1000000 {
label = "u-boot-b";
reg = <0x1000000 0x80000>;
read-only;
};

partition@1080000 {
label = "ResultA";
reg = <0x1080000 0x20000>;
read-only;
};

partition@10a0000 {
label = "ResultB";
reg = <0x10a0000 0x20000>;
read-only;
};

// In the vendor layout, there are the "SysImageB" (12 MiB)
// and the "ConfigB" (3 MiB) partitions here.
fwconcat1: partition@10c0000 {
label = "fwconcat1";
reg = <0x10c0000 0xF00000>;
};

art: partition@1fc0000 {
label = "art";
reg = <0x1fc0000 0x40000>;
read-only;

nvmem-layout {
compatible = "fixed-layout";
#address-cells = <1>;
#size-cells = <1>;

macaddr_art_2005b: macaddr@2005b {
compatible = "mac-base";
reg = <0x2005b 0x6>;
#nvmem-cell-cells = <1>;
};

cal_art_1000: cal@1000 {
reg = <0x1000 0x440>;
};

cal_art_5000: cal@5000 {
reg = <0x5000 0x844>;
};
};
};
};
};
};

&wmac {
status = "okay";

nvmem-cells = <&macaddr_art_2005b 3>, <&cal_art_1000>;
nvmem-cell-names = "mac-address", "calibration";
};

&pcie0 {
status = "okay";

wifi@0,0 {
compatible = "qcom,ath10k";
reg = <0x0000 0 0 0 0>;
nvmem-cells = <&macaddr_art_2005b 2>, <&cal_art_5000>;
nvmem-cell-names = "mac-address", "calibration";
};
};

&eth0 {
status = "okay";

nvmem-cells = <&macaddr_art_2005b 0>;
nvmem-cell-names = "mac-address";

pll-data = <0xa6000000 0x80000101 0x80001313>;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where are these from? Incorrect timings can lead to issues on longer cable runs, so this either needs to be verified by hardware or via statistics (Floodping at all link-speeds is good enough)

phy-handle = <&phy0>;
};

&eth1 {
status = "okay";

nvmem-cells = <&macaddr_art_2005b 1>;
nvmem-cell-names = "mac-address";

pll-data = <0x03000101 0x00000101 0x00001313>;
phy-handle = <&phy1>;
};

&mdio0 {
status = "okay";

phy0: ethernet-phy@18 {
reg = <0x18>;
};
};

&mdio1 {
status = "okay";

phy1: ethernet-phy@1 {
reg = <1>;
};
};
4 changes: 4 additions & 0 deletions target/linux/ath79/generic/base-files/etc/board.d/02_network
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ ath79_setup_interfaces()
engenius,enstationac-v1|\
engenius,ews511ap|\
engenius,ews660ap|\
huawei,ap5030dn|\
ocedo,ursus|\
ruckus,zf7363|\
ruckus,zf7372|\
Expand Down Expand Up @@ -747,6 +748,9 @@ ath79_setup_macs()
hak5,packet-squirrel)
label_mac=$(mtd_get_mac_binary u-boot 0x1fc00)
;;
huawei,ap5030dn)
label_mac=$(mtd_get_mac_binary art 0x2005b)
;;
iodata,etg3-r)
lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr)
wan_mac=$(macaddr_add "$lan_mac" -1)
Expand Down
7 changes: 7 additions & 0 deletions target/linux/ath79/generic/base-files/lib/upgrade/platform.sh
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,13 @@ platform_do_upgrade() {
ROOTFS_FILE="root.squashfs"
platform_do_upgrade_failsafe_datachk "$1"
;;
huawei,ap5030dn)
# Write beginning address of "firmware" partition as KernelA address and KernelB address, each to BootupA & BootupB
echo "Setting Huawei-custom kernel addresses..."
echo -n -e "\x9e\x10\x00\x00\x9e\x10\x00\x00" | dd of=/dev/mtdblock1 bs=1 seek=$((0x254)) conv=notrunc
echo -n -e "\x9e\x10\x00\x00\x9e\x10\x00\x00" | dd of=/dev/mtdblock2 bs=1 seek=$((0x254)) conv=notrunc
default_do_upgrade "$1"
;;
CodingMarco marked this conversation as resolved.
Show resolved Hide resolved
jjplus,ja76pf2)
platform_do_upgrade_redboot_fis "$1" linux
;;
Expand Down
6 changes: 6 additions & 0 deletions target/linux/ath79/image/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,12 @@ define Build/append-loader-okli-uimage
cat "$(KDIR)/loader-$(word 1,$(1)).uImage" >> "$@"
endef

define Build/prepend-loader-okli
cat "$(KDIR)/loader-$(word 1,$(1)).$(LOADER_TYPE)" > "[email protected]"
cat "$@" >> "[email protected]"
mv "[email protected]" "$@"
endef

CodingMarco marked this conversation as resolved.
Show resolved Hide resolved
define Build/relocate-kernel
rm -rf [email protected]
$(CP) ../../generic/image/relocate [email protected]
Expand Down
20 changes: 20 additions & 0 deletions target/linux/ath79/image/generic.mk
Original file line number Diff line number Diff line change
Expand Up @@ -1813,6 +1813,26 @@ define Device/hiwifi_hc6361
endef
TARGET_DEVICES += hiwifi_hc6361

define Device/huawei_ap5030dn
SOC := qca9550
DEVICE_VENDOR := Huawei
DEVICE_MODEL := AP5030DN
DEVICE_PACKAGES := ath10k-firmware-qca988x-ct kmod-ath10k-ct
LOADER_TYPE := bin
LOADER_FLASH_OFFS := 0x110040
IMAGE_SIZE := 7680k
CodingMarco marked this conversation as resolved.
Show resolved Hide resolved
ROOTFS_MIN_SIZE := 12240k
CodingMarco marked this conversation as resolved.
Show resolved Hide resolved
COMPILE := loader-$(1).bin
COMPILE/loader-$(1).bin := loader-okli-compile | pad-to 64k | uImage none
KERNEL := kernel-bin | append-dtb | lzma | uImage lzma -M 0x4f4b4c49 | prepend-loader-okli $(1)
KERNEL_INITRAMFS := kernel-bin | append-dtb | lzma | loader-kernel | uImage none
IMAGE_SIZE := 30720k
IMAGES += kernel.bin squashfs.bin
IMAGE/kernel.bin := | append-kernel
CodingMarco marked this conversation as resolved.
Show resolved Hide resolved
IMAGE/squashfs.bin := append-rootfs | pad-rootfs | pad-to $$$$(ROOTFS_MIN_SIZE) | pad-to $$$$(BLOCKSIZE)
endef
TARGET_DEVICES += huawei_ap5030dn

define Device/iodata_etg3-r
SOC := ar9342
DEVICE_VENDOR := I-O DATA
Expand Down
30 changes: 30 additions & 0 deletions target/linux/ath79/image/lzma-loader/src/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -182,8 +182,38 @@ static inline void mr18_init(void)
static inline void mr18_init(void) { }
#endif

#ifdef CONFIG_BOARD_HUAWEI_AP5030DN
static inline void ap5030dn_init(void)
{
const unsigned int ap5030dn_watchdog_gpio = 15;
unsigned int gpiobase, spibase, reg;

spibase = KSEG1ADDR(AR71XX_SPI_BASE);
CodingMarco marked this conversation as resolved.
Show resolved Hide resolved
gpiobase = KSEG1ADDR(AR71XX_GPIO_BASE);

printf("Huawei AP5030DN\n");

reg = READREG(gpiobase + AR71XX_GPIO_REG_OE);
WRITEREG(gpiobase + AR71XX_GPIO_REG_OE,
reg & ~(1 << ap5030dn_watchdog_gpio));

// Set MUX to output CPU_CLK/4 on GPIO15
reg = READREG(gpiobase + AR934X_GPIO_REG_FUNC);
WRITEREG(gpiobase + AR934X_GPIO_REG_FUNC,
reg | (1 << 7));
CodingMarco marked this conversation as resolved.
Show resolved Hide resolved

// Output stuff on GPIO15 by setting bit 31:24 in gpiobase + AR934X_GPIO_REG_OUT_FUNC3
reg = READREG(gpiobase + AR934X_GPIO_REG_OUT_FUNC3);
WRITEREG(gpiobase + AR934X_GPIO_REG_OUT_FUNC3,
reg | (84 << 24));
CodingMarco marked this conversation as resolved.
Show resolved Hide resolved
}
#else
static inline void ap5030dn_init(void) { }
#endif

void board_init(void)
{
tlwr1043nd_init();
mr18_init();
ap5030dn_init();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
From 380b50ae3a04222334a3779b3787eba844b1177f Mon Sep 17 00:00:00 2001
CodingMarco marked this conversation as resolved.
Show resolved Hide resolved
From: Marco von Rosenberg <[email protected]>
Date: Thu, 16 Nov 2023 20:32:31 +0100
Subject: net: phy: broadcom: Wire suspend/resume for BCM54612E

The BCM54612E ethernet PHY supports IDDQ-SR.
Therefore wire-up the suspend and resume callbacks
to point to bcm54xx_suspend() and bcm54xx_resume().

Signed-off-by: Marco von Rosenberg <[email protected]>
Acked-by: Florian Fainelli <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
---
drivers/net/phy/broadcom.c | 2 ++
1 file changed, 2 insertions(+)

--- a/drivers/net/phy/broadcom.c
+++ b/drivers/net/phy/broadcom.c
@@ -941,6 +941,8 @@ static struct phy_driver broadcom_driver
.config_intr = bcm_phy_config_intr,
.handle_interrupt = bcm_phy_handle_interrupt,
.link_change_notify = bcm54xx_link_change_notify,
+ .suspend = bcm54xx_suspend,
+ .resume = bcm54xx_resume,
}, {
.phy_id = PHY_ID_BCM54616S,
.phy_id_mask = 0xfffffff0,
Loading