Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
commit
1c8d86eb3a
@ -21,6 +21,11 @@ include $(INCLUDE_DIR)/rootfs.mk
|
||||
override MAKE:=$(_SINGLE)$(SUBMAKE)
|
||||
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))))
|
||||
|
||||
target_params = $(subst +,$(space),$*)
|
||||
@ -111,6 +116,12 @@ endef
|
||||
|
||||
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
|
||||
$(foreach data, \
|
||||
$(subst |,$(space),\
|
||||
@ -118,12 +129,24 @@ $(foreach data, \
|
||||
$(call $(2),$(strip $(subst ^,$(space),$(data)))))
|
||||
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
|
||||
$(if $(Build/$(word 1,$(1))),,$(error Missing Build/$(word 1,$(1))))
|
||||
$(call Build/$(word 1,$(1)),$(wordlist 2,$(words $(1)),$(1)))
|
||||
|
||||
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
|
||||
$(call split_args,$(1),build_cmd)
|
||||
endef
|
||||
@ -163,6 +186,12 @@ DTC_WARN_FLAGS := \
|
||||
DTC_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
|
||||
dd if=$(1) of=$(1).new bs=$(2) conv=sync
|
||||
mv $(1).new $(1)
|
||||
@ -403,26 +432,53 @@ define Device/InitProfile
|
||||
DEVICE_DESCRIPTION = Build firmware images for $$(DEVICE_TITLE)
|
||||
endef
|
||||
|
||||
##@
|
||||
# @brief Image configuration variables.
|
||||
#
|
||||
# @param 1: Device name.
|
||||
##
|
||||
define Device/Init
|
||||
##@ Device name.
|
||||
DEVICE_NAME := $(1)
|
||||
##@ Commands to build kernel.
|
||||
# Commands with arguments are separated by `|`.
|
||||
##
|
||||
KERNEL:=
|
||||
##@ Commands to build initramfs.
|
||||
# Commands with arguments are separated by `|`.
|
||||
##
|
||||
KERNEL_INITRAMFS = $$(KERNEL)
|
||||
##@ Kernel command line.
|
||||
CMDLINE:=
|
||||
|
||||
##@ Images to build.
|
||||
IMAGES :=
|
||||
##@ Artifacts to build.
|
||||
ARTIFACTS :=
|
||||
##@ Device image prefix.
|
||||
DEVICE_IMG_PREFIX := $(IMG_PREFIX)-$(1)
|
||||
##@ Device image name.
|
||||
DEVICE_IMG_NAME = $$(DEVICE_IMG_PREFIX)-$$(1)-$$(2)
|
||||
##@ Factory image name.
|
||||
FACTORY_IMG_NAME :=
|
||||
##@ Maximum image size. Optional.
|
||||
IMAGE_SIZE :=
|
||||
##@ Maximum image size. Optional.
|
||||
NAND_SIZE :=
|
||||
##@ Kernel image prefix.
|
||||
KERNEL_PREFIX = $$(DEVICE_IMG_PREFIX)
|
||||
##@ Kernel image suffix.
|
||||
KERNEL_SUFFIX := -kernel.bin
|
||||
##@ Initramfs image suffix.
|
||||
KERNEL_INITRAMFS_SUFFIX = $$(KERNEL_SUFFIX)
|
||||
##@ Kernel image name.
|
||||
KERNEL_IMAGE = $$(KERNEL_PREFIX)$$(KERNEL_SUFFIX)
|
||||
##@ Initramfs image prefix.
|
||||
KERNEL_INITRAMFS_PREFIX = $$(DEVICE_IMG_PREFIX)-initramfs
|
||||
KERNEL_INITRAMFS_IMAGE = $$(KERNEL_INITRAMFS_PREFIX)$$(KERNEL_INITRAMFS_SUFFIX)
|
||||
##@ Initramfs image name.
|
||||
KERNEL_INITRAMFS_NAME = $$(KERNEL_NAME)-initramfs
|
||||
##@ Kernel install flag.
|
||||
KERNEL_INSTALL :=
|
||||
KERNEL_NAME := vmlinux
|
||||
KERNEL_DEPENDS :=
|
||||
|
||||
@ -7,10 +7,17 @@ ifneq ($(__target_inc),1)
|
||||
__target_inc=1
|
||||
|
||||
|
||||
# default device type
|
||||
##@
|
||||
# @brief Default device type ( basic | nas | 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:=\
|
||||
base-files \
|
||||
ca-bundle \
|
||||
@ -27,15 +34,21 @@ DEFAULT_PACKAGES:=\
|
||||
urandom-seed \
|
||||
urngd
|
||||
|
||||
# For the basic set
|
||||
##@
|
||||
# @brief Default packages for @DEVICE_TYPE basic.
|
||||
##
|
||||
DEFAULT_PACKAGES.basic:=
|
||||
# For nas targets
|
||||
##@
|
||||
# @brief Default packages for @DEVICE_TYPE nas.
|
||||
##
|
||||
DEFAULT_PACKAGES.nas:=\
|
||||
block-mount \
|
||||
fdisk \
|
||||
lsblk \
|
||||
mdadm
|
||||
# For router targets
|
||||
##@
|
||||
# @brief Default packages for @DEVICE_TYPE router.
|
||||
##
|
||||
DEFAULT_PACKAGES.router:=\
|
||||
dnsmasq-full \
|
||||
firewall4 \
|
||||
@ -101,7 +114,18 @@ DEFAULT_PACKAGES += $(DEFAULT_PACKAGES.$(DEVICE_TYPE))
|
||||
# Add tweaked packages
|
||||
# DEFAULT_PACKAGES += $(DEFAULT_PACKAGES.tweak)
|
||||
|
||||
##@
|
||||
# @brief Filter out packages, prepended with `-`.
|
||||
#
|
||||
# @param 1: Package list.
|
||||
##
|
||||
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)
|
||||
|
||||
define ProfileDefault
|
||||
|
||||
@ -131,6 +131,11 @@ ifneq ($(CONFIG_USE_APK),)
|
||||
--sign $(BUILD_KEY_APK_SEC) \
|
||||
--output packages.adb \
|
||||
$$(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
|
||||
else
|
||||
@for d in $(PACKAGE_SUBDIRS); do ( \
|
||||
|
||||
@ -39,7 +39,11 @@ endif
|
||||
define Package/base-files
|
||||
SECTION:=base
|
||||
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
|
||||
URL:=http://openwrt.org/
|
||||
VERSION:=$(PKG_RELEASE)~$(lastword $(subst -, ,$(REVISION)))
|
||||
|
||||
@ -30,7 +30,7 @@ define Package/perf
|
||||
DEPENDS:= +libelf +libdw +PACKAGE_libunwind:libunwind +libpthread +librt +objdump @!IN_SDK @KERNEL_PERF_EVENTS \
|
||||
+PACKAGE_libbfd:libbfd +PACKAGE_libopcodes:libopcodes +libtraceevent
|
||||
TITLE:=Linux performance monitoring tool
|
||||
VERSION:=$(LINUX_VERSION)-$(PKG_RELEASE)
|
||||
VERSION:=$(LINUX_VERSION)-r$(PKG_RELEASE)
|
||||
URL:=http://www.kernel.org
|
||||
endef
|
||||
|
||||
|
||||
@ -28,7 +28,7 @@ include $(INCLUDE_DIR)/package.mk
|
||||
define KernelPackage/cryptodev
|
||||
SUBMENU:=Cryptographic API modules
|
||||
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
|
||||
FILES:=$(PKG_BUILD_DIR)/cryptodev.$(LINUX_KMOD_SUFFIX)
|
||||
AUTOLOAD:=$(call AutoLoad,50,cryptodev)
|
||||
@ -36,8 +36,9 @@ define KernelPackage/cryptodev
|
||||
endef
|
||||
|
||||
define KernelPackage/cryptodev/description
|
||||
This is a driver for that allows to use the Linux kernel supported
|
||||
hardware ciphers by user-space applications.
|
||||
This driver allows use of the Linux kernel supported hardware-based
|
||||
cryptographic and hash accelerators by user-space applications,
|
||||
via a "/dev/crypto" device.
|
||||
endef
|
||||
|
||||
define Build/Configure
|
||||
|
||||
@ -50,7 +50,6 @@ define Package/procd
|
||||
$(call Package/procd/Default)
|
||||
VARIANT:=default
|
||||
CONFLICTS:=procd-selinux
|
||||
DEFAULT:=y if !SELINUX
|
||||
endef
|
||||
|
||||
define Package/procd-selinux
|
||||
@ -59,7 +58,6 @@ define Package/procd-selinux
|
||||
TITLE += with SELinux support
|
||||
PROVIDES:=procd
|
||||
VARIANT:=selinux
|
||||
DEFAULT:=y if SELINUX
|
||||
endef
|
||||
|
||||
define Package/procd-ujail
|
||||
@ -75,7 +73,6 @@ define Package/procd-seccomp
|
||||
CATEGORY:=Base system
|
||||
DEPENDS:=@SECCOMP +libubox +libblobmsg-json
|
||||
TITLE:=OpenWrt process seccomp helper + utrace
|
||||
DEFAULT:=y if SECCOMP
|
||||
endef
|
||||
|
||||
define Package/uxc
|
||||
|
||||
@ -56,7 +56,6 @@ define Package/busybox
|
||||
$(call Package/busybox/Default)
|
||||
CONFLICTS:=busybox-selinux
|
||||
VARIANT:=default
|
||||
DEFAULT:=y if !SELINUX
|
||||
endef
|
||||
|
||||
define Package/busybox-selinux
|
||||
@ -65,7 +64,6 @@ define Package/busybox-selinux
|
||||
DEPENDS += +libselinux
|
||||
VARIANT:=selinux
|
||||
PROVIDES:=busybox
|
||||
DEFAULT:=y if SELINUX
|
||||
endef
|
||||
|
||||
define Package/busybox/description
|
||||
|
||||
97
rules.mk
97
rules.mk
@ -20,6 +20,11 @@ endif
|
||||
export TMP_DIR:=$(TOPDIR)/tmp
|
||||
export TMPDIR:=$(TMP_DIR)
|
||||
|
||||
##@
|
||||
# @brief Strip quotes `"` and pounds `#` from string.
|
||||
#
|
||||
# @param 1: String.
|
||||
##
|
||||
qstrip=$(strip $(subst ",,$(1)))
|
||||
#"))
|
||||
|
||||
@ -27,8 +32,23 @@ empty:=
|
||||
space:= $(empty) $(empty)
|
||||
comma:=,
|
||||
pound:=\#
|
||||
##@
|
||||
# @brief Merge strings by removing spaces.
|
||||
#
|
||||
# @param 1: String.
|
||||
##
|
||||
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)
|
||||
##@
|
||||
# @brief Strip last extension from file name.
|
||||
#
|
||||
# @param 1: File name.
|
||||
##
|
||||
strip_last=$(patsubst %.$(lastword $(subst .,$(space),$(1))),%,$(1))
|
||||
|
||||
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_template = $(__tr_head)$$(1)$(__tr_tail)
|
||||
|
||||
##@
|
||||
# @brief Convert string characters to 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)))
|
||||
|
||||
##@
|
||||
# @brief Abbreviate version. Truncate to 8 characters.
|
||||
##
|
||||
version_abbrev = $(if $(if $(CHECK),,$(DUMP)),$(1),$(shell printf '%.8s' $(1)))
|
||||
|
||||
_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
|
||||
|
||||
##@
|
||||
# @brief Create default targets.
|
||||
#
|
||||
# Targets are created from @DEFAULT_SUBDIR_TARGETS and input argument lists.
|
||||
#
|
||||
# @param 1: Additional targets list.
|
||||
##
|
||||
define DefaultTargets
|
||||
$(foreach t,$(DEFAULT_SUBDIR_TARGETS) $(1),
|
||||
.$(t):
|
||||
@ -371,16 +407,28 @@ export BISON_PKGDATADIR:=$(STAGING_DIR_HOST)/share/bison
|
||||
export HOST_GNULIB_SRCDIR:=$(STAGING_DIR_HOST)/share/gnulib
|
||||
export M4:=$(STAGING_DIR_HOST)/bin/m4
|
||||
|
||||
##@
|
||||
# @brief Slugify variable name and prepend suffix.
|
||||
##
|
||||
define shvar
|
||||
V_$(subst .,_,$(subst -,_,$(subst /,_,$(1))))
|
||||
endef
|
||||
|
||||
##@
|
||||
# @brief Create and export variable, set to function result.
|
||||
#
|
||||
# @param 1: Function name. Used as variable name, prepended with `V_`.
|
||||
##
|
||||
define shexport
|
||||
export $(call shvar,$(1))=$$(call $(1))
|
||||
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
|
||||
# the value is 'y' when successful and '' otherwise
|
||||
# the value is `y` when successful and `` otherwise
|
||||
##
|
||||
define YEAR_2038
|
||||
$(shell \
|
||||
mkdir -p $(TMP_DIR); \
|
||||
@ -392,9 +440,12 @@ $(shell \
|
||||
)
|
||||
endef
|
||||
|
||||
# Execute commands under flock
|
||||
# $(1) => The shell expression.
|
||||
# $(2) => The lock name. If not given, the global lock will be used.
|
||||
##@
|
||||
# @brief Execute commands under flock
|
||||
#
|
||||
# @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),)
|
||||
define locked
|
||||
SHELL= \
|
||||
@ -406,10 +457,14 @@ else
|
||||
locked=$(1)
|
||||
endif
|
||||
|
||||
# Recursively copy paths into another directory, purge dangling
|
||||
|
||||
##@
|
||||
# @brief Recursively copy paths into another directory, purge dangling
|
||||
# symlinks before.
|
||||
# $(1) => File glob expression
|
||||
# $(2) => Destination directory
|
||||
#
|
||||
# @param 1: File glob expression.
|
||||
# @param 1: Destination directory.
|
||||
##
|
||||
define file_copy
|
||||
for src_dir in $(sort $(foreach d,$(wildcard $(1)),$(dir $(d)))); do \
|
||||
( cd $$src_dir; find -type f -or -type d ) | \
|
||||
@ -424,19 +479,30 @@ define file_copy
|
||||
$(CP) $(1) $(2)
|
||||
endef
|
||||
|
||||
# Calculate sha256sum of any plain file within a given directory
|
||||
# $(1) => Input directory
|
||||
# $(2) => If set, recurse into subdirectories
|
||||
##@
|
||||
# @brief Calculate sha256sum of any plain file within a given directory.
|
||||
#
|
||||
# @param 1: Input directory.
|
||||
# @param 2: If set, recurse into subdirectories.
|
||||
##
|
||||
define sha256sums
|
||||
(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)
|
||||
endef
|
||||
|
||||
# file extension
|
||||
##@
|
||||
# @brief Retrieve file extension.
|
||||
#
|
||||
# @param 1: File name.
|
||||
##
|
||||
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
|
||||
$(shell \
|
||||
if git log -1 >/dev/null 2>/dev/null; then \
|
||||
@ -458,6 +524,11 @@ $(shell \
|
||||
)
|
||||
endef
|
||||
|
||||
##@
|
||||
# @brief Get ABI version string, stripping `-`, `_` and `.`.
|
||||
#
|
||||
# @param 1: Version string.
|
||||
##
|
||||
abi_version_str = $(subst -,,$(subst _,,$(subst .,,$(1))))
|
||||
|
||||
COMMITCOUNT = $(if $(DUMP),0,$(call commitcount))
|
||||
|
||||
@ -138,6 +138,11 @@ _call_info: FORCE
|
||||
echo 'Available Profiles:'
|
||||
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)
|
||||
# "-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))
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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;
|
||||
@ -15,7 +15,7 @@ Signed-off-by: Mantas Pucka <mantas@8devices.com>
|
||||
|
||||
--- a/arch/arm64/boot/dts/qcom/ipq6018.dtsi
|
||||
+++ b/arch/arm64/boot/dts/qcom/ipq6018.dtsi
|
||||
@@ -809,6 +809,102 @@
|
||||
@@ -814,6 +814,102 @@
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@ -15,7 +15,7 @@ Signed-off-by: Mantas Pucka <mantas@8devices.com>
|
||||
|
||||
--- a/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 {
|
||||
qcom,entry-name = "master-kernel";
|
||||
|
||||
@ -13,7 +13,7 @@ Signed-off-by: Mantas Pucka <mantas@8devices.com>
|
||||
|
||||
--- a/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_q6_reset";
|
||||
|
||||
|
||||
@ -1492,7 +1492,9 @@ static int __init rtl83xx_sw_probe(struct platform_device *pdev)
|
||||
priv->ds->needs_standalone_vlan_filtering = true;
|
||||
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->id = soc_info.id;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user