From f9dd8ecff5b02a56dae519b9a533f06a9448b67f Mon Sep 17 00:00:00 2001 From: JiaY-shi Date: Wed, 6 Mar 2024 16:07:40 +0800 Subject: [PATCH] QualcommAX: ipq60xx: add support for JD Cloud AX1800 Pro --- .../uboot-envtools/files/qualcommax_ipq60xx | 5 + package/firmware/ipq-wifi/Makefile | 2 + .../ipq-wifi/src/board-jdc_ax1800-pro.ipq6018 | Bin 0 -> 65644 bytes .../boot/dts/qcom/ipq6000-jdc-ax1800-pro.dts | 335 ++++++++++++++++++ target/linux/qualcommax/image/ipq60xx.mk | 23 ++ .../ipq60xx/base-files/etc/board.d/01_leds | 3 + .../ipq60xx/base-files/etc/board.d/02_network | 3 + .../etc/hotplug.d/firmware/11-ath11-caldata | 3 + .../ipq60xx/base-files/lib/upgrade/mmc.sh | 83 +++++ .../base-files/lib/upgrade/platform.sh | 5 + 10 files changed, 462 insertions(+) create mode 100644 package/firmware/ipq-wifi/src/board-jdc_ax1800-pro.ipq6018 create mode 100644 target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6000-jdc-ax1800-pro.dts create mode 100644 target/linux/qualcommax/ipq60xx/base-files/lib/upgrade/mmc.sh diff --git a/package/boot/uboot-envtools/files/qualcommax_ipq60xx b/package/boot/uboot-envtools/files/qualcommax_ipq60xx index ea9e30337828e5..298b7f85d75c58 100644 --- a/package/boot/uboot-envtools/files/qualcommax_ipq60xx +++ b/package/boot/uboot-envtools/files/qualcommax_ipq60xx @@ -22,6 +22,11 @@ netgear,wax214) [ -n "$idx" ] && \ ubootenv_add_uci_config "/dev/mtd$idx" "0x0" "0x40000" "0x20000" "2" ;; +jdc,ax1800-pro) + mmcpart="$(find_mmc_part 0:APPSBLENV)" + [ -n "$mmcpart" ] && \ + ubootenv_add_uci_config "$mmcpart" "0x0" "0x40000" "0x20000" "2" + ;; yuncore,fap650) idx="$(find_mtd_index 0:appsblenv)" [ -n "$idx" ] && \ diff --git a/package/firmware/ipq-wifi/Makefile b/package/firmware/ipq-wifi/Makefile index 008380d9e889b6..62038665e1263d 100644 --- a/package/firmware/ipq-wifi/Makefile +++ b/package/firmware/ipq-wifi/Makefile @@ -39,6 +39,7 @@ ALLWIFIBOARDS:= \ edimax_cax1800 \ glinet_gl-ax1800 \ glinet_gl-axt1800 \ + jdc_ax1800-pro \ linksys_mx4200 \ linksys_mx5300 \ linksys_mx8500 \ @@ -167,6 +168,7 @@ $(eval $(call generate-ipq-wifi-package,edgecore_eap102,Edgecore EAP102)) $(eval $(call generate-ipq-wifi-package,edimax_cax1800,Edimax CAX1800)) $(eval $(call generate-ipq-wifi-package,glinet_gl-ax1800,GL.iNet GL-AX1800)) $(eval $(call generate-ipq-wifi-package,glinet_gl-axt1800,GL.iNet GL-AXT1800)) +$(eval $(call generate-ipq-wifi-package,jdc_ax1800-pro,JD Cloud AX1800 Pro)) $(eval $(call generate-ipq-wifi-package,linksys_mx4200,Linksys MX4200)) $(eval $(call generate-ipq-wifi-package,linksys_mx5300,Linksys MX5300)) $(eval $(call generate-ipq-wifi-package,linksys_mx8500,Linksys MX8500)) diff --git a/package/firmware/ipq-wifi/src/board-jdc_ax1800-pro.ipq6018 b/package/firmware/ipq-wifi/src/board-jdc_ax1800-pro.ipq6018 new file mode 100644 index 0000000000000000000000000000000000000000..3a05fe8f1833bddf0a2dba514084eeb448e359c5 GIT binary patch literal 65644 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 +#include +#include + +/ { + model = "JDCloud AX1800 Pro"; + compatible = "jdc,ax1800-pro", "qcom,ipq6018-cp03", "qcom,ipq6018"; + + aliases { + sdhc1 = &sdhc_1; + serial0 = &blsp1_uart3; + led-boot = &status_red; + led-failsafe = &status_red; + led-running = &status_green; + led-upgrade = &status_green; + ethernet1 = &dp2; + ethernet2 = &dp3; + ethernet3 = &dp4; + ethernet4 = &dp5; + }; + + chosen { + bootargs = "console=ttyMSM0,115200,n8"; + bootargs-append = " rootfstype=squashfs,ext4 coherent_pool=2M"; + }; + + gpio_keys { + compatible = "gpio-keys"; + pinctrl-0 = <&button_pins>; + pinctrl-names = "default"; + + wps { + label = "wps"; + linux,code = ; + gpios = <&tlmm 8 GPIO_ACTIVE_LOW>; + linux,input-type = ; + debounce-interval = <60>; + }; + + reset { + label = "reset"; + linux,code = ; + gpios = <&tlmm 9 GPIO_ACTIVE_LOW>; + linux,input-type = ; + debounce-interval = <60>; + }; + }; + + leds { + compatible = "gpio-leds"; + pinctrl-0 = <&leds_pins>; + pinctrl-names = "default"; + + status_blue: status_blue { + label = "blue:status"; + gpios = <&tlmm 35 GPIO_ACTIVE_HIGH>; + }; + + status_red: status_red { + label = "red:status"; + gpios = <&tlmm 37 GPIO_ACTIVE_HIGH>; + }; + + status_green: status_green { + label = "green:status"; + gpios = <&tlmm 50 GPIO_ACTIVE_HIGH>; + }; + }; +}; + +&tlmm { + gpio-reserved-ranges = <20 1>; + + spi_1_pins: spi_1_pins { + mux { + pins = "gpio38","gpio39","gpio40","gpio41"; + function = "blsp0_spi"; + drive-strength = <0x08>; + bias-pull-down; + }; + }; + + button_pins: button_pins { + mux { + pins = "gpio8", "gpio9"; + function = "gpio"; + drive-strength = <8>; + bias-pull-up; + }; + }; + + leds_pins: leds_pins { + mux { + pins = "gpio34", "gpio36", "gpio49"; + function = "gpio"; + drive-strength = <8>; + bias-pull-down; + }; + }; + + mdio_pinmux: mdio_pinmux { + mux_0 { + pins = "gpio64"; + function = "mdc"; + drive-strength = <0x08>; + bias-pull-up; + }; + + mux_1 { + pins = "gpio65"; + function = "mdio"; + drive-strength = <0x08>; + bias-pull-up; + }; + + mux_2 { + pins = "gpio75"; + function = "gpio"; + bias-pull-up; + }; + }; +}; + + +&blsp1_uart3 { + pinctrl-0 = <&serial_3_pins>; + pinctrl-names = "default"; + status = "okay"; +}; + +&blsp1_spi1 { + pinctrl-0 = <&spi_1_pins>; + pinctrl-names = "default"; + cs-select = <0>; + status = "okay"; + + m25p80@0 { + #address-cells = <1>; + #size-cells = <1>; + reg = <0>; + compatible = "n25q128a11"; + linux,modalias = "m25p80", "n25q128a11"; + spi-max-frequency = <50000000>; + use-default-sizes; + }; +}; + +&prng { + status = "okay"; +}; + +&cryptobam { + status = "okay"; +}; + +&crypto { + status = "okay"; +}; + +&qpic_bam { + status = "okay"; +}; + +&qusb_phy_0 { + status = "okay"; +}; + +&qusb_phy_1 { + status = "okay"; +}; + + +&ssphy_0 { + status = "okay"; +}; + +&usb3 { + status = "okay"; +}; + +&usb2 { + status = "okay"; +}; + +&edma { + status = "okay"; +}; + +&rpm { + status = "disabled"; +}; + +&mdio { + status = "okay"; + + pinctrl-0 = <&mdio_pinmux>; + pinctrl-names = "default"; + reset-gpios = <&tlmm 75 GPIO_ACTIVE_LOW>; + + ethernet_0: ethernet-phy-package@0 { + compatible = "qcom,qca8075-package"; + #address-cells = <1>; + #size-cells = <0>; + reg = <0>; + qcom,package-mode = "psgmii"; + + qca8075_1: ethernet-phy@1 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <1>; + }; + + qca8075_2: ethernet-phy@2 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <2>; + }; + + qca8075_3: ethernet-phy@3 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <3>; + }; + + qca8075_4: ethernet-phy@4 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <4>; + }; + }; +}; + +&switch { + status = "okay"; + + switch_lan_bmp = <(ESS_PORT3 | ESS_PORT4 | ESS_PORT5)>; /* lan port bitmap */ + switch_wan_bmp = ; /* wan port bitmap */ + switch_mac_mode = ; + + qcom,port_phyinfo { + port@1 { + port_id = <2>; + phy_address = <1>; + }; + + port@2 { + port_id = <3>; + phy_address = <2>; + }; + + port@3 { + port_id = <4>; + phy_address = <3>; + }; + + port@4 { + port_id = <5>; + phy_address = <4>; + }; + }; +}; + +&qpic_bam { + status = "okay"; +}; + +&wifi { + status = "okay"; + qcom,ath11k-calibration-variant = "JDC-AX1800-Pro"; + qcom,ath11k-fw-memory-mode = <1>; +}; + + +&dp2 { + phy-handle = <&qca8075_1>; + status = "okay"; +}; + +&dp3 { + phy-handle = <&qca8075_2>; + status = "okay"; +}; + +&dp4 { + phy-handle = <&qca8075_3>; + status = "okay"; +}; + +&dp5 { + phy-handle = <&qca8075_4>; + phy-mode = "psgmii"; + status = "okay"; +}; + +&sdhc_1 { + status = "okay"; + + /delete-property/ mmc-hs400-1_8v; + mmc-hs200-1_8v; + mmc-ddr-1_8v; +}; + +&CPU0 { + /delete-property/ cpu-supply; +}; + +&CPU1 { + /delete-property/ cpu-supply; +}; + +&CPU2 { + /delete-property/ cpu-supply; +}; + +&CPU3 { + /delete-property/ cpu-supply; +}; diff --git a/target/linux/qualcommax/image/ipq60xx.mk b/target/linux/qualcommax/image/ipq60xx.mk index f8f9fdb61d5686..ea2a322639e00b 100644 --- a/target/linux/qualcommax/image/ipq60xx.mk +++ b/target/linux/qualcommax/image/ipq60xx.mk @@ -11,6 +11,12 @@ define Device/8devices_mango-dvk endef TARGET_DEVICES += 8devices_mango-dvk +define Device/EmmcImage + IMAGES += factory.bin sysupgrade.bin + IMAGE/factory.bin := append-rootfs | pad-rootfs | pad-to 64k + IMAGE/sysupgrade.bin/squashfs := append-rootfs | pad-to 64k | sysupgrade-tar rootfs=$$$$@ | append-metadata +endef + define Device/cambiumnetworks_xe3-4 $(call Device/FitImage) $(call Device/UbiFit) @@ -52,6 +58,23 @@ define Device/glinet_gl-axt1800 endef TARGET_DEVICES += glinet_gl-axt1800 +define Device/jdc_ax1800-pro + $(call Device/FitImage) + DEVICE_VENDOR := JD Cloud + DEVICE_MODEL := JDC AX1800 Pro + DEVICE_DTS_CONFIG := config@cp03-c2 + DEVICE_DTS := ipq6000-jdc-ax1800-pro + SOC := ipq6000 + DEVICE_PACKAGES := ipq-wifi-jdc_ax1800-pro kmod-fs-ext4 mkf2fs f2fsck kmod-fs-f2fs + BLOCKSIZE := 64k + KERNEL_SIZE := 6144k + IMAGES += kernel.bin rootfs.bin factory.bin + IMAGE/kernel.bin := append-kernel + IMAGE/rootfs.bin := append-rootfs | pad-rootfs | pad-to $$(BLOCKSIZE) + IMAGE/factory.bin := append-kernel | pad-to $$$${KERNEL_SIZE} | append-rootfs | append-metadata +endef +TARGET_DEVICES += jdc_ax1800-pro + define Device/netgear_wax214 $(call Device/FitImage) $(call Device/UbiFit) diff --git a/target/linux/qualcommax/ipq60xx/base-files/etc/board.d/01_leds b/target/linux/qualcommax/ipq60xx/base-files/etc/board.d/01_leds index 189822157f3c79..8cb9359a93daa2 100644 --- a/target/linux/qualcommax/ipq60xx/base-files/etc/board.d/01_leds +++ b/target/linux/qualcommax/ipq60xx/base-files/etc/board.d/01_leds @@ -7,6 +7,9 @@ board_config_update board=$(board_name) case "$board" in +jdc,ax1800-pro) + ucidef_set_led_netdev "wan" "WAN" "net_blue" "eth3" + ;; yuncore,fap650) ucidef_set_led_netdev "wlan5ghz" "WLAN 5GHz LED" "blue:wlan-5ghz" "wlan0" "tx rx" ucidef_set_led_netdev "wlan2ghz" "WLAN 2.4GHz LED" "green:wlan-2ghz" "wlan1" "tx rx" diff --git a/target/linux/qualcommax/ipq60xx/base-files/etc/board.d/02_network b/target/linux/qualcommax/ipq60xx/base-files/etc/board.d/02_network index 4e8dac2b5e64d4..80ed2cd24f9831 100644 --- a/target/linux/qualcommax/ipq60xx/base-files/etc/board.d/02_network +++ b/target/linux/qualcommax/ipq60xx/base-files/etc/board.d/02_network @@ -23,6 +23,9 @@ ipq60xx_setup_interfaces() glinet,gl-axt1800) ucidef_set_interfaces_lan_wan "eth1 eth2" "eth0" ;; + jdc,ax1800-pro) + ucidef_set_interfaces_lan_wan "eth0 eth1 eth2" "eth3" + ;; netgear,wax214) ucidef_set_interfaces_lan_wan "lan" ;; diff --git a/target/linux/qualcommax/ipq60xx/base-files/etc/hotplug.d/firmware/11-ath11-caldata b/target/linux/qualcommax/ipq60xx/base-files/etc/hotplug.d/firmware/11-ath11-caldata index 41329ba80c4385..6df383ef85410e 100644 --- a/target/linux/qualcommax/ipq60xx/base-files/etc/hotplug.d/firmware/11-ath11-caldata +++ b/target/linux/qualcommax/ipq60xx/base-files/etc/hotplug.d/firmware/11-ath11-caldata @@ -20,6 +20,9 @@ case "$FIRMWARE" in netgear,wax214) caldata_extract "0:art" 0x1000 0x10000 ;; + jdc,ax1800-pro) + caldata_extract_mmc "0:ART" 0x1000 0x10000 + ;; yuncore,fap650) caldata_extract "0:art" 0x1000 0x20000 ;; diff --git a/target/linux/qualcommax/ipq60xx/base-files/lib/upgrade/mmc.sh b/target/linux/qualcommax/ipq60xx/base-files/lib/upgrade/mmc.sh new file mode 100644 index 00000000000000..dac9ddd5686544 --- /dev/null +++ b/target/linux/qualcommax/ipq60xx/base-files/lib/upgrade/mmc.sh @@ -0,0 +1,83 @@ +# +# Copyright (C) 2016 lede-project.org +# + +# this can be used as a generic mmc upgrade script +# just add a device entry in platform.sh, +# define "kernelname" and "rootfsname" and call mmc_do_upgrade +# after the kernel and rootfs flash a loopdev (as overlay) is +# setup on top of the rootfs partition +# for the proper function a padded rootfs image is needed, basically +# append "pad-to 64k" to the image definition +# this is based on the ipq806x zyxel.sh mmc upgrade + +. /lib/functions.sh + +mmc_do_upgrade() { + local tar_file="$1" + local rootfs= + local kernel= + + [ -z "$kernel" ] && kernel=$(find_mmc_part ${kernelname}) + [ -z "$rootfs" ] && rootfs=$(find_mmc_part ${rootfsname}) + + [ -z "$kernel" ] && echo "Upgrade failed: kernel partition not found! Rebooting..." && reboot -f + [ -z "$rootfs" ] && echo "Upgrade failed: rootfs partition not found! Rebooting..." && reboot -f + + mmc_do_flash $tar_file $kernel $rootfs + + return 0 +} + +mmc_do_flash() { + local tar_file=$1 + local kernel=$2 + local rootfs=$3 + + # keep sure its unbound + losetup --detach-all || { + echo Failed to detach all loop devices. Skip this try. + reboot -f + } + + # use the first found directory in the tar archive + local board_dir=$(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$') + board_dir=${board_dir%/} + + echo "flashing kernel to $kernel" + tar xf $tar_file ${board_dir}/kernel -O >$kernel + + echo "flashing rootfs to ${rootfs}" + tar xf $tar_file ${board_dir}/root -O >"${rootfs}" + + # a padded rootfs is needed for overlay fs creation + local offset=$(tar xf $tar_file ${board_dir}/root -O | wc -c) + [ $offset -lt 65536 ] && { + echo Wrong size for rootfs: $offset + sleep 10 + reboot -f + } + + # Mount loop for rootfs_data + local loopdev="$(losetup -f)" + losetup -o $offset $loopdev $rootfs || { + echo "Failed to mount looped rootfs_data." + sleep 10 + reboot -f + } + + echo "Format new rootfs_data at position ${offset}." + mkfs.ext4 -F -L rootfs_data $loopdev + mkdir /tmp/new_root + mount -t ext4 $loopdev /tmp/new_root && { + echo "Saving config to rootfs_data at position ${offset}." + cp -v "$UPGRADE_BACKUP" "/tmp/new_root/$BACKUP_FILE" + umount /tmp/new_root + } + + # Cleanup + losetup -d $loopdev >/dev/null 2>&1 + sync + umount -a + reboot -f +} diff --git a/target/linux/qualcommax/ipq60xx/base-files/lib/upgrade/platform.sh b/target/linux/qualcommax/ipq60xx/base-files/lib/upgrade/platform.sh index fc0ebd69412bc3..e2e77adbc7eb96 100644 --- a/target/linux/qualcommax/ipq60xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/qualcommax/ipq60xx/base-files/lib/upgrade/platform.sh @@ -42,6 +42,11 @@ platform_do_upgrade() { netgear,wax214) nand_do_upgrade "$1" ;; + jdc,ax1800-pro) + kernelname="0:HLOS" + rootfsname="rootfs" + mmc_do_upgrade "$1" + ;; yuncore,fap650) [ "$(fw_printenv -n owrt_env_ver 2>/dev/null)" != "7" ] && yuncore_fap650_env_setup local active="$(fw_printenv -n owrt_slotactive 2>/dev/null)"