From 5c172d9b986c62106c243321572aadc0194c6f56 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Wed, 25 Jan 2023 05:14:07 +0800 Subject: [PATCH 01/28] update --- .github/workflows/Openwrt-AutoBuild.yml | 2 +- devices/armvirt_pcat/.config | 3 +- devices/armvirt_pcat/diy.sh | 2 +- .../target/linux/armvirt_pcat/image/Makefile | 36 ++++++ devices/armvirt_pcat/patches/fix.patch | 15 ++- devices/ipq60xx_generic/.config | 50 +++++++ devices/ipq60xx_generic/diy.sh | 4 +- .../package/system/fstools/patches/fix.patch | 11 ++ devices/ipq60xx_generic/patches/fix.patch | 85 +----------- .../ipq60xx_generic/patches/netsupport.patch | 75 +++++++++++ devices/ipq60xx_generic/patches/targets.patch | 2 +- devices/mediatek_mt7981/diy.sh | 2 +- devices/mediatek_mt7981/patches/fix.patch | 31 +++++ .../patches/imagebuilder.patch | 122 ------------------ .../patches/iptables-mod-socket.patch | 40 ++++++ devices/mediatek_mt7981/patches/targets.patch | 20 +-- devices/mediatek_mt7986/diy.sh | 2 +- devices/mediatek_mt7986/patches/fix.patch | 31 +++++ .../patches/imagebuilder.patch | 122 ------------------ .../patches/iptables-mod-socket.patch | 40 ++++++ devices/mediatek_mt7986/patches/targets.patch | 20 +-- 21 files changed, 341 insertions(+), 374 deletions(-) create mode 100644 devices/armvirt_pcat/diy/target/linux/armvirt_pcat/image/Makefile create mode 100644 devices/ipq60xx_generic/diy/package/system/fstools/patches/fix.patch create mode 100644 devices/ipq60xx_generic/patches/netsupport.patch create mode 100644 devices/mediatek_mt7981/patches/fix.patch delete mode 100644 devices/mediatek_mt7981/patches/imagebuilder.patch create mode 100644 devices/mediatek_mt7981/patches/iptables-mod-socket.patch create mode 100644 devices/mediatek_mt7986/patches/fix.patch delete mode 100644 devices/mediatek_mt7986/patches/imagebuilder.patch create mode 100644 devices/mediatek_mt7986/patches/iptables-mod-socket.patch diff --git a/.github/workflows/Openwrt-AutoBuild.yml b/.github/workflows/Openwrt-AutoBuild.yml index b8426e3b2496..8288a9b093db 100644 --- a/.github/workflows/Openwrt-AutoBuild.yml +++ b/.github/workflows/Openwrt-AutoBuild.yml @@ -116,7 +116,7 @@ jobs: DEBIAN_FRONTEND: noninteractive run: | ( sudo -E apt-get -qq update - sudo -E apt-get -qq install build-essential clang flex g++ gawk gcc-multilib gettext \ + sudo -E apt-get -qq install build-essential clang flex g++ gawk gcc-multilib gettext python2.7 \ git libncurses5-dev libssl-dev python3-distutils rsync unzip zlib1g-dev swig libpython3-dev aria2 jq subversion qemu-utils ccache rename libelf-dev device-tree-compiler sudo -E apt-get -qq purge azure-cli ghc* zulu* hhvm llvm* firefox powershell openjdk* dotnet* google* mysql* php* android* sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc diff --git a/devices/armvirt_pcat/.config b/devices/armvirt_pcat/.config index c1df83b7488c..04bb9979830a 100644 --- a/devices/armvirt_pcat/.config +++ b/devices/armvirt_pcat/.config @@ -1,8 +1,7 @@ CONFIG_TARGET_armvirt_pcat=y CONFIG_TARGET_armvirt_pcat_64=y CONFIG_TARGET_armvirt_pcat_64_Default=y -CONFIG_TARGET_ROOTFS_SQUASHFS=y -CONFIG_TARGET_IMAGES_GZIP=y +CONFIG_TARGET_ROOTFS_EXT4FS=y CONFIG_PACKAGE_luci-ssl=n # uhttpd服务 CONFIG_PACKAGE_luci-ssl-nginx=y # nginx diff --git a/devices/armvirt_pcat/diy.sh b/devices/armvirt_pcat/diy.sh index 1430c53a991b..3ae1a03da733 100644 --- a/devices/armvirt_pcat/diy.sh +++ b/devices/armvirt_pcat/diy.sh @@ -1,7 +1,6 @@ SHELL_FOLDER=$(dirname $(readlink -f "$0")) -bash $SHELL_FOLDER/../common/kernel_5.15.sh mv -f target/linux/armvirt target/linux/armvirt_pcat @@ -14,3 +13,4 @@ svn co https://github.com/photonicat/rockchip_rk3568_openwrt/trunk/files files mv -f $SHELL_FOLDER/network files/etc/config/ + diff --git a/devices/armvirt_pcat/diy/target/linux/armvirt_pcat/image/Makefile b/devices/armvirt_pcat/diy/target/linux/armvirt_pcat/image/Makefile new file mode 100644 index 000000000000..0c09275c658b --- /dev/null +++ b/devices/armvirt_pcat/diy/target/linux/armvirt_pcat/image/Makefile @@ -0,0 +1,36 @@ +# SPDX-License-Identifier: GPL-2.0-only +# +# Copyright (C) 2012-2019 OpenWrt.org +# Copyright (C) 2016-2017 LEDE project + +include $(TOPDIR)/rules.mk +include $(INCLUDE_DIR)/image.mk + +define Build/Compile + $(CP) $(LINUX_DIR)/COPYING $(KDIR)/COPYING.linux +endef + +### Devices ### +define Device/Default + KERNEL := kernel-bin +endef + +define Device/photonicat + DEVICE_VENDOR := 光影猫 + DEVICE_MODEL := Photonicat + SOC := RK3568 + DEVICE_PACKAGES := pcat-manager +endef +TARGET_DEVICES += photonicat + +define Image/Build + export IMG_PREFIX="$(IMG_PREFIX)$(if $(PROFILE_SANITIZED),-$(PROFILE_SANITIZED))"; \ + export BIN_DIR=$(BIN_DIR); \ + export TOPDIR=$(TOPDIR); \ + export PARTSIZE=$(CONFIG_TARGET_ROOTFS_PARTSIZE); \ + cd /www/wwwroot/op.supes.top/bcache/armvirt/64/rk3568-linux-sdk; \ + export CROSS_COMPILE=aarch64-linux-gnu-;\ + bash ./build.sh +endef + +$(eval $(call BuildImage)) diff --git a/devices/armvirt_pcat/patches/fix.patch b/devices/armvirt_pcat/patches/fix.patch index 821bc703253c..6d7ba8fb1b4a 100644 --- a/devices/armvirt_pcat/patches/fix.patch +++ b/devices/armvirt_pcat/patches/fix.patch @@ -11,11 +11,20 @@ -FEATURES+=cpiogz ext4 ramdisk squashfs targz +FEATURES+=cpiogz ext4 ramdisk squashfs targz boot-part rootfs-part - KERNEL_PATCHVER:=5.15 + KERNEL_PATCHVER:=5.10 include $(INCLUDE_DIR)/target.mk -DEFAULT_PACKAGES += mkf2fs e2fsprogs -+DEFAULT_PACKAGES += mkf2fs e2fsprogs blkid pcat-manager -luci-app-gpsysupgrade ++DEFAULT_PACKAGES += mkf2fs e2fsprogs blkid -luci-app-gpsysupgrade - $(eval $(call BuildTarget)) \ No newline at end of file + $(eval $(call BuildTarget)) + +--- a/target/imagebuilder/files/Makefile ++++ b/target/imagebuilder/files/Makefile +@@ -141,5 +141,4 @@ + $(MAKE) -s checksum + rm -rf $(KERNEL_BUILD_DIR)/tmp +- rm -rf $(KERNEL_BUILD_DIR)/root.* + + _call_manifest: FORCE diff --git a/devices/ipq60xx_generic/.config b/devices/ipq60xx_generic/.config index 9cbb0420304e..f979b00ba5f3 100644 --- a/devices/ipq60xx_generic/.config +++ b/devices/ipq60xx_generic/.config @@ -3,9 +3,59 @@ CONFIG_TARGET_ipq60xx=y CONFIG_TARGET_ipq60xx_generic=y CONFIG_TARGET_MULTI_PROFILE=y CONFIG_TARGET_ALL_PROFILES=y +CONFIG_TARGET_DEVICE_ipq60xx_generic_DEVICE_glinet_gl-ax1800=n +CONFIG_TARGET_DEVICE_ipq60xx_generic_DEVICE_glinet_gl-axt1800=n CONFIG_PACKAGE_dockerd=n +CONFIG_PACKAGE_kmod-dm-raid=n +CONFIG_PACKAGE_kmod-dm=n +CONFIG_PACKAGE_kmod-fs-xfs=n +CONFIG_PACKAGE_kmod-fs-btrfs=n +CONFIG_PACKAGE_kmod-qca-nss-drv-bridge-mgr=n +CONFIG_PACKAGE_kmod-qca-nss-drv-vlan-mgr=n +CONFIG_PACKAGE_kmod-drm-ttm=n +CONFIG_PACKAGE_kmod-drm-kms-helper=n +CONFIG_PACKAGE_kmod-gigaset=n +CONFIG_PACKAGE_kmod-isdn4linux=n +CONFIG_PACKAGE_kmod-video-pwc=n +CONFIG_PACKAGE_kmod-mmc-spi=n +CONFIG_PACKAGE_kmod-scsi-cdrom=n +CONFIG_PACKAGE_kmod-scsi-generic=n +CONFIG_PACKAGE_kmod-scsi-tape=n +CONFIG_PACKAGE_kmod-sound-core=n +CONFIG_PACKAGE_kmod-iio-hmc5843=n +CONFIG_PACKAGE_kmod-ledtrig-netdev=n +CONFIG_PACKAGE_kmod-tg3=n +CONFIG_PACKAGE_kmod-be2net=n +CONFIG_PACKAGE_kmod-bmp085-spi=n +CONFIG_PACKAGE_kmod-mac80211-hwsim=n +CONFIG_PACKAGE_kmod-ath3k=n +CONFIG_PACKAGE_kmod-ath5k=n +CONFIG_PACKAGE_kmod-ath6kl-sdio=n +CONFIG_PACKAGE_kmod-ath6kl-usb=n +CONFIG_PACKAGE_kmod-ath9k=n +CONFIG_PACKAGE_kmod-ath10k=n +CONFIG_PACKAGE_kmod-ath10k-ct=n +CONFIG_PACKAGE_kmod-ath10k-ct-smallbuffers=n +CONFIG_PACKAGE_kmod-crypto-qcrypto=n +CONFIG_PACKAGE_kmod-gl-mifi-mcu=n +CONFIG_PACKAGE_kmod-mdio-netlink=n +CONFIG_PACKAGE_kmod-nf-nathelper-extra=n +CONFIG_PACKAGE_kmod-nf-ipvs-sip=n +CONFIG_PACKAGE_kmod-nf-nathelper-extra=n +CONFIG_PACKAGE_kmod-usb-serial-xr_usb_serial_common=n +CONFIG_PACKAGE_kmod-ovpn-dco=n +CONFIG_PACKAGE_spidev-test=n +CONFIG_PACKAGE_kmod-lib80211=n +CONFIG_PACKAGE_kmod-carl9170=n +CONFIG_PACKAGE_kmod-batman-adv=n +CONFIG_PACKAGE_kmod-rtl8812au-ct=n +CONFIG_PACKAGE_kmod-rtl8821cu=n +CONFIG_PACKAGE_kmod-rtl88x2bu=n + +CONFIG_PACKAGE_wpad-basic-wolfssl=n +CONFIG_PACKAGE_wpad-openssl=y CONFIG_PACKAGE_luci-ssl=y # uhttpd服务 diff --git a/devices/ipq60xx_generic/diy.sh b/devices/ipq60xx_generic/diy.sh index f78393d00a90..b31dc170fa4e 100644 --- a/devices/ipq60xx_generic/diy.sh +++ b/devices/ipq60xx_generic/diy.sh @@ -2,12 +2,12 @@ shopt -s extglob rm -rf package/system/opkg && mv -f feeds/kiddin9/opkg package/system/ -rm -rf package/feeds/kiddin9/{firewall,rtl*,nft-fullcone,fullconenat} package/kernel/mt76 toolchain/musl +rm -rf feeds/kiddin9/{rtl*,nft-fullcone,shortcut-fe,fullconenat} package/kernel/mt76 toolchain/musl package/feeds/packages/{jool,xtables-addons,openvswitch} rm -rf target/imagebuilder svn co https://github.com/openwrt/openwrt/branches/openwrt-22.03/target/imagebuilder target/imagebuilder +sed -i "/libfakeroot/d" target/imagebuilder/Makefile -rm -rf toolchain/musl svn co https://github.com/openwrt/openwrt/branches/openwrt-22.03/toolchain/musl toolchain/musl svn co https://github.com/coolsnowwolf/openwrt-gl-ax1800/trunk/package/network/services/fullconenat feeds/kiddin9/fullconenat diff --git a/devices/ipq60xx_generic/diy/package/system/fstools/patches/fix.patch b/devices/ipq60xx_generic/diy/package/system/fstools/patches/fix.patch new file mode 100644 index 000000000000..4ba316af70d7 --- /dev/null +++ b/devices/ipq60xx_generic/diy/package/system/fstools/patches/fix.patch @@ -0,0 +1,11 @@ +--- a/libfstools/overlay.c ++++ b/libfstools/overlay.c +@@ -33,4 +33,8 @@ + #define SWITCH_JFFS2 "/tmp/.switch_jffs2" + ++#ifndef GLOB_ONLYDIR ++#define GLOB_ONLYDIR 0 ++#endif ++ + static bool keep_sysupgrade; + diff --git a/devices/ipq60xx_generic/patches/fix.patch b/devices/ipq60xx_generic/patches/fix.patch index f9ef17bf7d68..ff1728057278 100644 --- a/devices/ipq60xx_generic/patches/fix.patch +++ b/devices/ipq60xx_generic/patches/fix.patch @@ -22,84 +22,10 @@ endef TARGET_DEVICES += qihoo_v6 ---- a/include/image.mk -+++ b/include/image.mk -@@ -300,6 +300,44 @@ ifdef CONFIG_TARGET_ROOTFS_TARGZ - endef - endif - -+define Device/Build/targz -+ $$(_TARGET): $(if $(CONFIG_JSON_OVERVIEW_IMAGE_INFO), \ -+ $(BUILD_DIR)/json_info_files/$$(ROOTFSTZ).json, \ -+ $(BIN_DIR)/$$(ROOTFSTZ)) -+ -+ $(call Device/Export,$(BUILD_DIR)/json_info_files/$$(ROOTFSTZ).json,$(1)) -+ -+ $(BUILD_DIR)/json_info_files/$$(ROOTFSTZ).json: $(BIN_DIR)/$$(ROOTFSTZ) -+ @mkdir -p $$(shell dirname $$@) -+ DEVICE_ID="$(1)" \ -+ SOURCE_DATE_EPOCH=$(SOURCE_DATE_EPOCH) \ -+ FILE_NAME="$$(notdir $$^)" \ -+ FILE_DIR="$(BIN_DIR)" \ -+ FILE_TYPE="rootfs" \ -+ FILE_FILESYSTEM="rootfs" \ -+ DEVICE_IMG_PREFIX="$$(DEVICE_IMG_PREFIX)" \ -+ DEVICE_VENDOR="$$(DEVICE_VENDOR)" \ -+ DEVICE_MODEL="$$(DEVICE_MODEL)" \ -+ DEVICE_VARIANT="$$(DEVICE_VARIANT)" \ -+ DEVICE_ALT0_VENDOR="$$(DEVICE_ALT0_VENDOR)" \ -+ DEVICE_ALT0_MODEL="$$(DEVICE_ALT0_MODEL)" \ -+ DEVICE_ALT0_VARIANT="$$(DEVICE_ALT0_VARIANT)" \ -+ DEVICE_ALT1_VENDOR="$$(DEVICE_ALT1_VENDOR)" \ -+ DEVICE_ALT1_MODEL="$$(DEVICE_ALT1_MODEL)" \ -+ DEVICE_ALT1_VARIANT="$$(DEVICE_ALT1_VARIANT)" \ -+ DEVICE_ALT2_VENDOR="$$(DEVICE_ALT2_VENDOR)" \ -+ DEVICE_ALT2_MODEL="$$(DEVICE_ALT2_MODEL)" \ -+ DEVICE_ALT2_VARIANT="$$(DEVICE_ALT2_VARIANT)" \ -+ DEVICE_TITLE="$$(DEVICE_TITLE)" \ -+ DEVICE_PACKAGES="$$(DEVICE_PACKAGES)" \ -+ TARGET="$(BOARD)" \ -+ SUBTARGET="$(if $(SUBTARGET),$(SUBTARGET),generic)" \ -+ VERSION_NUMBER="$(VERSION_NUMBER)" \ -+ VERSION_CODE="$(VERSION_CODE)" \ -+ SUPPORTED_DEVICES="$$(SUPPORTED_DEVICES)" \ -+ $(TOPDIR)/scripts/json_add_image_info.py $$@ -+endef -+ - ifdef CONFIG_TARGET_ROOTFS_CPIOGZ - define Image/Build/cpiogz - ( cd $(TARGET_DIR); find . | $(STAGING_DIR_HOST)/bin/cpio -o -H newc -R 0:0 | gzip -9n >$(BIN_DIR)/$(IMG_ROOTFS).cpio.gz ) -@@ -367,6 +405,7 @@ define Device/Init - DEVICE_IMG_PREFIX := $(IMG_PREFIX)-$(1) - DEVICE_IMG_NAME = $$(DEVICE_IMG_PREFIX)-$$(1)-$$(2) - IMAGE_SIZE := -+ ROOTFSTZ = $$(DEVICE_IMG_PREFIX)-rootfs.tar.gz - KERNEL_PREFIX = $$(DEVICE_IMG_PREFIX) - KERNEL_SUFFIX := -kernel.bin - KERNEL_INITRAMFS_SUFFIX = $$(KERNEL_SUFFIX) -@@ -567,7 +606,7 @@ define Device/Build/kernel - endef - - define Device/Build/image -- GZ_SUFFIX := $(if $(filter %dtb %gz,$(2)),,$(if $(and $(findstring ext4,$(1)),$(CONFIG_TARGET_IMAGES_GZIP)),.gz)) -+ GZ_SUFFIX := $(if $(filter %dtb %gz,$(2)),,$(if $(and $(findstring ext4,$(1)),$(findstring img,$(2)),$(CONFIG_TARGET_IMAGES_GZIP)),.gz)) - $$(_TARGET): $(if $(CONFIG_JSON_OVERVIEW_IMAGE_INFO), \ - $(BUILD_DIR)/json_info_files/$(call DEVICE_IMG_NAME,$(1),$(2)).json, \ - $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2))$$(GZ_SUFFIX)) -@@ -677,6 +716,8 @@ define Device/Build - $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),$(call Device/Build/initramfs,$(1))) - $(call Device/Build/kernel,$(1)) - -+ $(if $(CONFIG_TARGET_ROOTFS_TARGZ),$(call Device/Build/targz,$(PROFILE_SANITIZED))) -+ - $$(eval $$(foreach compile,$$(COMPILE), \ - $$(call Device/Build/compile,$$(compile),$(1)))) - - --- a/scripts/json_overview_image_info.py +++ b/scripts/json_overview_image_info.py -@@ -47,7 +47,7 @@ def get_initial_output(image_info): - +@@ -33,7 +33,7 @@ + ) if output: - default_packages, output["arch_packages"] = run( @@ -107,8 +33,8 @@ [ "make", "--no-print-directory", -@@ -55,6 +55,8 @@ def get_initial_output(image_info): - "target/linux/", +@@ -41,6 +41,8 @@ + "target/linux/{}".format(output['target'].split('/')[0]), "val.DEFAULT_PACKAGES", "val.ARCH_PACKAGES", + "val.LINUX_VERSION", @@ -117,10 +43,9 @@ stdout=PIPE, stderr=PIPE, - --- a/rules.mk +++ b/rules.mk -@@ -59,6 +59,7 @@ _SINGLE=export MAKEFLAGS=$(space); +@@ -62,6 +62,7 @@ _SINGLE=export MAKEFLAGS=$(space); CFLAGS:= ARCH:=$(subst i486,i386,$(subst i586,i386,$(subst i686,i386,$(call qstrip,$(CONFIG_ARCH))))) ARCH_PACKAGES:=$(call qstrip,$(CONFIG_TARGET_ARCH_PACKAGES)) diff --git a/devices/ipq60xx_generic/patches/netsupport.patch b/devices/ipq60xx_generic/patches/netsupport.patch new file mode 100644 index 000000000000..e1bfaf2ade7b --- /dev/null +++ b/devices/ipq60xx_generic/patches/netsupport.patch @@ -0,0 +1,75 @@ +From cf41c52ab16429d9228213c97f22928cef270b23 Mon Sep 17 00:00:00 2001 +From: kiddin9 <48883331+kiddin9@users.noreply.github.com> +Date: Tue, 24 Jan 2023 22:45:08 +0800 +Subject: [PATCH] Update netsupport.mk + +--- + package/kernel/linux/modules/netsupport.mk | 58 ++++++++++++++++++++++ + 1 file changed, 58 insertions(+) + +diff --git a/package/kernel/linux/modules/netsupport.mk b/package/kernel/linux/modules/netsupport.mk +index 0851770e1d..6aff1519af 100644 +--- a/package/kernel/linux/modules/netsupport.mk ++++ b/package/kernel/linux/modules/netsupport.mk +@@ -1237,3 +1237,61 @@ define KernelPackage/macsec/description + endef + + $(eval $(call KernelPackage,macsec)) ++ ++ ++define KernelPackage/netlink-diag ++ SUBMENU:=$(NETWORK_SUPPORT_MENU) ++ TITLE:=Netlink diag support for ss utility ++ KCONFIG:=CONFIG_NETLINK_DIAG ++ FILES:=$(LINUX_DIR)/net/netlink/netlink_diag.ko ++ AUTOLOAD:=$(call AutoLoad,31,netlink-diag) ++endef ++ ++define KernelPackage/netlink-diag/description ++ Netlink diag is a module made for use with iproute2's ss utility ++endef ++ ++$(eval $(call KernelPackage,netlink-diag)) ++ ++ ++define KernelPackage/wireguard ++ SUBMENU:=$(NETWORK_SUPPORT_MENU) ++ TITLE:=WireGuard secure network tunnel ++ DEPENDS:= \ ++ +kmod-crypto-lib-chacha20poly1305 \ ++ +kmod-crypto-lib-curve25519 \ ++ +kmod-udptunnel4 \ ++ +IPV6:kmod-udptunnel6 ++ KCONFIG:= \ ++ CONFIG_WIREGUARD \ ++ CONFIG_WIREGUARD_DEBUG=n ++ FILES:=$(LINUX_DIR)/drivers/net/wireguard/wireguard.ko ++ AUTOLOAD:=$(call AutoProbe,wireguard) ++endef ++ ++define KernelPackage/wireguard/description ++ WireGuard is a novel VPN that runs inside the Linux Kernel and utilizes ++ state-of-the-art cryptography. It aims to be faster, simpler, leaner, and ++ more useful than IPSec, while avoiding the massive headache. It intends to ++ be considerably more performant than OpenVPN. WireGuard is designed as a ++ general purpose VPN for running on embedded interfaces and super computers ++ alike, fit for many different circumstances. It uses UDP. ++endef ++ ++$(eval $(call KernelPackage,wireguard)) ++ ++ ++define KernelPackage/netconsole ++ SUBMENU:=$(NETWORK_SUPPORT_MENU) ++ TITLE:=Network console logging support ++ KCONFIG:=CONFIG_NETCONSOLE \ ++ CONFIG_NETCONSOLE_DYNAMIC=n ++ FILES:=$(LINUX_DIR)/drivers/net/netconsole.ko ++ AUTOLOAD:=$(call AutoProbe,netconsole) ++endef ++ ++define KernelPackage/netconsole/description ++ Network console logging support. ++endef ++ ++$(eval $(call KernelPackage,netconsole)) diff --git a/devices/ipq60xx_generic/patches/targets.patch b/devices/ipq60xx_generic/patches/targets.patch index 6034c7fd5155..c5720d68f4a7 100644 --- a/devices/ipq60xx_generic/patches/targets.patch +++ b/devices/ipq60xx_generic/patches/targets.patch @@ -5,7 +5,7 @@ DEFAULT_PACKAGES.nas:=block-mount fdisk lsblk mdadm # For router targets -DEFAULT_PACKAGES.router:=dnsmasq-full iptables ip6tables ppp ppp-mod-pppoe firewall odhcpd-ipv6only odhcp6c luci luci-lib-ipkg -+DEFAULT_PACKAGES.router:=dnsmasq-full iptables ip6tables ppp ppp-mod-pppoe firewall odhcpd-ipv6only odhcp6c luci luci-lib-ipkg kmod-ipt-offload kmod-ipt-nat kmod-ipt-nat6 ++DEFAULT_PACKAGES.router:=dnsmasq-full iptables ip6tables ppp ppp-mod-pppoe firewall odhcpd-ipv6only odhcp6c luci luci-lib-ipkg kmod-ipt-offload kmod-ipt-nat kmod-ipt-nat6 procd DEFAULT_PACKAGES.bootloader:= ifneq ($(DUMP),) diff --git a/devices/mediatek_mt7981/diy.sh b/devices/mediatek_mt7981/diy.sh index dcf6050b3a8d..14404507586d 100644 --- a/devices/mediatek_mt7981/diy.sh +++ b/devices/mediatek_mt7981/diy.sh @@ -6,7 +6,7 @@ SHELL_FOLDER=$(dirname $(readlink -f "$0")) rm -rf package/feeds/kiddin9/rtl* -rm -rf devices/common/patches/{glinet,imagebuilder.patch,iptables.patch,kernel-defaults.patch,targets.patch} +rm -rf devices/common/patches/{glinet,fix.patch,iptables.patch,kernel-defaults.patch,targets.patch} rm -rf toolchain/musl diff --git a/devices/mediatek_mt7981/patches/fix.patch b/devices/mediatek_mt7981/patches/fix.patch new file mode 100644 index 000000000000..eb8a9b6869dc --- /dev/null +++ b/devices/mediatek_mt7981/patches/fix.patch @@ -0,0 +1,31 @@ +--- a/scripts/json_overview_image_info.py ++++ b/scripts/json_overview_image_info.py +@@ -47,7 +47,7 @@ def get_initial_output(image_info): + + + if output: +- default_packages, output["arch_packages"] = run( ++ default_packages, output["arch_packages"], output["kernel_version"], output["initramfs"] = run( + [ + "make", + "--no-print-directory", +@@ -55,6 +55,8 @@ def get_initial_output(image_info): + "target/linux/", + "val.DEFAULT_PACKAGES", + "val.ARCH_PACKAGES", ++ "val.LINUX_VERSION", ++ "val.KERNEL_INITRAMFS", + ], + stdout=PIPE, + stderr=PIPE, + +--- a/rules.mk ++++ b/rules.mk +@@ -59,6 +59,7 @@ _SINGLE=export MAKEFLAGS=$(space); + CFLAGS:= + ARCH:=$(subst i486,i386,$(subst i586,i386,$(subst i686,i386,$(call qstrip,$(CONFIG_ARCH))))) + ARCH_PACKAGES:=$(call qstrip,$(CONFIG_TARGET_ARCH_PACKAGES)) ++KERNEL_INITRAMFS:=$(call qstrip,$(CONFIG_TARGET_ROOTFS_INITRAMFS)) + BOARD:=$(call qstrip,$(CONFIG_TARGET_BOARD)) + SUBTARGET:=$(call qstrip,$(CONFIG_TARGET_SUBTARGET)) + TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION)) diff --git a/devices/mediatek_mt7981/patches/imagebuilder.patch b/devices/mediatek_mt7981/patches/imagebuilder.patch deleted file mode 100644 index 2aaed7a0f32d..000000000000 --- a/devices/mediatek_mt7981/patches/imagebuilder.patch +++ /dev/null @@ -1,122 +0,0 @@ ---- a/target/imagebuilder/Makefile -+++ b/target/imagebuilder/Makefile -@@ -38,13 +38,15 @@ $(BIN_DIR)/$(IB_NAME).tar.xz: clean - ./files/repositories.conf \ - $(TMP_DIR)/.targetinfo \ - $(TMP_DIR)/.packageinfo \ -- $(PKG_BUILD_DIR)/ -+ $(TOPDIR)/files \ -+ $(PKG_BUILD_DIR)/ || true - --ifeq ($(CONFIG_IB_STANDALONE),) - echo '## Remote package repositories' >> $(PKG_BUILD_DIR)/repositories.conf - $(call FeedSourcesAppend,$(PKG_BUILD_DIR)/repositories.conf) - $(VERSION_SED_SCRIPT) $(PKG_BUILD_DIR)/repositories.conf --endif -+ $(SED) 's/^src\/gz \(.*\) https.*top\/\(packages.*\)/src \1 file:\/\/www\/wwwroot\/op.supes.top\/\2/' $(PKG_BUILD_DIR)/repositories.conf -+ $(SED) 's/^src\/gz \(.*\) https.*top\/\(targets.*\)/src \1 file:\/\/www\/wwwroot\/op.supes.top\/releases\/\2/' $(PKG_BUILD_DIR)/repositories.conf -+ $(SED) 's/\/kiddin9//' $(PKG_BUILD_DIR)/repositories.conf - - $(INSTALL_DIR) $(PKG_BUILD_DIR)/packages - # create an empty package index so `opkg` doesn't report an error - ---- a/target/imagebuilder/files/Makefile -+++ b/target/imagebuilder/files/Makefile -@@ -115,17 +115,32 @@ BUILD_PACKAGES:=$(filter-out $(filter -%,$(BUILD_PACKAGES)) $(patsubst -%,%,$(fi - PACKAGES:= - - _call_image: staging_dir/host/.prereq-build -+ [ "$(DATE)" ] && DATE="$(DATE)" || DATE="`date +'%m.%d.%Y'`"; \ -+ mkdir -p $(USER_FILES)/etc/uci-defaults || true; \ -+ echo -e " \ -+ sed -i \"s/[0-9]\+.[0-9]\+.[0-9]\{4\}/$$DATE/\" /etc/openwrt_release \n \ -+ sed -i \"s/DISTRIB_ID=.*/DISTRIB_ID='$(PARTSIZE)'/\" /etc/openwrt_release \n \ -+ sed -i \"s/OpenWrt .* by/OpenWrt $$DATE by/\" /etc/banner \n \ -+ echo \"$$DATE\" >/etc/openwrt_version \n \ -+ "> $(USER_FILES)/etc/uci-defaults/99-version; \ - echo 'Building images for $(BOARD)$(if $($(USER_PROFILE)_NAME), - $($(USER_PROFILE)_NAME))' - echo 'Packages: $(BUILD_PACKAGES)' - echo - rm -rf $(TARGET_DIR) $(TARGET_DIR_ORIG) - mkdir -p $(TARGET_DIR) $(BIN_DIR) $(TMP_DIR) $(DL_DIR) -+ if [[ "$(USER_PROFILE)" =~ (DEVICE_phicomm_k2p|DEVICE_asus_rt-n56u-b1|DEVICE_thunder_timecloud|DEVICE_youku_yk-l2|DEVICE_youhua_wr1200js|DEVICE_oraybox_x3a|DEVICE_netgear_wndr3700-v5|DEVICE_xiaomi_mi-router-4a-gigabit|DEVICE_xiaomi_mi-router-3g-v2|DEVICE_jcg_y2|DEVICE_glinet_gl-mt300a|DEVICE_glinet_gl-mt750|DEVICE_hiwifi_hc5661|DEVICE_hiwifi_hc5761|DEVICE_hiwifi_hc5861|DEVICE_lenovo_newifi-y1|DEVICE_lenovo_newifi-y1s|DEVICE_xiaomi_miwifi-mini|DEVICE_youku_yk-l1c|DEVICE_jdcloud_luban) || "$(TARGETID)" == "ramips/mt76x8" ]]; then \ -+ echo "src/gz openwrt_smflash https://op.supes.top/packages/mipsel_24kc/small_flash" >>$(TOPDIR)/repositories.conf; \ -+ else \ -+ sed -i "/smflash/d" $(TOPDIR)/repositories.conf; \ -+ fi - $(MAKE) package_reload - $(MAKE) package_install - $(MAKE) -s prepare_rootfs - $(MAKE) -s build_image - $(MAKE) -s json_overview_image_info - $(MAKE) -s checksum -+ rm -rf $(KERNEL_BUILD_DIR)/tmp -+ rm -rf $(KERNEL_BUILD_DIR)/root.* - - _call_manifest: FORCE - rm -rf $(TARGET_DIR) -@@ -166,7 +181,14 @@ package_install: FORCE - @echo Installing packages... - $(OPKG) install $(firstword $(wildcard $(LINUX_DIR)/libc_*.ipk $(PACKAGE_DIR)/libc_*.ipk)) - $(OPKG) install $(firstword $(wildcard $(LINUX_DIR)/kernel_*.ipk $(PACKAGE_DIR)/kernel_*.ipk)) -- $(OPKG) install $(BUILD_PACKAGES) -+ for p in $(BUILD_PACKAGES); do \ -+ if [[ $$p == luci-app-* && "`$(OPKG) list | grep luci-i18n-\`echo $$p | cut -d - -f 3-\`-zh-cn`" ]]; then \ -+ packages+="luci-i18n-`echo $$p | cut -d - -f 3-`-zh-cn "; \ -+ fi \ -+ done; \ -+ $(OPKG) install --force-overwrite --force-checksum --force-depends $(BUILD_PACKAGES) luci-i18n-base-zh-cn luci-i18n-base-en; \ -+ $(OPKG) install $$packages || true -+ $(OPKG) install --force-overwrite --force-checksum --force-depends --force-maintainer --force-reinstall my-default-settings - - prepare_rootfs: FORCE - @echo -@@ -180,12 +202,15 @@ prepare_rootfs: FORCE - ) \ - ) - $(call prepare_rootfs,$(TARGET_DIR),$(USER_FILES),$(DISABLED_SERVICES)) -+ if [[ "$(USER_PROFILE)" =~ (DEVICE_phicomm_k2p|DEVICE_asus_rt-n56u-b1|DEVICE_thunder_timecloud|DEVICE_youku_yk-l2|DEVICE_youhua_wr1200js|DEVICE_oraybox_x3a|DEVICE_netgear_wndr3700-v5|DEVICE_xiaomi_mi-router-4a-gigabit|DEVICE_xiaomi_mi-router-3g-v2|DEVICE_jcg_y2|DEVICE_glinet_gl-mt300a|DEVICE_glinet_gl-mt750|DEVICE_hiwifi_hc5661|DEVICE_hiwifi_hc5761|DEVICE_hiwifi_hc5861|DEVICE_lenovo_newifi-y1|DEVICE_lenovo_newifi-y1s|DEVICE_xiaomi_miwifi-mini|DEVICE_youku_yk-l1c|DEVICE_jdcloud_luban) || "$(TARGETID)" == "ramips/mt76x8" ]]; then \ -+ echo "src/gz openwrt_smflash https://op.supes.top/packages/mipsel_24kc/small_flash" >>$(BUILD_DIR)/root-ramips/etc/opkg/distfeeds.conf; \ -+ fi - - build_image: FORCE - @echo - @echo Building images... - rm -rf $(BUILD_DIR)/json_info_files/ -- $(NO_TRACE_MAKE) -C target/linux/$(BOARD)/image install TARGET_BUILD=1 IB=1 EXTRA_IMAGE_NAME="$(EXTRA_IMAGE_NAME)" \ -+ nice -n 19 $(NO_TRACE_MAKE) -C target/linux/$(BOARD)/image install TARGET_BUILD=1 IB=1 EXTRA_IMAGE_NAME="$(EXTRA_IMAGE_NAME)" \ - $(if $(USER_PROFILE),PROFILE="$(USER_PROFILE)") - - $(BIN_DIR)/profiles.json: FORCE - ---- a/scripts/json_overview_image_info.py -+++ b/scripts/json_overview_image_info.py -@@ -47,7 +47,7 @@ def get_initial_output(image_info): - - - if output: -- default_packages, output["arch_packages"] = run( -+ default_packages, output["arch_packages"], output["kernel_version"], output["initramfs"] = run( - [ - "make", - "--no-print-directory", -@@ -55,6 +55,8 @@ def get_initial_output(image_info): - "target/linux/", - "val.DEFAULT_PACKAGES", - "val.ARCH_PACKAGES", -+ "val.LINUX_VERSION", -+ "val.KERNEL_INITRAMFS", - ], - stdout=PIPE, - stderr=PIPE, - ---- a/rules.mk -+++ b/rules.mk -@@ -59,6 +59,7 @@ _SINGLE=export MAKEFLAGS=$(space); - CFLAGS:= - ARCH:=$(subst i486,i386,$(subst i586,i386,$(subst i686,i386,$(call qstrip,$(CONFIG_ARCH))))) - ARCH_PACKAGES:=$(call qstrip,$(CONFIG_TARGET_ARCH_PACKAGES)) -+KERNEL_INITRAMFS:=$(call qstrip,$(CONFIG_TARGET_ROOTFS_INITRAMFS)) - BOARD:=$(call qstrip,$(CONFIG_TARGET_BOARD)) - SUBTARGET:=$(call qstrip,$(CONFIG_TARGET_SUBTARGET)) - TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION)) diff --git a/devices/mediatek_mt7981/patches/iptables-mod-socket.patch b/devices/mediatek_mt7981/patches/iptables-mod-socket.patch new file mode 100644 index 000000000000..0398c93b6a6c --- /dev/null +++ b/devices/mediatek_mt7981/patches/iptables-mod-socket.patch @@ -0,0 +1,40 @@ +--- a/package/network/utils/iptables/Makefile ++++ b/package/network/utils/iptables/Makefile +@@ -388,6 +388,19 @@ iptables extension for triggering a LED. + + endef + ++define Package/iptables-mod-socket ++$(call Package/iptables/Module, +kmod-ipt-socket) ++ TITLE:=Socket match iptables extensions ++endef ++ ++define Package/iptables-mod-socket/description ++Socket match iptables extensions. ++ ++ Matches: ++ - socket ++ ++endef ++ + define Package/iptables-mod-tproxy + $(call Package/iptables/Module, +kmod-ipt-tproxy) + TITLE:=Transparent proxy iptables extensions +@@ -396,9 +409,6 @@ endef + define Package/iptables-mod-tproxy/description + Transparent proxy iptables extensions. + +- Matches: +- - socket +- + Targets: + - TPROXY + +@@ -721,6 +731,7 @@ $(eval $(call BuildPlugin,iptables-mod-ulog,$(IPT_ULOG-m))) + $(eval $(call BuildPlugin,iptables-mod-hashlimit,$(IPT_HASHLIMIT-m))) + $(eval $(call BuildPlugin,iptables-mod-rpfilter,$(IPT_RPFILTER-m))) + $(eval $(call BuildPlugin,iptables-mod-led,$(IPT_LED-m))) ++$(eval $(call BuildPlugin,iptables-mod-socket,$(IPT_SOCKET-m))) + $(eval $(call BuildPlugin,iptables-mod-tproxy,$(IPT_TPROXY-m))) + $(eval $(call BuildPlugin,iptables-mod-tee,$(IPT_TEE-m))) + $(eval $(call BuildPlugin,iptables-mod-u32,$(IPT_U32-m))) \ No newline at end of file diff --git a/devices/mediatek_mt7981/patches/targets.patch b/devices/mediatek_mt7981/patches/targets.patch index 4025b23f3719..170f75f95f9d 100644 --- a/devices/mediatek_mt7981/patches/targets.patch +++ b/devices/mediatek_mt7981/patches/targets.patch @@ -1,14 +1,5 @@ --- a/include/target.mk +++ b/include/target.mk -@@ -10,7 +10,7 @@ __target_inc=1 - DEVICE_TYPE?=router - - # Default packages - the really basic set --DEFAULT_PACKAGES:=\ -+DEFAULT_PACKAGES:=luci-app-advanced luci-app-firewall luci-app-gpsysupgrade luci-app-opkg luci-app-upnp luci-app-autoreboot luci-app-wizard luci-base luci-compat luci-lib-ipkg luci-lib-fs coremark wget-ssl curl htop nano zram-swap kmod-lib-zstd kmod-tcp-bbr bash openssh-sftp-server block-mount resolveip ds-lite swconfig \ - base-files \ - ca-bundle \ - dropbear \ @@ -46,28 +46,31 @@ DEFAULT_PACKAGES.router:=\ dnsmasq-full \ firewall \ @@ -55,13 +46,4 @@ + target_conf=$(subst .,_,$(subst -,_,$(subst /,_,$(1)))) ifeq ($(DUMP),) - PLATFORM_DIR:=$(TOPDIR)/target/linux/$(BOARD) -@@ -205,7 +208,7 @@ LINUX_RECONF_DIFF = $(SCRIPT_DIR)/kconfig.pl - '>' $(call __linux_confcmd,$(filt - ifeq ($(DUMP),1) - BuildTarget=$(BuildTargets/DumpCurrent) - -- CPU_CFLAGS = -Os -pipe -+ CPU_CFLAGS = -O2 -pipe - ifneq ($(findstring mips,$(ARCH)),) - ifneq ($(findstring mips64,$(ARCH)),) - CPU_TYPE ?= mips64 \ No newline at end of file + PLATFORM_DIR:=$(TOPDIR)/target/linux/$(BOARD) \ No newline at end of file diff --git a/devices/mediatek_mt7986/diy.sh b/devices/mediatek_mt7986/diy.sh index dcf6050b3a8d..14404507586d 100644 --- a/devices/mediatek_mt7986/diy.sh +++ b/devices/mediatek_mt7986/diy.sh @@ -6,7 +6,7 @@ SHELL_FOLDER=$(dirname $(readlink -f "$0")) rm -rf package/feeds/kiddin9/rtl* -rm -rf devices/common/patches/{glinet,imagebuilder.patch,iptables.patch,kernel-defaults.patch,targets.patch} +rm -rf devices/common/patches/{glinet,fix.patch,iptables.patch,kernel-defaults.patch,targets.patch} rm -rf toolchain/musl diff --git a/devices/mediatek_mt7986/patches/fix.patch b/devices/mediatek_mt7986/patches/fix.patch new file mode 100644 index 000000000000..eb8a9b6869dc --- /dev/null +++ b/devices/mediatek_mt7986/patches/fix.patch @@ -0,0 +1,31 @@ +--- a/scripts/json_overview_image_info.py ++++ b/scripts/json_overview_image_info.py +@@ -47,7 +47,7 @@ def get_initial_output(image_info): + + + if output: +- default_packages, output["arch_packages"] = run( ++ default_packages, output["arch_packages"], output["kernel_version"], output["initramfs"] = run( + [ + "make", + "--no-print-directory", +@@ -55,6 +55,8 @@ def get_initial_output(image_info): + "target/linux/", + "val.DEFAULT_PACKAGES", + "val.ARCH_PACKAGES", ++ "val.LINUX_VERSION", ++ "val.KERNEL_INITRAMFS", + ], + stdout=PIPE, + stderr=PIPE, + +--- a/rules.mk ++++ b/rules.mk +@@ -59,6 +59,7 @@ _SINGLE=export MAKEFLAGS=$(space); + CFLAGS:= + ARCH:=$(subst i486,i386,$(subst i586,i386,$(subst i686,i386,$(call qstrip,$(CONFIG_ARCH))))) + ARCH_PACKAGES:=$(call qstrip,$(CONFIG_TARGET_ARCH_PACKAGES)) ++KERNEL_INITRAMFS:=$(call qstrip,$(CONFIG_TARGET_ROOTFS_INITRAMFS)) + BOARD:=$(call qstrip,$(CONFIG_TARGET_BOARD)) + SUBTARGET:=$(call qstrip,$(CONFIG_TARGET_SUBTARGET)) + TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION)) diff --git a/devices/mediatek_mt7986/patches/imagebuilder.patch b/devices/mediatek_mt7986/patches/imagebuilder.patch deleted file mode 100644 index 2aaed7a0f32d..000000000000 --- a/devices/mediatek_mt7986/patches/imagebuilder.patch +++ /dev/null @@ -1,122 +0,0 @@ ---- a/target/imagebuilder/Makefile -+++ b/target/imagebuilder/Makefile -@@ -38,13 +38,15 @@ $(BIN_DIR)/$(IB_NAME).tar.xz: clean - ./files/repositories.conf \ - $(TMP_DIR)/.targetinfo \ - $(TMP_DIR)/.packageinfo \ -- $(PKG_BUILD_DIR)/ -+ $(TOPDIR)/files \ -+ $(PKG_BUILD_DIR)/ || true - --ifeq ($(CONFIG_IB_STANDALONE),) - echo '## Remote package repositories' >> $(PKG_BUILD_DIR)/repositories.conf - $(call FeedSourcesAppend,$(PKG_BUILD_DIR)/repositories.conf) - $(VERSION_SED_SCRIPT) $(PKG_BUILD_DIR)/repositories.conf --endif -+ $(SED) 's/^src\/gz \(.*\) https.*top\/\(packages.*\)/src \1 file:\/\/www\/wwwroot\/op.supes.top\/\2/' $(PKG_BUILD_DIR)/repositories.conf -+ $(SED) 's/^src\/gz \(.*\) https.*top\/\(targets.*\)/src \1 file:\/\/www\/wwwroot\/op.supes.top\/releases\/\2/' $(PKG_BUILD_DIR)/repositories.conf -+ $(SED) 's/\/kiddin9//' $(PKG_BUILD_DIR)/repositories.conf - - $(INSTALL_DIR) $(PKG_BUILD_DIR)/packages - # create an empty package index so `opkg` doesn't report an error - ---- a/target/imagebuilder/files/Makefile -+++ b/target/imagebuilder/files/Makefile -@@ -115,17 +115,32 @@ BUILD_PACKAGES:=$(filter-out $(filter -%,$(BUILD_PACKAGES)) $(patsubst -%,%,$(fi - PACKAGES:= - - _call_image: staging_dir/host/.prereq-build -+ [ "$(DATE)" ] && DATE="$(DATE)" || DATE="`date +'%m.%d.%Y'`"; \ -+ mkdir -p $(USER_FILES)/etc/uci-defaults || true; \ -+ echo -e " \ -+ sed -i \"s/[0-9]\+.[0-9]\+.[0-9]\{4\}/$$DATE/\" /etc/openwrt_release \n \ -+ sed -i \"s/DISTRIB_ID=.*/DISTRIB_ID='$(PARTSIZE)'/\" /etc/openwrt_release \n \ -+ sed -i \"s/OpenWrt .* by/OpenWrt $$DATE by/\" /etc/banner \n \ -+ echo \"$$DATE\" >/etc/openwrt_version \n \ -+ "> $(USER_FILES)/etc/uci-defaults/99-version; \ - echo 'Building images for $(BOARD)$(if $($(USER_PROFILE)_NAME), - $($(USER_PROFILE)_NAME))' - echo 'Packages: $(BUILD_PACKAGES)' - echo - rm -rf $(TARGET_DIR) $(TARGET_DIR_ORIG) - mkdir -p $(TARGET_DIR) $(BIN_DIR) $(TMP_DIR) $(DL_DIR) -+ if [[ "$(USER_PROFILE)" =~ (DEVICE_phicomm_k2p|DEVICE_asus_rt-n56u-b1|DEVICE_thunder_timecloud|DEVICE_youku_yk-l2|DEVICE_youhua_wr1200js|DEVICE_oraybox_x3a|DEVICE_netgear_wndr3700-v5|DEVICE_xiaomi_mi-router-4a-gigabit|DEVICE_xiaomi_mi-router-3g-v2|DEVICE_jcg_y2|DEVICE_glinet_gl-mt300a|DEVICE_glinet_gl-mt750|DEVICE_hiwifi_hc5661|DEVICE_hiwifi_hc5761|DEVICE_hiwifi_hc5861|DEVICE_lenovo_newifi-y1|DEVICE_lenovo_newifi-y1s|DEVICE_xiaomi_miwifi-mini|DEVICE_youku_yk-l1c|DEVICE_jdcloud_luban) || "$(TARGETID)" == "ramips/mt76x8" ]]; then \ -+ echo "src/gz openwrt_smflash https://op.supes.top/packages/mipsel_24kc/small_flash" >>$(TOPDIR)/repositories.conf; \ -+ else \ -+ sed -i "/smflash/d" $(TOPDIR)/repositories.conf; \ -+ fi - $(MAKE) package_reload - $(MAKE) package_install - $(MAKE) -s prepare_rootfs - $(MAKE) -s build_image - $(MAKE) -s json_overview_image_info - $(MAKE) -s checksum -+ rm -rf $(KERNEL_BUILD_DIR)/tmp -+ rm -rf $(KERNEL_BUILD_DIR)/root.* - - _call_manifest: FORCE - rm -rf $(TARGET_DIR) -@@ -166,7 +181,14 @@ package_install: FORCE - @echo Installing packages... - $(OPKG) install $(firstword $(wildcard $(LINUX_DIR)/libc_*.ipk $(PACKAGE_DIR)/libc_*.ipk)) - $(OPKG) install $(firstword $(wildcard $(LINUX_DIR)/kernel_*.ipk $(PACKAGE_DIR)/kernel_*.ipk)) -- $(OPKG) install $(BUILD_PACKAGES) -+ for p in $(BUILD_PACKAGES); do \ -+ if [[ $$p == luci-app-* && "`$(OPKG) list | grep luci-i18n-\`echo $$p | cut -d - -f 3-\`-zh-cn`" ]]; then \ -+ packages+="luci-i18n-`echo $$p | cut -d - -f 3-`-zh-cn "; \ -+ fi \ -+ done; \ -+ $(OPKG) install --force-overwrite --force-checksum --force-depends $(BUILD_PACKAGES) luci-i18n-base-zh-cn luci-i18n-base-en; \ -+ $(OPKG) install $$packages || true -+ $(OPKG) install --force-overwrite --force-checksum --force-depends --force-maintainer --force-reinstall my-default-settings - - prepare_rootfs: FORCE - @echo -@@ -180,12 +202,15 @@ prepare_rootfs: FORCE - ) \ - ) - $(call prepare_rootfs,$(TARGET_DIR),$(USER_FILES),$(DISABLED_SERVICES)) -+ if [[ "$(USER_PROFILE)" =~ (DEVICE_phicomm_k2p|DEVICE_asus_rt-n56u-b1|DEVICE_thunder_timecloud|DEVICE_youku_yk-l2|DEVICE_youhua_wr1200js|DEVICE_oraybox_x3a|DEVICE_netgear_wndr3700-v5|DEVICE_xiaomi_mi-router-4a-gigabit|DEVICE_xiaomi_mi-router-3g-v2|DEVICE_jcg_y2|DEVICE_glinet_gl-mt300a|DEVICE_glinet_gl-mt750|DEVICE_hiwifi_hc5661|DEVICE_hiwifi_hc5761|DEVICE_hiwifi_hc5861|DEVICE_lenovo_newifi-y1|DEVICE_lenovo_newifi-y1s|DEVICE_xiaomi_miwifi-mini|DEVICE_youku_yk-l1c|DEVICE_jdcloud_luban) || "$(TARGETID)" == "ramips/mt76x8" ]]; then \ -+ echo "src/gz openwrt_smflash https://op.supes.top/packages/mipsel_24kc/small_flash" >>$(BUILD_DIR)/root-ramips/etc/opkg/distfeeds.conf; \ -+ fi - - build_image: FORCE - @echo - @echo Building images... - rm -rf $(BUILD_DIR)/json_info_files/ -- $(NO_TRACE_MAKE) -C target/linux/$(BOARD)/image install TARGET_BUILD=1 IB=1 EXTRA_IMAGE_NAME="$(EXTRA_IMAGE_NAME)" \ -+ nice -n 19 $(NO_TRACE_MAKE) -C target/linux/$(BOARD)/image install TARGET_BUILD=1 IB=1 EXTRA_IMAGE_NAME="$(EXTRA_IMAGE_NAME)" \ - $(if $(USER_PROFILE),PROFILE="$(USER_PROFILE)") - - $(BIN_DIR)/profiles.json: FORCE - ---- a/scripts/json_overview_image_info.py -+++ b/scripts/json_overview_image_info.py -@@ -47,7 +47,7 @@ def get_initial_output(image_info): - - - if output: -- default_packages, output["arch_packages"] = run( -+ default_packages, output["arch_packages"], output["kernel_version"], output["initramfs"] = run( - [ - "make", - "--no-print-directory", -@@ -55,6 +55,8 @@ def get_initial_output(image_info): - "target/linux/", - "val.DEFAULT_PACKAGES", - "val.ARCH_PACKAGES", -+ "val.LINUX_VERSION", -+ "val.KERNEL_INITRAMFS", - ], - stdout=PIPE, - stderr=PIPE, - ---- a/rules.mk -+++ b/rules.mk -@@ -59,6 +59,7 @@ _SINGLE=export MAKEFLAGS=$(space); - CFLAGS:= - ARCH:=$(subst i486,i386,$(subst i586,i386,$(subst i686,i386,$(call qstrip,$(CONFIG_ARCH))))) - ARCH_PACKAGES:=$(call qstrip,$(CONFIG_TARGET_ARCH_PACKAGES)) -+KERNEL_INITRAMFS:=$(call qstrip,$(CONFIG_TARGET_ROOTFS_INITRAMFS)) - BOARD:=$(call qstrip,$(CONFIG_TARGET_BOARD)) - SUBTARGET:=$(call qstrip,$(CONFIG_TARGET_SUBTARGET)) - TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION)) diff --git a/devices/mediatek_mt7986/patches/iptables-mod-socket.patch b/devices/mediatek_mt7986/patches/iptables-mod-socket.patch new file mode 100644 index 000000000000..0398c93b6a6c --- /dev/null +++ b/devices/mediatek_mt7986/patches/iptables-mod-socket.patch @@ -0,0 +1,40 @@ +--- a/package/network/utils/iptables/Makefile ++++ b/package/network/utils/iptables/Makefile +@@ -388,6 +388,19 @@ iptables extension for triggering a LED. + + endef + ++define Package/iptables-mod-socket ++$(call Package/iptables/Module, +kmod-ipt-socket) ++ TITLE:=Socket match iptables extensions ++endef ++ ++define Package/iptables-mod-socket/description ++Socket match iptables extensions. ++ ++ Matches: ++ - socket ++ ++endef ++ + define Package/iptables-mod-tproxy + $(call Package/iptables/Module, +kmod-ipt-tproxy) + TITLE:=Transparent proxy iptables extensions +@@ -396,9 +409,6 @@ endef + define Package/iptables-mod-tproxy/description + Transparent proxy iptables extensions. + +- Matches: +- - socket +- + Targets: + - TPROXY + +@@ -721,6 +731,7 @@ $(eval $(call BuildPlugin,iptables-mod-ulog,$(IPT_ULOG-m))) + $(eval $(call BuildPlugin,iptables-mod-hashlimit,$(IPT_HASHLIMIT-m))) + $(eval $(call BuildPlugin,iptables-mod-rpfilter,$(IPT_RPFILTER-m))) + $(eval $(call BuildPlugin,iptables-mod-led,$(IPT_LED-m))) ++$(eval $(call BuildPlugin,iptables-mod-socket,$(IPT_SOCKET-m))) + $(eval $(call BuildPlugin,iptables-mod-tproxy,$(IPT_TPROXY-m))) + $(eval $(call BuildPlugin,iptables-mod-tee,$(IPT_TEE-m))) + $(eval $(call BuildPlugin,iptables-mod-u32,$(IPT_U32-m))) \ No newline at end of file diff --git a/devices/mediatek_mt7986/patches/targets.patch b/devices/mediatek_mt7986/patches/targets.patch index 4025b23f3719..170f75f95f9d 100644 --- a/devices/mediatek_mt7986/patches/targets.patch +++ b/devices/mediatek_mt7986/patches/targets.patch @@ -1,14 +1,5 @@ --- a/include/target.mk +++ b/include/target.mk -@@ -10,7 +10,7 @@ __target_inc=1 - DEVICE_TYPE?=router - - # Default packages - the really basic set --DEFAULT_PACKAGES:=\ -+DEFAULT_PACKAGES:=luci-app-advanced luci-app-firewall luci-app-gpsysupgrade luci-app-opkg luci-app-upnp luci-app-autoreboot luci-app-wizard luci-base luci-compat luci-lib-ipkg luci-lib-fs coremark wget-ssl curl htop nano zram-swap kmod-lib-zstd kmod-tcp-bbr bash openssh-sftp-server block-mount resolveip ds-lite swconfig \ - base-files \ - ca-bundle \ - dropbear \ @@ -46,28 +46,31 @@ DEFAULT_PACKAGES.router:=\ dnsmasq-full \ firewall \ @@ -55,13 +46,4 @@ + target_conf=$(subst .,_,$(subst -,_,$(subst /,_,$(1)))) ifeq ($(DUMP),) - PLATFORM_DIR:=$(TOPDIR)/target/linux/$(BOARD) -@@ -205,7 +208,7 @@ LINUX_RECONF_DIFF = $(SCRIPT_DIR)/kconfig.pl - '>' $(call __linux_confcmd,$(filt - ifeq ($(DUMP),1) - BuildTarget=$(BuildTargets/DumpCurrent) - -- CPU_CFLAGS = -Os -pipe -+ CPU_CFLAGS = -O2 -pipe - ifneq ($(findstring mips,$(ARCH)),) - ifneq ($(findstring mips64,$(ARCH)),) - CPU_TYPE ?= mips64 \ No newline at end of file + PLATFORM_DIR:=$(TOPDIR)/target/linux/$(BOARD) \ No newline at end of file From 948a713df36f8be912b1f83379749fb92c75c7bf Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Fri, 27 Jan 2023 05:50:18 +0800 Subject: [PATCH 02/28] update --- .github/workflows/Openwrt-AutoBuild.yml | 4 +- README.md | 35 +- devices/armvirt_pcat/.config | 9 - devices/armvirt_pcat/diy.sh | 16 - .../target/linux/armvirt_pcat/image/Makefile | 36 - devices/armvirt_pcat/network | 64 - devices/armvirt_pcat/patches/fix.patch | 30 - devices/common/diy.sh | 2 +- devices/common/patches/imagebuilder.patch | 3 +- devices/ipq60xx_generic/.config | 4 +- devices/ipq60xx_generic/diy.sh | 42 +- .../ipq60xx_generic/diy/include/kernel-4.4 | 2 + .../ath11k-firmware/files/board-2.bin.IPQ6018 | Bin 0 -> 787208 bytes devices/ipq60xx_generic/feeds.conf | 4 - devices/ipq60xx_generic/patches/fix.patch | 133 +- .../patches/kernel-defaults.patch | 9 - .../ipq60xx_generic/patches/netsupport.patch | 75 - devices/ipq60xx_generic/patches/targets.patch | 34 - devices/ipq60xx_generic/settings.ini | 2 - devices/ramips_mt7620/.config | 1 + devices/ramips_mt7620/diy.sh | 3 + .../ramips_mt7620/patches/hiwifi_r33.patch | 2874 +++++++++++++++++ devices/rockchip_armv8/.config | 1 + devices/rockchip_armv8/diy.sh | 2 + onekey/build.sh | 159 - onekey/rebuild.sh | 126 - 26 files changed, 3026 insertions(+), 644 deletions(-) delete mode 100644 devices/armvirt_pcat/.config delete mode 100644 devices/armvirt_pcat/diy.sh delete mode 100644 devices/armvirt_pcat/diy/target/linux/armvirt_pcat/image/Makefile delete mode 100644 devices/armvirt_pcat/network delete mode 100644 devices/armvirt_pcat/patches/fix.patch create mode 100644 devices/ipq60xx_generic/diy/include/kernel-4.4 create mode 100644 devices/ipq60xx_generic/diy/package/firmware/ath11k-firmware/files/board-2.bin.IPQ6018 delete mode 100644 devices/ipq60xx_generic/feeds.conf delete mode 100644 devices/ipq60xx_generic/patches/kernel-defaults.patch delete mode 100644 devices/ipq60xx_generic/patches/netsupport.patch delete mode 100644 devices/ipq60xx_generic/patches/targets.patch delete mode 100644 devices/ipq60xx_generic/settings.ini create mode 100644 devices/ramips_mt7620/patches/hiwifi_r33.patch delete mode 100755 onekey/build.sh delete mode 100755 onekey/rebuild.sh diff --git a/.github/workflows/Openwrt-AutoBuild.yml b/.github/workflows/Openwrt-AutoBuild.yml index 8288a9b093db..959c2405def0 100644 --- a/.github/workflows/Openwrt-AutoBuild.yml +++ b/.github/workflows/Openwrt-AutoBuild.yml @@ -116,9 +116,9 @@ jobs: DEBIAN_FRONTEND: noninteractive run: | ( sudo -E apt-get -qq update - sudo -E apt-get -qq install build-essential clang flex g++ gawk gcc-multilib gettext python2.7 \ + sudo -E apt-get -qq install build-essential clang flex g++ gawk gcc-multilib gettext \ git libncurses5-dev libssl-dev python3-distutils rsync unzip zlib1g-dev swig libpython3-dev aria2 jq subversion qemu-utils ccache rename libelf-dev device-tree-compiler - sudo -E apt-get -qq purge azure-cli ghc* zulu* hhvm llvm* firefox powershell openjdk* dotnet* google* mysql* php* android* + sudo -E apt-get -qq purge azure-cli ghc* zulu* llvm* firefox powershell openjdk* dotnet* google* mysql* php* android* sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc sudo -E apt-get -qq autoremove --purge sudo -E apt-get -qq clean ) & diff --git a/README.md b/README.md index a0780aa44c04..1446750ac4ea 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ #### 一分钟在线编译定制专属固件: [supes.top](https://supes.top) #### 支持200+设备: -X86/64, 友善 NanoPi、R2S、R4S、R4SE、R5S、R2C、NEO3, 斐讯 N1、K2P、K3, 树莓派 4B、3B/3B+、2B, 电犀牛r68s、r66s, 香橙派 R1 Plus、R1 Plus LTS, 红米AX6, 小米AX3600, 小米AX9000, 红米AX6S/小米AX3200, 红米AC2100, 小米AC2100, 斐讯K3, 360V6, 玩客云, 极路由 HIWIFI HC5962(极路由4、B70)、HC5661A、HC5761A、HC5861B, 小米4, 小米 R3G, 小米 R3P, newifi-d2 (新路由3), 小娱XY-C5, 竞斗云2.0(P&W R619AC), GL.iNet GL-MT1300、GL-AX1800、GL-AXT1800、GL-microuter-N300、GL-MT300N V2, 小米CR660X(CR6606/CR6608/CR6609), 小米4A千兆版, 小米 R3G-v2, 小米青春版Nano, 迅雷下载宝 timecloud, 优酷 yk-l2, 有华 wr1200js, 向日葵 X3A, 华硕 ASUS RT-ACRH17、RT-AC58u/RT-ACRH13、RT-ac85p、RT-n56u-b1、RT-AC88U、RT-AC1200、RT-AC1200 V2, 网件 NETGEAR R6220、R6260、R6120、R6700-v2、R6800、R6850、R6900-v2、R7450、wndr3700-v5, H1 Box, 贝壳云P1, 我家云lL Pro, x96 Max, 微加云V-Plus, 章鱼星球ZYXQ, GT-King, Odroid N2, MXQ Pro+, 京东无线宝JDCloud RE-SP-01B, Linksys WRT1200AC、WRT1900AC v1、WRT1900AC v2、WRT3200ACM、WRT1900ACS v1、WRT1900ACS v2、WRT32X、EA7500 v2 等 +X86/64, 友善 NanoPi、R2S、R4S、R4SE、R5S、R2C、R5C、R6S、NEO3, 斐讯 N1、K2P、K3, 树莓派 4B、3B/3B+、2B, 电犀牛r68s、r66s, 香橙派 R1 Plus、R1 Plus LTS, 红米AX6, 小米AX3600, 小米AX9000, 红米AX6000, 红米AX6S/小米AX3200, 红米AC2100, 小米AC2100, 斐讯K3, 360V6, 玩客云, 极路由 HIWIFI HC5962(极路由4、B70)、HC5661A、HC5761A、HC5861B, 小米4, 小米 R3G, 小米 R3P, newifi-d2 (新路由3), 小娱XY-C5, 竞斗云2.0(P&W R619AC), GL.iNet GL-MT1300、GL-AX1800、GL-AXT1800、GL-microuter-N300、GL-MT300N V2, 小米CR660X(CR6606/CR6608/CR6609), 小米4A千兆版, 小米 R3G-v2, 小米青春版Nano, 迅雷下载宝 timecloud, 优酷 yk-l2, 有华 wr1200js, 向日葵 X3A, 华硕 ASUS RT-ACRH17、RT-AC58u/RT-ACRH13、RT-ac85p、RT-n56u-b1、RT-AC88U、RT-AC1200、RT-AC1200 V2, 网件 NETGEAR R6220、R6260、R6120、R6700-v2、R6800、R6850、R6900-v2、R7450、wndr3700-v5, H1 Box, 贝壳云P1, 我家云lL Pro, x96 Max, 微加云V-Plus, 章鱼星球ZYXQ, GT-King, Odroid N2, MXQ Pro+, 京东无线宝JDCloud RE-SP-01B, Linksys WRT1200AC、WRT1900AC v1、WRT1900AC v2、WRT3200ACM、WRT1900ACS v1、WRT1900ACS v2、WRT32X、EA7500 v2 等 [1]: https://img.shields.io/badge/license-GPLV2-brightgreen.svg [2]: /LICENSE @@ -31,22 +31,18 @@ X86/64, 友善 NanoPi、R2S、R4S、R4SE、R5S、R2C、NEO3, 斐讯 N1、K2P、K + 自建插件仓库囊括了市面上几乎所有开源插件,插件库日更,系统自动更新所有已安装插件. -+ 通过[supes.top](https://supes.top)在线定制专属固件, 无需任何专业知识, 一分钟生成. 同时支持github云编译和本地一键编译. ++ 通过[supes.top](https://supes.top)在线定制专属固件, 无需任何专业知识, 一分钟生成. 同时支持github云编译. + 后台一键OTA更新固件,省去了每次固件升级都需要找固件,下载固件,上传固件等繁琐操作. + 后台一键设置旁路由,一键开关IPv6. -+ 支持在线安装Kmod内核模块. - -+ 重构版SSR-PLUS,国内外智能DNS解析,支持DOH,Trojan-Go等 ++ 支持在线安装全部Kmod内核模块. + 替换 Uhttpd 为 Nginx, 支持 反向代理; WebDAV等诸多玩法. + 性能,友好度,易用性,插件,以及针对国内特殊环境等的自定义优化, 开箱即用 -+ 自定制清爽Material风格新主题Edge - ## 2. **固件** 固件生成有3种方式:在线定制化生成、GitHub编译、本地化编译。 @@ -67,31 +63,6 @@ X86/64, 友善 NanoPi、R2S、R4S、R4SE、R5S、R2C、NEO3, 斐讯 N1、K2P、K ### 2.3 **GitHub结合浏览器插件编译** 请在支持油猴的浏览器中安装 [脚本](https://greasyfork.org/scripts/407616-github-actions-trigger/code/Github%20Actions%20Trigger.user.js) ,仓库右上角会出现 x86_64 Actions,K2P Actions等按钮,点击对应按钮即可.更多玩法 [repo-dispatcher](https://github.com/tete1030/github-repo-dispatcher) -### 2.4 **本地化编译** - -#### 注意: - -1. **不**要用 **root** 用户 git 和编译!!! - -2. 国内用户编译前请准备好梯子,使用大陆白名单或全局模式 - -3. 请使用Ubuntu 64bit,推荐 Ubuntu 18 或 Ubuntu 20 - -#### 首次编译: - -``` -screen -S openwrt -bash -c "$(curl -fsSL https://git.io/opbuild.sh)" -``` - -#### 二次编译: - -``` -screen -S openwrt -bash -c "$(curl -fsSL https://git.io/rebuild.sh)" -``` - - ## 3. **使用** ### 3.1 **后台** diff --git a/devices/armvirt_pcat/.config b/devices/armvirt_pcat/.config deleted file mode 100644 index 04bb9979830a..000000000000 --- a/devices/armvirt_pcat/.config +++ /dev/null @@ -1,9 +0,0 @@ -CONFIG_TARGET_armvirt_pcat=y -CONFIG_TARGET_armvirt_pcat_64=y -CONFIG_TARGET_armvirt_pcat_64_Default=y -CONFIG_TARGET_ROOTFS_EXT4FS=y - -CONFIG_PACKAGE_luci-ssl=n # uhttpd服务 -CONFIG_PACKAGE_luci-ssl-nginx=y # nginx - - diff --git a/devices/armvirt_pcat/diy.sh b/devices/armvirt_pcat/diy.sh deleted file mode 100644 index 3ae1a03da733..000000000000 --- a/devices/armvirt_pcat/diy.sh +++ /dev/null @@ -1,16 +0,0 @@ - - -SHELL_FOLDER=$(dirname $(readlink -f "$0")) - -mv -f target/linux/armvirt target/linux/armvirt_pcat - -#svn co https://github.com/photonicat/rockchip_rk3568_openwrt_packages/trunk/utils/pcat-manager feeds/packages/utils/pcat-manager -#ln -sf $SHELL_FOLDER/../../feeds/packages/utils/pcat-manager package/feeds/packages/pcat-manager - - -svn co https://github.com/photonicat/rockchip_rk3568_openwrt/trunk/files files - -mv -f $SHELL_FOLDER/network files/etc/config/ - - - diff --git a/devices/armvirt_pcat/diy/target/linux/armvirt_pcat/image/Makefile b/devices/armvirt_pcat/diy/target/linux/armvirt_pcat/image/Makefile deleted file mode 100644 index 0c09275c658b..000000000000 --- a/devices/armvirt_pcat/diy/target/linux/armvirt_pcat/image/Makefile +++ /dev/null @@ -1,36 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2012-2019 OpenWrt.org -# Copyright (C) 2016-2017 LEDE project - -include $(TOPDIR)/rules.mk -include $(INCLUDE_DIR)/image.mk - -define Build/Compile - $(CP) $(LINUX_DIR)/COPYING $(KDIR)/COPYING.linux -endef - -### Devices ### -define Device/Default - KERNEL := kernel-bin -endef - -define Device/photonicat - DEVICE_VENDOR := 光影猫 - DEVICE_MODEL := Photonicat - SOC := RK3568 - DEVICE_PACKAGES := pcat-manager -endef -TARGET_DEVICES += photonicat - -define Image/Build - export IMG_PREFIX="$(IMG_PREFIX)$(if $(PROFILE_SANITIZED),-$(PROFILE_SANITIZED))"; \ - export BIN_DIR=$(BIN_DIR); \ - export TOPDIR=$(TOPDIR); \ - export PARTSIZE=$(CONFIG_TARGET_ROOTFS_PARTSIZE); \ - cd /www/wwwroot/op.supes.top/bcache/armvirt/64/rk3568-linux-sdk; \ - export CROSS_COMPILE=aarch64-linux-gnu-;\ - bash ./build.sh -endef - -$(eval $(call BuildImage)) diff --git a/devices/armvirt_pcat/network b/devices/armvirt_pcat/network deleted file mode 100644 index ec548943019b..000000000000 --- a/devices/armvirt_pcat/network +++ /dev/null @@ -1,64 +0,0 @@ - -config interface 'loopback' - option ifname 'lo' - option proto 'static' - option ipaddr '127.0.0.1' - option netmask '255.0.0.0' - -config globals 'globals' - option ula_prefix 'fd1e:7270:ea04::/48' - -config interface 'lan' - option proto 'static' - option netmask '255.255.248.0' - option ip6assign '60' - option ipaddr '10.0.0.1' - option device 'br-lan' - -config interface 'wan' - option ifname 'eth0' - option proto 'dhcp' - option metric '1' - -config interface 'wan6' - option ifname 'eth0' - option proto 'dhcpv6' - option metric '2' - -config interface 'VPN' - option ifname 'ipsec0' - option proto 'static' - option ipaddr '10.10.10.1' - option netmask '255.255.255.0' - -config interface 'vpn0' - option ifname 'tun0' - option proto 'none' - -config interface 'wwan_5g' - option proto 'dhcp' - option ifname 'usb0' - option metric '10' - option auto '0' - -config interface 'wwan_5g_v6' - option proto 'dhcpv6' - option ifname 'usb0' - option metric '11' - option auto '0' - -config interface 'wwan_lte' - option proto 'dhcp' - option ifname 'wwan0' - option metric '12' - -config interface 'wwan_lte_v6' - option proto 'dhcpv6' - option ifname 'wwan0' - option metric '13' - -config device - option name 'br-lan' - option type 'bridge' - list ports 'eth1' - diff --git a/devices/armvirt_pcat/patches/fix.patch b/devices/armvirt_pcat/patches/fix.patch deleted file mode 100644 index 6d7ba8fb1b4a..000000000000 --- a/devices/armvirt_pcat/patches/fix.patch +++ /dev/null @@ -1,30 +0,0 @@ ---- a/target/linux/armvirt_pcat/Makefile -+++ b/target/linux/armvirt_pcat/Makefile -@@ -4,15 +4,15 @@ - - include $(TOPDIR)/rules.mk - --BOARD:=armvirt -+BOARD:=armvirt_pcat - BOARDNAME:=QEMU ARM Virtual Machine - FEATURES:=fpu pci rtc usb --FEATURES+=cpiogz ext4 ramdisk squashfs targz -+FEATURES+=cpiogz ext4 ramdisk squashfs targz boot-part rootfs-part - - KERNEL_PATCHVER:=5.10 - - include $(INCLUDE_DIR)/target.mk - --DEFAULT_PACKAGES += mkf2fs e2fsprogs -+DEFAULT_PACKAGES += mkf2fs e2fsprogs blkid -luci-app-gpsysupgrade - - $(eval $(call BuildTarget)) - ---- a/target/imagebuilder/files/Makefile -+++ b/target/imagebuilder/files/Makefile -@@ -141,5 +141,4 @@ - $(MAKE) -s checksum - rm -rf $(KERNEL_BUILD_DIR)/tmp -- rm -rf $(KERNEL_BUILD_DIR)/root.* - - _call_manifest: FORCE diff --git a/devices/common/diy.sh b/devices/common/diy.sh index d7fc8fc7b320..f51037900ef1 100644 --- a/devices/common/diy.sh +++ b/devices/common/diy.sh @@ -30,7 +30,7 @@ while [ "$status" == "in_progress" ];do status=$(curl -H "Authorization: token $REPO_TOKEN" -s "https://api.github.com/repos/kiddin9/openwrt-packages/actions/runs" | jq -r '.workflow_runs[0].status') done -mv -f feeds/kiddin9/{r81*,igb-intel} tmp/ +mv -f feeds/kiddin9/r81* tmp/ sed -i "s/192.168.1/10.0.0/" package/feeds/kiddin9/base-files/files/bin/config_generate sed -i "s/192.168.1/10.0.0/" package/base-files/files/bin/config_generate diff --git a/devices/common/patches/imagebuilder.patch b/devices/common/patches/imagebuilder.patch index ade6db412cb8..360e28509aae 100644 --- a/devices/common/patches/imagebuilder.patch +++ b/devices/common/patches/imagebuilder.patch @@ -1,6 +1,6 @@ --- a/target/imagebuilder/Makefile +++ b/target/imagebuilder/Makefile -@@ -38,13 +38,15 @@ $(BIN_DIR)/$(IB_NAME).tar.xz: clean +@@ -38,13 +38,16 @@ $(BIN_DIR)/$(IB_NAME).tar.xz: clean ./files/repositories.conf \ $(TMP_DIR)/.targetinfo \ $(TMP_DIR)/.packageinfo \ @@ -16,6 +16,7 @@ + $(SED) 's/^src\/gz \(.*\) https.*top\/\(packages.*\)/src \1 file:\/\/www\/wwwroot\/op.supes.top\/\2/' $(PKG_BUILD_DIR)/repositories.conf + $(SED) 's/^src\/gz \(.*\) https.*top\/\(targets.*\)/src \1 file:\/\/www\/wwwroot\/op.supes.top\/releases\/\2/' $(PKG_BUILD_DIR)/repositories.conf + $(SED) 's/\/kiddin9//' $(PKG_BUILD_DIR)/repositories.conf ++ $(SED) '/openwrt_core/d' $(PKG_BUILD_DIR)/repositories.conf $(INSTALL_DIR) $(PKG_BUILD_DIR)/packages # create an empty package index so `opkg` doesn't report an error diff --git a/devices/ipq60xx_generic/.config b/devices/ipq60xx_generic/.config index f979b00ba5f3..17d2b474bf68 100644 --- a/devices/ipq60xx_generic/.config +++ b/devices/ipq60xx_generic/.config @@ -8,6 +8,7 @@ CONFIG_TARGET_DEVICE_ipq60xx_generic_DEVICE_glinet_gl-axt1800=n CONFIG_PACKAGE_dockerd=n +CONFIG_GCC_USE_VERSION_7=y CONFIG_PACKAGE_kmod-dm-raid=n CONFIG_PACKAGE_kmod-dm=n CONFIG_PACKAGE_kmod-fs-xfs=n @@ -54,9 +55,8 @@ CONFIG_PACKAGE_kmod-rtl8812au-ct=n CONFIG_PACKAGE_kmod-rtl8821cu=n CONFIG_PACKAGE_kmod-rtl88x2bu=n -CONFIG_PACKAGE_wpad-basic-wolfssl=n -CONFIG_PACKAGE_wpad-openssl=y +CONFIG_SECCOMP=n CONFIG_PACKAGE_luci-ssl=y # uhttpd服务 diff --git a/devices/ipq60xx_generic/diy.sh b/devices/ipq60xx_generic/diy.sh index b31dc170fa4e..5bb042fac7f3 100644 --- a/devices/ipq60xx_generic/diy.sh +++ b/devices/ipq60xx_generic/diy.sh @@ -1,17 +1,41 @@ #!/bin/bash shopt -s extglob -rm -rf package/system/opkg && mv -f feeds/kiddin9/opkg package/system/ -rm -rf feeds/kiddin9/{rtl*,nft-fullcone,shortcut-fe,fullconenat} package/kernel/mt76 toolchain/musl package/feeds/packages/{jool,xtables-addons,openvswitch} - -rm -rf target/imagebuilder -svn co https://github.com/openwrt/openwrt/branches/openwrt-22.03/target/imagebuilder target/imagebuilder -sed -i "/libfakeroot/d" target/imagebuilder/Makefile - -svn co https://github.com/openwrt/openwrt/branches/openwrt-22.03/toolchain/musl toolchain/musl +rm -rf package/boot/uboot-envtools package/kernel package/firmware/ath11k* package/qca target/linux/generic target/linux/ipq60xx package/network/config/netifd feeds/kiddin9/fullconenat toolchain tools/squashfskit4 +svn export --force https://github.com/coolsnowwolf/openwrt-gl-ax1800/trunk/package/boot/uboot-envtools package/boot/uboot-envtools +svn export --force https://github.com/coolsnowwolf/openwrt-gl-ax1800/trunk/package/firmware/ath11k-firmware package/firmware/ath11k-firmware +svn export --force https://github.com/coolsnowwolf/openwrt-gl-ax1800/trunk/package/qca package/qca +svn co https://github.com/coolsnowwolf/openwrt-gl-ax1800/trunk/target/linux/generic target/linux/generic +svn co https://github.com/coolsnowwolf/openwrt-gl-ax1800/trunk/target/linux/ipq60xx target/linux/ipq60xx +wget -P dl/ https://github.com/coolsnowwolf/openwrt-gl-ax1800/raw/master/dl/linux-4.4.60.tar.xz +svn co https://github.com/coolsnowwolf/openwrt-gl-ax1800/trunk/package/kernel package/kernel svn co https://github.com/coolsnowwolf/openwrt-gl-ax1800/trunk/package/network/services/fullconenat feeds/kiddin9/fullconenat +svn co https://github.com/coolsnowwolf/openwrt-gl-ax1800/trunk/package/network/config/netifd package/network/config/netifd +svn co https://github.com/coolsnowwolf/openwrt-gl-ax1800/trunk/toolchain toolchain +svn co https://github.com/coolsnowwolf/openwrt-gl-ax1800/trunk/tools/squashfskit4 tools/squashfskit4 +rm -rf target/linux/generic/files +rm -rf package/network/config/netifd/patches -rm -rf devices/common/patches/{targets.patch,kernel-defaults.patch,fix.patch,iptables.patch,disable_flock.patch} +curl -sfL https://raw.githubusercontent.com/coolsnowwolf/openwrt-gl-ax1800/master/include/netfilter.mk -o include/netfilter.mk +curl -sfL https://raw.githubusercontent.com/coolsnowwolf/openwrt-gl-ax1800/master/include/quilt.mk -o include/quilt.mk + +rm -rf toolchain/.svn +rm -rf feeds/kiddin9/{rtl*,nft-fullcone,shortcut-fe,netifd} package/kernel/mt76 toolchain/musl package/feeds/packages/{xtables-addons,openvswitch} +svn co https://github.com/openwrt/openwrt/branches/openwrt-22.03/toolchain/musl toolchain/musl +svn co https://github.com/openwrt/openwrt/branches/openwrt-22.03/toolchain/glibc toolchain/glibc +sed -i "s/5.4.0/4.4.0/" toolchain/glibc/common.mk +echo ' +CONFIG_PNP_DEBUG_MESSAGES=y +CONFIG_PINCTRL_BAYTRAIL=n +CONFIG_PINCTRL_CHERRYVIEW=n +CONFIG_PINCTRL_BROXTON=n +CONFIG_PINCTRL_SUNRISEPOINT=n +CONFIG_PINCTRL_QDF2XXX=n +CONFIG_GPIO_AMDPT=n +CONFIG_PCC=n +CONFIG_PMIC_OPREGION=n +CCONFIG_RYPTO_CRC32_ARM64=n +' >> ./target/linux/ipq60xx/config-4.4 diff --git a/devices/ipq60xx_generic/diy/include/kernel-4.4 b/devices/ipq60xx_generic/diy/include/kernel-4.4 new file mode 100644 index 000000000000..3c26f837e980 --- /dev/null +++ b/devices/ipq60xx_generic/diy/include/kernel-4.4 @@ -0,0 +1,2 @@ +LINUX_VERSION-4.4 = .60 +LINUX_KERNEL_HASH-4.4.60 = 10f619f7f9ab9f2776d0e34d37138b1ca14e9a026b91790dbdb1eb6c8d15edc6 diff --git a/devices/ipq60xx_generic/diy/package/firmware/ath11k-firmware/files/board-2.bin.IPQ6018 b/devices/ipq60xx_generic/diy/package/firmware/ath11k-firmware/files/board-2.bin.IPQ6018 new file mode 100644 index 0000000000000000000000000000000000000000..cf26728896d4d3929173f0e5ac467c420a07bf18 GIT binary patch literal 787208 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

Nz~87J~|iY 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

`m)m7oW`y{n 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 z + --- a/target/linux/ipq60xx/image/Makefile +++ b/target/linux/ipq60xx/image/Makefile @@ -104,7 +104,7 @@ define Device/qihoo_v6 @@ -20,36 +119,4 @@ + DEVICE_TITLE := Qihoo 360 V6 DEVICE_PACKAGES := ath11k-wifi-qihoo-v6 kmod-usb3 kmod-usb-phy-msm endef - TARGET_DEVICES += qihoo_v6 - ---- a/scripts/json_overview_image_info.py -+++ b/scripts/json_overview_image_info.py -@@ -33,7 +33,7 @@ - ) - - if output: -- default_packages, output["arch_packages"] = run( -+ default_packages, output["arch_packages"], output["kernel_version"], output["initramfs"] = run( - [ - "make", - "--no-print-directory", -@@ -41,6 +41,8 @@ - "target/linux/{}".format(output['target'].split('/')[0]), - "val.DEFAULT_PACKAGES", - "val.ARCH_PACKAGES", -+ "val.LINUX_VERSION", -+ "val.KERNEL_INITRAMFS", - ], - stdout=PIPE, - stderr=PIPE, - ---- a/rules.mk -+++ b/rules.mk -@@ -62,6 +62,7 @@ _SINGLE=export MAKEFLAGS=$(space); - CFLAGS:= - ARCH:=$(subst i486,i386,$(subst i586,i386,$(subst i686,i386,$(call qstrip,$(CONFIG_ARCH))))) - ARCH_PACKAGES:=$(call qstrip,$(CONFIG_TARGET_ARCH_PACKAGES)) -+KERNEL_INITRAMFS:=$(call qstrip,$(CONFIG_TARGET_ROOTFS_INITRAMFS)) - BOARD:=$(call qstrip,$(CONFIG_TARGET_BOARD)) - SUBTARGET:=$(call qstrip,$(CONFIG_TARGET_SUBTARGET)) - TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION)) \ No newline at end of file + TARGET_DEVICES += qihoo_v6 \ No newline at end of file diff --git a/devices/ipq60xx_generic/patches/kernel-defaults.patch b/devices/ipq60xx_generic/patches/kernel-defaults.patch deleted file mode 100644 index 01aeb0df9e2f..000000000000 --- a/devices/ipq60xx_generic/patches/kernel-defaults.patch +++ /dev/null @@ -1,9 +0,0 @@ ---- a/include/kernel-defaults.mk -+++ b/include/kernel-defaults.mk -@@ -114,6 +114,7 @@ endef - - define Kernel/CompileModules/Default - rm -f $(LINUX_DIR)/vmlinux $(LINUX_DIR)/System.map -+ +$(KERNEL_MAKE) olddefconfig - +$(KERNEL_MAKE) modules - endef \ No newline at end of file diff --git a/devices/ipq60xx_generic/patches/netsupport.patch b/devices/ipq60xx_generic/patches/netsupport.patch deleted file mode 100644 index e1bfaf2ade7b..000000000000 --- a/devices/ipq60xx_generic/patches/netsupport.patch +++ /dev/null @@ -1,75 +0,0 @@ -From cf41c52ab16429d9228213c97f22928cef270b23 Mon Sep 17 00:00:00 2001 -From: kiddin9 <48883331+kiddin9@users.noreply.github.com> -Date: Tue, 24 Jan 2023 22:45:08 +0800 -Subject: [PATCH] Update netsupport.mk - ---- - package/kernel/linux/modules/netsupport.mk | 58 ++++++++++++++++++++++ - 1 file changed, 58 insertions(+) - -diff --git a/package/kernel/linux/modules/netsupport.mk b/package/kernel/linux/modules/netsupport.mk -index 0851770e1d..6aff1519af 100644 ---- a/package/kernel/linux/modules/netsupport.mk -+++ b/package/kernel/linux/modules/netsupport.mk -@@ -1237,3 +1237,61 @@ define KernelPackage/macsec/description - endef - - $(eval $(call KernelPackage,macsec)) -+ -+ -+define KernelPackage/netlink-diag -+ SUBMENU:=$(NETWORK_SUPPORT_MENU) -+ TITLE:=Netlink diag support for ss utility -+ KCONFIG:=CONFIG_NETLINK_DIAG -+ FILES:=$(LINUX_DIR)/net/netlink/netlink_diag.ko -+ AUTOLOAD:=$(call AutoLoad,31,netlink-diag) -+endef -+ -+define KernelPackage/netlink-diag/description -+ Netlink diag is a module made for use with iproute2's ss utility -+endef -+ -+$(eval $(call KernelPackage,netlink-diag)) -+ -+ -+define KernelPackage/wireguard -+ SUBMENU:=$(NETWORK_SUPPORT_MENU) -+ TITLE:=WireGuard secure network tunnel -+ DEPENDS:= \ -+ +kmod-crypto-lib-chacha20poly1305 \ -+ +kmod-crypto-lib-curve25519 \ -+ +kmod-udptunnel4 \ -+ +IPV6:kmod-udptunnel6 -+ KCONFIG:= \ -+ CONFIG_WIREGUARD \ -+ CONFIG_WIREGUARD_DEBUG=n -+ FILES:=$(LINUX_DIR)/drivers/net/wireguard/wireguard.ko -+ AUTOLOAD:=$(call AutoProbe,wireguard) -+endef -+ -+define KernelPackage/wireguard/description -+ WireGuard is a novel VPN that runs inside the Linux Kernel and utilizes -+ state-of-the-art cryptography. It aims to be faster, simpler, leaner, and -+ more useful than IPSec, while avoiding the massive headache. It intends to -+ be considerably more performant than OpenVPN. WireGuard is designed as a -+ general purpose VPN for running on embedded interfaces and super computers -+ alike, fit for many different circumstances. It uses UDP. -+endef -+ -+$(eval $(call KernelPackage,wireguard)) -+ -+ -+define KernelPackage/netconsole -+ SUBMENU:=$(NETWORK_SUPPORT_MENU) -+ TITLE:=Network console logging support -+ KCONFIG:=CONFIG_NETCONSOLE \ -+ CONFIG_NETCONSOLE_DYNAMIC=n -+ FILES:=$(LINUX_DIR)/drivers/net/netconsole.ko -+ AUTOLOAD:=$(call AutoProbe,netconsole) -+endef -+ -+define KernelPackage/netconsole/description -+ Network console logging support. -+endef -+ -+$(eval $(call KernelPackage,netconsole)) diff --git a/devices/ipq60xx_generic/patches/targets.patch b/devices/ipq60xx_generic/patches/targets.patch deleted file mode 100644 index c5720d68f4a7..000000000000 --- a/devices/ipq60xx_generic/patches/targets.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- a/include/target.mk -+++ b/include/target.mk -@@ -17,7 +17,7 @@ DEFAULT_PACKAGES:=base-files libc libgcc busybox dropbear mtd uci opkg netifd fs - # For nas targets - DEFAULT_PACKAGES.nas:=block-mount fdisk lsblk mdadm - # For router targets --DEFAULT_PACKAGES.router:=dnsmasq-full iptables ip6tables ppp ppp-mod-pppoe firewall odhcpd-ipv6only odhcp6c luci luci-lib-ipkg -+DEFAULT_PACKAGES.router:=dnsmasq-full iptables ip6tables ppp ppp-mod-pppoe firewall odhcpd-ipv6only odhcp6c luci luci-lib-ipkg kmod-ipt-offload kmod-ipt-nat kmod-ipt-nat6 procd - DEFAULT_PACKAGES.bootloader:= - - ifneq ($(DUMP),) -@@ -55,6 +55,22 @@ ifneq ($(filter 4.9,$(KERNEL_PATCHVER)),) - DEFAULT_PACKAGES.router:=$(filter-out kmod-ipt-offload,$(DEFAULT_PACKAGES.router)) - endif - -+ifneq ($(CONFIG_SMALL_FLASH),) -+ DEFAULT_PACKAGES+=-coremark -htop -bash -openssh-sftp-server -+endif -+ -+ifeq ($(ARCH),arm) -+ DEFAULT_PACKAGES+=autocore-arm luci-app-cpufreq -+endif -+ -+ifeq ($(ARCH),aarch64) -+ DEFAULT_PACKAGES+=autocore-arm luci-app-cpufreq -+endif -+ -+ifneq ($(CONFIG_USB_SUPPORT),) -+ DEFAULT_PACKAGES+=automount -+endif -+ - # Add device specific packages (here below to allow device type set from subtarget) - DEFAULT_PACKAGES += $(DEFAULT_PACKAGES.$(DEVICE_TYPE)) - \ No newline at end of file diff --git a/devices/ipq60xx_generic/settings.ini b/devices/ipq60xx_generic/settings.ini deleted file mode 100644 index 72031043133b..000000000000 --- a/devices/ipq60xx_generic/settings.ini +++ /dev/null @@ -1,2 +0,0 @@ -REPO_URL="https://github.com/coolsnowwolf/openwrt-gl-ax1800" -REPO_BRANCH="master" diff --git a/devices/ramips_mt7620/.config b/devices/ramips_mt7620/.config index 0d738a4eb85b..f905becd9fe4 100644 --- a/devices/ramips_mt7620/.config +++ b/devices/ramips_mt7620/.config @@ -7,6 +7,7 @@ CONFIG_TARGET_DEVICE_ramips_mt7620_DEVICE_glinet_gl-mt750=y CONFIG_TARGET_DEVICE_ramips_mt7620_DEVICE_hiwifi_hc5661=y CONFIG_TARGET_DEVICE_ramips_mt7620_DEVICE_hiwifi_hc5761=y CONFIG_TARGET_DEVICE_ramips_mt7620_DEVICE_hiwifi_hc5861=y +CONFIG_TARGET_DEVICE_ramips_mt7620_DEVICE_hiwifi_r33=y CONFIG_TARGET_DEVICE_ramips_mt7620_DEVICE_lenovo_newifi-y1=y CONFIG_TARGET_DEVICE_ramips_mt7620_DEVICE_lenovo_newifi-y1s=y CONFIG_TARGET_DEVICE_ramips_mt7620_DEVICE_xiaomi_miwifi-mini=y diff --git a/devices/ramips_mt7620/diy.sh b/devices/ramips_mt7620/diy.sh index 291caaf55d57..3a2179853b1b 100644 --- a/devices/ramips_mt7620/diy.sh +++ b/devices/ramips_mt7620/diy.sh @@ -4,3 +4,6 @@ shopt -s extglob sh -c "curl -sfL https://github.com/openwrt/openwrt/commit/2e6d19ee32399e37c7545aefc57d41541a406d55.patch | patch -d './' -p1 --forward" || true + + + diff --git a/devices/ramips_mt7620/patches/hiwifi_r33.patch b/devices/ramips_mt7620/patches/hiwifi_r33.patch new file mode 100644 index 000000000000..2c4febb1daa3 --- /dev/null +++ b/devices/ramips_mt7620/patches/hiwifi_r33.patch @@ -0,0 +1,2874 @@ +From 1077f225d9906c04dd56b93e63900701beb92483 Mon Sep 17 00:00:00 2001 +From: zfdx123 <2915441170@qq.com> +Date: Thu, 26 Jan 2023 09:42:50 +0800 +Subject: [PATCH] ramips: MT7620 add Support HiWiFi R33(C312B B52) + +--- + .../generic/files/drivers/net/phy/rtl8367b.c | 11 + + .../linux/ramips/dts/mt7620a_hiwifi_r33.dts | 235 ++ + target/linux/ramips/image/mt7620.mk | 21 + + .../mt7620/base-files/etc/board.d/01_leds | 3 + + .../mt7620/base-files/etc/board.d/02_network | 13 + + .../etc/hotplug.d/ieee80211/10_fix_wifi_mac | 7 + + .../mt7620/base-files/lib/upgrade/platform.sh | 3 + + target/linux/ramips/mt7620/config-5.10 | 21 + + target/linux/ramips/mt7620/target.mk | 2 +- + ...38-mtd-ralink-add-mt7620-nand-driver.patch | 2373 +++++++++++++++++ + 10 files changed, 2688 insertions(+), 1 deletion(-) + create mode 100644 target/linux/ramips/dts/mt7620a_hiwifi_r33.dts + create mode 100644 target/linux/ramips/patches-5.10/0038-mtd-ralink-add-mt7620-nand-driver.patch + +diff --git a/target/linux/generic/files/drivers/net/phy/rtl8367b.c b/target/linux/generic/files/drivers/net/phy/rtl8367b.c +index 3599791a517bb..942cbd73b7205 100644 +--- a/target/linux/generic/files/drivers/net/phy/rtl8367b.c ++++ b/target/linux/generic/files/drivers/net/phy/rtl8367b.c +@@ -266,6 +266,8 @@ struct rtl8367b_initval { + #define RTL8367B_MIB_RXB_ID 0 /* IfInOctets */ + #define RTL8367B_MIB_TXB_ID 28 /* IfOutOctets */ + ++u32 rtl_device_id; ++ + static struct rtl8366_mib_counter + rtl8367b_mib_counters[RTL8367B_NUM_MIB_COUNTERS] = { + {0, 0, 4, "ifInOctets" }, +@@ -612,8 +614,14 @@ static int rtl8367b_write_initvals(struct rtl8366_smi *smi, + int err; + int i; + ++ if (rtl_device_id == 0x0020) { ++ return 0; ++ } ++ + for (i = 0; i < count; i++) ++ { + REG_WR(smi, initvals[i].reg, initvals[i].val); ++ } + + return 0; + } +@@ -1540,7 +1548,10 @@ static int rtl8367b_detect(struct rtl8366_smi *smi) + return ret; + } + ++ rtl_device_id = chip_ver; ++ + switch (chip_ver) { ++ case 0x0020: + case 0x1000: + chip_name = "8367RB"; + break; +diff --git a/target/linux/ramips/dts/mt7620a_hiwifi_r33.dts b/target/linux/ramips/dts/mt7620a_hiwifi_r33.dts +new file mode 100644 +index 0000000000000..09f5a84b773c5 +--- /dev/null ++++ b/target/linux/ramips/dts/mt7620a_hiwifi_r33.dts +@@ -0,0 +1,235 @@ ++#include "mt7620a.dtsi" ++ ++#include ++#include ++ ++/ { ++ compatible = "hiwifi,r33", "ralink,mt7620a-soc"; ++ model = "HiWiFi R33"; ++ ++ chosen { ++ bootargs = "console=ttyS0,115200"; ++ }; ++ ++ aliases { ++ led-boot = &led_system; ++ led-failsafe = &led_system; ++ led-running = &led_system; ++ led-upgrade = &led_system; ++ }; ++ ++ nand { ++ status = "okay"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ compatible = "mtk,mt7620-nand"; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "u-boot"; ++ reg = <0x0 0x80000>; ++ read-only; ++ }; ++ ++ partition@80000 { ++ label = "debug"; ++ reg = <0x80000 0x80000>; ++ read-only; ++ }; ++ ++ factory: partition@100000 { ++ label = "factory"; ++ reg = <0x100000 0x40000>; ++ read-only; ++ }; ++ ++ partition@140000 { ++ label = "kernel"; ++ reg = <0x140000 0x400000>; ++ }; ++ ++ ubiconcat0: partition@540000 { ++ label = "ubiconcat0"; ++ reg = <0x540000 0x1c80000>; ++ }; ++ ++ partition@21c0000 { ++ label = "bdinfo"; ++ reg = <0x21c0000 0x80000>; ++ read-only; ++ }; ++ ++ ubiconcat1: partition@2240000 { ++ label = "ubiconcat1"; ++ reg = <0x2240000 0x5d40000>; ++ }; ++ }; ++ }; ++ ++ ubi-concat { ++ compatible = "mtd-concat"; ++ devices = <&ubiconcat0 &ubiconcat1>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "ubi"; ++ reg = <0x0 0x79c0000>; ++ }; ++ }; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ wlan5g { ++ label = "blue:wlan5g"; ++ gpios = <&gpio0 7 GPIO_ACTIVE_LOW>; ++ linux,default-trigger = "phy0tpt"; ++ }; ++ ++ led_system: system { ++ label = "blue:system"; ++ gpios = <&gpio0 9 GPIO_ACTIVE_HIGH>; ++ }; ++ ++ turbo { ++ label = "blue:turbo"; ++ gpios = <&gpio0 10 GPIO_ACTIVE_HIGH>; ++ }; ++ ++ wlan2g { ++ label = "blue:wlan2g"; ++ gpios = <&gpio0 11 GPIO_ACTIVE_LOW>; ++ linux,default-trigger = "phy1tpt"; ++ }; ++ ++ internet { ++ label = "blue:internet"; ++ gpios = <&gpio3 0 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++ ++ keys { ++ compatible = "gpio-keys"; ++ ++ reset { ++ label = "reset"; ++ gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>; ++ linux,code = ; ++ }; ++ }; ++ ++ gpio_export { ++ compatible = "gpio-export"; ++ #size-cells = <0>; ++ ++ usbpower { ++ gpio-export,name = "usbpower"; ++ gpio-export,output = <0>; ++ gpios = <&gpio0 13 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++ ++ rtl8367rb { ++ compatible = "realtek,rtl8367b", "rtl8367b"; ++ cpu_port = <6>; ++ realtek,extif1 = <1 0 1 1 1 1 1 1 2>; ++ mii-bus = <&mdio0>; ++ }; ++}; ++ ++//在最新的openwrt master分支中sysc已经被剔除,此处进行备份标记 ++// &sysc { ++// ralink,gpiomux = "i2c", "jtag"; ++// ralink,uartmux = "gpio"; ++// ralink,wdtmux = <1>; ++// }; ++ ++&gpio3 { ++ status = "okay"; ++}; ++ ++&ehci { ++ status = "okay"; ++}; ++ ++&ohci { ++ status = "okay"; ++}; ++ ++&pcie { ++ status = "okay"; ++}; ++ ++ðernet { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&rgmii1_pins &rgmii2_pins &mdio_pins>; ++ ++ //mtd-mac-address = <&factory 0x4>; ++ ++ nvmem-cells = <&macaddr_factory_4>; ++ nvmem-cell-names = "mac-address"; ++ ++ port@5 { ++ status = "okay"; ++ mediatek,fixed-link = <1000 1 1 1>; ++ phy-handle = <&phy5>; ++ phy-mode = "rgmii"; ++ }; ++ ++ mdio0: mdio-bus { ++ status = "okay"; ++ ++ phy5: ethernet-phy@5 { ++ reg = <5>; ++ phy-mode = "rgmii"; ++ }; ++ }; ++}; ++ ++//5G WIFI ++&pcie0 { ++ wifi@0,0 { ++ compatible = "pci14c3,7662"; ++ reg = <0x0000 0 0 0 0>; ++ mediatek,mtd-eeprom = <&factory 0x8000>; ++ ieee80211-freq-limit = <5000000 6000000>; ++ // nvmem-cells = <&macaddr_factory_4>; ++ // nvmem-cell-names = "mac-address"; ++ // mac-address-increment = <2>; ++ }; ++}; ++ ++//2.4G WIFI ++&wmac { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pa_pins>; ++ ralink,mtd-eeprom = <&factory 0x0>; ++ // nvmem-cells = <&macaddr_factory_4>; ++ // nvmem-cell-names = "mac-address"; ++}; ++ ++&state_default { ++ gpio { ++ groups = "uartf", "wled"; ++ function = "gpio"; ++ }; ++}; ++ ++&factory { ++ compatible = "nvmem-cells"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ macaddr_factory_4: macaddr@4 { ++ reg = <0x4 0x6>; ++ }; ++}; +diff --git a/target/linux/ramips/image/mt7620.mk b/target/linux/ramips/image/mt7620.mk +index 445d3dec34238..c90b8d1f93d02 100644 +--- a/target/linux/ramips/image/mt7620.mk ++++ b/target/linux/ramips/image/mt7620.mk +@@ -1495,3 +1495,24 @@ define Device/zyxel_keenetic-viva + SUPPORTED_DEVICES += kng_rc + endef + TARGET_DEVICES += zyxel_keenetic-viva ++ ++define Device/hiwifi_r33 ++ SOC := mt7620a ++ DEVICE_VENDOR := HiWiFi ++ DEVICE_MODEL := R33 / 3Pro ++ DEVICE_PACKAGES := kmod-usb2 kmod-usb-ohci kmod-usb-ledtrig-usbport \ ++ kmod-switch-rtl8366-smi kmod-switch-rtl8367b kmod-mt76x2 ++ BLOCKSIZE := 128k ++ PAGESIZE := 2048 ++ KERNEL_SIZE := 4096k ++ UBINIZE_OPTS := -E 5 ++ IMAGE_SIZE := 32768k ++ IMAGES += kernel.bin rootfs.bin factory.bin ++ IMAGE/kernel.bin := append-kernel | check-size $$$$(KERNEL_SIZE) ++ IMAGE/rootfs.bin := append-ubi | check-size $$$$(IMAGE_SIZE) ++ IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata ++ IMAGE/factory.bin := append-kernel | pad-to $$(KERNEL_SIZE) | append-ubi | \ ++ check-size ++ SUPPORTED_DEVICES += r33 ++endef ++TARGET_DEVICES += hiwifi_r33 +diff --git a/target/linux/ramips/mt7620/base-files/etc/board.d/01_leds b/target/linux/ramips/mt7620/base-files/etc/board.d/01_leds +index 36e3045a38a82..5e221159eb80a 100644 +--- a/target/linux/ramips/mt7620/base-files/etc/board.d/01_leds ++++ b/target/linux/ramips/mt7620/base-files/etc/board.d/01_leds +@@ -126,6 +126,9 @@ hiwifi,hc5761) + hiwifi,hc5861) + ucidef_set_led_switch "internet" "internet" "blue:internet" "switch0" "0x20" + ;; ++hiwifi,r33) ++ ucidef_set_led_netdev "internet" "internet" "blue:internet" "eth0.2" "link tx rx" ++ ;; + hnet,c108) + ucidef_set_led_netdev "lan" "lan" "green:lan" "eth0" + ucidef_set_led_netdev "modem" "modem" "green:modem" "wwan0" +diff --git a/target/linux/ramips/mt7620/base-files/etc/board.d/02_network b/target/linux/ramips/mt7620/base-files/etc/board.d/02_network +index 424e3709969a1..cbba6c2029366 100644 +--- a/target/linux/ramips/mt7620/base-files/etc/board.d/02_network ++++ b/target/linux/ramips/mt7620/base-files/etc/board.d/02_network +@@ -175,6 +175,13 @@ ramips_setup_interfaces() + ucidef_add_switch "switch0" \ + "0:lan" "1:lan" "5:wan" "6@eth0" + ;; ++ hiwifi,r33) ++ ucidef_add_switch "switch0" \ ++ "1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "6@eth0" ++ ucidef_add_switch_attr "switch0" "enable" "false" ++ ucidef_add_switch "switch1" \ ++ "1:lan" "2:lan" "0:wan" "6@eth0" ++ ;; + iodata,wn-ac1167gr|\ + iodata,wn-ac733gr3|\ + iptime,a1004ns) +@@ -350,6 +357,12 @@ ramips_setup_macs() + [ -n "$lan_mac" ] || lan_mac=$(cat /sys/class/net/eth0/address) + wan_mac=$(macaddr_add "$lan_mac" 1) + ;; ++ hiwifi,r33) ++ lan_mac=$(mtd_get_mac_ascii bdinfo "Vfac_mac ") ++ label_mac=$lan_mac ++ [ -n "$lan_mac" ] || lan_mac=$(cat /sys/class/net/eth0/address) ++ wan_mac=$(macaddr_add "$lan_mac" 1) ++ ;; + iodata,wn-ac1167gr|\ + iodata,wn-ac733gr3) + wan_mac=$(mtd_get_mac_ascii u-boot-env wanaddr) +diff --git a/target/linux/ramips/mt7620/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ramips/mt7620/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac +index aa0ad99158271..c7b818a0af7c0 100644 +--- a/target/linux/ramips/mt7620/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac ++++ b/target/linux/ramips/mt7620/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac +@@ -23,4 +23,11 @@ case "$board" in + [ "$PHYNBR" = "0" ] && [ -n "$label_mac" ] && \ + macaddr_unsetbit "$label_mac" 6 > /sys${DEVPATH}/macaddress + ;; ++ hiwifi,r33) ++ label_mac=$(mtd_get_mac_ascii bdinfo "Vfac_mac ") ++ [ "$PHYNBR" = "1" ] && [ -n "$label_mac" ] && \ ++ echo -n "$label_mac" > /sys${DEVPATH}/macaddress ++ [ "$PHYNBR" = "0" ] && [ -n "$label_mac" ] && \ ++ macaddr_unsetbit "$label_mac" 6 > /sys${DEVPATH}/macaddress ++ ;; + esac +diff --git a/target/linux/ramips/mt7620/base-files/lib/upgrade/platform.sh b/target/linux/ramips/mt7620/base-files/lib/upgrade/platform.sh +index 9f71dc918e50a..9c1aa42326e82 100755 +--- a/target/linux/ramips/mt7620/base-files/lib/upgrade/platform.sh ++++ b/target/linux/ramips/mt7620/base-files/lib/upgrade/platform.sh +@@ -30,6 +30,9 @@ platform_do_upgrade() { + } + default_do_upgrade "$1" + ;; ++ hiwifi,r33) ++ nand_do_upgrade "$1" ++ ;; + *) + default_do_upgrade "$1" + ;; +diff --git a/target/linux/ramips/mt7620/config-5.10 b/target/linux/ramips/mt7620/config-5.10 +index 135c1689e164d..a4c5afbd611fc 100644 +--- a/target/linux/ramips/mt7620/config-5.10 ++++ b/target/linux/ramips/mt7620/config-5.10 +@@ -32,7 +32,13 @@ CONFIG_CPU_SUPPORTS_HIGHMEM=y + CONFIG_CPU_SUPPORTS_MSA=y + CONFIG_CRYPTO_BLAKE2S=y + CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y ++CONFIG_CRC16=y ++CONFIG_CRYPTO_DEFLATE=y ++CONFIG_CRYPTO_GF128MUL=y ++CONFIG_CRYPTO_HASH_INFO=y + CONFIG_CRYPTO_LIB_POLY1305_RSIZE=2 ++CONFIG_CRYPTO_LZO=y ++CONFIG_CRYPTO_NULL2=y + CONFIG_CRYPTO_RNG2=y + CONFIG_CSRC_R4K=y + CONFIG_DEBUG_PINCTRL=y +@@ -88,9 +94,12 @@ CONFIG_IRQ_WORK=y + # CONFIG_KERNEL_ZSTD is not set + CONFIG_LIBFDT=y + CONFIG_LOCK_DEBUGGING_SUPPORT=y ++CONFIG_LZO_COMPRESS=y ++CONFIG_LZO_DECOMPRESS=y + CONFIG_MARVELL_PHY=y + CONFIG_MDIO_BUS=y + CONFIG_MDIO_DEVICE=y ++CONFIG_MDIO_DEVRES=y + CONFIG_MEMFD_CREATE=y + CONFIG_MFD_SYSCON=y + CONFIG_MIGRATION=y +@@ -103,6 +112,7 @@ CONFIG_MIPS_CLOCK_VSYSCALL=y + # CONFIG_MIPS_CMDLINE_DTB_EXTEND is not set + # CONFIG_MIPS_CMDLINE_FROM_BOOTLOADER is not set + CONFIG_MIPS_CMDLINE_FROM_DTB=y ++CONFIG_MIPS_EBPF_JIT=y + # CONFIG_MIPS_ELF_APPENDED_DTB is not set + CONFIG_MIPS_L1_CACHE_SHIFT=5 + CONFIG_MIPS_LD_CAN_LINK_VDSO=y +@@ -113,6 +123,7 @@ CONFIG_MODULES_USE_ELF_REL=y + # CONFIG_MT7621_WDT is not set + # CONFIG_MTD_CFI_INTELEXT is not set + CONFIG_MTD_CMDLINE_PARTS=y ++CONFIG_MTD_NAND_MT7620=y + # CONFIG_MTD_PARSER_TPLINK_SAFELOADER is not set + CONFIG_MTD_PHYSMAP=y + CONFIG_MTD_SPI_NOR=y +@@ -122,6 +133,10 @@ CONFIG_MTD_SPLIT_JIMAGE_FW=y + CONFIG_MTD_SPLIT_SEAMA_FW=y + CONFIG_MTD_SPLIT_TPLINK_FW=y + CONFIG_MTD_SPLIT_UIMAGE_FW=y ++CONFIG_MTD_UBI=y ++CONFIG_MTD_UBI_BEB_LIMIT=20 ++CONFIG_MTD_UBI_BLOCK=y ++CONFIG_MTD_UBI_WL_THRESHOLD=4096 + CONFIG_MTD_VIRT_CONCAT=y + CONFIG_NEED_DMA_MAP_STATE=y + CONFIG_NEED_PER_CPU_KM=y +@@ -165,6 +180,7 @@ CONFIG_RESET_CONTROLLER=y + CONFIG_SERIAL_8250_RT288X=y + CONFIG_SERIAL_MCTRL_GPIO=y + CONFIG_SERIAL_OF_PLATFORM=y ++CONFIG_SGL_ALLOC=y + CONFIG_SOC_MT7620=y + # CONFIG_SOC_MT7621 is not set + # CONFIG_SOC_RT288X is not set +@@ -193,6 +209,11 @@ CONFIG_TICK_CPU_ACCOUNTING=y + CONFIG_TIMER_OF=y + CONFIG_TIMER_PROBE=y + CONFIG_TINY_SRCU=y ++CONFIG_UBIFS_FS=y ++CONFIG_UBIFS_FS_ADVANCED_COMPR=y ++# CONFIG_UBIFS_FS_ZSTD is not set + CONFIG_USB_SUPPORT=y + CONFIG_USE_OF=y + CONFIG_WATCHDOG_CORE=y ++CONFIG_ZLIB_DEFLATE=y ++CONFIG_ZLIB_INFLATE=y +diff --git a/target/linux/ramips/mt7620/target.mk b/target/linux/ramips/mt7620/target.mk +index 5fc61e49cf8f3..ce992fc208b68 100644 +--- a/target/linux/ramips/mt7620/target.mk ++++ b/target/linux/ramips/mt7620/target.mk +@@ -4,7 +4,7 @@ + + SUBTARGET:=mt7620 + BOARDNAME:=MT7620 based boards +-FEATURES+=usb ramdisk ++FEATURES+=usb nand ramdisk + CPU_TYPE:=24kc + + DEFAULT_PACKAGES += kmod-rt2800-soc wpad-basic-wolfssl swconfig +diff --git a/target/linux/ramips/patches-5.10/0038-mtd-ralink-add-mt7620-nand-driver.patch b/target/linux/ramips/patches-5.10/0038-mtd-ralink-add-mt7620-nand-driver.patch +new file mode 100644 +index 0000000000000..b2d098b048319 +--- /dev/null ++++ b/target/linux/ramips/patches-5.10/0038-mtd-ralink-add-mt7620-nand-driver.patch +@@ -0,0 +1,2373 @@ ++From afb07a5b467217af1df4162c707cbe554a79130d Mon Sep 17 00:00:00 2001 ++From: Chen Minqiang ++Date: Thu, 3 Sep 2020 03:27:48 +0800 ++Subject: [PATCH] mtd ralink add mt7620-nand driver ++ ++--- ++ drivers/mtd/maps/Kconfig | 4 + ++ drivers/mtd/maps/Makefile | 1 + ++ drivers/mtd/maps/ralink_nand.c | 2095 ++++++++++++++++++++++++++++++++ ++ drivers/mtd/maps/ralink_nand.h | 240 ++++ ++ 4 files changed, 2340 insertions(+) ++ create mode 100644 drivers/mtd/maps/ralink_nand.c ++ create mode 100644 drivers/mtd/maps/ralink_nand.h ++ ++--- a/drivers/mtd/maps/Kconfig +++++ b/drivers/mtd/maps/Kconfig ++@@ -423,4 +423,8 @@ config MTD_PISMO ++ ++ When built as a module, it will be called pismo.ko ++ +++config MTD_NAND_MT7620 +++ tristate "Support for NAND on Mediatek MT7620" +++ depends on RALINK && SOC_MT7620 +++ ++ endmenu ++--- a/drivers/mtd/maps/Makefile +++++ b/drivers/mtd/maps/Makefile ++@@ -46,3 +46,4 @@ obj-$(CONFIG_MTD_INTEL_VR_NOR) += intel_ ++ obj-$(CONFIG_MTD_RBTX4939) += rbtx4939-flash.o ++ obj-$(CONFIG_MTD_VMU) += vmu-flash.o ++ obj-$(CONFIG_MTD_LANTIQ) += lantiq-flash.o +++obj-$(CONFIG_MTD_NAND_MT7620) += ralink_nand.o ++--- /dev/null +++++ b/drivers/mtd/maps/ralink_nand.c ++@@ -0,0 +1,2095 @@ +++#define DEBUG +++#include +++#undef DEBUG +++#include +++#include +++#include +++#include +++#include +++#include +++#include +++#include +++#include +++#include +++#include +++#include +++ +++#include "ralink_nand.h" +++#ifdef RANDOM_GEN_BAD_BLOCK +++#include +++#endif +++ +++#define LARGE_MTD_BOOT_PART_SIZE (CFG_BLOCKSIZE<<2) +++#define LARGE_MTD_CONFIG_PART_SIZE (CFG_BLOCKSIZE<<2) +++#define LARGE_MTD_FACTORY_PART_SIZE (CFG_BLOCKSIZE<<1) +++ +++#define BLOCK_ALIGNED(a) ((a) & (CFG_BLOCKSIZE - 1)) +++ +++#define READ_STATUS_RETRY 1000 +++ +++struct nand_ecclayout { +++ __u32 eccbytes; +++ __u32 eccpos[MTD_MAX_ECCPOS_ENTRIES_LARGE]; +++ __u32 oobavail; +++ struct nand_oobfree oobfree[MTD_MAX_OOBFREE_ENTRIES_LARGE]; +++}; +++ +++struct mtd_info *ranfc_mtd = NULL; +++ +++int skipbbt = 0; +++int ranfc_debug = 1; +++static int ranfc_bbt = 1; +++#if defined (WORKAROUND_RX_BUF_OV) +++static int ranfc_verify = 1; +++#endif +++static u32 nand_addrlen; +++ +++#if 0 +++module_param(ranfc_debug, int, 0644); +++module_param(ranfc_bbt, int, 0644); +++module_param(ranfc_verify, int, 0644); +++#endif +++ +++#if 0 +++#define ra_dbg(args...) do { if (ranfc_debug) printk(args); } while(0) +++#else +++#define ra_dbg(args...) +++#endif +++ +++#define CLEAR_INT_STATUS() ra_outl(NFC_INT_ST, ra_inl(NFC_INT_ST)) +++#define NFC_TRANS_DONE() (ra_inl(NFC_INT_ST) & INT_ST_ND_DONE) +++ +++int is_nand_page_2048 = 0; +++const unsigned int nand_size_map[2][3] = {{25, 30, 30}, {20, 27, 30}}; +++ +++static int nfc_wait_ready(int snooze_ms); +++ +++static const char * const mtk_probe_types[] = { "cmdlinepart", "ofpart", NULL }; +++ +++/** +++ * reset nand chip +++ */ +++static int nfc_chip_reset(void) +++{ +++ int status; +++ +++ //ra_dbg("%s:\n", __func__); +++ +++ // reset nand flash +++ ra_outl(NFC_CMD1, 0x0); +++ ra_outl(NFC_CMD2, 0xff); +++ ra_outl(NFC_ADDR, 0x0); +++ ra_outl(NFC_CONF, 0x0411); +++ +++ status = nfc_wait_ready(5); //erase wait 5us +++ if (status & NAND_STATUS_FAIL) { +++ printk("%s: fail \n", __func__); +++ } +++ +++ return (int)(status & NAND_STATUS_FAIL); +++} +++ +++/** +++ * clear NFC and flash chip. +++ */ +++static int nfc_all_reset(void) +++{ +++ int retry; +++ +++ ra_dbg("%s: \n", __func__); +++ +++ // reset controller +++ ra_outl(NFC_CTRL, ra_inl(NFC_CTRL) | 0x02); //clear data buffer +++ ra_outl(NFC_CTRL, ra_inl(NFC_CTRL) & ~0x02); //clear data buffer +++ +++ CLEAR_INT_STATUS(); +++ +++ retry = READ_STATUS_RETRY; +++ while ((ra_inl(NFC_INT_ST) & 0x02) != 0x02 && retry--); +++ if (retry <= 0) { +++ printk("nfc_all_reset: clean buffer fail \n"); +++ return -1; +++ } +++ +++ retry = READ_STATUS_RETRY; +++ while ((ra_inl(NFC_STATUS) & 0x1) != 0x0 && retry--) { //fixme, controller is busy ? +++ udelay(1); +++ } +++ +++ nfc_chip_reset(); +++ +++ return 0; +++} +++ +++/** NOTICE: only called by nfc_wait_ready(). +++ * @return -1, nfc can not get transction done +++ * @return 0, ok. +++ */ +++static int _nfc_read_status(char *status) +++{ +++ unsigned long cmd1, conf; +++ int int_st, nfc_st; +++ int retry; +++ +++ cmd1 = 0x70; +++ conf = 0x000101 | (1 << 20); +++ +++ //fixme, should we check nfc status? +++ CLEAR_INT_STATUS(); +++ +++ ra_outl(NFC_CMD1, cmd1); +++ ra_outl(NFC_CONF, conf); +++ +++ /* FIXME, +++ * 1. since we have no wired ready signal, directly +++ * calling this function is not gurantee to read right status under ready state. +++ * 2. the other side, we can not determine how long to become ready, this timeout retry is nonsense. +++ * 3. SUGGESTION: call nfc_read_status() from nfc_wait_ready(), +++ * that is aware about caller (in sementics) and has snooze plused nfc ND_DONE. +++ */ +++ retry = READ_STATUS_RETRY; +++ do { +++ nfc_st = ra_inl(NFC_STATUS); +++ int_st = ra_inl(NFC_INT_ST); +++ +++ ndelay(10); +++ } while (!(int_st & INT_ST_RX_BUF_RDY) && retry--); +++ +++ if (!(int_st & INT_ST_RX_BUF_RDY)) { +++ printk("nfc_read_status: NFC fail, int_st(%x), retry:%x. nfc:%x, reset nfc and flash. \n", +++ int_st, retry, nfc_st); +++ nfc_all_reset(); +++ *status = NAND_STATUS_FAIL; +++ return -1; +++ } +++ +++ *status = (char)(le32_to_cpu(ra_inl(NFC_DATA)) & 0x0ff); +++ return 0; +++} +++ +++/** +++ * @return !0, chip protect. +++ * @return 0, chip not protected. +++ */ +++static int nfc_check_wp(void) +++{ +++ /* Check the WP bit */ +++#if !defined CONFIG_NOT_SUPPORT_WP +++ return !!(ra_inl(NFC_CTRL) & 0x01); +++#else +++ char result = 0; +++ int ret; +++ +++ ret = _nfc_read_status(&result); +++ //FIXME, if ret < 0 +++ +++ return !(result & NAND_STATUS_WP); +++#endif +++} +++ +++#if !defined CONFIG_NOT_SUPPORT_RB +++/* +++ * @return !0, chip ready. +++ * @return 0, chip busy. +++ */ +++static int nfc_device_ready(void) +++{ +++ /* Check the ready */ +++ return !!(ra_inl(NFC_STATUS) & 0x04); +++} +++#endif +++ +++/** +++ * generic function to get data from flash. +++ * @return data length reading from flash. +++ */ +++static int _ra_nand_pull_data(char *buf, int len, int use_gdma) +++{ +++#ifdef RW_DATA_BY_BYTE +++ char *p = buf; +++#else +++ __u32 *p = (__u32 *)buf; +++#endif +++ int retry, int_st; +++ unsigned int ret_data; +++ int ret_size; +++ +++ // receive data by use_gdma +++ if (use_gdma) { +++ //if (_ra_nand_dma_pull((unsigned long)p, len)) { +++ if (1) { +++ printk("%s: fail \n", __func__); +++ len = -1; //return error +++ } +++ +++ return len; +++ } +++ +++ //fixme: retry count size? +++ retry = READ_STATUS_RETRY; +++ // no gdma +++ while (len > 0) { +++ int_st = ra_inl(NFC_INT_ST); +++ if (int_st & INT_ST_RX_BUF_RDY) { +++ +++ ret_data = ra_inl(NFC_DATA); +++ ra_outl(NFC_INT_ST, INT_ST_RX_BUF_RDY); +++#ifdef RW_DATA_BY_BYTE +++ ret_size = sizeof(unsigned int); +++ ret_size = min(ret_size, len); +++ len -= ret_size; +++ while (ret_size-- > 0) { +++ //nfc is little endian +++ *p++ = ret_data & 0x0ff; +++ ret_data >>= 8; +++ } +++#else +++ ret_size = min(len, 4); +++ len -= ret_size; +++ if (ret_size == 4) +++ *p++ = ret_data; +++ else { +++ __u8 *q = (__u8 *)p; +++ while (ret_size-- > 0) { +++ *q++ = ret_data & 0x0ff; +++ ret_data >>= 8; +++ } +++ p = (__u32 *)q; +++ } +++#endif +++ retry = READ_STATUS_RETRY; +++ } +++ else if (int_st & INT_ST_ND_DONE) { +++ break; +++ } +++ else { +++ udelay(1); +++ if (retry-- < 0) +++ break; +++ } +++ } +++ +++#ifdef RW_DATA_BY_BYTE +++ return (int)(p - buf); +++#else +++ return ((int)p - (int)buf); +++#endif +++} +++ +++/** +++ * generic function to put data into flash. +++ * @return data length writing into flash. +++ */ +++static int _ra_nand_push_data(char *buf, int len, int use_gdma) +++{ +++#ifdef RW_DATA_BY_BYTE +++ char *p = buf; +++#else +++ __u32 *p = (__u32 *)buf; +++#endif +++ int retry, int_st; +++ unsigned int tx_data = 0; +++ int tx_size, iter = 0; +++ +++ // receive data by use_gdma +++ if (use_gdma) { +++ //if (_ra_nand_dma_push((unsigned long)p, len)) +++ if (1) +++ len = 0; +++ printk("%s: fail \n", __func__); +++ return len; +++ } +++ +++ // no gdma +++ retry = READ_STATUS_RETRY; +++ while (len > 0) { +++ int_st = ra_inl(NFC_INT_ST); +++ if (int_st & INT_ST_TX_BUF_RDY) { +++#ifdef RW_DATA_BY_BYTE +++ tx_size = min(len, (int)sizeof(unsigned long)); +++ for (iter = 0; iter < tx_size; iter++) { +++ tx_data |= (*p++ << (8*iter)); +++ } +++#else +++ tx_size = min(len, 4); +++ if (tx_size == 4) +++ tx_data = (*p++); +++ else { +++ __u8 *q = (__u8 *)p; +++ for (iter = 0; iter < tx_size; iter++) +++ tx_data |= (*q++ << (8*iter)); +++ p = (__u32 *)q; +++ } +++#endif +++ ra_outl(NFC_INT_ST, INT_ST_TX_BUF_RDY); +++ ra_outl(NFC_DATA, tx_data); +++ len -= tx_size; +++ retry = READ_STATUS_RETRY; +++ } +++ else if (int_st & INT_ST_ND_DONE) { +++ break; +++ } +++ else { +++ udelay(1); +++ if (retry-- < 0) { +++ ra_dbg("%s p:%p buf:%p \n", __func__, p, buf); +++ break; +++ } +++ } +++ } +++ +++#ifdef RW_DATA_BY_BYTE +++ return (int)(p - buf); +++#else +++ return ((int)p - (int)buf); +++#endif +++} +++ +++static int nfc_select_chip(struct ra_nand_chip *ra, int chipnr) +++{ +++#if (CONFIG_NUMCHIPS == 1) +++ if (!(chipnr < CONFIG_NUMCHIPS)) +++ return -1; +++ return 0; +++#else +++ BUG(); +++#endif +++} +++ +++/** @return -1: chip_select fail +++ * 0 : both CE and WP==0 are OK +++ * 1 : CE OK and WP==1 +++ */ +++static int nfc_enable_chip(struct ra_nand_chip *ra, unsigned int offs, int read_only) +++{ +++ int chipnr = offs >> ra->chip_shift; +++ +++ ra_dbg("%s: offs:%x read_only:%x \n", __func__, offs, read_only); +++ +++ chipnr = nfc_select_chip(ra, chipnr); +++ if (chipnr < 0) { +++ printk("%s: chip select error, offs(%x)\n", __func__, offs); +++ return -1; +++ } +++ +++ if (!read_only) +++ return nfc_check_wp(); +++ +++ return 0; +++} +++ +++/** wait nand chip becomeing ready and return queried status. +++ * @param snooze: sleep time in ms unit before polling device ready. +++ * @return status of nand chip +++ * @return NAN_STATUS_FAIL if something unexpected. +++ */ +++static int nfc_wait_ready(int snooze_ms) +++{ +++ int retry; +++ char status; +++ +++ // wait nfc idle, +++ if (snooze_ms == 0) +++ snooze_ms = 1; +++ else +++ schedule_timeout(snooze_ms * HZ / 1000); +++ +++ snooze_ms = retry = snooze_ms *1000000 / 100 ; // ndelay(100) +++ +++ while (!NFC_TRANS_DONE() && retry--) { +++ if (!cond_resched()) +++ ndelay(100); +++ } +++ +++ if (!NFC_TRANS_DONE()) { +++ printk("nfc_wait_ready: no transaction done \n"); +++ return NAND_STATUS_FAIL; +++ } +++ +++#if !defined (CONFIG_NOT_SUPPORT_RB) +++ //fixme +++ while(!(status = nfc_device_ready()) && retry--) { +++ ndelay(100); +++ } +++ +++ if (status == 0) { +++ printk("nfc_wait_ready: no device ready. \n"); +++ return NAND_STATUS_FAIL; +++ } +++ +++ _nfc_read_status(&status); +++ return status; +++#else +++ +++ while(retry--) { +++ _nfc_read_status(&status); +++ if (status & NAND_STATUS_READY) +++ break; +++ ndelay(100); +++ } +++ if (retry<0) +++ printk("nfc_wait_ready 2: no device ready, status(%x). \n", status); +++ +++ return status; +++#endif +++} +++ +++/** +++ * return 0: erase OK +++ * return -EIO: fail +++ */ +++int nfc_erase_block(struct ra_nand_chip *ra, int row_addr) +++{ +++ unsigned long cmd1, cmd2, bus_addr, conf; +++ char status; +++ +++ cmd1 = 0x60; +++ cmd2 = 0xd0; +++ bus_addr = row_addr; +++ conf = 0x00511 | ((CFG_ROW_ADDR_CYCLE)<<16); +++ +++ // set NFC +++ ra_dbg("%s: cmd1: %lx, cmd2:%lx bus_addr: %lx, conf: %lx \n", +++ __func__, cmd1, cmd2, bus_addr, conf); +++ +++ //fixme, should we check nfc status? +++ CLEAR_INT_STATUS(); +++ +++ ra_outl(NFC_CMD1, cmd1); +++ ra_outl(NFC_CMD2, cmd2); +++ ra_outl(NFC_ADDR, bus_addr); +++ ra_outl(NFC_CONF, conf); +++ +++ status = nfc_wait_ready(3); //erase wait 3ms +++ if (status & NAND_STATUS_FAIL) { +++ printk("%s: fail \n", __func__); +++ return -EIO; +++ } +++ +++ return 0; +++} +++ +++static inline int _nfc_read_raw_data(int cmd1, int cmd2, int bus_addr, int bus_addr2, int conf, char *buf, int len, int flags) +++{ +++ int ret; +++ +++ CLEAR_INT_STATUS(); +++ ra_outl(NFC_CMD1, cmd1); +++ ra_outl(NFC_CMD2, cmd2); +++ ra_outl(NFC_ADDR, bus_addr); +++#if defined (CONFIG_SOC_MT7620) +++ ra_outl(NFC_ADDR2, bus_addr2); +++#endif +++ ra_outl(NFC_CONF, conf); +++ +++ ret = _ra_nand_pull_data(buf, len, 0); +++ if (ret != len) { +++ ra_dbg("%s: ret:%x (%x) \n", __func__, ret, len); +++ return NAND_STATUS_FAIL; +++ } +++ +++ //FIXME, this section is not necessary +++ ret = nfc_wait_ready(0); //wait ready +++ /* to prevent the DATA FIFO 's old data from next operation */ +++ ra_outl(NFC_CTRL, ra_inl(NFC_CTRL) | 0x02); //clear data buffer +++ ra_outl(NFC_CTRL, ra_inl(NFC_CTRL) & ~0x02); //clear data buffer +++ +++ if (ret & NAND_STATUS_FAIL) { +++ printk("%s: fail \n", __func__); +++ return NAND_STATUS_FAIL; +++ } +++ +++ return 0; +++} +++ +++static inline int _nfc_write_raw_data(int cmd1, int cmd3, int bus_addr, int bus_addr2, int conf, char *buf, int len, int flags) +++{ +++ int ret; +++ +++ CLEAR_INT_STATUS(); +++ ra_outl(NFC_CMD1, cmd1); +++ ra_outl(NFC_CMD3, cmd3); +++ ra_outl(NFC_ADDR, bus_addr); +++#if defined (CONFIG_SOC_MT7620) +++ ra_outl(NFC_ADDR2, bus_addr2); +++#endif +++ ra_outl(NFC_CONF, conf); +++ +++ ret = _ra_nand_push_data(buf, len, 0); +++ if (ret != len) { +++ ra_dbg("%s: ret:%x (%x) \n", __func__, ret, len); +++ return NAND_STATUS_FAIL; +++ } +++ +++ ret = nfc_wait_ready(1); //write wait 1ms +++ /* to prevent the DATA FIFO 's old data from next operation */ +++ ra_outl(NFC_CTRL, ra_inl(NFC_CTRL) | 0x02); //clear data buffer +++ ra_outl(NFC_CTRL, ra_inl(NFC_CTRL) & ~0x02); //clear data buffer +++ +++ if (ret & NAND_STATUS_FAIL) { +++ printk("%s: fail \n", __func__); +++ return NAND_STATUS_FAIL; +++ } +++ +++ return 0; +++} +++ +++/** +++ * @return !0: fail +++ * @return 0: OK +++ */ +++int nfc_read_oob(struct ra_nand_chip *ra, int page, unsigned int offs, char *buf, int len, int flags) +++{ +++ unsigned int cmd1 = 0, cmd2 = 0, conf = 0; +++ unsigned int bus_addr = 0, bus_addr2 = 0; +++ unsigned int ecc_en; +++ int use_gdma; +++ int status; +++ +++ int pages_perblock = 1<<(ra->erase_shift - ra->page_shift); +++ // constrain of nfc read function +++ +++#if defined (WORKAROUND_RX_BUF_OV) +++ BUG_ON (len > 60); //problem of rx-buffer overrun +++#endif +++ BUG_ON (offs >> ra->oob_shift); //page boundry +++ BUG_ON ((unsigned int)(((offs + len) >> ra->oob_shift) + page) > +++ ((page + pages_perblock) & ~(pages_perblock-1))); //block boundry +++ +++ use_gdma = flags & FLAG_USE_GDMA; +++ ecc_en = flags & FLAG_ECC_EN; +++ bus_addr = (page << (CFG_COLUMN_ADDR_CYCLE*8)) | (offs & ((1<> (CFG_COLUMN_ADDR_CYCLE*8); +++ cmd1 = 0x0; +++ cmd2 = 0x30; +++ conf = 0x000511| ((CFG_ADDR_CYCLE)<<16) | (len << 20); +++ } +++ else { +++ cmd1 = 0x50; +++ conf = 0x000141| ((CFG_ADDR_CYCLE)<<16) | (len << 20); +++ } +++ if (ecc_en) +++ conf |= (1<<3); +++ if (use_gdma) +++ conf |= (1<<2); +++ +++ ra_dbg("%s: cmd1:%x, bus_addr:%x, conf:%x, len:%x, flag:%x\n", +++ __func__, cmd1, bus_addr, conf, len, flags); +++ +++ status = _nfc_read_raw_data(cmd1, cmd2, bus_addr, bus_addr2, conf, buf, len, flags); +++ if (status & NAND_STATUS_FAIL) { +++ printk("%s: fail\n", __func__); +++ return -EIO; +++ } +++ +++ return 0; +++} +++ +++/** +++ * @return !0: fail +++ * @return 0: OK +++ */ +++int nfc_write_oob(struct ra_nand_chip *ra, int page, unsigned int offs, char *buf, int len, int flags) +++{ +++ unsigned int cmd1 = 0, cmd3=0, conf = 0; +++ unsigned int bus_addr = 0, bus_addr2 = 0; +++ int use_gdma; +++ int status; +++ +++ int pages_perblock = 1<<(ra->erase_shift - ra->page_shift); +++ // constrain of nfc read function +++ +++ BUG_ON (offs >> ra->oob_shift); //page boundry +++ BUG_ON ((unsigned int)(((offs + len) >> ra->oob_shift) + page) > +++ ((page + pages_perblock) & ~(pages_perblock-1))); //block boundry +++ +++ use_gdma = flags & FLAG_USE_GDMA; +++ bus_addr = (page << (CFG_COLUMN_ADDR_CYCLE*8)) | (offs & ((1<> (CFG_COLUMN_ADDR_CYCLE*8); +++ conf = 0x001123 | ((CFG_ADDR_CYCLE)<<16) | ((len) << 20); +++ } +++ else { +++ cmd1 = 0x08050; +++ cmd3 = 0x10; +++ conf = 0x001223 | ((CFG_ADDR_CYCLE)<<16) | ((len) << 20); +++ } +++ if (use_gdma) +++ conf |= (1<<2); +++ +++ // set NFC +++ ra_dbg("%s: cmd1: %x, cmd3: %x bus_addr: %x, conf: %x, len:%x\n", +++ __func__, cmd1, cmd3, bus_addr, conf, len); +++ +++ status = _nfc_write_raw_data(cmd1, cmd3, bus_addr, bus_addr2, conf, buf, len, flags); +++ if (status & NAND_STATUS_FAIL) { +++ printk("%s: fail \n", __func__); +++ return -EIO; +++ } +++ +++ return 0; +++} +++ +++ +++int nfc_read_page(struct ra_nand_chip *ra, char *buf, int page, int flags); +++int nfc_write_page(struct ra_nand_chip *ra, char *buf, int page, int flags); +++ +++ +++#if !defined (WORKAROUND_RX_BUF_OV) +++static int one_bit_correction(char *ecc, char *expected, int *bytes, int *bits); +++int nfc_ecc_verify(struct ra_nand_chip *ra, char *buf, int page, int mode) +++{ +++ int ret, i; +++ char *p, *e; +++ int ecc; +++ +++ //ra_dbg("%s, page:%x mode:%d\n", __func__, page, mode); +++ +++ if (mode == FL_WRITING) { +++ int len = CFG_PAGESIZE + CFG_PAGE_OOBSIZE; +++ int conf = 0x000141| ((CFG_ADDR_CYCLE)<<16) | (len << 20); +++ conf |= (1<<3); //(ecc_en) +++ //conf |= (1<<2); // (use_gdma) +++ +++ p = ra->readback_buffers; +++ ret = nfc_read_page(ra, ra->readback_buffers, page, FLAG_ECC_EN); +++ if (ret == 0) +++ goto ecc_check; +++ +++ //FIXME, double comfirm +++ printk("%s: read back fail, try again \n",__func__); +++ ret = nfc_read_page(ra, ra->readback_buffers, page, FLAG_ECC_EN); +++ if (ret != 0) { +++ printk("\t%s: read back fail agian \n",__func__); +++ goto bad_block; +++ } +++ } +++ else if (mode == FL_READING) { +++ p = buf; +++ } +++ else +++ return -2; +++ +++ecc_check: +++ p += CFG_PAGESIZE; +++ if (!is_nand_page_2048) { +++ ecc = ra_inl(NFC_ECC); +++ if (ecc == 0) //clean page. +++ return 0; +++ e = (char*)&ecc; +++ for (i=0; ireadback_buffers, page, FLAG_NONE); +++ if (ret != 0) //double comfirm +++ ret = nfc_read_page(ra, ra->readback_buffers, page, FLAG_NONE); +++ +++ if (ret != 0) { +++ printk("%s: mode:%x read back fail \n", __func__, mode); +++ return -1; +++ } +++ return memcmp(buf, ra->readback_buffers, 1<page_shift); +++ } +++ +++ if (mode == FL_READING) { +++#if 0 +++ if (ra->sandbox_page == 0) +++ return 0; +++ +++ ret = nfc_write_page(ra, buf, ra->sandbox_page, FLAG_USE_GDMA | FLAG_ECC_EN); +++ if (ret != 0) { +++ printk("%s, fail write sandbox_page \n", __func__); +++ return -1; +++ } +++#else +++ /** @note: +++ * The following command is actually not 'write' command to drive NFC to write flash. +++ * However, it can make NFC to calculate ECC, that will be used to compare with original ones. +++ * --YT +++ */ +++ unsigned int conf = 0x001223| (CFG_ADDR_CYCLE<<16) | (0x200 << 20) | (1<<3) | (1<<2); +++ _nfc_write_raw_data(0xff, 0xff, ra->sandbox_page<page_shift, conf, buf, 0x200, FLAG_USE_GDMA); +++#endif +++ +++ ecc = ra_inl(NFC_ECC); +++ if (ecc == 0) //clean page. +++ return 0; +++ e = (char*)&ecc; +++ p = buf + (1<page_shift); +++ for (i=0; i 0) { +++ int len; +++#if defined (WORKAROUND_RX_BUF_OV) +++ len = min(60, size); +++#else +++ len = size; +++#endif +++ bus_addr = (page << (CFG_COLUMN_ADDR_CYCLE*8)) | (offs & ((1<> (CFG_COLUMN_ADDR_CYCLE*8); +++ cmd1 = 0x0; +++ cmd2 = 0x30; +++ conf = 0x000511| ((CFG_ADDR_CYCLE)<<16) | (len << 20); +++ } +++ else { +++ if (offs & ~(CFG_PAGESIZE-1)) +++ cmd1 = 0x50; +++ else if (offs & ~((1<buffers_page = -1; //cached +++ } +++ +++ return 0; +++} +++ +++ +++/** +++ * @return -EIO, fail to write +++ * @return 0, OK +++ */ +++int nfc_write_page(struct ra_nand_chip *ra, char *buf, int page, int flags) +++{ +++ unsigned int cmd1 = 0, cmd3, conf = 0; +++ unsigned int bus_addr = 0, bus_addr2 = 0; +++ unsigned int ecc_en; +++ int use_gdma; +++ int size; +++ char status; +++ uint8_t *oob = buf + (1<page_shift); +++ +++ use_gdma = flags & FLAG_USE_GDMA; +++ ecc_en = flags & FLAG_ECC_EN; +++ +++ oob[ra->badblockpos] = 0xff; //tag as good block. +++ ra->buffers_page = -1; //cached +++ +++ page = page & (CFG_CHIPSIZE-1); //chip boundary +++ size = CFG_PAGESIZE + CFG_PAGE_OOBSIZE; //add oobsize +++ bus_addr = (page << (CFG_COLUMN_ADDR_CYCLE*8)); //write_page always write from offset 0. +++ +++ if (is_nand_page_2048) { +++ bus_addr2 = page >> (CFG_COLUMN_ADDR_CYCLE*8); +++ cmd1 = 0x80; +++ cmd3 = 0x10; +++ conf = 0x001123| ((CFG_ADDR_CYCLE)<<16) | (size << 20); +++ } +++ else { +++ cmd1 = 0x8000; +++ cmd3 = 0x10; +++ conf = 0x001223| ((CFG_ADDR_CYCLE)<<16) | (size << 20); +++ } +++ if (ecc_en) +++ conf |= (1<<3); //enable ecc +++ if (use_gdma) +++ conf |= (1<<2); +++ +++ // set NFC +++ ra_dbg("nfc_write_page: cmd1: %x, cmd3: %x bus_addr: %x, conf: %x, len:%x\n", +++ cmd1, cmd3, bus_addr, conf, size); +++ +++ status = _nfc_write_raw_data(cmd1, cmd3, bus_addr, bus_addr2, conf, buf, size, flags); +++ if (status & NAND_STATUS_FAIL) { +++ printk("%s: fail \n", __func__); +++ return -EIO; +++ } +++ +++ +++ if (flags & FLAG_VERIFY) { // verify and correct ecc +++ status = nfc_ecc_verify(ra, buf, page, FL_WRITING); +++ +++#ifdef RANDOM_GEN_BAD_BLOCK +++ if (((random32() & 0x1ff) == 0x0) && (page >= 0x100)) // randomly create bad block +++ { +++ printk("hmm... create a bad block at page %x\n", (bus_addr >> 16)); +++ status = -1; +++ } +++#endif +++ +++ if (status != 0) { +++ printk("%s: ecc_verify fail: ret:%x \n", __func__, status); +++ oob[ra->badblockpos] = 0x33; +++ page -= page % (CFG_BLOCKSIZE/CFG_PAGESIZE); +++ printk("create a bad block at page %x\n", page); +++ if (!is_nand_page_2048) +++ status = nfc_write_oob(ra, page, ra->badblockpos, oob+ra->badblockpos, 1, flags); +++ else +++ { +++ status = _nfc_write_raw_data(cmd1, cmd3, bus_addr, bus_addr2, conf, buf, size, flags); +++ nfc_write_oob(ra, page, 0, oob, 16, FLAG_NONE); +++ } +++ return -EBADMSG; +++ } +++ } +++ +++ ra->buffers_page = page; //cached +++ return 0; +++} +++ +++ +++ +++/************************************************************* +++ * nand internal process +++ *************************************************************/ +++ +++/** +++ * nand_release_device - [GENERIC] release chip +++ * @mtd: MTD device structure +++ * +++ * Deselect, release chip lock and wake up anyone waiting on the device +++ */ +++static void nand_release_device(struct ra_nand_chip *ra) +++{ +++ /* De-select the NAND device */ +++ nfc_select_chip(ra, -1); +++ +++ /* Release the controller and the chip */ +++ ra->state = FL_READY; +++ +++ mutex_unlock(ra->controller); +++} +++ +++/** +++ * nand_get_device - [GENERIC] Get chip for selected access +++ * @chip: the nand chip descriptor +++ * @mtd: MTD device structure +++ * @new_state: the state which is requested +++ * +++ * Get the device and lock it for exclusive access +++ */ +++static int +++nand_get_device(struct ra_nand_chip *ra, int new_state) +++{ +++ int ret = 0; +++ +++ ret = mutex_lock_interruptible(ra->controller); +++ if (!ret) +++ ra->state = new_state; +++ +++ return ret; +++} +++ +++/************************************************************* +++ * nand internal process +++ *************************************************************/ +++ +++int ra_nand_bbt_get(struct ra_nand_chip *ra, int block) +++{ +++ int byte, bits; +++ bits = block * BBTTAG_BITS; +++ +++ byte = bits / 8; +++ bits = bits % 8; +++ +++ return (ra->bbt[byte] >> bits) & BBTTAG_BITS_MASK; +++} +++ +++int ra_nand_bbt_set(struct ra_nand_chip *ra, int block, int tag) +++{ +++ int byte, bits; +++ bits = block * BBTTAG_BITS; +++ +++ byte = bits / 8; +++ bits = bits % 8; +++ +++ // If previous tag is bad, dont overwrite it +++ if (((ra->bbt[byte] >> bits) & BBTTAG_BITS_MASK) == BBT_TAG_BAD) +++ { +++ return BBT_TAG_BAD; +++ } +++ +++ ra->bbt[byte] = (ra->bbt[byte] & ~(BBTTAG_BITS_MASK << bits)) | ((tag & BBTTAG_BITS_MASK) << bits); +++ +++ return tag; +++} +++ +++/** +++ * nand_block_checkbad - [GENERIC] Check if a block is marked bad +++ * @mtd: MTD device structure +++ * @ofs: offset from device start +++ * +++ * Check, if the block is bad. Either by reading the bad block table or +++ * calling of the scan function. +++ */ +++int nand_block_checkbad(struct ra_nand_chip *ra, loff_t offs) +++{ +++ int page, block; +++ int ret = 4; +++ unsigned int tag; +++ char *str[]= {"UNK", "RES", "BAD", "GOOD"}; +++ +++ if (ranfc_bbt == 0) +++ return 0; +++ +++ { +++ // align with chip +++ +++ offs = offs & ((1<chip_shift) -1); +++ +++ page = offs >> ra->page_shift; +++ block = offs >> ra->erase_shift; +++ } +++ +++ tag = ra_nand_bbt_get(ra, block); +++ +++ if (tag == BBT_TAG_UNKNOWN) { +++ ret = nfc_read_oob(ra, page, ra->badblockpos, (char*)&tag, 1, FLAG_NONE); +++ if (ret == 0) +++ tag = ((le32_to_cpu(tag) & 0x0ff) == 0x0ff) ? BBT_TAG_GOOD : BBT_TAG_BAD; +++ else +++ tag = BBT_TAG_BAD; +++ +++ ra_nand_bbt_set(ra, block, tag); +++ } +++ +++ if (tag != BBT_TAG_GOOD) { +++ printk("%s: offs:%x tag: %s \n", __func__, (unsigned int)offs, str[tag]); +++ return 1; +++ } +++ else +++ return 0; +++} +++ +++/** +++ * nand_block_markbad - +++ */ +++int nand_block_markbad(struct ra_nand_chip *ra, loff_t offs) +++{ +++ int page, block; +++ int ret = 4; +++ unsigned int tag; +++ char *ecc; +++ +++ // align with chip +++ ra_dbg("%s offs: %x \n", __func__, (int)offs); +++ +++ offs = offs & ((1<chip_shift) -1); +++ +++ page = offs >> ra->page_shift; +++ block = offs >> ra->erase_shift; +++ +++ tag = ra_nand_bbt_get(ra, block); +++ +++ if (tag == BBT_TAG_BAD) { +++ printk("%s: mark repeatedly \n", __func__); +++ return 0; +++ } +++ +++ // new tag as bad +++ tag =BBT_TAG_BAD; +++ ret = nfc_read_page(ra, ra->buffers, page, FLAG_NONE); +++ if (ret != 0) { +++ printk("%s: fail to read bad block tag \n", __func__); +++ goto tag_bbt; +++ } +++ +++ ecc = &ra->buffers[(1<page_shift)+ra->badblockpos]; +++ if (*ecc == (char)0x0ff) { +++ //tag into flash +++ *ecc = (char)tag; +++ ret = nfc_write_page(ra, ra->buffers, page, FLAG_USE_GDMA); +++ if (ret) +++ printk("%s: fail to write bad block tag \n", __func__); +++ } +++ +++tag_bbt: +++ //update bbt +++ ra_nand_bbt_set(ra, block, tag); +++ +++ return 0; +++} +++ +++#if defined (WORKAROUND_RX_BUF_OV) +++/** +++ * to find a bad block for ecc verify of read_page +++ */ +++unsigned int nand_bbt_find_sandbox(struct ra_nand_chip *ra) +++{ +++ loff_t offs = 0; +++ int chipsize = 1 << ra->chip_shift; +++ int blocksize = 1 << ra->erase_shift; +++ +++ +++ while (offs < chipsize) { +++ if (nand_block_checkbad(ra, offs)) //scan and verify the unknown tag +++ break; +++ offs += blocksize; +++ } +++ +++ if (offs >= chipsize) { +++ offs = chipsize - blocksize; +++ } +++ +++ ra_nand_bbt_set(ra, (unsigned int)offs>>ra->erase_shift, BBT_TAG_RES); // tag bbt only, instead of update badblockpos of flash. +++ return (offs >> ra->page_shift); +++} +++#endif +++ +++/** +++ * nand_erase_nand - [Internal] erase block(s) +++ * @mtd: MTD device structure +++ * @instr: erase instruction +++ * @allowbbt: allow erasing the bbt area +++ * +++ * Erase one ore more blocks +++ */ +++static int _nand_erase_nand(struct ra_nand_chip *ra, struct erase_info *instr) +++{ +++ int page, len, status, ret, state; +++ unsigned int addr, blocksize = 1<erase_shift; +++ +++ ra_dbg("%s: start:%x, len:%x \n", __func__, +++ (unsigned int)instr->addr, (unsigned int)instr->len); +++ +++//#define BLOCK_ALIGNED(a) ((a) & (blocksize - 1)) // already defined +++ +++ if (BLOCK_ALIGNED(instr->addr) || BLOCK_ALIGNED(instr->len)) { +++ ra_dbg("%s: erase block not aligned, addr:%x len:%x\n", __func__, instr->addr, instr->len); +++ return -EINVAL; +++ } +++ +++ instr->fail_addr = 0xffffffff; +++ +++ len = instr->len; +++ addr = instr->addr; +++ state = MTD_ERASING; +++ +++ while (len) { +++ +++ page = (int)(addr >> ra->page_shift); +++ +++ /* select device and check wp */ +++ if (nfc_enable_chip(ra, addr, 0)) { +++ printk("%s: nand is write protected \n", __func__); +++ state = MTD_ERASE_FAILED; +++ goto erase_exit; +++ } +++ +++ /* if we have a bad block, we do not erase bad blocks */ +++ if (nand_block_checkbad(ra, addr)) { +++ printk(KERN_WARNING "nand_erase: attempt to erase a " +++ "bad block at 0x%08x\n", addr); +++ state = MTD_ERASE_FAILED; +++ goto erase_exit; +++ } +++ +++ /* +++ * Invalidate the page cache, if we erase the block which +++ * contains the current cached page +++ */ +++ if (BLOCK_ALIGNED(addr) == BLOCK_ALIGNED(ra->buffers_page << ra->page_shift)) +++ ra->buffers_page = -1; +++ +++ status = nfc_erase_block(ra, page); +++ /* See if block erase succeeded */ +++ if (status) { +++ printk("%s: failed erase, page 0x%08x\n", __func__, page); +++ state = MTD_ERASE_FAILED; +++ instr->fail_addr = (page << ra->page_shift); +++ goto erase_exit; +++ } +++ +++ /* Increment page address and decrement length */ +++ len -= blocksize; +++ addr += blocksize; +++ +++ } +++ state = MTD_ERASE_DONE; +++ +++erase_exit: +++ +++ ret = ((state == MTD_ERASE_DONE) ? 0 : -EIO); +++ +++ if (ret) { +++ ra_nand_bbt_set(ra, addr >> ra->erase_shift, BBT_TAG_BAD); +++ } +++ +++ /* Return more or less happy */ +++ return ret; +++} +++ +++static int +++nand_write_oob_buf(struct ra_nand_chip *ra, uint8_t *buf, uint8_t *oob, size_t size, +++ int mode, int ooboffs) +++{ +++ size_t oobsize = 1<oob_shift; +++ struct nand_oobfree *free; +++ uint32_t woffs = ooboffs; +++ int retsize = 0; +++ +++ ra_dbg("%s: size:%x, mode:%x, offs:%x \n", __func__, size, mode, ooboffs); +++ +++ switch(mode) { +++ case MTD_OPS_PLACE_OOB: +++ case MTD_OPS_RAW: +++ if (ooboffs > oobsize) +++ return -1; +++ +++ size = min(size, oobsize - ooboffs); +++ memcpy(buf + ooboffs, oob, size); +++ retsize = size; +++ break; +++ +++ case MTD_OPS_AUTO_OOB: +++ if (ooboffs > ra->oob->oobavail) +++ return -1; +++ +++ while (size) { +++ for(free = ra->oob->oobfree; free->length && size; free++) { +++ int wlen = free->length - woffs; +++ int bytes = 0; +++ +++ /* Write request not from offset 0 ? */ +++ if (wlen <= 0) { +++ woffs = -wlen; +++ continue; +++ } +++ +++ bytes = min_t(size_t, size, wlen); +++ memcpy (buf + free->offset + woffs, oob, bytes); +++ woffs = 0; +++ oob += bytes; +++ size -= bytes; +++ retsize += bytes; +++ } +++ buf += oobsize; +++ } +++ break; +++ +++ default: +++ BUG(); +++ } +++ +++ return retsize; +++} +++ +++static int nand_read_oob_buf(struct ra_nand_chip *ra, uint8_t *oob, size_t size, +++ int mode, int ooboffs) +++{ +++ size_t oobsize = 1<oob_shift; +++ uint8_t *buf = ra->buffers + (1<page_shift); +++ int retsize=0; +++ +++ ra_dbg("%s: size:%x, mode:%x, offs:%x \n", __func__, size, mode, ooboffs); +++ +++ switch(mode) { +++ case MTD_OPS_PLACE_OOB: +++ case MTD_OPS_RAW: +++ if (ooboffs > oobsize) +++ return -1; +++ +++ size = min(size, oobsize - ooboffs); +++ memcpy(oob, buf + ooboffs, size); +++ return size; +++ +++ case MTD_OPS_AUTO_OOB: { +++ struct nand_oobfree *free; +++ uint32_t woffs = ooboffs; +++ +++ if (ooboffs > ra->oob->oobavail) +++ return -1; +++ +++ size = min(size, ra->oob->oobavail - ooboffs); +++ for(free = ra->oob->oobfree; free->length && size; free++) { +++ int wlen = free->length - woffs; +++ int bytes = 0; +++ +++ /* Write request not from offset 0 ? */ +++ if (wlen <= 0) { +++ woffs = -wlen; +++ continue; +++ } +++ +++ bytes = min_t(size_t, size, wlen); +++ memcpy (oob, buf + free->offset + woffs, bytes); +++ woffs = 0; +++ oob += bytes; +++ size -= bytes; +++ retsize += bytes; +++ } +++ return retsize; +++ } +++ default: +++ BUG(); +++ } +++ +++ return -1; +++} +++ +++/** +++ * nand_do_write_ops - [Internal] NAND write with ECC +++ * @mtd: MTD device structure +++ * @to: offset to write to +++ * @ops: oob operations description structure +++ * +++ * NAND write with ECC +++ */ +++static int nand_do_write_ops(struct ra_nand_chip *ra, loff_t to, +++ struct mtd_oob_ops *ops) +++{ +++ int page; +++ uint32_t datalen = ops->len; +++ uint32_t ooblen = ops->ooblen; +++ uint8_t *oob = ops->oobbuf; +++ uint8_t *data = ops->datbuf; +++ int pagesize = (1<page_shift); +++ int pagemask = (pagesize -1); +++ int oobsize = 1<oob_shift; +++ loff_t addr = to; +++ //int i = 0; //for ra_dbg only +++ +++ ra_dbg("%s: to:%x, ops data:%p, oob:%p datalen:%x ooblen:%x, ooboffs:%x oobmode:%x \n", +++ __func__, (unsigned int)to, data, oob, datalen, ooblen, ops->ooboffs, ops->mode); +++ +++ ops->retlen = 0; +++ ops->oobretlen = 0; +++ +++ +++ /* Invalidate the page cache, when we write to the cached page */ +++ ra->buffers_page = -1; +++ +++ +++ if (data ==0) +++ datalen = 0; +++ +++ // oob sequential (burst) write +++ if (datalen == 0 && ooblen) { +++ int len = ((ooblen + ops->ooboffs) + (ra->oob->oobavail - 1)) / ra->oob->oobavail * oobsize; +++ +++ /* select chip, and check if it is write protected */ +++ if (nfc_enable_chip(ra, addr, 0)) +++ return -EIO; +++ +++ //FIXME, need sanity check of block boundary +++ page = (int)((to & ((1<chip_shift)-1)) >> ra->page_shift); //chip boundary +++ memset(ra->buffers, 0x0ff, pagesize); +++ //fixme, should we reserve the original content? +++ if (ops->mode == MTD_OPS_AUTO_OOB) { +++ nfc_read_oob(ra, page, 0, ra->buffers, len, FLAG_NONE); +++ } +++ //prepare buffers +++ if (ooblen != 8) +++ { +++ nand_write_oob_buf(ra, ra->buffers, oob, ooblen, ops->mode, ops->ooboffs); +++ // write out buffer to chip +++ nfc_write_oob(ra, page, 0, ra->buffers, len, FLAG_USE_GDMA); +++ } +++ +++ ops->oobretlen = ooblen; +++ ooblen = 0; +++ } +++ +++ // data sequential (burst) write +++ if (datalen && ooblen == 0) { +++ // ranfc can not support write_data_burst, since hw-ecc and fifo constraints.. +++ } +++ +++ // page write +++ while(datalen || ooblen) { +++ int len; +++ int ret; +++ int offs; +++ int ecc_en = 0; +++ +++ ra_dbg("%s (%d): addr:%x, ops data:%p, oob:%p datalen:%x ooblen:%x, ooboffs:%x \n", +++ __func__, i++, (unsigned int)addr, data, oob, datalen, ooblen, ops->ooboffs); +++ +++ page = (int)((addr & ((1<chip_shift)-1)) >> ra->page_shift); //chip boundary +++ +++ /* select chip, and check if it is write protected */ +++ if (nfc_enable_chip(ra, addr, 0)) +++ return -EIO; +++ +++ // oob write +++ if (ops->mode == MTD_OPS_AUTO_OOB) { +++ //fixme, this path is not yet varified +++ nfc_read_oob(ra, page, 0, ra->buffers + pagesize, oobsize, FLAG_NONE); +++ } +++ if (oob && ooblen > 0) { +++ len = nand_write_oob_buf(ra, ra->buffers + pagesize, oob, ooblen, ops->mode, ops->ooboffs); +++ if (len < 0) +++ return -EINVAL; +++ +++ oob += len; +++ ops->oobretlen += len; +++ ooblen -= len; +++ } +++ +++ // data write +++ offs = addr & pagemask; +++ len = min_t(size_t, datalen, pagesize - offs); +++ if (data && len > 0) { +++ memcpy(ra->buffers + offs, data, len); // we can not sure ops->buf wether is DMA-able. +++ +++ data += len; +++ datalen -= len; +++ ops->retlen += len; +++ +++ ecc_en = FLAG_ECC_EN; +++ } +++ ret = nfc_write_page(ra, ra->buffers, page, FLAG_USE_GDMA | FLAG_VERIFY | +++ ((ops->mode == MTD_OPS_RAW || ops->mode == MTD_OPS_PLACE_OOB) ? 0 : ecc_en )); +++ if (ret) { +++ ra_nand_bbt_set(ra, addr >> ra->erase_shift, BBT_TAG_BAD); +++ return ret; +++ } +++ +++ ra_nand_bbt_set(ra, addr >> ra->erase_shift, BBT_TAG_GOOD); +++ +++ addr = (page+1) << ra->page_shift; +++ +++ } +++ return 0; +++} +++ +++/** +++ * nand_do_read_ops - [Internal] Read data with ECC +++ * +++ * @mtd: MTD device structure +++ * @from: offset to read from +++ * @ops: oob ops structure +++ * +++ * Internal function. Called with chip held. +++ */ +++static int nand_do_read_ops(struct ra_nand_chip *ra, loff_t from, +++ struct mtd_oob_ops *ops) +++{ +++ int page; +++ uint32_t datalen = ops->len; +++ uint32_t ooblen = ops->ooblen; +++ uint8_t *oob = ops->oobbuf; +++ uint8_t *data = ops->datbuf; +++ int pagesize = (1<page_shift); +++ int pagemask = (pagesize -1); +++ loff_t addr = from; +++ //int i = 0; //for ra_dbg only +++ +++ ra_dbg("%s: addr:%x, ops data:%p, oob:%p datalen:%x ooblen:%x, ooboffs:%x \n", +++ __func__, (unsigned int)addr, data, oob, datalen, ooblen, ops->ooboffs); +++ +++ ops->retlen = 0; +++ ops->oobretlen = 0; +++ if (data == 0) +++ datalen = 0; +++ +++ +++ while(datalen || ooblen) { +++ int len; +++ int ret; +++ int offs; +++ +++ ra_dbg("%s (%d): addr:%x, ops data:%p, oob:%p datalen:%x ooblen:%x, ooboffs:%x \n", +++ __func__, i++, (unsigned int)addr, data, oob, datalen, ooblen, ops->ooboffs); +++ /* select chip */ +++ if (nfc_enable_chip(ra, addr, 1) < 0) +++ return -EIO; +++ +++ page = (int)((addr & ((1<chip_shift)-1)) >> ra->page_shift); +++ +++ ret = nfc_read_page(ra, ra->buffers, page, FLAG_VERIFY | +++ ((ops->mode == MTD_OPS_RAW || ops->mode == MTD_OPS_PLACE_OOB) ? 0: FLAG_ECC_EN )); +++ //FIXME, something strange here, some page needs 2 more tries to guarantee read success. +++ if (ret) { +++ printk("read again:\n"); +++ ret = nfc_read_page(ra, ra->buffers, page, FLAG_VERIFY | +++ ((ops->mode == MTD_OPS_RAW || ops->mode == MTD_OPS_PLACE_OOB) ? 0: FLAG_ECC_EN )); +++ +++ if (ret) { +++ printk("read again fail \n"); +++ ra_nand_bbt_set(ra, addr >> ra->erase_shift, BBT_TAG_BAD); +++ if ((ret != -EUCLEAN) && (ret != -EBADMSG)) { +++ return ret; +++ } +++ else { +++ /* ecc verification fail, but data need to be returned. */ +++ } +++ } +++ else { +++ printk(" read agian susccess \n"); +++ } +++ } +++ +++ // oob read +++ if (oob && ooblen > 0) { +++ len = nand_read_oob_buf(ra, oob, ooblen, ops->mode, ops->ooboffs); +++ if (len < 0) { +++ printk("nand_read_oob_buf: fail return %x \n", len); +++ return -EINVAL; +++ } +++ +++ oob += len; +++ ops->oobretlen += len; +++ ooblen -= len; +++ } +++ +++ // data read +++ offs = addr & pagemask; +++ len = min_t(size_t, datalen, pagesize - offs); +++ if (data && len > 0) { +++ memcpy(data, ra->buffers + offs, len); // we can not sure ops->buf wether is DMA-able. +++ +++ data += len; +++ datalen -= len; +++ ops->retlen += len; +++ if (ret) +++ return ret; +++ } +++ +++ +++ ra_nand_bbt_set(ra, addr >> ra->erase_shift, BBT_TAG_GOOD); +++ // address go further to next page, instead of increasing of length of write. This avoids some special cases wrong. +++ addr = (page+1) << ra->page_shift; +++ } +++ return 0; +++} +++ +++static int +++ramtd_nand_erase(struct mtd_info *mtd, struct erase_info *instr) +++{ +++ struct ra_nand_chip *ra = (struct ra_nand_chip *)mtd->priv; +++ int ret; +++ +++ ra_dbg("%s: start:%x, len:%x \n", __func__, +++ (unsigned int)instr->addr, (unsigned int)instr->len); +++ +++ nand_get_device(ra, FL_ERASING); +++ ret = _nand_erase_nand((struct ra_nand_chip *)mtd->priv, instr); +++ nand_release_device(ra); +++ +++ return ret; +++} +++ +++static int +++ramtd_nand_write(struct mtd_info *mtd, loff_t to, size_t len, +++ size_t *retlen, const uint8_t *buf) +++{ +++ struct ra_nand_chip *ra = mtd->priv; +++ struct mtd_oob_ops ops; +++ int ret; +++ +++ ra_dbg("%s: to 0x%x len=0x%x\n", __func__, to, len); +++ +++ if ((to + len) > mtd->size) +++ return -EINVAL; +++ +++ if (!len) +++ return 0; +++ +++ nand_get_device(ra, FL_WRITING); +++ +++ memset(&ops, 0, sizeof(ops)); +++ ops.len = len; +++ ops.datbuf = (uint8_t *)buf; +++ ops.oobbuf = NULL; +++ ops.mode = MTD_OPS_AUTO_OOB; +++ +++ ret = nand_do_write_ops(ra, to, &ops); +++ +++ *retlen = ops.retlen; +++ +++ nand_release_device(ra); +++ +++ return ret; +++} +++ +++static int +++ramtd_nand_read(struct mtd_info *mtd, loff_t from, size_t len, +++ size_t *retlen, uint8_t *buf) +++{ +++ struct ra_nand_chip *ra = mtd->priv; +++ int ret; +++ struct mtd_oob_ops ops; +++ +++ ra_dbg("%s: mtd:%p from:%x, len:%x, buf:%p \n", __func__, mtd, (unsigned int)from, len, buf); +++ +++ /* Do not allow reads past end of device */ +++ if ((from + len) > mtd->size) +++ return -EINVAL; +++ if (!len) +++ return 0; +++ +++ nand_get_device(ra, FL_READING); +++ +++ memset(&ops, 0, sizeof(ops)); +++ ops.len = len; +++ ops.datbuf = buf; +++ ops.oobbuf = NULL; +++ ops.mode = MTD_OPS_AUTO_OOB; +++ +++ ret = nand_do_read_ops(ra, from, &ops); +++ +++ *retlen = ops.retlen; +++ +++ nand_release_device(ra); +++ +++ return ret; +++} +++ +++static int +++ramtd_nand_readoob(struct mtd_info *mtd, loff_t from, +++ struct mtd_oob_ops *ops) +++{ +++ struct ra_nand_chip *ra = mtd->priv; +++ int ret; +++ +++ ra_dbg("%s: \n", __func__); +++ +++ nand_get_device(ra, FL_READING); +++ +++ ret = nand_do_read_ops(ra, from, ops); +++ +++ nand_release_device(ra); +++ +++ return ret; +++} +++ +++static int +++ramtd_nand_writeoob(struct mtd_info *mtd, loff_t to, +++ struct mtd_oob_ops *ops) +++{ +++ struct ra_nand_chip *ra = mtd->priv; +++ int ret; +++ +++ nand_get_device(ra, FL_READING); +++ ret = nand_do_write_ops(ra, to, ops); +++ nand_release_device(ra); +++ +++ return ret; +++} +++ +++static int +++ramtd_nand_block_isbad(struct mtd_info *mtd, loff_t offs) +++{ +++ if (offs > mtd->size) +++ return -EINVAL; +++ +++ return nand_block_checkbad((struct ra_nand_chip *)mtd->priv, offs); +++} +++ +++static int +++ramtd_nand_block_markbad(struct mtd_info *mtd, loff_t ofs) +++{ +++ struct ra_nand_chip *ra = mtd->priv; +++ int ret; +++ +++ ra_dbg("%s: \n", __func__); +++ nand_get_device(ra, FL_WRITING); +++ ret = nand_block_markbad(ra, ofs); +++ nand_release_device(ra); +++ +++ return ret; +++} +++ +++// 1-bit error detection +++static int one_bit_correction(char *ecc1, char *ecc2, int *bytes, int *bits) +++{ +++ // check if ecc and expected are all valid +++ char *p, nibble, crumb; +++ int i, xor, iecc1 = 0, iecc2 = 0; +++ +++ printk("correction : %x %x %x\n", ecc1[0], ecc1[1], ecc1[2]); +++ printk("correction : %x %x %x\n", ecc2[0], ecc2[1], ecc2[2]); +++ +++ p = (char *)ecc1; +++ for (i = 0; i < CONFIG_ECC_BYTES; i++) +++ { +++ nibble = *(p+i) & 0xf; +++ if ((nibble != 0x0) && (nibble != 0xf) && (nibble != 0x3) && (nibble != 0xc) && +++ (nibble != 0x5) && (nibble != 0xa) && (nibble != 0x6) && (nibble != 0x9)) +++ return -1; +++ nibble = ((*(p+i)) >> 4) & 0xf; +++ if ((nibble != 0x0) && (nibble != 0xf) && (nibble != 0x3) && (nibble != 0xc) && +++ (nibble != 0x5) && (nibble != 0xa) && (nibble != 0x6) && (nibble != 0x9)) +++ return -1; +++ } +++ +++ p = (char *)ecc2; +++ for (i = 0; i < CONFIG_ECC_BYTES; i++) +++ { +++ nibble = *(p+i) & 0xf; +++ if ((nibble != 0x0) && (nibble != 0xf) && (nibble != 0x3) && (nibble != 0xc) && +++ (nibble != 0x5) && (nibble != 0xa) && (nibble != 0x6) && (nibble != 0x9)) +++ return -1; +++ nibble = ((*(p+i)) >> 4) & 0xf; +++ if ((nibble != 0x0) && (nibble != 0xf) && (nibble != 0x3) && (nibble != 0xc) && +++ (nibble != 0x5) && (nibble != 0xa) && (nibble != 0x6) && (nibble != 0x9)) +++ return -1; +++ } +++ +++ memcpy(&iecc1, ecc1, 3); +++ memcpy(&iecc2, ecc2, 3); +++ +++ xor = iecc1 ^ iecc2; +++ printk("xor = %x (%x %x)\n", xor, iecc1, iecc2); +++ +++ *bytes = 0; +++ for (i = 0; i < 9; i++) +++ { +++ crumb = (xor >> (2*i)) & 0x3; +++ if ((crumb == 0x0) || (crumb == 0x3)) +++ return -1; +++ if (crumb == 0x2) +++ *bytes += (1 << i); +++ } +++ +++ *bits = 0; +++ for (i = 0; i < 3; i++) +++ { +++ crumb = (xor >> (18 + 2*i)) & 0x3; +++ if ((crumb == 0x0) || (crumb == 0x3)) +++ return -1; +++ if (crumb == 0x2) +++ *bits += (1 << i); +++ } +++ +++ return 0; +++} +++ +++/************************************************************ +++ * the init/exit section. +++ */ +++ +++static struct nand_ecclayout ra_oob_layout = { +++ .eccbytes = CONFIG_ECC_BYTES, +++ .eccpos = {5, 6, 7}, +++ .oobfree = { +++ {.offset = 0, .length = 4}, +++ {.offset = 8, .length = 8}, +++ {.offset = 0, .length = 0} +++ }, +++#define RA_CHIP_OOB_AVAIL (4+8) +++ .oobavail = RA_CHIP_OOB_AVAIL, +++ // 5th byte is bad-block flag. +++}; +++ +++static int +++mtk_nand_probe(struct platform_device *pdev) +++{ +++ struct mtd_part_parser_data ppdata; +++ struct ra_nand_chip *ra; +++ int alloc_size, bbt_size, buffers_size, reg, err; +++ unsigned char chip_mode = 12; +++ +++ /* if(ra_check_flash_type()!=BOOT_FROM_NAND) { +++ return 0; +++ }*/ +++ +++ //FIXME: config 512 or 2048-byte page according to HWCONF +++#if defined (CONFIG_SOC_MT7620) +++ ra_outl(RALINK_SYSCTL_BASE+0x60, ra_inl(RALINK_SYSCTL_BASE+0x60) & ~(0x3<<18)); +++ reg = ra_inl(RALINK_SYSCTL_BASE+0x10); +++ chip_mode = (reg & 0x0F); +++ if((chip_mode==1)||(chip_mode==11)) { +++ ra_or(NFC_CONF1, 1); +++ is_nand_page_2048 = 1; +++ nand_addrlen = ((chip_mode!=11) ? 4 : 5); +++ printk("!!! nand page size = 2048, addr len=%d\n", nand_addrlen); +++ } +++ else { +++ ra_and(NFC_CONF1, ~1); +++ is_nand_page_2048 = 0; +++ nand_addrlen = ((chip_mode!=10) ? 3 : 4); +++ printk("!!! nand page size = 512, addr len=%d\n", nand_addrlen); +++ } +++#else +++ is_nand_page_2048 = 0; +++ nand_addrlen = 3; +++ printk("!!! nand page size = 512, addr len=%d\n", nand_addrlen); +++#endif +++ +++#if defined (CONFIG_SOC_MT7620) +++ //config ECC location +++ ra_and(NFC_CONF1, 0xfff000ff); +++ ra_or(NFC_CONF1, ((CONFIG_ECC_OFFSET + 2) << 16) + +++ ((CONFIG_ECC_OFFSET + 1) << 12) + +++ (CONFIG_ECC_OFFSET << 8)); +++#endif +++ +++#define ALIGNE_16(a) (((unsigned long)(a)+15) & ~15) +++ buffers_size = ALIGNE_16((1<buffers +++ bbt_size = BBTTAG_BITS * (1<<(CONFIG_CHIP_SIZE_BIT - (CONFIG_PAGE_SIZE_BIT + CONFIG_NUMPAGE_PER_BLOCK_BIT))) / 8; //ra->bbt +++ bbt_size = ALIGNE_16(bbt_size); +++ +++ alloc_size = buffers_size + bbt_size; +++ alloc_size += buffers_size; //for ra->readback_buffers +++ alloc_size += sizeof(*ra); +++ alloc_size += sizeof(*ranfc_mtd); +++ +++ //make sure gpio-0 is input +++ ra_outl(RALINK_PIO_BASE+0x24, ra_inl(RALINK_PIO_BASE+0x24) & ~0x01); +++ +++ ra = (struct ra_nand_chip *)kzalloc(alloc_size, GFP_KERNEL | GFP_DMA); +++ if (!ra) { +++ printk("%s: mem alloc fail \n", __func__); +++ return -ENOMEM; +++ } +++ memset(ra, 0, alloc_size); +++ +++ //dynamic +++ ra->buffers = (char *)((char *)ra + sizeof(*ra)); +++ ra->readback_buffers = ra->buffers + buffers_size; +++ ra->bbt = ra->readback_buffers + buffers_size; +++ ranfc_mtd = (struct mtd_info *)(ra->bbt + bbt_size); +++ +++ //static +++ ra->numchips = CONFIG_NUMCHIPS; +++ ra->chip_shift = CONFIG_CHIP_SIZE_BIT; +++ ra->page_shift = CONFIG_PAGE_SIZE_BIT; +++ ra->oob_shift = CONFIG_OOBSIZE_PER_PAGE_BIT; +++ ra->erase_shift = (CONFIG_PAGE_SIZE_BIT + CONFIG_NUMPAGE_PER_BLOCK_BIT); +++ ra->badblockpos = CONFIG_BAD_BLOCK_POS; +++ ra_oob_layout.eccpos[0] = CONFIG_ECC_OFFSET; +++ ra_oob_layout.eccpos[1] = CONFIG_ECC_OFFSET + 1; +++ ra_oob_layout.eccpos[2] = CONFIG_ECC_OFFSET + 2; +++ ra->oob = &ra_oob_layout; +++ ra->buffers_page = -1; +++ +++#if defined (WORKAROUND_RX_BUF_OV) +++ if (ranfc_verify) { +++ ra->sandbox_page = nand_bbt_find_sandbox(ra); +++ } +++#endif +++ ra_outl(NFC_CTRL, ra_inl(NFC_CTRL) | 0x01); //set wp to high +++ nfc_all_reset(); +++ +++ ranfc_mtd->type = MTD_NANDFLASH; +++ ranfc_mtd->flags = MTD_CAP_NANDFLASH; +++ ranfc_mtd->size = CONFIG_NUMCHIPS * CFG_CHIPSIZE; +++ ranfc_mtd->erasesize = CFG_BLOCKSIZE; +++ ranfc_mtd->writesize = CFG_PAGESIZE; +++ ranfc_mtd->writebufsize = ranfc_mtd->writesize; +++ ranfc_mtd->oobsize = CFG_PAGE_OOBSIZE; +++ ranfc_mtd->oobavail = RA_CHIP_OOB_AVAIL; +++ ranfc_mtd->name = "ra_nfc"; +++ //ranfc_mtd->index +++ //ranfc_mtd->ecclayout = &ra_oob_layout; +++ //ranfc_mtd->numberaseregions +++ //ranfc_mtd->eraseregions +++ //ranfc_mtd->bansize +++ ranfc_mtd->_erase = ramtd_nand_erase; +++ //ranfc_mtd->point +++ //ranfc_mtd->unpoint +++ ranfc_mtd->_read = ramtd_nand_read; +++ ranfc_mtd->_write = ramtd_nand_write; +++ //ranfc_mtd->_read_oob = ramtd_nand_readoob; +++ //ranfc_mtd->_write_oob = ramtd_nand_writeoob; +++ //ranfc_mtd->get_fact_prot_info; ranfc_mtd->read_fact_prot_reg; +++ //ranfc_mtd->get_user_prot_info; ranfc_mtd->read_user_prot_reg; +++ //ranfc_mtd->write_user_prot_reg; ranfc_mtd->lock_user_prot_reg; +++ //ranfc_mtd->writev; ranfc_mtd->sync; ranfc_mtd->lock; ranfc_mtd->unlock; ranfc_mtd->suspend; ranfc_mtd->resume; +++ ranfc_mtd->_block_isbad = ramtd_nand_block_isbad; +++ ranfc_mtd->_block_markbad = ramtd_nand_block_markbad; +++ //ranfc_mtd->reboot_notifier +++ //ranfc_mtd->ecc_stats; +++ // subpage_sht; +++ +++ //ranfc_mtd->get_device; ranfc_mtd->put_device +++ ranfc_mtd->priv = ra; +++ +++ ranfc_mtd->owner = THIS_MODULE; +++ ra->controller = &ra->hwcontrol; +++ mutex_init(ra->controller); +++ +++ printk("%s: alloc %x, at %p , btt(%p, %x), ranfc_mtd:%p\n", +++ __func__, alloc_size, ra, ra->bbt, bbt_size, ranfc_mtd); +++ +++ mtd_set_of_node(ranfc_mtd, pdev->dev.of_node); +++ err = mtd_device_parse_register(ranfc_mtd, mtk_probe_types, +++ &ppdata, NULL, 0); +++ +++ return err; +++} +++ +++static int +++mtk_nand_remove(struct platform_device *pdev) +++{ +++ struct ra_nand_chip *ra; +++ +++ if (ranfc_mtd) { +++ ra = (struct ra_nand_chip *)ranfc_mtd->priv; +++ +++ /* Deregister partitions */ +++ //del_mtd_partitions(ranfc_mtd); +++ kfree(ra); +++ } +++ return 0; +++} +++ +++static const struct of_device_id mtk_nand_match[] = { +++ { .compatible = "mtk,mt7620-nand" }, +++ {}, +++}; +++MODULE_DEVICE_TABLE(of, mtk_nand_match); +++ +++static struct platform_driver mtk_nand_driver = { +++ .probe = mtk_nand_probe, +++ .remove = mtk_nand_remove, +++ .driver = { +++ .name = "mt7620_nand", +++ .owner = THIS_MODULE, +++ .of_match_table = mtk_nand_match, +++ }, +++}; +++ +++module_platform_driver(mtk_nand_driver); +++ +++MODULE_LICENSE("GPL"); ++--- /dev/null +++++ b/drivers/mtd/maps/ralink_nand.h ++@@ -0,0 +1,240 @@ +++#ifndef RT2880_NAND_H +++#define RT2880_NAND_H +++ +++#include +++ +++#define MTD_ERASE_PENDING 0x01 +++#define MTD_ERASING 0x02 +++#define MTD_ERASE_SUSPEND 0x04 +++#define MTD_ERASE_DONE 0x08 +++#define MTD_ERASE_FAILED 0x10 +++ +++#define MTD_FAIL_ADDR_UNKNOWN -1LL +++ +++//#include "gdma.h" +++ +++#define RALINK_SYSCTL_BASE 0xB0000000 +++#define RALINK_PIO_BASE 0xB0000600 +++#define RALINK_NAND_CTRL_BASE 0xB0000810 +++#define CONFIG_RALINK_MT7620 +++ +++#define SKIP_BAD_BLOCK +++//#define RANDOM_GEN_BAD_BLOCK +++ +++#define ra_inl(addr) (*(volatile unsigned int *)(addr)) +++#define ra_outl(addr, value) (*(volatile unsigned int *)(addr) = (value)) +++#define ra_aor(addr, a_mask, o_value) ra_outl(addr, (ra_inl(addr) & (a_mask)) | (o_value)) +++#define ra_and(addr, a_mask) ra_aor(addr, a_mask, 0) +++#define ra_or(addr, o_value) ra_aor(addr, -1, o_value) +++ +++ +++#define CONFIG_NUMCHIPS 1 +++#define CONFIG_NOT_SUPPORT_WP //rt3052 has no WP signal for chip. +++//#define CONFIG_NOT_SUPPORT_RB +++ +++extern int is_nand_page_2048; +++extern const unsigned int nand_size_map[2][3]; +++ +++//chip +++// chip geometry: SAMSUNG small size 32MB. +++#define CONFIG_CHIP_SIZE_BIT (nand_size_map[is_nand_page_2048][nand_addrlen-3]) //! (1<=32)? 31 : CONFIG_CHIP_SIZE_BIT)) +++//#define CFG_CHIPSIZE (1 << CONFIG_CHIP_SIZE_BIT) +++#define CFG_PAGESIZE (1 << CONFIG_PAGE_SIZE_BIT) +++#define CFG_BLOCKSIZE (CFG_PAGESIZE << CONFIG_NUMPAGE_PER_BLOCK_BIT) +++#define CFG_NUMPAGE (1 << (CONFIG_CHIP_SIZE_BIT - CONFIG_PAGE_SIZE_BIT)) +++#define CFG_NUMBLOCK (CFG_NUMPAGE >> CONFIG_NUMPAGE_PER_BLOCK_BIT) +++#define CFG_BLOCK_OOBSIZE (1 << (CONFIG_OOBSIZE_PER_PAGE_BIT + CONFIG_NUMPAGE_PER_BLOCK_BIT)) +++#define CFG_PAGE_OOBSIZE (1 << CONFIG_OOBSIZE_PER_PAGE_BIT) +++ +++#define NAND_BLOCK_ALIGN(addr) ((addr) & (CFG_BLOCKSIZE-1)) +++#define NAND_PAGE_ALIGN(addr) ((addr) & (CFG_PAGESIZE-1)) +++ +++ +++#define NFC_BASE RALINK_NAND_CTRL_BASE +++#define NFC_CTRL (NFC_BASE + 0x0) +++#define NFC_CONF (NFC_BASE + 0x4) +++#define NFC_CMD1 (NFC_BASE + 0x8) +++#define NFC_CMD2 (NFC_BASE + 0xc) +++#define NFC_CMD3 (NFC_BASE + 0x10) +++#define NFC_ADDR (NFC_BASE + 0x14) +++#define NFC_DATA (NFC_BASE + 0x18) +++#if defined (CONFIG_RALINK_RT6855) || defined (CONFIG_RALINK_RT6855A) || \ +++ defined (CONFIG_RALINK_MT7620) || defined (CONFIG_RALINK_MT7621) +++#define NFC_ECC (NFC_BASE + 0x30) +++#else +++#define NFC_ECC (NFC_BASE + 0x1c) +++#endif +++#define NFC_STATUS (NFC_BASE + 0x20) +++#define NFC_INT_EN (NFC_BASE + 0x24) +++#define NFC_INT_ST (NFC_BASE + 0x28) +++#if defined (CONFIG_RALINK_RT6855) || defined (CONFIG_RALINK_RT6855A) || \ +++ defined (CONFIG_RALINK_MT7620) || defined (CONFIG_RALINK_MT7621) +++#define NFC_CONF1 (NFC_BASE + 0x2c) +++#define NFC_ECC_P1 (NFC_BASE + 0x30) +++#define NFC_ECC_P2 (NFC_BASE + 0x34) +++#define NFC_ECC_P3 (NFC_BASE + 0x38) +++#define NFC_ECC_P4 (NFC_BASE + 0x3c) +++#define NFC_ECC_ERR1 (NFC_BASE + 0x40) +++#define NFC_ECC_ERR2 (NFC_BASE + 0x44) +++#define NFC_ECC_ERR3 (NFC_BASE + 0x48) +++#define NFC_ECC_ERR4 (NFC_BASE + 0x4c) +++#define NFC_ADDR2 (NFC_BASE + 0x50) +++#endif +++ +++enum _int_stat { +++ INT_ST_ND_DONE = 1<<0, +++ INT_ST_TX_BUF_RDY = 1<<1, +++ INT_ST_RX_BUF_RDY = 1<<2, +++ INT_ST_ECC_ERR = 1<<3, +++ INT_ST_TX_TRAS_ERR = 1<<4, +++ INT_ST_RX_TRAS_ERR = 1<<5, +++ INT_ST_TX_KICK_ERR = 1<<6, +++ INT_ST_RX_KICK_ERR = 1<<7 +++}; +++ +++ +++//#define WORKAROUND_RX_BUF_OV 1 +++ +++ +++/************************************************************* +++ * stolen from nand.h +++ *************************************************************/ +++ +++/* +++ * Standard NAND flash commands +++ */ +++#define NAND_CMD_READ0 0 +++#define NAND_CMD_READ1 1 +++#define NAND_CMD_RNDOUT 5 +++#define NAND_CMD_PAGEPROG 0x10 +++#define NAND_CMD_READOOB 0x50 +++#define NAND_CMD_ERASE1 0x60 +++#define NAND_CMD_STATUS 0x70 +++#define NAND_CMD_STATUS_MULTI 0x71 +++#define NAND_CMD_SEQIN 0x80 +++#define NAND_CMD_RNDIN 0x85 +++#define NAND_CMD_READID 0x90 +++#define NAND_CMD_ERASE2 0xd0 +++#define NAND_CMD_RESET 0xff +++ +++/* Extended commands for large page devices */ +++#define NAND_CMD_READSTART 0x30 +++#define NAND_CMD_RNDOUTSTART 0xE0 +++#define NAND_CMD_CACHEDPROG 0x15 +++ +++/* Extended commands for AG-AND device */ +++/* +++ * Note: the command for NAND_CMD_DEPLETE1 is really 0x00 but +++ * there is no way to distinguish that from NAND_CMD_READ0 +++ * until the remaining sequence of commands has been completed +++ * so add a high order bit and mask it off in the command. +++ */ +++#define NAND_CMD_DEPLETE1 0x100 +++#define NAND_CMD_DEPLETE2 0x38 +++#define NAND_CMD_STATUS_MULTI 0x71 +++#define NAND_CMD_STATUS_ERROR 0x72 +++/* multi-bank error status (banks 0-3) */ +++#define NAND_CMD_STATUS_ERROR0 0x73 +++#define NAND_CMD_STATUS_ERROR1 0x74 +++#define NAND_CMD_STATUS_ERROR2 0x75 +++#define NAND_CMD_STATUS_ERROR3 0x76 +++#define NAND_CMD_STATUS_RESET 0x7f +++#define NAND_CMD_STATUS_CLEAR 0xff +++ +++#define NAND_CMD_NONE -1 +++ +++/* Status bits */ +++#define NAND_STATUS_FAIL 0x01 +++#define NAND_STATUS_FAIL_N1 0x02 +++#define NAND_STATUS_TRUE_READY 0x20 +++#define NAND_STATUS_READY 0x40 +++#define NAND_STATUS_WP 0x80 +++ +++typedef enum { +++ FL_READY, +++ FL_READING, +++ FL_WRITING, +++ FL_ERASING, +++ FL_SYNCING, +++ FL_CACHEDPRG, +++ FL_PM_SUSPENDED, +++} nand_state_t; +++ +++/*************************************************************/ +++ +++ +++ +++typedef enum _ra_flags { +++ FLAG_NONE = 0, +++ FLAG_ECC_EN = (1<<0), +++ FLAG_USE_GDMA = (1<<1), +++ FLAG_VERIFY = (1<<2), +++} RA_FLAGS; +++ +++ +++#define BBTTAG_BITS 2 +++#define BBTTAG_BITS_MASK ((1<> ./target/linux/rockchip/armv8/config-5.15 diff --git a/onekey/build.sh b/onekey/build.sh deleted file mode 100755 index a045664c4887..000000000000 --- a/onekey/build.sh +++ /dev/null @@ -1,159 +0,0 @@ -#/bin/bash -echo -echo -echo "本脚本仅适用于在Ubuntu环境下编译 https://github.com/kiddin9/OpenWrt_x86-r2s-r4s" -echo -echo -sleep 2s -sudo apt-get update -sudo apt-get upgrade - -sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc-s1 libc6-dev-i386 subversion flex uglifyjs gcc-multilib g++-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils libelf-dev autoconf automake libtool autopoint device-tree-compiler ccache xsltproc rename antlr3 gperf curl screen upx-ucl jq - - - -clear -echo -echo -echo -echo "|*******************************************|" -echo "| |" -echo "| |" -echo "| 基本环境部署完成...... |" -echo "| |" -echo "| |" -echo "|*******************************************|" -echo -echo - - -if [ "$USER" == "root" ]; then - echo - echo - echo "请勿使用root用户编译,换一个普通用户吧~~" - sleep 3s - exit 0 -fi - - - - - -rm -Rf openwrt - -echo " - -1. X86_64 - -2. r2s - -3. r4s - -4. Rpi-4B - -5. Exit - -" - -while :; do - -read -p "你想要编译哪个固件? " CHOOSE - -case $CHOOSE in - 1) - firmware="x86_64" - break - ;; - 2) - firmware="nanopi-r2s" - break - ;; - 3) - firmware="nanopi-r4s" - break - ;; - 4) - firmware="Rpi-4B" - break - ;; - 5) exit 0 - ;; - -esac -done - -REPO_BRANCH="$(curl -s https://api.github.com/repos/openwrt/openwrt/tags | jq -r '.[].name' | grep v21 | head -n 1 | sed -e 's/v//')" -git clone -b v$REPO_BRANCH https://github.com/openwrt/openwrt -svn export https://github.com/kiddin9/OpenWrt_x86-r2s-r4s/trunk/devices openwrt/devices - -cd openwrt -if [[ $firmware == "x86_64" ]]; then - curl -fL -o sdk.tar.xz https://mirrors.cloud.tencent.com/openwrt/releases/$REPO_BRANCH/targets/x86/64/openwrt-sdk-$REPO_BRANCH-x86-64_gcc-8.4.0_musl.Linux-x86_64.tar.xz || curl -fL -o sdk.tar.xz https://downloads.openwrt.org/releases/21.02-SNAPSHOT/targets/x86/64/openwrt-sdk-21.02-SNAPSHOT-x86-64_gcc-8.4.0_musl.Linux-x86_64.tar.xz -elif [[ $firmware == nanopi-* ]]; then - curl -fL -o sdk.tar.xz https://mirrors.cloud.tencent.com/openwrt/releases/$REPO_BRANCH/targets/rockchip/armv8/openwrt-sdk-$REPO_BRANCH-rockchip-armv8_gcc-8.4.0_musl.Linux-x86_64.tar.xz || curl -fL -o sdk.tar.xz https://downloads.openwrt.org/releases/21.02-SNAPSHOT/targets/rockchip/armv8/openwrt-sdk-21.02-SNAPSHOT-rockchip-armv8_gcc-8.4.0_musl.Linux-x86_64.tar.xz -elif [[ $firmware == "Rpi-4B" ]]; then - curl -fL -o sdk.tar.xz https://mirrors.cloud.tencent.com/openwrt/releases/$REPO_BRANCH/targets/bcm27xx/bcm2711/openwrt-sdk-$REPO_BRANCH-bcm27xx-bcm2711_gcc-8.4.0_musl.Linux-x86_64.tar.xz || curl -fL -o sdk.tar.xz https://downloads.openwrt.org/releases/21.02-SNAPSHOT/targets/bcm27xx/bcm2711/openwrt-sdk-21.02-SNAPSHOT-bcm27xx-bcm2711_gcc-8.4.0_musl.Linux-x86_64.tar.xz -fi - - -read -p "请输入后台地址 [回车默认10.0.0.1]: " ip -ip=${ip:-"10.0.0.1"} -echo "您的后台地址为: $ip" -cp -rf devices/common/* ./ -cp -rf devices/$firmware/* ./ -if [ -f "devices/common/diy.sh" ]; then - chmod +x devices/common/diy.sh - /bin/bash "devices/common/diy.sh" -fi -if [ -f "devices/$firmware/diy.sh" ]; then - chmod +x devices/$firmware/diy.sh - /bin/bash "devices/$firmware/diy.sh" -fi -cp -Rf ./diy/* ./ -if [ -f "devices/common/default-settings" ]; then - sed -i 's/10.0.0.1/$ip/' package/*/*/my-default-settings/files/etc/uci-defaults/99-default-settings -fi -if [ -f "devices/$firmware/default-settings" ]; then - sed -i "s/10.0.0.1/$ip/" devices/$firmware/default-settings - cat devices/$firmware/default-settings >> package/*/*/my-default-settings/files/etc/uci-defaults/99-default-settings -fi -if [ -n "$(ls -A "devices/common/patches" 2>/dev/null)" ]; then - find "devices/common/patches" -type f -name '*.patch' ! -name '*.revert.patch' -print0 | sort -z | xargs -I % -t -0 -n 1 sh -c "cat '%' | patch -d './' -p1 --forward" -fi -if [ -n "$(ls -A "devices/$firmware/patches" 2>/dev/null)" ]; then - find "devices/$firmware/patches" -type f -name '*.patch' ! -name '*.revert.patch' -print0 | sort -z | xargs -I % -t -0 -n 1 sh -c "cat '%' | patch -d './' -p1 --forward" -fi -cp devices/common/.config .config -echo >> .config -cat devices/$firmware/.config >> .config -make defconfig -for i in $(make --file=preset_pkg.mk presetpkg); do - sed -i "\$a CONFIG_PACKAGE_$i=y" .config -done -make menuconfig -echo -echo -echo -echo " *****5秒后开始编译***** - -1.你可以随时按Ctrl+C停止编译 - -3.大陆用户编译前请准备好梯子,使用大陆白名单或全局模式" -echo -echo -echo -sleep 3s - -make -j$(($(nproc)+1)) download -j$(($(nproc)+1)) & -make -j$(($(nproc)+1)) || make -j1 V=s - -if [ "$?" == "0" ]; then -echo " - -编译完成~~~ - -初始后台地址: $ip -初始用户名密码: root root - -" -fi diff --git a/onekey/rebuild.sh b/onekey/rebuild.sh deleted file mode 100755 index d9753505027e..000000000000 --- a/onekey/rebuild.sh +++ /dev/null @@ -1,126 +0,0 @@ -#/bin/bash -echo -echo -echo "本脚本仅适用于在Ubuntu环境下编译 https://github.com/kiddin9/OpenWrt_x86-r2s-r4s" -echo -echo - -if [ "$USER" == "root" ]; then - echo - echo - echo "请勿使用root用户编译,换一个普通用户吧~~" - sleep 3s - exit 0 -fi - -echo -echo - -clear - -rm -Rf openwrt/common openwrt/files openwrt/devices -svn export https://github.com/kiddin9/OpenWrt_x86-r2s-r4s/trunk/devices openwrt/devices -cd openwrt - -git checkout . -git pull - -[ $(grep '^CONFIG_TARGET.*DEVICE.*=y' .config | sed -r 's/.*DEVICE_(.*)=y/\1/') == generic ] && { - firmware=$(grep '^CONFIG_TARGET.*DEVICE.*=y' .config | sed -r 's/CONFIG_TARGET_(.*)_DEVICE_.*=y/\1/') - } || { firmware=$(grep '^CONFIG_TARGET.*DEVICE.*=y' .config | sed -r 's/.*DEVICE_(.*)=y/\1/') - } - -if [ $firmware == "x86_64" ]; then - firmware="x86_64" -elif [ $firmware == "friendlyarm_nanopi-r2s" ]; then - firmware="nanopi-r2s" -elif [ $firmware == "friendlyarm_nanopi-r4s" ]; then - firmware="nanopi-r4s" -elif [ $firmware == "rpi-4" ]; then - firmware="Rpi-4B" -elif [ $firmware == "d-team_newifi-d2" ]; then - firmware="newifi-d2" -else - echo "无法识别固件类型,请退出" -fi - -echo - -read -p "请输入后台地址 [回车默认10.0.0.1]: " ip -ip=${ip:-"10.0.0.1"} -echo "您的后台地址为: $ip" - -rm -Rf feeds package/feeds common files diy tmp -make clean -[ -f ".config" ] && mv .config .config.bak -cp -rf devices/common/* ./ -cp -rf devices/$firmware/* ./ -if [ -f "devices/common/diy.sh" ]; then - chmod +x devices/common/diy.sh - /bin/bash "devices/common/diy.sh" -fi -if [ -f "devices/$firmware/diy.sh" ]; then - chmod +x devices/$firmware/diy.sh - /bin/bash "devices/$firmware/diy.sh" -fi -cp -Rf ./diy/* ./ -if [ -f "devices/common/default-settings" ]; then - sed -i 's/10.0.0.1/$ip/' package/*/*/my-default-settings/files/uci.defaults -fi -if [ -f "devices/$firmware/default-settings" ]; then - sed -i 's/10.0.0.1/$ip/' devices/$firmware/default-settings - cat devices/$firmware/default-settings >> package/*/*/my-default-settings/files/uci.defaults -fi -if [ -n "$(ls -A "devices/common/patches" 2>/dev/null)" ]; then - find "devices/common/patches" -type f -name '*.patch' ! -name '*.revert.patch' -print0 | sort -z | xargs -I % -t -0 -n 1 sh -c "cat '%' | patch -d './' -p1 --forward" -fi -if [ -n "$(ls -A "devices/$firmware/patches" 2>/dev/null)" ]; then - find "devices/$firmware/patches" -type f -name '*.patch' ! -name '*.revert.patch' -print0 | sort -z | xargs -I % -t -0 -n 1 sh -c "cat '%' | patch -d './' -p1 --forward" -fi -[ -f ".config.bak" ] && cp -f .config.bak .config || { -cp -f devices/common/.config .config -echo >> .config -cat devices/$firmware/.config >> .config -} - -[ firmware == "other" ] || { -while true; do -read -p "是否增删插件? [y/N]: " YN -case ${YN:-N} in - [Yy]) - make menuconfig - echo "" - ;; - [Nn]) - make defconfig - break - ;; -esac -done -} -echo -echo -echo " *****5秒后开始编译***** - -1.你可以随时按Ctrl+C停止编译 - -3.大陆用户编译前请准备好梯子,使用大陆白名单或全局模式" -echo -echo -sleep 3s - -sed -i 's,$(STAGING_DIR_HOST)/bin/upx,upx,' package/feeds/kiddin9/*/Makefile - -make -j$(($(nproc)+1)) download v=s ; make -j$(($(nproc)+1)) || make -j1 V=s - -if [ "$?" == "0" ]; then -echo " - -编译完成~~~ - -初始后台地址: $ip -初始用户名密码: root root - -" -fi - From a90968ceab9218b9e606f79aaeafa39a2658ba64 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Fri, 27 Jan 2023 05:56:01 +0800 Subject: [PATCH 03/28] update --- devices/ramips_mt7620/patches/hiwifi_r33.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devices/ramips_mt7620/patches/hiwifi_r33.patch b/devices/ramips_mt7620/patches/hiwifi_r33.patch index 2c4febb1daa3..0ea34bc1f0cb 100644 --- a/devices/ramips_mt7620/patches/hiwifi_r33.patch +++ b/devices/ramips_mt7620/patches/hiwifi_r33.patch @@ -403,7 +403,7 @@ index 9f71dc918e50a..9c1aa42326e82 100755 default_do_upgrade "$1" ;; diff --git a/target/linux/ramips/mt7620/config-5.10 b/target/linux/ramips/mt7620/config-5.10 -index 135c1689e164d..a4c5afbd611fc 100644 +index 135c1689e164d..c2c06b9996b45 100644 --- a/target/linux/ramips/mt7620/config-5.10 +++ b/target/linux/ramips/mt7620/config-5.10 @@ -32,7 +32,13 @@ CONFIG_CPU_SUPPORTS_HIGHMEM=y From 54443f15c5c0c1f634f523209cf317f16332b196 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Fri, 27 Jan 2023 06:19:27 +0800 Subject: [PATCH 04/28] update --- .github/workflows/Openwrt-AutoBuild.yml | 9 +++++++++ devices/common/diy.sh | 10 ---------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/.github/workflows/Openwrt-AutoBuild.yml b/.github/workflows/Openwrt-AutoBuild.yml index 959c2405def0..0ddeaa956159 100644 --- a/.github/workflows/Openwrt-AutoBuild.yml +++ b/.github/workflows/Openwrt-AutoBuild.yml @@ -203,6 +203,15 @@ jobs: find "devices/${{matrix.target}}/patches" -maxdepth 1 -type f -name '*.patch' -print0 | sort -z | xargs -I % -t -0 -n 1 sh -c "cat '%' | patch -d './' -B --merge -p1 -E --forward" #git apply devices/${{matrix.target}}/patches/*.patch fi + sed -i '$a \ + CONFIG_CPU_FREQ_GOV_POWERSAVE=y \ + CONFIG_CPU_FREQ_GOV_USERSPACE=y \ + CONFIG_CPU_FREQ_GOV_ONDEMAND=y \ + CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y \ + CONFIG_CRYPTO_CHACHA20_NEON=y \ + CONFIG_CRYPTO_CHACHA20POLY1305=y \ + CONFIG_FAT_DEFAULT_IOCHARSET="utf8" \ + ' `find target/linux -path "target/linux/*/config-*"` - name: Default PPPOE Setting if: env.PPPOE_USERNAME && env.PPPOE_PASSWD diff --git a/devices/common/diy.sh b/devices/common/diy.sh index f51037900ef1..a69d97b0e79c 100644 --- a/devices/common/diy.sh +++ b/devices/common/diy.sh @@ -51,16 +51,6 @@ sed -i 's/max_requests 3/max_requests 20/g' package/network/services/uhttpd/file #rm -rf ./feeds/packages/lang/{golang,node} sed -i "s/tty\(0\|1\)::askfirst/tty\1::respawn/g" target/linux/*/base-files/etc/inittab -sed -i '$a \ -CONFIG_CPU_FREQ_GOV_POWERSAVE=y \ -CONFIG_CPU_FREQ_GOV_USERSPACE=y \ -CONFIG_CPU_FREQ_GOV_ONDEMAND=y \ -CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y \ -CONFIG_CRYPTO_CHACHA20_NEON=y \ -CONFIG_CRYPTO_CHACHA20POLY1305=y \ -CONFIG_FAT_DEFAULT_IOCHARSET="utf8" \ -' `find target/linux -path "target/linux/*/config-*"` - date=`date +%m.%d.%Y` sed -i -e "/\(# \)\?REVISION:=/c\REVISION:=$date" -e '/VERSION_CODE:=/c\VERSION_CODE:=$(REVISION)' include/version.mk From 2b6b86e3d05daca2d9475ef12ffae6943f9f3aea Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Fri, 27 Jan 2023 16:47:47 +0800 Subject: [PATCH 05/28] Update diy.sh --- devices/ipq807x/diy.sh | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/devices/ipq807x/diy.sh b/devices/ipq807x/diy.sh index ad7f64c851b6..73e0e32f3b95 100644 --- a/devices/ipq807x/diy.sh +++ b/devices/ipq807x/diy.sh @@ -9,16 +9,9 @@ svn co https://github.com/coolsnowwolf/lede/trunk/target/linux/generic/hack-5.15 rm -rf feeds/kiddin9/{rtl8821cu,rtl88x2bu} package/kernel/mt76 -sed -i "s/tty\(0\|1\)::askfirst/tty\1::respawn/g" target/linux/*/base-files/etc/inittab +git clone https://github.com/robimarko/nss-packages --depth 1 package/nss-packages -sed -i '$a \ -CONFIG_CPU_FREQ_GOV_POWERSAVE=y \ -CONFIG_CPU_FREQ_GOV_USERSPACE=y \ -CONFIG_CPU_FREQ_GOV_ONDEMAND=y \ -CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y \ -' target/linux/ipq807x/config-5.15 - echo " CONFIG_PACKAGE_kmod-ipt-coova=n CONFIG_PACKAGE_kmod-pf-ring=n From 7baf8a6be8f1ed92fe7d384ba5f3606b308b58d8 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Fri, 27 Jan 2023 17:38:43 +0800 Subject: [PATCH 06/28] update --- devices/ipq807x/patches/usb3.patch | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 devices/ipq807x/patches/usb3.patch diff --git a/devices/ipq807x/patches/usb3.patch b/devices/ipq807x/patches/usb3.patch deleted file mode 100644 index d40660132d11..000000000000 --- a/devices/ipq807x/patches/usb3.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/package/kernel/linux/modules/usb.mk -+++ b/package/kernel/linux/modules/usb.mk -@@ -494,7 +494,7 @@ $(eval $(call KernelPackage,usb-dwc3)) - - define KernelPackage/usb-dwc3-qcom - TITLE:=DWC3 Qualcomm USB driver -- DEPENDS:=@(TARGET_ipq40xx||TARGET_ipq806x) +kmod-usb-dwc3 -+ DEPENDS:=@(TARGET_ipq40xx||TARGET_ipq806x||TARGET_ipq807x) +kmod-usb-dwc3 - KCONFIG:= CONFIG_USB_DWC3_QCOM - FILES:= $(LINUX_DIR)/drivers/usb/dwc3/dwc3-qcom.ko - AUTOLOAD:=$(call AutoLoad,53,dwc3-qcom,1) \ No newline at end of file From bef020db6a4e68367aadae8625cb72274e2c5728 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Sat, 28 Jan 2023 00:24:27 +0800 Subject: [PATCH 07/28] update --- devices/ipq807x/.config | 1 - devices/ipq807x/README.md | 1 - devices/ipq807x/diy.sh | 4 +--- devices/ipq807x/feeds.conf | 4 ---- devices/ipq807x/settings.ini | 2 -- 5 files changed, 1 insertion(+), 11 deletions(-) delete mode 100644 devices/ipq807x/README.md delete mode 100644 devices/ipq807x/feeds.conf delete mode 100644 devices/ipq807x/settings.ini diff --git a/devices/ipq807x/.config b/devices/ipq807x/.config index 167de1290b29..0577b0dc082c 100644 --- a/devices/ipq807x/.config +++ b/devices/ipq807x/.config @@ -8,7 +8,6 @@ CONFIG_TARGET_DEVICE_ipq807x_generic_DEVICE_xiaomi_ax9000=y CONFIG_TARGET_DEVICE_ipq807x_generic_DEVICE_qnap_301w=y CONFIG_TARGET_DEVICE_ipq807x_generic_DEVICE_zte_mf269=y CONFIG_PACKAGE_kmod-rtl8812au-ct=n -CONFIG_PACKAGE_kmod-qca-nss-crypto=n CONFIG_PACKAGE_luci-ssl=y # uhttpd服务 diff --git a/devices/ipq807x/README.md b/devices/ipq807x/README.md deleted file mode 100644 index 4b1ca3f3c0bb..000000000000 --- a/devices/ipq807x/README.md +++ /dev/null @@ -1 +0,0 @@ -Kernel等部分源码来源 https://github.com/Boos4721/openwrt 感谢 \ No newline at end of file diff --git a/devices/ipq807x/diy.sh b/devices/ipq807x/diy.sh index 73e0e32f3b95..389deef44325 100644 --- a/devices/ipq807x/diy.sh +++ b/devices/ipq807x/diy.sh @@ -3,9 +3,7 @@ shopt -s extglob SHELL_FOLDER=$(dirname $(readlink -f "$0")) -#bash $SHELL_FOLDER/../common/kernel_5.15.sh - -svn co https://github.com/coolsnowwolf/lede/trunk/target/linux/generic/hack-5.15 target/linux/generic/hack-5.15 +bash $SHELL_FOLDER/../common/kernel_5.15.sh rm -rf feeds/kiddin9/{rtl8821cu,rtl88x2bu} package/kernel/mt76 diff --git a/devices/ipq807x/feeds.conf b/devices/ipq807x/feeds.conf deleted file mode 100644 index 6a0dd6fea1fd..000000000000 --- a/devices/ipq807x/feeds.conf +++ /dev/null @@ -1,4 +0,0 @@ -src-git packages https://git.openwrt.org/feed/packages.git;openwrt-22.03 -src-git luci https://git.openwrt.org/project/luci.git;openwrt-22.03 -src-git routing https://git.openwrt.org/feed/routing.git;openwrt-22.03 -src-git kiddin9 https://github.com/kiddin9/openwrt-packages.git;master diff --git a/devices/ipq807x/settings.ini b/devices/ipq807x/settings.ini deleted file mode 100644 index 6bf165f393b5..000000000000 --- a/devices/ipq807x/settings.ini +++ /dev/null @@ -1,2 +0,0 @@ -REPO_URL="https://github.com/robimarko/openwrt" -REPO_BRANCH="ipq807x-2023-01-03-1333" From 2501f50c002ecfb8cfde606e16318bfc30db29b2 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Sat, 28 Jan 2023 00:48:39 +0800 Subject: [PATCH 08/28] update --- devices/ipq807x/patches/default_packages.patch | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/devices/ipq807x/patches/default_packages.patch b/devices/ipq807x/patches/default_packages.patch index f8947aa7aff9..a100bae84f51 100644 --- a/devices/ipq807x/patches/default_packages.patch +++ b/devices/ipq807x/patches/default_packages.patch @@ -12,7 +12,7 @@ --- a/target/linux/ipq807x/image/generic.mk +++ b/target/linux/ipq807x/image/generic.mk -@@ -74,7 +74,7 @@ define Device/qnap_301w +@@ -68,7 +68,7 @@ define Device/qnap_301w 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 @@ -21,11 +21,12 @@ endef TARGET_DEVICES += qnap_301w -@@ -109,6 +109,6 @@ define Device/xiaomi_ax9000 - DEVICE_DTS_CONFIG := config@hk14 +@@ -109,7 +109,7 @@ define Device/xiaomi_ax9000 SOC := ipq8072 + KERNEL_SIZE := 57344k DEVICE_PACKAGES := ipq-wifi-xiaomi_ax9000 kmod-ath11k-pci ath11k-firmware-qcn9074 \ - kmod-ath10k-ct ath10k-firmware-qca9887-ct + kmod-ath10k-ct ath10k-firmware-qca9887-ct kmod-usb3 kmod-usb-dwc3 kmod-usb-dwc3-qcom - endef - TARGET_DEVICES += xiaomi_ax9000 \ No newline at end of file + ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),) + ARTIFACTS := initramfs-factory.ubi + ARTIFACT/initramfs-factory.ubi := append-image-stage initramfs-uImage.itb | ubinize-kernel \ No newline at end of file From 7016d51c1be442dc8c6827afb87bd535aaa4fd38 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Sun, 29 Jan 2023 05:16:50 +0800 Subject: [PATCH 09/28] update --- devices/ipq807x/.config | 1 + devices/ipq807x/README.md | 1 + devices/ipq807x/diy.sh | 7 ++++--- devices/ipq807x/feeds.conf | 4 ++++ devices/ipq807x/patches/default_packages.patch | 11 +++++------ devices/ipq807x/settings.ini | 2 ++ 6 files changed, 17 insertions(+), 9 deletions(-) create mode 100644 devices/ipq807x/README.md create mode 100644 devices/ipq807x/feeds.conf create mode 100644 devices/ipq807x/settings.ini diff --git a/devices/ipq807x/.config b/devices/ipq807x/.config index 0577b0dc082c..167de1290b29 100644 --- a/devices/ipq807x/.config +++ b/devices/ipq807x/.config @@ -8,6 +8,7 @@ CONFIG_TARGET_DEVICE_ipq807x_generic_DEVICE_xiaomi_ax9000=y CONFIG_TARGET_DEVICE_ipq807x_generic_DEVICE_qnap_301w=y CONFIG_TARGET_DEVICE_ipq807x_generic_DEVICE_zte_mf269=y CONFIG_PACKAGE_kmod-rtl8812au-ct=n +CONFIG_PACKAGE_kmod-qca-nss-crypto=n CONFIG_PACKAGE_luci-ssl=y # uhttpd服务 diff --git a/devices/ipq807x/README.md b/devices/ipq807x/README.md new file mode 100644 index 000000000000..4b1ca3f3c0bb --- /dev/null +++ b/devices/ipq807x/README.md @@ -0,0 +1 @@ +Kernel等部分源码来源 https://github.com/Boos4721/openwrt 感谢 \ No newline at end of file diff --git a/devices/ipq807x/diy.sh b/devices/ipq807x/diy.sh index 389deef44325..8f54e2355eb7 100644 --- a/devices/ipq807x/diy.sh +++ b/devices/ipq807x/diy.sh @@ -3,12 +3,13 @@ shopt -s extglob SHELL_FOLDER=$(dirname $(readlink -f "$0")) -bash $SHELL_FOLDER/../common/kernel_5.15.sh +#bash $SHELL_FOLDER/../common/kernel_5.15.sh -rm -rf feeds/kiddin9/{rtl8821cu,rtl88x2bu} package/kernel/mt76 +svn co https://github.com/coolsnowwolf/lede/trunk/target/linux/generic/hack-5.15 target/linux/generic/hack-5.15 -git clone https://github.com/robimarko/nss-packages --depth 1 package/nss-packages +rm -rf feeds/kiddin9/{rtl8821cu,rtl88x2bu} package/kernel/mt76 +curl -sfL https://raw.githubusercontent.com/Boos4721/openwrt/master/target/linux/ipq807x/patches-5.15/700-ipq8074-overclock-cpu-2.2ghz.patch -o target/linux/ipq807x/patches-5.15/700-ipq8074-overclock-cpu-2.2ghz.patch echo " CONFIG_PACKAGE_kmod-ipt-coova=n diff --git a/devices/ipq807x/feeds.conf b/devices/ipq807x/feeds.conf new file mode 100644 index 000000000000..6a0dd6fea1fd --- /dev/null +++ b/devices/ipq807x/feeds.conf @@ -0,0 +1,4 @@ +src-git packages https://git.openwrt.org/feed/packages.git;openwrt-22.03 +src-git luci https://git.openwrt.org/project/luci.git;openwrt-22.03 +src-git routing https://git.openwrt.org/feed/routing.git;openwrt-22.03 +src-git kiddin9 https://github.com/kiddin9/openwrt-packages.git;master diff --git a/devices/ipq807x/patches/default_packages.patch b/devices/ipq807x/patches/default_packages.patch index a100bae84f51..f8947aa7aff9 100644 --- a/devices/ipq807x/patches/default_packages.patch +++ b/devices/ipq807x/patches/default_packages.patch @@ -12,7 +12,7 @@ --- a/target/linux/ipq807x/image/generic.mk +++ b/target/linux/ipq807x/image/generic.mk -@@ -68,7 +68,7 @@ define Device/qnap_301w +@@ -74,7 +74,7 @@ define Device/qnap_301w 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 @@ -21,12 +21,11 @@ endef TARGET_DEVICES += qnap_301w -@@ -109,7 +109,7 @@ define Device/xiaomi_ax9000 +@@ -109,6 +109,6 @@ define Device/xiaomi_ax9000 + DEVICE_DTS_CONFIG := config@hk14 SOC := ipq8072 - KERNEL_SIZE := 57344k DEVICE_PACKAGES := ipq-wifi-xiaomi_ax9000 kmod-ath11k-pci ath11k-firmware-qcn9074 \ - kmod-ath10k-ct ath10k-firmware-qca9887-ct + kmod-ath10k-ct ath10k-firmware-qca9887-ct kmod-usb3 kmod-usb-dwc3 kmod-usb-dwc3-qcom - ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),) - ARTIFACTS := initramfs-factory.ubi - ARTIFACT/initramfs-factory.ubi := append-image-stage initramfs-uImage.itb | ubinize-kernel \ No newline at end of file + endef + TARGET_DEVICES += xiaomi_ax9000 \ No newline at end of file diff --git a/devices/ipq807x/settings.ini b/devices/ipq807x/settings.ini new file mode 100644 index 000000000000..384642f5f17a --- /dev/null +++ b/devices/ipq807x/settings.ini @@ -0,0 +1,2 @@ +REPO_URL="https://github.com/robimarko/openwrt" +REPO_BRANCH="ipq807x-5.15-pr-nss-drv" From 66689e87fbde2a3172f76717154a796f095f1a6e Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Sun, 29 Jan 2023 05:28:09 +0800 Subject: [PATCH 10/28] update --- .../ipq807x/patches/default_packages.patch | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/devices/ipq807x/patches/default_packages.patch b/devices/ipq807x/patches/default_packages.patch index f8947aa7aff9..31187c5b980b 100644 --- a/devices/ipq807x/patches/default_packages.patch +++ b/devices/ipq807x/patches/default_packages.patch @@ -1,18 +1,6 @@ ---- a/target/linux/ipq807x/Makefile -+++ b/target/linux/ipq807x/Makefile -@@ -12,7 +12,7 @@ KERNEL_PATCHVER:=5.15 - - include $(INCLUDE_DIR)/target.mk - DEFAULT_PACKAGES += \ -- kmod-usb3 kmod-usb-dwc3 kmod-usb-dwc3-qcom \ -+ kmod-qca-nss-drv nss-firmware-ipq8074 qca-ssdk-shell \ - kmod-leds-gpio kmod-gpio-button-hotplug \ - libwolfsslcpu-crypto kmod-qca-nss-dp \ - ath11k-firmware-ipq8074 kmod-ath11k-ahb \ - --- a/target/linux/ipq807x/image/generic.mk +++ b/target/linux/ipq807x/image/generic.mk -@@ -74,7 +74,7 @@ define Device/qnap_301w +@@ -68,7 +68,7 @@ define Device/qnap_301w 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 @@ -21,11 +9,12 @@ endef TARGET_DEVICES += qnap_301w -@@ -109,6 +109,6 @@ define Device/xiaomi_ax9000 - DEVICE_DTS_CONFIG := config@hk14 +@@ -109,7 +109,7 @@ define Device/xiaomi_ax9000 SOC := ipq8072 + KERNEL_SIZE := 57344k DEVICE_PACKAGES := ipq-wifi-xiaomi_ax9000 kmod-ath11k-pci ath11k-firmware-qcn9074 \ - kmod-ath10k-ct ath10k-firmware-qca9887-ct + kmod-ath10k-ct ath10k-firmware-qca9887-ct kmod-usb3 kmod-usb-dwc3 kmod-usb-dwc3-qcom - endef - TARGET_DEVICES += xiaomi_ax9000 \ No newline at end of file + ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),) + ARTIFACTS := initramfs-factory.ubi + ARTIFACT/initramfs-factory.ubi := append-image-stage initramfs-uImage.itb | ubinize-kernel \ No newline at end of file From 39d3e653d8ee5ddf5635de55f6d3b9db7e15f666 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Sun, 29 Jan 2023 05:41:59 +0800 Subject: [PATCH 11/28] update --- devices/ipq807x/diy.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/devices/ipq807x/diy.sh b/devices/ipq807x/diy.sh index 8f54e2355eb7..fd43e84a58a0 100644 --- a/devices/ipq807x/diy.sh +++ b/devices/ipq807x/diy.sh @@ -9,8 +9,6 @@ svn co https://github.com/coolsnowwolf/lede/trunk/target/linux/generic/hack-5.15 rm -rf feeds/kiddin9/{rtl8821cu,rtl88x2bu} package/kernel/mt76 -curl -sfL https://raw.githubusercontent.com/Boos4721/openwrt/master/target/linux/ipq807x/patches-5.15/700-ipq8074-overclock-cpu-2.2ghz.patch -o target/linux/ipq807x/patches-5.15/700-ipq8074-overclock-cpu-2.2ghz.patch - echo " CONFIG_PACKAGE_kmod-ipt-coova=n CONFIG_PACKAGE_kmod-pf-ring=n From 9f5f5c92331329fd54402c3d1699a8f0195ce1c4 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Wed, 1 Feb 2023 07:19:50 +0800 Subject: [PATCH 12/28] update --- devices/common/patches/fix.patch | 39 +++++++++++++++++--------------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/devices/common/patches/fix.patch b/devices/common/patches/fix.patch index 9921852c840f..526af5da2829 100644 --- a/devices/common/patches/fix.patch +++ b/devices/common/patches/fix.patch @@ -53,7 +53,23 @@ KERNEL_PREFIX = $$(DEVICE_IMG_PREFIX) KERNEL_SUFFIX := -kernel.bin KERNEL_INITRAMFS_SUFFIX = $$(KERNEL_SUFFIX) -@@ -567,7 +606,7 @@ define Device/Build/kernel +@@ -472,7 +511,6 @@ define Device/Check + endif + endef + +-ifndef IB + define Device/Build/initramfs + $(call Device/Export,$(KDIR)/tmp/$$(KERNEL_INITRAMFS_IMAGE),$(1)) + $$(_TARGET): $$(if $$(KERNEL_INITRAMFS),$(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE) \ +@@ -519,7 +557,6 @@ define Device/Build/initramfs + SUPPORTED_DEVICES="$$(SUPPORTED_DEVICES)" \ + $(TOPDIR)/scripts/json_add_image_info.py $$@ + endef +-endif + + define Device/Build/compile + $$(_COMPILE_TARGET): $(KDIR)/$(1) +@@ -568,7 +605,7 @@ define Device/Build/kernel endef define Device/Build/image @@ -62,7 +78,7 @@ $$(_TARGET): $(if $(CONFIG_JSON_OVERVIEW_IMAGE_INFO), \ $(BUILD_DIR)/json_info_files/$(call DEVICE_IMG_NAME,$(1),$(2)).json, \ $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2))$$(GZ_SUFFIX)) -@@ -677,6 +716,8 @@ define Device/Build +@@ -678,6 +715,8 @@ define Device/Build $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),$(call Device/Build/initramfs,$(1))) $(call Device/Build/kernel,$(1)) @@ -79,28 +95,15 @@ if output: - default_packages, output["arch_packages"] = run( -+ default_packages, output["arch_packages"], output["kernel_version"], output["initramfs"] = run( ++ default_packages, output["arch_packages"], output["kernel_version"] = run( [ "make", "--no-print-directory", -@@ -55,6 +55,8 @@ def get_initial_output(image_info): +@@ -55,6 +55,7 @@ def get_initial_output(image_info): "target/linux/", "val.DEFAULT_PACKAGES", "val.ARCH_PACKAGES", + "val.LINUX_VERSION", -+ "val.KERNEL_INITRAMFS", ], stdout=PIPE, - stderr=PIPE, - - ---- a/rules.mk -+++ b/rules.mk -@@ -59,6 +59,7 @@ _SINGLE=export MAKEFLAGS=$(space); - CFLAGS:= - ARCH:=$(subst i486,i386,$(subst i586,i386,$(subst i686,i386,$(call qstrip,$(CONFIG_ARCH))))) - ARCH_PACKAGES:=$(call qstrip,$(CONFIG_TARGET_ARCH_PACKAGES)) -+KERNEL_INITRAMFS:=$(call qstrip,$(CONFIG_TARGET_ROOTFS_INITRAMFS)) - BOARD:=$(call qstrip,$(CONFIG_TARGET_BOARD)) - SUBTARGET:=$(call qstrip,$(CONFIG_TARGET_SUBTARGET)) - TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION)) \ No newline at end of file + stderr=PIPE, \ No newline at end of file From f04c392d099922a34cc3b85487716923b50f0ff6 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Wed, 1 Feb 2023 07:53:14 +0800 Subject: [PATCH 13/28] update --- devices/rockchip_armv8/.config | 1 - 1 file changed, 1 deletion(-) diff --git a/devices/rockchip_armv8/.config b/devices/rockchip_armv8/.config index 54c4359f2966..7adc773c98a6 100644 --- a/devices/rockchip_armv8/.config +++ b/devices/rockchip_armv8/.config @@ -3,7 +3,6 @@ CONFIG_TARGET_rockchip=y CONFIG_TARGET_rockchip_armv8=y CONFIG_TARGET_MULTI_PROFILE=y CONFIG_TARGET_ALL_PROFILES=y -CONFIG_TARGET_DEVICE_rockchip_armv8_DEVICE_rocktech_mpc1903=n CONFIG_PACKAGE_kmod-rtl8821cu=m CONFIG_PACKAGE_kmod-rtl88x2bu=m From b32964aee44f58fc9579dc5c1b15ca3c257ca7c7 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Thu, 2 Feb 2023 03:28:50 +0800 Subject: [PATCH 14/28] update --- devices/ipq807x_ipq60xx/diy.sh | 8 +++++--- .../ipq807x_ipq60xx/patches/0999-depends.patch | 2 +- .../ipq807x_ipq60xx/patches/imagebuilder.patch | 16 ++-------------- 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/devices/ipq807x_ipq60xx/diy.sh b/devices/ipq807x_ipq60xx/diy.sh index 2f8a55a29bc2..e8fad41aa5c5 100644 --- a/devices/ipq807x_ipq60xx/diy.sh +++ b/devices/ipq807x_ipq60xx/diy.sh @@ -6,11 +6,13 @@ SHELL_FOLDER=$(dirname $(readlink -f "$0")) rm -rf target/linux/ipq807x mv -f ../feeds/ipq807x/ipq807x target/linux/ +rm -rf package/feeds +./scripts/feeds install -a -p gl_feeds_common -f +./scripts/feeds install -a -p ipq807x -f ./scripts/feeds install -a -p wifi_ax -f +./scripts/feeds install -a -p kiddin9 -f ./scripts/feeds install -a -rm -rf package/feeds/wifi_ax/hostapd - sed -i "/gl_feeds_common/d" feeds.conf sed -i "/ipq807x/d" feeds.conf sed -i "/wifi_ax/d" feeds.conf @@ -20,7 +22,7 @@ rm -rf package/feeds/kiddin9/{firewall,rtl*,base-files,netifd,nft-fullcone,mbedt rm -rf package/kernel/{ath10k-ct,mt76,rtl8812au-ct} rm -rf feeds/packages/net/xtables-addons package/feeds/packages/openvswitch package/feeds/routing/batman-adv -rm -rf devices/common/patches/{glinet,imagebuilder.patch,iptables.patch,targets.patch,kernel-defaults.patch,disable_flock.patch} +rm -rf devices/common/patches/{glinet,imagebuilder.patch,fix.patch,iptables.patch,targets.patch,kernel-defaults.patch,disable_flock.patch} rm -rf toolchain/musl diff --git a/devices/ipq807x_ipq60xx/patches/0999-depends.patch b/devices/ipq807x_ipq60xx/patches/0999-depends.patch index 4aa0abc56525..47f728d0d691 100644 --- a/devices/ipq807x_ipq60xx/patches/0999-depends.patch +++ b/devices/ipq807x_ipq60xx/patches/0999-depends.patch @@ -22,7 +22,7 @@ kmod-qca-nss-drv \ kmod-usb-phy-ipq807x kmod-usb-dwc3-of-simple \ - kmod-ath11k-ahb kmod-qrtr_mproc wpad \ -+ kmod-ath11k-ahb kmod-qrtr_mproc wpad-basic-wolfssl \ ++ kmod-ath11k-ahb kmod-qrtr_mproc wpad-openssl \ kmod-gpio-button-hotplug \ qca-thermald-10.4 qca-ssdk-shell kmod-qca-nss-drv-bridge-mgr \ uboot-envtools \ No newline at end of file diff --git a/devices/ipq807x_ipq60xx/patches/imagebuilder.patch b/devices/ipq807x_ipq60xx/patches/imagebuilder.patch index 2aaed7a0f32d..342c1cbeefa0 100644 --- a/devices/ipq807x_ipq60xx/patches/imagebuilder.patch +++ b/devices/ipq807x_ipq60xx/patches/imagebuilder.patch @@ -96,27 +96,15 @@ if output: - default_packages, output["arch_packages"] = run( -+ default_packages, output["arch_packages"], output["kernel_version"], output["initramfs"] = run( ++ default_packages, output["arch_packages"], output["kernel_version"] = run( [ "make", "--no-print-directory", -@@ -55,6 +55,8 @@ def get_initial_output(image_info): +@@ -55,6 +55,7 @@ def get_initial_output(image_info): "target/linux/", "val.DEFAULT_PACKAGES", "val.ARCH_PACKAGES", + "val.LINUX_VERSION", -+ "val.KERNEL_INITRAMFS", ], stdout=PIPE, stderr=PIPE, - ---- a/rules.mk -+++ b/rules.mk -@@ -59,6 +59,7 @@ _SINGLE=export MAKEFLAGS=$(space); - CFLAGS:= - ARCH:=$(subst i486,i386,$(subst i586,i386,$(subst i686,i386,$(call qstrip,$(CONFIG_ARCH))))) - ARCH_PACKAGES:=$(call qstrip,$(CONFIG_TARGET_ARCH_PACKAGES)) -+KERNEL_INITRAMFS:=$(call qstrip,$(CONFIG_TARGET_ROOTFS_INITRAMFS)) - BOARD:=$(call qstrip,$(CONFIG_TARGET_BOARD)) - SUBTARGET:=$(call qstrip,$(CONFIG_TARGET_SUBTARGET)) - TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION)) From 7afd802993ab6163dbbac148c167ae0e9fa2af96 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Thu, 2 Feb 2023 04:09:53 +0800 Subject: [PATCH 15/28] update --- devices/ipq60xx_generic/diy.sh | 2 +- devices/ipq807x_ipq60xx/diy.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/devices/ipq60xx_generic/diy.sh b/devices/ipq60xx_generic/diy.sh index 5bb042fac7f3..57537c2fad67 100644 --- a/devices/ipq60xx_generic/diy.sh +++ b/devices/ipq60xx_generic/diy.sh @@ -21,7 +21,7 @@ curl -sfL https://raw.githubusercontent.com/coolsnowwolf/openwrt-gl-ax1800/maste curl -sfL https://raw.githubusercontent.com/coolsnowwolf/openwrt-gl-ax1800/master/include/quilt.mk -o include/quilt.mk rm -rf toolchain/.svn -rm -rf feeds/kiddin9/{rtl*,nft-fullcone,shortcut-fe,netifd} package/kernel/mt76 toolchain/musl package/feeds/packages/{xtables-addons,openvswitch} +rm -rf feeds/kiddin9/{rtl*,fullconenat-nft,shortcut-fe,netifd} package/kernel/mt76 toolchain/musl package/feeds/packages/{xtables-addons,openvswitch} svn co https://github.com/openwrt/openwrt/branches/openwrt-22.03/toolchain/musl toolchain/musl svn co https://github.com/openwrt/openwrt/branches/openwrt-22.03/toolchain/glibc toolchain/glibc diff --git a/devices/ipq807x_ipq60xx/diy.sh b/devices/ipq807x_ipq60xx/diy.sh index e8fad41aa5c5..7ca93f42a96e 100644 --- a/devices/ipq807x_ipq60xx/diy.sh +++ b/devices/ipq807x_ipq60xx/diy.sh @@ -17,7 +17,7 @@ sed -i "/gl_feeds_common/d" feeds.conf sed -i "/ipq807x/d" feeds.conf sed -i "/wifi_ax/d" feeds.conf -rm -rf package/feeds/kiddin9/{firewall,rtl*,base-files,netifd,nft-fullcone,mbedtls,oaf,shortcut-fe,simulated-driver,fast-classifier,fullconenat} +rm -rf package/feeds/kiddin9/{firewall,rtl*,base-files,netifd,fullconenat-nft,fullconenat-nft,mbedtls,oaf,shortcut-fe,simulated-driver,fast-classifier,fullconenat} rm -rf package/kernel/{ath10k-ct,mt76,rtl8812au-ct} rm -rf feeds/packages/net/xtables-addons package/feeds/packages/openvswitch package/feeds/routing/batman-adv From de8b07b3a90a4c39ad826de96e3f6f744ae3a180 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Thu, 2 Feb 2023 06:41:50 +0800 Subject: [PATCH 16/28] update --- devices/ipq807x_ipq60xx/diy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devices/ipq807x_ipq60xx/diy.sh b/devices/ipq807x_ipq60xx/diy.sh index 7ca93f42a96e..2b81a527550f 100644 --- a/devices/ipq807x_ipq60xx/diy.sh +++ b/devices/ipq807x_ipq60xx/diy.sh @@ -20,7 +20,7 @@ sed -i "/wifi_ax/d" feeds.conf rm -rf package/feeds/kiddin9/{firewall,rtl*,base-files,netifd,fullconenat-nft,fullconenat-nft,mbedtls,oaf,shortcut-fe,simulated-driver,fast-classifier,fullconenat} rm -rf package/kernel/{ath10k-ct,mt76,rtl8812au-ct} -rm -rf feeds/packages/net/xtables-addons package/feeds/packages/openvswitch package/feeds/routing/batman-adv +rm -rf feeds/packages/net/xtables-addons package/feeds/packages/{openvswitch,ksmbd} package/feeds/routing/batman-adv rm -rf devices/common/patches/{glinet,imagebuilder.patch,fix.patch,iptables.patch,targets.patch,kernel-defaults.patch,disable_flock.patch} From 674aeca41cf98c1ae5561082226675f1dc34cf56 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Tue, 7 Feb 2023 20:25:07 +0800 Subject: [PATCH 17/28] Update .config --- devices/mediatek_gl_mt7981/.config | 1 + 1 file changed, 1 insertion(+) diff --git a/devices/mediatek_gl_mt7981/.config b/devices/mediatek_gl_mt7981/.config index 969a9eb65d2d..8db3222516cf 100644 --- a/devices/mediatek_gl_mt7981/.config +++ b/devices/mediatek_gl_mt7981/.config @@ -3,6 +3,7 @@ CONFIG_TARGET_mediatek_gl=y CONFIG_TARGET_mediatek_gl_mt7981=y CONFIG_TARGET_MULTI_PROFILE=y CONFIG_TARGET_DEVICE_mediatek_gl_mt7981_DEVICE_glinet_gl-mt2500=y +CONFIG_TARGET_DEVICE_mediatek_gl_mt7981_DEVICE_glinet_gl-mt3000=y CONFIG_PACKAGE_kmod-nft-fullcone=n CONFIG_PACKAGE_kmod-ax25=n From dcd7b45de09a9e39c04ca3c141352a221d8d12a1 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Tue, 7 Feb 2023 20:30:47 +0800 Subject: [PATCH 18/28] Update .config --- devices/mediatek_gl_mt7981/.config | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/devices/mediatek_gl_mt7981/.config b/devices/mediatek_gl_mt7981/.config index 8db3222516cf..585ed9480f96 100644 --- a/devices/mediatek_gl_mt7981/.config +++ b/devices/mediatek_gl_mt7981/.config @@ -2,8 +2,10 @@ CONFIG_TARGET_mediatek_gl=y CONFIG_TARGET_mediatek_gl_mt7981=y CONFIG_TARGET_MULTI_PROFILE=y -CONFIG_TARGET_DEVICE_mediatek_gl_mt7981_DEVICE_glinet_gl-mt2500=y -CONFIG_TARGET_DEVICE_mediatek_gl_mt7981_DEVICE_glinet_gl-mt3000=y +CONFIG_TARGET_ALL_PROFILES=y + +#CONFIG_TARGET_DEVICE_mediatek_gl_mt7981_DEVICE_glinet_gl-mt2500=y +#CONFIG_TARGET_DEVICE_mediatek_gl_mt7981_DEVICE_glinet_gl-mt3000=y CONFIG_PACKAGE_kmod-nft-fullcone=n CONFIG_PACKAGE_kmod-ax25=n From 68fecc4f6fce25d0463e416dc8908095ae125500 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Tue, 7 Feb 2023 20:43:41 +0800 Subject: [PATCH 19/28] Update feeds.conf --- devices/mediatek_gl_mt7981/feeds.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/devices/mediatek_gl_mt7981/feeds.conf b/devices/mediatek_gl_mt7981/feeds.conf index c6d6fd39210a..59dfb498544d 100644 --- a/devices/mediatek_gl_mt7981/feeds.conf +++ b/devices/mediatek_gl_mt7981/feeds.conf @@ -2,6 +2,6 @@ src-git packages https://git.openwrt.org/feed/packages.git;openwrt-21.02 src-git luci https://git.openwrt.org/project/luci.git;openwrt-21.02 src-git routing https://git.openwrt.org/feed/routing.git;openwrt-21.02 src-git kiddin9 https://github.com/kiddin9/openwrt-packages.git;master -src-git mtk_openwrt_feed https://git01.mediatek.com/openwrt/feeds/mtk-openwrt-feeds.git^df3fc79 -src-git gl_feed_common https://github.com/gl-inet/gl-feeds.git;common +src-git gl_feed_mtk https://github.com/gl-inet/gl-feeds.git;mtk +src-git gl_feed_common https://github.com/gl-inet/gl-feeds.git;f86ec7f77b7a36c96a9b5a9b7fea30ccc9ac5fe6 src-git gl_feed_21_02 https://github.com/gl-inet/gl-feeds.git^032786d5ff300ebdd83fb1b5fec5344b3da04953 From b86da13cf1c313847d933ffb4d2d220315d1d099 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Tue, 7 Feb 2023 20:44:20 +0800 Subject: [PATCH 20/28] Update diy.sh --- devices/mediatek_gl_mt7981/diy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devices/mediatek_gl_mt7981/diy.sh b/devices/mediatek_gl_mt7981/diy.sh index 77e46cf4dba3..4af6c3bc85ce 100644 --- a/devices/mediatek_gl_mt7981/diy.sh +++ b/devices/mediatek_gl_mt7981/diy.sh @@ -17,7 +17,7 @@ rm -rf toolchain/musl svn co https://github.com/openwrt/openwrt/branches/openwrt-22.03/toolchain/musl toolchain/musl -sed -i "/mtk_openwrt_feed/d" feeds.conf +sed -i "/gl_feed_mtk/d" feeds.conf sed -i "/gl_feed_common/d" feeds.conf sed -i "/gl_feed_21_02/d" feeds.conf From 78909240d537c8a101b159d6cee6b7195cb08297 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Tue, 7 Feb 2023 20:50:51 +0800 Subject: [PATCH 21/28] Update imagebuilder.patch --- .../mediatek_gl_mt7981/patches/imagebuilder.patch | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/devices/mediatek_gl_mt7981/patches/imagebuilder.patch b/devices/mediatek_gl_mt7981/patches/imagebuilder.patch index 2aaed7a0f32d..94ef90e49c2a 100644 --- a/devices/mediatek_gl_mt7981/patches/imagebuilder.patch +++ b/devices/mediatek_gl_mt7981/patches/imagebuilder.patch @@ -100,23 +100,11 @@ [ "make", "--no-print-directory", -@@ -55,6 +55,8 @@ def get_initial_output(image_info): +@@ -55,6 +55,7 @@ def get_initial_output(image_info): "target/linux/", "val.DEFAULT_PACKAGES", "val.ARCH_PACKAGES", + "val.LINUX_VERSION", -+ "val.KERNEL_INITRAMFS", ], stdout=PIPE, stderr=PIPE, - ---- a/rules.mk -+++ b/rules.mk -@@ -59,6 +59,7 @@ _SINGLE=export MAKEFLAGS=$(space); - CFLAGS:= - ARCH:=$(subst i486,i386,$(subst i586,i386,$(subst i686,i386,$(call qstrip,$(CONFIG_ARCH))))) - ARCH_PACKAGES:=$(call qstrip,$(CONFIG_TARGET_ARCH_PACKAGES)) -+KERNEL_INITRAMFS:=$(call qstrip,$(CONFIG_TARGET_ROOTFS_INITRAMFS)) - BOARD:=$(call qstrip,$(CONFIG_TARGET_BOARD)) - SUBTARGET:=$(call qstrip,$(CONFIG_TARGET_SUBTARGET)) - TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION)) From 0849394083756c3451e37b6bd1714dae507b0ebb Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Tue, 7 Feb 2023 20:51:21 +0800 Subject: [PATCH 22/28] Update diy.sh --- devices/mediatek_gl_mt7981/diy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devices/mediatek_gl_mt7981/diy.sh b/devices/mediatek_gl_mt7981/diy.sh index 4af6c3bc85ce..d0c141c53296 100644 --- a/devices/mediatek_gl_mt7981/diy.sh +++ b/devices/mediatek_gl_mt7981/diy.sh @@ -6,7 +6,7 @@ SHELL_FOLDER=$(dirname $(readlink -f "$0")) rm -rf package/feeds/kiddin9/{firewall,rtl*,base-files,netifd} -rm -rf devices/common/patches/{glinet,imagebuilder.patch,iptables.patch,targets.patch,kernel-defaults.patch,disable_flock.patch} +rm -rf devices/common/patches/{imagebuilder.patch,fix.patch,iptables.patch,targets.patch,kernel-defaults.patch,disable_flock.patch} sed -i "s/BOARD:=mediatek$/BOARD:=mediatek_gl/" target/linux/mediatek/Makefile From f91503c7a342772d048e914d683001890cc36e12 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Tue, 7 Feb 2023 20:53:08 +0800 Subject: [PATCH 23/28] Update imagebuilder.patch --- devices/mediatek_gl_mt7981/patches/imagebuilder.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devices/mediatek_gl_mt7981/patches/imagebuilder.patch b/devices/mediatek_gl_mt7981/patches/imagebuilder.patch index 94ef90e49c2a..342c1cbeefa0 100644 --- a/devices/mediatek_gl_mt7981/patches/imagebuilder.patch +++ b/devices/mediatek_gl_mt7981/patches/imagebuilder.patch @@ -96,7 +96,7 @@ if output: - default_packages, output["arch_packages"] = run( -+ default_packages, output["arch_packages"], output["kernel_version"], output["initramfs"] = run( ++ default_packages, output["arch_packages"], output["kernel_version"] = run( [ "make", "--no-print-directory", From c8b88d868e1a18f6d1f85221703edf885759177f Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Tue, 7 Feb 2023 21:20:57 +0800 Subject: [PATCH 24/28] Update 0999-depends.patch --- .../patches/0999-depends.patch | 39 +++++++++++++++++-- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/devices/mediatek_gl_mt7981/patches/0999-depends.patch b/devices/mediatek_gl_mt7981/patches/0999-depends.patch index 78c903d93e01..2caefa2ec291 100644 --- a/devices/mediatek_gl_mt7981/patches/0999-depends.patch +++ b/devices/mediatek_gl_mt7981/patches/0999-depends.patch @@ -1,10 +1,43 @@ +--- a/target/linux/mediatek_gl/Makefile ++++ a/target/linux/mediatek_gl/Makefile +@@ -10,9 +10,9 @@ + + KERNEL_PATCHVER:=5.4 + KERNEL_TESTING_PATCHVER:=5.4 + + include $(INCLUDE_DIR)/target.mk + DEFAULT_PACKAGES += \ +- kmod-leds-gpio kmod-gpio-button-hotplug ++ kmod-leds-gpio kmod-gpio-button-hotplug wpad-basic-wolfssl ethtool iwinfo wireless-tools kmod-mediatek_hnat mii_mgr mtkhnat_util regs fwdd kmod-mtfwd kmod-mtqos + + $(eval $(call BuildTarget)) + --- a/target/linux/mediatek_gl/image/mt7981.mk +++ b/target/linux/mediatek_gl/image/mt7981.mk -@@ -219,6 +219,6 @@ +@@ -175,13 +175,13 @@ + define Device/glinet_gl-mt3000 + DEVICE_VENDOR := GL.iNet + DEVICE_MODEL := GL-MT3000 + DEVICE_DTS := mt7981-gl-mt3000 + DEVICE_DTS_DIR := $(DTS_DIR)/mediatek + SUPPORTED_DEVICES := glinet,mt3000-snand +- DEVICE_PACKAGES := kmod-hwmon-pwmfan ++ DEVICE_PACKAGES := kmod-hwmon-pwmfan gl-sdk4-mtk-wifi-v2 kmod-conninfra-mt7981-ko kmod-mt-wifi-mt7981-ko kmod-warp-mt7981-ko kmod-gl-sdk4-fan 8021xd + UBINIZE_OPTS := -E 5 + BLOCKSIZE := 128k + PAGESIZE := 2048 + IMAGE_SIZE := 65536k + KERNEL_IN_UBI := 1 + IMAGES := factory.img sysupgrade.tar +@@ -215,10 +215,10 @@ + define Device/glinet_gl-mt2500 + DEVICE_VENDOR := GL.iNet + DEVICE_MODEL := GL-MT2500 + DEVICE_DTS := mt7981-gl-mt2500 SUPPORTED_DEVICES := glinet,mt2500-emmc DEVICE_DTS_DIR := $(DTS_DIR)/mediatek - DEVICE_PACKAGES := mkf2fs kmod-mmc kmod-fs-f2fs gdisk -+ DEVICE_PACKAGES := mkf2fs kmod-mmc kmod-fs-f2fs gdisk wpad-basic-wolfssl mii_mgr losetup e2fsprogs blockdev blkid kmod-nls-cp437 regs switch mtk_factory_rw ethtool kmod-mediatek_hnat mtkhnat_util mmc-utils ++ DEVICE_PACKAGES := mkf2fs kmod-mmc kmod-fs-f2fs gdisk losetup e2fsprogs blockdev blkid kmod-nls-cp437 mtk_factory_rw mmc-utils IMAGE/sysupgrade.bin := sysupgrade-tar | append-gl-metadata endef - TARGET_DEVICES += glinet_gl-mt2500 \ No newline at end of file + TARGET_DEVICES += glinet_gl-mt2500 From 3cdd56a8944b2321b55a85232538bb49e5e845d4 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Tue, 7 Feb 2023 21:21:34 +0800 Subject: [PATCH 25/28] Update diy.sh --- devices/mediatek_gl_mt7981/diy.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/devices/mediatek_gl_mt7981/diy.sh b/devices/mediatek_gl_mt7981/diy.sh index d0c141c53296..8640f82d51f4 100644 --- a/devices/mediatek_gl_mt7981/diy.sh +++ b/devices/mediatek_gl_mt7981/diy.sh @@ -4,6 +4,13 @@ shopt -s extglob SHELL_FOLDER=$(dirname $(readlink -f "$0")) +rm -rf package/feeds +./scripts/feeds install -a -p gl_feed_mtk -f +./scripts/feeds install -a -p gl_feed_common -f +./scripts/feeds install -a -p gl_feed_21_02 -f +./scripts/feeds install -a -p kiddin9 -f +./scripts/feeds install -a + rm -rf package/feeds/kiddin9/{firewall,rtl*,base-files,netifd} rm -rf devices/common/patches/{imagebuilder.patch,fix.patch,iptables.patch,targets.patch,kernel-defaults.patch,disable_flock.patch} From d2bfd3d9eae2d9434181f9c44f7994ec4cd281ce Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Tue, 7 Feb 2023 21:31:21 +0800 Subject: [PATCH 26/28] Update feeds.conf --- devices/mediatek_gl_mt7981/feeds.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devices/mediatek_gl_mt7981/feeds.conf b/devices/mediatek_gl_mt7981/feeds.conf index 59dfb498544d..f2be0f7c3383 100644 --- a/devices/mediatek_gl_mt7981/feeds.conf +++ b/devices/mediatek_gl_mt7981/feeds.conf @@ -3,5 +3,5 @@ src-git luci https://git.openwrt.org/project/luci.git;openwrt-21.02 src-git routing https://git.openwrt.org/feed/routing.git;openwrt-21.02 src-git kiddin9 https://github.com/kiddin9/openwrt-packages.git;master src-git gl_feed_mtk https://github.com/gl-inet/gl-feeds.git;mtk -src-git gl_feed_common https://github.com/gl-inet/gl-feeds.git;f86ec7f77b7a36c96a9b5a9b7fea30ccc9ac5fe6 +src-git gl_feed_common https://github.com/gl-inet/gl-feeds.git^f86ec7f77b7a36c96a9b5a9b7fea30ccc9ac5fe6 src-git gl_feed_21_02 https://github.com/gl-inet/gl-feeds.git^032786d5ff300ebdd83fb1b5fec5344b3da04953 From e8c21688902c03c91d2432cf8b92ba668a0a2348 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Tue, 7 Feb 2023 21:39:14 +0800 Subject: [PATCH 27/28] Update repo-dispatcher.yml --- .github/workflows/repo-dispatcher.yml | 140 -------------------------- 1 file changed, 140 deletions(-) diff --git a/.github/workflows/repo-dispatcher.yml b/.github/workflows/repo-dispatcher.yml index 38713e7c7051..79fc809f0035 100644 --- a/.github/workflows/repo-dispatcher.yml +++ b/.github/workflows/repo-dispatcher.yml @@ -63,148 +63,8 @@ jobs: - name: Trigger Compile run: | sudo timedatectl set-timezone "$TZ" - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "x86_64 ${{ github.event.inputs.param }}", "client_payload": {"target": "x86_64"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "x86_generic ${{ github.event.inputs.param }}", "client_payload": {"target": "x86_generic"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "rockchip_armv8 ${{ github.event.inputs.param }}", "client_payload": {"target": "rockchip_armv8"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "bcm27xx_bcm2711 ${{ github.event.inputs.param }}", "client_payload": {"target": "bcm27xx_bcm2711"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "bcm27xx_bcm2710 ${{ github.event.inputs.param }}", "client_payload": {"target": "bcm27xx_bcm2710"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "bcm27xx_bcm2709 ${{ github.event.inputs.param }}", "client_payload": {"target": "bcm27xx_bcm2709"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "bcm27xx_bcm2708 ${{ github.event.inputs.param }}", "client_payload": {"target": "bcm27xx_bcm2708"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "armvirt_64 ${{ github.event.inputs.param }}", "client_payload": {"target": "armvirt_64"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "mediatek_mt7622 ${{ github.event.inputs.param }}", "client_payload": {"target": "mediatek_mt7622"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "mediatek_filogic ${{ github.event.inputs.param }}", "client_payload": {"target": "mediatek_filogic"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "mediatek_mt7981 ${{ github.event.inputs.param }}", "client_payload": {"target": "mediatek_mt7981"}}' - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "mediatek_mt7986 ${{ github.event.inputs.param }}", "client_payload": {"target": "mediatek_mt7986"}}' curl \ -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ -H "Accept: application/vnd.github.everest-preview+json" \ -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ -d '{"event_type": "mediatek_gl_mt7981 ${{ github.event.inputs.param }}", "client_payload": {"target": "mediatek_gl_mt7981"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "ramips_mt7621 ${{ github.event.inputs.param }}", "client_payload": {"target": "ramips_mt7621"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "ramips_mt7620 ${{ github.event.inputs.param }}", "client_payload": {"target": "ramips_mt7620"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "ramips_mt76x8 ${{ github.event.inputs.param }}", "client_payload": {"target": "ramips_mt76x8"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "ipq807x ${{ github.event.inputs.param }}", "client_payload": {"target": "ipq807x"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "ipq40xx_generic ${{ github.event.inputs.param }}", "client_payload": {"target": "ipq40xx_generic"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "bcm4908_generic ${{ github.event.inputs.param }}", "client_payload": {"target": "bcm4908_generic"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "kirkwood_generic ${{ github.event.inputs.param }}", "client_payload": {"target": "kirkwood_generic"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "ipq806x_generic ${{ github.event.inputs.param }}", "client_payload": {"target": "ipq806x_generic"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "ipq807x_ipq60xx ${{ github.event.inputs.param }}", "client_payload": {"target": "ipq807x_ipq60xx"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "meson_meson8b ${{ github.event.inputs.param }}", "client_payload": {"target": "meson_meson8b"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "ipq60xx_generic ${{ github.event.inputs.param }}", "client_payload": {"target": "ipq60xx_generic"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "mvebu_cortexa9 ${{ github.event.inputs.param }}", "client_payload": {"target": "mvebu_cortexa9"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "bcm53xx ${{ github.event.inputs.param }}", "client_payload": {"target": "bcm53xx"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "sunxi_cortexa53 ${{ github.event.inputs.param }}", "client_payload": {"target": "sunxi_cortexa53"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "sunxi_cortexa7 ${{ github.event.inputs.param }}", "client_payload": {"target": "sunxi_cortexa7"}}' - curl \ - -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ - -H "Accept: application/vnd.github.everest-preview+json" \ - -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ - -d '{"event_type": "ath79_nand ${{ github.event.inputs.param }}", "client_payload": {"target": "ath79_nand"}}' - From de7791348659b890f808af390abe72df6b529248 Mon Sep 17 00:00:00 2001 From: kiddin9 <48883331+kiddin9@users.noreply.github.com> Date: Tue, 7 Feb 2023 21:52:42 +0800 Subject: [PATCH 28/28] Update repo-dispatcher.yml --- .github/workflows/repo-dispatcher.yml | 140 ++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) diff --git a/.github/workflows/repo-dispatcher.yml b/.github/workflows/repo-dispatcher.yml index 79fc809f0035..38713e7c7051 100644 --- a/.github/workflows/repo-dispatcher.yml +++ b/.github/workflows/repo-dispatcher.yml @@ -63,8 +63,148 @@ jobs: - name: Trigger Compile run: | sudo timedatectl set-timezone "$TZ" + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "x86_64 ${{ github.event.inputs.param }}", "client_payload": {"target": "x86_64"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "x86_generic ${{ github.event.inputs.param }}", "client_payload": {"target": "x86_generic"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "rockchip_armv8 ${{ github.event.inputs.param }}", "client_payload": {"target": "rockchip_armv8"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "bcm27xx_bcm2711 ${{ github.event.inputs.param }}", "client_payload": {"target": "bcm27xx_bcm2711"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "bcm27xx_bcm2710 ${{ github.event.inputs.param }}", "client_payload": {"target": "bcm27xx_bcm2710"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "bcm27xx_bcm2709 ${{ github.event.inputs.param }}", "client_payload": {"target": "bcm27xx_bcm2709"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "bcm27xx_bcm2708 ${{ github.event.inputs.param }}", "client_payload": {"target": "bcm27xx_bcm2708"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "armvirt_64 ${{ github.event.inputs.param }}", "client_payload": {"target": "armvirt_64"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "mediatek_mt7622 ${{ github.event.inputs.param }}", "client_payload": {"target": "mediatek_mt7622"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "mediatek_filogic ${{ github.event.inputs.param }}", "client_payload": {"target": "mediatek_filogic"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "mediatek_mt7981 ${{ github.event.inputs.param }}", "client_payload": {"target": "mediatek_mt7981"}}' + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "mediatek_mt7986 ${{ github.event.inputs.param }}", "client_payload": {"target": "mediatek_mt7986"}}' curl \ -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ -H "Accept: application/vnd.github.everest-preview+json" \ -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ -d '{"event_type": "mediatek_gl_mt7981 ${{ github.event.inputs.param }}", "client_payload": {"target": "mediatek_gl_mt7981"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "ramips_mt7621 ${{ github.event.inputs.param }}", "client_payload": {"target": "ramips_mt7621"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "ramips_mt7620 ${{ github.event.inputs.param }}", "client_payload": {"target": "ramips_mt7620"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "ramips_mt76x8 ${{ github.event.inputs.param }}", "client_payload": {"target": "ramips_mt76x8"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "ipq807x ${{ github.event.inputs.param }}", "client_payload": {"target": "ipq807x"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "ipq40xx_generic ${{ github.event.inputs.param }}", "client_payload": {"target": "ipq40xx_generic"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "bcm4908_generic ${{ github.event.inputs.param }}", "client_payload": {"target": "bcm4908_generic"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "kirkwood_generic ${{ github.event.inputs.param }}", "client_payload": {"target": "kirkwood_generic"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "ipq806x_generic ${{ github.event.inputs.param }}", "client_payload": {"target": "ipq806x_generic"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "ipq807x_ipq60xx ${{ github.event.inputs.param }}", "client_payload": {"target": "ipq807x_ipq60xx"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "meson_meson8b ${{ github.event.inputs.param }}", "client_payload": {"target": "meson_meson8b"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "ipq60xx_generic ${{ github.event.inputs.param }}", "client_payload": {"target": "ipq60xx_generic"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "mvebu_cortexa9 ${{ github.event.inputs.param }}", "client_payload": {"target": "mvebu_cortexa9"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "bcm53xx ${{ github.event.inputs.param }}", "client_payload": {"target": "bcm53xx"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "sunxi_cortexa53 ${{ github.event.inputs.param }}", "client_payload": {"target": "sunxi_cortexa53"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "sunxi_cortexa7 ${{ github.event.inputs.param }}", "client_payload": {"target": "sunxi_cortexa7"}}' + curl \ + -X POST https://api.github.com/repos/${{ github.repository }}/dispatches \ + -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.REPO_TOKEN }}" \ + -d '{"event_type": "ath79_nand ${{ github.event.inputs.param }}", "client_payload": {"target": "ath79_nand"}}' +