Skip to content

Commit

Permalink
AP6010DN: Initial draft
Browse files Browse the repository at this point in the history
  • Loading branch information
CodingMarco committed Mar 31, 2024
1 parent a0094c5 commit ca126b0
Show file tree
Hide file tree
Showing 7 changed files with 259 additions and 10 deletions.
3 changes: 2 additions & 1 deletion package/boot/uboot-envtools/files/ath79
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,8 @@ domywifi,dw33d)
glinet,gl-ar150)
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x8000" "0x10000"
;;
huawei,ap5030dn)
huawei,ap5030dn|\
huawei,ap6010dn)
ubootenv_add_uci_config "/dev/mtd3" "0x0" "0x20000" "0x20000"
;;
netgear,wndr3700|\
Expand Down
223 changes: 223 additions & 0 deletions target/linux/ath79/dts/ar9344_huawei_ap6010dn.dts
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT

#include "ar9344.dtsi"

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

/ {
model = "Huawei AP6010DN";
compatible = "huawei,ap6010dn", "qca,ar9344";

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

// aliases {
// led-boot = &led_function_red;
// led-failsafe = &led_function_red;
// led-running = &led_function_green;
// led-upgrade = &led_function_red;
// };

// leds {
// compatible = "gpio-leds";

// led_function_green: led-status-red {
// function = LED_FUNCTION_STATUS;
// color = <LED_COLOR_ID_GREEN>;
// gpios = <&gpio 18 GPIO_ACTIVE_HIGH>;
// };

// led_function_red: led-status-green {
// function = LED_FUNCTION_STATUS;
// color = <LED_COLOR_ID_RED>;
// gpios = <&gpio 11 GPIO_ACTIVE_HIGH>;
// };

// };

// keys {
// compatible = "gpio-keys";

// restart {
// label = "Restart button";
// 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;
};

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>;
};

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;
};
};
};
};

&wmac {
status = "okay";

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

&pcie {
status = "okay";

ath9k: wifi@0,0 {
compatible = "pci168c,0033";
reg = <0x0000 0 0 0 0>;
gpio-controller;
#gpio-cells = <2>;

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 = <0x02000000 0x00000101 0x00001313>;
phy-mode = "rgmii-id";
phy-handle = <&phy>;

gmac-config {
device = <&gmac>;
rgmii-gmac0 = <1>;
rxdv-delay = <3>;
rxd-delay = <3>;
};
};

&mdio0 {
status = "okay";

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

&art {
compatible = "nvmem-cells";
#address-cells = <1>;
#size-cells = <1>;

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

cal_art_5000: calibration@5000 {
reg = <0x5000 0x440>;
};

macaddr_art_2005b: macaddr@2005b {
reg = <0x2005b 0x6>;
};
};
4 changes: 3 additions & 1 deletion target/linux/ath79/generic/base-files/etc/board.d/02_network
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ ath79_setup_interfaces()
glinet,gl-ar300m-lite|\
glinet,gl-usb150|\
hak5,wifi-pineapple-nano|\
huawei,ap6010dn|\
meraki,mr16|\
netgear,ex7300|\
netgear,ex7300-v2|\
Expand Down Expand Up @@ -748,7 +749,8 @@ ath79_setup_macs()
hak5,packet-squirrel)
label_mac=$(mtd_get_mac_binary u-boot 0x1fc00)
;;
huawei,ap5030dn)
huawei,ap5030dn|\
huawei,ap6010dn)
label_mac=$(mtd_get_mac_binary art 0x2005b)
;;
iodata,etg3-r)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ platform_do_upgrade() {
ROOTFS_FILE="root.squashfs"
platform_do_upgrade_failsafe_datachk "$1"
;;
huawei,ap5030dn)
huawei,ap5030dn|\
huawei,ap6010dn)
# Store beginning address of the "firmware" partition
# as KernelA address and KernelB address, each to BootupA & BootupB
# This is the address from which the bootloader will try to load the kernel.
Expand Down
15 changes: 15 additions & 0 deletions target/linux/ath79/image/generic.mk
Original file line number Diff line number Diff line change
Expand Up @@ -1829,6 +1829,21 @@ define Device/huawei_ap5030dn
endef
TARGET_DEVICES += huawei_ap5030dn

define Device/huawei_ap6010dn
SOC := ar9344
DEVICE_VENDOR := Huawei
DEVICE_MODEL := AP6010DN
LOADER_TYPE := bin
LOADER_FLASH_OFFS := 0x111DC0
KERNEL_SIZE := 15360k
IMAGE_SIZE := 30720k
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 | loader-okli $(1) 8128
KERNEL_INITRAMFS := kernel-bin | append-dtb | lzma | loader-kernel | uImage none
endef
TARGET_DEVICES += huawei_ap6010dn

define Device/iodata_etg3-r
SOC := ar9342
DEVICE_VENDOR := I-O DATA
Expand Down
2 changes: 2 additions & 0 deletions target/linux/ath79/image/lzma-loader/src/ar71xx_regs.h
Original file line number Diff line number Diff line change
Expand Up @@ -670,6 +670,8 @@
#define AR934X_GPIO_FUNC_SPI_CS_0_EN BIT(13)

#define AR934X_GPIO_OUT_GPIO 0x00
#define AR934X_GPIO_OUTSEL_CLK_OBS4 0x14
#define AR934X_GPIO_OUTSEL_CLK_OBS5 0x15

#define QCA955X_GPIO_OUTSEL_CLK_OBS5 0x54

Expand Down
19 changes: 12 additions & 7 deletions target/linux/ath79/image/lzma-loader/src/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -182,34 +182,39 @@ static inline void mr18_init(void)
static inline void mr18_init(void) { }
#endif

#ifdef CONFIG_BOARD_HUAWEI_AP5030DN
static inline void ap5030dn_init(void)
#if defined(CONFIG_BOARD_HUAWEI_AP5030DN) || defined(CONFIG_BOARD_HUAWEI_AP6010DN)
static inline void apX0X0dn_init(void)
{
const unsigned int ap5030dn_watchdog_gpio = 15;
const unsigned int apX0X0dn_watchdog_gpio = 15;
unsigned int gpiobase, reg;

gpiobase = KSEG1ADDR(AR71XX_GPIO_BASE);

printf("Huawei AP5030DN\n");
printf("Huawei APX0X0DN\n");

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

/* Set GPIO15 MUX to output CLK_OBS5 (= CPU_CLK/4)
* to keep the watchdog happy until wdt-gpio takes over
*/
reg = READREG(gpiobase + AR934X_GPIO_REG_OUT_FUNC3);
#if defined(CONFIG_BOARD_HUAWEI_AP5030DN)
WRITEREG(gpiobase + AR934X_GPIO_REG_OUT_FUNC3,
reg | (QCA955X_GPIO_OUTSEL_CLK_OBS5 << 24));
#else if defined(CONFIG_BOARD_HUAWEI_AP6010DN)
WRITEREG(gpiobase + AR934X_GPIO_REG_OUT_FUNC3,
reg | (AR934X_GPIO_OUTSEL_CLK_OBS4 << 24));
#endif
}
#else
static inline void ap5030dn_init(void) { }
static inline void apX0X0dn_init(void) {}
#endif

void board_init(void)
{
tlwr1043nd_init();
mr18_init();
ap5030dn_init();
apX0X0dn_init();
}

0 comments on commit ca126b0

Please sign in to comment.