diff --git a/.github/ISSUE_TEMPLATE/help.md b/.github/ISSUE_TEMPLATE/help.md index f4d56394..3d52c6c5 100755 --- a/.github/ISSUE_TEMPLATE/help.md +++ b/.github/ISSUE_TEMPLATE/help.md @@ -21,4 +21,4 @@ labels: help wanted - OpenMPTCProuter VPS provider: - OpenMPTCProuter platform: - \ No newline at end of file + \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/issue.md b/.github/ISSUE_TEMPLATE/issue.md index c59b9c05..581b115c 100755 --- a/.github/ISSUE_TEMPLATE/issue.md +++ b/.github/ISSUE_TEMPLATE/issue.md @@ -39,4 +39,4 @@ labels: bug - OpenMPTCProuter platform: - Country: - + diff --git a/build.sh b/build.sh index 0dc44cdc..8107110f 100755 --- a/build.sh +++ b/build.sh @@ -72,6 +72,8 @@ elif [ "$OMR_TARGET" = "bpi-r1" ]; then OMR_REAL_TARGET="arm_cortex-a7_neon-vfpv4" elif [ "$OMR_TARGET" = "bpi-r2" ]; then OMR_REAL_TARGET="arm_cortex-a7_neon-vfpv4" +elif [ "$OMR_TARGET" = "rutx" ]; then + OMR_REAL_TARGET="arm_cortex-a7_neon-vfpv4" elif [ "$OMR_TARGET" = "bpi-r64" ]; then OMR_REAL_TARGET="aarch64_cortex-a53" elif [ "$OMR_TARGET" = "espressobin" ]; then diff --git a/config-rutx b/config-rutx new file mode 100644 index 00000000..f369660a --- /dev/null +++ b/config-rutx @@ -0,0 +1,13 @@ +CONFIG_TARGET_ipq40xx=y +CONFIG_TARGET_ipq40xx_generic=y +CONFIG_TARGET_ipq40xx_generic_DEVICE_rutx10=y +CONFIG_PACKAGE_kmod-6lowpan=y +# CONFIG_KERNEL_CC_OPTIMIZE_FOR_PERFORMANCE is not set +CONFIG_KERNEL_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_PACKAGE_ipq-wifi-teltonika_rutx=y +CONFIG_DEFAULT_ath10k-firmware-qca4019-ct=y +CONFIG_DEFAULT_kmod-ath10k-ct=y +CONFIG_PACKAGE_kmod-ath10k-ct=y +CONFIG_ATH10K-CT_LEDS=y +CONFIG_PACKAGE_ath10k-firmware-qca4019-ct=y +CONFIG_KERNEL_ARM_MODULE_PLTS=y diff --git a/root/package/firmware/ipq-wifi/Makefile b/root/package/firmware/ipq-wifi/Makefile index 389b9d4a..df53c668 100644 --- a/root/package/firmware/ipq-wifi/Makefile +++ b/root/package/firmware/ipq-wifi/Makefile @@ -51,6 +51,8 @@ ALLWIFIBOARDS:= \ plasmacloud_pa2200 \ pangu_l1000 \ qxwlan_e2600ac + qxwlan_e2600ac \ + teltonika_rutx ALLWIFIPACKAGES:=$(foreach BOARD,$(ALLWIFIBOARDS),ipq-wifi-$(BOARD)) @@ -136,6 +138,7 @@ $(eval $(call generate-ipq-wifi-package,nec_wg2600hp3,NEC Platforms WG2600HP3)) $(eval $(call generate-ipq-wifi-package,plasmacloud_pa1200,Plasma Cloud PA1200)) $(eval $(call generate-ipq-wifi-package,plasmacloud_pa2200,Plasma Cloud PA2200)) $(eval $(call generate-ipq-wifi-package,pangu_l1000,PANGU L1000)) -$(eval $(call generate-ipq-wifi-package,qxwlan_e2600ac,Qxwlan E2600AC)) +$(eval $(call generate-ipq-wifi-package,p2w_r619ac,P&W R619AC)) +$(eval $(call generate-ipq-wifi-package,teltonika_rutx,Teltonika RUTX)) $(foreach PACKAGE,$(ALLWIFIPACKAGES),$(eval $(call BuildPackage,$(PACKAGE)))) diff --git a/root/package/firmware/ipq-wifi/board-teltonika_rutx.qca4019 b/root/package/firmware/ipq-wifi/board-teltonika_rutx.qca4019 new file mode 100644 index 00000000..440c63af Binary files /dev/null and b/root/package/firmware/ipq-wifi/board-teltonika_rutx.qca4019 differ diff --git a/root/scripts/mkits.sh b/root/scripts/mkits.sh new file mode 100755 index 00000000..7ee39edb --- /dev/null +++ b/root/scripts/mkits.sh @@ -0,0 +1,177 @@ +#!/bin/sh +# +# Licensed under the terms of the GNU GPL License version 2 or later. +# +# Author: Peter Tyser +# +# U-Boot firmware supports the booting of images in the Flattened Image +# Tree (FIT) format. The FIT format uses a device tree structure to +# describe a kernel image, device tree blob, ramdisk, etc. This script +# creates an Image Tree Source (.its file) which can be passed to the +# 'mkimage' utility to generate an Image Tree Blob (.itb file). The .itb +# file can then be booted by U-Boot (or other bootloaders which support +# FIT images). See doc/uImage.FIT/howto.txt in U-Boot source code for +# additional information on FIT images. +# + +usage() { + printf "Usage: %s -A arch -C comp -a addr -e entry" "$(basename "$0")" + printf " -v version -k kernel [-D name -n address -d dtb] -o its_file" + + printf "\n\t-A ==> set architecture to 'arch'" + printf "\n\t-C ==> set compression type 'comp'" + printf "\n\t-c ==> set config name 'config'" + printf "\n\t-a ==> set load address to 'addr' (hex)" + printf "\n\t-e ==> set entry point to 'entry' (hex)" + printf "\n\t-v ==> set kernel version to 'version'" + printf "\n\t-k ==> include kernel image 'kernel'" + printf "\n\t-D ==> human friendly Device Tree Blob 'name'" + printf "\n\t-n ==> fdt unit-address 'address'" + printf "\n\t-d ==> include Device Tree Blob 'dtb'" + printf "\n\t-o ==> create output file 'its_file'\n" + exit 1 +} + +FDTNUM=1 + +while getopts ":A:a:c:C:D:d:e:k:n:o:v:" OPTION +do + case $OPTION in + A ) ARCH=$OPTARG;; + a ) LOAD_ADDR=$OPTARG;; + c ) CONFIG=$OPTARG;; + C ) COMPRESS=$OPTARG;; + D ) DEVICE=$OPTARG;; + d ) DTB=$OPTARG;; + e ) ENTRY_ADDR=$OPTARG;; + k ) KERNEL=$OPTARG;; + n ) FDTNUM=$OPTARG;; + o ) OUTPUT=$OPTARG;; + v ) VERSION=$OPTARG;; + * ) echo "Invalid option passed to '$0' (options:$*)" + usage;; + esac +done + +# Make sure user entered all required parameters +if [ -z "${ARCH}" ] || [ -z "${COMPRESS}" ] || [ -z "${LOAD_ADDR}" ] || \ + [ -z "${ENTRY_ADDR}" ] || [ -z "${VERSION}" ] || [ -z "${KERNEL}" ] || \ + [ -z "${OUTPUT}" ] || [ -z "${CONFIG}" ]; then + usage +fi + +ARCH_UPPER=$(echo "$ARCH" | tr '[:lower:]' '[:upper:]') + +# Conditionally create fdt information +if [ -n "${DTB}" ]; then + if [ -f "$DTB" ]; then + FDT_NODE=" + fdt@$FDTNUM { + description = \"${ARCH_UPPER} OpenWrt ${DEVICE} device tree blob\"; + data = /incbin/(\"${DTB}\"); + type = \"flat_dt\"; + arch = \"${ARCH}\"; + compression = \"none\"; + hash@1 { + algo = \"crc32\"; + }; + hash@2 { + algo = \"sha1\"; + }; + }; +" + + CONFIG_NODE=" + ${CONFIG} { + description = \"OpenWrt\"; + kernel = \"kernel@1\"; + fdt = \"fdt@$FDTNUM\"; + }; +" + else + FDTNUM=0 + DEFAULT_CONFIG=$FDTNUM + + # for f in $(eval echo $DTB); do <= doesn't work on dash, here comes a workaround: + DTB_DIR="${DTB%%{*}" + DTB="${DTB##*{}" + DTB_CSV="${DTB##*{}" + DTB_CSV="${DTB%\}*}" + IFS=, + for f in $DTB_CSV; do + FDTNUM=$((FDTNUM+1)) + + ff="${DTB_DIR}/${f}" + [ -f "${ff}" ] || { + echo "ERROR: no DTBs found" >&2 + rm -f "${OUTPUT}" + exit 1 + } + + FDT_NODE="${FDT_NODE} + + fdt@$FDTNUM { + description = \"${f}\"; + data = /incbin/(\"${ff}\"); + type = \"flat_dt\"; + arch = \"${ARCH}\"; + compression = \"none\"; + hash@1 { + algo = \"crc32\"; + }; + hash@2 { + algo = \"sha1\"; + }; + }; +" + # extract XYZ from image-qcom-ipq4018-rutx-XYZ.dtb + f=${f##*-} + f=${f%.*} + + CONFIG_NODE="${CONFIG_NODE} + + conf_mdtb@${FDTNUM} { + description = \"${f}\"; + kernel = \"kernel@1\"; + fdt = \"fdt@$FDTNUM\"; + }; +" + done + fi +fi + +# Create a default, fully populated DTS file +DATA="/dts-v1/; + +/ { + description = \"${ARCH_UPPER} OpenWrt FIT (Flattened Image Tree)\"; + #address-cells = <1>; + + images { + kernel@1 { + description = \"${ARCH_UPPER} OpenWrt Linux-${VERSION}\"; + data = /incbin/(\"${KERNEL}\"); + type = \"kernel\"; + arch = \"${ARCH}\"; + os = \"linux\"; + compression = \"${COMPRESS}\"; + load = <${LOAD_ADDR}>; + entry = <${ENTRY_ADDR}>; + hash@1 { + algo = \"crc32\"; + }; + hash@2 { + algo = \"sha1\"; + }; + }; +${FDT_NODE} + }; + + configurations { + default = \"${DEFAULT_CONFIG}\"; +${CONFIG_NODE} + }; +};" + +# Write .its file to disk +echo "$DATA" > "${OUTPUT}" diff --git a/root/target/linux/generic/config-5.4 b/root/target/linux/generic/config-5.4 index 9eaa9186..2658cfcd 100755 --- a/root/target/linux/generic/config-5.4 +++ b/root/target/linux/generic/config-5.4 @@ -3714,6 +3714,7 @@ CONFIG_NFS_V3=y # CONFIG_NF_CONNTRACK is not set # CONFIG_NF_CONNTRACK_AMANDA is not set # CONFIG_NF_CONNTRACK_BRIDGE is not set +# CONFIG_NF_CONNTRACK_CHAIN_EVENTS is not set # CONFIG_NF_CONNTRACK_EVENTS is not set # CONFIG_NF_CONNTRACK_FTP is not set # CONFIG_NF_CONNTRACK_H323 is not set diff --git a/root/target/linux/ipq40xx/base-files/etc/board.d/02_network b/root/target/linux/ipq40xx/base-files/etc/board.d/02_network index d9ea13ce..7708561f 100755 --- a/root/target/linux/ipq40xx/base-files/etc/board.d/02_network +++ b/root/target/linux/ipq40xx/base-files/etc/board.d/02_network @@ -35,7 +35,8 @@ ipq40xx_setup_interfaces() zyxel,wre6606) ucidef_set_interface_lan "eth0" ;; - aruba,ap-303h) + aruba,ap-303h|\ + teltonika,rutx10) ucidef_set_interfaces_lan_wan "eth0" "eth1" ucidef_add_switch "switch0" \ "0u@eth0" "2:lan:1" "3:lan:2" "4:lan:3" "0u@eth1" "5:wan" diff --git a/root/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/root/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata index 5a7dc452..71788622 100644 --- a/root/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata +++ b/root/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata @@ -272,6 +272,10 @@ case "$FIRMWARE" in caldata_extract "ART" 0x5000 0x2f20 ath10k_patch_mac $(mtd_get_mac_binary dnidata 0xc) ;; + teltonika,rutx10) + caldata_extract "0:ART" 0x1000 0x2f20 + ath10k_patch_mac $(macaddr_add $(mtd_get_mac_binary "0:CONFIG" 0x0) 3) + ;; zyxel,nbg6617 |\ zyxel,wre6606) caldata_extract "ART" 0x5000 0x2f20 diff --git a/root/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh b/root/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh index e586af32..31c9deee 100644 --- a/root/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh +++ b/root/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh @@ -125,6 +125,10 @@ platform_do_upgrade() { PART_NAME="inactive" platform_do_upgrade_dualboot_datachk "$1" ;; + teltonika,rutx10) + CI_UBIPART="rootfs" + nand_do_upgrade "$1" + ;; zyxel,nbg6617) zyxel_do_upgrade "$1" ;; diff --git a/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-08_10.dts b/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-08_10.dts new file mode 100644 index 00000000..0404ede3 --- /dev/null +++ b/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-08_10.dts @@ -0,0 +1,57 @@ +#include "qcom-ipq4018-rutx-common.dtsi" +#include "qcom-ipq4018-rutx-shiftreg.dtsi" + +/ { + model = "RUTX08/10"; + + soc { + gpio-export { + compatible = "gpio-export"; + #size-cells = <0>; + + gpio_modem_reset { + gpio-export,name = "modem_reset"; + gpio-export,output = <0>; + gpios = <&shift_io 1 GPIO_ACTIVE_HIGH>; + }; + + gpio_modem_power { + gpio-export,name = "modem_power"; + gpio-export,output = <0>; + gpios = <&shift_io 2 GPIO_ACTIVE_HIGH>; + }; + + gpio_sim_select { + gpio-export,name = "sim_sel"; + gpio-export,output = <1>; + gpios = <&shift_io 3 GPIO_ACTIVE_HIGH>; + }; + + gpio_out_1 { + gpio-export,name = "gpio23"; + gpio-export,output = <0>; + gpios = <&shift_io 0 GPIO_ACTIVE_HIGH>; + }; + + gpio_in_1 { + gpio-export,name = "gpio24"; + gpio-export,input = <0>; + gpios = <&tlmm 0 GPIO_ACTIVE_HIGH>; + }; + }; + + leds { + compatible = "gpio-leds"; + + led_wifi_24 { + label = "wifi_gen_2"; + gpios = <&shift_io 5 GPIO_ACTIVE_HIGH>; + }; + + led_wifi_50 { + label = "wifi_gen_5"; + gpios = <&shift_io 6 GPIO_ACTIVE_HIGH>; + }; + }; + }; +}; diff --git a/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-09_11.dts b/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-09_11.dts new file mode 100644 index 00000000..707011a4 --- /dev/null +++ b/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-09_11.dts @@ -0,0 +1,122 @@ +#include "qcom-ipq4018-rutx-common.dtsi" +#include "qcom-ipq4018-rutx-shiftreg.dtsi" + +/ { + model = "RUTX09/11"; + + soc { + gpio-export { + compatible = "gpio-export"; + #size-cells = <0>; + + gpio_modem_reset { + gpio-export,name = "modem_reset"; + gpio-export,output = <0>; + gpios = <&shift_io 1 GPIO_ACTIVE_HIGH>; + }; + + gpio_modem_power { + gpio-export,name = "modem_power"; + gpio-export,output = <0>; + gpios = <&shift_io 2 GPIO_ACTIVE_HIGH>; + }; + + gpio_sim_select { + gpio-export,name = "sim_sel"; + gpio-export,output = <1>; + gpios = <&shift_io 3 GPIO_ACTIVE_LOW>; + }; + + gpio_out_1 { + gpio-export,name = "gpio23"; + gpio-export,output = <0>; + gpios = <&shift_io 0 GPIO_ACTIVE_HIGH>; + }; + + gpio_in_1 { + gpio-export,name = "gpio24"; + gpio-export,input = <0>; + gpios = <&tlmm 0 GPIO_ACTIVE_HIGH>; + }; + }; + + leds { + compatible = "gpio-leds"; + + led_wan_sim1 { + label = "wan_sim_1"; + gpios = <&shift_io 21 GPIO_ACTIVE_HIGH>; + }; + + led_wan_sim2 { + label = "wan_sim_2"; + gpios = <&shift_io 22 GPIO_ACTIVE_HIGH>; + }; + + led_wan_eth { + label = "wan_wifi_4"; // not wan_eth_3 ! + gpios = <&shift_io 13 GPIO_ACTIVE_HIGH>; + }; + + led_wan_wifi { + label = "wan_eth_3"; // not wan_wifi_4 ! + gpios = <&shift_io 20 GPIO_ACTIVE_HIGH>; + }; + + led_gen_2 { + label = "mob_gen_2"; + gpios = <&shift_io 7 GPIO_ACTIVE_HIGH>; + }; + + led_gen_3 { + label = "mob_gen_3"; + gpios = <&shift_io 8 GPIO_ACTIVE_HIGH>; + }; + + led_gen_4 { + label = "mob_gen_4"; + gpios = <&shift_io 9 GPIO_ACTIVE_HIGH>; + }; + + led_ssid_1 { + label = "mob_ssid_1"; + gpios = <&shift_io 10 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led_ssid_2 { + label = "mob_ssid_2"; + gpios = <&shift_io 11 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led_ssid_3 { + label = "mob_ssid_3"; + gpios = <&shift_io 12 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led_ssid_4 { + label = "mob_ssid_4"; + gpios = <&shift_io 14 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led_ssid_5 { + label = "mob_ssid_5"; + gpios = <&shift_io 15 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led_wifi_24 { + label = "wifi_gen_2"; + gpios = <&shift_io 5 GPIO_ACTIVE_HIGH>; + }; + + led_wifi_50 { + label = "wifi_gen_5"; + gpios = <&shift_io 6 GPIO_ACTIVE_HIGH>; + }; + }; + }; +}; diff --git a/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-12.dts b/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-12.dts new file mode 100644 index 00000000..d39f64e9 --- /dev/null +++ b/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-12.dts @@ -0,0 +1,149 @@ +#include "qcom-ipq4018-rutx-common.dtsi" +#include "qcom-ipq4018-rutx-shiftreg.dtsi" + +/ { + model = "RUTX12"; + + soc { + gpio-export { + compatible = "gpio-export"; + #size-cells = <0>; + + gpio_modem_reset { + gpio-export,name = "modem_reset"; + gpio-export,output = <0>; + gpios = <&shift_io 16 GPIO_ACTIVE_HIGH>; + }; + + gpio_modem_power { + gpio-export,name = "modem_power"; + gpio-export,output = <0>; + gpios = <&shift_io 17 GPIO_ACTIVE_HIGH>; + }; + + gpio_modem2_reset { + gpio-export,name = "modem2_reset"; + gpio-export,output = <0>; + gpios = <&shift_io 18 GPIO_ACTIVE_HIGH>; + }; + + gpio_modem2_power { + gpio-export,name = "modem2_power"; + gpio-export,output = <0>; + gpios = <&shift_io 19 GPIO_ACTIVE_HIGH>; + }; + + gpio_out_1 { + gpio-export,name = "gpio23"; + gpio-export,output = <0>; + gpios = <&shift_io 20 GPIO_ACTIVE_HIGH>; + }; + + gpio_in_1 { + gpio-export,name = "gpio24"; + gpio-export,input = <0>; + gpios = <&tlmm 0 GPIO_ACTIVE_HIGH>; + }; + }; + + leds { + compatible = "gpio-leds"; + + led_wan_sim1 { + label = "wan_sim_1"; + gpios = <&shift_io 14 GPIO_ACTIVE_HIGH>; + }; + + led_wan_sim2 { + label = "wan_sim_2"; + gpios = <&shift_io 15 GPIO_ACTIVE_HIGH>; + }; + + led_wan_eth { + label = "wan_wifi_4"; // not wan_eth_3 ! + gpios = <&shift_io 6 GPIO_ACTIVE_HIGH>; + }; + + led_wan_wifi { + label = "wan_eth_3"; // not wan_wifi_4 ! + gpios = <&shift_io 7 GPIO_ACTIVE_HIGH>; + }; + + led_gen_2 { + label = "mob_gen_2"; + gpios = <&shift_io 5 GPIO_ACTIVE_HIGH>; + }; + + led_gen_3 { + label = "mob_gen_3"; + gpios = <&shift_io 4 GPIO_ACTIVE_HIGH>; + }; + + led_gen_4 { + label = "mob_gen_4"; + gpios = <&shift_io 3 GPIO_ACTIVE_HIGH>; + }; + + led2_gen_2 { + label = "mob2_gen_2"; + gpios = <&shift_io 11 GPIO_ACTIVE_HIGH>; + }; + + led2_gen_3 { + label = "mob2_gen_3"; + gpios = <&shift_io 12 GPIO_ACTIVE_HIGH>; + }; + + led2_gen_4 { + label = "mob2_gen_4"; + gpios = <&shift_io 13 GPIO_ACTIVE_HIGH>; + }; + + led_ssid_1 { + label = "mob_ssid_1"; + gpios = <&shift_io 0 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led_ssid_3 { + label = "mob_ssid_3"; + gpios = <&shift_io 1 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led_ssid_5 { + label = "mob_ssid_5"; + gpios = <&shift_io 2 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led2_ssid_1 { + label = "mob2_ssid_1"; + gpios = <&shift_io 8 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led2_ssid_3 { + label = "mob2_ssid_3"; + gpios = <&shift_io 9 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led2_ssid_5 { + label = "mob2_ssid_5"; + gpios = <&shift_io 10 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led_wifi_24 { + label = "wifi_gen_2"; + gpios = <&shift_io 22 GPIO_ACTIVE_HIGH>; + }; + + led_wifi_50 { + label = "wifi_gen_5"; + gpios = <&shift_io 23 GPIO_ACTIVE_HIGH>; + }; + }; + }; +}; diff --git a/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-R1.dts b/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-R1.dts new file mode 100644 index 00000000..5f30195b --- /dev/null +++ b/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-R1.dts @@ -0,0 +1,84 @@ +#include "qcom-ipq4018-rutx-common.dtsi" +#include "qcom-ipq4018-rutx-shiftreg.dtsi" +#include "qcom-ipq4018-rutx-i2c.dtsi" // SFP + +/ { + model = "RUTXR1"; + + soc { + gpio-export { + compatible = "gpio-export"; + #size-cells = <0>; + + gpio_modem_reset { + gpio-export,name = "modem_reset"; + gpio-export,output = <0>; + gpios = <&shift_io 1 GPIO_ACTIVE_HIGH>; + }; + + gpio_modem_power { + gpio-export,name = "modem_power"; + gpio-export,output = <0>; + gpios = <&shift_io 2 GPIO_ACTIVE_HIGH>; + }; + + gpio_sim_select { + gpio-export,name = "sim_sel"; + gpio-export,output = <1>; + gpios = <&shift_io 3 GPIO_ACTIVE_LOW>; + }; + }; + + leds { + compatible = "gpio-leds"; + + led_wan_sim1 { + label = "wan_sim_1"; + gpios = <&shift_io 4 GPIO_ACTIVE_HIGH>; + }; + + led_wan_sim2 { + label = "wan_sim_2"; + gpios = <&shift_io 5 GPIO_ACTIVE_HIGH>; + }; + + led_wan_eth { + label = "wan_wifi_4"; // not wan_eth_3 ! + gpios = <&shift_io 11 GPIO_ACTIVE_HIGH>; + }; + + led_wan_mob { + label = "wan_mob_5"; + gpios = <&shift_io 0 GPIO_ACTIVE_HIGH>; + }; + + led_gen_3 { + label = "mob_gen_3"; + gpios = <&shift_io 6 GPIO_ACTIVE_HIGH>; + }; + + led_gen_4 { + label = "mob_gen_4"; + gpios = <&shift_io 7 GPIO_ACTIVE_HIGH>; + }; + + led_ssid_1 { + label = "mob_ssid_1"; + gpios = <&shift_io 8 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led_ssid_3 { + label = "mob_ssid_3"; + gpios = <&shift_io 9 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led_ssid_5 { + label = "mob_ssid_5"; + gpios = <&shift_io 10 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + }; + }; +}; diff --git a/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-STM32.dts b/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-STM32.dts new file mode 100644 index 00000000..c6e53f02 --- /dev/null +++ b/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-STM32.dts @@ -0,0 +1,188 @@ +#include "qcom-ipq4018-rutx-common.dtsi" +#include "qcom-ipq4018-rutx-i2c.dtsi" + +/ { + model = "RUTX STM32"; + io_expander = "stm32"; + + soc { + i2c_0: i2c@78b7000 { + stm32_io: stm32@74 { + #gpio-cells = <2>; + compatible = "tlt,stm32v1"; + reg = <0x74>; + gpio-controller; + interrupt-parent = <&tlmm>; + interrupts = <5 2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + }; + + gpio-export { + compatible = "gpio-export"; + #size-cells = <0>; + + gpio_modem_reset { + gpio-export,name = "modem_reset"; + gpio-export,output = <0>; + gpios = <&stm32_io 21 GPIO_ACTIVE_HIGH>; + }; + + gpio_modem_power { + gpio-export,name = "modem_power"; + gpio-export,output = <0>; + gpios = <&stm32_io 20 GPIO_ACTIVE_HIGH>; + }; + + gpio_modem2_reset { + gpio-export,name = "modem2_reset"; + gpio-export,output = <0>; + gpios = <&stm32_io 13 GPIO_ACTIVE_HIGH>; + }; + + gpio_modem2_power { + gpio-export,name = "modem2_power"; + gpio-export,output = <0>; + gpios = <&stm32_io 14 GPIO_ACTIVE_HIGH>; + }; + + gpio_sim_select { + gpio-export,name = "sim_sel"; + gpio-export,output = <1>; + gpios = <&stm32_io 22 GPIO_ACTIVE_LOW>; + }; + + gpio_out_1 { + gpio-export,name = "gpio23"; + gpio-export,output = <0>; + gpio-export,direction_may_change; + gpios = <&stm32_io 23 GPIO_ACTIVE_HIGH>; + }; + + gpio_in_1 { + gpio-export,name = "gpio24"; + gpio-export,input = <0>; + gpio-export,direction_may_change; + gpios = <&stm32_io 24 GPIO_ACTIVE_LOW>; + }; + }; + + leds { + compatible = "gpio-leds"; + + led_wan_sim1 { + label = "wan_sim_1"; + gpios = <&stm32_io 0 GPIO_ACTIVE_HIGH>; + }; + + led_wan_sim2 { + label = "wan_sim_2"; + gpios = <&stm32_io 1 GPIO_ACTIVE_HIGH>; + }; + + led_wan_eth { + label = "wan_eth_3"; + gpios = <&stm32_io 2 GPIO_ACTIVE_HIGH>; + }; + + led_wan_wifi { + label = "wan_wifi_4"; + gpios = <&stm32_io 3 GPIO_ACTIVE_HIGH>; + }; + + led_wan_mob { + label = "wan_mob_5"; + gpios = <&stm32_io 16 GPIO_ACTIVE_HIGH>; + }; + + led_gen_2 { + label = "mob_gen_2"; + gpios = <&stm32_io 4 GPIO_ACTIVE_HIGH>; + }; + + led_gen_3 { + label = "mob_gen_3"; + gpios = <&stm32_io 5 GPIO_ACTIVE_HIGH>; + }; + + led_gen_4 { + label = "mob_gen_4"; + gpios = <&stm32_io 6 GPIO_ACTIVE_HIGH>; + }; + + led2_gen_2 { + label = "mob2_gen_2"; + gpios = <&stm32_io 32 GPIO_ACTIVE_HIGH>; + }; + + led2_gen_3 { + label = "mob2_gen_3"; + gpios = <&stm32_io 33 GPIO_ACTIVE_HIGH>; + }; + + led2_gen_4 { + label = "mob2_gen_4"; + gpios = <&stm32_io 34 GPIO_ACTIVE_HIGH>; + }; + + led_ssid_1 { + label = "mob_ssid_1"; + gpios = <&stm32_io 7 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led_ssid_2 { + label = "mob_ssid_2"; + gpios = <&stm32_io 8 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led_ssid_3 { + label = "mob_ssid_3"; + gpios = <&stm32_io 9 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led_ssid_4 { + label = "mob_ssid_4"; + gpios = <&stm32_io 10 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led_ssid_5 { + label = "mob_ssid_5"; + gpios = <&stm32_io 11 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led2_ssid_1 { + label = "mob2_ssid_1"; + gpios = <&stm32_io 31 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led2_ssid_3 { + label = "mob2_ssid_3"; + gpios = <&stm32_io 30 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led2_ssid_5 { + label = "mob2_ssid_5"; + gpios = <&stm32_io 29 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + }; + + led_wifi_24 { + label = "wifi_gen_2"; + gpios = <&stm32_io 19 GPIO_ACTIVE_HIGH>; + }; + + led_wifi_50 { + label = "wifi_gen_5"; + gpios = <&stm32_io 18 GPIO_ACTIVE_HIGH>; + }; + }; + }; +}; diff --git a/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-common.dtsi b/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-common.dtsi new file mode 100644 index 00000000..974ebfaf --- /dev/null +++ b/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-common.dtsi @@ -0,0 +1,84 @@ +#include "qcom-ipq4019-ap.dk01.1.dtsi" +#include +//#include "platform_name.dtsi" + +/ { + compatible = "teltonika,rutx", "qcom,ap-dk01.1-c2", "qcom,ipq4019"; + + memory { + device_type = "memory"; + reg = <0x80000000 0x10000000>; + }; + + soc { + mdio@90000 { + status = "ok"; + pinctrl-0 = <&mdio_pins>; + pinctrl-names = "default"; + phy-reset-gpio = <&tlmm 62 0>; + + ethphy4: ethernet-phy@4 { + qcom,fiber-enable; + }; + }; + + pinctrl@1000000 { + mdio_pins: mdio_pinmux { + mux_1 { + pins = "gpio53"; + function = "mdio"; + bias-pull-up; + }; + mux_2 { + pins = "gpio52"; + function = "mdc"; + bias-pull-up; + }; + }; + }; + + spi_0: spi@78b5000 { + cs-gpios = <&tlmm 54 0>, <&tlmm 63 0>; + num-cs = <2>; + + mx25l25635f@0 { + compatible = "n25q128a11", "mx25l25635f", "jedec,spi-nor"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0>; + spi-max-frequency = <24000000>; + }; + + mt29f@1 { + #address-cells = <1>; + #size-cells = <1>; + compatible = "spi-nand","spinand,mt29f"; + reg = <1>; + spi-max-frequency = <24000000>; + }; + }; + + gpio_keys { + compatible = "gpio-keys"; + + reset { + label = "reset"; + gpios = <&tlmm 4 1>; + linux,code = <0x198>; + }; + }; + + usb3: usb3@8af8800 { + dwc3@8a00000 { + snps,dis_u2_susphy_quirk; + snps,dis_u3_susphy_quirk; + }; + }; + + usb2: usb2@60f8800 { + dwc3@6000000 { + snps,dis_u2_susphy_quirk; + }; + }; + }; +}; diff --git a/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-i2c.dtsi b/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-i2c.dtsi new file mode 100644 index 00000000..eab95a62 --- /dev/null +++ b/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-i2c.dtsi @@ -0,0 +1,20 @@ +/ { + soc { + pinctrl@1000000 { + i2c_0_pins: i2c_0_pinmux { + mux { + pins = "gpio58", "gpio59"; + function = "blsp_i2c0"; + bias-disable; + }; + }; + }; + + i2c_0: i2c@78b7000 { /* BLSP1 QUP2 */ + pinctrl-0 = <&i2c_0_pins>; + pinctrl-names = "default"; + clock-frequency = <400000>; + status = "ok"; + }; + }; +}; diff --git a/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-shiftreg.dtsi b/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-shiftreg.dtsi new file mode 100644 index 00000000..38810ce7 --- /dev/null +++ b/root/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-rutx-shiftreg.dtsi @@ -0,0 +1,25 @@ +/ { + io_expander = "shiftreg_1"; + + soc { + ext_io { + compatible = "spi-gpio"; + #address-cells = <1>; + #size-cells = <0>; + + gpio-sck = <&tlmm 1 GPIO_ACTIVE_HIGH>; // SRCLK + gpio-mosi = <&tlmm 3 GPIO_ACTIVE_HIGH>; // SER + cs-gpios = <&tlmm 2 GPIO_ACTIVE_HIGH>; // RCLK + num-chipselects = <1>; + + shift_io: shift_io@0 { + compatible = "fairchild,74hc595"; + reg = <0>; + gpio-controller; + #gpio-cells = <2>; + registers-number = <3>; + spi-max-frequency = <10000000>; + }; + }; + }; +}; diff --git a/root/target/linux/ipq40xx/image/generic.mk b/root/target/linux/ipq40xx/image/generic.mk index 3bf64a07..c71ddebb 100644 --- a/root/target/linux/ipq40xx/image/generic.mk +++ b/root/target/linux/ipq40xx/image/generic.mk @@ -46,6 +46,17 @@ define Build/append-rootfshdr dd if=$@.new bs=64 count=1 >> $(IMAGE_KERNEL) endef +define Build/append-rutx-metadata + echo \ + '{ \ + "device_code": [".*"], \ + "hwver": [".*"], \ + "batch": [".*"], \ + "serial": [".*"], \ + "supported_devices":["teltonika,rutx"] \ + }' | fwtool -I - $@ +endef + define Build/mkmylofw_32m $(eval device_id=$(word 1,$(1))) $(eval revision=$(word 2,$(1))) @@ -786,6 +797,24 @@ define Device/qxwlan_e2600ac-c2 endef TARGET_DEVICES += qxwlan_e2600ac-c2 +define Device/teltonika_rutx + $(call Device/FitImage) + $(call Device/UbiFit) + DEVICE_VENDOR := Teltonika + DEVICE_MODEL := RUTX + SOC := qcom-ipq4018 + DEVICE_DTS := qcom-ipq4018-rutx-12 qcom-ipq4018-rutx-08_10 qcom-ipq4018-rutx-09_11 qcom-ipq4018-rutx-R1 qcom-ipq4018-rutx-STM32 + DEVICE_DTS_CONFIG := config@5 +mc KERNEL = kernel-bin | gzip | fit gzip "$$(KDIR)/{$$(subst $$(space),$$(comma),$$(addprefix image-,$$(addsuffix .dtb,$$(DEVICE_DTS))))}" + KERNEL_INSTALL := 1 + BLOCKSIZE := 128k + PAGESIZE := 2048 + FILESYSTEMS := squashfs + IMAGE/nand-factory.ubi := append-ubi | qsdk-ipq-factory-nand | append-rutx-metadata + DEVICE_PACKAGES := ipq-wifi-teltonika_rutx kmod-bluetooth +endef +TARGET_DEVICES += teltonika_rutx + define Device/unielec_u4019-32m $(call Device/FitImage) DEVICE_VENDOR := Unielec diff --git a/root/target/linux/ipq40xx/patches-5.15/901-arm-boot-add-dts-files.patch b/root/target/linux/ipq40xx/patches-5.15/901-arm-boot-add-dts-files.patch new file mode 100644 index 00000000..77712435 --- /dev/null +++ b/root/target/linux/ipq40xx/patches-5.15/901-arm-boot-add-dts-files.patch @@ -0,0 +1,57 @@ +--- a/arch/arm/boot/dts/Makefile ++++ b/arch/arm/boot/dts/Makefile +@@ -950,11 +950,54 @@ + qcom-ipq4018-ap120c-ac.dtb \ + qcom-ipq4018-ap120c-ac-bit.dtb \ + qcom-ipq4018-jalapeno.dtb \ ++ qcom-ipq4018-a42.dtb \ ++ qcom-ipq4018-dap-2610.dtb \ ++ qcom-ipq4018-cs-w3-wd1200g-eup.dtb \ ++ qcom-ipq4018-ea6350v3.dtb \ ++ qcom-ipq4018-eap1300.dtb \ ++ qcom-ipq4018-emd1.dtb \ ++ qcom-ipq4018-emr3500.dtb \ ++ qcom-ipq4018-ens620ext.dtb \ ++ qcom-ipq4018-ex6100v2.dtb \ ++ qcom-ipq4018-ex6150v2.dtb \ ++ qcom-ipq4018-fritzbox-4040.dtb \ ++ qcom-ipq4018-jalapeno.dtb \ ++ qcom-ipq4018-meshpoint-one.dtb \ ++ qcom-ipq4018-nbg6617.dtb \ ++ qcom-ipq4018-rt-ac58u.dtb \ ++ qcom-ipq4018-rutx-08_10.dtb \ ++ qcom-ipq4018-rutx-09_11.dtb \ ++ qcom-ipq4018-rutx-12.dtb \ ++ qcom-ipq4018-wre6606.dtb \ + qcom-ipq4019-ap.dk01.1-c1.dtb \ + qcom-ipq4019-ap.dk04.1-c1.dtb \ + qcom-ipq4019-ap.dk04.1-c3.dtb \ + qcom-ipq4019-ap.dk07.1-c1.dtb \ + qcom-ipq4019-ap.dk07.1-c2.dtb \ ++ com-ipq4019-a62.dtb \ ++ qcom-ipq4019-cm520-79f.dtb \ ++ qcom-ipq4019-ea8300.dtb \ ++ qcom-ipq4019-eap2200.dtb \ ++ qcom-ipq4019-fritzbox-7530.dtb \ ++ qcom-ipq4019-fritzrepeater-1200.dtb \ ++ qcom-ipq4019-fritzrepeater-3000.dtb \ ++ qcom-ipq4019-r619ac.dtb \ ++ qcom-ipq4019-r619ac-128m.dtb \ ++ qcom-ipq4019-map-ac2200.dtb \ ++ qcom-ipq4019-e2600ac-c1.dtb \ ++ qcom-ipq4019-e2600ac-c2.dtb \ ++ qcom-ipq4019-habanero-dvk.dtb \ ++ qcom-ipq4019-rtl30vw.dtb \ ++ qcom-ipq4019-u4019-32m.dtb \ ++ qcom-ipq4019-wpj419.dtb \ ++ qcom-ipq4019-wtr-m2133hp.dtb \ ++ qcom-ipq4028-wpj428.dtb \ ++ qcom-ipq4029-ap-303.dtb \ ++ qcom-ipq4029-ap-303h.dtb \ ++ qcom-ipq4029-ap-365.dtb \ ++ qcom-ipq4029-gl-b1300.dtb \ ++ qcom-ipq4029-gl-s1300.dtb \ ++ qcom-ipq4029-mr33.dtb \ + qcom-ipq8064-ap148.dtb \ + qcom-ipq8064-rb3011.dtb \ + qcom-msm8226-samsung-s3ve3g.dtb \ diff --git a/root/target/linux/ipq40xx/patches-5.4/901-arm-boot-add-dts-files.patch b/root/target/linux/ipq40xx/patches-5.4/901-arm-boot-add-dts-files.patch index 3cea070c..30c88128 100644 --- a/root/target/linux/ipq40xx/patches-5.4/901-arm-boot-add-dts-files.patch +++ b/root/target/linux/ipq40xx/patches-5.4/901-arm-boot-add-dts-files.patch @@ -10,7 +10,7 @@ Signed-off-by: John Crispin --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile -@@ -837,11 +837,62 @@ dtb-$(CONFIG_ARCH_QCOM) += \ +@@ -837,11 +837,63 @@ dtb-$(CONFIG_ARCH_QCOM) += \ qcom-apq8074-dragonboard.dtb \ qcom-apq8084-ifc6540.dtb \ qcom-apq8084-mtp.dtb \ @@ -37,6 +37,9 @@ Signed-off-by: John Crispin + qcom-ipq4019-oap100.dtb \ + qcom-ipq4018-pa1200.dtb \ + qcom-ipq4018-rt-ac58u.dtb \ ++ qcom-ipq4018-rutx-08_10.dtb \ ++ qcom-ipq4018-rutx-09_11.dtb \ ++ qcom-ipq4018-rutx-12.dtb \ + qcom-ipq4018-wre6606.dtb \ + qcom-ipq4018-wrtq-329acn.dtb \ qcom-ipq4019-ap.dk01.1-c1.dtb \