Compare commits
97 Commits
v22.03.0-r
...
v22.03.0-r
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0345c613ba | ||
|
|
bfd070e7fa | ||
|
|
5c7aed8b1e | ||
|
|
6b78bf1fd8 | ||
|
|
5a82803c76 | ||
|
|
fa56db5ccc | ||
|
|
d302839b65 | ||
|
|
d815e1f67c | ||
|
|
8f0d8869d5 | ||
|
|
1d96f6863e | ||
|
|
2bea35cb55 | ||
|
|
5a81e00063 | ||
|
|
e459a87eaf | ||
|
|
fcd62930f7 | ||
|
|
ee67afeda9 | ||
|
|
32e9095662 | ||
|
|
a3946a7cd1 | ||
|
|
158a5af801 | ||
|
|
6b44a6e731 | ||
|
|
66da295f5a | ||
|
|
7d6b8f5bdf | ||
|
|
85b5bad5a1 | ||
|
|
973ff0b8e8 | ||
|
|
3e38bd1353 | ||
|
|
80602d472a | ||
|
|
02cfd1f5a8 | ||
|
|
52a64755fc | ||
|
|
1edf306b31 | ||
|
|
e222660bc8 | ||
|
|
9296d8970a | ||
|
|
c9448285f1 | ||
|
|
04091ffd68 | ||
|
|
c7673625d9 | ||
|
|
d6a06e1d18 | ||
|
|
344ecf433a | ||
|
|
fbbc127f42 | ||
|
|
993b70a429 | ||
|
|
656036a534 | ||
|
|
fb3b927643 | ||
|
|
e4caacc887 | ||
|
|
7c240ee279 | ||
|
|
88101fa239 | ||
|
|
2b8021d614 | ||
|
|
f2f03545d4 | ||
|
|
50db012243 | ||
|
|
4faf889e7e | ||
|
|
81530d69ef | ||
|
|
d8d8b82c59 | ||
|
|
f91b0d7a92 | ||
|
|
2b392383e6 | ||
|
|
9c609080b0 | ||
|
|
63b4881fcb | ||
|
|
d989124c02 | ||
|
|
d8f8c78d96 | ||
|
|
049093b9fd | ||
|
|
d65ad3efa5 | ||
|
|
267f86a7b2 | ||
|
|
7e223a89a1 | ||
|
|
08e1812900 | ||
|
|
aab535d2bb | ||
|
|
a4390ea283 | ||
|
|
7bc1d76419 | ||
|
|
d01e374074 | ||
|
|
b9d67e2608 | ||
|
|
4130e7ed54 | ||
|
|
d929abbbde | ||
|
|
c1868ef656 | ||
|
|
8a3fb45722 | ||
|
|
43fd8f4aba | ||
|
|
f608779f92 | ||
|
|
daa8d7e32d | ||
|
|
c32dfc7fe0 | ||
|
|
618ab576be | ||
|
|
2726c8c315 | ||
|
|
515404a81b | ||
|
|
bbf8651ba5 | ||
|
|
76c5c95d94 | ||
|
|
8f7e0cbebf | ||
|
|
f393581f66 | ||
|
|
19f3ee51a2 | ||
|
|
3a02b8a29f | ||
|
|
b65e4d7c5f | ||
|
|
68a6d7aaab | ||
|
|
3cfe050c4a | ||
|
|
23f0fea742 | ||
|
|
83dfa4156e | ||
|
|
7f4467784f | ||
|
|
9ff2e7d3e7 | ||
|
|
75ffc994ba | ||
|
|
cd25cc0558 | ||
|
|
23bc97c281 | ||
|
|
33dd466422 | ||
|
|
51f1480e48 | ||
|
|
4101c8191e | ||
|
|
8f393cf2f8 | ||
|
|
2b4fba8750 | ||
|
|
d5f911e68f |
@@ -1,4 +1,4 @@
|
||||
src-git-full packages https://git.openwrt.org/feed/packages.git^afea2bcafca132022ac4470e2d495962720348fb
|
||||
src-git-full luci https://git.openwrt.org/project/luci.git^28e92e3f8c3bd06ecbade1873f2c255c354672c2
|
||||
src-git-full routing https://git.openwrt.org/feed/routing.git^4b2b6b3d2b0178d254943409cfb4bdce0edbbda4
|
||||
src-git-full packages https://git.openwrt.org/feed/packages.git^a686f7975a37cfd44bb33b24610a6950da450139
|
||||
src-git-full luci https://git.openwrt.org/project/luci.git^ee5576f5e3f3623f75cb84fd9182756f41c97610
|
||||
src-git-full routing https://git.openwrt.org/feed/routing.git^1ccc4e435175e6ba5ac60e626e1e95eb25c5757b
|
||||
src-git-full telephony https://git.openwrt.org/feed/telephony.git^1d2031a5c82816483c51bca15649e2957fbe2bc2
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
LINUX_VERSION-5.10 = .120
|
||||
LINUX_KERNEL_HASH-5.10.120 = 5b7a756004158ece2f5e41795ba523ec201743a736e34ce41cbe09177f7d0e8b
|
||||
LINUX_VERSION-5.10 = .127
|
||||
LINUX_KERNEL_HASH-5.10.127 = 419233ee0b1ee1dc2be8abf1b241545d10dad19d95f237180d6ccdc0cd221580
|
||||
|
||||
@@ -360,6 +360,8 @@ $(eval $(if $(NF_KMOD),$(call nf_add,NFT_TPROXY,CONFIG_NFT_TPROXY, $(P_XT)nft_tp
|
||||
|
||||
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_COMPAT,CONFIG_NFT_COMPAT, $(P_XT)nft_compat),))
|
||||
|
||||
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_XFRM,CONFIG_NFT_XFRM, $(P_XT)nft_xfrm),))
|
||||
|
||||
# userland only
|
||||
IPT_BUILTIN += $(NF_IPT-y) $(NF_IPT-m)
|
||||
IPT_BUILTIN += $(IPT_CORE-y) $(IPT_CORE-m)
|
||||
|
||||
@@ -130,7 +130,12 @@ $(eval $(call SetupHostCommand,getopt, \
|
||||
Please install an extended getopt version that supports --long, \
|
||||
gnugetopt -o t --long test -- --test | grep '^ *--test *--', \
|
||||
getopt -o t --long test -- --test | grep '^ *--test *--', \
|
||||
/usr/local/opt/gnu-getopt/bin/getopt -o t --long test -- --test | grep '^ *--test *--'))
|
||||
/usr/local/opt/gnu-getopt/bin/getopt -o t --long test -- --test | grep '^ *--test *--', \
|
||||
/opt/local/bin/getopt -o t --long test -- --test | grep '^ *--test *--'))
|
||||
|
||||
$(eval $(call SetupHostCommand,realpath,Please install a 'realpath' utility, \
|
||||
grealpath /, \
|
||||
realpath /))
|
||||
|
||||
$(eval $(call SetupHostCommand,stat,Cannot find a file stat utility, \
|
||||
gnustat -c%s $(TOPDIR)/Makefile, \
|
||||
@@ -177,7 +182,8 @@ $(eval $(call TestHostCommand,python3-distutils, \
|
||||
$(STAGING_DIR_HOST)/bin/python3 -c 'import distutils'))
|
||||
|
||||
$(eval $(call SetupHostCommand,git,Please install Git (git-core) >= 1.7.12.2, \
|
||||
git --exec-path | xargs -I % -- grep -q -- --recursive %/git-submodule))
|
||||
git --exec-path | xargs -I % -- grep -q -- --recursive %/git-submodule, \
|
||||
git submodule --help | grep -- --recursive))
|
||||
|
||||
$(eval $(call SetupHostCommand,file,Please install the 'file' package, \
|
||||
file --version 2>&1 | grep file))
|
||||
|
||||
@@ -23,13 +23,13 @@ PKG_CONFIG_DEPENDS += \
|
||||
sanitize = $(call tolower,$(subst _,-,$(subst $(space),-,$(1))))
|
||||
|
||||
VERSION_NUMBER:=$(call qstrip,$(CONFIG_VERSION_NUMBER))
|
||||
VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),22.03.0-rc4)
|
||||
VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),22.03.0-rc5)
|
||||
|
||||
VERSION_CODE:=$(call qstrip,$(CONFIG_VERSION_CODE))
|
||||
VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),r19426-2b1941e47d)
|
||||
VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),r19523-bfd070e7fa)
|
||||
|
||||
VERSION_REPO:=$(call qstrip,$(CONFIG_VERSION_REPO))
|
||||
VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),https://downloads.openwrt.org/releases/22.03.0-rc4)
|
||||
VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),https://downloads.openwrt.org/releases/22.03.0-rc5)
|
||||
|
||||
VERSION_DIST:=$(call qstrip,$(CONFIG_VERSION_DIST))
|
||||
VERSION_DIST:=$(if $(VERSION_DIST),$(VERSION_DIST),OpenWrt)
|
||||
|
||||
@@ -71,6 +71,7 @@ fwtool_check_image() {
|
||||
|
||||
# minor compat version -> sysupgrade with -n required
|
||||
if [ "${devicecompat#.*}" != "${imagecompat#.*}" ] && [ "$SAVE_CONFIG" = "1" ]; then
|
||||
[ "$IGNORE_MINOR_COMPAT" = 1 ] && return 0
|
||||
v "The device is supported, but the config is incompatible to the new image ($devicecompat->$imagecompat). Please upgrade without keeping config (sysupgrade -n)."
|
||||
[ -n "$compatmessage" ] && v "$compatmessage"
|
||||
return 1
|
||||
|
||||
@@ -19,6 +19,7 @@ export CONF_IMAGE=
|
||||
export CONF_BACKUP_LIST=0
|
||||
export CONF_BACKUP=
|
||||
export CONF_RESTORE=
|
||||
export IGNORE_MINOR_COMPAT=0
|
||||
export NEED_IMAGE=
|
||||
export HELP=0
|
||||
export FORCE=0
|
||||
@@ -44,6 +45,7 @@ while [ -n "$1" ]; do
|
||||
-F|--force) export FORCE=1;;
|
||||
-T|--test) export TEST=1;;
|
||||
-h|--help) export HELP=1; break;;
|
||||
--ignore-minor-compat-version) export IGNORE_MINOR_COMPAT=1;;
|
||||
-*)
|
||||
echo "Invalid option: $1" >&2
|
||||
exit 1
|
||||
@@ -80,6 +82,8 @@ upgrade-option:
|
||||
Verify image and config .tar.gz but do not actually flash.
|
||||
-F | --force
|
||||
Flash image even if image checks fail, this is dangerous!
|
||||
--ignore-minor-compat-version
|
||||
Flash image even if the minor compat version is incompatible.
|
||||
-q less verbose
|
||||
-v more verbose
|
||||
-h | --help display this help
|
||||
|
||||
@@ -183,7 +183,7 @@ if VERSIONOPT
|
||||
config VERSION_REPO
|
||||
string
|
||||
prompt "Release repository"
|
||||
default "https://downloads.openwrt.org/releases/22.03.0-rc4"
|
||||
default "https://downloads.openwrt.org/releases/22.03.0-rc5"
|
||||
help
|
||||
This is the repository address embedded in the image, it defaults
|
||||
to the trunk snapshot repo; the url may contain the following placeholders:
|
||||
|
||||
@@ -68,7 +68,7 @@ endef
|
||||
define U-Boot/mt7622_ubnt_unifi-6-lr
|
||||
NAME:=Ubiquiti UniFi 6 LR
|
||||
UBOOT_CONFIG:=mt7622_ubnt_unifi-6-lr
|
||||
BUILD_DEVICES:=ubnt_unifi-6-lr-ubootmod
|
||||
BUILD_DEVICES:=ubnt_unifi-6-lr-v1-ubootmod ubnt_unifi-6-lr-v2-ubootmod
|
||||
BUILD_SUBTARGET:=mt7622
|
||||
UBOOT_IMAGE:=u-boot.fip
|
||||
BL2_BOOTDEV:=nor
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_VERSION:=2022.01
|
||||
PKG_VERSION:=2022.04
|
||||
PKG_RELEASE:=$(AUTORELEASE)
|
||||
|
||||
PKG_HASH:=81b4543227db228c03f8a1bf5ddbc813b0bb8f6555ce46064ef721a6fc680413
|
||||
PKG_HASH:=68e065413926778e276ec3abd28bb32fa82abaa4a6898d570c1f48fbdb08bcd0
|
||||
|
||||
include $(INCLUDE_DIR)/u-boot.mk
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
@@ -62,13 +62,6 @@ UBOOT_TARGETS:= \
|
||||
espressobin \
|
||||
uDPU
|
||||
|
||||
define Build/Configure
|
||||
# enable additional options beyond <device>_defconfig
|
||||
echo CONFIG_CMD_SETEXPR=y >> $(PKG_BUILD_DIR)/configs/$(UBOOT_CONFIG)_defconfig
|
||||
|
||||
$(call Build/Configure/U-Boot)
|
||||
endef
|
||||
|
||||
define Package/u-boot/install
|
||||
$(if $(findstring cortexa53,$(BUILD_SUBTARGET)),,$(Package/u-boot/install/default))
|
||||
endef
|
||||
|
||||
@@ -1,116 +0,0 @@
|
||||
From 3fc92a215b69ad448c151489228eb340df9a8703 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Marek=20Beh=C3=BAn?= <marek.behun@nic.cz>
|
||||
Date: Wed, 12 Jan 2022 17:06:59 +0100
|
||||
Subject: [PATCH] ddr: marvell: a38x: fix SPLIT_OUT_MIX state decision
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This is a cleaned up and fixed version of a patch
|
||||
mv_ddr: a380: fix SPLIT_OUT_MIX state decision
|
||||
|
||||
in each pattern cycle the bus state can be changed
|
||||
in order to avoide it, need to back to the same bus state on each
|
||||
pattern cycle
|
||||
by
|
||||
Moti Boskula <motib@marvell.com>
|
||||
|
||||
The original patch is not in Marvell's mv-ddr-marvell repository. It was
|
||||
gives to us by Marvell to fix an issues with DDR training on some
|
||||
boards, but it cannot be applied as is to mv-ddr-marvell, because it is
|
||||
a very dirty draft patch that would certainly break other things, mainly
|
||||
DDR4 training code in mv-ddr-marvell, since it changes common functions.
|
||||
|
||||
I have cleaned up the patch and removed stuff that seemed unnecessary
|
||||
(when removed, it still fixed things). Note that I don't understand
|
||||
completely what the code does exactly, since I haven't studied the DDR
|
||||
training code extensively (and I suspect that no one besides some few
|
||||
people in Marvell understand the code completely).
|
||||
|
||||
Anyway after the cleanup the patch still fixes isssues with DDR training
|
||||
on the failing boards.
|
||||
|
||||
There was also a problem with the original patch on some of the Allied
|
||||
Telesis' x530 boards, reported by Chris Packham. I have asked Chris to
|
||||
send me some logs, and managed to fix it:
|
||||
- if you look at the change, you'll notice that it introduces
|
||||
subtraction of cur_start_win[] and cur_end_win[] members, depending on
|
||||
a bit set in the current_byte_status variable
|
||||
- the original patch subtracted cur_start_win[] if either
|
||||
BYTE_SPLIT_OUT_MIX or BYTE_HOMOGENEOUS_SPLIT_OUT bits were set, but
|
||||
subtracted cur_end_win[] only if the first one (BYTE_SPLIT_OUT_MIX)
|
||||
was set
|
||||
- from Chris Packham logs I discovered that the x530 board where the
|
||||
original patch introduced DDR training failure, only the
|
||||
BYTE_HOMOGENEOUS_SPLIT_OUT bit was set, and on our boards where the
|
||||
patch is needed only the BYTE_SPLIT_OUT_MIX is set in the
|
||||
current_byte_status variable
|
||||
- this led me to the hypothesis that both cur_start_win[] and
|
||||
cur_end_win[] should be subtracted only if BYTE_SPLIT_OUT_MIX bit is
|
||||
set, the BYTE_HOMOGENEOUS_SPLIT_OUT bit shouldn't be considered at all
|
||||
- this hypothesis also gains credibility when considering the commit
|
||||
title ("fix SPLIT_OUT_MIX state decision")
|
||||
|
||||
Hopefully this will fix things without breaking anything else.
|
||||
|
||||
Signed-off-by: Marek Behún <marek.behun@nic.cz>
|
||||
Reviewed-by: Stefan Roese <sr@denx.de>
|
||||
Tested-by: Chris Packham <judge.packham@gmail.com>
|
||||
---
|
||||
.../a38x/ddr3_training_centralization.c | 26 +++++++++++++++++++
|
||||
1 file changed, 26 insertions(+)
|
||||
|
||||
--- a/drivers/ddr/marvell/a38x/ddr3_training_centralization.c
|
||||
+++ b/drivers/ddr/marvell/a38x/ddr3_training_centralization.c
|
||||
@@ -55,6 +55,7 @@ static int ddr3_tip_centralization(u32 d
|
||||
enum hws_training_ip_stat training_result[MAX_INTERFACE_NUM];
|
||||
u32 if_id, pattern_id, bit_id;
|
||||
u8 bus_id;
|
||||
+ u8 current_byte_status;
|
||||
u8 cur_start_win[BUS_WIDTH_IN_BITS];
|
||||
u8 centralization_result[MAX_INTERFACE_NUM][BUS_WIDTH_IN_BITS];
|
||||
u8 cur_end_win[BUS_WIDTH_IN_BITS];
|
||||
@@ -166,6 +167,10 @@ static int ddr3_tip_centralization(u32 d
|
||||
result[search_dir_id][7]));
|
||||
}
|
||||
|
||||
+ current_byte_status =
|
||||
+ mv_ddr_tip_sub_phy_byte_status_get(if_id,
|
||||
+ bus_id);
|
||||
+
|
||||
for (bit_id = 0; bit_id < BUS_WIDTH_IN_BITS;
|
||||
bit_id++) {
|
||||
/* check if this code is valid for 2 edge, probably not :( */
|
||||
@@ -174,11 +179,32 @@ static int ddr3_tip_centralization(u32 d
|
||||
[HWS_LOW2HIGH]
|
||||
[bit_id],
|
||||
EDGE_1);
|
||||
+ if (current_byte_status &
|
||||
+ BYTE_SPLIT_OUT_MIX) {
|
||||
+ if (cur_start_win[bit_id] >= 64)
|
||||
+ cur_start_win[bit_id] -= 64;
|
||||
+ else
|
||||
+ cur_start_win[bit_id] = 0;
|
||||
+ DEBUG_CENTRALIZATION_ENGINE
|
||||
+ (DEBUG_LEVEL_INFO,
|
||||
+ ("pattern %d IF %d pup %d bit %d subtract 64 adll from start\n",
|
||||
+ pattern_id, if_id, bus_id, bit_id));
|
||||
+ }
|
||||
cur_end_win[bit_id] =
|
||||
GET_TAP_RESULT(result
|
||||
[HWS_HIGH2LOW]
|
||||
[bit_id],
|
||||
EDGE_1);
|
||||
+ if (cur_end_win[bit_id] >= 64 &&
|
||||
+ (current_byte_status &
|
||||
+ BYTE_SPLIT_OUT_MIX)) {
|
||||
+ cur_end_win[bit_id] -= 64;
|
||||
+ DEBUG_CENTRALIZATION_ENGINE
|
||||
+ (DEBUG_LEVEL_INFO,
|
||||
+ ("pattern %d IF %d pup %d bit %d subtract 64 adll from end\n",
|
||||
+ pattern_id, if_id, bus_id, bit_id));
|
||||
+ }
|
||||
+
|
||||
/* window length */
|
||||
current_window[bit_id] =
|
||||
cur_end_win[bit_id] -
|
||||
@@ -1,98 +0,0 @@
|
||||
From eadc4f512fb43bba2fa4e842c982da919da664be Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Marek=20Beh=C3=BAn?= <marek.behun@nic.cz>
|
||||
Date: Tue, 4 Jan 2022 15:57:49 +0100
|
||||
Subject: [PATCH] ddr: marvell: a38x: Fix Synchronous vs Asynchronous mode
|
||||
determination
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Before commit 4c289425752f ("mv_ddr: a38x: add support for ddr async
|
||||
mode"), Asynchornous Mode was only used when the CPU Subsystem Clock
|
||||
Options[4:0] field in the SAR1 register was set to value 0x13: CPU at
|
||||
2 GHz and DDR at 933 MHz.
|
||||
|
||||
Then commit 4c289425752f ("mv_ddr: a38x: add support for ddr async
|
||||
mode") added support for Asynchornous Modes with frequencies other than
|
||||
933 MHz (but at least 467 MHz), but the code it added to check for
|
||||
whether Asynchornous Mode should be used is wrong: it checks whether the
|
||||
frequency setting in board DDR topology map is set to value other than
|
||||
MV_DDR_FREQ_SAR.
|
||||
|
||||
Thus boards which define a specific value, greater than 400 MHz, for DDR
|
||||
frequency in their board topology (e.g. Turris Omnia defines
|
||||
MV_DDR_FREQ_800), are incorrectly put into Asynchornous Mode after that
|
||||
commit.
|
||||
|
||||
The A38x Functional Specification, section 10.12 DRAM Clocking, says:
|
||||
In Synchornous mode, the DRAM and CPU clocks are edge aligned and run
|
||||
in 1:2 or 1:3 CPU to DRAM frequency ratios.
|
||||
|
||||
Change the check for whether Asynchornous Mode should be used according
|
||||
to this explanation in Functional Specification.
|
||||
|
||||
Signed-off-by: Marek Behún <marek.behun@nic.cz>
|
||||
Tested-by: Chris Packham <judge.packham@gmail.com>
|
||||
Reviewed-by: Stefan Roese <sr@denx.de>
|
||||
---
|
||||
drivers/ddr/marvell/a38x/mv_ddr_plat.c | 19 ++++++++-----------
|
||||
1 file changed, 8 insertions(+), 11 deletions(-)
|
||||
|
||||
--- a/drivers/ddr/marvell/a38x/mv_ddr_plat.c
|
||||
+++ b/drivers/ddr/marvell/a38x/mv_ddr_plat.c
|
||||
@@ -167,8 +167,6 @@ static u16 a38x_vco_freq_per_sar_ref_clk
|
||||
};
|
||||
|
||||
|
||||
-static u32 async_mode_at_tf;
|
||||
-
|
||||
static u32 dq_bit_map_2_phy_pin[] = {
|
||||
1, 0, 2, 6, 9, 8, 3, 7, /* 0 */
|
||||
8, 9, 1, 7, 2, 6, 3, 0, /* 1 */
|
||||
@@ -734,7 +732,8 @@ static int ddr3_tip_a38x_set_divider(u8
|
||||
u32 divider = 0;
|
||||
u32 sar_val, ref_clk_satr;
|
||||
u32 async_val;
|
||||
- u32 freq = mv_ddr_freq_get(frequency);
|
||||
+ u32 cpu_freq;
|
||||
+ u32 ddr_freq = mv_ddr_freq_get(frequency);
|
||||
|
||||
if (if_id != 0) {
|
||||
DEBUG_TRAINING_ACCESS(DEBUG_LEVEL_ERROR,
|
||||
@@ -751,11 +750,14 @@ static int ddr3_tip_a38x_set_divider(u8
|
||||
ref_clk_satr = reg_read(DEVICE_SAMPLE_AT_RESET2_REG);
|
||||
if (((ref_clk_satr >> DEVICE_SAMPLE_AT_RESET2_REG_REFCLK_OFFSET) & 0x1) ==
|
||||
DEVICE_SAMPLE_AT_RESET2_REG_REFCLK_25MHZ)
|
||||
- divider = a38x_vco_freq_per_sar_ref_clk_25_mhz[sar_val] / freq;
|
||||
+ cpu_freq = a38x_vco_freq_per_sar_ref_clk_25_mhz[sar_val];
|
||||
else
|
||||
- divider = a38x_vco_freq_per_sar_ref_clk_40_mhz[sar_val] / freq;
|
||||
+ cpu_freq = a38x_vco_freq_per_sar_ref_clk_40_mhz[sar_val];
|
||||
+
|
||||
+ divider = cpu_freq / ddr_freq;
|
||||
|
||||
- if ((async_mode_at_tf == 1) && (freq > 400)) {
|
||||
+ if (((cpu_freq % ddr_freq != 0) || (divider != 2 && divider != 3)) &&
|
||||
+ (ddr_freq > 400)) {
|
||||
/* Set async mode */
|
||||
dunit_write(0x20220, 0x1000, 0x1000);
|
||||
dunit_write(0xe42f4, 0x200, 0x200);
|
||||
@@ -869,8 +871,6 @@ int ddr3_tip_ext_write(u32 dev_num, u32
|
||||
|
||||
int mv_ddr_early_init(void)
|
||||
{
|
||||
- struct mv_ddr_topology_map *tm = mv_ddr_topology_map_get();
|
||||
-
|
||||
/* FIXME: change this configuration per ddr type
|
||||
* configure a380 and a390 to work with receiver odt timing
|
||||
* the odt_config is defined:
|
||||
@@ -882,9 +882,6 @@ int mv_ddr_early_init(void)
|
||||
|
||||
mv_ddr_sw_db_init(0, 0);
|
||||
|
||||
- if (tm->interface_params[0].memory_freq != MV_DDR_FREQ_SAR)
|
||||
- async_mode_at_tf = 1;
|
||||
-
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
@@ -1,92 +0,0 @@
|
||||
From d17ab6e1289b1d705c75de8a2351218962fb7352 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org>
|
||||
Date: Thu, 9 Dec 2021 11:06:39 +0100
|
||||
Subject: [PATCH] nvme: Do not allocate 8kB buffer on stack
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Calling 'nvme scan' followed by 'nvme detail' crashes U-Boot on Turris
|
||||
Omnia with the following error:
|
||||
|
||||
undefined instruction
|
||||
pc : [<0a000000>] lr : [<7ff80bfc>]
|
||||
reloc pc : [<8a8c0000>] lr : [<00840bfc>]
|
||||
sp : 7fb2b908 ip : 0000002a fp : 02000000
|
||||
r10: 04000000 r9 : 7fb2fed0 r8 : e1000000
|
||||
r7 : 0c000000 r6 : 03000000 r5 : 06000000 r4 : 01000000
|
||||
r3 : 7fb30928 r2 : 7fb30928 r1 : 00000000 r0 : 00000000
|
||||
Flags: nZCv IRQs off FIQs off Mode SVC_32
|
||||
Code: 0f0fb4f0 0f0fb4f0 0f0fb4f0 0f0fb4f0 (f0f04b0f)
|
||||
Resetting CPU ...
|
||||
|
||||
This happens when nvme_print_info() tries to return to the caller. It
|
||||
looks like this error is caused by trying to allocate 8 KiB of memory
|
||||
on the stack by the two uses of ALLOC_CACHE_ALIGN_BUFFER().
|
||||
|
||||
Use malloc_cache_aligned() to allocate this memory dynamically instead.
|
||||
|
||||
This fixes 'nvme detail' on Turris Omnia.
|
||||
|
||||
Note that similar change was applied to file drivers/nvme/nvme.c in past by
|
||||
commit 2f83481dff9c ("nvme: use page-aligned buffer for identify command").
|
||||
|
||||
Signed-off-by: Pali Rohár <pali@kernel.org>
|
||||
Signed-off-by: Marek Behún <marek.behun@nic.cz>
|
||||
---
|
||||
drivers/nvme/nvme_show.c | 35 ++++++++++++++++++++++++++---------
|
||||
1 file changed, 26 insertions(+), 9 deletions(-)
|
||||
|
||||
--- a/drivers/nvme/nvme_show.c
|
||||
+++ b/drivers/nvme/nvme_show.c
|
||||
@@ -106,24 +106,41 @@ int nvme_print_info(struct udevice *udev
|
||||
{
|
||||
struct nvme_ns *ns = dev_get_priv(udev);
|
||||
struct nvme_dev *dev = ns->dev;
|
||||
- ALLOC_CACHE_ALIGN_BUFFER(char, buf_ns, sizeof(struct nvme_id_ns));
|
||||
- struct nvme_id_ns *id = (struct nvme_id_ns *)buf_ns;
|
||||
- ALLOC_CACHE_ALIGN_BUFFER(char, buf_ctrl, sizeof(struct nvme_id_ctrl));
|
||||
- struct nvme_id_ctrl *ctrl = (struct nvme_id_ctrl *)buf_ctrl;
|
||||
+ struct nvme_id_ctrl *ctrl;
|
||||
+ struct nvme_id_ns *id;
|
||||
+ int ret = 0;
|
||||
|
||||
- if (nvme_identify(dev, 0, 1, (dma_addr_t)(long)ctrl))
|
||||
- return -EIO;
|
||||
+ ctrl = memalign(dev->page_size, sizeof(struct nvme_id_ctrl));
|
||||
+ if (!ctrl)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ if (nvme_identify(dev, 0, 1, (dma_addr_t)(long)ctrl)) {
|
||||
+ ret = -EIO;
|
||||
+ goto free_ctrl;
|
||||
+ }
|
||||
|
||||
print_optional_admin_cmd(le16_to_cpu(ctrl->oacs), ns->devnum);
|
||||
print_optional_nvm_cmd(le16_to_cpu(ctrl->oncs), ns->devnum);
|
||||
print_format_nvme_attributes(ctrl->fna, ns->devnum);
|
||||
|
||||
- if (nvme_identify(dev, ns->ns_id, 0, (dma_addr_t)(long)id))
|
||||
- return -EIO;
|
||||
+ id = memalign(dev->page_size, sizeof(struct nvme_id_ns));
|
||||
+ if (!id) {
|
||||
+ ret = -ENOMEM;
|
||||
+ goto free_ctrl;
|
||||
+ }
|
||||
+
|
||||
+ if (nvme_identify(dev, ns->ns_id, 0, (dma_addr_t)(long)id)) {
|
||||
+ ret = -EIO;
|
||||
+ goto free_id;
|
||||
+ }
|
||||
|
||||
print_formats(id, ns);
|
||||
print_data_protect_cap(id->dpc, ns->devnum);
|
||||
print_metadata_cap(id->mc, ns->devnum);
|
||||
|
||||
- return 0;
|
||||
+free_id:
|
||||
+ free(id);
|
||||
+free_ctrl:
|
||||
+ free(ctrl);
|
||||
+ return ret;
|
||||
}
|
||||
@@ -1,64 +0,0 @@
|
||||
From 0f3466f52fbacce67e147b9234e6323edff26a6d Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marko <robert.marko@sartura.hr>
|
||||
Date: Fri, 11 Mar 2022 19:14:07 +0100
|
||||
Subject: [PATCH] mmc: xenon_sdhci: remove wait_dat0 SDHCI OP
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Generic SDHCI driver received support for checking the busy status by
|
||||
polling the DAT[0] level instead of waiting for the worst MMC switch time.
|
||||
|
||||
Unfortunately, it appears that this does not work for Xenon controllers
|
||||
despite being a part of the standard SDHCI registers and the Armada 3720
|
||||
datasheet itself telling that BIT(20) is useful for detecting the DAT[0]
|
||||
busy signal.
|
||||
|
||||
I have tried increasing the timeout value, but I have newer managed to
|
||||
catch DAT_LEVEL bits change from 0 at all.
|
||||
|
||||
This issue appears to hit most if not all SoC-s supported by Xenon driver,
|
||||
at least A3720, A8040 and CN9130 have non working eMMC currently.
|
||||
|
||||
So, until a better solution is found drop the wait_dat0 OP for Xenon.
|
||||
I was able to only test it on A3720, but it should work for others as well.
|
||||
|
||||
Fixes: 40e6f52454fc ("drivers: mmc: Add wait_dat0 support for sdhci driver")
|
||||
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
|
||||
Reviewed-by: Marek Behún <marek.behun@nic.cz>
|
||||
Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com>
|
||||
Reviewed-by: Stefan Roese <sr@denx.de>
|
||||
---
|
||||
drivers/mmc/xenon_sdhci.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/mmc/xenon_sdhci.c
|
||||
+++ b/drivers/mmc/xenon_sdhci.c
|
||||
@@ -439,6 +439,8 @@ static const struct sdhci_ops xenon_sdhc
|
||||
.set_ios_post = xenon_sdhci_set_ios_post
|
||||
};
|
||||
|
||||
+static struct dm_mmc_ops xenon_mmc_ops;
|
||||
+
|
||||
static int xenon_sdhci_probe(struct udevice *dev)
|
||||
{
|
||||
struct xenon_sdhci_plat *plat = dev_get_plat(dev);
|
||||
@@ -452,6 +454,9 @@ static int xenon_sdhci_probe(struct udev
|
||||
host->mmc->dev = dev;
|
||||
upriv->mmc = host->mmc;
|
||||
|
||||
+ xenon_mmc_ops = sdhci_ops;
|
||||
+ xenon_mmc_ops.wait_dat0 = NULL;
|
||||
+
|
||||
/* Set quirks */
|
||||
host->quirks = SDHCI_QUIRK_WAIT_SEND_CMD | SDHCI_QUIRK_32BIT_DMA_ADDR;
|
||||
|
||||
@@ -568,7 +573,7 @@ U_BOOT_DRIVER(xenon_sdhci_drv) = {
|
||||
.id = UCLASS_MMC,
|
||||
.of_match = xenon_sdhci_ids,
|
||||
.of_to_plat = xenon_sdhci_of_to_plat,
|
||||
- .ops = &sdhci_ops,
|
||||
+ .ops = &xenon_mmc_ops,
|
||||
.bind = xenon_sdhci_bind,
|
||||
.probe = xenon_sdhci_probe,
|
||||
.remove = xenon_sdhci_remove,
|
||||
@@ -1,65 +0,0 @@
|
||||
From c11428c7def52671f57089701efe878f7071b696 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Marek=20Beh=C3=BAn?= <marek.behun@nic.cz>
|
||||
Date: Thu, 17 Feb 2022 01:08:37 +0100
|
||||
Subject: [PATCH 1/3] ddr: marvell: a38x: fix BYTE_HOMOGENEOUS_SPLIT_OUT
|
||||
decision
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
In commit 3fc92a215b69 ("ddr: marvell: a38x: fix SPLIT_OUT_MIX state
|
||||
decision") I ported a cleaned up and changed version of patch
|
||||
mv_ddr: a380: fix SPLIT_OUT_MIX state decision
|
||||
|
||||
In the port we removed checking for BYTE_HOMOGENEOUS_SPLIT_OUT bit,
|
||||
because:
|
||||
- the fix seemed to work without it
|
||||
- the bit was checked for only at one place out of two, while the second
|
||||
bit, BYTE_SPLIT_OUT_MIX, was checked for in both cases
|
||||
- without the removal it didn't work on Allied Telesis' x530 board
|
||||
|
||||
We recently had a chance to test on more boards, and it seems that the
|
||||
change needs to be opposite: instead of removing the check for
|
||||
BYTE_HOMOGENEOUS_SPLIT_OUT from the first if() statement, the check
|
||||
needs to be added also to the second one - it needs to be at both
|
||||
places.
|
||||
|
||||
With this change all the Turris Omnia boards I have had available to
|
||||
test seem to work, I didn't encounter not even one failed DDR training.
|
||||
|
||||
As last time, I am noting that I do not understand what this code is
|
||||
actually doing, I haven't studied the DDR training algorithm and
|
||||
I suspect that no one will be able to explain it to U-Boot contributors,
|
||||
so we are left with this blind poking in the code with testing whether
|
||||
it works on several boards and hoping it doesn't break anything for
|
||||
anyone :-(.
|
||||
|
||||
Signed-off-by: Marek Behún <marek.behun@nic.cz>
|
||||
Tested-by: Chris Packham <judge.packham@gmail.com>
|
||||
Reviewed-by: Stefan Roese <sr@denx.de>
|
||||
---
|
||||
drivers/ddr/marvell/a38x/ddr3_training_centralization.c | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/ddr/marvell/a38x/ddr3_training_centralization.c
|
||||
+++ b/drivers/ddr/marvell/a38x/ddr3_training_centralization.c
|
||||
@@ -180,7 +180,8 @@ static int ddr3_tip_centralization(u32 d
|
||||
[bit_id],
|
||||
EDGE_1);
|
||||
if (current_byte_status &
|
||||
- BYTE_SPLIT_OUT_MIX) {
|
||||
+ (BYTE_SPLIT_OUT_MIX |
|
||||
+ BYTE_HOMOGENEOUS_SPLIT_OUT)) {
|
||||
if (cur_start_win[bit_id] >= 64)
|
||||
cur_start_win[bit_id] -= 64;
|
||||
else
|
||||
@@ -197,7 +198,8 @@ static int ddr3_tip_centralization(u32 d
|
||||
EDGE_1);
|
||||
if (cur_end_win[bit_id] >= 64 &&
|
||||
(current_byte_status &
|
||||
- BYTE_SPLIT_OUT_MIX)) {
|
||||
+ (BYTE_SPLIT_OUT_MIX |
|
||||
+ BYTE_HOMOGENEOUS_SPLIT_OUT))) {
|
||||
cur_end_win[bit_id] -= 64;
|
||||
DEBUG_CENTRALIZATION_ENGINE
|
||||
(DEBUG_LEVEL_INFO,
|
||||
@@ -1,49 +0,0 @@
|
||||
From 74767a3875c99b1a3d2818456a5fdc02ec1e4f93 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Marek=20Beh=C3=BAn?= <marek.behun@nic.cz>
|
||||
Date: Thu, 17 Feb 2022 13:54:42 +0100
|
||||
Subject: [PATCH 2/3] arm: mvebu: spl: Add option to reset the board on DDR
|
||||
training failure
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Some boards may occacionally fail DDR training. Currently we hang() in
|
||||
this case. Add an option that makes the board do an immediate reset in
|
||||
such a case, so that a new training is tried as soon as possible,
|
||||
instead of hanging and possibly waiting for watchdog to reset the board.
|
||||
|
||||
(If the DDR training fails while booting the image via UART, we will
|
||||
still hang - it doesn't make sense to reset in such a case, because
|
||||
after reset the board will try booting from another medium, and the
|
||||
UART booting utility does not expect that.)
|
||||
|
||||
Signed-off-by: Marek Behún <marek.behun@nic.cz>
|
||||
Reviewed-by: Pali Rohár <pali@kernel.org>
|
||||
Reviewed-by: Stefan Roese <sr@denx.de>
|
||||
---
|
||||
arch/arm/mach-mvebu/spl.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/arch/arm/mach-mvebu/spl.c
|
||||
+++ b/arch/arm/mach-mvebu/spl.c
|
||||
@@ -4,6 +4,7 @@
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
+#include <cpu_func.h>
|
||||
#include <dm.h>
|
||||
#include <debug_uart.h>
|
||||
#include <fdtdec.h>
|
||||
@@ -290,7 +291,11 @@ void board_init_f(ulong dummy)
|
||||
ret = ddr3_init();
|
||||
if (ret) {
|
||||
debug("ddr3_init() failed: %d\n", ret);
|
||||
- hang();
|
||||
+ if (IS_ENABLED(CONFIG_DDR_RESET_ON_TRAINING_FAILURE) &&
|
||||
+ get_boot_device() != BOOT_DEVICE_UART)
|
||||
+ reset_cpu();
|
||||
+ else
|
||||
+ hang();
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
From 930c46e86123aeea1c73ae55d70ff3dcfc077992 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Marek=20Beh=C3=BAn?= <marek.behun@nic.cz>
|
||||
Date: Thu, 17 Feb 2022 13:54:43 +0100
|
||||
Subject: [PATCH 3/3] arm: mvebu: turris_omnia: Reset the board immediately on
|
||||
DDR training failure
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The state of the current DDR training code for Armada 38x is such that
|
||||
we cannot be sure it will always train successfully - although after the
|
||||
last change we were yet unable to find a board that failed DDR training,
|
||||
from experience in the last 2 years we know that it is possible.
|
||||
|
||||
The experience also tells us that in many cases the board fails training
|
||||
only sometimes, and after a reset the training is successful.
|
||||
|
||||
Enable the new option that makes the board reset itself on DDR training
|
||||
failure immediately. Until now we called hang() in such a case, which
|
||||
meant that the board was reset by the MCU after 120 seconds.
|
||||
|
||||
Signed-off-by: Marek Behún <marek.behun@nic.cz>
|
||||
Reviewed-by: Stefan Roese <sr@denx.de>
|
||||
Reviewed-by: Pali Rohár <pali@kernel.org>
|
||||
---
|
||||
configs/turris_omnia_defconfig | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/configs/turris_omnia_defconfig
|
||||
+++ b/configs/turris_omnia_defconfig
|
||||
@@ -11,6 +11,7 @@ CONFIG_NR_DRAM_BANKS=2
|
||||
CONFIG_SYS_MEMTEST_START=0x00800000
|
||||
CONFIG_SYS_MEMTEST_END=0x00ffffff
|
||||
CONFIG_TARGET_TURRIS_OMNIA=y
|
||||
+CONFIG_DDR_RESET_ON_TRAINING_FAILURE=y
|
||||
CONFIG_ENV_SIZE=0x10000
|
||||
CONFIG_ENV_OFFSET=0xF0000
|
||||
CONFIG_ENV_SECT_SIZE=0x10000
|
||||
@@ -0,0 +1,31 @@
|
||||
From 40a67a9403deafdac05564b7350af49a71e12373 Mon Sep 17 00:00:00 2001
|
||||
From: Josef Schlehofer <pepe.schlehofer@gmail.com>
|
||||
Date: Fri, 29 Apr 2022 17:34:53 +0200
|
||||
Subject: [PATCH] arm: mvebu: clearfog_defconfig: enable setexpr command
|
||||
|
||||
This command is useful in U-boot scripts and it is being used by
|
||||
OpenWrt bootscript for this board [1]. Otherwise shell scripting
|
||||
commands are enabled by default in cmd/Kconfig.
|
||||
|
||||
[1] https://github.com/openwrt/openwrt/blob/852126680e21edc71c0c66561ae5a6d7479dcc67/target/linux/mvebu/image/clearfog.bootscript#L7
|
||||
|
||||
[2] https://source.denx.de/u-boot/u-boot/-/blob/e95afa56753cebcd20a5114b6d121f281b789006/cmd/Kconfig#L1504
|
||||
|
||||
Fixes: 0299c90f396c5b2971a4bac596339f4b03661c27 ("arm: mvebu: Add
|
||||
SolidRun ClearFog Armada 38x initial support")
|
||||
|
||||
Signed-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com>
|
||||
---
|
||||
configs/clearfog_defconfig | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
--- a/configs/clearfog_defconfig
|
||||
+++ b/configs/clearfog_defconfig
|
||||
@@ -35,7 +35,6 @@ CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_PCI=y
|
||||
CONFIG_CMD_SPI=y
|
||||
CONFIG_CMD_USB=y
|
||||
-# CONFIG_CMD_SETEXPR is not set
|
||||
CONFIG_CMD_TFTPPUT=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_CMD_TIME=y
|
||||
@@ -46,10 +46,6 @@ ALLWIFIBOARDS:= \
|
||||
linksys_ea8300 \
|
||||
linksys_mr8300-v0 \
|
||||
luma_wrtq-329acn \
|
||||
mikrotik_cap-ac \
|
||||
mikrotik_hap-ac2 \
|
||||
mikrotik_hap-ac3 \
|
||||
mikrotik_sxtsq-5-ac \
|
||||
mobipromo_cm520-79f \
|
||||
nec_wg2600hp3 \
|
||||
p2w_r619ac \
|
||||
@@ -140,10 +136,6 @@ $(eval $(call generate-ipq-wifi-package,glinet_gl-s1300,GL.iNet GL-S1300))
|
||||
$(eval $(call generate-ipq-wifi-package,linksys_ea8300,Linksys EA8300))
|
||||
$(eval $(call generate-ipq-wifi-package,linksys_mr8300-v0,Linksys MR8300))
|
||||
$(eval $(call generate-ipq-wifi-package,luma_wrtq-329acn,Luma WRTQ-329ACN))
|
||||
$(eval $(call generate-ipq-wifi-package,mikrotik_cap-ac,Mikrotik cAP ac))
|
||||
$(eval $(call generate-ipq-wifi-package,mikrotik_hap-ac2,Mikrotik hAP ac2))
|
||||
$(eval $(call generate-ipq-wifi-package,mikrotik_hap-ac3,Mikrotik hAP ac3))
|
||||
$(eval $(call generate-ipq-wifi-package,mikrotik_sxtsq-5-ac,MikroTik SXTsq 5 ac))
|
||||
$(eval $(call generate-ipq-wifi-package,mobipromo_cm520-79f,MobiPromo CM520-79F))
|
||||
$(eval $(call generate-ipq-wifi-package,nec_wg2600hp3,NEC Platforms WG2600HP3))
|
||||
$(eval $(call generate-ipq-wifi-package,p2w_r619ac,P&W R619AC))
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,12 +1,12 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=wireless-regdb
|
||||
PKG_VERSION:=2022.02.18
|
||||
PKG_VERSION:=2022.06.06
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||
PKG_SOURCE_URL:=@KERNEL/software/network/wireless-regdb/
|
||||
PKG_HASH:=8828c25a4ee25020044004f57374bb9deac852809fad70f8d3d01770bf9ac97f
|
||||
PKG_HASH:=ac00f97efecce5046ed069d1d93f3365fdf994c7c7854a8fc50831e959537230
|
||||
|
||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
--- a/db.txt
|
||||
+++ b/db.txt
|
||||
@@ -16,7 +16,7 @@ country 00:
|
||||
@@ -19,7 +19,7 @@ country 00:
|
||||
# Channel 14. Only JP enables this and for 802.11b only
|
||||
(2474 - 2494 @ 20), (20), NO-IR, NO-OFDM
|
||||
# Channel 36 - 48
|
||||
|
||||
@@ -8,9 +8,9 @@ PKG_LICENSE_FILES:=
|
||||
|
||||
PKG_SOURCE_URL:=https://github.com/greearb/ath10k-ct.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_DATE:=2021-11-28
|
||||
PKG_SOURCE_VERSION:=dc350bbf41d987c5b2db54405bcc9ef3cd66d5db
|
||||
PKG_MIRROR_HASH:=92422485c7b92be840a40bf8d157bb6731d14d3811907b6cb4e4cfab0777b60d
|
||||
PKG_SOURCE_DATE:=2022-05-13
|
||||
PKG_SOURCE_VERSION:=f808496fcc6b1f68942914117aebf8b3f8d52bb3
|
||||
PKG_MIRROR_HASH:=39527b3408696594eda5579521a9fb798417be4dda73fa08e8b3a8c7b0d3f3d9
|
||||
|
||||
# Build the 5.15 ath10k-ct driver version.
|
||||
# Probably this should match as closely as
|
||||
|
||||
@@ -34,7 +34,7 @@ Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
||||
#include <asm/byteorder.h>
|
||||
#include <linux/ctype.h>
|
||||
|
||||
@@ -988,7 +989,8 @@ static int ath10k_core_get_board_id_from
|
||||
@@ -1005,7 +1006,8 @@ static int ath10k_core_get_board_id_from
|
||||
}
|
||||
|
||||
if (ar->cal_mode == ATH10K_PRE_CAL_MODE_DT ||
|
||||
@@ -44,7 +44,7 @@ Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
||||
bmi_board_id_param = BMI_PARAM_GET_FLASH_BOARD_ID;
|
||||
else
|
||||
bmi_board_id_param = BMI_PARAM_GET_EEPROM_BOARD_ID;
|
||||
@@ -2087,7 +2089,8 @@ static int ath10k_download_and_run_otp(s
|
||||
@@ -2115,7 +2117,8 @@ static int ath10k_download_and_run_otp(s
|
||||
|
||||
/* As of now pre-cal is valid for 10_4 variants */
|
||||
if (ar->cal_mode == ATH10K_PRE_CAL_MODE_DT ||
|
||||
@@ -54,7 +54,7 @@ Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
||||
bmi_otp_exe_param = BMI_PARAM_FLASH_SECTION_ALL;
|
||||
|
||||
ret = ath10k_bmi_execute(ar, address, bmi_otp_exe_param, &result);
|
||||
@@ -2221,6 +2224,39 @@ struct ath10k_bss_rom_ie {
|
||||
@@ -2249,6 +2252,39 @@ struct ath10k_bss_rom_ie {
|
||||
__le32 rom_len;
|
||||
} __packed;
|
||||
|
||||
@@ -94,7 +94,7 @@ Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
||||
int ath10k_core_fetch_firmware_api_n(struct ath10k *ar, const char *name,
|
||||
struct ath10k_fw_file *fw_file)
|
||||
{
|
||||
@@ -2597,6 +2633,18 @@ static int ath10k_core_pre_cal_download(
|
||||
@@ -2625,6 +2661,18 @@ static int ath10k_core_pre_cal_download(
|
||||
{
|
||||
int ret;
|
||||
|
||||
@@ -113,7 +113,7 @@ Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
||||
ret = ath10k_download_cal_file(ar, ar->pre_cal_file);
|
||||
if (ret == 0) {
|
||||
ar->cal_mode = ATH10K_PRE_CAL_MODE_FILE;
|
||||
@@ -2663,6 +2711,18 @@ static int ath10k_download_cal_data(stru
|
||||
@@ -2691,6 +2739,18 @@ static int ath10k_download_cal_data(stru
|
||||
"pre cal download procedure failed, try cal file: %d\n",
|
||||
ret);
|
||||
|
||||
|
||||
@@ -129,7 +129,7 @@ v13:
|
||||
.patch_load_addr = QCA988X_HW_2_0_PATCH_LOAD_ADDR,
|
||||
.uart_pin = 7,
|
||||
.cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_ALL,
|
||||
@@ -141,6 +143,7 @@ static const struct ath10k_hw_params ath
|
||||
@@ -143,6 +145,7 @@ static const struct ath10k_hw_params ath
|
||||
.dev_id = QCA9887_1_0_DEVICE_ID,
|
||||
.bus = ATH10K_BUS_PCI,
|
||||
.name = "qca9887 hw1.0",
|
||||
@@ -137,7 +137,7 @@ v13:
|
||||
.patch_load_addr = QCA9887_HW_1_0_PATCH_LOAD_ADDR,
|
||||
.uart_pin = 7,
|
||||
.cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_ALL,
|
||||
@@ -352,6 +355,7 @@ static const struct ath10k_hw_params ath
|
||||
@@ -360,6 +363,7 @@ static const struct ath10k_hw_params ath
|
||||
.dev_id = QCA99X0_2_0_DEVICE_ID,
|
||||
.bus = ATH10K_BUS_PCI,
|
||||
.name = "qca99x0 hw2.0",
|
||||
@@ -145,7 +145,7 @@ v13:
|
||||
.patch_load_addr = QCA99X0_HW_2_0_PATCH_LOAD_ADDR,
|
||||
.uart_pin = 7,
|
||||
.otp_exe_param = 0x00000700,
|
||||
@@ -393,6 +397,7 @@ static const struct ath10k_hw_params ath
|
||||
@@ -402,6 +406,7 @@ static const struct ath10k_hw_params ath
|
||||
.dev_id = QCA9984_1_0_DEVICE_ID,
|
||||
.bus = ATH10K_BUS_PCI,
|
||||
.name = "qca9984/qca9994 hw1.0",
|
||||
@@ -153,7 +153,7 @@ v13:
|
||||
.patch_load_addr = QCA9984_HW_1_0_PATCH_LOAD_ADDR,
|
||||
.uart_pin = 7,
|
||||
.cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH,
|
||||
@@ -441,6 +446,7 @@ static const struct ath10k_hw_params ath
|
||||
@@ -451,6 +456,7 @@ static const struct ath10k_hw_params ath
|
||||
.dev_id = QCA9888_2_0_DEVICE_ID,
|
||||
.bus = ATH10K_BUS_PCI,
|
||||
.name = "qca9888 hw2.0",
|
||||
@@ -161,7 +161,7 @@ v13:
|
||||
.patch_load_addr = QCA9888_HW_2_0_PATCH_LOAD_ADDR,
|
||||
.uart_pin = 7,
|
||||
.cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH,
|
||||
@@ -3942,6 +3948,10 @@ int ath10k_core_start(struct ath10k *ar,
|
||||
@@ -3977,6 +3983,10 @@ int ath10k_core_start(struct ath10k *ar,
|
||||
ath10k_wmi_check_apply_board_power_ctl_table(ar);
|
||||
}
|
||||
|
||||
@@ -172,7 +172,7 @@ v13:
|
||||
return 0;
|
||||
|
||||
err_hif_stop:
|
||||
@@ -4203,9 +4213,18 @@ static void ath10k_core_register_work(st
|
||||
@@ -4238,9 +4248,18 @@ static void ath10k_core_register_work(st
|
||||
goto err_spectral_destroy;
|
||||
}
|
||||
|
||||
@@ -191,7 +191,7 @@ v13:
|
||||
err_spectral_destroy:
|
||||
ath10k_spectral_destroy(ar);
|
||||
err_debug_destroy:
|
||||
@@ -4265,6 +4284,8 @@ void ath10k_core_unregister(struct ath10
|
||||
@@ -4300,6 +4319,8 @@ void ath10k_core_unregister(struct ath10
|
||||
if (!test_bit(ATH10K_FLAG_CORE_REGISTERED, &ar->dev_flags))
|
||||
return;
|
||||
|
||||
@@ -456,7 +456,7 @@ v13:
|
||||
static const struct wmi_peer_flags_map wmi_tlv_peer_flags_map = {
|
||||
--- a/ath10k-5.15/wmi.c
|
||||
+++ b/ath10k-5.15/wmi.c
|
||||
@@ -8409,6 +8409,49 @@ ath10k_wmi_op_gen_peer_set_param(struct
|
||||
@@ -8413,6 +8413,49 @@ ath10k_wmi_op_gen_peer_set_param(struct
|
||||
return skb;
|
||||
}
|
||||
|
||||
@@ -506,7 +506,7 @@ v13:
|
||||
static struct sk_buff *
|
||||
ath10k_wmi_op_gen_set_psmode(struct ath10k *ar, u32 vdev_id,
|
||||
enum wmi_sta_ps_mode psmode)
|
||||
@@ -10240,6 +10283,9 @@ static const struct wmi_ops wmi_ops = {
|
||||
@@ -10244,6 +10287,9 @@ static const struct wmi_ops wmi_ops = {
|
||||
.fw_stats_fill = ath10k_wmi_main_op_fw_stats_fill,
|
||||
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
||||
.gen_echo = ath10k_wmi_op_gen_echo,
|
||||
@@ -516,7 +516,7 @@ v13:
|
||||
/* .gen_bcn_tmpl not implemented */
|
||||
/* .gen_prb_tmpl not implemented */
|
||||
/* .gen_p2p_go_bcn_ie not implemented */
|
||||
@@ -10310,6 +10356,8 @@ static const struct wmi_ops wmi_10_1_ops
|
||||
@@ -10314,6 +10360,8 @@ static const struct wmi_ops wmi_10_1_ops
|
||||
.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill,
|
||||
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
||||
.gen_echo = ath10k_wmi_op_gen_echo,
|
||||
@@ -525,7 +525,7 @@ v13:
|
||||
/* .gen_bcn_tmpl not implemented */
|
||||
/* .gen_prb_tmpl not implemented */
|
||||
/* .gen_p2p_go_bcn_ie not implemented */
|
||||
@@ -10389,6 +10437,8 @@ static const struct wmi_ops wmi_10_2_ops
|
||||
@@ -10393,6 +10441,8 @@ static const struct wmi_ops wmi_10_2_ops
|
||||
.gen_delba_send = ath10k_wmi_op_gen_delba_send,
|
||||
.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill,
|
||||
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
||||
@@ -534,7 +534,7 @@ v13:
|
||||
/* .gen_pdev_enable_adaptive_cca not implemented */
|
||||
};
|
||||
|
||||
@@ -10460,6 +10510,8 @@ static const struct wmi_ops wmi_10_2_4_o
|
||||
@@ -10464,6 +10514,8 @@ static const struct wmi_ops wmi_10_2_4_o
|
||||
ath10k_wmi_op_gen_pdev_enable_adaptive_cca,
|
||||
.get_vdev_subtype = ath10k_wmi_10_2_4_op_get_vdev_subtype,
|
||||
.gen_bb_timing = ath10k_wmi_10_2_4_op_gen_bb_timing,
|
||||
@@ -543,7 +543,7 @@ v13:
|
||||
/* .gen_bcn_tmpl not implemented */
|
||||
/* .gen_prb_tmpl not implemented */
|
||||
/* .gen_p2p_go_bcn_ie not implemented */
|
||||
@@ -10542,6 +10594,8 @@ static const struct wmi_ops wmi_10_4_ops
|
||||
@@ -10546,6 +10598,8 @@ static const struct wmi_ops wmi_10_4_ops
|
||||
.gen_pdev_bss_chan_info_req = ath10k_wmi_10_2_op_gen_pdev_bss_chan_info,
|
||||
.gen_echo = ath10k_wmi_op_gen_echo,
|
||||
.gen_pdev_get_tpc_config = ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config,
|
||||
|
||||
@@ -42,7 +42,7 @@ Signed-off-by: Mathias Kresin <dev@kresin.me>
|
||||
if (ret)
|
||||
--- a/ath10k-5.15/mac.c
|
||||
+++ b/ath10k-5.15/mac.c
|
||||
@@ -11521,7 +11521,7 @@ int ath10k_mac_register(struct ath10k *a
|
||||
@@ -11544,7 +11544,7 @@ int ath10k_mac_register(struct ath10k *a
|
||||
ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
|
||||
|
||||
#ifdef CPTCFG_MAC80211_LEDS
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- broadcom-wl-5.10.56.27.3/driver/wl_linux.c.orig 2018-01-13 18:25:14.944667645 +0100
|
||||
+++ broadcom-wl-5.10.56.27.3/driver/wl_linux.c 2018-01-13 18:25:25.836667888 +0100
|
||||
@@ -2762,7 +2762,6 @@
|
||||
--- a/driver/wl_linux.c
|
||||
+++ b/driver/wl_linux.c
|
||||
@@ -2762,7 +2762,6 @@ wl_monitor(wl_info_t *wl, wl_rxsts_t *rx
|
||||
bcopy(oskb->data + D11_PHY_HDR_LEN, pdata, oskb->len - D11_PHY_HDR_LEN);
|
||||
|
||||
skb->dev = wl->monitor;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/driver/wl_linux.c
|
||||
+++ b/driver/wl_linux.c
|
||||
@@ -235,7 +235,11 @@
|
||||
@@ -235,7 +235,11 @@ struct wl_info {
|
||||
|
||||
};
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
static void _wl_timer(wl_timer_t *t);
|
||||
|
||||
#ifdef WLC_HIGH_ONLY
|
||||
@@ -2512,6 +2517,18 @@
|
||||
@@ -2512,6 +2516,18 @@ wl_timer_task(wl_task_t *task)
|
||||
}
|
||||
#endif /* WLC_HIGH_ONLY */
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
static void
|
||||
wl_timer(ulong data)
|
||||
{
|
||||
@@ -2522,6 +2539,7 @@
|
||||
@@ -2522,6 +2538,7 @@ wl_timer(ulong data)
|
||||
wl_schedule_task(t->wl, wl_timer_task, t);
|
||||
#endif /* WLC_HIGH_ONLY */
|
||||
}
|
||||
@@ -39,7 +39,7 @@
|
||||
|
||||
static void
|
||||
_wl_timer(wl_timer_t *t)
|
||||
@@ -2573,9 +2591,13 @@
|
||||
@@ -2573,9 +2590,13 @@ wl_init_timer(wl_info_t *wl, void (*fn)(
|
||||
|
||||
bzero(t, sizeof(wl_timer_t));
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/driver/wl_iw.c
|
||||
+++ b/driver/wl_iw.c
|
||||
@@ -112,10 +112,14 @@
|
||||
@@ -112,10 +112,14 @@ dev_wlc_ioctl(
|
||||
ifr.ifr_data = (caddr_t) &ioc;
|
||||
|
||||
/* Must be up for virtually all useful ioctls */
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
Index: broadcom-wl-5.10.56.27.3/driver/wl_linux.c
|
||||
===================================================================
|
||||
--- broadcom-wl-5.10.56.27.3.orig/driver/wl_linux.c
|
||||
+++ broadcom-wl-5.10.56.27.3/driver/wl_linux.c
|
||||
@@ -74,6 +74,10 @@
|
||||
#error "No support for Kernel Rev <= 2.4.5, As the older kernel revs doesn't support Tasklets"
|
||||
#endif
|
||||
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
|
||||
+#define ioremap_nocache ioremap
|
||||
+#endif
|
||||
+
|
||||
typedef void wlc_info_t;
|
||||
typedef void wlc_hw_info_t;
|
||||
#include <wlc_pub.h>
|
||||
@@ -1915,7 +1919,11 @@ wl_ioctl(struct net_device *dev, struct
|
||||
}
|
||||
|
||||
/* optimization for direct ioctl calls from kernel */
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 9, 0)
|
||||
if (segment_eq(get_fs(), KERNEL_DS))
|
||||
+#else
|
||||
+ if (uaccess_kernel())
|
||||
+#endif
|
||||
buf = ioc.buf;
|
||||
|
||||
else if (ioc.buf) {
|
||||
Index: broadcom-wl-5.10.56.27.3/driver/linux_osl.c
|
||||
===================================================================
|
||||
--- broadcom-wl-5.10.56.27.3.orig/driver/linux_osl.c
|
||||
+++ broadcom-wl-5.10.56.27.3/driver/linux_osl.c
|
||||
@@ -34,6 +34,10 @@
|
||||
#define OS_HANDLE_MAGIC 0x1234abcd /* Magic # to recognise osh */
|
||||
#define BCM_MEM_FILENAME_LEN 24 /* Mem. filename length */
|
||||
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
|
||||
+#define ioremap_nocache ioremap
|
||||
+#endif
|
||||
+
|
||||
typedef struct bcm_mem_link {
|
||||
struct bcm_mem_link *prev;
|
||||
struct bcm_mem_link *next;
|
||||
@@ -101,6 +101,18 @@ endef
|
||||
$(eval $(call KernelPackage,crypto-ccm))
|
||||
|
||||
|
||||
define KernelPackage/crypto-chacha20poly1305
|
||||
TITLE:=ChaCha20-Poly1305 AEAD support, RFC7539 (used by strongSwan IPsec VPN)
|
||||
DEPENDS:=+kmod-crypto-aead +kmod-crypto-manager
|
||||
KCONFIG:=CONFIG_CRYPTO_CHACHA20POLY1305
|
||||
FILES:=$(LINUX_DIR)/crypto/chacha20poly1305.ko
|
||||
AUTOLOAD:=$(call AutoLoad,09,chacha20poly1305)
|
||||
$(call AddDepends/crypto)
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,crypto-chacha20poly1305))
|
||||
|
||||
|
||||
define KernelPackage/crypto-cmac
|
||||
TITLE:=Support for Cipher-based Message Authentication Code (CMAC)
|
||||
DEPENDS:=+kmod-crypto-hash
|
||||
|
||||
@@ -1272,3 +1272,14 @@ define KernelPackage/nft-compat
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,nft-compat))
|
||||
|
||||
define KernelPackage/nft-xfrm
|
||||
SUBMENU:=$(NF_MENU)
|
||||
TITLE:=Netfilter nf_tables xfrm support (ipsec)
|
||||
DEPENDS:=+kmod-nft-core
|
||||
FILES:=$(foreach mod,$(NFT_XFRM-m),$(LINUX_DIR)/net/$(mod).ko)
|
||||
AUTOLOAD:=$(call AutoProbe,$(notdir $(NFT_XFRM-m)))
|
||||
KCONFIG:=$(KCONFIG_NFT_XFRM)
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,nft-xfrm))
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
From f2a7064a78b22f2b68b9fcbc8a6f4c5e61c5ba64 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marko <robimarko@gmail.com>
|
||||
Date: Sun, 10 Oct 2021 00:17:11 +0200
|
||||
Subject: [PATCH] ath10k: support bus and device specific API 1 BDF selection
|
||||
|
||||
Some ath10k IPQ40xx devices like the MikroTik hAP ac2 and ac3 require the
|
||||
BDF-s to be extracted from the device storage instead of shipping packaged
|
||||
API 2 BDF-s.
|
||||
|
||||
This is required as MikroTik has started shipping boards that require BDF-s
|
||||
to be updated, as otherwise their WLAN performance really suffers.
|
||||
This is however impossible as the devices that require this are release
|
||||
under the same revision and its not possible to differentiate them from
|
||||
devices using the older BDF-s.
|
||||
|
||||
In OpenWrt we are extracting the calibration data during runtime and we are
|
||||
able to extract the BDF-s in the same manner, however we cannot package the
|
||||
BDF-s to API 2 format on the fly and can only use API 1 to provide BDF-s on
|
||||
the fly.
|
||||
This is an issue as the ath10k driver explicitly looks only for the
|
||||
board.bin file and not for something like board-bus-device.bin like it does
|
||||
for pre-cal data.
|
||||
Due to this we have no way of providing correct BDF-s on the fly, so lets
|
||||
extend the ath10k driver to first look for BDF-s in the
|
||||
board-bus-device.bin format, for example: board-ahb-a800000.wifi.bin
|
||||
If that fails, look for the default board file name as defined previously.
|
||||
|
||||
Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20211009221711.2315352-1-robimarko@gmail.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath10k/core.c | 13 ++++++++++++-
|
||||
1 file changed, 12 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath10k/core.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/core.c
|
||||
@@ -1199,6 +1199,7 @@ success:
|
||||
static int ath10k_core_fetch_board_data_api_1(struct ath10k *ar, int bd_ie_type)
|
||||
{
|
||||
const struct firmware *fw;
|
||||
+ char boardname[100];
|
||||
|
||||
if (bd_ie_type == ATH10K_BD_IE_BOARD) {
|
||||
if (!ar->hw_params.fw.board) {
|
||||
@@ -1206,9 +1207,19 @@ static int ath10k_core_fetch_board_data_
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
+ scnprintf(boardname, sizeof(boardname), "board-%s-%s.bin",
|
||||
+ ath10k_bus_str(ar->hif.bus), dev_name(ar->dev));
|
||||
+
|
||||
ar->normal_mode_fw.board = ath10k_fetch_fw_file(ar,
|
||||
ar->hw_params.fw.dir,
|
||||
- ar->hw_params.fw.board);
|
||||
+ boardname);
|
||||
+ if (IS_ERR(ar->normal_mode_fw.board)) {
|
||||
+ fw = ath10k_fetch_fw_file(ar,
|
||||
+ ar->hw_params.fw.dir,
|
||||
+ ar->hw_params.fw.board);
|
||||
+ ar->normal_mode_fw.board = fw;
|
||||
+ }
|
||||
+
|
||||
if (IS_ERR(ar->normal_mode_fw.board))
|
||||
return PTR_ERR(ar->normal_mode_fw.board);
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Sat, 26 Mar 2022 23:58:35 +0100
|
||||
Subject: [PATCH] mac80211: do not wake queues on a vif that is being stopped
|
||||
|
||||
When a vif is being removed and sdata->bss is cleared, __ieee80211_wake_txqs
|
||||
can still be called on it, which crashes as soon as sdata->bss is being
|
||||
dereferenced.
|
||||
To fix this properly, check for SDATA_STATE_RUNNING before waking queues,
|
||||
and take the fq lock when setting it (to ensure that __ieee80211_wake_txqs
|
||||
observes the change when running on a different CPU
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/iface.c
|
||||
+++ b/net/mac80211/iface.c
|
||||
@@ -377,7 +377,9 @@ static void ieee80211_do_stop(struct iee
|
||||
bool cancel_scan;
|
||||
struct cfg80211_nan_func *func;
|
||||
|
||||
+ spin_lock_bh(&local->fq.lock);
|
||||
clear_bit(SDATA_STATE_RUNNING, &sdata->state);
|
||||
+ spin_unlock_bh(&local->fq.lock);
|
||||
|
||||
cancel_scan = rcu_access_pointer(local->scan_sdata) == sdata;
|
||||
if (cancel_scan)
|
||||
--- a/net/mac80211/util.c
|
||||
+++ b/net/mac80211/util.c
|
||||
@@ -301,6 +301,9 @@ static void __ieee80211_wake_txqs(struct
|
||||
local_bh_disable();
|
||||
spin_lock(&fq->lock);
|
||||
|
||||
+ if (!test_bit(SDATA_STATE_RUNNING, &sdata->state))
|
||||
+ goto out;
|
||||
+
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP)
|
||||
ps = &sdata->bss->ps;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,52 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Mon, 20 Jun 2022 14:53:04 +0200
|
||||
Subject: [PATCH] mac80211: make sta airtime deficit field s32 instead of
|
||||
s64
|
||||
|
||||
32 bit is more than enough range for the airtime deficit
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/debugfs_sta.c
|
||||
+++ b/net/mac80211/debugfs_sta.c
|
||||
@@ -202,7 +202,7 @@ static ssize_t sta_airtime_read(struct f
|
||||
size_t bufsz = 400;
|
||||
char *buf = kzalloc(bufsz, GFP_KERNEL), *p = buf;
|
||||
u64 rx_airtime = 0, tx_airtime = 0;
|
||||
- s64 deficit[IEEE80211_NUM_ACS];
|
||||
+ s32 deficit[IEEE80211_NUM_ACS];
|
||||
ssize_t rv;
|
||||
int ac;
|
||||
|
||||
@@ -219,7 +219,7 @@ static ssize_t sta_airtime_read(struct f
|
||||
|
||||
p += scnprintf(p, bufsz + buf - p,
|
||||
"RX: %llu us\nTX: %llu us\nWeight: %u\n"
|
||||
- "Deficit: VO: %lld us VI: %lld us BE: %lld us BK: %lld us\n",
|
||||
+ "Deficit: VO: %d us VI: %d us BE: %d us BK: %d us\n",
|
||||
rx_airtime, tx_airtime, sta->airtime_weight,
|
||||
deficit[0], deficit[1], deficit[2], deficit[3]);
|
||||
|
||||
--- a/net/mac80211/sta_info.h
|
||||
+++ b/net/mac80211/sta_info.h
|
||||
@@ -138,7 +138,7 @@ enum ieee80211_agg_stop_reason {
|
||||
struct airtime_info {
|
||||
u64 rx_airtime;
|
||||
u64 tx_airtime;
|
||||
- s64 deficit;
|
||||
+ s32 deficit;
|
||||
atomic_t aql_tx_pending; /* Estimated airtime for frames pending */
|
||||
u32 aql_limit_low;
|
||||
u32 aql_limit_high;
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -3847,7 +3847,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
struct sta_info *sta = container_of(txqi->txq.sta,
|
||||
struct sta_info, sta);
|
||||
bool aql_check = ieee80211_txq_airtime_check(hw, &txqi->txq);
|
||||
- s64 deficit = sta->airtime[txqi->txq.ac].deficit;
|
||||
+ s32 deficit = sta->airtime[txqi->txq.ac].deficit;
|
||||
|
||||
if (aql_check)
|
||||
found_eligible_txq = true;
|
||||
@@ -0,0 +1,48 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Mon, 20 Jun 2022 14:59:09 +0200
|
||||
Subject: [PATCH] mac80211: consider aql_tx_pending when checking airtime
|
||||
deficit
|
||||
|
||||
When queueing packets for a station, deficit only gets added once the packets
|
||||
have been transmitted, which could be much later. During that time, a lot of
|
||||
temporary unfairness could happen, which could lead to bursty behavior.
|
||||
Fix this by subtracting the aql_tx_pending when checking the deficit in tx
|
||||
scheduling.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -3817,6 +3817,13 @@ out:
|
||||
}
|
||||
EXPORT_SYMBOL(ieee80211_tx_dequeue);
|
||||
|
||||
+static inline s32 ieee80211_sta_deficit(struct sta_info *sta, u8 ac)
|
||||
+{
|
||||
+ struct airtime_info *air_info = &sta->airtime[ac];
|
||||
+
|
||||
+ return air_info->deficit - atomic_read(&air_info->aql_tx_pending);
|
||||
+}
|
||||
+
|
||||
struct ieee80211_txq *ieee80211_next_txq(struct ieee80211_hw *hw, u8 ac)
|
||||
{
|
||||
struct ieee80211_local *local = hw_to_local(hw);
|
||||
@@ -3847,7 +3854,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
struct sta_info *sta = container_of(txqi->txq.sta,
|
||||
struct sta_info, sta);
|
||||
bool aql_check = ieee80211_txq_airtime_check(hw, &txqi->txq);
|
||||
- s32 deficit = sta->airtime[txqi->txq.ac].deficit;
|
||||
+ s32 deficit = ieee80211_sta_deficit(sta, txqi->txq.ac);
|
||||
|
||||
if (aql_check)
|
||||
found_eligible_txq = true;
|
||||
@@ -3972,7 +3979,7 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
continue;
|
||||
}
|
||||
sta = container_of(iter->txq.sta, struct sta_info, sta);
|
||||
- if (sta->airtime[ac].deficit < 0)
|
||||
+ if (ieee80211_sta_deficit(sta, ac) < 0)
|
||||
sta->airtime[ac].deficit += sta->airtime_weight;
|
||||
list_move_tail(&iter->schedule_order, &local->active_txqs[ac]);
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Mon, 20 Jun 2022 20:52:50 +0200
|
||||
Subject: [PATCH] mac80211: keep recently active tx queues in scheduling
|
||||
list
|
||||
|
||||
This allows proper deficit accounting to ensure that they don't carry their
|
||||
deficit until the next time they become active
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -83,6 +83,13 @@ extern const u8 ieee80211_ac_to_qos_mask
|
||||
|
||||
#define IEEE80211_MAX_NAN_INSTANCE_ID 255
|
||||
|
||||
+
|
||||
+/*
|
||||
+ * Keep a station's queues on the active list for deficit accounting purposes
|
||||
+ * if it was active or queued during the last 100ms
|
||||
+ */
|
||||
+#define AIRTIME_ACTIVE_DURATION (HZ / 10)
|
||||
+
|
||||
struct ieee80211_bss {
|
||||
u32 device_ts_beacon, device_ts_presp;
|
||||
|
||||
--- a/net/mac80211/sta_info.h
|
||||
+++ b/net/mac80211/sta_info.h
|
||||
@@ -138,6 +138,7 @@ enum ieee80211_agg_stop_reason {
|
||||
struct airtime_info {
|
||||
u64 rx_airtime;
|
||||
u64 tx_airtime;
|
||||
+ u32 last_active;
|
||||
s32 deficit;
|
||||
atomic_t aql_tx_pending; /* Estimated airtime for frames pending */
|
||||
u32 aql_limit_low;
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -3824,6 +3824,36 @@ static inline s32 ieee80211_sta_deficit(
|
||||
return air_info->deficit - atomic_read(&air_info->aql_tx_pending);
|
||||
}
|
||||
|
||||
+static void
|
||||
+ieee80211_txq_set_active(struct txq_info *txqi)
|
||||
+{
|
||||
+ struct sta_info *sta;
|
||||
+
|
||||
+ if (!txqi->txq.sta)
|
||||
+ return;
|
||||
+
|
||||
+ sta = container_of(txqi->txq.sta, struct sta_info, sta);
|
||||
+ sta->airtime[txqi->txq.ac].last_active = (u32)jiffies;
|
||||
+}
|
||||
+
|
||||
+static bool
|
||||
+ieee80211_txq_keep_active(struct txq_info *txqi)
|
||||
+{
|
||||
+ struct sta_info *sta;
|
||||
+ u32 diff;
|
||||
+
|
||||
+ if (!txqi->txq.sta)
|
||||
+ return false;
|
||||
+
|
||||
+ sta = container_of(txqi->txq.sta, struct sta_info, sta);
|
||||
+ if (ieee80211_sta_deficit(sta, txqi->txq.ac) >= 0)
|
||||
+ return false;
|
||||
+
|
||||
+ diff = (u32)jiffies - sta->airtime[txqi->txq.ac].last_active;
|
||||
+
|
||||
+ return diff <= AIRTIME_ACTIVE_DURATION;
|
||||
+}
|
||||
+
|
||||
struct ieee80211_txq *ieee80211_next_txq(struct ieee80211_hw *hw, u8 ac)
|
||||
{
|
||||
struct ieee80211_local *local = hw_to_local(hw);
|
||||
@@ -3870,7 +3900,6 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
}
|
||||
}
|
||||
|
||||
-
|
||||
if (txqi->schedule_round == local->schedule_round[ac])
|
||||
goto out;
|
||||
|
||||
@@ -3890,12 +3919,13 @@ void __ieee80211_schedule_txq(struct iee
|
||||
{
|
||||
struct ieee80211_local *local = hw_to_local(hw);
|
||||
struct txq_info *txqi = to_txq_info(txq);
|
||||
+ bool has_queue;
|
||||
|
||||
spin_lock_bh(&local->active_txq_lock[txq->ac]);
|
||||
|
||||
+ has_queue = force || txq_has_queue(txq);
|
||||
if (list_empty(&txqi->schedule_order) &&
|
||||
- (force || !skb_queue_empty(&txqi->frags) ||
|
||||
- txqi->tin.backlog_packets)) {
|
||||
+ (has_queue || ieee80211_txq_keep_active(txqi))) {
|
||||
/* If airtime accounting is active, always enqueue STAs at the
|
||||
* head of the list to ensure that they only get moved to the
|
||||
* back by the airtime DRR scheduler once they have a negative
|
||||
@@ -3903,7 +3933,7 @@ void __ieee80211_schedule_txq(struct iee
|
||||
* get immediately moved to the back of the list on the next
|
||||
* call to ieee80211_next_txq().
|
||||
*/
|
||||
- if (txqi->txq.sta && local->airtime_flags &&
|
||||
+ if (txqi->txq.sta && local->airtime_flags && has_queue &&
|
||||
wiphy_ext_feature_isset(local->hw.wiphy,
|
||||
NL80211_EXT_FEATURE_AIRTIME_FAIRNESS))
|
||||
list_add(&txqi->schedule_order,
|
||||
@@ -3911,6 +3941,8 @@ void __ieee80211_schedule_txq(struct iee
|
||||
else
|
||||
list_add_tail(&txqi->schedule_order,
|
||||
&local->active_txqs[txq->ac]);
|
||||
+ if (has_queue)
|
||||
+ ieee80211_txq_set_active(txqi);
|
||||
}
|
||||
|
||||
spin_unlock_bh(&local->active_txq_lock[txq->ac]);
|
||||
@@ -0,0 +1,131 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Mon, 20 Jun 2022 21:26:34 +0200
|
||||
Subject: [PATCH] mac80211: add a per-PHY AQL limit to improve fairness
|
||||
|
||||
In order to maintain fairness, the amount of queueing needs to be limited
|
||||
beyond the simple per-station AQL budget, otherwise the driver can simply
|
||||
repeatedly do scheduling rounds until all queues that have not used their
|
||||
AQL budget become eligble.
|
||||
|
||||
To be conservative, use the high AQL limit for the first txq and add half
|
||||
of the low AQL for each subsequent queue.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -1211,6 +1211,7 @@ struct ieee80211_local {
|
||||
u32 aql_txq_limit_high[IEEE80211_NUM_ACS];
|
||||
u32 aql_threshold;
|
||||
atomic_t aql_total_pending_airtime;
|
||||
+ atomic_t aql_ac_pending_airtime[IEEE80211_NUM_ACS];
|
||||
|
||||
const struct ieee80211_ops *ops;
|
||||
|
||||
--- a/net/mac80211/main.c
|
||||
+++ b/net/mac80211/main.c
|
||||
@@ -712,6 +712,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
|
||||
local->aql_txq_limit_low[i] = IEEE80211_DEFAULT_AQL_TXQ_LIMIT_L;
|
||||
local->aql_txq_limit_high[i] =
|
||||
IEEE80211_DEFAULT_AQL_TXQ_LIMIT_H;
|
||||
+ atomic_set(&local->aql_ac_pending_airtime[i], 0);
|
||||
}
|
||||
|
||||
local->airtime_flags = AIRTIME_USE_TX | AIRTIME_USE_RX;
|
||||
--- a/net/mac80211/sta_info.c
|
||||
+++ b/net/mac80211/sta_info.c
|
||||
@@ -1929,6 +1929,7 @@ void ieee80211_sta_update_pending_airtim
|
||||
&sta->airtime[ac].aql_tx_pending);
|
||||
|
||||
atomic_add(tx_airtime, &local->aql_total_pending_airtime);
|
||||
+ atomic_add(tx_airtime, &local->aql_ac_pending_airtime[ac]);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1940,14 +1941,17 @@ void ieee80211_sta_update_pending_airtim
|
||||
tx_pending, 0);
|
||||
}
|
||||
|
||||
+ atomic_sub(tx_airtime, &local->aql_total_pending_airtime);
|
||||
tx_pending = atomic_sub_return(tx_airtime,
|
||||
- &local->aql_total_pending_airtime);
|
||||
+ &local->aql_ac_pending_airtime[ac]);
|
||||
if (WARN_ONCE(tx_pending < 0,
|
||||
"Device %s AC %d pending airtime underflow: %u, %u",
|
||||
wiphy_name(local->hw.wiphy), ac, tx_pending,
|
||||
- tx_airtime))
|
||||
- atomic_cmpxchg(&local->aql_total_pending_airtime,
|
||||
+ tx_airtime)) {
|
||||
+ atomic_cmpxchg(&local->aql_ac_pending_airtime[ac],
|
||||
tx_pending, 0);
|
||||
+ atomic_sub(tx_pending, &local->aql_total_pending_airtime);
|
||||
+ }
|
||||
}
|
||||
|
||||
int sta_info_move_state(struct sta_info *sta,
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -3863,6 +3863,9 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
|
||||
spin_lock_bh(&local->active_txq_lock[ac]);
|
||||
|
||||
+ if (!local->schedule_round[ac])
|
||||
+ goto out;
|
||||
+
|
||||
begin:
|
||||
txqi = list_first_entry_or_null(&local->active_txqs[ac],
|
||||
struct txq_info,
|
||||
@@ -3984,6 +3987,25 @@ bool ieee80211_txq_airtime_check(struct
|
||||
}
|
||||
EXPORT_SYMBOL(ieee80211_txq_airtime_check);
|
||||
|
||||
+static bool
|
||||
+ieee80211_txq_schedule_airtime_check(struct ieee80211_local *local, u8 ac)
|
||||
+{
|
||||
+ unsigned int num_txq = 0;
|
||||
+ struct txq_info *txq;
|
||||
+ u32 aql_limit;
|
||||
+
|
||||
+ if (!wiphy_ext_feature_isset(local->hw.wiphy, NL80211_EXT_FEATURE_AQL))
|
||||
+ return true;
|
||||
+
|
||||
+ list_for_each_entry(txq, &local->active_txqs[ac], schedule_order)
|
||||
+ num_txq++;
|
||||
+
|
||||
+ aql_limit = (num_txq - 1) * local->aql_txq_limit_low[ac] / 2 +
|
||||
+ local->aql_txq_limit_high[ac];
|
||||
+
|
||||
+ return atomic_read(&local->aql_ac_pending_airtime[ac]) < aql_limit;
|
||||
+}
|
||||
+
|
||||
bool ieee80211_txq_may_transmit(struct ieee80211_hw *hw,
|
||||
struct ieee80211_txq *txq)
|
||||
{
|
||||
@@ -4000,6 +4022,9 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
if (list_empty(&txqi->schedule_order))
|
||||
goto out;
|
||||
|
||||
+ if (!ieee80211_txq_schedule_airtime_check(local, ac))
|
||||
+ goto out;
|
||||
+
|
||||
list_for_each_entry_safe(iter, tmp, &local->active_txqs[ac],
|
||||
schedule_order) {
|
||||
if (iter == txqi)
|
||||
@@ -4039,7 +4064,15 @@ void ieee80211_txq_schedule_start(struct
|
||||
struct ieee80211_local *local = hw_to_local(hw);
|
||||
|
||||
spin_lock_bh(&local->active_txq_lock[ac]);
|
||||
- local->schedule_round[ac]++;
|
||||
+
|
||||
+ if (ieee80211_txq_schedule_airtime_check(local, ac)) {
|
||||
+ local->schedule_round[ac]++;
|
||||
+ if (!local->schedule_round[ac])
|
||||
+ local->schedule_round[ac]++;
|
||||
+ } else {
|
||||
+ local->schedule_round[ac] = 0;
|
||||
+ }
|
||||
+
|
||||
spin_unlock_bh(&local->active_txq_lock[ac]);
|
||||
}
|
||||
EXPORT_SYMBOL(ieee80211_txq_schedule_start);
|
||||
@@ -0,0 +1,58 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Sat, 25 Jun 2022 21:25:40 +0200
|
||||
Subject: [PATCH] mac80211: add debugfs file to display per-phy AQL pending
|
||||
airtime
|
||||
|
||||
Now that the global pending airtime is more relevant for airtime fairness,
|
||||
it makes sense to make it accessible via debugfs for debugging
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/debugfs.c
|
||||
+++ b/net/mac80211/debugfs.c
|
||||
@@ -201,6 +201,36 @@ static const struct file_operations airt
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
+static ssize_t aql_pending_read(struct file *file,
|
||||
+ char __user *user_buf,
|
||||
+ size_t count, loff_t *ppos)
|
||||
+{
|
||||
+ struct ieee80211_local *local = file->private_data;
|
||||
+ char buf[400];
|
||||
+ int len = 0;
|
||||
+
|
||||
+ len = scnprintf(buf, sizeof(buf),
|
||||
+ "AC AQL pending\n"
|
||||
+ "VO %u us\n"
|
||||
+ "VI %u us\n"
|
||||
+ "BE %u us\n"
|
||||
+ "BK %u us\n"
|
||||
+ "total %u us\n",
|
||||
+ atomic_read(&local->aql_ac_pending_airtime[IEEE80211_AC_VO]),
|
||||
+ atomic_read(&local->aql_ac_pending_airtime[IEEE80211_AC_VI]),
|
||||
+ atomic_read(&local->aql_ac_pending_airtime[IEEE80211_AC_BE]),
|
||||
+ atomic_read(&local->aql_ac_pending_airtime[IEEE80211_AC_BK]),
|
||||
+ atomic_read(&local->aql_total_pending_airtime));
|
||||
+ return simple_read_from_buffer(user_buf, count, ppos,
|
||||
+ buf, len);
|
||||
+}
|
||||
+
|
||||
+static const struct file_operations aql_pending_ops = {
|
||||
+ .read = aql_pending_read,
|
||||
+ .open = simple_open,
|
||||
+ .llseek = default_llseek,
|
||||
+};
|
||||
+
|
||||
static ssize_t aql_txq_limit_read(struct file *file,
|
||||
char __user *user_buf,
|
||||
size_t count,
|
||||
@@ -628,6 +658,7 @@ void debugfs_hw_add(struct ieee80211_loc
|
||||
DEBUGFS_ADD(hw_conf);
|
||||
DEBUGFS_ADD_MODE(force_tx_status, 0600);
|
||||
DEBUGFS_ADD_MODE(aql_enable, 0600);
|
||||
+ DEBUGFS_ADD(aql_pending);
|
||||
|
||||
if (local->ops->wake_tx_queue)
|
||||
DEBUGFS_ADD_MODE(aqm, 0600);
|
||||
@@ -0,0 +1,36 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Sat, 25 Jun 2022 23:10:19 +0200
|
||||
Subject: [PATCH] mac80211: only accumulate airtime deficit for active
|
||||
clients
|
||||
|
||||
When a client does not generate any local tx activity, accumulating airtime
|
||||
deficit for the round-robin scheduler can be harmful. If this goes on for too
|
||||
long, the deficit could grow quite large, which might cause unreasonable
|
||||
initial latency once the client becomes active
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/sta_info.c
|
||||
+++ b/net/mac80211/sta_info.c
|
||||
@@ -1900,6 +1900,7 @@ void ieee80211_sta_register_airtime(stru
|
||||
struct ieee80211_local *local = sta->sdata->local;
|
||||
u8 ac = ieee80211_ac_from_tid(tid);
|
||||
u32 airtime = 0;
|
||||
+ u32 diff;
|
||||
|
||||
if (sta->local->airtime_flags & AIRTIME_USE_TX)
|
||||
airtime += tx_airtime;
|
||||
@@ -1909,7 +1910,11 @@ void ieee80211_sta_register_airtime(stru
|
||||
spin_lock_bh(&local->active_txq_lock[ac]);
|
||||
sta->airtime[ac].tx_airtime += tx_airtime;
|
||||
sta->airtime[ac].rx_airtime += rx_airtime;
|
||||
- sta->airtime[ac].deficit -= airtime;
|
||||
+
|
||||
+ diff = (u32)jiffies - sta->airtime[ac].last_active;
|
||||
+ if (diff <= AIRTIME_ACTIVE_DURATION)
|
||||
+ sta->airtime[ac].deficit -= airtime;
|
||||
+
|
||||
spin_unlock_bh(&local->active_txq_lock[ac]);
|
||||
}
|
||||
EXPORT_SYMBOL(ieee80211_sta_register_airtime);
|
||||
@@ -0,0 +1,53 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Sun, 26 Jun 2022 11:43:25 +0200
|
||||
Subject: [PATCH] mac80211: increase quantum for airtime scheduler
|
||||
|
||||
Given the typical AQL budget and queue length, a quantum of 256 with the
|
||||
default station weight often requires iterating over all queues frequently,
|
||||
until one of them becomes eligible.
|
||||
Improve performance by using 8 times station weight as scheduler quantum
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -90,6 +90,8 @@ extern const u8 ieee80211_ac_to_qos_mask
|
||||
*/
|
||||
#define AIRTIME_ACTIVE_DURATION (HZ / 10)
|
||||
|
||||
+#define AIRTIME_QUANTUM_SHIFT 3
|
||||
+
|
||||
struct ieee80211_bss {
|
||||
u32 device_ts_beacon, device_ts_presp;
|
||||
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -3894,7 +3894,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
|
||||
if (deficit < 0)
|
||||
sta->airtime[txqi->txq.ac].deficit +=
|
||||
- sta->airtime_weight;
|
||||
+ sta->airtime_weight << AIRTIME_QUANTUM_SHIFT;
|
||||
|
||||
if (deficit < 0 || !aql_check) {
|
||||
list_move_tail(&txqi->schedule_order,
|
||||
@@ -4037,7 +4037,8 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
}
|
||||
sta = container_of(iter->txq.sta, struct sta_info, sta);
|
||||
if (ieee80211_sta_deficit(sta, ac) < 0)
|
||||
- sta->airtime[ac].deficit += sta->airtime_weight;
|
||||
+ sta->airtime[ac].deficit += sta->airtime_weight <<
|
||||
+ AIRTIME_QUANTUM_SHIFT;
|
||||
list_move_tail(&iter->schedule_order, &local->active_txqs[ac]);
|
||||
}
|
||||
|
||||
@@ -4045,7 +4046,7 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
if (sta->airtime[ac].deficit >= 0)
|
||||
goto out;
|
||||
|
||||
- sta->airtime[ac].deficit += sta->airtime_weight;
|
||||
+ sta->airtime[ac].deficit += sta->airtime_weight << AIRTIME_QUANTUM_SHIFT;
|
||||
list_move_tail(&txqi->schedule_order, &local->active_txqs[ac]);
|
||||
spin_unlock_bh(&local->active_txq_lock[ac]);
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Sat, 2 Jul 2022 16:41:32 +0200
|
||||
Subject: [PATCH] mac80211: fix queue selection for mesh/OCB interfaces
|
||||
|
||||
When using iTXQ, the code assumes that there is only one vif queue for
|
||||
broadcast packets, using the BE queue. Allowing non-BE queue marking
|
||||
violates that assumption and txq->ac == skb_queue_mapping is no longer
|
||||
guaranteed. This can cause issues with queue handling in the driver and
|
||||
also causes issues with the recent ATF change, resulting in an AQL
|
||||
underflow warning.
|
||||
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/wme.c
|
||||
+++ b/net/mac80211/wme.c
|
||||
@@ -147,8 +147,8 @@ u16 __ieee80211_select_queue(struct ieee
|
||||
bool qos;
|
||||
|
||||
/* all mesh/ocb stations are required to support WME */
|
||||
- if (sdata->vif.type == NL80211_IFTYPE_MESH_POINT ||
|
||||
- sdata->vif.type == NL80211_IFTYPE_OCB)
|
||||
+ if (sta && (sdata->vif.type == NL80211_IFTYPE_MESH_POINT ||
|
||||
+ sdata->vif.type == NL80211_IFTYPE_OCB))
|
||||
qos = true;
|
||||
else if (sta)
|
||||
qos = sta->sta.wme;
|
||||
@@ -57,7 +57,7 @@
|
||||
__NL80211_ATTR_AFTER_LAST,
|
||||
--- a/net/mac80211/cfg.c
|
||||
+++ b/net/mac80211/cfg.c
|
||||
@@ -2845,6 +2845,19 @@ static int ieee80211_get_tx_power(struct
|
||||
@@ -2812,6 +2812,19 @@ static int ieee80211_get_tx_power(struct
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
static void ieee80211_rfkill_poll(struct wiphy *wiphy)
|
||||
{
|
||||
struct ieee80211_local *local = wiphy_priv(wiphy);
|
||||
@@ -4549,6 +4562,7 @@ const struct cfg80211_ops mac80211_confi
|
||||
@@ -4516,6 +4529,7 @@ const struct cfg80211_ops mac80211_confi
|
||||
.set_wiphy_params = ieee80211_set_wiphy_params,
|
||||
.set_tx_power = ieee80211_set_tx_power,
|
||||
.get_tx_power = ieee80211_get_tx_power,
|
||||
@@ -87,7 +87,7 @@
|
||||
CFG80211_TESTMODE_DUMP(ieee80211_testmode_dump)
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -1464,6 +1464,7 @@ struct ieee80211_local {
|
||||
@@ -1443,6 +1443,7 @@ struct ieee80211_local {
|
||||
int dynamic_ps_forced_timeout;
|
||||
|
||||
int user_power_level; /* in dBm, for all interfaces */
|
||||
|
||||
@@ -8,9 +8,9 @@ PKG_LICENSE_FILES:=
|
||||
|
||||
PKG_SOURCE_URL:=https://github.com/openwrt/mt76
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_DATE:=2022-03-15
|
||||
PKG_SOURCE_VERSION:=053668acdaf83d0350ce3e21720e20eac9fbbcd7
|
||||
PKG_MIRROR_HASH:=0102bc20ec385fcdb336dec97a1a345d4c37c2c6be2f3f428938c2ec1fa5d49a
|
||||
PKG_SOURCE_DATE:=2022-07-03
|
||||
PKG_SOURCE_VERSION:=93e3fce916c62d06892d41bf00d0f4c2926c9a0b
|
||||
PKG_MIRROR_HASH:=ad966e7aa81301f0601ceb7aae2ecb471c452f5d8366f701add807152fd08971
|
||||
|
||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||
PKG_USE_NINJA:=0
|
||||
|
||||
@@ -56,7 +56,7 @@ endef
|
||||
|
||||
define Package/libusb-1.0/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libusb-1.0.so.* $(1)/usr/lib/
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libusb-1.0.so* $(1)/usr/lib/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,libusb-1.0))
|
||||
|
||||
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=openssl
|
||||
PKG_BASE:=1.1.1
|
||||
PKG_BUGFIX:=o
|
||||
PKG_BUGFIX:=p
|
||||
PKG_VERSION:=$(PKG_BASE)$(PKG_BUGFIX)
|
||||
PKG_RELEASE:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
@@ -25,7 +25,7 @@ PKG_SOURCE_URL:= \
|
||||
ftp://ftp.pca.dfn.de/pub/tools/net/openssl/source/ \
|
||||
ftp://ftp.pca.dfn.de/pub/tools/net/openssl/source/old/$(PKG_BASE)/
|
||||
|
||||
PKG_HASH:=9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f
|
||||
PKG_HASH:=bf61b62aaa66c7c7639942a94de4c9ae8280c08f17d4eac2e44644d9fc8ace6f
|
||||
|
||||
PKG_LICENSE:=OpenSSL
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
@@ -68,7 +68,7 @@ config WOLFSSL_ASM_CAPABLE
|
||||
|
||||
choice
|
||||
prompt "Hardware Acceleration"
|
||||
default WOLFSSL_HAS_CPU_CRYPTO if WOLFSSL_ASM_CAPABLE
|
||||
default WOLFSSL_HAS_CPU_CRYPTO if WOLFSSL_ASM_CAPABLE && !x86_64
|
||||
default WOLFSSL_HAS_NO_HW
|
||||
|
||||
config WOLFSSL_HAS_NO_HW
|
||||
@@ -80,6 +80,7 @@ choice
|
||||
help
|
||||
This will use Intel AESNI insturctions or armv8 Crypto Extensions.
|
||||
Either of them should easily outperform hardware crypto in WolfSSL.
|
||||
Beware that for Intel, the CPU has to support SSE4 instructions.
|
||||
|
||||
config WOLFSSL_HAS_AFALG
|
||||
bool "AF_ALG"
|
||||
@@ -96,5 +97,9 @@ choice
|
||||
bool "/dev/crypto - full"
|
||||
select WOLFSSL_HAS_DEVCRYPTO
|
||||
endchoice
|
||||
if x86_64 && WOLFSSL_HAS_CPU_CRYPTO
|
||||
comment "WARNING: make sure your CPU supports SSE4 instructions"
|
||||
comment "WolfSSL may crash with an invalid opcode exception"
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
@@ -9,9 +9,9 @@ PKG_RELEASE:=$(AUTORELEASE)
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/firewall4.git
|
||||
PKG_SOURCE_DATE:=2022-05-31
|
||||
PKG_SOURCE_VERSION:=210991df51587bdb736b4fc74b1200ec6cf6ecc7
|
||||
PKG_MIRROR_HASH:=486c3fdf7201db8ae51dee7ffac1e80e7b652b27eca9a8174e0fc6f286a457fa
|
||||
PKG_SOURCE_DATE:=2022-06-17
|
||||
PKG_SOURCE_VERSION:=15c38317eff2bdef963cc3032512ce6cf191dadb
|
||||
PKG_MIRROR_HASH:=cff2beca5ef6c337ce8f0e93466509071dc8c614216b974c4adf4848d67f52e0
|
||||
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
|
||||
PKG_LICENSE:=ISC
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=464xlat
|
||||
PKG_RELEASE:=12
|
||||
PKG_RELEASE:=13
|
||||
|
||||
PKG_SOURCE_DATE:=2018-01-16
|
||||
PKG_MAINTAINER:=Hans Dedecker <dedeckeh@gmail.com>
|
||||
|
||||
@@ -98,6 +98,9 @@ proto_464xlat_teardown() {
|
||||
ip -6 rule del from all lookup local
|
||||
ip -6 rule add from all lookup local pref 0
|
||||
fi
|
||||
|
||||
# Kill conntracks SNATed to 192.0.0.1
|
||||
echo 192.0.0.1 > /proc/net/nf_conntrack
|
||||
}
|
||||
|
||||
proto_464xlat_init_config() {
|
||||
|
||||
@@ -0,0 +1,134 @@
|
||||
From: Matt Johnston <matt@ucc.asn.au>
|
||||
Date: Wed, 8 Jun 2022 21:26:20 +0800
|
||||
Subject: Fix MAX_UNAUTH_CLIENTS regression
|
||||
|
||||
Since re-exec change in 2022.82 Dropbear count
|
||||
treat authenticated sessions towards the unauthenticated
|
||||
session limit. This is fixed by passing the childpipe FD
|
||||
through to the re-execed process.
|
||||
---
|
||||
runopts.h | 5 +++--
|
||||
svr-main.c | 21 +++++++++++----------
|
||||
svr-runopts.c | 15 ++++++++++++---
|
||||
3 files changed, 26 insertions(+), 15 deletions(-)
|
||||
|
||||
--- a/runopts.h
|
||||
+++ b/runopts.h
|
||||
@@ -79,8 +79,9 @@ typedef struct svr_runopts {
|
||||
char *addresses[DROPBEAR_MAX_PORTS];
|
||||
|
||||
int inetdmode;
|
||||
- /* Hidden "-2" flag indicates it's re-executing itself */
|
||||
- int reexec_child;
|
||||
+ /* Hidden "-2 childpipe_fd" flag indicates it's re-executing itself,
|
||||
+ stores the childpipe preauth file descriptor. Set to -1 otherwise. */
|
||||
+ int reexec_childpipe;
|
||||
|
||||
/* Flags indicating whether to use ipv4 and ipv6 */
|
||||
/* not used yet
|
||||
--- a/svr-main.c
|
||||
+++ b/svr-main.c
|
||||
@@ -71,7 +71,7 @@ int main(int argc, char ** argv)
|
||||
#endif
|
||||
|
||||
#if DROPBEAR_DO_REEXEC
|
||||
- if (svr_opts.reexec_child) {
|
||||
+ if (svr_opts.reexec_childpipe >= 0) {
|
||||
#ifdef PR_SET_NAME
|
||||
/* Fix the "Name:" in /proc/pid/status, otherwise it's
|
||||
a FD number from fexecve.
|
||||
@@ -102,7 +102,7 @@ static void main_inetd() {
|
||||
|
||||
seedrandom();
|
||||
|
||||
- if (!svr_opts.reexec_child) {
|
||||
+ if (svr_opts.reexec_childpipe < 0) {
|
||||
/* In case our inetd was lax in logging source addresses */
|
||||
get_socket_address(0, NULL, NULL, &host, &port, 0);
|
||||
dropbear_log(LOG_INFO, "Child connection from %s:%s", host, port);
|
||||
@@ -115,10 +115,8 @@ static void main_inetd() {
|
||||
setsid();
|
||||
}
|
||||
|
||||
- /* Start service program
|
||||
- * -1 is a dummy childpipe, just something we can close() without
|
||||
- * mattering. */
|
||||
- svr_session(0, -1);
|
||||
+ /* -1 for childpipe in the inetd case is discarded */
|
||||
+ svr_session(0, svr_opts.reexec_childpipe);
|
||||
|
||||
/* notreached */
|
||||
}
|
||||
@@ -347,9 +345,10 @@ static void main_noinetd(int argc, char
|
||||
|
||||
if (execfd >= 0) {
|
||||
#if DROPBEAR_DO_REEXEC
|
||||
- /* Add "-2" to the args and re-execute ourself. */
|
||||
- char **new_argv = m_malloc(sizeof(char*) * (argc+3));
|
||||
- int pos0 = 0, new_argc = argc+1;
|
||||
+ /* Add "-2 childpipe[1]" to the args and re-execute ourself. */
|
||||
+ char **new_argv = m_malloc(sizeof(char*) * (argc+4));
|
||||
+ char buf[10];
|
||||
+ int pos0 = 0, new_argc = argc+2;
|
||||
|
||||
/* We need to specially handle "dropbearmulti dropbear". */
|
||||
if (multipath) {
|
||||
@@ -359,7 +358,9 @@ static void main_noinetd(int argc, char
|
||||
}
|
||||
|
||||
memcpy(&new_argv[pos0], argv, sizeof(char*) * argc);
|
||||
- new_argv[new_argc-1] = "-2";
|
||||
+ new_argv[new_argc-2] = "-2";
|
||||
+ snprintf(buf, sizeof(buf), "%d", childpipe[1]);
|
||||
+ new_argv[new_argc-1] = buf;
|
||||
new_argv[new_argc] = NULL;
|
||||
|
||||
if ((dup2(childsock, STDIN_FILENO) < 0)) {
|
||||
--- a/svr-runopts.c
|
||||
+++ b/svr-runopts.c
|
||||
@@ -138,6 +138,7 @@ void svr_getopts(int argc, char ** argv)
|
||||
char* keepalive_arg = NULL;
|
||||
char* idle_timeout_arg = NULL;
|
||||
char* maxauthtries_arg = NULL;
|
||||
+ char* reexec_fd_arg = NULL;
|
||||
char* keyfile = NULL;
|
||||
char c;
|
||||
#if DROPBEAR_PLUGIN
|
||||
@@ -175,6 +176,7 @@ void svr_getopts(int argc, char ** argv)
|
||||
svr_opts.pubkey_plugin_options = NULL;
|
||||
#endif
|
||||
svr_opts.pass_on_env = 0;
|
||||
+ svr_opts.reexec_childpipe = -1;
|
||||
|
||||
#ifndef DISABLE_ZLIB
|
||||
opts.compress_mode = DROPBEAR_COMPRESS_DELAYED;
|
||||
@@ -250,12 +252,12 @@ void svr_getopts(int argc, char ** argv)
|
||||
#if DROPBEAR_DO_REEXEC && NON_INETD_MODE
|
||||
/* For internal use by re-exec */
|
||||
case '2':
|
||||
- svr_opts.reexec_child = 1;
|
||||
+ next = &reexec_fd_arg;
|
||||
break;
|
||||
#endif
|
||||
case 'p':
|
||||
- nextisport = 1;
|
||||
- break;
|
||||
+ nextisport = 1;
|
||||
+ break;
|
||||
case 'P':
|
||||
next = &svr_opts.pidfile;
|
||||
break;
|
||||
@@ -426,6 +428,13 @@ void svr_getopts(int argc, char ** argv)
|
||||
dropbear_log(LOG_INFO, "Forced command set to '%s'", svr_opts.forced_command);
|
||||
}
|
||||
|
||||
+ if (reexec_fd_arg) {
|
||||
+ if (m_str_to_uint(reexec_fd_arg, &svr_opts.reexec_childpipe) == DROPBEAR_FAILURE
|
||||
+ || svr_opts.reexec_childpipe < 0) {
|
||||
+ dropbear_exit("Bad -2");
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
#if INETD_MODE
|
||||
if (svr_opts.inetdmode && (
|
||||
opts.usingsyslog == 0
|
||||
@@ -335,6 +335,7 @@ hostapd_common_add_bss_config() {
|
||||
config_add_int sae_pwe
|
||||
|
||||
config_add_string 'owe_transition_bssid:macaddr' 'owe_transition_ssid:string'
|
||||
config_add_string owe_transition_ifname
|
||||
|
||||
config_add_boolean iw_enabled iw_internet iw_asra iw_esr iw_uesa
|
||||
config_add_int iw_access_network_type iw_venue_group iw_venue_type
|
||||
@@ -635,10 +636,11 @@ hostapd_set_bss_options() {
|
||||
|
||||
case "$auth_type" in
|
||||
none|owe)
|
||||
json_get_vars owe_transition_bssid owe_transition_ssid
|
||||
json_get_vars owe_transition_bssid owe_transition_ssid owe_transition_ifname
|
||||
|
||||
[ -n "$owe_transition_ssid" ] && append bss_conf "owe_transition_ssid=\"$owe_transition_ssid\"" "$N"
|
||||
[ -n "$owe_transition_bssid" ] && append bss_conf "owe_transition_bssid=$owe_transition_bssid" "$N"
|
||||
[ -n "$owe_transition_ifname" ] && append bss_conf "owe_transition_ifname=$owe_transition_ifname" "$N"
|
||||
|
||||
wps_possible=1
|
||||
# Here we make the assumption that if we're in open mode
|
||||
|
||||
@@ -10,7 +10,7 @@ include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=iptables
|
||||
PKG_VERSION:=1.8.7
|
||||
PKG_RELEASE:=6
|
||||
PKG_RELEASE:=7
|
||||
|
||||
PKG_SOURCE_URL:=https://netfilter.org/projects/iptables/files
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
|
||||
@@ -50,18 +50,18 @@ $(call Package/iptables/Default)
|
||||
DEPENDS+= +kmod-ipt-core +libip4tc +IPV6:libip6tc +libiptext +IPV6:libiptext6 +libxtables
|
||||
endef
|
||||
|
||||
define Package/iptables-legacy
|
||||
define Package/iptables-zz-legacy
|
||||
$(call Package/iptables/Default)
|
||||
TITLE:=IP firewall administration tool
|
||||
DEPENDS+= +xtables-legacy
|
||||
PROVIDES:=iptables
|
||||
PROVIDES:=iptables iptables-legacy
|
||||
ALTERNATIVES:=\
|
||||
200:/usr/sbin/iptables:/usr/sbin/xtables-legacy-multi \
|
||||
200:/usr/sbin/iptables-restore:/usr/sbin/xtables-legacy-multi \
|
||||
200:/usr/sbin/iptables-save:/usr/sbin/xtables-legacy-multi
|
||||
endef
|
||||
|
||||
define Package/iptables-legacy/description
|
||||
define Package/iptables-zz-legacy/description
|
||||
IP firewall administration tool.
|
||||
|
||||
Matches:
|
||||
@@ -104,7 +104,7 @@ endef
|
||||
define Package/xtables-nft
|
||||
$(call Package/iptables/Default)
|
||||
TITLE:=IP firewall administration tool nft
|
||||
DEPENDS:=@IPTABLES_NFTABLES +libnftnl +libiptext +IPV6:libiptext6 +libiptext-nft +kmod-nft-compat
|
||||
DEPENDS:=+libnftnl +libiptext +IPV6:libiptext6 +libiptext-nft +kmod-nft-compat
|
||||
endef
|
||||
|
||||
define Package/arptables-nft
|
||||
@@ -483,12 +483,12 @@ define Package/iptables-mod-checksum/description
|
||||
iptables extension for the CHECKSUM calculation target
|
||||
endef
|
||||
|
||||
define Package/ip6tables-legacy
|
||||
define Package/ip6tables-zz-legacy
|
||||
$(call Package/iptables/Default)
|
||||
DEPENDS:=@IPV6 +kmod-ip6tables +xtables-legacy
|
||||
CATEGORY:=Network
|
||||
TITLE:=IPv6 firewall administration tool
|
||||
PROVIDES:=ip6tables
|
||||
PROVIDES:=ip6tables ip6tables-legacy
|
||||
ALTERNATIVES:=\
|
||||
200:/usr/sbin/ip6tables:/usr/sbin/xtables-legacy-multi \
|
||||
200:/usr/sbin/ip6tables-restore:/usr/sbin/xtables-legacy-multi \
|
||||
@@ -575,7 +575,7 @@ define Package/libiptext-nft
|
||||
CATEGORY:=Libraries
|
||||
TITLE:=IPv4/IPv6 firewall - shared libiptext nft library
|
||||
ABI_VERSION:=0
|
||||
DEPENDS:=@IPTABLES_NFTABLES +libxtables
|
||||
DEPENDS:=+libxtables
|
||||
endef
|
||||
|
||||
define Package/libxtables
|
||||
@@ -594,12 +594,6 @@ define Package/libxtables/config
|
||||
default n
|
||||
help
|
||||
This enable connlabel support in iptables.
|
||||
|
||||
config IPTABLES_NFTABLES
|
||||
bool "Enable Nftables support"
|
||||
default y
|
||||
help
|
||||
This enable nftables support in iptables.
|
||||
endef
|
||||
|
||||
TARGET_CPPFLAGS := \
|
||||
@@ -624,7 +618,6 @@ CONFIGURE_ARGS += \
|
||||
--with-xtlibdir=/usr/lib/iptables \
|
||||
--with-xt-lock-name=/var/run/xtables.lock \
|
||||
$(if $(CONFIG_IPTABLES_CONNLABEL),,--disable-connlabel) \
|
||||
$(if $(CONFIG_IPTABLES_NFTABLES),,--disable-nftables) \
|
||||
$(if $(CONFIG_IPV6),,--disable-ipv6)
|
||||
|
||||
MAKE_FLAGS := \
|
||||
@@ -677,7 +670,7 @@ define Package/xtables-legacy/install
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/sbin/xtables-legacy-multi $(1)/usr/sbin/
|
||||
endef
|
||||
|
||||
define Package/iptables-legacy/install
|
||||
define Package/iptables-zz-legacy/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/sbin/iptables-legacy{,-restore,-save} $(1)/usr/sbin/
|
||||
$(INSTALL_DIR) $(1)/usr/lib/iptables
|
||||
@@ -708,7 +701,7 @@ define Package/iptables-nft/install
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/sbin/iptables{,-restore}-translate $(1)/usr/sbin/
|
||||
endef
|
||||
|
||||
define Package/ip6tables-legacy/install
|
||||
define Package/ip6tables-zz-legacy/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/sbin/ip6tables-legacy{,-restore,-save} $(1)/usr/sbin/
|
||||
endef
|
||||
@@ -771,7 +764,7 @@ $(eval $(call BuildPackage,libiptext))
|
||||
$(eval $(call BuildPackage,libiptext6))
|
||||
$(eval $(call BuildPackage,libiptext-nft))
|
||||
$(eval $(call BuildPackage,xtables-legacy))
|
||||
$(eval $(call BuildPackage,iptables-legacy))
|
||||
$(eval $(call BuildPackage,iptables-zz-legacy))
|
||||
$(eval $(call BuildPackage,xtables-nft))
|
||||
$(eval $(call BuildPackage,arptables-nft))
|
||||
$(eval $(call BuildPackage,ebtables-nft))
|
||||
@@ -799,7 +792,7 @@ $(eval $(call BuildPlugin,iptables-mod-nflog,$(IPT_NFLOG-m)))
|
||||
$(eval $(call BuildPlugin,iptables-mod-trace,$(IPT_DEBUG-m)))
|
||||
$(eval $(call BuildPlugin,iptables-mod-nfqueue,$(IPT_NFQUEUE-m)))
|
||||
$(eval $(call BuildPlugin,iptables-mod-checksum,$(IPT_CHECKSUM-m)))
|
||||
$(eval $(call BuildPackage,ip6tables-legacy))
|
||||
$(eval $(call BuildPackage,ip6tables-zz-legacy))
|
||||
$(eval $(call BuildPackage,ip6tables-nft))
|
||||
$(eval $(call BuildPlugin,ip6tables-extra,$(IPT_IPV6_EXTRA-m)))
|
||||
$(eval $(call BuildPlugin,ip6tables-mod-nat,$(IPT_NAT6-m)))
|
||||
|
||||
@@ -30,10 +30,10 @@ netgear,wndap620)
|
||||
|
||||
netgear,wndap660)
|
||||
ucidef_set_led_netdev "lan_act" "LAN (Activity)" "green:activity" "eth0"
|
||||
ucidef_set_led_switch "lan1_100" "LAN 100Mbps" "amber:lan-0" "switch0" "0x04" "0x04" "link"
|
||||
ucidef_set_led_switch "lan1_1000" "LAN 1000Mbps" "green:lan-0" "switch0" "0x04" "0x08" "link"
|
||||
ucidef_set_led_switch "lan2_100" "LAN 100Mbps" "amber:lan-1" "switch0" "0x02" "0x04" "link"
|
||||
ucidef_set_led_switch "lan2_1000" "LAN 1000Mbps" "green:lan-1" "switch0" "0x02" "0x08" "link"
|
||||
ucidef_set_led_switch "lan1_100" "LAN 100Mbps" "amber:lan-1" "switch0" "0x02" "0x04" "link"
|
||||
ucidef_set_led_switch "lan1_1000" "LAN 1000Mbps" "green:lan-1" "switch0" "0x02" "0x08" "link"
|
||||
ucidef_set_led_switch "lan2_100" "LAN 100Mbps" "amber:lan-2" "switch0" "0x04" "0x04" "link"
|
||||
ucidef_set_led_switch "lan2_1000" "LAN 1000Mbps" "green:lan-2" "switch0" "0x04" "0x08" "link"
|
||||
ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wlan-0" "phy0tpt"
|
||||
ucidef_set_led_wlan "wlan5g" "WLAN5G" "green:wlan-1" "phy1tpt"
|
||||
;;
|
||||
|
||||
@@ -16,7 +16,7 @@ netgear,wndap620)
|
||||
ucidef_add_switch "switch0" "2:lan" "5@eth0"
|
||||
;;
|
||||
netgear,wndap660)
|
||||
ucidef_add_switch "switch0" "1:lan:2" "2:lan:1" "5@eth0"
|
||||
ucidef_add_switch "switch0" "1:lan" "2:lan" "5@eth0"
|
||||
;;
|
||||
meraki,mx60|\
|
||||
netgear,wndr4700)
|
||||
|
||||
@@ -32,9 +32,9 @@ netgear,wndap660)
|
||||
":test=:fault" \
|
||||
":wlan2g=:wlan-0" \
|
||||
":wlan5g=:wlan-1" \
|
||||
":lan1-link100=:lan-0" \
|
||||
":lan1-link100=:lan-1" \
|
||||
":lan1-link1000=:lan-1" \
|
||||
":lan2-link100=:lan-1" \
|
||||
":lan2-link100=:lan-2" \
|
||||
":lan2-link1000=:lan-2"
|
||||
;;
|
||||
netgear,wndr4700)
|
||||
|
||||
@@ -39,10 +39,12 @@ CONFIG_CPU_BIG_ENDIAN=y
|
||||
CONFIG_CRC16=y
|
||||
# CONFIG_CRC32_SARWATE is not set
|
||||
CONFIG_CRC32_SLICEBY8=y
|
||||
CONFIG_CRYPTO_BLAKE2S=y
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
CONFIG_CRYPTO_DEV_PPC4XX=y
|
||||
CONFIG_CRYPTO_HW=y
|
||||
CONFIG_CRYPTO_JITTERENTROPY=y
|
||||
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
|
||||
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1
|
||||
CONFIG_CRYPTO_LIB_SHA256=y
|
||||
CONFIG_CRYPTO_LZO=y
|
||||
|
||||
@@ -14,28 +14,28 @@
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
function = LED_FUNCTION_LAN;
|
||||
function-enumerator = <1>;
|
||||
gpios = <&GPIO0 22 GPIO_ACTIVE_HIGH>;
|
||||
gpios = <&GPIO0 9 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
led-6 {
|
||||
color = <LED_COLOR_ID_AMBER>;
|
||||
function = LED_FUNCTION_LAN;
|
||||
function-enumerator = <0>;
|
||||
gpios = <&GPIO0 23 GPIO_ACTIVE_HIGH>;
|
||||
function-enumerator = <1>;
|
||||
gpios = <&GPIO0 10 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
led-7 {
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
function = LED_FUNCTION_LAN;
|
||||
function-enumerator = <2>;
|
||||
gpios = <&GPIO0 9 GPIO_ACTIVE_HIGH>;
|
||||
gpios = <&GPIO0 22 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
led-8 {
|
||||
color = <LED_COLOR_ID_AMBER>;
|
||||
function = LED_FUNCTION_LAN;
|
||||
function-enumerator = <1>;
|
||||
gpios = <&GPIO0 10 GPIO_ACTIVE_HIGH>;
|
||||
function-enumerator = <2>;
|
||||
gpios = <&GPIO0 23 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ produce a noisy warning.
|
||||
|
||||
--- a/drivers/usb/host/xhci-pci.c
|
||||
+++ b/drivers/usb/host/xhci-pci.c
|
||||
@@ -281,6 +281,7 @@ static void xhci_pci_quirks(struct devic
|
||||
@@ -287,6 +287,7 @@ static void xhci_pci_quirks(struct devic
|
||||
pdev->device == 0x0015) {
|
||||
xhci->quirks |= XHCI_RESET_ON_RESUME;
|
||||
xhci->quirks |= XHCI_ZERO_64B_REGS;
|
||||
|
||||
@@ -71,6 +71,7 @@ CONFIG_COMMON_CLK=y
|
||||
CONFIG_COMPAT_32BIT_TIME=y
|
||||
CONFIG_CPU_RMAP=y
|
||||
CONFIG_CRC16=y
|
||||
CONFIG_CRYPTO_BLAKE2S=y
|
||||
CONFIG_CRYPTO_CRC32C=y
|
||||
CONFIG_CRYPTO_DRBG=y
|
||||
CONFIG_CRYPTO_DRBG_HMAC=y
|
||||
@@ -78,6 +79,7 @@ CONFIG_CRYPTO_DRBG_MENU=y
|
||||
CONFIG_CRYPTO_ECHAINIV=y
|
||||
CONFIG_CRYPTO_HMAC=y
|
||||
CONFIG_CRYPTO_JITTERENTROPY=y
|
||||
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
|
||||
CONFIG_CRYPTO_LIB_SHA256=y
|
||||
CONFIG_CRYPTO_NULL=y
|
||||
CONFIG_CRYPTO_RNG=y
|
||||
|
||||
@@ -39,6 +39,8 @@ CONFIG_CPU_SPECTRE=y
|
||||
CONFIG_CPU_THUMB_CAPABLE=y
|
||||
CONFIG_CPU_TLB_V7=y
|
||||
CONFIG_CPU_V7=y
|
||||
CONFIG_CRYPTO_BLAKE2S=y
|
||||
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
|
||||
CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
|
||||
CONFIG_DMA_OPS=y
|
||||
CONFIG_EDAC_ATOMIC_SCRUB=y
|
||||
|
||||
@@ -54,10 +54,12 @@ CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
|
||||
CONFIG_CRYPTO_AES_ARM64_CE_CCM=y
|
||||
CONFIG_CRYPTO_AES_ARM64_NEON_BLK=y
|
||||
CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA=y
|
||||
CONFIG_CRYPTO_BLAKE2S=y
|
||||
CONFIG_CRYPTO_CHACHA20=y
|
||||
CONFIG_CRYPTO_CHACHA20_NEON=y
|
||||
CONFIG_CRYPTO_CRYPTD=y
|
||||
CONFIG_CRYPTO_GHASH_ARM64_CE=y
|
||||
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
|
||||
CONFIG_CRYPTO_LIB_CHACHA_GENERIC=y
|
||||
CONFIG_CRYPTO_SHA1=y
|
||||
CONFIG_CRYPTO_SHA1_ARM64_CE=y
|
||||
|
||||
@@ -17,7 +17,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
|
||||
|
||||
--- a/sound/soc/codecs/Kconfig
|
||||
+++ b/sound/soc/codecs/Kconfig
|
||||
@@ -1008,7 +1008,7 @@ config SND_SOC_PCM3168A_SPI
|
||||
@@ -1007,7 +1007,7 @@ config SND_SOC_PCM3168A_SPI
|
||||
select REGMAP_SPI
|
||||
|
||||
config SND_SOC_PCM5102A
|
||||
|
||||
@@ -20,7 +20,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
|
||||
|
||||
--- a/drivers/regulator/core.c
|
||||
+++ b/drivers/regulator/core.c
|
||||
@@ -2984,7 +2984,8 @@ static int _regulator_list_voltage(struc
|
||||
@@ -2987,7 +2987,8 @@ static int _regulator_list_voltage(struc
|
||||
return rdev->desc->fixed_uV;
|
||||
|
||||
if (ops->list_voltage) {
|
||||
@@ -30,7 +30,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
|
||||
return -EINVAL;
|
||||
if (lock)
|
||||
regulator_lock(rdev);
|
||||
@@ -3135,7 +3136,8 @@ int regulator_list_hardware_vsel(struct
|
||||
@@ -3138,7 +3139,8 @@ int regulator_list_hardware_vsel(struct
|
||||
struct regulator_dev *rdev = regulator->rdev;
|
||||
const struct regulator_ops *ops = rdev->desc->ops;
|
||||
|
||||
@@ -40,7 +40,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
|
||||
return -EINVAL;
|
||||
if (ops->set_voltage_sel != regulator_set_voltage_sel_regmap)
|
||||
return -EOPNOTSUPP;
|
||||
@@ -4058,6 +4060,9 @@ int regulator_set_voltage_time(struct re
|
||||
@@ -4061,6 +4063,9 @@ int regulator_set_voltage_time(struct re
|
||||
|
||||
for (i = 0; i < rdev->desc->n_voltages; i++) {
|
||||
/* We only look for exact voltage matches here */
|
||||
|
||||
@@ -14,7 +14,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
|
||||
|
||||
--- a/drivers/regulator/core.c
|
||||
+++ b/drivers/regulator/core.c
|
||||
@@ -4063,6 +4063,9 @@ int regulator_set_voltage_time(struct re
|
||||
@@ -4066,6 +4066,9 @@ int regulator_set_voltage_time(struct re
|
||||
if (i < rdev->desc->linear_min_sel)
|
||||
continue;
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
|
||||
|
||||
--- a/drivers/regulator/core.c
|
||||
+++ b/drivers/regulator/core.c
|
||||
@@ -2984,9 +2984,10 @@ static int _regulator_list_voltage(struc
|
||||
@@ -2987,9 +2987,10 @@ static int _regulator_list_voltage(struc
|
||||
return rdev->desc->fixed_uV;
|
||||
|
||||
if (ops->list_voltage) {
|
||||
@@ -34,7 +34,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
|
||||
if (lock)
|
||||
regulator_lock(rdev);
|
||||
ret = ops->list_voltage(rdev, selector);
|
||||
@@ -3136,9 +3137,10 @@ int regulator_list_hardware_vsel(struct
|
||||
@@ -3139,9 +3140,10 @@ int regulator_list_hardware_vsel(struct
|
||||
struct regulator_dev *rdev = regulator->rdev;
|
||||
const struct regulator_ops *ops = rdev->desc->ops;
|
||||
|
||||
|
||||
@@ -75,9 +75,11 @@ CONFIG_CRC16=y
|
||||
CONFIG_CRC7=y
|
||||
CONFIG_CRC_CCITT=y
|
||||
CONFIG_CRC_ITU_T=y
|
||||
CONFIG_CRYPTO_BLAKE2S=y
|
||||
CONFIG_CRYPTO_CRC32C=y
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
CONFIG_CRYPTO_HASH_INFO=y
|
||||
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
|
||||
CONFIG_CRYPTO_LZO=y
|
||||
CONFIG_CRYPTO_RNG2=y
|
||||
CONFIG_CRYPTO_ZSTD=y
|
||||
|
||||
@@ -98,6 +98,7 @@ CONFIG_CRC16=y
|
||||
# CONFIG_CRC32_SARWATE is not set
|
||||
CONFIG_CRC32_SLICEBY8=y
|
||||
CONFIG_CROSS_MEMORY_ATTACH=y
|
||||
CONFIG_CRYPTO_BLAKE2S=y
|
||||
CONFIG_CRYPTO_CRC32C=y
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
CONFIG_CRYPTO_DRBG=y
|
||||
@@ -106,6 +107,7 @@ CONFIG_CRYPTO_DRBG_MENU=y
|
||||
CONFIG_CRYPTO_HASH_INFO=y
|
||||
CONFIG_CRYPTO_HMAC=y
|
||||
CONFIG_CRYPTO_JITTERENTROPY=y
|
||||
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
|
||||
CONFIG_CRYPTO_LIB_SHA256=y
|
||||
CONFIG_CRYPTO_LZO=y
|
||||
CONFIG_CRYPTO_RNG=y
|
||||
|
||||
@@ -98,6 +98,7 @@ CONFIG_CPU_V7=y
|
||||
CONFIG_CRC16=y
|
||||
CONFIG_CRC_CCITT=y
|
||||
CONFIG_CRC_ITU_T=y
|
||||
CONFIG_CRYPTO_BLAKE2S=y
|
||||
CONFIG_CRYPTO_CMAC=y
|
||||
CONFIG_CRYPTO_CRC32C=y
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
@@ -109,6 +110,7 @@ CONFIG_CRYPTO_ECC=y
|
||||
CONFIG_CRYPTO_ECDH=y
|
||||
CONFIG_CRYPTO_HMAC=y
|
||||
CONFIG_CRYPTO_JITTERENTROPY=y
|
||||
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
|
||||
CONFIG_CRYPTO_LIB_SHA256=y
|
||||
CONFIG_CRYPTO_LZO=y
|
||||
CONFIG_CRYPTO_RNG=y
|
||||
|
||||
@@ -26,6 +26,8 @@ CONFIG_CPU_NEEDS_NO_SMARTMIPS_OR_MICROMIPS=y
|
||||
CONFIG_CPU_R4K_CACHE_TLB=y
|
||||
CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
|
||||
CONFIG_CPU_SUPPORTS_HIGHMEM=y
|
||||
CONFIG_CRYPTO_BLAKE2S=y
|
||||
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
|
||||
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=2
|
||||
CONFIG_CRYPTO_RNG2=y
|
||||
CONFIG_CSRC_R4K=y
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
select SWCONFIG
|
||||
--- a/drivers/net/phy/Makefile
|
||||
+++ b/drivers/net/phy/Makefile
|
||||
@@ -31,6 +31,7 @@ ar8xxx-y += ar8216.o
|
||||
ar8xxx-y += ar8327.o
|
||||
@@ -29,6 +29,7 @@ obj-$(CONFIG_ADM6996_PHY) += adm6996.o
|
||||
obj-$(CONFIG_AR8216_PHY) += ar8216.o ar8327.o
|
||||
obj-$(CONFIG_SWCONFIG_B53) += b53/
|
||||
obj-$(CONFIG_IP17XX_PHY) += ip17xx.o
|
||||
+obj-$(CONFIG_MVSWITCH_PHY) += mvswitch.o
|
||||
|
||||
@@ -35,7 +35,9 @@ CONFIG_CPU_R4K_CACHE_TLB=y
|
||||
CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
|
||||
CONFIG_CPU_SUPPORTS_HIGHMEM=y
|
||||
CONFIG_CPU_SUPPORTS_MSA=y
|
||||
CONFIG_CRYPTO_BLAKE2S=y
|
||||
# CONFIG_CRYPTO_CHACHA_MIPS is not set
|
||||
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
|
||||
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=2
|
||||
# CONFIG_CRYPTO_POLY1305_MIPS is not set
|
||||
CONFIG_CRYPTO_RNG2=y
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
partition@0 {
|
||||
label = "RouterBoot";
|
||||
reg = <0x0 0x20000>;
|
||||
read-only;
|
||||
compatible = "mikrotik,routerboot-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
113
target/linux/ath79/dts/qca9533_mikrotik_routerboard-map-2nd.dts
Normal file
113
target/linux/ath79/dts/qca9533_mikrotik_routerboard-map-2nd.dts
Normal file
@@ -0,0 +1,113 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
|
||||
#include "qca9533_mikrotik_routerboard-16m.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "mikrotik,routerboard-map-2nd", "qca,qca9533";
|
||||
model = "MikroTik RouterBOARD mAP-2nD (mAP)";
|
||||
|
||||
aliases {
|
||||
led-boot = &led_user;
|
||||
led-failsafe = &led_user;
|
||||
led-running = &led_user;
|
||||
led-upgrade = &led_user;
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
power {
|
||||
label = "green:power";
|
||||
gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
|
||||
default-state = "on";
|
||||
};
|
||||
|
||||
eth_1 {
|
||||
label = "green:eth_1";
|
||||
gpios = <&gpio_ext 0 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
eth_2 {
|
||||
label = "green:eth_2";
|
||||
gpios = <&gpio_ext 1 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
poe_out {
|
||||
label = "red:poe_out";
|
||||
gpios = <&gpio_ext 2 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
led_user: user {
|
||||
label = "green:user";
|
||||
gpios = <&gpio_ext 3 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
wlan {
|
||||
label = "green:wlan";
|
||||
gpios = <&gpio_ext 4 GPIO_ACTIVE_LOW>;
|
||||
linux,default-trigger = "phy0tpt";
|
||||
};
|
||||
|
||||
ap_cap {
|
||||
label = "green:ap_cap";
|
||||
gpios = <&gpio_ext 6 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
gpio-export {
|
||||
compatible = "gpio-export";
|
||||
|
||||
usb_power {
|
||||
gpio-export,name = "usb-power";
|
||||
gpio-export,output = <1>;
|
||||
gpios = <&gpio_ext 5 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
enable_poe_port5 {
|
||||
gpio-export,name = "enable-poe";
|
||||
gpio-export,output = <0>;
|
||||
gpios = <&gpio 14 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&spi {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pin_spi_cs1>;
|
||||
|
||||
gpio_ext: gpio_ext@1 {
|
||||
compatible = "fairchild,74hc595";
|
||||
reg = <1>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
registers-number = <1>;
|
||||
spi-max-frequency = <25000000>;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
&pinmux {
|
||||
pin_spi_cs1: pinmux_spi_cs1 {
|
||||
pinctrl-single,bits = <0x8 0x0a000000 0xff000000>;
|
||||
};
|
||||
};
|
||||
|
||||
ð0 {
|
||||
status = "okay";
|
||||
|
||||
phy-handle = <&swphy0>;
|
||||
|
||||
gmac-config {
|
||||
device = <&gmac>;
|
||||
switch-phy-swap = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
&usb0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb_phy {
|
||||
status = "okay";
|
||||
};
|
||||
@@ -88,7 +88,6 @@
|
||||
partition@0 {
|
||||
label = "RouterBoot";
|
||||
reg = <0x0 0x20000>;
|
||||
read-only;
|
||||
compatible = "mikrotik,routerboot-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
@@ -862,7 +862,8 @@ define Device/dlink_dap-2xxx
|
||||
IMAGE/factory.img := append-kernel | pad-offset 6144k 160 | \
|
||||
append-rootfs | wrgg-pad-rootfs | mkwrggimg | check-size
|
||||
IMAGE/sysupgrade.bin := append-kernel | mkwrggimg | \
|
||||
pad-to $$$$(BLOCKSIZE) | append-rootfs | check-size | append-metadata
|
||||
pad-to $$$$(BLOCKSIZE) | append-rootfs | wrgg-pad-rootfs | \
|
||||
check-size | append-metadata
|
||||
KERNEL := kernel-bin | append-dtb | relocate-kernel | lzma
|
||||
KERNEL_INITRAMFS := $$(KERNEL) | mkwrggimg
|
||||
endef
|
||||
@@ -896,7 +897,7 @@ define Device/dlink_dap-2680-a1
|
||||
DEVICE_VENDOR := D-Link
|
||||
DEVICE_MODEL := DAP-2680
|
||||
DEVICE_VARIANT := A1
|
||||
DEVICE_PACKAGES := ath10k-firmware-qca99x0-ct kmod-ath10k-ct
|
||||
DEVICE_PACKAGES := ath10k-firmware-qca9984-ct kmod-ath10k-ct
|
||||
IMAGE_SIZE := 15232k
|
||||
DAP_SIGNATURE := wapac36_dkbs_dap2680
|
||||
endef
|
||||
|
||||
@@ -85,6 +85,15 @@ define Device/mikrotik_routerboard-lhg-5nd
|
||||
endef
|
||||
TARGET_DEVICES += mikrotik_routerboard-lhg-5nd
|
||||
|
||||
define Device/mikrotik_routerboard-map-2nd
|
||||
$(Device/mikrotik_nor)
|
||||
SOC := qca9533
|
||||
DEVICE_MODEL := RouterBOARD mAP-2nD (mAP)
|
||||
DEVICE_PACKAGES += kmod-usb2 kmod-ledtrig-gpio
|
||||
IMAGE_SIZE := 16256k
|
||||
endef
|
||||
TARGET_DEVICES += mikrotik_routerboard-map-2nd
|
||||
|
||||
define Device/mikrotik_routerboard-mapl-2nd
|
||||
$(Device/mikrotik_nor)
|
||||
SOC := qca9533
|
||||
|
||||
@@ -28,6 +28,11 @@ mikrotik,routerboard-lhg-5nd)
|
||||
ucidef_set_led_rssi "rssimediumhigh" "rssimediumhigh" "green:rssimediumhigh" "wlan0" "60" "100"
|
||||
ucidef_set_led_rssi "rssihigh" "rssihigh" "green:rssihigh" "wlan0" "80" "100"
|
||||
;;
|
||||
mikrotik,routerboard-map-2nd)
|
||||
ucidef_set_led_netdev "eth_1" "eth_1" "green:eth_1" "eth1"
|
||||
ucidef_set_led_switch "eth_2" "eth_2" "green:eth_2" "switch0" "0x4"
|
||||
ucidef_set_led_gpio "poe" "poe" "red:poe_out" "14" "0"
|
||||
;;
|
||||
mikrotik,routerboard-wapr-2nd)
|
||||
ucidef_set_rssimon "wlan0" "200000" "1"
|
||||
ucidef_set_led_rssi "rssilow" "rssilow" "green:rssilow" "wlan0" "1" "100"
|
||||
|
||||
@@ -30,6 +30,9 @@ ath79_setup_interfaces()
|
||||
ucidef_add_switch "switch0" \
|
||||
"0@eth0" "1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1"
|
||||
;;
|
||||
mikrotik,routerboard-map-2nd)
|
||||
ucidef_set_interface_lan "eth0 eth1"
|
||||
;;
|
||||
mikrotik,routerboard-962uigs-5hact2hnt)
|
||||
ucidef_add_switch "switch0" \
|
||||
"0@eth0" "2:lan" "3:lan" "4:lan" "5:lan" "1:wan"
|
||||
@@ -52,6 +55,7 @@ ath79_setup_macs()
|
||||
mikrotik,routerboard-912uag-2hpnd|\
|
||||
mikrotik,routerboard-lhg-2nd|\
|
||||
mikrotik,routerboard-lhg-5nd|\
|
||||
mikrotik,routerboard-map-2nd|\
|
||||
mikrotik,routerboard-mapl-2nd|\
|
||||
mikrotik,routerboard-sxt-5nd-r2|\
|
||||
mikrotik,routerboard-wap-2nd|\
|
||||
|
||||
@@ -31,6 +31,9 @@ case "$FIRMWARE" in
|
||||
mikrotik,routerboard-wapr-2nd)
|
||||
caldata_mikrotik_ath9k 0x1000 0x440 $(macaddr_add "$mac_base" 1)
|
||||
;;
|
||||
mikrotik,routerboard-map-2nd)
|
||||
caldata_mikrotik_ath9k 0x1000 0x440 $(macaddr_add "$mac_base" 3)
|
||||
;;
|
||||
mikrotik,routerboard-mapl-2nd|\
|
||||
mikrotik,routerboard-wap-g-5hact2hnd)
|
||||
caldata_mikrotik_ath9k 0x1000 0x440 $(macaddr_add "$mac_base" 2)
|
||||
|
||||
@@ -10,7 +10,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
|
||||
|
||||
--- a/drivers/mtd/spi-nor/core.c
|
||||
+++ b/drivers/mtd/spi-nor/core.c
|
||||
@@ -3147,6 +3147,7 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||
@@ -3157,6 +3157,7 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||
struct device *dev = nor->dev;
|
||||
struct mtd_info *mtd = &nor->mtd;
|
||||
struct device_node *np = spi_nor_get_flash_node(nor);
|
||||
@@ -18,7 +18,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
@@ -3201,7 +3202,12 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||
@@ -3211,7 +3212,12 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -34,7 +34,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
|
||||
mtd->type = MTD_NORFLASH;
|
||||
--- a/drivers/mtd/mtdcore.c
|
||||
+++ b/drivers/mtd/mtdcore.c
|
||||
@@ -778,6 +778,17 @@ out_error:
|
||||
@@ -788,6 +788,17 @@ out_error:
|
||||
*/
|
||||
static void mtd_set_dev_defaults(struct mtd_info *mtd)
|
||||
{
|
||||
|
||||
@@ -706,7 +706,7 @@
|
||||
EXPORT_SYMBOL(xfrm_parse_spi);
|
||||
--- a/net/ipv4/tcp_input.c
|
||||
+++ b/net/ipv4/tcp_input.c
|
||||
@@ -4084,14 +4084,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||
@@ -4087,14 +4087,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||
{
|
||||
const __be32 *ptr = (const __be32 *)(th + 1);
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||
CONFIG_ARM64=y
|
||||
CONFIG_ARM64_4K_PAGES=y
|
||||
CONFIG_ARM64_CNP=y
|
||||
CONFIG_ARM64_CRYPTO=y
|
||||
CONFIG_ARM64_ERRATUM_819472=y
|
||||
CONFIG_ARM64_ERRATUM_824069=y
|
||||
CONFIG_ARM64_ERRATUM_826319=y
|
||||
@@ -121,9 +122,13 @@ CONFIG_CPU_IDLE_GOV_MENU=y
|
||||
CONFIG_CPU_PM=y
|
||||
CONFIG_CPU_RMAP=y
|
||||
CONFIG_CRC16=y
|
||||
CONFIG_CRYPTO_AES_ARM64=y
|
||||
CONFIG_CRYPTO_AES_ARM64_BS=y
|
||||
CONFIG_CRYPTO_AES_ARM64_NEON_BLK=y
|
||||
CONFIG_CRYPTO_CBC=y
|
||||
CONFIG_CRYPTO_CRC32=y
|
||||
CONFIG_CRYPTO_CRC32C=y
|
||||
CONFIG_CRYPTO_CRYPTD=y
|
||||
CONFIG_CRYPTO_CTS=y
|
||||
CONFIG_CRYPTO_DRBG=y
|
||||
CONFIG_CRYPTO_DRBG_HMAC=y
|
||||
@@ -137,7 +142,10 @@ CONFIG_CRYPTO_RNG2=y
|
||||
CONFIG_CRYPTO_RNG_DEFAULT=y
|
||||
CONFIG_CRYPTO_SEQIV=y
|
||||
CONFIG_CRYPTO_SHA256=y
|
||||
CONFIG_CRYPTO_SHA256_ARM64=y
|
||||
CONFIG_CRYPTO_SHA512=y
|
||||
CONFIG_CRYPTO_SHA512_ARM64=y
|
||||
CONFIG_CRYPTO_SIMD=y
|
||||
CONFIG_CRYPTO_XTS=y
|
||||
CONFIG_DCACHE_WORD_ACCESS=y
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
|
||||
@@ -17,6 +17,7 @@ CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||
CONFIG_ARM64=y
|
||||
CONFIG_ARM64_4K_PAGES=y
|
||||
CONFIG_ARM64_CNP=y
|
||||
CONFIG_ARM64_CRYPTO=y
|
||||
CONFIG_ARM64_ERRATUM_819472=y
|
||||
CONFIG_ARM64_ERRATUM_824069=y
|
||||
CONFIG_ARM64_ERRATUM_826319=y
|
||||
@@ -125,9 +126,13 @@ CONFIG_CPU_IDLE_GOV_MENU=y
|
||||
CONFIG_CPU_PM=y
|
||||
CONFIG_CPU_RMAP=y
|
||||
CONFIG_CRC16=y
|
||||
CONFIG_CRYPTO_AES_ARM64=y
|
||||
CONFIG_CRYPTO_AES_ARM64_BS=y
|
||||
CONFIG_CRYPTO_AES_ARM64_NEON_BLK=y
|
||||
CONFIG_CRYPTO_CBC=y
|
||||
CONFIG_CRYPTO_CRC32=y
|
||||
CONFIG_CRYPTO_CRC32C=y
|
||||
CONFIG_CRYPTO_CRYPTD=y
|
||||
CONFIG_CRYPTO_CTS=y
|
||||
CONFIG_CRYPTO_DRBG=y
|
||||
CONFIG_CRYPTO_DRBG_HMAC=y
|
||||
@@ -141,7 +146,10 @@ CONFIG_CRYPTO_RNG2=y
|
||||
CONFIG_CRYPTO_RNG_DEFAULT=y
|
||||
CONFIG_CRYPTO_SEQIV=y
|
||||
CONFIG_CRYPTO_SHA256=y
|
||||
CONFIG_CRYPTO_SHA256_ARM64=y
|
||||
CONFIG_CRYPTO_SHA512=y
|
||||
CONFIG_CRYPTO_SHA512_ARM64=y
|
||||
CONFIG_CRYPTO_SIMD=y
|
||||
CONFIG_CRYPTO_XTS=y
|
||||
CONFIG_DCACHE_WORD_ACCESS=y
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
From a8fb0d43b8acd25d68a0d2c24fd0260393148447 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.com>
|
||||
Date: Tue, 3 Nov 2020 11:49:53 +0000
|
||||
Subject: [PATCH] Revert "mailbox: avoid timer start from callback"
|
||||
|
||||
This reverts commit c7dacf5b0f32957b24ef29df1207dc2cd8307743.
|
||||
|
||||
The Pi 400 shutdown/poweroff mechanism relies on being able to set
|
||||
a GPIO on the expander in the pm_power_off handler, something that
|
||||
requires two mailbox calls - GET_GPIO_STATE and SET_GPIO_STATE. A
|
||||
recent kernel change introduces a reasonable possibility that the
|
||||
GET call doesn't completes, and bisecting led to a commit from
|
||||
October that changes the timer usage of the mailbox.
|
||||
|
||||
My theory is that there is a race condition in the new code that breaks
|
||||
the poll timer, but that it normally goes unnoticed because subsequent
|
||||
mailbox activity wakes it up again. The power-off mailbox calls happen
|
||||
at a time when other subsystems have been shut down, so if one of them
|
||||
fails then there is nothing to allow it to recover.
|
||||
|
||||
See: https://github.com/raspberrypi/linux/issues/3941
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
---
|
||||
drivers/mailbox/mailbox.c | 12 +++++-------
|
||||
1 file changed, 5 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/mailbox/mailbox.c
|
||||
+++ b/drivers/mailbox/mailbox.c
|
||||
@@ -82,12 +82,9 @@ static void msg_submit(struct mbox_chan
|
||||
exit:
|
||||
spin_unlock_irqrestore(&chan->lock, flags);
|
||||
|
||||
- /* kick start the timer immediately to avoid delays */
|
||||
- if (!err && (chan->txdone_method & TXDONE_BY_POLL)) {
|
||||
- /* but only if not already active */
|
||||
- if (!hrtimer_active(&chan->mbox->poll_hrt))
|
||||
- hrtimer_start(&chan->mbox->poll_hrt, 0, HRTIMER_MODE_REL);
|
||||
- }
|
||||
+ if (!err && (chan->txdone_method & TXDONE_BY_POLL))
|
||||
+ /* kick start the timer immediately to avoid delays */
|
||||
+ hrtimer_start(&chan->mbox->poll_hrt, 0, HRTIMER_MODE_REL);
|
||||
}
|
||||
|
||||
static void tx_tick(struct mbox_chan *chan, int r)
|
||||
@@ -125,10 +122,11 @@ static enum hrtimer_restart txdone_hrtim
|
||||
struct mbox_chan *chan = &mbox->chans[i];
|
||||
|
||||
if (chan->active_req && chan->cl) {
|
||||
- resched = true;
|
||||
txdone = chan->mbox->ops->last_tx_done(chan);
|
||||
if (txdone)
|
||||
tx_tick(chan, 0);
|
||||
+ else
|
||||
+ resched = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ Signed-off-by: Noralf Tronnes <notro@tronnes.org>
|
||||
|
||||
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
@@ -362,7 +362,7 @@ static const struct gpio_chip bcm2835_gp
|
||||
@@ -378,7 +378,7 @@ static const struct gpio_chip bcm2835_gp
|
||||
.get = bcm2835_gpio_get,
|
||||
.set = bcm2835_gpio_set,
|
||||
.set_config = gpiochip_generic_config,
|
||||
@@ -19,4 +19,4 @@ Signed-off-by: Noralf Tronnes <notro@tronnes.org>
|
||||
+ .base = 0,
|
||||
.ngpio = BCM2835_NUM_GPIOS,
|
||||
.can_sleep = false,
|
||||
};
|
||||
.of_gpio_ranges_fallback = bcm2835_of_gpio_ranges_fallback,
|
||||
|
||||
@@ -221,7 +221,7 @@ Signed-off-by: Yaroslav Rosomakho <yaroslavros@gmail.com>
|
||||
static inline int mmc_blk_part_switch(struct mmc_card *card,
|
||||
unsigned int part_type);
|
||||
static void mmc_blk_rw_rq_prep(struct mmc_queue_req *mqrq,
|
||||
@@ -2897,6 +2904,7 @@ static int mmc_blk_probe(struct mmc_card
|
||||
@@ -2896,6 +2903,7 @@ static int mmc_blk_probe(struct mmc_card
|
||||
{
|
||||
struct mmc_blk_data *md, *part_md;
|
||||
char cap_str[10];
|
||||
@@ -229,7 +229,7 @@ Signed-off-by: Yaroslav Rosomakho <yaroslavros@gmail.com>
|
||||
|
||||
/*
|
||||
* Check that the card supports the command class(es) we need.
|
||||
@@ -2904,7 +2912,16 @@ static int mmc_blk_probe(struct mmc_card
|
||||
@@ -2903,7 +2911,16 @@ static int mmc_blk_probe(struct mmc_card
|
||||
if (!(card->csd.cmdclass & CCC_BLOCK_READ))
|
||||
return -ENODEV;
|
||||
|
||||
@@ -247,7 +247,7 @@ Signed-off-by: Yaroslav Rosomakho <yaroslavros@gmail.com>
|
||||
|
||||
card->complete_wq = alloc_workqueue("mmc_complete",
|
||||
WQ_MEM_RECLAIM | WQ_HIGHPRI, 0);
|
||||
@@ -2919,9 +2936,14 @@ static int mmc_blk_probe(struct mmc_card
|
||||
@@ -2918,9 +2935,14 @@ static int mmc_blk_probe(struct mmc_card
|
||||
|
||||
string_get_size((u64)get_capacity(md->disk), 512, STRING_UNITS_2,
|
||||
cap_str, sizeof(cap_str));
|
||||
|
||||
@@ -12465,7 +12465,7 @@ Signed-off-by: Joerg Schambacher joerg@i2audio.com
|
||||
config SND_SOC_MADERA
|
||||
tristate
|
||||
default y if SND_SOC_CS47L15=y
|
||||
@@ -1130,6 +1141,10 @@ config SND_SOC_RT5616
|
||||
@@ -1128,6 +1139,10 @@ config SND_SOC_RT5616
|
||||
tristate "Realtek RT5616 CODEC"
|
||||
depends on I2C
|
||||
|
||||
@@ -12476,7 +12476,7 @@ Signed-off-by: Joerg Schambacher joerg@i2audio.com
|
||||
config SND_SOC_RT5631
|
||||
tristate "Realtek ALC5631/RT5631 CODEC"
|
||||
depends on I2C
|
||||
@@ -1351,6 +1366,9 @@ config SND_SOC_TFA9879
|
||||
@@ -1349,6 +1364,9 @@ config SND_SOC_TFA9879
|
||||
tristate "NXP Semiconductors TFA9879 amplifier"
|
||||
depends on I2C
|
||||
|
||||
@@ -12486,7 +12486,7 @@ Signed-off-by: Joerg Schambacher joerg@i2audio.com
|
||||
config SND_SOC_TLV320AIC23
|
||||
tristate
|
||||
|
||||
@@ -1789,4 +1807,8 @@ config SND_SOC_TPA6130A2
|
||||
@@ -1787,4 +1805,8 @@ config SND_SOC_TPA6130A2
|
||||
tristate "Texas Instruments TPA6130A2 headphone amplifier"
|
||||
depends on I2C
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
/* Disable rate control for now */
|
||||
bcmgenet_tdma_ring_writel(priv, index, flow_period_val,
|
||||
TDMA_FLOW_PERIOD);
|
||||
@@ -4069,9 +4069,12 @@ static int bcmgenet_probe(struct platfor
|
||||
@@ -4073,9 +4073,12 @@ static int bcmgenet_probe(struct platfor
|
||||
netif_set_real_num_rx_queues(priv->dev, priv->hw_params->rx_queues + 1);
|
||||
|
||||
/* Set default coalescing parameters */
|
||||
|
||||
@@ -81,7 +81,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||
extern int usb_driver_set_configuration(struct usb_device *udev, int config);
|
||||
--- a/include/linux/usb/hcd.h
|
||||
+++ b/include/linux/usb/hcd.h
|
||||
@@ -382,6 +382,11 @@ struct hc_driver {
|
||||
@@ -384,6 +384,11 @@ struct hc_driver {
|
||||
* or bandwidth constraints.
|
||||
*/
|
||||
void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
|
||||
@@ -93,7 +93,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||
/* Returns the hardware-chosen device address */
|
||||
int (*address_device)(struct usb_hcd *, struct usb_device *udev);
|
||||
/* prepares the hardware to send commands to the device */
|
||||
@@ -443,6 +448,8 @@ extern void usb_hcd_unmap_urb_setup_for_
|
||||
@@ -445,6 +450,8 @@ extern void usb_hcd_unmap_urb_setup_for_
|
||||
extern void usb_hcd_unmap_urb_for_dma(struct usb_hcd *, struct urb *);
|
||||
extern void usb_hcd_flush_endpoint(struct usb_device *udev,
|
||||
struct usb_host_endpoint *ep);
|
||||
|
||||
@@ -15,7 +15,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -1483,6 +1483,103 @@ command_cleanup:
|
||||
@@ -1494,6 +1494,103 @@ command_cleanup:
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -119,7 +119,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||
* non-error returns are a promise to giveback() the urb later
|
||||
* we drop ownership so next owner (or urb unlink) can get it
|
||||
*/
|
||||
@@ -5389,6 +5486,7 @@ static const struct hc_driver xhci_hc_dr
|
||||
@@ -5400,6 +5497,7 @@ static const struct hc_driver xhci_hc_dr
|
||||
.endpoint_reset = xhci_endpoint_reset,
|
||||
.check_bandwidth = xhci_check_bandwidth,
|
||||
.reset_bandwidth = xhci_reset_bandwidth,
|
||||
|
||||
@@ -33,7 +33,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||
#define USB_VENDOR_ID_BELKIN 0x050d
|
||||
#define USB_DEVICE_ID_FLIP_KVM 0x3201
|
||||
|
||||
@@ -1270,6 +1273,9 @@
|
||||
@@ -1271,6 +1274,9 @@
|
||||
#define USB_VENDOR_ID_XAT 0x2505
|
||||
#define USB_DEVICE_ID_XAT_CSR 0x0220
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
@@ -1318,7 +1318,7 @@ static int bcm2835_pinctrl_probe(struct
|
||||
@@ -1336,7 +1336,7 @@ static int bcm2835_pinctrl_probe(struct
|
||||
girq->default_type = IRQ_TYPE_NONE;
|
||||
girq->handler = handle_level_irq;
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
@@ -1290,9 +1290,13 @@ static int bcm2835_pinctrl_probe(struct
|
||||
@@ -1308,9 +1308,13 @@ static int bcm2835_pinctrl_probe(struct
|
||||
char *name;
|
||||
|
||||
girq->parents[i] = irq_of_parse_and_map(np, i);
|
||||
|
||||
@@ -26,7 +26,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
--- a/drivers/of/overlay.c
|
||||
+++ b/drivers/of/overlay.c
|
||||
@@ -245,6 +245,8 @@ static struct property *dup_and_fixup_sy
|
||||
@@ -243,6 +243,8 @@ static struct property *dup_and_fixup_sy
|
||||
if (!target_path)
|
||||
return NULL;
|
||||
target_path_len = strlen(target_path);
|
||||
|
||||
@@ -16,7 +16,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
@@ -378,7 +378,7 @@ static const struct gpio_chip bcm2711_gp
|
||||
@@ -395,7 +395,7 @@ static const struct gpio_chip bcm2711_gp
|
||||
.get = bcm2835_gpio_get,
|
||||
.set = bcm2835_gpio_set,
|
||||
.set_config = gpiochip_generic_config,
|
||||
@@ -24,4 +24,4 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
+ .base = 0,
|
||||
.ngpio = BCM2711_NUM_GPIOS,
|
||||
.can_sleep = false,
|
||||
};
|
||||
.of_gpio_ranges_fallback = bcm2835_of_gpio_ranges_fallback,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user