Merge Official Source

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
Tianling Shen 2024-11-13 14:24:28 +08:00
commit 1c8d86eb3a
No known key found for this signature in database
GPG Key ID: 6850B6345C862176
17 changed files with 444 additions and 32 deletions

View File

@ -21,6 +21,11 @@ include $(INCLUDE_DIR)/rootfs.mk
override MAKE:=$(_SINGLE)$(SUBMAKE) override MAKE:=$(_SINGLE)$(SUBMAKE)
override NO_TRACE_MAKE:=$(_SINGLE)$(NO_TRACE_MAKE) override NO_TRACE_MAKE:=$(_SINGLE)$(NO_TRACE_MAKE)
##@
# @brief Convert size with unit postfix to unitless expression in bytes.
#
# @param 1: Size with unit. Possible unit postfix are `g`, `m`, `k`.
##
exp_units = $(subst k, * 1024,$(subst m, * 1024k,$(subst g, * 1024m,$(1)))) exp_units = $(subst k, * 1024,$(subst m, * 1024k,$(subst g, * 1024m,$(1))))
target_params = $(subst +,$(space),$*) target_params = $(subst +,$(space),$*)
@ -111,6 +116,12 @@ endef
PROFILE_SANITIZED := $(call tolower,$(subst DEVICE_,,$(subst $(space),-,$(PROFILE)))) PROFILE_SANITIZED := $(call tolower,$(subst DEVICE_,,$(subst $(space),-,$(PROFILE))))
##@
# @brief Call function for each group of arguments.
#
# @param 1: List of lists of arguments. Lists are separated by `|`.
# @param 2: Function to call for list of arguments.
##
define split_args define split_args
$(foreach data, \ $(foreach data, \
$(subst |,$(space),\ $(subst |,$(space),\
@ -118,12 +129,24 @@ $(foreach data, \
$(call $(2),$(strip $(subst ^,$(space),$(data))))) $(call $(2),$(strip $(subst ^,$(space),$(data)))))
endef endef
##@
# @brief Call build function with arguments.
#
# @param 1: Function to call. Function name is prepended with `Build/`.
# @param 2...: Function arguments.
##
define build_cmd define build_cmd
$(if $(Build/$(word 1,$(1))),,$(error Missing Build/$(word 1,$(1)))) $(if $(Build/$(word 1,$(1))),,$(error Missing Build/$(word 1,$(1))))
$(call Build/$(word 1,$(1)),$(wordlist 2,$(words $(1)),$(1))) $(call Build/$(word 1,$(1)),$(wordlist 2,$(words $(1)),$(1)))
endef endef
##@
# @brief Call build functions from the list.
#
# @param 1: List of build functions with arguments, separated by `|`.
# First word in each group is a build command without `Build/` prefix.
##
define concat_cmd define concat_cmd
$(call split_args,$(1),build_cmd) $(call split_args,$(1),build_cmd)
endef endef
@ -163,6 +186,12 @@ DTC_WARN_FLAGS := \
DTC_FLAGS += $(DTC_WARN_FLAGS) DTC_FLAGS += $(DTC_WARN_FLAGS)
DTCO_FLAGS += $(DTC_WARN_FLAGS) DTCO_FLAGS += $(DTC_WARN_FLAGS)
##@
# @brief Pad file to specified size.
#
# @param 1: File.
# @param 2: Padding.
##
define Image/pad-to define Image/pad-to
dd if=$(1) of=$(1).new bs=$(2) conv=sync dd if=$(1) of=$(1).new bs=$(2) conv=sync
mv $(1).new $(1) mv $(1).new $(1)
@ -403,26 +432,53 @@ define Device/InitProfile
DEVICE_DESCRIPTION = Build firmware images for $$(DEVICE_TITLE) DEVICE_DESCRIPTION = Build firmware images for $$(DEVICE_TITLE)
endef endef
##@
# @brief Image configuration variables.
#
# @param 1: Device name.
##
define Device/Init define Device/Init
##@ Device name.
DEVICE_NAME := $(1) DEVICE_NAME := $(1)
##@ Commands to build kernel.
# Commands with arguments are separated by `|`.
##
KERNEL:= KERNEL:=
##@ Commands to build initramfs.
# Commands with arguments are separated by `|`.
##
KERNEL_INITRAMFS = $$(KERNEL) KERNEL_INITRAMFS = $$(KERNEL)
##@ Kernel command line.
CMDLINE:= CMDLINE:=
##@ Images to build.
IMAGES := IMAGES :=
##@ Artifacts to build.
ARTIFACTS := ARTIFACTS :=
##@ Device image prefix.
DEVICE_IMG_PREFIX := $(IMG_PREFIX)-$(1) DEVICE_IMG_PREFIX := $(IMG_PREFIX)-$(1)
##@ Device image name.
DEVICE_IMG_NAME = $$(DEVICE_IMG_PREFIX)-$$(1)-$$(2) DEVICE_IMG_NAME = $$(DEVICE_IMG_PREFIX)-$$(1)-$$(2)
##@ Factory image name.
FACTORY_IMG_NAME := FACTORY_IMG_NAME :=
##@ Maximum image size. Optional.
IMAGE_SIZE := IMAGE_SIZE :=
##@ Maximum image size. Optional.
NAND_SIZE := NAND_SIZE :=
##@ Kernel image prefix.
KERNEL_PREFIX = $$(DEVICE_IMG_PREFIX) KERNEL_PREFIX = $$(DEVICE_IMG_PREFIX)
##@ Kernel image suffix.
KERNEL_SUFFIX := -kernel.bin KERNEL_SUFFIX := -kernel.bin
##@ Initramfs image suffix.
KERNEL_INITRAMFS_SUFFIX = $$(KERNEL_SUFFIX) KERNEL_INITRAMFS_SUFFIX = $$(KERNEL_SUFFIX)
##@ Kernel image name.
KERNEL_IMAGE = $$(KERNEL_PREFIX)$$(KERNEL_SUFFIX) KERNEL_IMAGE = $$(KERNEL_PREFIX)$$(KERNEL_SUFFIX)
##@ Initramfs image prefix.
KERNEL_INITRAMFS_PREFIX = $$(DEVICE_IMG_PREFIX)-initramfs KERNEL_INITRAMFS_PREFIX = $$(DEVICE_IMG_PREFIX)-initramfs
KERNEL_INITRAMFS_IMAGE = $$(KERNEL_INITRAMFS_PREFIX)$$(KERNEL_INITRAMFS_SUFFIX) KERNEL_INITRAMFS_IMAGE = $$(KERNEL_INITRAMFS_PREFIX)$$(KERNEL_INITRAMFS_SUFFIX)
##@ Initramfs image name.
KERNEL_INITRAMFS_NAME = $$(KERNEL_NAME)-initramfs KERNEL_INITRAMFS_NAME = $$(KERNEL_NAME)-initramfs
##@ Kernel install flag.
KERNEL_INSTALL := KERNEL_INSTALL :=
KERNEL_NAME := vmlinux KERNEL_NAME := vmlinux
KERNEL_DEPENDS := KERNEL_DEPENDS :=

View File

@ -7,10 +7,17 @@ ifneq ($(__target_inc),1)
__target_inc=1 __target_inc=1
# default device type ##@
# @brief Default device type ( basic | nas | router ).
##
DEVICE_TYPE?=router DEVICE_TYPE?=router
# Default packages - the really basic set ##@
# @brief Default packages.
#
# The really basic set. Additional packages are added based on @DEVICE_TYPE and
# @CONFIG_* values.
##
DEFAULT_PACKAGES:=\ DEFAULT_PACKAGES:=\
base-files \ base-files \
ca-bundle \ ca-bundle \
@ -27,15 +34,21 @@ DEFAULT_PACKAGES:=\
urandom-seed \ urandom-seed \
urngd urngd
# For the basic set ##@
# @brief Default packages for @DEVICE_TYPE basic.
##
DEFAULT_PACKAGES.basic:= DEFAULT_PACKAGES.basic:=
# For nas targets ##@
# @brief Default packages for @DEVICE_TYPE nas.
##
DEFAULT_PACKAGES.nas:=\ DEFAULT_PACKAGES.nas:=\
block-mount \ block-mount \
fdisk \ fdisk \
lsblk \ lsblk \
mdadm mdadm
# For router targets ##@
# @brief Default packages for @DEVICE_TYPE router.
##
DEFAULT_PACKAGES.router:=\ DEFAULT_PACKAGES.router:=\
dnsmasq-full \ dnsmasq-full \
firewall4 \ firewall4 \
@ -101,7 +114,18 @@ DEFAULT_PACKAGES += $(DEFAULT_PACKAGES.$(DEVICE_TYPE))
# Add tweaked packages # Add tweaked packages
# DEFAULT_PACKAGES += $(DEFAULT_PACKAGES.tweak) # DEFAULT_PACKAGES += $(DEFAULT_PACKAGES.tweak)
##@
# @brief Filter out packages, prepended with `-`.
#
# @param 1: Package list.
##
filter_packages = $(filter-out -% $(patsubst -%,%,$(filter -%,$(1))),$(1)) filter_packages = $(filter-out -% $(patsubst -%,%,$(filter -%,$(1))),$(1))
##@
# @brief Append extra package dependencies.
#
# @param 1: Package list.
##
extra_packages = $(if $(filter wpad wpad-% nas,$(1)),iwinfo) extra_packages = $(if $(filter wpad wpad-% nas,$(1)),iwinfo)
define ProfileDefault define ProfileDefault

View File

@ -131,6 +131,11 @@ ifneq ($(CONFIG_USE_APK),)
--sign $(BUILD_KEY_APK_SEC) \ --sign $(BUILD_KEY_APK_SEC) \
--output packages.adb \ --output packages.adb \
$$(ls *.apk | grep -v 'base-files-\|kernel-\|libc-'); \ $$(ls *.apk | grep -v 'base-files-\|kernel-\|libc-'); \
echo -n '{"architecture": "$(ARCH_PACKAGES)", "packages":{' > index.json; \
$(STAGING_DIR_HOST)/bin/apk adbdump packages.adb | \
awk '/- name: / {pkg = $$NF} ; / version: / {printf "\"%s\": \"%s\", ", pkg, $$NF}' | \
sed 's/, $$//' >> index.json; \
echo '}}' >> index.json; \
done done
else else
@for d in $(PACKAGE_SUBDIRS); do ( \ @for d in $(PACKAGE_SUBDIRS); do ( \

View File

@ -39,7 +39,11 @@ endif
define Package/base-files define Package/base-files
SECTION:=base SECTION:=base
CATEGORY:=Base system CATEGORY:=Base system
DEPENDS:=+netifd +libc +jsonfilter +SIGNED_PACKAGES:usign +SIGNED_PACKAGES:openwrt-keyring +NAND_SUPPORT:ubi-utils +fstools +fwtool DEPENDS:= \
+netifd +libc +jsonfilter +SIGNED_PACKAGES:usign +SIGNED_PACKAGES:openwrt-keyring \
+NAND_SUPPORT:ubi-utils +fstools +fwtool \
+SELINUX:procd-selinux +!SELINUX:procd +SECCOMP:procd-seccomp \
+SELINUX:busybox-selinux +!SELINUX:busybox
TITLE:=Base filesystem for OpenWrt TITLE:=Base filesystem for OpenWrt
URL:=http://openwrt.org/ URL:=http://openwrt.org/
VERSION:=$(PKG_RELEASE)~$(lastword $(subst -, ,$(REVISION))) VERSION:=$(PKG_RELEASE)~$(lastword $(subst -, ,$(REVISION)))

View File

@ -30,7 +30,7 @@ define Package/perf
DEPENDS:= +libelf +libdw +PACKAGE_libunwind:libunwind +libpthread +librt +objdump @!IN_SDK @KERNEL_PERF_EVENTS \ DEPENDS:= +libelf +libdw +PACKAGE_libunwind:libunwind +libpthread +librt +objdump @!IN_SDK @KERNEL_PERF_EVENTS \
+PACKAGE_libbfd:libbfd +PACKAGE_libopcodes:libopcodes +libtraceevent +PACKAGE_libbfd:libbfd +PACKAGE_libopcodes:libopcodes +libtraceevent
TITLE:=Linux performance monitoring tool TITLE:=Linux performance monitoring tool
VERSION:=$(LINUX_VERSION)-$(PKG_RELEASE) VERSION:=$(LINUX_VERSION)-r$(PKG_RELEASE)
URL:=http://www.kernel.org URL:=http://www.kernel.org
endef endef

View File

@ -28,7 +28,7 @@ include $(INCLUDE_DIR)/package.mk
define KernelPackage/cryptodev define KernelPackage/cryptodev
SUBMENU:=Cryptographic API modules SUBMENU:=Cryptographic API modules
TITLE:=Driver for cryptographic acceleration TITLE:=Driver for cryptographic acceleration
URL:=http://cryptodev-linux.org/ URL:=https://github.com/cryptodev-linux/cryptodev-linux
DEPENDS:=+kmod-crypto-authenc +kmod-crypto-hash DEPENDS:=+kmod-crypto-authenc +kmod-crypto-hash
FILES:=$(PKG_BUILD_DIR)/cryptodev.$(LINUX_KMOD_SUFFIX) FILES:=$(PKG_BUILD_DIR)/cryptodev.$(LINUX_KMOD_SUFFIX)
AUTOLOAD:=$(call AutoLoad,50,cryptodev) AUTOLOAD:=$(call AutoLoad,50,cryptodev)
@ -36,8 +36,9 @@ define KernelPackage/cryptodev
endef endef
define KernelPackage/cryptodev/description define KernelPackage/cryptodev/description
This is a driver for that allows to use the Linux kernel supported This driver allows use of the Linux kernel supported hardware-based
hardware ciphers by user-space applications. cryptographic and hash accelerators by user-space applications,
via a "/dev/crypto" device.
endef endef
define Build/Configure define Build/Configure

View File

@ -50,7 +50,6 @@ define Package/procd
$(call Package/procd/Default) $(call Package/procd/Default)
VARIANT:=default VARIANT:=default
CONFLICTS:=procd-selinux CONFLICTS:=procd-selinux
DEFAULT:=y if !SELINUX
endef endef
define Package/procd-selinux define Package/procd-selinux
@ -59,7 +58,6 @@ define Package/procd-selinux
TITLE += with SELinux support TITLE += with SELinux support
PROVIDES:=procd PROVIDES:=procd
VARIANT:=selinux VARIANT:=selinux
DEFAULT:=y if SELINUX
endef endef
define Package/procd-ujail define Package/procd-ujail
@ -75,7 +73,6 @@ define Package/procd-seccomp
CATEGORY:=Base system CATEGORY:=Base system
DEPENDS:=@SECCOMP +libubox +libblobmsg-json DEPENDS:=@SECCOMP +libubox +libblobmsg-json
TITLE:=OpenWrt process seccomp helper + utrace TITLE:=OpenWrt process seccomp helper + utrace
DEFAULT:=y if SECCOMP
endef endef
define Package/uxc define Package/uxc

View File

@ -56,7 +56,6 @@ define Package/busybox
$(call Package/busybox/Default) $(call Package/busybox/Default)
CONFLICTS:=busybox-selinux CONFLICTS:=busybox-selinux
VARIANT:=default VARIANT:=default
DEFAULT:=y if !SELINUX
endef endef
define Package/busybox-selinux define Package/busybox-selinux
@ -65,7 +64,6 @@ define Package/busybox-selinux
DEPENDS += +libselinux DEPENDS += +libselinux
VARIANT:=selinux VARIANT:=selinux
PROVIDES:=busybox PROVIDES:=busybox
DEFAULT:=y if SELINUX
endef endef
define Package/busybox/description define Package/busybox/description

View File

@ -20,6 +20,11 @@ endif
export TMP_DIR:=$(TOPDIR)/tmp export TMP_DIR:=$(TOPDIR)/tmp
export TMPDIR:=$(TMP_DIR) export TMPDIR:=$(TMP_DIR)
##@
# @brief Strip quotes `"` and pounds `#` from string.
#
# @param 1: String.
##
qstrip=$(strip $(subst ",,$(1))) qstrip=$(strip $(subst ",,$(1)))
#")) #"))
@ -27,8 +32,23 @@ empty:=
space:= $(empty) $(empty) space:= $(empty) $(empty)
comma:=, comma:=,
pound:=\# pound:=\#
##@
# @brief Merge strings by removing spaces.
#
# @param 1: String.
##
merge=$(subst $(space),,$(1)) merge=$(subst $(space),,$(1))
##@
# @brief Get hash sum of variable list.
#
# @param 1: List of variable names.
##
confvar=$(shell echo '$(foreach v,$(1),$(v)=$(subst ','\'',$($(v))))' | $(MKHASH) md5) confvar=$(shell echo '$(foreach v,$(1),$(v)=$(subst ','\'',$($(v))))' | $(MKHASH) md5)
##@
# @brief Strip last extension from file name.
#
# @param 1: File name.
##
strip_last=$(patsubst %.$(lastword $(subst .,$(space),$(1))),%,$(1)) strip_last=$(patsubst %.$(lastword $(subst .,$(space),$(1))),%,$(1))
paren_left = ( paren_left = (
@ -51,9 +71,18 @@ __tr_head = $(subst $(paren_left)subst,$(paren_left)subst$(space),$(__tr_head_st
__tr_tail = $(subst $(space),,$(foreach cv,$(1),$(paren_right))) __tr_tail = $(subst $(space),,$(foreach cv,$(1),$(paren_right)))
__tr_template = $(__tr_head)$$(1)$(__tr_tail) __tr_template = $(__tr_head)$$(1)$(__tr_tail)
##@
# @brief Convert string characters to upper.
##
$(eval toupper = $(call __tr_template,$(chars_lower),$(chars_upper))) $(eval toupper = $(call __tr_template,$(chars_lower),$(chars_upper)))
##@
# @brief Convert string characters to lower.
##
$(eval tolower = $(call __tr_template,$(chars_upper),$(chars_lower))) $(eval tolower = $(call __tr_template,$(chars_upper),$(chars_lower)))
##@
# @brief Abbreviate version. Truncate to 8 characters.
##
version_abbrev = $(if $(if $(CHECK),,$(DUMP)),$(1),$(shell printf '%.8s' $(1))) version_abbrev = $(if $(if $(CHECK),,$(DUMP)),$(1),$(shell printf '%.8s' $(1)))
_SINGLE=export MAKEFLAGS=$(space); _SINGLE=export MAKEFLAGS=$(space);
@ -102,6 +131,13 @@ endif
DEFAULT_SUBDIR_TARGETS:=clean download prepare compile update refresh prereq dist distcheck configure check check-depends DEFAULT_SUBDIR_TARGETS:=clean download prepare compile update refresh prereq dist distcheck configure check check-depends
##@
# @brief Create default targets.
#
# Targets are created from @DEFAULT_SUBDIR_TARGETS and input argument lists.
#
# @param 1: Additional targets list.
##
define DefaultTargets define DefaultTargets
$(foreach t,$(DEFAULT_SUBDIR_TARGETS) $(1), $(foreach t,$(DEFAULT_SUBDIR_TARGETS) $(1),
.$(t): .$(t):
@ -371,16 +407,28 @@ export BISON_PKGDATADIR:=$(STAGING_DIR_HOST)/share/bison
export HOST_GNULIB_SRCDIR:=$(STAGING_DIR_HOST)/share/gnulib export HOST_GNULIB_SRCDIR:=$(STAGING_DIR_HOST)/share/gnulib
export M4:=$(STAGING_DIR_HOST)/bin/m4 export M4:=$(STAGING_DIR_HOST)/bin/m4
##@
# @brief Slugify variable name and prepend suffix.
##
define shvar define shvar
V_$(subst .,_,$(subst -,_,$(subst /,_,$(1)))) V_$(subst .,_,$(subst -,_,$(subst /,_,$(1))))
endef endef
##@
# @brief Create and export variable, set to function result.
#
# @param 1: Function name. Used as variable name, prepended with `V_`.
##
define shexport define shexport
export $(call shvar,$(1))=$$(call $(1)) export $(call shvar,$(1))=$$(call $(1))
endef endef
##@
# @brief Support 64 bit tine in C code.
#
# Test support for 64-bit time with C code from largefile.m4 provided by GNU Gnulib # Test support for 64-bit time with C code from largefile.m4 provided by GNU Gnulib
# the value is 'y' when successful and '' otherwise # the value is `y` when successful and `` otherwise
##
define YEAR_2038 define YEAR_2038
$(shell \ $(shell \
mkdir -p $(TMP_DIR); \ mkdir -p $(TMP_DIR); \
@ -392,9 +440,12 @@ $(shell \
) )
endef endef
# Execute commands under flock ##@
# $(1) => The shell expression. # @brief Execute commands under flock
# $(2) => The lock name. If not given, the global lock will be used. #
# @param 1: The shell expression.
# @param 2: The lock name. If not given, the global lock will be used.
##
ifneq ($(wildcard $(STAGING_DIR_HOST)/bin/flock),) ifneq ($(wildcard $(STAGING_DIR_HOST)/bin/flock),)
define locked define locked
SHELL= \ SHELL= \
@ -406,10 +457,14 @@ else
locked=$(1) locked=$(1)
endif endif
# Recursively copy paths into another directory, purge dangling
##@
# @brief Recursively copy paths into another directory, purge dangling
# symlinks before. # symlinks before.
# $(1) => File glob expression #
# $(2) => Destination directory # @param 1: File glob expression.
# @param 1: Destination directory.
##
define file_copy define file_copy
for src_dir in $(sort $(foreach d,$(wildcard $(1)),$(dir $(d)))); do \ for src_dir in $(sort $(foreach d,$(wildcard $(1)),$(dir $(d)))); do \
( cd $$src_dir; find -type f -or -type d ) | \ ( cd $$src_dir; find -type f -or -type d ) | \
@ -424,19 +479,30 @@ define file_copy
$(CP) $(1) $(2) $(CP) $(1) $(2)
endef endef
# Calculate sha256sum of any plain file within a given directory ##@
# $(1) => Input directory # @brief Calculate sha256sum of any plain file within a given directory.
# $(2) => If set, recurse into subdirectories #
# @param 1: Input directory.
# @param 2: If set, recurse into subdirectories.
##
define sha256sums define sha256sums
(cd $(1); find . $(if $(2),,-maxdepth 1) -type f -not -name 'sha256sums' -printf "%P\n" | sort | \ (cd $(1); find . $(if $(2),,-maxdepth 1) -type f -not -name 'sha256sums' -printf "%P\n" | sort | \
xargs -r $(MKHASH) -n sha256 | sed -ne 's!^\(.*\) \(.*\)$$!\1 *\2!p' > sha256sums) xargs -r $(MKHASH) -n sha256 | sed -ne 's!^\(.*\) \(.*\)$$!\1 *\2!p' > sha256sums)
endef endef
# file extension ##@
# @brief Retrieve file extension.
#
# @param 1: File name.
##
ext=$(word $(words $(subst ., ,$(1))),$(subst ., ,$(1))) ext=$(word $(words $(subst ., ,$(1))),$(subst ., ,$(1)))
# Count Git commits of a package ##@
# $(1) => if non-empty: count commits since last ": [uU]pdate to " or ": [bB]ump to " in commit message # @brief Count Git commits of a package.
#
# @param 1: if non-empty: count commits since last ": [uU]pdate to "
# or ": [bB]ump to " in commit message.
##
define commitcount define commitcount
$(shell \ $(shell \
if git log -1 >/dev/null 2>/dev/null; then \ if git log -1 >/dev/null 2>/dev/null; then \
@ -458,6 +524,11 @@ $(shell \
) )
endef endef
##@
# @brief Get ABI version string, stripping `-`, `_` and `.`.
#
# @param 1: Version string.
##
abi_version_str = $(subst -,,$(subst _,,$(subst .,,$(1)))) abi_version_str = $(subst -,,$(subst _,,$(subst .,,$(1))))
COMMITCOUNT = $(if $(DUMP),0,$(call commitcount)) COMMITCOUNT = $(if $(DUMP),0,$(call commitcount))

View File

@ -138,6 +138,11 @@ _call_info: FORCE
echo 'Available Profiles:' echo 'Available Profiles:'
echo; $(PROFILE_LIST) echo; $(PROFILE_LIST)
ifneq ($(CONFIG_USE_APK),)
DEFAULT_PACKAGES += apk-openssl
else
DEFAULT_PACKAGES += opkg
endif
BUILD_PACKAGES:=$(sort $(DEFAULT_PACKAGES) $($(USER_PROFILE)_PACKAGES) kernel) BUILD_PACKAGES:=$(sort $(DEFAULT_PACKAGES) $($(USER_PROFILE)_PACKAGES) kernel)
# "-pkgname" in the package list means remove "pkgname" from the package list # "-pkgname" in the package list means remove "pkgname" from the package list
BUILD_PACKAGES:=$(filter-out $(filter -%,$(BUILD_PACKAGES)) $(patsubst -%,%,$(filter -%,$(BUILD_PACKAGES))),$(BUILD_PACKAGES)) BUILD_PACKAGES:=$(filter-out $(filter -%,$(BUILD_PACKAGES)) $(patsubst -%,%,$(filter -%,$(BUILD_PACKAGES))),$(BUILD_PACKAGES))

View File

@ -0,0 +1,92 @@
From 3affa310de523d63e52ea8e2efb3c476df29e414 Mon Sep 17 00:00:00 2001
From: Lorenzo Bianconi <lorenzo@kernel.org>
Date: Tue, 29 Oct 2024 13:17:09 +0100
Subject: [PATCH 1/2] net: airoha: Read completion queue data in
airoha_qdma_tx_napi_poll()
In order to avoid any possible race, read completion queue head and
pending entry in airoha_qdma_tx_napi_poll routine instead of doing it in
airoha_irq_handler. Remove unused airoha_tx_irq_queue unused fields.
This is a preliminary patch to add Qdisc offload for airoha_eth driver.
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://patch.msgid.link/20241029-airoha-en7581-tx-napi-work-v1-1-96ad1686b946@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
drivers/net/ethernet/mediatek/airoha_eth.c | 31 +++++++++-------------
1 file changed, 13 insertions(+), 18 deletions(-)
--- a/drivers/net/ethernet/mediatek/airoha_eth.c
+++ b/drivers/net/ethernet/mediatek/airoha_eth.c
@@ -752,11 +752,9 @@ struct airoha_tx_irq_queue {
struct airoha_qdma *qdma;
struct napi_struct napi;
- u32 *q;
int size;
- int queued;
- u16 head;
+ u32 *q;
};
struct airoha_hw_stats {
@@ -1656,25 +1654,31 @@ static int airoha_qdma_init_rx(struct ai
static int airoha_qdma_tx_napi_poll(struct napi_struct *napi, int budget)
{
struct airoha_tx_irq_queue *irq_q;
+ int id, done = 0, irq_queued;
struct airoha_qdma *qdma;
struct airoha_eth *eth;
- int id, done = 0;
+ u32 status, head;
irq_q = container_of(napi, struct airoha_tx_irq_queue, napi);
qdma = irq_q->qdma;
id = irq_q - &qdma->q_tx_irq[0];
eth = qdma->eth;
- while (irq_q->queued > 0 && done < budget) {
- u32 qid, last, val = irq_q->q[irq_q->head];
+ status = airoha_qdma_rr(qdma, REG_IRQ_STATUS(id));
+ head = FIELD_GET(IRQ_HEAD_IDX_MASK, status);
+ head = head % irq_q->size;
+ irq_queued = FIELD_GET(IRQ_ENTRY_LEN_MASK, status);
+
+ while (irq_queued > 0 && done < budget) {
+ u32 qid, last, val = irq_q->q[head];
struct airoha_queue *q;
if (val == 0xff)
break;
- irq_q->q[irq_q->head] = 0xff; /* mark as done */
- irq_q->head = (irq_q->head + 1) % irq_q->size;
- irq_q->queued--;
+ irq_q->q[head] = 0xff; /* mark as done */
+ head = (head + 1) % irq_q->size;
+ irq_queued--;
done++;
last = FIELD_GET(IRQ_DESC_IDX_MASK, val);
@@ -2026,20 +2030,11 @@ static irqreturn_t airoha_irq_handler(in
if (intr[0] & INT_TX_MASK) {
for (i = 0; i < ARRAY_SIZE(qdma->q_tx_irq); i++) {
- struct airoha_tx_irq_queue *irq_q = &qdma->q_tx_irq[i];
- u32 status, head;
-
if (!(intr[0] & TX_DONE_INT_MASK(i)))
continue;
airoha_qdma_irq_disable(qdma, QDMA_INT_REG_IDX0,
TX_DONE_INT_MASK(i));
-
- status = airoha_qdma_rr(qdma, REG_IRQ_STATUS(i));
- head = FIELD_GET(IRQ_HEAD_IDX_MASK, status);
- irq_q->head = head % irq_q->size;
- irq_q->queued = FIELD_GET(IRQ_ENTRY_LEN_MASK, status);
-
napi_schedule(&qdma->q_tx_irq[i].napi);
}
}

View File

@ -0,0 +1,130 @@
From 0c729f53b8c33b9e5eadc2d5e673759e3510501e Mon Sep 17 00:00:00 2001
From: Lorenzo Bianconi <lorenzo@kernel.org>
Date: Tue, 29 Oct 2024 13:17:10 +0100
Subject: [PATCH 2/2] net: airoha: Simplify Tx napi logic
Simplify Tx napi logic relying just on the packet index provided by
completion queue indicating the completed packet that can be removed
from the Tx DMA ring.
This is a preliminary patch to add Qdisc offload for airoha_eth driver.
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://patch.msgid.link/20241029-airoha-en7581-tx-napi-work-v1-2-96ad1686b946@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
drivers/net/ethernet/mediatek/airoha_eth.c | 73 ++++++++++++----------
1 file changed, 41 insertions(+), 32 deletions(-)
--- a/drivers/net/ethernet/mediatek/airoha_eth.c
+++ b/drivers/net/ethernet/mediatek/airoha_eth.c
@@ -1670,8 +1670,12 @@ static int airoha_qdma_tx_napi_poll(stru
irq_queued = FIELD_GET(IRQ_ENTRY_LEN_MASK, status);
while (irq_queued > 0 && done < budget) {
- u32 qid, last, val = irq_q->q[head];
+ u32 qid, val = irq_q->q[head];
+ struct airoha_qdma_desc *desc;
+ struct airoha_queue_entry *e;
struct airoha_queue *q;
+ u32 index, desc_ctrl;
+ struct sk_buff *skb;
if (val == 0xff)
break;
@@ -1681,9 +1685,7 @@ static int airoha_qdma_tx_napi_poll(stru
irq_queued--;
done++;
- last = FIELD_GET(IRQ_DESC_IDX_MASK, val);
qid = FIELD_GET(IRQ_RING_IDX_MASK, val);
-
if (qid >= ARRAY_SIZE(qdma->q_tx))
continue;
@@ -1691,46 +1693,53 @@ static int airoha_qdma_tx_napi_poll(stru
if (!q->ndesc)
continue;
+ index = FIELD_GET(IRQ_DESC_IDX_MASK, val);
+ if (index >= q->ndesc)
+ continue;
+
spin_lock_bh(&q->lock);
- while (q->queued > 0) {
- struct airoha_qdma_desc *desc = &q->desc[q->tail];
- struct airoha_queue_entry *e = &q->entry[q->tail];
- u32 desc_ctrl = le32_to_cpu(desc->ctrl);
- struct sk_buff *skb = e->skb;
- u16 index = q->tail;
-
- if (!(desc_ctrl & QDMA_DESC_DONE_MASK) &&
- !(desc_ctrl & QDMA_DESC_DROP_MASK))
- break;
+ if (!q->queued)
+ goto unlock;
- q->tail = (q->tail + 1) % q->ndesc;
- q->queued--;
+ desc = &q->desc[index];
+ desc_ctrl = le32_to_cpu(desc->ctrl);
- dma_unmap_single(eth->dev, e->dma_addr, e->dma_len,
- DMA_TO_DEVICE);
-
- WRITE_ONCE(desc->msg0, 0);
- WRITE_ONCE(desc->msg1, 0);
+ if (!(desc_ctrl & QDMA_DESC_DONE_MASK) &&
+ !(desc_ctrl & QDMA_DESC_DROP_MASK))
+ goto unlock;
+
+ e = &q->entry[index];
+ skb = e->skb;
+
+ dma_unmap_single(eth->dev, e->dma_addr, e->dma_len,
+ DMA_TO_DEVICE);
+ memset(e, 0, sizeof(*e));
+ WRITE_ONCE(desc->msg0, 0);
+ WRITE_ONCE(desc->msg1, 0);
+ q->queued--;
+
+ /* completion ring can report out-of-order indexes if hw QoS
+ * is enabled and packets with different priority are queued
+ * to same DMA ring. Take into account possible out-of-order
+ * reports incrementing DMA ring tail pointer
+ */
+ while (q->tail != q->head && !q->entry[q->tail].dma_addr)
+ q->tail = (q->tail + 1) % q->ndesc;
- if (skb) {
- u16 queue = skb_get_queue_mapping(skb);
- struct netdev_queue *txq;
-
- txq = netdev_get_tx_queue(skb->dev, queue);
- netdev_tx_completed_queue(txq, 1, skb->len);
- if (netif_tx_queue_stopped(txq) &&
- q->ndesc - q->queued >= q->free_thr)
- netif_tx_wake_queue(txq);
-
- dev_kfree_skb_any(skb);
- e->skb = NULL;
- }
+ if (skb) {
+ u16 queue = skb_get_queue_mapping(skb);
+ struct netdev_queue *txq;
+
+ txq = netdev_get_tx_queue(skb->dev, queue);
+ netdev_tx_completed_queue(txq, 1, skb->len);
+ if (netif_tx_queue_stopped(txq) &&
+ q->ndesc - q->queued >= q->free_thr)
+ netif_tx_wake_queue(txq);
- if (index == last)
- break;
+ dev_kfree_skb_any(skb);
}
-
+unlock:
spin_unlock_bh(&q->lock);
}

View File

@ -0,0 +1,27 @@
From 7e102b1eb2ca3eff7a6f33ebeab17825e6f70956 Mon Sep 17 00:00:00 2001
From: Robert Marko <robimarko@gmail.com>
Date: Mon, 4 Nov 2024 22:01:24 +0100
Subject: [PATCH] arm64: dts: qcom: ipq6018: add NSS reserved memory
It seems that despite NSS not being supported in OpenWrt the memory it
usually uses needs to be reserved anyway for stability reasons.
Signed-off-by: Robert Marko <robimarko@gmail.com>
---
arch/arm64/boot/dts/qcom/ipq6018.dtsi | 5 +++++
1 file changed, 5 insertions(+)
--- a/arch/arm64/boot/dts/qcom/ipq6018.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq6018.dtsi
@@ -199,6 +199,11 @@
no-map;
};
+ nss_region: memory@40000000 {
+ reg = <0x0 0x40000000 0x0 0x01000000>;
+ no-map;
+ };
+
bootloader@4a100000 {
reg = <0x0 0x4a100000 0x0 0x400000>;
no-map;

View File

@ -15,7 +15,7 @@ Signed-off-by: Mantas Pucka <mantas@8devices.com>
--- a/arch/arm64/boot/dts/qcom/ipq6018.dtsi --- a/arch/arm64/boot/dts/qcom/ipq6018.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq6018.dtsi +++ b/arch/arm64/boot/dts/qcom/ipq6018.dtsi
@@ -809,6 +809,102 @@ @@ -814,6 +814,102 @@
}; };
}; };

View File

@ -15,7 +15,7 @@ Signed-off-by: Mantas Pucka <mantas@8devices.com>
--- a/arch/arm64/boot/dts/qcom/ipq6018.dtsi --- a/arch/arm64/boot/dts/qcom/ipq6018.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq6018.dtsi +++ b/arch/arm64/boot/dts/qcom/ipq6018.dtsi
@@ -1157,6 +1157,7 @@ @@ -1162,6 +1162,7 @@
wcss_smp2p_out: master-kernel { wcss_smp2p_out: master-kernel {
qcom,entry-name = "master-kernel"; qcom,entry-name = "master-kernel";

View File

@ -13,7 +13,7 @@ Signed-off-by: Mantas Pucka <mantas@8devices.com>
--- a/arch/arm64/boot/dts/qcom/ipq6018.dtsi --- a/arch/arm64/boot/dts/qcom/ipq6018.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq6018.dtsi +++ b/arch/arm64/boot/dts/qcom/ipq6018.dtsi
@@ -930,8 +930,8 @@ @@ -935,8 +935,8 @@
"wcss_reset", "wcss_reset",
"wcss_q6_reset"; "wcss_q6_reset";

View File

@ -1492,7 +1492,9 @@ static int __init rtl83xx_sw_probe(struct platform_device *pdev)
priv->ds->needs_standalone_vlan_filtering = true; priv->ds->needs_standalone_vlan_filtering = true;
priv->dev = dev; priv->dev = dev;
mutex_init(&priv->reg_mutex); err = devm_mutex_init(dev, &priv->reg_mutex);
if (err)
return err;
priv->family_id = soc_info.family; priv->family_id = soc_info.family;
priv->id = soc_info.id; priv->id = soc_info.id;