Compare commits
51 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
14fb5b4f15 | ||
|
|
6028f00df0 | ||
|
|
7fbd325649 | ||
|
|
103c42e295 | ||
|
|
fd4e805846 | ||
|
|
dc60dc133a | ||
|
|
fa1ee2bd2b | ||
|
|
076ea9f473 | ||
|
|
6c5c3a2edc | ||
|
|
af50ce32c5 | ||
|
|
d92713d2cf | ||
|
|
c476954633 | ||
|
|
c2f938bf9a | ||
|
|
4f23857011 | ||
|
|
e74b264231 | ||
|
|
3e7fd9275d | ||
|
|
d3bab051cf | ||
|
|
eaef74279c | ||
|
|
981f5f7e40 | ||
|
|
eab6537449 | ||
|
|
fb333a7fec | ||
|
|
f3f21b3d2a | ||
|
|
6c14b29bf1 | ||
|
|
009ecf3149 | ||
|
|
f0115b5011 | ||
|
|
99e5ba3207 | ||
|
|
0c8e8e2dc9 | ||
|
|
484117b478 | ||
|
|
e09592748c | ||
|
|
9d4eed6837 | ||
|
|
834bd86424 | ||
|
|
459a40fce2 | ||
|
|
202c3ceb13 | ||
|
|
65044a50ab | ||
|
|
26b8069604 | ||
|
|
3e6e33f528 | ||
|
|
e84f289a02 | ||
|
|
89ed2d6f78 | ||
|
|
e42415723b | ||
|
|
ecf104c023 | ||
|
|
6cf22507fd | ||
|
|
4c101f8b3a | ||
|
|
0f47ce8180 | ||
|
|
5970e6d466 | ||
|
|
e50a5a9328 | ||
|
|
c11f335275 | ||
|
|
b1fc9b79d0 | ||
|
|
a360d5a18e | ||
|
|
10eb247ee8 | ||
|
|
01a8f0e444 | ||
|
|
184fe11483 |
@@ -1,4 +1,4 @@
|
||||
src-git packages https://git.lede-project.org/feed/packages.git^40da7ecf21ffe1f3523ffa430c406e1db58ce3d4
|
||||
src-git luci https://git.lede-project.org/project/luci.git^7bf036750081787e01339c82865ad45fca6520ef
|
||||
src-git routing https://git.lede-project.org/feed/routing.git^d09478290f72c6e58833b65baf14d9173eaf98e1
|
||||
src-git telephony https://git.lede-project.org/feed/telephony.git^95498e75db5c6741cd53f8746ffc1473c72b6e5d
|
||||
src-git packages https://git.lede-project.org/feed/packages.git^545d2fadd7245783e40f235fe2c5d8c3ab1549cd
|
||||
src-git luci https://git.lede-project.org/project/luci.git^71e2af4f51567061600840040508d642120a8532
|
||||
src-git routing https://git.lede-project.org/feed/routing.git^af18086ba8de36e7fbc696cb39f634f6a7ea34de
|
||||
src-git telephony https://git.lede-project.org/feed/telephony.git^31398a3759c99bdb2dca359b78e25c17b6dd434a
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
LINUX_RELEASE?=1
|
||||
|
||||
LINUX_VERSION-3.18 = .43
|
||||
LINUX_VERSION-4.4 = .153
|
||||
LINUX_VERSION-4.4 = .182
|
||||
|
||||
LINUX_KERNEL_HASH-3.18.43 = 1236e8123a6ce537d5029232560966feed054ae31776fe8481dd7d18cdd5492c
|
||||
LINUX_KERNEL_HASH-4.4.153 = 0f2355515c22ca705600043bedc75218c68dcb8ab528f57f67851fbcb8545402
|
||||
LINUX_KERNEL_HASH-4.4.182 = c409d88f61cd9a37cbba36d5d9c8162263eb1e5c9380efaf880a3ec10cd88527
|
||||
|
||||
ifdef KERNEL_PATCHVER
|
||||
LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
|
||||
|
||||
@@ -31,16 +31,16 @@ qstrip_escape=$(subst ','\'',$(call qstrip,$(1)))
|
||||
sanitize = $(call tolower,$(subst _,-,$(subst $(space),-,$(1))))
|
||||
|
||||
VERSION_NUMBER:=$(call qstrip_escape,$(CONFIG_VERSION_NUMBER))
|
||||
VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),17.01.6)
|
||||
VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),17.01.7)
|
||||
|
||||
VERSION_CODE:=$(call qstrip_escape,$(CONFIG_VERSION_CODE))
|
||||
VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),r3979-2252731af4)
|
||||
VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),r4030-6028f00df0)
|
||||
|
||||
VERSION_NICK:=$(call qstrip_escape,$(CONFIG_VERSION_NICK))
|
||||
VERSION_NICK:=$(if $(VERSION_NICK),$(VERSION_NICK),$(RELEASE))
|
||||
|
||||
VERSION_REPO:=$(call qstrip_escape,$(CONFIG_VERSION_REPO))
|
||||
VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),http://downloads.lede-project.org/releases/17.01.6)
|
||||
VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),http://downloads.lede-project.org/releases/17.01.7)
|
||||
|
||||
VERSION_DIST:=$(call qstrip_escape,$(CONFIG_VERSION_DIST))
|
||||
VERSION_DIST:=$(if $(VERSION_DIST),$(VERSION_DIST),LEDE)
|
||||
|
||||
8
package/base-files/files/etc/iproute2/ematch_map
Normal file
8
package/base-files/files/etc/iproute2/ematch_map
Normal file
@@ -0,0 +1,8 @@
|
||||
# lookup table for ematch kinds
|
||||
1 cmp
|
||||
2 nbyte
|
||||
3 u32
|
||||
4 meta
|
||||
7 canid
|
||||
8 ipset
|
||||
9 ipt
|
||||
@@ -23,6 +23,7 @@ reload() {
|
||||
restart() {
|
||||
trap '' TERM
|
||||
stop "$@"
|
||||
trap - TERM
|
||||
start "$@"
|
||||
}
|
||||
|
||||
|
||||
@@ -165,22 +165,27 @@ insert_modules() {
|
||||
|
||||
default_prerm() {
|
||||
local root="${IPKG_INSTROOT}"
|
||||
local name
|
||||
local pkgname="$(basename ${1%.*})"
|
||||
local ret=0
|
||||
|
||||
name=$(basename ${1%.*})
|
||||
[ -f "$root/usr/lib/opkg/info/${name}.prerm-pkg" ] && . "$root/usr/lib/opkg/info/${name}.prerm-pkg"
|
||||
if [ -f "$root/usr/lib/opkg/info/${pkgname}.prerm-pkg" ]; then
|
||||
( . "$root/usr/lib/opkg/info/${pkgname}.prerm-pkg" )
|
||||
ret=$?
|
||||
fi
|
||||
|
||||
local shell="$(which bash)"
|
||||
for i in `cat "$root/usr/lib/opkg/info/${name}.list" | grep "^/etc/init.d/"`; do
|
||||
for i in $(grep -s "^/etc/init.d/" "$root/usr/lib/opkg/info/${pkgname}.list"); do
|
||||
if [ -n "$root" ]; then
|
||||
${shell:-/bin/sh} "$root/etc/rc.common" "$root$i" disable
|
||||
else
|
||||
if [ "$PKG_UPGRADE" != "1" ]; then
|
||||
"$i" disable
|
||||
fi
|
||||
"$i" stop || /bin/true
|
||||
"$i" stop
|
||||
fi
|
||||
done
|
||||
|
||||
return $ret
|
||||
}
|
||||
|
||||
add_group_and_user() {
|
||||
@@ -238,10 +243,9 @@ default_postinst() {
|
||||
if [ -z "$root" ] && grep -q -s "^/etc/uci-defaults/" "/usr/lib/opkg/info/${pkgname}.list"; then
|
||||
. /lib/functions/system.sh
|
||||
[ -d /tmp/.uci ] || mkdir -p /tmp/.uci
|
||||
for i in $(sed -ne 's!^/etc/uci-defaults/!!p' "/usr/lib/opkg/info/${pkgname}.list"); do (
|
||||
cd /etc/uci-defaults
|
||||
[ -f "$i" ] && . ./"$i" && rm -f "$i"
|
||||
) done
|
||||
for i in $(grep -s "^/etc/uci-defaults/" "/usr/lib/opkg/info/${pkgname}.list"); do
|
||||
( [ -f "$i" ] && cd "$(dirname $i)" && . "$i" ) && rm -f "$i"
|
||||
done
|
||||
uci commit
|
||||
fi
|
||||
|
||||
|
||||
@@ -190,7 +190,7 @@ if VERSIONOPT
|
||||
config VERSION_REPO
|
||||
string
|
||||
prompt "Release repository"
|
||||
default "http://downloads.lede-project.org/releases/17.01.6"
|
||||
default "http://downloads.lede-project.org/releases/17.01.7"
|
||||
help
|
||||
This is the repository address embedded in the image, it defaults
|
||||
to the trunk snapshot repo; the url may contain the following placeholders:
|
||||
|
||||
@@ -26,7 +26,7 @@ include $(INCLUDE_DIR)/package.mk
|
||||
define Package/perf
|
||||
SECTION:=devel
|
||||
CATEGORY:=Development
|
||||
DEPENDS:= +libelf1 +libdw +(mips||mipsel||powerpc||i386||x86_64||arm):libunwind +libpthread +librt +objdump @!LINUX_3_18 @!IN_SDK
|
||||
DEPENDS:= +libelf1 +libdw +(mips||mipsel||powerpc||i386||x86_64||arm||aarch64):libunwind +libpthread +librt +objdump @!LINUX_3_18 @!IN_SDK
|
||||
TITLE:=Linux performance monitoring tool
|
||||
VERSION:=$(LINUX_VERSION)-$(PKG_RELEASE)
|
||||
URL:=http://www.kernel.org
|
||||
|
||||
@@ -11,7 +11,7 @@ include $(INCLUDE_DIR)/kernel.mk
|
||||
PKG_NAME:=mac80211
|
||||
|
||||
PKG_VERSION:=2017-01-31
|
||||
PKG_RELEASE:=14
|
||||
PKG_RELEASE:=15
|
||||
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
|
||||
PKG_BACKPORT_VERSION:=
|
||||
PKG_HASH:=75e6d39e34cf156212a2509172a4a62b673b69eb4a1d9aaa565f7fa719fa2317
|
||||
|
||||
@@ -14,6 +14,10 @@ MP_CONFIG_INT="mesh_retry_timeout mesh_confirm_timeout mesh_holding_timeout mesh
|
||||
MP_CONFIG_BOOL="mesh_auto_open_plinks mesh_fwding"
|
||||
MP_CONFIG_STRING="mesh_power_mode"
|
||||
|
||||
iw() {
|
||||
command iw $@ || logger -t mac80211 "Failed command: iw $@"
|
||||
}
|
||||
|
||||
drv_mac80211_init_device_config() {
|
||||
hostapd_common_add_device_config
|
||||
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
--- a/backport-include/linux/mm.h
|
||||
+++ b/backport-include/linux/mm.h
|
||||
@@ -39,8 +39,20 @@ static inline
|
||||
long backport_get_user_pages_locked(unsigned long start, unsigned long nr_pages,
|
||||
int write, int force, struct page **pages, int *locked)
|
||||
{
|
||||
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,4,168))
|
||||
return get_user_pages_locked(current, current->mm, start, nr_pages,
|
||||
write, force, pages, locked);
|
||||
+#else
|
||||
+ int flags = 0;
|
||||
+
|
||||
+ if (write)
|
||||
+ flags |= FOLL_WRITE;
|
||||
+ if (force)
|
||||
+ flags |= FOLL_FORCE;
|
||||
+
|
||||
+ return get_user_pages_locked(current, current->mm, start, nr_pages,
|
||||
+ flags, pages, locked);
|
||||
+#endif
|
||||
}
|
||||
#define get_user_pages_locked LINUX_BACKPORT(get_user_pages_locked)
|
||||
|
||||
@@ -48,8 +60,20 @@ static inline
|
||||
long backport_get_user_pages_unlocked(unsigned long start, unsigned long nr_pages,
|
||||
int write, int force, struct page **pages)
|
||||
{
|
||||
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,4,168))
|
||||
return get_user_pages_unlocked(current, current->mm, start, nr_pages,
|
||||
write, force, pages);
|
||||
+#else
|
||||
+ int flags = 0;
|
||||
+
|
||||
+ if (write)
|
||||
+ flags |= FOLL_WRITE;
|
||||
+ if (force)
|
||||
+ flags |= FOLL_FORCE;
|
||||
+
|
||||
+ return get_user_pages_unlocked(current, current->mm, start, nr_pages,
|
||||
+ pages, flags);
|
||||
+#endif
|
||||
}
|
||||
#define get_user_pages_unlocked LINUX_BACKPORT(get_user_pages_unlocked)
|
||||
#endif
|
||||
@@ -60,8 +84,20 @@ long backport_get_user_pages(unsigned lo
|
||||
int write, int force, struct page **pages,
|
||||
struct vm_area_struct **vmas)
|
||||
{
|
||||
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,4,168))
|
||||
return get_user_pages(current, current->mm, start, nr_pages,
|
||||
write, force, pages, vmas);
|
||||
+#else
|
||||
+ int flags = 0;
|
||||
+
|
||||
+ if (write)
|
||||
+ flags |= FOLL_WRITE;
|
||||
+ if (force)
|
||||
+ flags |= FOLL_FORCE;
|
||||
+
|
||||
+ return get_user_pages(current, current->mm, start, nr_pages,
|
||||
+ flags, pages, vmas);
|
||||
+#endif
|
||||
}
|
||||
#define get_user_pages LINUX_BACKPORT(get_user_pages)
|
||||
#endif
|
||||
@@ -0,0 +1,45 @@
|
||||
From da472385a29f1fddcac7cfa0499482704310bd16 Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Tue, 20 Feb 2018 00:14:18 +0100
|
||||
Subject: [PATCH] brcmfmac: move brcmf_bus_preinit() call just after changing
|
||||
bus state
|
||||
|
||||
Moving the brcmf_bus_preinit() call allows the bus code to do some
|
||||
required initialization before handling firmware control messages.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c | 3 ---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 5 +++++
|
||||
2 files changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
@@ -215,9 +215,6 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
|
||||
|
||||
/* Enable tx beamforming, errors can be ignored (not supported) */
|
||||
(void)brcmf_fil_iovar_int_set(ifp, "txbf", 1);
|
||||
-
|
||||
- /* do bus specific preinit here */
|
||||
- err = brcmf_bus_preinit(ifp->drvr->bus_if);
|
||||
done:
|
||||
return err;
|
||||
}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1058,6 +1058,11 @@ int brcmf_bus_started(struct device *dev
|
||||
/* signal bus ready */
|
||||
brcmf_bus_change_state(bus_if, BRCMF_BUS_UP);
|
||||
|
||||
+ /* do bus specific preinit here */
|
||||
+ ret = brcmf_bus_preinit(ifp->drvr->bus_if);
|
||||
+ if (ret < 0)
|
||||
+ goto fail;
|
||||
+
|
||||
/* Bus is ready, do any initialization */
|
||||
ret = brcmf_c_preinit_dcmds(ifp);
|
||||
if (ret < 0)
|
||||
@@ -0,0 +1,130 @@
|
||||
From 0542503c4c164c65cd1567b0f2b3f887af6c81eb Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Tue, 20 Feb 2018 00:14:22 +0100
|
||||
Subject: [PATCH] brcmfmac: move brcmf_attach() function in core.c
|
||||
|
||||
Moving the function in preparation of subsequent patch.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/core.c | 98 +++++++++++-----------
|
||||
1 file changed, 49 insertions(+), 49 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -961,55 +961,6 @@ static int brcmf_inet6addr_changed(struc
|
||||
}
|
||||
#endif
|
||||
|
||||
-int brcmf_attach(struct device *dev, struct brcmf_mp_device *settings)
|
||||
-{
|
||||
- struct brcmf_pub *drvr = NULL;
|
||||
- int ret = 0;
|
||||
- int i;
|
||||
-
|
||||
- brcmf_dbg(TRACE, "Enter\n");
|
||||
-
|
||||
- /* Allocate primary brcmf_info */
|
||||
- drvr = kzalloc(sizeof(struct brcmf_pub), GFP_ATOMIC);
|
||||
- if (!drvr)
|
||||
- return -ENOMEM;
|
||||
-
|
||||
- for (i = 0; i < ARRAY_SIZE(drvr->if2bss); i++)
|
||||
- drvr->if2bss[i] = BRCMF_BSSIDX_INVALID;
|
||||
-
|
||||
- mutex_init(&drvr->proto_block);
|
||||
-
|
||||
- /* Link to bus module */
|
||||
- drvr->hdrlen = 0;
|
||||
- drvr->bus_if = dev_get_drvdata(dev);
|
||||
- drvr->bus_if->drvr = drvr;
|
||||
- drvr->settings = settings;
|
||||
-
|
||||
- /* attach debug facilities */
|
||||
- brcmf_debug_attach(drvr);
|
||||
-
|
||||
- /* Attach and link in the protocol */
|
||||
- ret = brcmf_proto_attach(drvr);
|
||||
- if (ret != 0) {
|
||||
- brcmf_err("brcmf_prot_attach failed\n");
|
||||
- goto fail;
|
||||
- }
|
||||
-
|
||||
- /* Attach to events important for core code */
|
||||
- brcmf_fweh_register(drvr, BRCMF_E_PSM_WATCHDOG,
|
||||
- brcmf_psm_watchdog_notify);
|
||||
-
|
||||
- /* attach firmware event handler */
|
||||
- brcmf_fweh_attach(drvr);
|
||||
-
|
||||
- return ret;
|
||||
-
|
||||
-fail:
|
||||
- brcmf_detach(dev);
|
||||
-
|
||||
- return ret;
|
||||
-}
|
||||
-
|
||||
static int brcmf_revinfo_read(struct seq_file *s, void *data)
|
||||
{
|
||||
struct brcmf_bus *bus_if = dev_get_drvdata(s->private);
|
||||
@@ -1141,6 +1092,55 @@ fail:
|
||||
|
||||
return ret;
|
||||
}
|
||||
+
|
||||
+int brcmf_attach(struct device *dev, struct brcmf_mp_device *settings)
|
||||
+{
|
||||
+ struct brcmf_pub *drvr = NULL;
|
||||
+ int ret = 0;
|
||||
+ int i;
|
||||
+
|
||||
+ brcmf_dbg(TRACE, "Enter\n");
|
||||
+
|
||||
+ /* Allocate primary brcmf_info */
|
||||
+ drvr = kzalloc(sizeof(*drvr), GFP_ATOMIC);
|
||||
+ if (!drvr)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(drvr->if2bss); i++)
|
||||
+ drvr->if2bss[i] = BRCMF_BSSIDX_INVALID;
|
||||
+
|
||||
+ mutex_init(&drvr->proto_block);
|
||||
+
|
||||
+ /* Link to bus module */
|
||||
+ drvr->hdrlen = 0;
|
||||
+ drvr->bus_if = dev_get_drvdata(dev);
|
||||
+ drvr->bus_if->drvr = drvr;
|
||||
+ drvr->settings = settings;
|
||||
+
|
||||
+ /* attach debug facilities */
|
||||
+ brcmf_debug_attach(drvr);
|
||||
+
|
||||
+ /* Attach and link in the protocol */
|
||||
+ ret = brcmf_proto_attach(drvr);
|
||||
+ if (ret != 0) {
|
||||
+ brcmf_err("brcmf_prot_attach failed\n");
|
||||
+ goto fail;
|
||||
+ }
|
||||
+
|
||||
+ /* Attach to events important for core code */
|
||||
+ brcmf_fweh_register(drvr, BRCMF_E_PSM_WATCHDOG,
|
||||
+ brcmf_psm_watchdog_notify);
|
||||
+
|
||||
+ /* attach firmware event handler */
|
||||
+ brcmf_fweh_attach(drvr);
|
||||
+
|
||||
+ return ret;
|
||||
+
|
||||
+fail:
|
||||
+ brcmf_detach(dev);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
|
||||
void brcmf_bus_add_txhdrlen(struct device *dev, uint len)
|
||||
{
|
||||
@@ -0,0 +1,451 @@
|
||||
From 856d5a011c86b59f6564be4508912fb1d866adfc Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 22 Mar 2018 21:28:23 +0100
|
||||
Subject: [PATCH] brcmfmac: allocate struct brcmf_pub instance using
|
||||
wiphy_new()
|
||||
|
||||
Rework the driver so the wiphy instance holds the main driver information
|
||||
in its private buffer. Previously it held struct brcmf_cfg80211_info
|
||||
instance so a bit of reorg was needed. This was done so that the wiphy
|
||||
name or its parent device can be shown in debug output.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/btcoex.c | 2 +-
|
||||
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 86 ++++++++++------------
|
||||
.../broadcom/brcm80211/brcmfmac/cfg80211.h | 17 +++--
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/common.c | 2 +
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/core.c | 27 +++++--
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/core.h | 1 +
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | 2 +-
|
||||
7 files changed, 76 insertions(+), 61 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/btcoex.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/btcoex.c
|
||||
@@ -464,7 +464,7 @@ static void brcmf_btcoex_dhcp_end(struct
|
||||
int brcmf_btcoex_set_mode(struct brcmf_cfg80211_vif *vif,
|
||||
enum brcmf_btcoex_mode mode, u16 duration)
|
||||
{
|
||||
- struct brcmf_cfg80211_info *cfg = wiphy_priv(vif->wdev.wiphy);
|
||||
+ struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(vif->wdev.wiphy);
|
||||
struct brcmf_btcoex_info *btci = cfg->btcoex;
|
||||
struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -783,7 +783,7 @@ s32 brcmf_notify_escan_complete(struct b
|
||||
static int brcmf_cfg80211_del_ap_iface(struct wiphy *wiphy,
|
||||
struct wireless_dev *wdev)
|
||||
{
|
||||
- struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
|
||||
+ struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
struct net_device *ndev = wdev->netdev;
|
||||
struct brcmf_if *ifp = netdev_priv(ndev);
|
||||
int ret;
|
||||
@@ -816,7 +816,7 @@ err_unarm:
|
||||
static
|
||||
int brcmf_cfg80211_del_iface(struct wiphy *wiphy, struct wireless_dev *wdev)
|
||||
{
|
||||
- struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
|
||||
+ struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
struct net_device *ndev = wdev->netdev;
|
||||
|
||||
if (ndev && ndev == cfg_to_ndev(cfg))
|
||||
@@ -861,7 +861,7 @@ brcmf_cfg80211_change_iface(struct wiphy
|
||||
enum nl80211_iftype type, u32 *flags,
|
||||
struct vif_params *params)
|
||||
{
|
||||
- struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
|
||||
+ struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
struct brcmf_if *ifp = netdev_priv(ndev);
|
||||
struct brcmf_cfg80211_vif *vif = ifp->vif;
|
||||
s32 infra = 0;
|
||||
@@ -2175,17 +2175,15 @@ static s32
|
||||
brcmf_cfg80211_get_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev,
|
||||
s32 *dbm)
|
||||
{
|
||||
- struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
- struct net_device *ndev = cfg_to_ndev(cfg);
|
||||
- struct brcmf_if *ifp = netdev_priv(ndev);
|
||||
+ struct brcmf_cfg80211_vif *vif = wdev_to_vif(wdev);
|
||||
s32 qdbm = 0;
|
||||
s32 err;
|
||||
|
||||
brcmf_dbg(TRACE, "Enter\n");
|
||||
- if (!check_vif_up(ifp->vif))
|
||||
+ if (!check_vif_up(vif))
|
||||
return -EIO;
|
||||
|
||||
- err = brcmf_fil_iovar_int_get(ifp, "qtxpower", &qdbm);
|
||||
+ err = brcmf_fil_iovar_int_get(vif->ifp, "qtxpower", &qdbm);
|
||||
if (err) {
|
||||
brcmf_err("error (%d)\n", err);
|
||||
goto done;
|
||||
@@ -3398,7 +3396,7 @@ brcmf_cfg80211_sched_scan_start(struct w
|
||||
struct cfg80211_sched_scan_request *req)
|
||||
{
|
||||
struct brcmf_if *ifp = netdev_priv(ndev);
|
||||
- struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
|
||||
+ struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
|
||||
brcmf_dbg(SCAN, "Enter n_match_sets:%d n_ssids:%d\n",
|
||||
req->n_match_sets, req->n_ssids);
|
||||
@@ -5192,6 +5190,12 @@ static struct cfg80211_ops brcmf_cfg8021
|
||||
.update_connect_params = brcmf_cfg80211_update_conn_params,
|
||||
};
|
||||
|
||||
+struct cfg80211_ops *brcmf_cfg80211_get_ops(void)
|
||||
+{
|
||||
+ return kmemdup(&brcmf_cfg80211_ops, sizeof(brcmf_cfg80211_ops),
|
||||
+ GFP_KERNEL);
|
||||
+}
|
||||
+
|
||||
struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg,
|
||||
enum nl80211_iftype type)
|
||||
{
|
||||
@@ -5866,7 +5870,7 @@ static void brcmf_update_bw40_channel_fl
|
||||
static int brcmf_construct_chaninfo(struct brcmf_cfg80211_info *cfg,
|
||||
u32 bw_cap[])
|
||||
{
|
||||
- struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg));
|
||||
+ struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
|
||||
struct ieee80211_supported_band *band;
|
||||
struct ieee80211_channel *channel;
|
||||
struct wiphy *wiphy;
|
||||
@@ -5981,7 +5985,7 @@ fail_pbuf:
|
||||
|
||||
static int brcmf_enable_bw40_2g(struct brcmf_cfg80211_info *cfg)
|
||||
{
|
||||
- struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg));
|
||||
+ struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
|
||||
struct ieee80211_supported_band *band;
|
||||
struct brcmf_fil_bwcap_le band_bwcap;
|
||||
struct brcmf_chanspec_list *list;
|
||||
@@ -6166,10 +6170,10 @@ static void brcmf_update_vht_cap(struct
|
||||
}
|
||||
}
|
||||
|
||||
-static int brcmf_setup_wiphybands(struct wiphy *wiphy)
|
||||
+static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
|
||||
{
|
||||
- struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
|
||||
- struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg));
|
||||
+ struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
|
||||
+ struct wiphy *wiphy;
|
||||
u32 nmode = 0;
|
||||
u32 vhtmode = 0;
|
||||
u32 bw_cap[2] = { WLC_BW_20MHZ_BIT, WLC_BW_20MHZ_BIT };
|
||||
@@ -6764,8 +6768,8 @@ static s32 brcmf_translate_country_code(
|
||||
static void brcmf_cfg80211_reg_notifier(struct wiphy *wiphy,
|
||||
struct regulatory_request *req)
|
||||
{
|
||||
- struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
|
||||
- struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg));
|
||||
+ struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
+ struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
|
||||
struct brcmf_fil_country_le ccreq;
|
||||
s32 err;
|
||||
int i;
|
||||
@@ -6800,7 +6804,7 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
brcmf_err("Firmware rejected country setting\n");
|
||||
return;
|
||||
}
|
||||
- brcmf_setup_wiphybands(wiphy);
|
||||
+ brcmf_setup_wiphybands(cfg);
|
||||
}
|
||||
|
||||
static void brcmf_free_wiphy(struct wiphy *wiphy)
|
||||
@@ -6827,17 +6831,15 @@ static void brcmf_free_wiphy(struct wiph
|
||||
if (wiphy->wowlan != &brcmf_wowlan_support)
|
||||
kfree(wiphy->wowlan);
|
||||
#endif
|
||||
- wiphy_free(wiphy);
|
||||
}
|
||||
|
||||
struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
|
||||
- struct device *busdev,
|
||||
+ struct cfg80211_ops *ops,
|
||||
bool p2pdev_forced)
|
||||
{
|
||||
+ struct wiphy *wiphy = drvr->wiphy;
|
||||
struct net_device *ndev = brcmf_get_ifp(drvr, 0)->ndev;
|
||||
struct brcmf_cfg80211_info *cfg;
|
||||
- struct wiphy *wiphy;
|
||||
- struct cfg80211_ops *ops;
|
||||
struct brcmf_cfg80211_vif *vif;
|
||||
struct brcmf_if *ifp;
|
||||
s32 err = 0;
|
||||
@@ -6849,26 +6851,13 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- ops = kmemdup(&brcmf_cfg80211_ops, sizeof(*ops), GFP_KERNEL);
|
||||
- if (!ops)
|
||||
- return NULL;
|
||||
-
|
||||
- ifp = netdev_priv(ndev);
|
||||
-#ifdef CONFIG_PM
|
||||
- if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_WOWL_GTK))
|
||||
- ops->set_rekey_data = brcmf_cfg80211_set_rekey_data;
|
||||
-#endif
|
||||
- wiphy = wiphy_new(ops, sizeof(struct brcmf_cfg80211_info));
|
||||
- if (!wiphy) {
|
||||
+ cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
|
||||
+ if (!cfg) {
|
||||
brcmf_err("Could not allocate wiphy device\n");
|
||||
- goto ops_out;
|
||||
+ return NULL;
|
||||
}
|
||||
- memcpy(wiphy->perm_addr, drvr->mac, ETH_ALEN);
|
||||
- set_wiphy_dev(wiphy, busdev);
|
||||
|
||||
- cfg = wiphy_priv(wiphy);
|
||||
cfg->wiphy = wiphy;
|
||||
- cfg->ops = ops;
|
||||
cfg->pub = drvr;
|
||||
init_vif_event(&cfg->vif_event);
|
||||
INIT_LIST_HEAD(&cfg->vif_list);
|
||||
@@ -6877,6 +6866,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
if (IS_ERR(vif))
|
||||
goto wiphy_out;
|
||||
|
||||
+ ifp = netdev_priv(ndev);
|
||||
vif->ifp = ifp;
|
||||
vif->wdev.netdev = ndev;
|
||||
ndev->ieee80211_ptr = &vif->wdev;
|
||||
@@ -6903,6 +6893,11 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
if (err < 0)
|
||||
goto priv_out;
|
||||
|
||||
+ /* regulatory notifer below needs access to cfg so
|
||||
+ * assign it now.
|
||||
+ */
|
||||
+ drvr->config = cfg;
|
||||
+
|
||||
brcmf_dbg(INFO, "Registering custom regulatory\n");
|
||||
wiphy->reg_notifier = brcmf_cfg80211_reg_notifier;
|
||||
wiphy->regulatory_flags |= REGULATORY_CUSTOM_REG;
|
||||
@@ -6916,13 +6911,17 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
cap = &wiphy->bands[NL80211_BAND_2GHZ]->ht_cap.cap;
|
||||
*cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
|
||||
}
|
||||
+#ifdef CONFIG_PM
|
||||
+ if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_WOWL_GTK))
|
||||
+ ops->set_rekey_data = brcmf_cfg80211_set_rekey_data;
|
||||
+#endif
|
||||
err = wiphy_register(wiphy);
|
||||
if (err < 0) {
|
||||
brcmf_err("Could not register wiphy device (%d)\n", err);
|
||||
goto priv_out;
|
||||
}
|
||||
|
||||
- err = brcmf_setup_wiphybands(wiphy);
|
||||
+ err = brcmf_setup_wiphybands(cfg);
|
||||
if (err) {
|
||||
brcmf_err("Setting wiphy bands failed (%d)\n", err);
|
||||
goto wiphy_unreg_out;
|
||||
@@ -6939,12 +6938,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
else
|
||||
*cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
|
||||
}
|
||||
- /* p2p might require that "if-events" get processed by fweh. So
|
||||
- * activate the already registered event handlers now and activate
|
||||
- * the rest when initialization has completed. drvr->config needs to
|
||||
- * be assigned before activating events.
|
||||
- */
|
||||
- drvr->config = cfg;
|
||||
+
|
||||
err = brcmf_fweh_activate_events(ifp);
|
||||
if (err) {
|
||||
brcmf_err("FWEH activation failed (%d)\n", err);
|
||||
@@ -7004,8 +6998,7 @@ priv_out:
|
||||
ifp->vif = NULL;
|
||||
wiphy_out:
|
||||
brcmf_free_wiphy(wiphy);
|
||||
-ops_out:
|
||||
- kfree(ops);
|
||||
+ kfree(cfg);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -7016,7 +7009,8 @@ void brcmf_cfg80211_detach(struct brcmf_
|
||||
|
||||
brcmf_btcoex_detach(cfg);
|
||||
wiphy_unregister(cfg->wiphy);
|
||||
- kfree(cfg->ops);
|
||||
+ kfree(cfg->pub->cfg80211_ops);
|
||||
wl_deinit_priv(cfg);
|
||||
brcmf_free_wiphy(cfg->wiphy);
|
||||
+ kfree(cfg);
|
||||
}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
|
||||
@@ -290,7 +290,7 @@ struct brcmf_cfg80211_wowl {
|
||||
*/
|
||||
struct brcmf_cfg80211_info {
|
||||
struct wiphy *wiphy;
|
||||
- struct cfg80211_ops *ops;
|
||||
+// struct cfg80211_ops *ops; /* OpenWrt keeps it in the struct brcmf_pub */
|
||||
struct brcmf_cfg80211_conf *conf;
|
||||
struct brcmf_p2p_info p2p;
|
||||
struct brcmf_btcoex_info *btcoex;
|
||||
@@ -342,20 +342,24 @@ static inline struct wiphy *cfg_to_wiphy
|
||||
|
||||
static inline struct brcmf_cfg80211_info *wiphy_to_cfg(struct wiphy *w)
|
||||
{
|
||||
- return (struct brcmf_cfg80211_info *)(wiphy_priv(w));
|
||||
+ struct brcmf_pub *drvr = wiphy_priv(w);
|
||||
+ return drvr->config;
|
||||
}
|
||||
|
||||
static inline struct brcmf_cfg80211_info *wdev_to_cfg(struct wireless_dev *wd)
|
||||
{
|
||||
- return (struct brcmf_cfg80211_info *)(wdev_priv(wd));
|
||||
+ return wiphy_to_cfg(wd->wiphy);
|
||||
+}
|
||||
+
|
||||
+static inline struct brcmf_cfg80211_vif *wdev_to_vif(struct wireless_dev *wdev)
|
||||
+{
|
||||
+ return container_of(wdev, struct brcmf_cfg80211_vif, wdev);
|
||||
}
|
||||
|
||||
static inline
|
||||
struct net_device *cfg_to_ndev(struct brcmf_cfg80211_info *cfg)
|
||||
{
|
||||
- struct brcmf_cfg80211_vif *vif;
|
||||
- vif = list_first_entry(&cfg->vif_list, struct brcmf_cfg80211_vif, list);
|
||||
- return vif->wdev.netdev;
|
||||
+ return brcmf_get_ifp(cfg->pub, 0)->ndev;
|
||||
}
|
||||
|
||||
static inline struct brcmf_cfg80211_info *ndev_to_cfg(struct net_device *ndev)
|
||||
@@ -382,11 +386,12 @@ brcmf_cfg80211_connect_info *cfg_to_conn
|
||||
}
|
||||
|
||||
struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
|
||||
- struct device *busdev,
|
||||
+ struct cfg80211_ops *ops,
|
||||
bool p2pdev_forced);
|
||||
void brcmf_cfg80211_detach(struct brcmf_cfg80211_info *cfg);
|
||||
s32 brcmf_cfg80211_up(struct net_device *ndev);
|
||||
s32 brcmf_cfg80211_down(struct net_device *ndev);
|
||||
+struct cfg80211_ops *brcmf_cfg80211_get_ops(void);
|
||||
enum nl80211_iftype brcmf_cfg80211_get_iftype(struct brcmf_if *ifp);
|
||||
|
||||
struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg,
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
@@ -124,6 +124,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
|
||||
brcmf_err("Retreiving cur_etheraddr failed, %d\n", err);
|
||||
goto done;
|
||||
}
|
||||
+ memcpy(ifp->drvr->wiphy->perm_addr, ifp->drvr->mac, ETH_ALEN);
|
||||
memcpy(ifp->drvr->mac, ifp->mac_addr, sizeof(ifp->drvr->mac));
|
||||
|
||||
err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_REVINFO,
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1036,7 +1036,7 @@ int brcmf_bus_started(struct device *dev
|
||||
|
||||
brcmf_fws_add_interface(ifp);
|
||||
|
||||
- drvr->config = brcmf_cfg80211_attach(drvr, bus_if->dev,
|
||||
+ drvr->config = brcmf_cfg80211_attach(drvr, drvr->cfg80211_ops,
|
||||
drvr->settings->p2p_enable);
|
||||
if (drvr->config == NULL) {
|
||||
ret = -ENOMEM;
|
||||
@@ -1095,17 +1095,26 @@ fail:
|
||||
|
||||
int brcmf_attach(struct device *dev, struct brcmf_mp_device *settings)
|
||||
{
|
||||
+ struct wiphy *wiphy;
|
||||
+ struct cfg80211_ops *ops;
|
||||
struct brcmf_pub *drvr = NULL;
|
||||
int ret = 0;
|
||||
int i;
|
||||
|
||||
brcmf_dbg(TRACE, "Enter\n");
|
||||
|
||||
- /* Allocate primary brcmf_info */
|
||||
- drvr = kzalloc(sizeof(*drvr), GFP_ATOMIC);
|
||||
- if (!drvr)
|
||||
+ ops = brcmf_cfg80211_get_ops();
|
||||
+ if (!ops)
|
||||
return -ENOMEM;
|
||||
|
||||
+ wiphy = wiphy_new(ops, sizeof(*drvr));
|
||||
+ if (!wiphy)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ set_wiphy_dev(wiphy, dev);
|
||||
+ drvr = wiphy_priv(wiphy);
|
||||
+ drvr->wiphy = wiphy;
|
||||
+
|
||||
for (i = 0; i < ARRAY_SIZE(drvr->if2bss); i++)
|
||||
drvr->if2bss[i] = BRCMF_BSSIDX_INVALID;
|
||||
|
||||
@@ -1134,10 +1143,12 @@ int brcmf_attach(struct device *dev, str
|
||||
/* attach firmware event handler */
|
||||
brcmf_fweh_attach(drvr);
|
||||
|
||||
+ drvr->cfg80211_ops = ops;
|
||||
return ret;
|
||||
|
||||
fail:
|
||||
brcmf_detach(dev);
|
||||
+ kfree(ops);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1195,6 +1206,7 @@ void brcmf_detach(struct device *dev)
|
||||
brcmf_remove_interface(drvr->iflist[i], false);
|
||||
|
||||
brcmf_cfg80211_detach(drvr->config);
|
||||
+ drvr->config = NULL;
|
||||
|
||||
brcmf_fws_deinit(drvr);
|
||||
|
||||
@@ -1204,7 +1216,7 @@ void brcmf_detach(struct device *dev)
|
||||
|
||||
brcmf_debug_detach(drvr);
|
||||
bus_if->drvr = NULL;
|
||||
- kfree(drvr);
|
||||
+ wiphy_free(drvr->wiphy);
|
||||
}
|
||||
|
||||
s32 brcmf_iovar_data_set(struct device *dev, char *name, void *data, u32 len)
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
|
||||
@@ -108,6 +108,7 @@ struct brcmf_pub {
|
||||
/* Linkage ponters */
|
||||
struct brcmf_bus *bus_if;
|
||||
struct brcmf_proto *proto;
|
||||
+ struct wiphy *wiphy;
|
||||
struct brcmf_cfg80211_info *config;
|
||||
|
||||
/* Internal brcmf items */
|
||||
@@ -143,6 +144,9 @@ struct brcmf_pub {
|
||||
struct notifier_block inetaddr_notifier;
|
||||
struct notifier_block inet6addr_notifier;
|
||||
struct brcmf_mp_device *settings;
|
||||
+
|
||||
+ /* Pointer needed by OpenWrt due to backporting some fixes */
|
||||
+ void *cfg80211_ops;
|
||||
};
|
||||
|
||||
/* forward declarations */
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
|
||||
@@ -2236,7 +2236,7 @@ fail:
|
||||
*/
|
||||
int brcmf_p2p_del_vif(struct wiphy *wiphy, struct wireless_dev *wdev)
|
||||
{
|
||||
- struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
|
||||
+ struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
struct brcmf_p2p_info *p2p = &cfg->p2p;
|
||||
struct brcmf_cfg80211_vif *vif;
|
||||
enum nl80211_iftype iftype;
|
||||
@@ -24,7 +24,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -6485,6 +6485,7 @@ static int brcmf_setup_wiphy(struct wiph
|
||||
@@ -6489,6 +6489,7 @@ static int brcmf_setup_wiphy(struct wiph
|
||||
BIT(NL80211_BSS_SELECT_ATTR_RSSI_ADJUST);
|
||||
|
||||
wiphy->flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT |
|
||||
|
||||
@@ -45,7 +45,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
void brcmf_txcomplete(struct device *dev, struct sk_buff *txp, bool success);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1159,6 +1159,14 @@ void brcmf_dev_reset(struct device *dev)
|
||||
@@ -1175,6 +1175,14 @@ void brcmf_dev_reset(struct device *dev)
|
||||
brcmf_fil_cmd_int_set(drvr->iflist[0], BRCMF_C_TERMINATED, 1);
|
||||
}
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
{
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
|
||||
@@ -121,6 +121,7 @@ struct brcmf_pub {
|
||||
@@ -122,6 +122,7 @@ struct brcmf_pub {
|
||||
|
||||
struct brcmf_if *iflist[BRCMF_MAX_IFS];
|
||||
s32 if2bss[BRCMF_MAX_IFS];
|
||||
@@ -83,7 +83,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
struct mutex proto_block;
|
||||
unsigned char proto_buf[BRCMF_DCMD_MAXLEN];
|
||||
@@ -215,6 +216,7 @@ void brcmf_txflowblock_if(struct brcmf_i
|
||||
@@ -219,6 +220,7 @@ void brcmf_txflowblock_if(struct brcmf_i
|
||||
enum brcmf_netif_stop_reason reason, bool state);
|
||||
void brcmf_txfinalize(struct brcmf_if *ifp, struct sk_buff *txp, bool success);
|
||||
void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb);
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
From 2fef681a4cf7994c882190fd2417b95f30510afb Mon Sep 17 00:00:00 2001
|
||||
From: Jia-Shyr Chuang <saint.chuang@cypress.com>
|
||||
Date: Wed, 15 Aug 2018 04:23:09 -0500
|
||||
Subject: [PATCH] brcmfmac: add CYW89342 mini-PCIe device
|
||||
|
||||
CYW89342 is a 2x2 MIMO, 802.11a/b/g/n/ac for WLAN. It is a member of
|
||||
4355/4359 family.
|
||||
|
||||
Signed-off-by: Jia-Shyr Chuang <saint.chuang@cypress.com>
|
||||
Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -1967,6 +1967,7 @@ static const struct dev_pm_ops brcmf_pci
|
||||
|
||||
static struct pci_device_id brcmf_pcie_devid_table[] = {
|
||||
BRCMF_PCIE_DEVICE(BRCM_PCIE_4350_DEVICE_ID),
|
||||
+ BRCMF_PCIE_DEVICE_SUB(0x4355, BRCM_PCIE_VENDOR_ID_BROADCOM, 0x4355),
|
||||
BRCMF_PCIE_DEVICE(BRCM_PCIE_4356_DEVICE_ID),
|
||||
BRCMF_PCIE_DEVICE(BRCM_PCIE_43567_DEVICE_ID),
|
||||
BRCMF_PCIE_DEVICE(BRCM_PCIE_43570_DEVICE_ID),
|
||||
@@ -0,0 +1,117 @@
|
||||
From: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Wed, 5 Sep 2018 09:48:58 +0200
|
||||
Subject: [PATCH] brcmfmac: fix for proper support of 160MHz bandwidth
|
||||
|
||||
Decoding of firmware channel information was not complete for 160MHz
|
||||
support. This resulted in the following warning:
|
||||
|
||||
WARNING: CPU: 2 PID: 2222 at .../broadcom/brcm80211/brcmutil/d11.c:196
|
||||
brcmu_d11ac_decchspec+0x2e/0x100 [brcmutil]
|
||||
Modules linked in: brcmfmac(O) brcmutil(O) sha256_generic cfg80211 ...
|
||||
CPU: 2 PID: 2222 Comm: kworker/2:0 Tainted: G O
|
||||
4.17.0-wt-testing-x64-00002-gf1bed50 #1
|
||||
Hardware name: Dell Inc. Latitude E6410/07XJP9, BIOS A07 02/15/2011
|
||||
Workqueue: events request_firmware_work_func
|
||||
RIP: 0010:brcmu_d11ac_decchspec+0x2e/0x100 [brcmutil]
|
||||
RSP: 0018:ffffc90000047bd0 EFLAGS: 00010206
|
||||
RAX: 000000000000e832 RBX: ffff8801146fe910 RCX: ffff8801146fd3c0
|
||||
RDX: 0000000000002800 RSI: 0000000000000070 RDI: ffffc90000047c30
|
||||
RBP: ffffc90000047bd0 R08: 0000000000000000 R09: ffffffffa0798c80
|
||||
R10: ffff88012bca55e0 R11: ffff880110a4ea00 R12: ffff8801146f8000
|
||||
R13: ffffc90000047c30 R14: ffff8801146fe930 R15: ffff8801138e02e0
|
||||
FS: 0000000000000000(0000) GS:ffff88012bc80000(0000) knlGS:0000000000000000
|
||||
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
|
||||
CR2: 00007f18ce8b8070 CR3: 000000000200a003 CR4: 00000000000206e0
|
||||
Call Trace:
|
||||
brcmf_setup_wiphybands+0x212/0x780 [brcmfmac]
|
||||
brcmf_cfg80211_attach+0xae2/0x11a0 [brcmfmac]
|
||||
brcmf_attach+0x1fc/0x4b0 [brcmfmac]
|
||||
? __kmalloc+0x13c/0x1c0
|
||||
brcmf_pcie_setup+0x99b/0xe00 [brcmfmac]
|
||||
brcmf_fw_request_done+0x16a/0x1f0 [brcmfmac]
|
||||
request_firmware_work_func+0x36/0x60
|
||||
process_one_work+0x146/0x350
|
||||
worker_thread+0x4a/0x3b0
|
||||
kthread+0x102/0x140
|
||||
? process_one_work+0x350/0x350
|
||||
? kthread_bind+0x20/0x20
|
||||
ret_from_fork+0x35/0x40
|
||||
Code: 66 90 0f b7 07 55 48 89 e5 89 c2 88 47 02 88 47 03 66 81 e2 00 38
|
||||
66 81 fa 00 18 74 6e 66 81 fa 00 20 74 39 66 81 fa 00 10 74 14 <0f>
|
||||
0b 66 25 00 c0 74 20 66 3d 00 c0 75 20 c6 47 04 01 5d c3 66
|
||||
---[ end trace 550c46682415b26d ]---
|
||||
brcmfmac: brcmf_construct_chaninfo: Ignoring unexpected firmware channel 50
|
||||
|
||||
This patch adds the missing stuff to properly handle this.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
---
|
||||
.../net/wireless/broadcom/brcm80211/brcmutil/d11.c | 34 +++++++++++++++++++++-
|
||||
.../broadcom/brcm80211/include/brcmu_wifi.h | 2 ++
|
||||
2 files changed, 35 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c
|
||||
@@ -77,6 +77,8 @@ static u16 d11ac_bw(enum brcmu_chan_bw b
|
||||
return BRCMU_CHSPEC_D11AC_BW_40;
|
||||
case BRCMU_CHAN_BW_80:
|
||||
return BRCMU_CHSPEC_D11AC_BW_80;
|
||||
+ case BRCMU_CHAN_BW_160:
|
||||
+ return BRCMU_CHSPEC_D11AC_BW_160;
|
||||
default:
|
||||
WARN_ON(1);
|
||||
}
|
||||
@@ -190,8 +192,38 @@ static void brcmu_d11ac_decchspec(struct
|
||||
break;
|
||||
}
|
||||
break;
|
||||
- case BRCMU_CHSPEC_D11AC_BW_8080:
|
||||
case BRCMU_CHSPEC_D11AC_BW_160:
|
||||
+ switch (ch->sb) {
|
||||
+ case BRCMU_CHAN_SB_LLL:
|
||||
+ ch->control_ch_num -= CH_70MHZ_APART;
|
||||
+ break;
|
||||
+ case BRCMU_CHAN_SB_LLU:
|
||||
+ ch->control_ch_num -= CH_50MHZ_APART;
|
||||
+ break;
|
||||
+ case BRCMU_CHAN_SB_LUL:
|
||||
+ ch->control_ch_num -= CH_30MHZ_APART;
|
||||
+ break;
|
||||
+ case BRCMU_CHAN_SB_LUU:
|
||||
+ ch->control_ch_num -= CH_10MHZ_APART;
|
||||
+ break;
|
||||
+ case BRCMU_CHAN_SB_ULL:
|
||||
+ ch->control_ch_num += CH_10MHZ_APART;
|
||||
+ break;
|
||||
+ case BRCMU_CHAN_SB_ULU:
|
||||
+ ch->control_ch_num += CH_30MHZ_APART;
|
||||
+ break;
|
||||
+ case BRCMU_CHAN_SB_UUL:
|
||||
+ ch->control_ch_num += CH_50MHZ_APART;
|
||||
+ break;
|
||||
+ case BRCMU_CHAN_SB_UUU:
|
||||
+ ch->control_ch_num += CH_70MHZ_APART;
|
||||
+ break;
|
||||
+ default:
|
||||
+ WARN_ON_ONCE(1);
|
||||
+ break;
|
||||
+ }
|
||||
+ break;
|
||||
+ case BRCMU_CHSPEC_D11AC_BW_8080:
|
||||
default:
|
||||
WARN_ON_ONCE(1);
|
||||
break;
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/include/brcmu_wifi.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/include/brcmu_wifi.h
|
||||
@@ -29,6 +29,8 @@
|
||||
#define CH_UPPER_SB 0x01
|
||||
#define CH_LOWER_SB 0x02
|
||||
#define CH_EWA_VALID 0x04
|
||||
+#define CH_70MHZ_APART 14
|
||||
+#define CH_50MHZ_APART 10
|
||||
#define CH_30MHZ_APART 6
|
||||
#define CH_20MHZ_APART 4
|
||||
#define CH_10MHZ_APART 2
|
||||
@@ -0,0 +1,28 @@
|
||||
From: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Wed, 5 Sep 2018 09:48:59 +0200
|
||||
Subject: [PATCH] brcmfmac: increase buffer for obtaining firmware capabilities
|
||||
|
||||
When obtaining the firmware capability a buffer is provided of 512
|
||||
bytes. However, if all features in firmware are supported the buffer
|
||||
needs to be 565 bytes as otherwise truncated information is retrieved
|
||||
from firmware. Increasing the buffer to 768 bytes on stack.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
|
||||
@@ -151,7 +151,7 @@ static void brcmf_feat_iovar_int_get(str
|
||||
}
|
||||
}
|
||||
|
||||
-#define MAX_CAPS_BUFFER_SIZE 512
|
||||
+#define MAX_CAPS_BUFFER_SIZE 768
|
||||
static void brcmf_feat_firmware_capabilities(struct brcmf_if *ifp)
|
||||
{
|
||||
char caps[MAX_CAPS_BUFFER_SIZE];
|
||||
@@ -0,0 +1,67 @@
|
||||
From edb6d6885bef82d1eac432dbeca9fbf4ec349d7e Mon Sep 17 00:00:00 2001
|
||||
From: Chung-Hsien Hsu <stanley.hsu@cypress.com>
|
||||
Date: Thu, 27 Sep 2018 14:59:44 +0000
|
||||
Subject: [PATCH] brcmfmac: reduce timeout for action frame scan
|
||||
|
||||
Finding a common channel to send an action frame out is required for
|
||||
some action types. Since a loop with several scan retry is used to find
|
||||
the channel, a short wait time could be considered for each attempt.
|
||||
This patch reduces the wait time from 1500 to 450 msec for each action
|
||||
frame scan.
|
||||
|
||||
This patch fixes the WFA p2p certification 5.1.20 failure caused by the
|
||||
long action frame send time.
|
||||
|
||||
Signed-off-by: Chung-Hsien Hsu <stanley.hsu@cypress.com>
|
||||
Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | 9 ++++-----
|
||||
1 file changed, 4 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
|
||||
@@ -74,7 +74,7 @@
|
||||
#define P2P_AF_MAX_WAIT_TIME msecs_to_jiffies(2000)
|
||||
#define P2P_INVALID_CHANNEL -1
|
||||
#define P2P_CHANNEL_SYNC_RETRY 5
|
||||
-#define P2P_AF_FRM_SCAN_MAX_WAIT msecs_to_jiffies(1500)
|
||||
+#define P2P_AF_FRM_SCAN_MAX_WAIT msecs_to_jiffies(450)
|
||||
#define P2P_DEFAULT_SLEEP_TIME_VSDB 200
|
||||
|
||||
/* WiFi P2P Public Action Frame OUI Subtypes */
|
||||
@@ -1141,7 +1141,6 @@ static s32 brcmf_p2p_af_searching_channe
|
||||
{
|
||||
struct afx_hdl *afx_hdl = &p2p->afx_hdl;
|
||||
struct brcmf_cfg80211_vif *pri_vif;
|
||||
- unsigned long duration;
|
||||
s32 retry;
|
||||
|
||||
brcmf_dbg(TRACE, "Enter\n");
|
||||
@@ -1157,7 +1156,6 @@ static s32 brcmf_p2p_af_searching_channe
|
||||
* pending action frame tx is cancelled.
|
||||
*/
|
||||
retry = 0;
|
||||
- duration = msecs_to_jiffies(P2P_AF_FRM_SCAN_MAX_WAIT);
|
||||
while ((retry < P2P_CHANNEL_SYNC_RETRY) &&
|
||||
(afx_hdl->peer_chan == P2P_INVALID_CHANNEL)) {
|
||||
afx_hdl->is_listen = false;
|
||||
@@ -1165,7 +1163,8 @@ static s32 brcmf_p2p_af_searching_channe
|
||||
retry);
|
||||
/* search peer on peer's listen channel */
|
||||
schedule_work(&afx_hdl->afx_work);
|
||||
- wait_for_completion_timeout(&afx_hdl->act_frm_scan, duration);
|
||||
+ wait_for_completion_timeout(&afx_hdl->act_frm_scan,
|
||||
+ P2P_AF_FRM_SCAN_MAX_WAIT);
|
||||
if ((afx_hdl->peer_chan != P2P_INVALID_CHANNEL) ||
|
||||
(!test_bit(BRCMF_P2P_STATUS_FINDING_COMMON_CHANNEL,
|
||||
&p2p->status)))
|
||||
@@ -1178,7 +1177,7 @@ static s32 brcmf_p2p_af_searching_channe
|
||||
afx_hdl->is_listen = true;
|
||||
schedule_work(&afx_hdl->afx_work);
|
||||
wait_for_completion_timeout(&afx_hdl->act_frm_scan,
|
||||
- duration);
|
||||
+ P2P_AF_FRM_SCAN_MAX_WAIT);
|
||||
}
|
||||
if ((afx_hdl->peer_chan != P2P_INVALID_CHANNEL) ||
|
||||
(!test_bit(BRCMF_P2P_STATUS_FINDING_COMMON_CHANNEL,
|
||||
@@ -0,0 +1,79 @@
|
||||
From fbf07000960d9c8a13fdc17c6de0230d681c7543 Mon Sep 17 00:00:00 2001
|
||||
From: Chung-Hsien Hsu <stanley.hsu@cypress.com>
|
||||
Date: Thu, 27 Sep 2018 14:59:49 +0000
|
||||
Subject: [PATCH] brcmfmac: fix full timeout waiting for action frame
|
||||
on-channel tx
|
||||
|
||||
The driver sends an action frame down and waits for a completion signal
|
||||
triggered by the received BRCMF_E_ACTION_FRAME_OFF_CHAN_COMPLETE event
|
||||
to continue the process. However, the action frame could be transmitted
|
||||
either on the current channel or on an off channel. For the on-channel
|
||||
case, only BRCMF_E_ACTION_FRAME_COMPLETE event will be received when
|
||||
the frame is transmitted, which make the driver always wait a full
|
||||
timeout duration. This patch has the completion signal be triggered by
|
||||
receiving the BRCMF_E_ACTION_FRAME_COMPLETE event for the on-channel
|
||||
case.
|
||||
|
||||
This change fixes WFA p2p certification 5.1.19 failure.
|
||||
|
||||
Signed-off-by: Chung-Hsien Hsu <stanley.hsu@cypress.com>
|
||||
Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | 17 +++++++++++++++--
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h | 2 ++
|
||||
2 files changed, 17 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
|
||||
@@ -1464,10 +1464,12 @@ int brcmf_p2p_notify_action_tx_complete(
|
||||
return 0;
|
||||
|
||||
if (e->event_code == BRCMF_E_ACTION_FRAME_COMPLETE) {
|
||||
- if (e->status == BRCMF_E_STATUS_SUCCESS)
|
||||
+ if (e->status == BRCMF_E_STATUS_SUCCESS) {
|
||||
set_bit(BRCMF_P2P_STATUS_ACTION_TX_COMPLETED,
|
||||
&p2p->status);
|
||||
- else {
|
||||
+ if (!p2p->wait_for_offchan_complete)
|
||||
+ complete(&p2p->send_af_done);
|
||||
+ } else {
|
||||
set_bit(BRCMF_P2P_STATUS_ACTION_TX_NOACK, &p2p->status);
|
||||
/* If there is no ack, we don't need to wait for
|
||||
* WLC_E_ACTION_FRAME_OFFCHAN_COMPLETE event
|
||||
@@ -1518,6 +1520,17 @@ static s32 brcmf_p2p_tx_action_frame(str
|
||||
p2p->af_sent_channel = le32_to_cpu(af_params->channel);
|
||||
p2p->af_tx_sent_jiffies = jiffies;
|
||||
|
||||
+ if (test_bit(BRCMF_P2P_STATUS_DISCOVER_LISTEN, &p2p->status) &&
|
||||
+ p2p->af_sent_channel ==
|
||||
+ ieee80211_frequency_to_channel(p2p->remain_on_channel.center_freq))
|
||||
+ p2p->wait_for_offchan_complete = false;
|
||||
+ else
|
||||
+ p2p->wait_for_offchan_complete = true;
|
||||
+
|
||||
+ brcmf_dbg(TRACE, "Waiting for %s tx completion event\n",
|
||||
+ (p2p->wait_for_offchan_complete) ?
|
||||
+ "off-channel" : "on-channel");
|
||||
+
|
||||
timeout = wait_for_completion_timeout(&p2p->send_af_done,
|
||||
P2P_AF_MAX_WAIT_TIME);
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h
|
||||
@@ -124,6 +124,7 @@ struct afx_hdl {
|
||||
* @gon_req_action: about to send go negotiation requets frame.
|
||||
* @block_gon_req_tx: drop tx go negotiation requets frame.
|
||||
* @p2pdev_dynamically: is p2p device if created by module param or supplicant.
|
||||
+ * @wait_for_offchan_complete: wait for off-channel tx completion event.
|
||||
*/
|
||||
struct brcmf_p2p_info {
|
||||
struct brcmf_cfg80211_info *cfg;
|
||||
@@ -144,6 +145,7 @@ struct brcmf_p2p_info {
|
||||
bool gon_req_action;
|
||||
bool block_gon_req_tx;
|
||||
bool p2pdev_dynamically;
|
||||
+ bool wait_for_offchan_complete;
|
||||
};
|
||||
|
||||
s32 brcmf_p2p_attach(struct brcmf_cfg80211_info *cfg, bool p2pdev_forced);
|
||||
@@ -0,0 +1,41 @@
|
||||
From 3401d42c7ea2d064d15c66698ff8eb96553179ce Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Fri, 26 Oct 2018 12:50:39 +0200
|
||||
Subject: [PATCH] brcmutil: really fix decoding channel info for 160 MHz
|
||||
bandwidth
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Previous commit /adding/ support for 160 MHz chanspecs was incomplete.
|
||||
It didn't set bandwidth info and didn't extract control channel info. As
|
||||
the result it was also using uninitialized "sb" var.
|
||||
|
||||
This change has been tested for two chanspecs found to be reported by
|
||||
some devices/firmwares:
|
||||
1) 60/160 (0xee32)
|
||||
Before: chnum:50 control_ch_num:36
|
||||
After: chnum:50 control_ch_num:60
|
||||
2) 120/160 (0xed72)
|
||||
Before: chnum:114 control_ch_num:100
|
||||
After: chnum:114 control_ch_num:120
|
||||
|
||||
Fixes: 330994e8e8ec ("brcmfmac: fix for proper support of 160MHz bandwidth")
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c
|
||||
@@ -193,6 +193,9 @@ static void brcmu_d11ac_decchspec(struct
|
||||
}
|
||||
break;
|
||||
case BRCMU_CHSPEC_D11AC_BW_160:
|
||||
+ ch->bw = BRCMU_CHAN_BW_160;
|
||||
+ ch->sb = brcmu_maskget16(ch->chspec, BRCMU_CHSPEC_D11AC_SB_MASK,
|
||||
+ BRCMU_CHSPEC_D11AC_SB_SHIFT);
|
||||
switch (ch->sb) {
|
||||
case BRCMU_CHAN_SB_LLL:
|
||||
ch->control_ch_num -= CH_70MHZ_APART;
|
||||
@@ -0,0 +1,34 @@
|
||||
From 8eefb59de817125eeedde2a2cc1e4ac3660062f9 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Thu, 8 Nov 2018 16:08:29 +0100
|
||||
Subject: [PATCH] brcmfmac: fix reporting support for 160 MHz channels
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Driver can report IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ so it's
|
||||
important to provide valid & complete info about supported bands for
|
||||
each channel. By default no support for 160 MHz should be assumed unless
|
||||
firmware reports it for a given channel later.
|
||||
|
||||
This fixes info passed to the userspace. Without that change userspace
|
||||
could try to use invalid channel and fail to start an interface.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Cc: stable@vger.kernel.org
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -5960,7 +5960,8 @@ static int brcmf_construct_chaninfo(stru
|
||||
* for subsequent chanspecs.
|
||||
*/
|
||||
channel->flags = IEEE80211_CHAN_NO_HT40 |
|
||||
- IEEE80211_CHAN_NO_80MHZ;
|
||||
+ IEEE80211_CHAN_NO_80MHZ |
|
||||
+ IEEE80211_CHAN_NO_160MHZ;
|
||||
ch.bw = BRCMU_CHAN_BW_20;
|
||||
cfg->d11inf.encchspec(&ch);
|
||||
chaninfo = ch.chspec;
|
||||
@@ -0,0 +1,34 @@
|
||||
From e966a79c2f761a696dec9cfb0e2d4aa977bf78cb Mon Sep 17 00:00:00 2001
|
||||
From: Colin Ian King <colin.king@canonical.com>
|
||||
Date: Tue, 16 Oct 2018 18:43:42 +0100
|
||||
Subject: [PATCH] brcmfmac: fix spelling mistake "Retreiving" -> "Retrieving"
|
||||
|
||||
Trivial fix to spelling mistake in brcmf_err error message.
|
||||
|
||||
Signed-off-by: Colin Ian King <colin.king@canonical.com>
|
||||
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
@@ -121,7 +121,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
|
||||
err = brcmf_fil_iovar_data_get(ifp, "cur_etheraddr", ifp->mac_addr,
|
||||
sizeof(ifp->mac_addr));
|
||||
if (err < 0) {
|
||||
- brcmf_err("Retreiving cur_etheraddr failed, %d\n", err);
|
||||
+ brcmf_err("Retrieving cur_etheraddr failed, %d\n", err);
|
||||
goto done;
|
||||
}
|
||||
memcpy(ifp->drvr->wiphy->perm_addr, ifp->drvr->mac, ETH_ALEN);
|
||||
@@ -158,7 +158,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
|
||||
strcpy(buf, "ver");
|
||||
err = brcmf_fil_iovar_data_get(ifp, "ver", buf, sizeof(buf));
|
||||
if (err < 0) {
|
||||
- brcmf_err("Retreiving version information failed, %d\n",
|
||||
+ brcmf_err("Retrieving version information failed, %d\n",
|
||||
err);
|
||||
goto done;
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
From ae5848cb4511bbbfe0306fcdbe5d9a95cd9546a9 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Fri, 26 Oct 2018 13:22:32 +0200
|
||||
Subject: [PATCH] brcmutil: print invalid chanspec when WARN-ing
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
On one of my devices I got WARNINGs when brcmfmac tried to decode
|
||||
chanspec. I couldn't tell if it was some unsupported format or just a
|
||||
malformed value passed by a firmware.
|
||||
|
||||
Print chanspec value so it's possible to debug a possible problem.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c | 14 +++++++-------
|
||||
1 file changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c
|
||||
@@ -128,7 +128,7 @@ static void brcmu_d11n_decchspec(struct
|
||||
}
|
||||
break;
|
||||
default:
|
||||
- WARN_ON_ONCE(1);
|
||||
+ WARN_ONCE(1, "Invalid chanspec 0x%04x\n", ch->chspec);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -140,7 +140,7 @@ static void brcmu_d11n_decchspec(struct
|
||||
ch->band = BRCMU_CHAN_BAND_2G;
|
||||
break;
|
||||
default:
|
||||
- WARN_ON_ONCE(1);
|
||||
+ WARN_ONCE(1, "Invalid chanspec 0x%04x\n", ch->chspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -167,7 +167,7 @@ static void brcmu_d11ac_decchspec(struct
|
||||
ch->sb = BRCMU_CHAN_SB_U;
|
||||
ch->control_ch_num += CH_10MHZ_APART;
|
||||
} else {
|
||||
- WARN_ON_ONCE(1);
|
||||
+ WARN_ONCE(1, "Invalid chanspec 0x%04x\n", ch->chspec);
|
||||
}
|
||||
break;
|
||||
case BRCMU_CHSPEC_D11AC_BW_80:
|
||||
@@ -188,7 +188,7 @@ static void brcmu_d11ac_decchspec(struct
|
||||
ch->control_ch_num += CH_30MHZ_APART;
|
||||
break;
|
||||
default:
|
||||
- WARN_ON_ONCE(1);
|
||||
+ WARN_ONCE(1, "Invalid chanspec 0x%04x\n", ch->chspec);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -222,13 +222,13 @@ static void brcmu_d11ac_decchspec(struct
|
||||
ch->control_ch_num += CH_70MHZ_APART;
|
||||
break;
|
||||
default:
|
||||
- WARN_ON_ONCE(1);
|
||||
+ WARN_ONCE(1, "Invalid chanspec 0x%04x\n", ch->chspec);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case BRCMU_CHSPEC_D11AC_BW_8080:
|
||||
default:
|
||||
- WARN_ON_ONCE(1);
|
||||
+ WARN_ONCE(1, "Invalid chanspec 0x%04x\n", ch->chspec);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -240,7 +240,7 @@ static void brcmu_d11ac_decchspec(struct
|
||||
ch->band = BRCMU_CHAN_BAND_2G;
|
||||
break;
|
||||
default:
|
||||
- WARN_ON_ONCE(1);
|
||||
+ WARN_ONCE(1, "Invalid chanspec 0x%04x\n", ch->chspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
From a4dad0334732f62c67058037d9edb17945bec598 Mon Sep 17 00:00:00 2001
|
||||
From: Dan Haab <riproute@gmail.com>
|
||||
Date: Fri, 9 Nov 2018 09:38:55 -0700
|
||||
Subject: [PATCH] brcmfmac: support STA info struct v7
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The newest firmwares provide STA info using v7 of the struct. As v7
|
||||
isn't backward compatible, a union is needed.
|
||||
|
||||
Even though brcmfmac does not use any of the new info it's important to
|
||||
provide the proper struct buffer. Without this change new firmwares will
|
||||
fallback to the very limited v3 instead of something in between such as
|
||||
v4.
|
||||
|
||||
Signed-off-by: Dan Haab <dan.haab@luxul.com>
|
||||
Reviewed-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/fwil_types.h | 40 ++++++++++++++++++----
|
||||
1 file changed, 33 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h
|
||||
@@ -167,6 +167,8 @@
|
||||
#define BRCMF_MFP_REQUIRED 2
|
||||
|
||||
#define BRCMF_VHT_CAP_MCS_MAP_NSS_MAX 8
|
||||
+
|
||||
+#define BRCMF_HE_CAP_MCS_MAP_NSS_MAX 8
|
||||
|
||||
/* join preference types for join_pref iovar */
|
||||
enum brcmf_join_pref_types {
|
||||
@@ -565,13 +567,37 @@ struct brcmf_sta_info_le {
|
||||
__le32 rx_pkts_retried; /* # rx with retry bit set */
|
||||
__le32 tx_rate_fallback; /* lowest fallback TX rate */
|
||||
|
||||
- /* Fields valid for ver >= 5 */
|
||||
- struct {
|
||||
- __le32 count; /* # rates in this set */
|
||||
- u8 rates[BRCMF_MAXRATES_IN_SET]; /* rates in 500kbps units w/hi bit set if basic */
|
||||
- u8 mcs[BRCMF_MCSSET_LEN]; /* supported mcs index bit map */
|
||||
- __le16 vht_mcs[BRCMF_VHT_CAP_MCS_MAP_NSS_MAX]; /* supported mcs index bit map per nss */
|
||||
- } rateset_adv;
|
||||
+ union {
|
||||
+ struct {
|
||||
+ struct {
|
||||
+ __le32 count; /* # rates in this set */
|
||||
+ u8 rates[BRCMF_MAXRATES_IN_SET]; /* rates in 500kbps units w/hi bit set if basic */
|
||||
+ u8 mcs[BRCMF_MCSSET_LEN]; /* supported mcs index bit map */
|
||||
+ __le16 vht_mcs[BRCMF_VHT_CAP_MCS_MAP_NSS_MAX]; /* supported mcs index bit map per nss */
|
||||
+ } rateset_adv;
|
||||
+ } v5;
|
||||
+
|
||||
+ struct {
|
||||
+ __le32 rx_dur_total; /* total user RX duration (estimated) */
|
||||
+ __le16 chanspec; /** chanspec this sta is on */
|
||||
+ __le16 pad_1;
|
||||
+ struct {
|
||||
+ __le16 version; /* version */
|
||||
+ __le16 len; /* length */
|
||||
+ __le32 count; /* # rates in this set */
|
||||
+ u8 rates[BRCMF_MAXRATES_IN_SET]; /* rates in 500kbps units w/hi bit set if basic */
|
||||
+ u8 mcs[BRCMF_MCSSET_LEN]; /* supported mcs index bit map */
|
||||
+ __le16 vht_mcs[BRCMF_VHT_CAP_MCS_MAP_NSS_MAX]; /* supported mcs index bit map per nss */
|
||||
+ __le16 he_mcs[BRCMF_HE_CAP_MCS_MAP_NSS_MAX]; /* supported he mcs index bit map per nss */
|
||||
+ } rateset_adv; /* rateset along with mcs index bitmap */
|
||||
+ __le16 wpauth; /* authentication type */
|
||||
+ u8 algo; /* crypto algorithm */
|
||||
+ u8 pad_2;
|
||||
+ __le32 tx_rspec; /* Rate of last successful tx frame */
|
||||
+ __le32 rx_rspec; /* Rate of last successful rx frame */
|
||||
+ __le32 wnm_cap; /* wnm capabilities */
|
||||
+ } v7;
|
||||
+ };
|
||||
};
|
||||
|
||||
struct brcmf_chanspec_list {
|
||||
@@ -0,0 +1,68 @@
|
||||
From 8c892df41500469729e0d662816300196e4f463d Mon Sep 17 00:00:00 2001
|
||||
From: Stijn Tintel <stijn@linux-ipv6.be>
|
||||
Date: Tue, 4 Dec 2018 20:29:05 +0200
|
||||
Subject: [PATCH] brcmfmac: fix roamoff=1 modparam
|
||||
|
||||
When the update_connect_param callback is set, nl80211 expects the flag
|
||||
WIPHY_FLAG_SUPPORTS_FW_ROAM to be set as well. However, this flag is
|
||||
only set when modparam roamoff=0, while the callback is set
|
||||
unconditionally. Since commit 7f9a3e150ec7 this causes a warning in
|
||||
wiphy_register, which breaks brcmfmac.
|
||||
|
||||
Disable the update_connect_param callback when roamoff=0 to fix this.
|
||||
|
||||
Fixes: 7f9a3e150ec7 ("nl80211: Update ERP info using NL80211_CMD_UPDATE_CONNECT_PARAMS")
|
||||
Cc: Stable <stable@vger.kernel.org> # 4.19+
|
||||
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||
Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 11 +++++++++--
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/cfg80211.h | 2 +-
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/core.c | 2 +-
|
||||
3 files changed, 11 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -5190,10 +5190,17 @@ static struct cfg80211_ops brcmf_cfg8021
|
||||
.update_connect_params = brcmf_cfg80211_update_conn_params,
|
||||
};
|
||||
|
||||
-struct cfg80211_ops *brcmf_cfg80211_get_ops(void)
|
||||
+struct cfg80211_ops *brcmf_cfg80211_get_ops(struct brcmf_mp_device *settings)
|
||||
{
|
||||
- return kmemdup(&brcmf_cfg80211_ops, sizeof(brcmf_cfg80211_ops),
|
||||
+ struct cfg80211_ops *ops;
|
||||
+
|
||||
+ ops = kmemdup(&brcmf_cfg80211_ops, sizeof(brcmf_cfg80211_ops),
|
||||
GFP_KERNEL);
|
||||
+
|
||||
+ if (ops && settings->roamoff)
|
||||
+ ops->update_connect_params = NULL;
|
||||
+
|
||||
+ return ops;
|
||||
}
|
||||
|
||||
struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg,
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
|
||||
@@ -391,7 +391,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
void brcmf_cfg80211_detach(struct brcmf_cfg80211_info *cfg);
|
||||
s32 brcmf_cfg80211_up(struct net_device *ndev);
|
||||
s32 brcmf_cfg80211_down(struct net_device *ndev);
|
||||
-struct cfg80211_ops *brcmf_cfg80211_get_ops(void);
|
||||
+struct cfg80211_ops *brcmf_cfg80211_get_ops(struct brcmf_mp_device *settings);
|
||||
enum nl80211_iftype brcmf_cfg80211_get_iftype(struct brcmf_if *ifp);
|
||||
|
||||
struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg,
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1132,7 +1132,7 @@ int brcmf_attach(struct device *dev, str
|
||||
|
||||
brcmf_dbg(TRACE, "Enter\n");
|
||||
|
||||
- ops = brcmf_cfg80211_get_ops();
|
||||
+ ops = brcmf_cfg80211_get_ops(settings);
|
||||
if (!ops)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
From 861cb5eb467f5e38dce1aabe4e8db379255bd89b Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Wahren <stefan.wahren@i2se.com>
|
||||
Date: Wed, 12 Dec 2018 20:20:06 +0100
|
||||
Subject: [PATCH] brcmfmac: Fix access point mode
|
||||
|
||||
Since commit 1204aa17f3b4 ("brcmfmac: set WIPHY_FLAG_HAVE_AP_SME flag")
|
||||
the Raspberry Pi 3 A+ (BCM43455) isn't able to operate in AP mode with
|
||||
hostapd (device_ap_sme=1 use_monitor=0):
|
||||
|
||||
brcmfmac: brcmf_cfg80211_stop_ap: setting AP mode failed -52
|
||||
|
||||
So add the missing mgmt_stypes for AP mode to fix this.
|
||||
|
||||
Fixes: 1204aa17f3b4 ("brcmfmac: set WIPHY_FLAG_HAVE_AP_SME flag")
|
||||
Suggested-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
|
||||
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -6271,6 +6271,16 @@ brcmf_txrx_stypes[NUM_NL80211_IFTYPES] =
|
||||
.tx = 0xffff,
|
||||
.rx = BIT(IEEE80211_STYPE_ACTION >> 4) |
|
||||
BIT(IEEE80211_STYPE_PROBE_REQ >> 4)
|
||||
+ },
|
||||
+ [NL80211_IFTYPE_AP] = {
|
||||
+ .tx = 0xffff,
|
||||
+ .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
|
||||
+ BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
|
||||
+ BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
|
||||
+ BIT(IEEE80211_STYPE_DISASSOC >> 4) |
|
||||
+ BIT(IEEE80211_STYPE_AUTH >> 4) |
|
||||
+ BIT(IEEE80211_STYPE_DEAUTH >> 4) |
|
||||
+ BIT(IEEE80211_STYPE_ACTION >> 4)
|
||||
}
|
||||
};
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
From 5cc898fbcb352b764f8d51c16e10e2eb0056173d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Wed, 6 Feb 2019 12:28:15 +0100
|
||||
Subject: [PATCH] brcmfmac: modify __brcmf_err() to take bus as a parameter
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
So far __brcmf_err() was using pr_err() which didn't allow identifying
|
||||
device that was affected by an error. It's crucial for systems with more
|
||||
than 1 device supported by brcmfmac (a common case for home routers).
|
||||
|
||||
This change allows passing struct brcmf_bus to the __brcmf_err(). That
|
||||
struct has been agreed to be the most common one. It allows accessing
|
||||
struct device easily & using dev_err() printing helper.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/common.c | 7 +++++--
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h | 8 +++++---
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/tracepoint.c | 9 +++++++--
|
||||
3 files changed, 17 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
@@ -221,7 +221,7 @@ done:
|
||||
}
|
||||
|
||||
#ifndef CPTCFG_BRCM_TRACING
|
||||
-void __brcmf_err(const char *func, const char *fmt, ...)
|
||||
+void __brcmf_err(struct brcmf_bus *bus, const char *func, const char *fmt, ...)
|
||||
{
|
||||
struct va_format vaf;
|
||||
va_list args;
|
||||
@@ -230,7 +230,10 @@ void __brcmf_err(const char *func, const
|
||||
|
||||
vaf.fmt = fmt;
|
||||
vaf.va = &args;
|
||||
- pr_err("%s: %pV", func, &vaf);
|
||||
+ if (bus)
|
||||
+ dev_err(bus->dev, "%s: %pV", func, &vaf);
|
||||
+ else
|
||||
+ pr_err("%s: %pV", func, &vaf);
|
||||
|
||||
va_end(args);
|
||||
}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
|
||||
@@ -45,8 +45,10 @@
|
||||
#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
-__printf(2, 3)
|
||||
-void __brcmf_err(const char *func, const char *fmt, ...);
|
||||
+struct brcmf_bus;
|
||||
+
|
||||
+__printf(3, 4)
|
||||
+void __brcmf_err(struct brcmf_bus *bus, const char *func, const char *fmt, ...);
|
||||
/* Macro for error messages. When debugging / tracing the driver all error
|
||||
* messages are important to us.
|
||||
*/
|
||||
@@ -55,7 +57,7 @@ void __brcmf_err(const char *func, const
|
||||
if (IS_ENABLED(CPTCFG_BRCMDBG) || \
|
||||
IS_ENABLED(CPTCFG_BRCM_TRACING) || \
|
||||
net_ratelimit()) \
|
||||
- __brcmf_err(__func__, fmt, ##__VA_ARGS__); \
|
||||
+ __brcmf_err(NULL, __func__, fmt, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#if defined(DEBUG) || defined(CPTCFG_BRCM_TRACING)
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/tracepoint.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/tracepoint.c
|
||||
@@ -14,14 +14,16 @@
|
||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
+#include <linux/device.h>
|
||||
#include <linux/module.h> /* bug in tracepoint.h, it should include this */
|
||||
|
||||
#ifndef __CHECKER__
|
||||
#define CREATE_TRACE_POINTS
|
||||
+#include "bus.h"
|
||||
#include "tracepoint.h"
|
||||
#include "debug.h"
|
||||
|
||||
-void __brcmf_err(const char *func, const char *fmt, ...)
|
||||
+void __brcmf_err(struct brcmf_bus *bus, const char *func, const char *fmt, ...)
|
||||
{
|
||||
struct va_format vaf = {
|
||||
.fmt = fmt,
|
||||
@@ -30,7 +32,10 @@ void __brcmf_err(const char *func, const
|
||||
|
||||
va_start(args, fmt);
|
||||
vaf.va = &args;
|
||||
- pr_err("%s: %pV", func, &vaf);
|
||||
+ if (bus)
|
||||
+ dev_err(bus->dev, "%s: %pV", func, &vaf);
|
||||
+ else
|
||||
+ pr_err("%s: %pV", func, &vaf);
|
||||
trace_brcmf_err(func, &vaf);
|
||||
va_end(args);
|
||||
}
|
||||
@@ -0,0 +1,286 @@
|
||||
From 8602e62441aba276cafd68034b72162fbc5ca0a6 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Wed, 6 Feb 2019 12:28:16 +0100
|
||||
Subject: [PATCH] brcmfmac: pass bus to the __brcmf_err() in pcie.c
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This enables dev_err() usage (instead of pr_err()) in the __brcmf_err().
|
||||
It makes error messages more meaningful and is important for debugging
|
||||
errors/bugs on systems with multiple brcmfmac supported devices.
|
||||
|
||||
All bus files should follow & get updated similarly (soon).
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/debug.h | 2 +
|
||||
.../broadcom/brcm80211/brcmfmac/pcie.c | 59 +++++++++++--------
|
||||
2 files changed, 38 insertions(+), 23 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
|
||||
@@ -52,6 +52,7 @@ void __brcmf_err(struct brcmf_bus *bus,
|
||||
/* Macro for error messages. When debugging / tracing the driver all error
|
||||
* messages are important to us.
|
||||
*/
|
||||
+#ifndef brcmf_err
|
||||
#define brcmf_err(fmt, ...) \
|
||||
do { \
|
||||
if (IS_ENABLED(CPTCFG_BRCMDBG) || \
|
||||
@@ -59,6 +60,7 @@ void __brcmf_err(struct brcmf_bus *bus,
|
||||
net_ratelimit()) \
|
||||
__brcmf_err(NULL, __func__, fmt, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
+#endif
|
||||
|
||||
#if defined(DEBUG) || defined(CPTCFG_BRCM_TRACING)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -30,6 +30,15 @@
|
||||
#include <brcmu_wifi.h>
|
||||
#include <brcm_hw_ids.h>
|
||||
|
||||
+/* Custom brcmf_err() that takes bus arg and passes it further */
|
||||
+#define brcmf_err(bus, fmt, ...) \
|
||||
+ do { \
|
||||
+ if (IS_ENABLED(CPTCFG_BRCMDBG) || \
|
||||
+ IS_ENABLED(CPTCFG_BRCM_TRACING) || \
|
||||
+ net_ratelimit()) \
|
||||
+ __brcmf_err(bus, __func__, fmt, ##__VA_ARGS__); \
|
||||
+ } while (0)
|
||||
+
|
||||
#include "debug.h"
|
||||
#include "bus.h"
|
||||
#include "commonring.h"
|
||||
@@ -529,6 +538,7 @@ static void
|
||||
brcmf_pcie_select_core(struct brcmf_pciedev_info *devinfo, u16 coreid)
|
||||
{
|
||||
const struct pci_dev *pdev = devinfo->pdev;
|
||||
+ struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev);
|
||||
struct brcmf_core *core;
|
||||
u32 bar0_win;
|
||||
|
||||
@@ -546,7 +556,7 @@ brcmf_pcie_select_core(struct brcmf_pcie
|
||||
}
|
||||
}
|
||||
} else {
|
||||
- brcmf_err("Unsupported core selected %x\n", coreid);
|
||||
+ brcmf_err(bus, "Unsupported core selected %x\n", coreid);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -840,9 +850,8 @@ static irqreturn_t brcmf_pcie_isr_thread
|
||||
|
||||
static int brcmf_pcie_request_irq(struct brcmf_pciedev_info *devinfo)
|
||||
{
|
||||
- struct pci_dev *pdev;
|
||||
-
|
||||
- pdev = devinfo->pdev;
|
||||
+ struct pci_dev *pdev = devinfo->pdev;
|
||||
+ struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev);
|
||||
|
||||
brcmf_pcie_intr_disable(devinfo);
|
||||
|
||||
@@ -853,7 +862,7 @@ static int brcmf_pcie_request_irq(struct
|
||||
brcmf_pcie_isr_thread, IRQF_SHARED,
|
||||
"brcmf_pcie_intr", devinfo)) {
|
||||
pci_disable_msi(pdev);
|
||||
- brcmf_err("Failed to request IRQ %d\n", pdev->irq);
|
||||
+ brcmf_err(bus, "Failed to request IRQ %d\n", pdev->irq);
|
||||
return -EIO;
|
||||
}
|
||||
devinfo->irq_allocated = true;
|
||||
@@ -863,15 +872,14 @@ static int brcmf_pcie_request_irq(struct
|
||||
|
||||
static void brcmf_pcie_release_irq(struct brcmf_pciedev_info *devinfo)
|
||||
{
|
||||
- struct pci_dev *pdev;
|
||||
+ struct pci_dev *pdev = devinfo->pdev;
|
||||
+ struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev);
|
||||
u32 status;
|
||||
u32 count;
|
||||
|
||||
if (!devinfo->irq_allocated)
|
||||
return;
|
||||
|
||||
- pdev = devinfo->pdev;
|
||||
-
|
||||
brcmf_pcie_intr_disable(devinfo);
|
||||
free_irq(pdev->irq, devinfo);
|
||||
pci_disable_msi(pdev);
|
||||
@@ -883,7 +891,7 @@ static void brcmf_pcie_release_irq(struc
|
||||
count++;
|
||||
}
|
||||
if (devinfo->in_irq)
|
||||
- brcmf_err("Still in IRQ (processing) !!!\n");
|
||||
+ brcmf_err(bus, "Still in IRQ (processing) !!!\n");
|
||||
|
||||
status = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT);
|
||||
brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT, status);
|
||||
@@ -1094,6 +1102,7 @@ static void brcmf_pcie_release_ringbuffe
|
||||
|
||||
static int brcmf_pcie_init_ringbuffers(struct brcmf_pciedev_info *devinfo)
|
||||
{
|
||||
+ struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev);
|
||||
struct brcmf_pcie_ringbuf *ring;
|
||||
struct brcmf_pcie_ringbuf *rings;
|
||||
u32 d2h_w_idx_ptr;
|
||||
@@ -1246,7 +1255,7 @@ static int brcmf_pcie_init_ringbuffers(s
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
- brcmf_err("Allocating ring buffers failed\n");
|
||||
+ brcmf_err(bus, "Allocating ring buffers failed\n");
|
||||
brcmf_pcie_release_ringbuffers(devinfo);
|
||||
return -ENOMEM;
|
||||
}
|
||||
@@ -1269,6 +1278,7 @@ brcmf_pcie_release_scratchbuffers(struct
|
||||
|
||||
static int brcmf_pcie_init_scratchbuffers(struct brcmf_pciedev_info *devinfo)
|
||||
{
|
||||
+ struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev);
|
||||
u64 address;
|
||||
u32 addr;
|
||||
|
||||
@@ -1308,7 +1318,7 @@ static int brcmf_pcie_init_scratchbuffer
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
- brcmf_err("Allocating scratch buffers failed\n");
|
||||
+ brcmf_err(bus, "Allocating scratch buffers failed\n");
|
||||
brcmf_pcie_release_scratchbuffers(devinfo);
|
||||
return -ENOMEM;
|
||||
}
|
||||
@@ -1409,6 +1419,7 @@ static int
|
||||
brcmf_pcie_init_share_ram_info(struct brcmf_pciedev_info *devinfo,
|
||||
u32 sharedram_addr)
|
||||
{
|
||||
+ struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev);
|
||||
struct brcmf_pcie_shared_info *shared;
|
||||
u32 addr;
|
||||
|
||||
@@ -1420,7 +1431,8 @@ brcmf_pcie_init_share_ram_info(struct br
|
||||
brcmf_dbg(PCIE, "PCIe protocol version %d\n", shared->version);
|
||||
if ((shared->version > BRCMF_PCIE_MAX_SHARED_VERSION) ||
|
||||
(shared->version < BRCMF_PCIE_MIN_SHARED_VERSION)) {
|
||||
- brcmf_err("Unsupported PCIE version %d\n", shared->version);
|
||||
+ brcmf_err(bus, "Unsupported PCIE version %d\n",
|
||||
+ shared->version);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -1462,6 +1474,7 @@ static int brcmf_pcie_download_fw_nvram(
|
||||
const struct firmware *fw, void *nvram,
|
||||
u32 nvram_len)
|
||||
{
|
||||
+ struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev);
|
||||
u32 sharedram_addr;
|
||||
u32 sharedram_addr_written;
|
||||
u32 loop_counter;
|
||||
@@ -1516,7 +1529,7 @@ static int brcmf_pcie_download_fw_nvram(
|
||||
loop_counter--;
|
||||
}
|
||||
if (sharedram_addr == sharedram_addr_written) {
|
||||
- brcmf_err("FW failed to initialize\n");
|
||||
+ brcmf_err(bus, "FW failed to initialize\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
brcmf_dbg(PCIE, "Shared RAM addr: 0x%08x\n", sharedram_addr);
|
||||
@@ -1527,16 +1540,15 @@ static int brcmf_pcie_download_fw_nvram(
|
||||
|
||||
static int brcmf_pcie_get_resource(struct brcmf_pciedev_info *devinfo)
|
||||
{
|
||||
- struct pci_dev *pdev;
|
||||
+ struct pci_dev *pdev = devinfo->pdev;
|
||||
+ struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev);
|
||||
int err;
|
||||
phys_addr_t bar0_addr, bar1_addr;
|
||||
ulong bar1_size;
|
||||
|
||||
- pdev = devinfo->pdev;
|
||||
-
|
||||
err = pci_enable_device(pdev);
|
||||
if (err) {
|
||||
- brcmf_err("pci_enable_device failed err=%d\n", err);
|
||||
+ brcmf_err(bus, "pci_enable_device failed err=%d\n", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -1549,7 +1561,7 @@ static int brcmf_pcie_get_resource(struc
|
||||
/* read Bar-1 mapped memory range */
|
||||
bar1_size = pci_resource_len(pdev, 2);
|
||||
if ((bar1_size == 0) || (bar1_addr == 0)) {
|
||||
- brcmf_err("BAR1 Not enabled, device size=%ld, addr=%#016llx\n",
|
||||
+ brcmf_err(bus, "BAR1 Not enabled, device size=%ld, addr=%#016llx\n",
|
||||
bar1_size, (unsigned long long)bar1_addr);
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -1558,7 +1570,7 @@ static int brcmf_pcie_get_resource(struc
|
||||
devinfo->tcm = ioremap_nocache(bar1_addr, bar1_size);
|
||||
|
||||
if (!devinfo->regs || !devinfo->tcm) {
|
||||
- brcmf_err("ioremap() failed (%p,%p)\n", devinfo->regs,
|
||||
+ brcmf_err(bus, "ioremap() failed (%p,%p)\n", devinfo->regs,
|
||||
devinfo->tcm);
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -1585,16 +1597,17 @@ static void brcmf_pcie_release_resource(
|
||||
|
||||
static int brcmf_pcie_attach_bus(struct brcmf_pciedev_info *devinfo)
|
||||
{
|
||||
+ struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev);
|
||||
int ret;
|
||||
|
||||
/* Attach to the common driver interface */
|
||||
ret = brcmf_attach(&devinfo->pdev->dev, devinfo->settings);
|
||||
if (ret) {
|
||||
- brcmf_err("brcmf_attach failed\n");
|
||||
+ brcmf_err(bus, "brcmf_attach failed\n");
|
||||
} else {
|
||||
ret = brcmf_bus_started(&devinfo->pdev->dev);
|
||||
if (ret)
|
||||
- brcmf_err("dongle is not responding\n");
|
||||
+ brcmf_err(bus, "dongle is not responding\n");
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -1823,7 +1836,7 @@ fail_bus:
|
||||
kfree(bus->msgbuf);
|
||||
kfree(bus);
|
||||
fail:
|
||||
- brcmf_err("failed %x:%x\n", pdev->vendor, pdev->device);
|
||||
+ brcmf_err(NULL, "failed %x:%x\n", pdev->vendor, pdev->device);
|
||||
brcmf_pcie_release_resource(devinfo);
|
||||
if (devinfo->ci)
|
||||
brcmf_chip_detach(devinfo->ci);
|
||||
@@ -1897,7 +1910,7 @@ static int brcmf_pcie_pm_enter_D3(struct
|
||||
wait_event_timeout(devinfo->mbdata_resp_wait, devinfo->mbdata_completed,
|
||||
BRCMF_PCIE_MBDATA_TIMEOUT);
|
||||
if (!devinfo->mbdata_completed) {
|
||||
- brcmf_err("Timeout on response for entering D3 substate\n");
|
||||
+ brcmf_err(bus, "Timeout on response for entering D3 substate\n");
|
||||
brcmf_bus_change_state(bus, BRCMF_BUS_UP);
|
||||
return -EIO;
|
||||
}
|
||||
@@ -1942,7 +1955,7 @@ cleanup:
|
||||
|
||||
err = brcmf_pcie_probe(pdev, NULL);
|
||||
if (err)
|
||||
- brcmf_err("probe after resume failed, err=%d\n", err);
|
||||
+ brcmf_err(bus, "probe after resume failed, err=%d\n", err);
|
||||
|
||||
return err;
|
||||
}
|
||||
@@ -2014,7 +2027,8 @@ void brcmf_pcie_register(void)
|
||||
brcmf_dbg(PCIE, "Enter\n");
|
||||
err = pci_register_driver(&brcmf_pciedrvr);
|
||||
if (err)
|
||||
- brcmf_err("PCIE driver registration failed, err=%d\n", err);
|
||||
+ brcmf_err(NULL, "PCIE driver registration failed, err=%d\n",
|
||||
+ err);
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,147 @@
|
||||
From e665988be29ccea3584528967b432a5cfd801ca4 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Fri, 8 Feb 2019 07:42:30 +0100
|
||||
Subject: [PATCH] brcmfmac: support monitor frames with the hardware/ucode
|
||||
header
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
So far there were two monitor frame formats:
|
||||
1) 802.11 frames (with frame (sub)type & all addresses)
|
||||
2) 802.11 frames with the radiotap header
|
||||
|
||||
Testing the latest FullMAC firmwares for 4366b1/4366c0 resulted in
|
||||
discovering a new format being used. It seems (almost?) identical to the
|
||||
one known from ucode used in SoftMAC devices which is most likely the
|
||||
same codebase anyway.
|
||||
|
||||
While new firmwares will /announce/ radiotap header support using the
|
||||
"rtap" fw capability string it seems no string was added for the new
|
||||
ucode header format.
|
||||
|
||||
All above means that:
|
||||
1) We need new format support when dealing with a received frame
|
||||
2) A new feature bit & mapping quirks have to be added manually
|
||||
|
||||
As for now only an empty radiotap is being created. Adding support for
|
||||
extracting some info (band, channel, signal, etc.) is planned for the
|
||||
future.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/core.c | 55 +++++++++++++++++++
|
||||
.../broadcom/brcm80211/brcmfmac/feature.c | 4 ++
|
||||
.../broadcom/brcm80211/brcmfmac/feature.h | 4 +-
|
||||
3 files changed, 62 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -43,6 +43,36 @@
|
||||
|
||||
#define BRCMF_BSSIDX_INVALID -1
|
||||
|
||||
+#define RXS_PBPRES BIT(2)
|
||||
+
|
||||
+#define D11_PHY_HDR_LEN 6
|
||||
+
|
||||
+struct d11rxhdr_le {
|
||||
+ __le16 RxFrameSize;
|
||||
+ u16 PAD;
|
||||
+ __le16 PhyRxStatus_0;
|
||||
+ __le16 PhyRxStatus_1;
|
||||
+ __le16 PhyRxStatus_2;
|
||||
+ __le16 PhyRxStatus_3;
|
||||
+ __le16 PhyRxStatus_4;
|
||||
+ __le16 PhyRxStatus_5;
|
||||
+ __le16 RxStatus1;
|
||||
+ __le16 RxStatus2;
|
||||
+ __le16 RxTSFTime;
|
||||
+ __le16 RxChan;
|
||||
+ u8 unknown[12];
|
||||
+} __packed;
|
||||
+
|
||||
+struct wlc_d11rxhdr {
|
||||
+ struct d11rxhdr_le rxhdr;
|
||||
+ __le32 tsf_l;
|
||||
+ s8 rssi;
|
||||
+ s8 rxpwr0;
|
||||
+ s8 rxpwr1;
|
||||
+ s8 do_rssi_ma;
|
||||
+ s8 rxpwr[4];
|
||||
+} __packed;
|
||||
+
|
||||
char *brcmf_ifname(struct brcmf_if *ifp)
|
||||
{
|
||||
if (!ifp)
|
||||
@@ -372,6 +402,35 @@ void brcmf_netif_mon_rx(struct brcmf_if
|
||||
{
|
||||
if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_MONITOR_FMT_RADIOTAP)) {
|
||||
/* Do nothing */
|
||||
+ } else if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_MONITOR_FMT_HW_RX_HDR)) {
|
||||
+ struct wlc_d11rxhdr *wlc_rxhdr = (struct wlc_d11rxhdr *)skb->data;
|
||||
+ struct ieee80211_radiotap_header *radiotap;
|
||||
+ unsigned int offset;
|
||||
+ u16 RxStatus1;
|
||||
+
|
||||
+ RxStatus1 = le16_to_cpu(wlc_rxhdr->rxhdr.RxStatus1);
|
||||
+
|
||||
+ offset = sizeof(struct wlc_d11rxhdr);
|
||||
+ /* MAC inserts 2 pad bytes for a4 headers or QoS or A-MSDU
|
||||
+ * subframes
|
||||
+ */
|
||||
+ if (RxStatus1 & RXS_PBPRES)
|
||||
+ offset += 2;
|
||||
+ offset += D11_PHY_HDR_LEN;
|
||||
+
|
||||
+ skb_pull(skb, offset);
|
||||
+
|
||||
+ /* TODO: use RX header to fill some radiotap data */
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 13, 0)
|
||||
+ radiotap = skb_push(skb, sizeof(*radiotap));
|
||||
+#else
|
||||
+ radiotap = (struct ieee80211_radiotap_header *)skb_push(skb, sizeof(*radiotap));
|
||||
+#endif
|
||||
+ memset(radiotap, 0, sizeof(*radiotap));
|
||||
+ radiotap->it_len = cpu_to_le16(sizeof(*radiotap));
|
||||
+
|
||||
+ /* TODO: 4 bytes with receive status? */
|
||||
+ skb->len -= 4;
|
||||
} else {
|
||||
struct ieee80211_radiotap_header *radiotap;
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
|
||||
@@ -102,6 +102,10 @@ static const struct brcmf_feat_fwfeat br
|
||||
{ "01-6cb8e269", BIT(BRCMF_FEAT_MONITOR) },
|
||||
/* brcmfmac4366b-pcie.bin from linux-firmware.git commit 52442afee990 */
|
||||
{ "01-c47a91a4", BIT(BRCMF_FEAT_MONITOR) },
|
||||
+ /* brcmfmac4366b-pcie.bin from linux-firmware.git commit 211de1679a68 */
|
||||
+ { "01-801fb449", BIT(BRCMF_FEAT_MONITOR_FMT_HW_RX_HDR) },
|
||||
+ /* brcmfmac4366c-pcie.bin from linux-firmware.git commit 211de1679a68 */
|
||||
+ { "01-d2cbb8fd", BIT(BRCMF_FEAT_MONITOR_FMT_HW_RX_HDR) },
|
||||
};
|
||||
|
||||
static void brcmf_feat_firmware_overrides(struct brcmf_pub *drv)
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h
|
||||
@@ -33,6 +33,7 @@
|
||||
* MFP: 802.11w Management Frame Protection.
|
||||
* MONITOR: firmware can pass monitor packets to host.
|
||||
* MONITOR_FMT_RADIOTAP: firmware provides monitor packets with radiotap header
|
||||
+ * MONITOR_FMT_HW_RX_HDR: firmware provides monitor packets with hw/ucode header
|
||||
*/
|
||||
#define BRCMF_FEAT_LIST \
|
||||
BRCMF_FEAT_DEF(MBSS) \
|
||||
@@ -48,7 +49,8 @@
|
||||
BRCMF_FEAT_DEF(WOWL_ARP_ND) \
|
||||
BRCMF_FEAT_DEF(MFP) \
|
||||
BRCMF_FEAT_DEF(MONITOR) \
|
||||
- BRCMF_FEAT_DEF(MONITOR_FMT_RADIOTAP)
|
||||
+ BRCMF_FEAT_DEF(MONITOR_FMT_RADIOTAP) \
|
||||
+ BRCMF_FEAT_DEF(MONITOR_FMT_HW_RX_HDR)
|
||||
|
||||
/*
|
||||
* Quirks:
|
||||
@@ -0,0 +1,67 @@
|
||||
From c988b78244df8216902e20de536434e2f474a37e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Fri, 8 Feb 2019 15:24:39 +0100
|
||||
Subject: [PATCH] brcmfmac: print firmware reported ring status errors
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Firmware is capable of reporting ring status. It's used e.g. to signal
|
||||
some problem with a specific ring setup. This patch adds support for
|
||||
printing ring & error number which may be useful for debugging setup
|
||||
issues.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/msgbuf.c | 25 +++++++++++++++++++
|
||||
1 file changed, 25 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
||||
@@ -134,6 +134,14 @@ struct msgbuf_completion_hdr {
|
||||
__le16 flow_ring_id;
|
||||
};
|
||||
|
||||
+/* Data struct for the MSGBUF_TYPE_RING_STATUS */
|
||||
+struct msgbuf_ring_status {
|
||||
+ struct msgbuf_common_hdr msg;
|
||||
+ struct msgbuf_completion_hdr compl_hdr;
|
||||
+ __le16 write_idx;
|
||||
+ __le32 rsvd0[5];
|
||||
+};
|
||||
+
|
||||
struct msgbuf_rx_event {
|
||||
struct msgbuf_common_hdr msg;
|
||||
struct msgbuf_completion_hdr compl_hdr;
|
||||
@@ -1178,6 +1186,19 @@ brcmf_msgbuf_process_rx_complete(struct
|
||||
brcmf_netif_rx(ifp, skb);
|
||||
}
|
||||
|
||||
+static void brcmf_msgbuf_process_ring_status(struct brcmf_msgbuf *msgbuf,
|
||||
+ void *buf)
|
||||
+{
|
||||
+ struct msgbuf_ring_status *ring_status = buf;
|
||||
+ int err;
|
||||
+
|
||||
+ err = le16_to_cpu(ring_status->compl_hdr.status);
|
||||
+ if (err) {
|
||||
+ int ring = le16_to_cpu(ring_status->compl_hdr.flow_ring_id);
|
||||
+
|
||||
+ brcmf_err("Firmware reported ring %d error: %d\n", ring, err);
|
||||
+ }
|
||||
+}
|
||||
|
||||
static void
|
||||
brcmf_msgbuf_process_flow_ring_create_response(struct brcmf_msgbuf *msgbuf,
|
||||
@@ -1239,6 +1260,10 @@ static void brcmf_msgbuf_process_msgtype
|
||||
|
||||
msg = (struct msgbuf_common_hdr *)buf;
|
||||
switch (msg->msgtype) {
|
||||
+ case MSGBUF_TYPE_RING_STATUS:
|
||||
+ brcmf_dbg(MSGBUF, "MSGBUF_TYPE_RING_STATUS\n");
|
||||
+ brcmf_msgbuf_process_ring_status(msgbuf, buf);
|
||||
+ break;
|
||||
case MSGBUF_TYPE_FLOW_RING_CREATE_CMPLT:
|
||||
brcmf_dbg(MSGBUF, "MSGBUF_TYPE_FLOW_RING_CREATE_CMPLT\n");
|
||||
brcmf_msgbuf_process_flow_ring_create_response(msgbuf, buf);
|
||||
@@ -0,0 +1,42 @@
|
||||
From f4e183293b871c96c0220dcc549d5ca4c72628ad Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Mon, 11 Feb 2019 23:04:53 +0100
|
||||
Subject: [PATCH] brcmfmac: improve code handling bandwidth of firmware
|
||||
reported channels
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
1) Use switch to simplify/improve the code & avoid some duplication
|
||||
2) Add warning for unsupported values
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 13 ++++++++++---
|
||||
1 file changed, 10 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -6003,11 +6003,18 @@ static int brcmf_construct_chaninfo(stru
|
||||
/* assuming the chanspecs order is HT20,
|
||||
* HT40 upper, HT40 lower, and VHT80.
|
||||
*/
|
||||
- if (ch.bw == BRCMU_CHAN_BW_80) {
|
||||
+ switch (ch.bw) {
|
||||
+ case BRCMU_CHAN_BW_80:
|
||||
channel->flags &= ~IEEE80211_CHAN_NO_80MHZ;
|
||||
- } else if (ch.bw == BRCMU_CHAN_BW_40) {
|
||||
+ break;
|
||||
+ case BRCMU_CHAN_BW_40:
|
||||
brcmf_update_bw40_channel_flag(channel, &ch);
|
||||
- } else {
|
||||
+ break;
|
||||
+ default:
|
||||
+ wiphy_warn(wiphy, "Firmware reported unsupported bandwidth %d\n",
|
||||
+ ch.bw);
|
||||
+ /* fall through */
|
||||
+ case BRCMU_CHAN_BW_20:
|
||||
/* enable the channel and disable other bandwidths
|
||||
* for now as mentioned order assure they are enabled
|
||||
* for subsequent chanspecs.
|
||||
@@ -0,0 +1,30 @@
|
||||
From 30519cbe339a45bd11a57ca8ece07f4f6a1cda2e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Mon, 11 Feb 2019 23:04:54 +0100
|
||||
Subject: [PATCH] brcmfmac: support firmware reporting 160 MHz channels
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
So far 160 MHz channels were treated as 20 MHz ones which was breaking
|
||||
support for 40/80 MHz due to the brcmf_construct_chaninfo() logic and
|
||||
its assumptions.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -6004,6 +6004,9 @@ static int brcmf_construct_chaninfo(stru
|
||||
* HT40 upper, HT40 lower, and VHT80.
|
||||
*/
|
||||
switch (ch.bw) {
|
||||
+ case BRCMU_CHAN_BW_160:
|
||||
+ channel->flags &= ~IEEE80211_CHAN_NO_160MHZ;
|
||||
+ break;
|
||||
case BRCMU_CHAN_BW_80:
|
||||
channel->flags &= ~IEEE80211_CHAN_NO_80MHZ;
|
||||
break;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,38 @@
|
||||
From e0a8ef4d7b4315bc4c1641fb3f3a7dfdfa6627b8 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Wed, 20 Feb 2019 11:30:47 +0100
|
||||
Subject: [PATCH] brcmfmac: add basic validation of shared RAM address
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
While experimenting with firmware loading I ended up in a state of
|
||||
firmware reporting shared RAM address 0x04000001. It was causing:
|
||||
[ 94.448015] Unable to handle kernel paging request at virtual address cd680001
|
||||
due to reading out of the mapped memory.
|
||||
|
||||
This patch adds some basic validation to avoid kernel crashes due to the
|
||||
unexpected firmware behavior.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -1532,6 +1532,12 @@ static int brcmf_pcie_download_fw_nvram(
|
||||
brcmf_err(bus, "FW failed to initialize\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
+ if (sharedram_addr < devinfo->ci->rambase ||
|
||||
+ sharedram_addr >= devinfo->ci->rambase + devinfo->ci->ramsize) {
|
||||
+ brcmf_err(bus, "Invalid shared RAM address 0x%08x\n",
|
||||
+ sharedram_addr);
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
brcmf_dbg(PCIE, "Shared RAM addr: 0x%08x\n", sharedram_addr);
|
||||
|
||||
return (brcmf_pcie_init_share_ram_info(devinfo, sharedram_addr));
|
||||
@@ -0,0 +1,29 @@
|
||||
From 0c7051610c577b60b01b3b5aec14d6765e177b0d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Thu, 21 Feb 2019 11:33:24 +0100
|
||||
Subject: [PATCH] brcmfmac: fix size of the struct msgbuf_ring_status
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This updates host struct to match the in-firmawre definition. It's a
|
||||
cosmetic change as it only applies to the reserved struct space.
|
||||
|
||||
Fixes: c988b78244df ("brcmfmac: print firmware reported ring status errors")
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
||||
@@ -139,7 +139,7 @@ struct msgbuf_ring_status {
|
||||
struct msgbuf_common_hdr msg;
|
||||
struct msgbuf_completion_hdr compl_hdr;
|
||||
__le16 write_idx;
|
||||
- __le32 rsvd0[5];
|
||||
+ __le16 rsvd0[5];
|
||||
};
|
||||
|
||||
struct msgbuf_rx_event {
|
||||
@@ -0,0 +1,69 @@
|
||||
From c91377495192cda096e52dc09c266b0d05f16d86 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Thu, 21 Feb 2019 11:33:25 +0100
|
||||
Subject: [PATCH] brcmfmac: print firmware reported general status errors
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Firmware may report general errors using a special message type. Add
|
||||
basic support for it by simply decoding & printing an error number.
|
||||
|
||||
A sample situation in which firmware reports a buf error:
|
||||
CONSOLE: 027084.733 no host response IOCTL buffer available..so fail the request
|
||||
will now produce a "Firmware reported general error: 9" on the host.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/msgbuf.c | 24 +++++++++++++++++++
|
||||
1 file changed, 24 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
||||
@@ -134,6 +134,14 @@ struct msgbuf_completion_hdr {
|
||||
__le16 flow_ring_id;
|
||||
};
|
||||
|
||||
+/* Data struct for the MSGBUF_TYPE_GEN_STATUS */
|
||||
+struct msgbuf_gen_status {
|
||||
+ struct msgbuf_common_hdr msg;
|
||||
+ struct msgbuf_completion_hdr compl_hdr;
|
||||
+ __le16 write_idx;
|
||||
+ __le32 rsvd0[3];
|
||||
+};
|
||||
+
|
||||
/* Data struct for the MSGBUF_TYPE_RING_STATUS */
|
||||
struct msgbuf_ring_status {
|
||||
struct msgbuf_common_hdr msg;
|
||||
@@ -1194,6 +1202,18 @@ brcmf_msgbuf_process_rx_complete(struct
|
||||
brcmf_netif_rx(ifp, skb);
|
||||
}
|
||||
|
||||
+static void brcmf_msgbuf_process_gen_status(struct brcmf_msgbuf *msgbuf,
|
||||
+ void *buf)
|
||||
+{
|
||||
+ struct msgbuf_gen_status *gen_status = buf;
|
||||
+ struct brcmf_pub *drvr = msgbuf->drvr;
|
||||
+ int err;
|
||||
+
|
||||
+ err = le16_to_cpu(gen_status->compl_hdr.status);
|
||||
+ if (err)
|
||||
+ bphy_err(drvr, "Firmware reported general error: %d\n", err);
|
||||
+}
|
||||
+
|
||||
static void brcmf_msgbuf_process_ring_status(struct brcmf_msgbuf *msgbuf,
|
||||
void *buf)
|
||||
{
|
||||
@@ -1273,6 +1293,10 @@ static void brcmf_msgbuf_process_msgtype
|
||||
|
||||
msg = (struct msgbuf_common_hdr *)buf;
|
||||
switch (msg->msgtype) {
|
||||
+ case MSGBUF_TYPE_GEN_STATUS:
|
||||
+ brcmf_dbg(MSGBUF, "MSGBUF_TYPE_GEN_STATUS\n");
|
||||
+ brcmf_msgbuf_process_gen_status(msgbuf, buf);
|
||||
+ break;
|
||||
case MSGBUF_TYPE_RING_STATUS:
|
||||
brcmf_dbg(MSGBUF, "MSGBUF_TYPE_RING_STATUS\n");
|
||||
brcmf_msgbuf_process_ring_status(msgbuf, buf);
|
||||
@@ -0,0 +1,32 @@
|
||||
From c9692820710f57c826b2e43a6fb1e4cd307508b0 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Tue, 26 Feb 2019 14:11:16 +0100
|
||||
Subject: [PATCH] brcmfmac: support repeated brcmf_fw_alloc_request() calls
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
During a normal brcmfmac lifetime brcmf_fw_alloc_request() is called
|
||||
once only during the probe. It's safe to assume provided array is clear.
|
||||
|
||||
Further brcmfmac improvements may require calling it multiple times
|
||||
though. This patch allows it by fixing invalid firmware paths like:
|
||||
brcm/brcmfmac4366c-pcie.binbrcm/brcmfmac4366c-pcie.bin
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
|
||||
@@ -582,6 +582,7 @@ int brcmf_fw_map_chip_to_name(u32 chip,
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
+ fw_name[0] = '\0';
|
||||
/* check if firmware path is provided by module parameter */
|
||||
if (brcmf_mp_global.firmware_path[0] != '\0') {
|
||||
strlcpy(fw_name, brcmf_mp_global.firmware_path,
|
||||
@@ -0,0 +1,79 @@
|
||||
From a2ec87ddbf1637f854ffcfff9d12d392fa30758b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Tue, 26 Feb 2019 14:11:18 +0100
|
||||
Subject: [PATCH] brcmfmac: add a function designated for handling firmware
|
||||
fails
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This improves handling PCIe firmware halts by printing a clear error
|
||||
message and replaces a similar code in the SDIO bus support.
|
||||
|
||||
It will also allow further improvements like trying to recover from a
|
||||
firmware crash.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h | 2 ++
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/core.c | 10 ++++++++++
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 2 +-
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 4 ++--
|
||||
4 files changed, 15 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||
@@ -233,6 +233,8 @@ void brcmf_dev_reset(struct device *dev)
|
||||
void brcmf_txflowblock(struct device *dev, bool state);
|
||||
/* Request from bus module to initiate a coredump */
|
||||
void brcmf_dev_coredump(struct device *dev);
|
||||
+/* Indication that firmware has halted or crashed */
|
||||
+void brcmf_fw_crashed(struct device *dev);
|
||||
|
||||
/* Notify the bus has transferred the tx packet to firmware */
|
||||
void brcmf_txcomplete(struct device *dev, struct sk_buff *txp, bool success);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1274,6 +1274,16 @@ void brcmf_dev_coredump(struct device *d
|
||||
brcmf_dbg(TRACE, "failed to create coredump\n");
|
||||
}
|
||||
|
||||
+void brcmf_fw_crashed(struct device *dev)
|
||||
+{
|
||||
+ struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||
+ struct brcmf_pub *drvr = bus_if->drvr;
|
||||
+
|
||||
+ bphy_err(drvr, "Firmware has halted or crashed\n");
|
||||
+
|
||||
+ brcmf_dev_coredump(dev);
|
||||
+}
|
||||
+
|
||||
void brcmf_detach(struct device *dev)
|
||||
{
|
||||
s32 i;
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -728,7 +728,7 @@ static void brcmf_pcie_handle_mb_data(st
|
||||
}
|
||||
if (dtoh_mb_data & BRCMF_D2H_DEV_FWHALT) {
|
||||
brcmf_dbg(PCIE, "D2H_MB_DATA: FW HALT\n");
|
||||
- brcmf_dev_coredump(&devinfo->pdev->dev);
|
||||
+ brcmf_fw_crashed(&devinfo->pdev->dev);
|
||||
}
|
||||
}
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -1097,8 +1097,8 @@ static u32 brcmf_sdio_hostmail(struct br
|
||||
|
||||
/* dongle indicates the firmware has halted/crashed */
|
||||
if (hmb_data & HMB_DATA_FWHALT) {
|
||||
- brcmf_err("mailbox indicates firmware halted\n");
|
||||
- brcmf_dev_coredump(&sdiod->func[1]->dev);
|
||||
+ brcmf_dbg(SDIO, "mailbox indicates firmware halted\n");
|
||||
+ brcmf_fw_crashed(&sdiod->func[1]->dev);
|
||||
}
|
||||
|
||||
/* Dongle recomposed rx frames, accept them again */
|
||||
@@ -0,0 +1,160 @@
|
||||
From 4684997d9eea29380000e062755aa6d368d789a3 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Tue, 26 Feb 2019 14:11:19 +0100
|
||||
Subject: [PATCH] brcmfmac: reset PCIe bus on a firmware crash
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This includes bus reset & reloading a firmware. It should be sufficient
|
||||
for a user space to (setup and) use a wireless device again.
|
||||
|
||||
Support for reset on USB & SDIO can be added later.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/bus.h | 10 ++++++
|
||||
.../broadcom/brcm80211/brcmfmac/core.c | 12 +++++++
|
||||
.../broadcom/brcm80211/brcmfmac/core.h | 2 ++
|
||||
.../broadcom/brcm80211/brcmfmac/pcie.c | 35 +++++++++++++++++++
|
||||
4 files changed, 59 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||
@@ -87,6 +87,7 @@ struct brcmf_bus_ops {
|
||||
void (*wowl_config)(struct device *dev, bool enabled);
|
||||
size_t (*get_ramsize)(struct device *dev);
|
||||
int (*get_memdump)(struct device *dev, void *data, size_t len);
|
||||
+ int (*reset)(struct device *dev);
|
||||
};
|
||||
|
||||
|
||||
@@ -214,6 +215,15 @@ int brcmf_bus_get_memdump(struct brcmf_b
|
||||
return bus->ops->get_memdump(bus->dev, data, len);
|
||||
}
|
||||
|
||||
+static inline
|
||||
+int brcmf_bus_reset(struct brcmf_bus *bus)
|
||||
+{
|
||||
+ if (!bus->ops->reset)
|
||||
+ return -EOPNOTSUPP;
|
||||
+
|
||||
+ return bus->ops->reset(bus->dev);
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* interface functions from common layer
|
||||
*/
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1080,6 +1080,14 @@ static int brcmf_revinfo_read(struct seq
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void brcmf_core_bus_reset(struct work_struct *work)
|
||||
+{
|
||||
+ struct brcmf_pub *drvr = container_of(work, struct brcmf_pub,
|
||||
+ bus_reset);
|
||||
+
|
||||
+ brcmf_bus_reset(drvr->bus_if);
|
||||
+}
|
||||
+
|
||||
int brcmf_bus_started(struct device *dev)
|
||||
{
|
||||
int ret = -1;
|
||||
@@ -1161,6 +1169,8 @@ int brcmf_bus_started(struct device *dev
|
||||
#endif
|
||||
#endif /* CONFIG_INET */
|
||||
|
||||
+ INIT_WORK(&drvr->bus_reset, brcmf_core_bus_reset);
|
||||
+
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
@@ -1282,6 +1292,8 @@ void brcmf_fw_crashed(struct device *dev
|
||||
bphy_err(drvr, "Firmware has halted or crashed\n");
|
||||
|
||||
brcmf_dev_coredump(dev);
|
||||
+
|
||||
+ schedule_work(&drvr->bus_reset);
|
||||
}
|
||||
|
||||
void brcmf_detach(struct device *dev)
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
|
||||
@@ -146,6 +146,8 @@ struct brcmf_pub {
|
||||
struct notifier_block inet6addr_notifier;
|
||||
struct brcmf_mp_device *settings;
|
||||
|
||||
+ struct work_struct bus_reset;
|
||||
+
|
||||
/* Pointer needed by OpenWrt due to backporting some fixes */
|
||||
void *cfg80211_ops;
|
||||
};
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -343,6 +343,8 @@ static const u32 brcmf_ring_itemsize[BRC
|
||||
BRCMF_D2H_MSGRING_RX_COMPLETE_ITEMSIZE
|
||||
};
|
||||
|
||||
+static void brcmf_pcie_setup(struct device *dev, const struct firmware *fw,
|
||||
+ void *nvram, u32 nvram_len);
|
||||
|
||||
static u32
|
||||
brcmf_pcie_read_reg32(struct brcmf_pciedev_info *devinfo, u32 reg_offset)
|
||||
@@ -1382,6 +1384,45 @@ static int brcmf_pcie_get_memdump(struct
|
||||
}
|
||||
|
||||
|
||||
+static int brcmf_pcie_reset(struct device *dev)
|
||||
+{
|
||||
+ struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||
+ struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie;
|
||||
+ struct brcmf_pciedev_info *devinfo = buspub->devinfo;
|
||||
+ u16 domain_nr;
|
||||
+ u16 bus_nr;
|
||||
+ int err;
|
||||
+
|
||||
+ brcmf_detach(dev);
|
||||
+
|
||||
+ brcmf_pcie_release_irq(devinfo);
|
||||
+ brcmf_pcie_release_scratchbuffers(devinfo);
|
||||
+ brcmf_pcie_release_ringbuffers(devinfo);
|
||||
+ brcmf_pcie_reset_device(devinfo);
|
||||
+
|
||||
+ err = brcmf_fw_map_chip_to_name(devinfo->ci->chip, devinfo->ci->chiprev,
|
||||
+ brcmf_pcie_fwnames,
|
||||
+ ARRAY_SIZE(brcmf_pcie_fwnames),
|
||||
+ devinfo->fw_name, devinfo->nvram_name);
|
||||
+ if (err) {
|
||||
+ dev_err(dev, "Failed to prepare FW request\n");
|
||||
+ return err;
|
||||
+ }
|
||||
+
|
||||
+ domain_nr = pci_domain_nr(devinfo->pdev->bus) + 1;
|
||||
+ bus_nr = devinfo->pdev->bus->number;
|
||||
+ err = brcmf_fw_get_firmwares_pcie(bus_if->dev, BRCMF_FW_REQUEST_NVRAM |
|
||||
+ BRCMF_FW_REQ_NV_OPTIONAL,
|
||||
+ devinfo->fw_name, devinfo->nvram_name,
|
||||
+ brcmf_pcie_setup, domain_nr, bus_nr);
|
||||
+ if (err) {
|
||||
+ dev_err(dev, "Failed to prepare FW request\n");
|
||||
+ return err;
|
||||
+ }
|
||||
+
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
static const struct brcmf_bus_ops brcmf_pcie_bus_ops = {
|
||||
.txdata = brcmf_pcie_tx,
|
||||
.stop = brcmf_pcie_down,
|
||||
@@ -1390,6 +1431,7 @@ static const struct brcmf_bus_ops brcmf_
|
||||
.wowl_config = brcmf_pcie_wowl_config,
|
||||
.get_ramsize = brcmf_pcie_get_ramsize,
|
||||
.get_memdump = brcmf_pcie_get_memdump,
|
||||
+ .reset = brcmf_pcie_reset,
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
From db3b9e2e1d58080d0754bdf9293dabf8c6491b67 Mon Sep 17 00:00:00 2001
|
||||
From: Piotr Figiel <p.figiel@camlintechnologies.com>
|
||||
Date: Fri, 8 Mar 2019 15:25:04 +0000
|
||||
Subject: [PATCH] brcmfmac: fix race during disconnect when USB completion is
|
||||
in progress
|
||||
|
||||
It was observed that rarely during USB disconnect happening shortly after
|
||||
connect (before full initialization completes) usb_hub_wq would wait
|
||||
forever for the dev_init_lock to be unlocked. dev_init_lock would remain
|
||||
locked though because of infinite wait during usb_kill_urb:
|
||||
|
||||
[ 2730.656472] kworker/0:2 D 0 260 2 0x00000000
|
||||
[ 2730.660700] Workqueue: events request_firmware_work_func
|
||||
[ 2730.664807] [<809dca20>] (__schedule) from [<809dd164>] (schedule+0x4c/0xac)
|
||||
[ 2730.670587] [<809dd164>] (schedule) from [<8069af44>] (usb_kill_urb+0xdc/0x114)
|
||||
[ 2730.676815] [<8069af44>] (usb_kill_urb) from [<7f258b50>] (brcmf_usb_free_q+0x34/0xa8 [brcmfmac])
|
||||
[ 2730.684833] [<7f258b50>] (brcmf_usb_free_q [brcmfmac]) from [<7f2517d4>] (brcmf_detach+0xa0/0xb8 [brcmfmac])
|
||||
[ 2730.693557] [<7f2517d4>] (brcmf_detach [brcmfmac]) from [<7f251a34>] (brcmf_attach+0xac/0x3d8 [brcmfmac])
|
||||
[ 2730.702094] [<7f251a34>] (brcmf_attach [brcmfmac]) from [<7f2587ac>] (brcmf_usb_probe_phase2+0x468/0x4a0 [brcmfmac])
|
||||
[ 2730.711601] [<7f2587ac>] (brcmf_usb_probe_phase2 [brcmfmac]) from [<7f252888>] (brcmf_fw_request_done+0x194/0x220 [brcmfmac])
|
||||
[ 2730.721795] [<7f252888>] (brcmf_fw_request_done [brcmfmac]) from [<805748e4>] (request_firmware_work_func+0x4c/0x88)
|
||||
[ 2730.731125] [<805748e4>] (request_firmware_work_func) from [<80141474>] (process_one_work+0x228/0x808)
|
||||
[ 2730.739223] [<80141474>] (process_one_work) from [<80141a80>] (worker_thread+0x2c/0x564)
|
||||
[ 2730.746105] [<80141a80>] (worker_thread) from [<80147bcc>] (kthread+0x13c/0x16c)
|
||||
[ 2730.752227] [<80147bcc>] (kthread) from [<801010b4>] (ret_from_fork+0x14/0x20)
|
||||
|
||||
[ 2733.099695] kworker/0:3 D 0 1065 2 0x00000000
|
||||
[ 2733.103926] Workqueue: usb_hub_wq hub_event
|
||||
[ 2733.106914] [<809dca20>] (__schedule) from [<809dd164>] (schedule+0x4c/0xac)
|
||||
[ 2733.112693] [<809dd164>] (schedule) from [<809e2a8c>] (schedule_timeout+0x214/0x3e4)
|
||||
[ 2733.119621] [<809e2a8c>] (schedule_timeout) from [<809dde2c>] (wait_for_common+0xc4/0x1c0)
|
||||
[ 2733.126810] [<809dde2c>] (wait_for_common) from [<7f258d00>] (brcmf_usb_disconnect+0x1c/0x4c [brcmfmac])
|
||||
[ 2733.135206] [<7f258d00>] (brcmf_usb_disconnect [brcmfmac]) from [<8069e0c8>] (usb_unbind_interface+0x5c/0x1e4)
|
||||
[ 2733.143943] [<8069e0c8>] (usb_unbind_interface) from [<8056d3e8>] (device_release_driver_internal+0x164/0x1fc)
|
||||
[ 2733.152769] [<8056d3e8>] (device_release_driver_internal) from [<8056c078>] (bus_remove_device+0xd0/0xfc)
|
||||
[ 2733.161138] [<8056c078>] (bus_remove_device) from [<8056977c>] (device_del+0x11c/0x310)
|
||||
[ 2733.167939] [<8056977c>] (device_del) from [<8069cba8>] (usb_disable_device+0xa0/0x1cc)
|
||||
[ 2733.174743] [<8069cba8>] (usb_disable_device) from [<8069507c>] (usb_disconnect+0x74/0x1dc)
|
||||
[ 2733.181823] [<8069507c>] (usb_disconnect) from [<80695e88>] (hub_event+0x478/0xf88)
|
||||
[ 2733.188278] [<80695e88>] (hub_event) from [<80141474>] (process_one_work+0x228/0x808)
|
||||
[ 2733.194905] [<80141474>] (process_one_work) from [<80141a80>] (worker_thread+0x2c/0x564)
|
||||
[ 2733.201724] [<80141a80>] (worker_thread) from [<80147bcc>] (kthread+0x13c/0x16c)
|
||||
[ 2733.207913] [<80147bcc>] (kthread) from [<801010b4>] (ret_from_fork+0x14/0x20)
|
||||
|
||||
It was traced down to a case where usb_kill_urb would be called on an URB
|
||||
structure containing more or less random data, including large number in
|
||||
its use_count. During the debugging it appeared that in brcmf_usb_free_q()
|
||||
the traversal over URBs' lists is not synchronized with operations on those
|
||||
lists in brcmf_usb_rx_complete() leading to handling
|
||||
brcmf_usbdev_info structure (holding lists' head) as lists' element and in
|
||||
result causing above problem.
|
||||
|
||||
Fix it by walking through all URBs during brcmf_cancel_all_urbs using the
|
||||
arrays of requests instead of linked lists.
|
||||
|
||||
Signed-off-by: Piotr Figiel <p.figiel@camlintechnologies.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 10 ++++++++--
|
||||
1 file changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -684,12 +684,18 @@ static int brcmf_usb_up(struct device *d
|
||||
|
||||
static void brcmf_cancel_all_urbs(struct brcmf_usbdev_info *devinfo)
|
||||
{
|
||||
+ int i;
|
||||
+
|
||||
if (devinfo->ctl_urb)
|
||||
usb_kill_urb(devinfo->ctl_urb);
|
||||
if (devinfo->bulk_urb)
|
||||
usb_kill_urb(devinfo->bulk_urb);
|
||||
- brcmf_usb_free_q(&devinfo->tx_postq, true);
|
||||
- brcmf_usb_free_q(&devinfo->rx_postq, true);
|
||||
+ if (devinfo->tx_reqs)
|
||||
+ for (i = 0; i < devinfo->bus_pub.ntxq; i++)
|
||||
+ usb_kill_urb(devinfo->tx_reqs[i].urb);
|
||||
+ if (devinfo->rx_reqs)
|
||||
+ for (i = 0; i < devinfo->bus_pub.nrxq; i++)
|
||||
+ usb_kill_urb(devinfo->rx_reqs[i].urb);
|
||||
}
|
||||
|
||||
static void brcmf_usb_down(struct device *dev)
|
||||
@@ -0,0 +1,54 @@
|
||||
From 2b78e5f5223666d403d4fdb30af4ad65c8da3cdb Mon Sep 17 00:00:00 2001
|
||||
From: Piotr Figiel <p.figiel@camlintechnologies.com>
|
||||
Date: Fri, 8 Mar 2019 15:25:06 +0000
|
||||
Subject: [PATCH] brcmfmac: remove pending parameter from brcmf_usb_free_q
|
||||
|
||||
brcmf_usb_free_q is no longer called with pending=true thus this boolean
|
||||
parameter is no longer needed.
|
||||
|
||||
Signed-off-by: Piotr Figiel <p.figiel@camlintechnologies.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/usb.c | 15 ++++++---------
|
||||
1 file changed, 6 insertions(+), 9 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -445,9 +445,10 @@ fail:
|
||||
|
||||
}
|
||||
|
||||
-static void brcmf_usb_free_q(struct list_head *q, bool pending)
|
||||
+static void brcmf_usb_free_q(struct list_head *q)
|
||||
{
|
||||
struct brcmf_usbreq *req, *next;
|
||||
+
|
||||
int i = 0;
|
||||
list_for_each_entry_safe(req, next, q, list) {
|
||||
if (!req->urb) {
|
||||
@@ -455,12 +456,8 @@ static void brcmf_usb_free_q(struct list
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
- if (pending) {
|
||||
- usb_kill_urb(req->urb);
|
||||
- } else {
|
||||
- usb_free_urb(req->urb);
|
||||
- list_del_init(&req->list);
|
||||
- }
|
||||
+ usb_free_urb(req->urb);
|
||||
+ list_del_init(&req->list);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1031,8 +1028,8 @@ static void brcmf_usb_detach(struct brcm
|
||||
brcmf_dbg(USB, "Enter, devinfo %p\n", devinfo);
|
||||
|
||||
/* free the URBS */
|
||||
- brcmf_usb_free_q(&devinfo->rx_freeq, false);
|
||||
- brcmf_usb_free_q(&devinfo->tx_freeq, false);
|
||||
+ brcmf_usb_free_q(&devinfo->rx_freeq);
|
||||
+ brcmf_usb_free_q(&devinfo->tx_freeq);
|
||||
|
||||
usb_free_urb(devinfo->ctl_urb);
|
||||
usb_free_urb(devinfo->bulk_urb);
|
||||
@@ -0,0 +1,29 @@
|
||||
From 504f06725d015954a0fcafdf1d90a6795ca8f769 Mon Sep 17 00:00:00 2001
|
||||
From: Piotr Figiel <p.figiel@camlintechnologies.com>
|
||||
Date: Fri, 8 Mar 2019 15:25:09 +0000
|
||||
Subject: [PATCH] brcmfmac: remove unused variable i from brcmf_usb_free_q
|
||||
|
||||
Variable i is not used so remove it.
|
||||
|
||||
Signed-off-by: Piotr Figiel <p.figiel@camlintechnologies.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -449,13 +449,11 @@ static void brcmf_usb_free_q(struct list
|
||||
{
|
||||
struct brcmf_usbreq *req, *next;
|
||||
|
||||
- int i = 0;
|
||||
list_for_each_entry_safe(req, next, q, list) {
|
||||
if (!req->urb) {
|
||||
brcmf_err("bad req\n");
|
||||
break;
|
||||
}
|
||||
- i++;
|
||||
usb_free_urb(req->urb);
|
||||
list_del_init(&req->list);
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
From 24d413a31afaee9bbbf79226052c386b01780ce2 Mon Sep 17 00:00:00 2001
|
||||
From: Piotr Figiel <p.figiel@camlintechnologies.com>
|
||||
Date: Wed, 13 Mar 2019 09:52:01 +0000
|
||||
Subject: [PATCH] brcmfmac: fix Oops when bringing up interface during USB
|
||||
disconnect
|
||||
|
||||
Fix a race which leads to an Oops with NULL pointer dereference. The
|
||||
dereference is in brcmf_config_dongle() when cfg_to_ndev() attempts to get
|
||||
net_device structure of interface with index 0 via if2bss mapping. This
|
||||
shouldn't fail because of check for bus being ready in brcmf_netdev_open(),
|
||||
but it's not synchronised with USB disconnect and there is a race: after
|
||||
the check the bus can be marked down and the mapping for interface 0 may be
|
||||
gone.
|
||||
|
||||
Solve this by modifying disconnect handling so that the removal of mapping
|
||||
of ifidx to brcmf_if structure happens after netdev removal (which is
|
||||
synchronous with brcmf_netdev_open() thanks to rtln being locked in
|
||||
devinet_ioctl()). This assures brcmf_netdev_open() returns before the
|
||||
mapping is removed during disconnect.
|
||||
|
||||
Unable to handle kernel NULL pointer dereference at virtual address 00000008
|
||||
pgd = bcae2612
|
||||
[00000008] *pgd=8be73831
|
||||
Internal error: Oops: 17 [#1] PREEMPT SMP ARM
|
||||
Modules linked in: brcmfmac brcmutil nf_log_ipv4 nf_log_common xt_LOG xt_limit
|
||||
iptable_mangle xt_connmark xt_tcpudp xt_conntrack nf_conntrack nf_defrag_ipv6
|
||||
nf_defrag_ipv4 iptable_filter ip_tables x_tables usb_f_mass_storage usb_f_rndis
|
||||
u_ether usb_serial_simple usbserial cdc_acm smsc95xx usbnet ci_hdrc_imx ci_hdrc
|
||||
usbmisc_imx ulpi 8250_exar 8250_pci 8250 8250_base libcomposite configfs
|
||||
udc_core [last unloaded: brcmutil]
|
||||
CPU: 2 PID: 24478 Comm: ifconfig Not tainted 4.19.23-00078-ga62866d-dirty #115
|
||||
Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
|
||||
PC is at brcmf_cfg80211_up+0x94/0x29c [brcmfmac]
|
||||
LR is at brcmf_cfg80211_up+0x8c/0x29c [brcmfmac]
|
||||
pc : [<7f26a91c>] lr : [<7f26a914>] psr: a0070013
|
||||
sp : eca99d28 ip : 00000000 fp : ee9c6c00
|
||||
r10: 00000036 r9 : 00000000 r8 : ece4002c
|
||||
r7 : edb5b800 r6 : 00000000 r5 : 80f08448 r4 : edb5b968
|
||||
r3 : ffffffff r2 : 00000000 r1 : 00000002 r0 : 00000000
|
||||
Flags: NzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none
|
||||
Control: 10c5387d Table: 7ca0c04a DAC: 00000051
|
||||
Process ifconfig (pid: 24478, stack limit = 0xd9e85a0e)
|
||||
Stack: (0xeca99d28 to 0xeca9a000)
|
||||
9d20: 00000000 80f873b0 0000000d 80f08448 eca99d68 50d45f32
|
||||
9d40: 7f27de94 ece40000 80f08448 80f08448 7f27de94 ece4002c 00000000 00000036
|
||||
9d60: ee9c6c00 7f27262c 00001002 50d45f32 ece40000 00000000 80f08448 80772008
|
||||
9d80: 00000001 00001043 00001002 ece40000 00000000 50d45f32 ece40000 00000001
|
||||
9da0: 80f08448 00001043 00001002 807723d0 00000000 50d45f32 80f08448 eca99e58
|
||||
9dc0: 80f87113 50d45f32 80f08448 ece40000 ece40138 00001002 80f08448 00000000
|
||||
9de0: 00000000 80772434 edbd5380 eca99e58 edbd5380 80f08448 ee9c6c0c 80805f70
|
||||
9e00: 00000000 ede08e00 00008914 ece40000 00000014 ee9c6c0c 600c0013 00001043
|
||||
9e20: 0208a8c0 ffffffff 00000000 50d45f32 eca98000 80f08448 7ee9fc38 00008914
|
||||
9e40: 80f68e40 00000051 eca98000 00000036 00000003 80808b9c 6e616c77 00000030
|
||||
9e60: 00000000 00000000 00001043 0208a8c0 ffffffff 00000000 80f08448 00000000
|
||||
9e80: 00000000 816d8b20 600c0013 00000001 ede09320 801763d4 00000000 50d45f32
|
||||
9ea0: eca98000 80f08448 7ee9fc38 50d45f32 00008914 80f08448 7ee9fc38 80f68e40
|
||||
9ec0: ed531540 8074721c 00000800 00000001 00000000 6e616c77 00000030 00000000
|
||||
9ee0: 00000000 00001002 0208a8c0 ffffffff 00000000 50d45f32 80f08448 7ee9fc38
|
||||
9f00: ed531560 ec8fc900 80285a6c 80285138 edb910c0 00000000 ecd91008 ede08e00
|
||||
9f20: 80f08448 00000000 00000000 816d8b20 600c0013 00000001 ede09320 801763d4
|
||||
9f40: 00000000 50d45f32 00021000 edb91118 edb910c0 80f08448 01b29000 edb91118
|
||||
9f60: eca99f7c 50d45f32 00021000 ec8fc900 00000003 ec8fc900 00008914 7ee9fc38
|
||||
9f80: eca98000 00000036 00000003 80285a6c 00086364 7ee9fe1c 000000c3 00000036
|
||||
9fa0: 801011c4 80101000 00086364 7ee9fe1c 00000003 00008914 7ee9fc38 00086364
|
||||
9fc0: 00086364 7ee9fe1c 000000c3 00000036 0008630c 7ee9fe1c 7ee9fc38 00000003
|
||||
9fe0: 000a42b8 7ee9fbd4 00019914 76e09acc 600c0010 00000003 00000000 00000000
|
||||
[<7f26a91c>] (brcmf_cfg80211_up [brcmfmac]) from [<7f27262c>] (brcmf_netdev_open+0x74/0xe8 [brcmfmac])
|
||||
[<7f27262c>] (brcmf_netdev_open [brcmfmac]) from [<80772008>] (__dev_open+0xcc/0x150)
|
||||
[<80772008>] (__dev_open) from [<807723d0>] (__dev_change_flags+0x168/0x1b4)
|
||||
[<807723d0>] (__dev_change_flags) from [<80772434>] (dev_change_flags+0x18/0x48)
|
||||
[<80772434>] (dev_change_flags) from [<80805f70>] (devinet_ioctl+0x67c/0x79c)
|
||||
[<80805f70>] (devinet_ioctl) from [<80808b9c>] (inet_ioctl+0x210/0x3d4)
|
||||
[<80808b9c>] (inet_ioctl) from [<8074721c>] (sock_ioctl+0x350/0x524)
|
||||
[<8074721c>] (sock_ioctl) from [<80285138>] (do_vfs_ioctl+0xb0/0x9b0)
|
||||
[<80285138>] (do_vfs_ioctl) from [<80285a6c>] (ksys_ioctl+0x34/0x5c)
|
||||
[<80285a6c>] (ksys_ioctl) from [<80101000>] (ret_fast_syscall+0x0/0x28)
|
||||
Exception stack(0xeca99fa8 to 0xeca99ff0)
|
||||
9fa0: 00086364 7ee9fe1c 00000003 00008914 7ee9fc38 00086364
|
||||
9fc0: 00086364 7ee9fe1c 000000c3 00000036 0008630c 7ee9fe1c 7ee9fc38 00000003
|
||||
9fe0: 000a42b8 7ee9fbd4 00019914 76e09acc
|
||||
Code: e5970328 eb002021 e1a02006 e3a01002 (e5909008)
|
||||
---[ end trace 5cbac2333f3ac5df ]---
|
||||
|
||||
Signed-off-by: Piotr Figiel <p.figiel@camlintechnologies.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/core.c | 10 +++++++---
|
||||
1 file changed, 7 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -838,17 +838,17 @@ static void brcmf_del_if(struct brcmf_pu
|
||||
bool rtnl_locked)
|
||||
{
|
||||
struct brcmf_if *ifp;
|
||||
+ int ifidx;
|
||||
|
||||
ifp = drvr->iflist[bsscfgidx];
|
||||
- drvr->iflist[bsscfgidx] = NULL;
|
||||
if (!ifp) {
|
||||
bphy_err(drvr, "Null interface, bsscfgidx=%d\n", bsscfgidx);
|
||||
return;
|
||||
}
|
||||
brcmf_dbg(TRACE, "Enter, bsscfgidx=%d, ifidx=%d\n", bsscfgidx,
|
||||
ifp->ifidx);
|
||||
- if (drvr->if2bss[ifp->ifidx] == bsscfgidx)
|
||||
- drvr->if2bss[ifp->ifidx] = BRCMF_BSSIDX_INVALID;
|
||||
+ ifidx = ifp->ifidx;
|
||||
+
|
||||
if (ifp->ndev) {
|
||||
if (bsscfgidx == 0) {
|
||||
if (ifp->ndev->netdev_ops == &brcmf_netdev_ops_pri) {
|
||||
@@ -876,6 +876,10 @@ static void brcmf_del_if(struct brcmf_pu
|
||||
brcmf_p2p_ifp_removed(ifp, rtnl_locked);
|
||||
kfree(ifp);
|
||||
}
|
||||
+
|
||||
+ drvr->iflist[bsscfgidx] = NULL;
|
||||
+ if (drvr->if2bss[ifidx] == bsscfgidx)
|
||||
+ drvr->if2bss[ifidx] = BRCMF_BSSIDX_INVALID;
|
||||
}
|
||||
|
||||
void brcmf_remove_interface(struct brcmf_if *ifp, bool rtnl_locked)
|
||||
@@ -0,0 +1,35 @@
|
||||
From 46953f97224d56a12ccbe9c6acaa84ca0dab2780 Mon Sep 17 00:00:00 2001
|
||||
From: Kangjie Lu <kjlu@umn.edu>
|
||||
Date: Fri, 15 Mar 2019 12:04:32 -0500
|
||||
Subject: [PATCH] brcmfmac: fix missing checks for kmemdup
|
||||
|
||||
In case kmemdup fails, the fix sets conn_info->req_ie_len and
|
||||
conn_info->resp_ie_len to zero to avoid buffer overflows.
|
||||
|
||||
Signed-off-by: Kangjie Lu <kjlu@umn.edu>
|
||||
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -5436,6 +5436,8 @@ static s32 brcmf_get_assoc_ies(struct br
|
||||
conn_info->req_ie =
|
||||
kmemdup(cfg->extra_buf, conn_info->req_ie_len,
|
||||
GFP_KERNEL);
|
||||
+ if (!conn_info->req_ie)
|
||||
+ conn_info->req_ie_len = 0;
|
||||
} else {
|
||||
conn_info->req_ie_len = 0;
|
||||
conn_info->req_ie = NULL;
|
||||
@@ -5452,6 +5454,8 @@ static s32 brcmf_get_assoc_ies(struct br
|
||||
conn_info->resp_ie =
|
||||
kmemdup(cfg->extra_buf, conn_info->resp_ie_len,
|
||||
GFP_KERNEL);
|
||||
+ if (!conn_info->resp_ie)
|
||||
+ conn_info->resp_ie_len = 0;
|
||||
} else {
|
||||
conn_info->resp_ie_len = 0;
|
||||
conn_info->resp_ie = NULL;
|
||||
@@ -0,0 +1,35 @@
|
||||
From e3062e05e1cfe378bb9b3fa0bef46711372bcf13 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman <megous@megous.com>
|
||||
Date: Sat, 6 Apr 2019 01:45:13 +0200
|
||||
Subject: [PATCH] brcmfmac: Loading the correct firmware for brcm43456
|
||||
|
||||
SDIO based brcm43456 is currently misdetected as brcm43455 and the wrong
|
||||
firmware name is used. Correct the detection and load the correct
|
||||
firmware file. Chiprev for brcm43456 is "9".
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -616,6 +616,7 @@ BRCMF_FW_NVRAM_DEF(43430A0, "brcmfmac434
|
||||
/* Note the names are not postfixed with a1 for backward compatibility */
|
||||
BRCMF_FW_NVRAM_DEF(43430A1, "brcmfmac43430-sdio.bin", "brcmfmac43430-sdio.txt");
|
||||
BRCMF_FW_NVRAM_DEF(43455, "brcmfmac43455-sdio.bin", "brcmfmac43455-sdio.txt");
|
||||
+BRCMF_FW_NVRAM_DEF(43456, "brcmfmac43456-sdio.bin", "brcmfmac43456-sdio.txt");
|
||||
BRCMF_FW_NVRAM_DEF(4354, "brcmfmac4354-sdio.bin", "brcmfmac4354-sdio.txt");
|
||||
BRCMF_FW_NVRAM_DEF(4356, "brcmfmac4356-sdio.bin", "brcmfmac4356-sdio.txt");
|
||||
BRCMF_FW_NVRAM_DEF(4373, "brcmfmac4373-sdio.bin", "brcmfmac4373-sdio.txt");
|
||||
@@ -635,7 +636,8 @@ static struct brcmf_firmware_mapping brc
|
||||
BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4339_CHIP_ID, 0xFFFFFFFF, 4339),
|
||||
BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43430_CHIP_ID, 0x00000001, 43430A0),
|
||||
BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43430_CHIP_ID, 0xFFFFFFFE, 43430A1),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4345_CHIP_ID, 0xFFFFFFC0, 43455),
|
||||
+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4345_CHIP_ID, 0x00000200, 43456),
|
||||
+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4345_CHIP_ID, 0xFFFFFDC0, 43455),
|
||||
BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4354_CHIP_ID, 0xFFFFFFFF, 4354),
|
||||
BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4356_CHIP_ID, 0xFFFFFFFF, 4356),
|
||||
BRCMF_FW_NVRAM_ENTRY(CY_CC_4373_CHIP_ID, 0xFFFFFFFF, 4373)
|
||||
@@ -0,0 +1,39 @@
|
||||
From 9ef77fbedad9ea8895cd5d7fb7aee16071f527dc Mon Sep 17 00:00:00 2001
|
||||
From: Wright Feng <Wright.Feng@cypress.com>
|
||||
Date: Fri, 26 Apr 2019 03:12:32 +0000
|
||||
Subject: [PATCH] brcmfmac: send mailbox interrupt twice for specific hardware
|
||||
device
|
||||
|
||||
For PCIE wireless device with core revision less than 14, device may miss
|
||||
PCIE to System Backplane Interrupt via PCIEtoSBMailbox. So add sending
|
||||
mail box interrupt twice as a hardware workaround.
|
||||
|
||||
Signed-off-by: Wright Feng <wright.feng@cypress.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -671,6 +671,7 @@ static int
|
||||
brcmf_pcie_send_mb_data(struct brcmf_pciedev_info *devinfo, u32 htod_mb_data)
|
||||
{
|
||||
struct brcmf_pcie_shared_info *shared;
|
||||
+ struct brcmf_core *core;
|
||||
u32 addr;
|
||||
u32 cur_htod_mb_data;
|
||||
u32 i;
|
||||
@@ -694,7 +695,11 @@ brcmf_pcie_send_mb_data(struct brcmf_pci
|
||||
|
||||
brcmf_pcie_write_tcm32(devinfo, addr, htod_mb_data);
|
||||
pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1);
|
||||
- pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1);
|
||||
+
|
||||
+ /* Send mailbox interrupt twice as a hardware workaround */
|
||||
+ core = brcmf_chip_get_core(devinfo->ci, BCMA_CORE_PCIE2);
|
||||
+ if (core->rev <= 13)
|
||||
+ pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
From e025da3d7aa4770bb1d1b3b0aa7cc4da1744852d Mon Sep 17 00:00:00 2001
|
||||
From: Dan Carpenter <dan.carpenter@oracle.com>
|
||||
Date: Wed, 24 Apr 2019 12:52:18 +0300
|
||||
Subject: [PATCH] brcm80211: potential NULL dereference in
|
||||
brcmf_cfg80211_vndr_cmds_dcmd_handler()
|
||||
|
||||
If "ret_len" is negative then it could lead to a NULL dereference.
|
||||
|
||||
The "ret_len" value comes from nl80211_vendor_cmd(), if it's negative
|
||||
then we don't allocate the "dcmd_buf" buffer. Then we pass "ret_len" to
|
||||
brcmf_fil_cmd_data_set() where it is cast to a very high u32 value.
|
||||
Most of the functions in that call tree check whether the buffer we pass
|
||||
is NULL but there are at least a couple places which don't such as
|
||||
brcmf_dbg_hex_dump() and brcmf_msgbuf_query_dcmd(). We memcpy() to and
|
||||
from the buffer so it would result in a NULL dereference.
|
||||
|
||||
The fix is to change the types so that "ret_len" can't be negative. (If
|
||||
we memcpy() zero bytes to NULL, that's a no-op and doesn't cause an
|
||||
issue).
|
||||
|
||||
Fixes: 1bacb0487d0e ("brcmfmac: replace cfg80211 testmode with vendor command")
|
||||
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c
|
||||
@@ -35,9 +35,10 @@ static int brcmf_cfg80211_vndr_cmds_dcmd
|
||||
struct brcmf_if *ifp;
|
||||
const struct brcmf_vndr_dcmd_hdr *cmdhdr = data;
|
||||
struct sk_buff *reply;
|
||||
- int ret, payload, ret_len;
|
||||
+ unsigned int payload, ret_len;
|
||||
void *dcmd_buf = NULL, *wr_pointer;
|
||||
u16 msglen, maxmsglen = PAGE_SIZE - 0x100;
|
||||
+ int ret;
|
||||
|
||||
if (len < sizeof(*cmdhdr)) {
|
||||
brcmf_err("vendor command too short: %d\n", len);
|
||||
@@ -65,7 +66,7 @@ static int brcmf_cfg80211_vndr_cmds_dcmd
|
||||
brcmf_err("oversize return buffer %d\n", ret_len);
|
||||
ret_len = BRCMF_DCMD_MAXLEN;
|
||||
}
|
||||
- payload = max(ret_len, len) + 1;
|
||||
+ payload = max_t(unsigned int, ret_len, len) + 1;
|
||||
dcmd_buf = vzalloc(payload);
|
||||
if (NULL == dcmd_buf)
|
||||
return -ENOMEM;
|
||||
@@ -0,0 +1,49 @@
|
||||
From 2d91c8ad068a5cad4d9e7ece8dc811a697c7176a Mon Sep 17 00:00:00 2001
|
||||
From: Wright Feng <Wright.Feng@cypress.com>
|
||||
Date: Fri, 26 Apr 2019 03:41:46 +0000
|
||||
Subject: [PATCH] brcmfmac: set txflow request id from 1 to pktids array size
|
||||
|
||||
Some PCIE firmwares drop txstatus if pktid is 0 and make packet held in
|
||||
host side and never be released. If that packet type is 802.1x, the
|
||||
pend_8021x_cnt value will be always greater than 0 and show "Timed out
|
||||
waiting for no pending 802.1x packets" error message when sending key to
|
||||
dongle every time.
|
||||
|
||||
To be compatible with all firmwares, host should set txflow request id
|
||||
from 1 instead of from 0.
|
||||
|
||||
Signed-off-by: Wright Feng <wright.feng@cypress.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
||||
@@ -375,7 +375,7 @@ brcmf_msgbuf_get_pktid(struct device *de
|
||||
struct brcmf_msgbuf_pktid *pktid;
|
||||
struct sk_buff *skb;
|
||||
|
||||
- if (idx >= pktids->array_size) {
|
||||
+ if (idx < 0 || idx >= pktids->array_size) {
|
||||
brcmf_err("Invalid packet id %d (max %d)\n", idx,
|
||||
pktids->array_size);
|
||||
return NULL;
|
||||
@@ -745,7 +745,7 @@ static void brcmf_msgbuf_txflow(struct b
|
||||
tx_msghdr = (struct msgbuf_tx_msghdr *)ret_ptr;
|
||||
|
||||
tx_msghdr->msg.msgtype = MSGBUF_TYPE_TX_POST;
|
||||
- tx_msghdr->msg.request_id = cpu_to_le32(pktid);
|
||||
+ tx_msghdr->msg.request_id = cpu_to_le32(pktid + 1);
|
||||
tx_msghdr->msg.ifidx = brcmf_flowring_ifidx_get(flow, flowid);
|
||||
tx_msghdr->flags = BRCMF_MSGBUF_PKT_FLAGS_FRAME_802_3;
|
||||
tx_msghdr->flags |= (skb->priority & 0x07) <<
|
||||
@@ -882,7 +882,7 @@ brcmf_msgbuf_process_txstatus(struct brc
|
||||
u16 flowid;
|
||||
|
||||
tx_status = (struct msgbuf_tx_status *)buf;
|
||||
- idx = le32_to_cpu(tx_status->msg.request_id);
|
||||
+ idx = le32_to_cpu(tx_status->msg.request_id) - 1;
|
||||
flowid = le16_to_cpu(tx_status->compl_hdr.flow_ring_id);
|
||||
flowid -= BRCMF_H2D_MSGRING_FLOWRING_IDSTART;
|
||||
skb = brcmf_msgbuf_get_pktid(msgbuf->drvr->bus_if->dev,
|
||||
@@ -0,0 +1,90 @@
|
||||
From 47dd82e3d25e85a7c7c4e4b0eac9d297d1e5e2d4 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Sun, 28 Apr 2019 23:38:26 +0200
|
||||
Subject: [PATCH] brcmfmac: print firmware messages after a firmware crash
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Normally firmware messages are printed with debugging enabled only. It's
|
||||
a good idea as firmware may print a lot of messages that normal users
|
||||
don't need to care about.
|
||||
|
||||
However, on firmware crash, it may be very helpful to log all recent
|
||||
messages. There is almost always a backtrace available as well as rought
|
||||
info on the latest actions/state.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/pcie.c | 24 ++++++++++++++-----
|
||||
1 file changed, 18 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -760,15 +760,22 @@ static void brcmf_pcie_bus_console_init(
|
||||
console->base_addr, console->buf_addr, console->bufsize);
|
||||
}
|
||||
|
||||
-
|
||||
-static void brcmf_pcie_bus_console_read(struct brcmf_pciedev_info *devinfo)
|
||||
+/**
|
||||
+ * brcmf_pcie_bus_console_read - reads firmware messages
|
||||
+ *
|
||||
+ * @error: specifies if error has occurred (prints messages unconditionally)
|
||||
+ */
|
||||
+static void brcmf_pcie_bus_console_read(struct brcmf_pciedev_info *devinfo,
|
||||
+ bool error)
|
||||
{
|
||||
+ struct pci_dev *pdev = devinfo->pdev;
|
||||
+ struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev);
|
||||
struct brcmf_pcie_console *console;
|
||||
u32 addr;
|
||||
u8 ch;
|
||||
u32 newidx;
|
||||
|
||||
- if (!BRCMF_FWCON_ON())
|
||||
+ if (!error && !BRCMF_FWCON_ON())
|
||||
return;
|
||||
|
||||
console = &devinfo->shared.console;
|
||||
@@ -792,7 +799,10 @@ static void brcmf_pcie_bus_console_read(
|
||||
}
|
||||
if (ch == '\n') {
|
||||
console->log_str[console->log_idx] = 0;
|
||||
- pr_debug("CONSOLE: %s", console->log_str);
|
||||
+ if (error)
|
||||
+ brcmf_err(bus, "CONSOLE: %s", console->log_str);
|
||||
+ else
|
||||
+ pr_debug("CONSOLE: %s", console->log_str);
|
||||
console->log_idx = 0;
|
||||
}
|
||||
}
|
||||
@@ -847,7 +857,7 @@ static irqreturn_t brcmf_pcie_isr_thread
|
||||
&devinfo->pdev->dev);
|
||||
}
|
||||
}
|
||||
- brcmf_pcie_bus_console_read(devinfo);
|
||||
+ brcmf_pcie_bus_console_read(devinfo, false);
|
||||
if (devinfo->state == BRCMFMAC_PCIE_STATE_UP)
|
||||
brcmf_pcie_intr_enable(devinfo);
|
||||
devinfo->in_irq = false;
|
||||
@@ -1398,6 +1408,8 @@ static int brcmf_pcie_reset(struct devic
|
||||
u16 bus_nr;
|
||||
int err;
|
||||
|
||||
+ brcmf_pcie_bus_console_read(devinfo, true);
|
||||
+
|
||||
brcmf_detach(dev);
|
||||
|
||||
brcmf_pcie_release_irq(devinfo);
|
||||
@@ -1799,7 +1811,7 @@ static void brcmf_pcie_setup(struct devi
|
||||
if (brcmf_pcie_attach_bus(devinfo) == 0)
|
||||
return;
|
||||
|
||||
- brcmf_pcie_bus_console_read(devinfo);
|
||||
+ brcmf_pcie_bus_console_read(devinfo, false);
|
||||
|
||||
fail:
|
||||
device_release_driver(dev);
|
||||
@@ -13,7 +13,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1305,6 +1305,7 @@ int __init brcmf_core_init(void)
|
||||
@@ -1411,6 +1411,7 @@ int __init brcmf_core_init(void)
|
||||
{
|
||||
if (!schedule_work(&brcmf_driver_work))
|
||||
return -EBUSY;
|
||||
@@ -67,16 +67,17 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
|
||||
kfree(fwctx);
|
||||
}
|
||||
|
||||
@@ -528,6 +537,8 @@ int brcmf_fw_get_firmwares_pcie(struct d
|
||||
@@ -528,6 +537,9 @@ int brcmf_fw_get_firmwares_pcie(struct d
|
||||
u16 domain_nr, u16 bus_nr)
|
||||
{
|
||||
struct brcmf_fw *fwctx;
|
||||
+ struct completion completion;
|
||||
+ unsigned long time_left;
|
||||
+ int err;
|
||||
|
||||
brcmf_dbg(TRACE, "enter: dev=%s\n", dev_name(dev));
|
||||
if (!fw_cb || !code)
|
||||
@@ -548,9 +559,17 @@ int brcmf_fw_get_firmwares_pcie(struct d
|
||||
@@ -548,9 +560,20 @@ int brcmf_fw_get_firmwares_pcie(struct d
|
||||
fwctx->domain_nr = domain_nr;
|
||||
fwctx->bus_nr = bus_nr;
|
||||
|
||||
@@ -87,10 +88,13 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
|
||||
+ err = request_firmware_nowait(THIS_MODULE, true, code, dev,
|
||||
GFP_KERNEL, fwctx,
|
||||
brcmf_fw_request_code_done);
|
||||
+ if (!err)
|
||||
+ wait_for_completion_timeout(fwctx->completion,
|
||||
+ msecs_to_jiffies(5000));
|
||||
+ fwctx->completion = NULL;
|
||||
+ if (!err) {
|
||||
+ time_left = wait_for_completion_timeout(&completion,
|
||||
+ msecs_to_jiffies(5000));
|
||||
+ if (!time_left && fwctx)
|
||||
+ fwctx->completion = NULL;
|
||||
+ }
|
||||
+
|
||||
+ return err;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,12 +10,11 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -656,9 +656,37 @@ static struct wireless_dev *brcmf_cfg802
|
||||
u32 *flags,
|
||||
struct vif_params *params)
|
||||
{
|
||||
+ struct net_device *dev;
|
||||
@@ -662,8 +662,36 @@ static struct wireless_dev *brcmf_cfg802
|
||||
struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
struct brcmf_pub *drvr = cfg->pub;
|
||||
struct wireless_dev *wdev;
|
||||
+ struct net_device *dev;
|
||||
int err;
|
||||
|
||||
+ /*
|
||||
|
||||
@@ -14,7 +14,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -2775,6 +2775,10 @@ brcmf_cfg80211_set_power_mgmt(struct wip
|
||||
@@ -2823,6 +2823,10 @@ brcmf_cfg80211_set_power_mgmt(struct wip
|
||||
* preference in cfg struct to apply this to
|
||||
* FW later while initializing the dongle
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Subject: [PATCH] brcmfmac: get RAM info right before downloading PCIe firmware
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
It's important as brcmf_chip_get_raminfo() also makes sure that memory
|
||||
is properly setup. Without it the firmware could report invalid RAM
|
||||
address like 0x04000001.
|
||||
|
||||
During a normal brcmfmac lifetime brcmf_chip_get_raminfo() is called on
|
||||
probe by the brcmf_chip_recognition(). This change allows implementing
|
||||
further improvements like handling errors by resetting a device with
|
||||
the brcmf_pcie_reset_device() and redownloading a firmware afterwards.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c | 6 ++++--
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.h | 1 +
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 6 ++++++
|
||||
3 files changed, 11 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
|
||||
@@ -700,8 +700,10 @@ static u32 brcmf_chip_tcm_rambase(struct
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int brcmf_chip_get_raminfo(struct brcmf_chip_priv *ci)
|
||||
+int brcmf_chip_get_raminfo(struct brcmf_chip *pub)
|
||||
{
|
||||
+ struct brcmf_chip_priv *ci = container_of(pub, struct brcmf_chip_priv,
|
||||
+ pub);
|
||||
struct brcmf_core_priv *mem_core;
|
||||
struct brcmf_core *mem;
|
||||
|
||||
@@ -981,7 +983,7 @@ static int brcmf_chip_recognition(struct
|
||||
brcmf_chip_set_passive(&ci->pub);
|
||||
}
|
||||
|
||||
- return brcmf_chip_get_raminfo(ci);
|
||||
+ return brcmf_chip_get_raminfo(&ci->pub);
|
||||
}
|
||||
|
||||
static void brcmf_chip_disable_arm(struct brcmf_chip_priv *chip, u16 id)
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.h
|
||||
@@ -80,6 +80,7 @@ struct brcmf_buscore_ops {
|
||||
void (*activate)(void *ctx, struct brcmf_chip *chip, u32 rstvec);
|
||||
};
|
||||
|
||||
+int brcmf_chip_get_raminfo(struct brcmf_chip *pub);
|
||||
struct brcmf_chip *brcmf_chip_attach(void *ctx,
|
||||
const struct brcmf_buscore_ops *ops);
|
||||
void brcmf_chip_detach(struct brcmf_chip *chip);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -1761,6 +1761,12 @@ static void brcmf_pcie_setup(struct devi
|
||||
|
||||
brcmf_pcie_attach(devinfo);
|
||||
|
||||
+ ret = brcmf_chip_get_raminfo(devinfo->ci);
|
||||
+ if (ret) {
|
||||
+ brcmf_err(bus, "Failed to get RAM info\n");
|
||||
+ goto fail;
|
||||
+ }
|
||||
+
|
||||
/* Some of the firmwares have the size of the memory of the device
|
||||
* defined inside the firmware. This is because part of the memory in
|
||||
* the device is shared and the devision is determined by FW. Parse
|
||||
@@ -5,9 +5,9 @@ PKG_RELEASE=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(LEDE_GIT)/project/libubox.git
|
||||
PKG_SOURCE_DATE:=2018-01-07
|
||||
PKG_SOURCE_VERSION:=1dafcd7813f147811a6bbdb00eec603fe732aac1
|
||||
PKG_MIRROR_HASH:=0bd0f0980cdb01950da4f10bffbb8089ffd76d442fc443b5f8e1aa860b429063
|
||||
PKG_SOURCE_DATE:=2018-11-16
|
||||
PKG_SOURCE_VERSION:=4382c76d1f225e462c6adf37e577fea0d046b854
|
||||
PKG_MIRROR_HASH:=17188fdd604f028dde8366a0dca24dd873df28acea1b25a34c8b4db4ef29baac
|
||||
CMAKE_INSTALL:=1
|
||||
|
||||
PKG_LICENSE:=ISC
|
||||
|
||||
@@ -31,7 +31,7 @@ define Package/libunwind
|
||||
CATEGORY:=Libraries
|
||||
TITLE:=The libunwind project
|
||||
URL:=http://www.nongnu.org/libunwind/
|
||||
DEPENDS:=@(mips||mipsel||powerpc||i386||x86_64||arm)
|
||||
DEPENDS:=@(mips||mipsel||powerpc||i386||x86_64||arm||aarch64)
|
||||
endef
|
||||
|
||||
define Package/libunwind/description
|
||||
|
||||
@@ -8,13 +8,13 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=mbedtls
|
||||
PKG_VERSION:=2.7.5
|
||||
PKG_VERSION:=2.7.10
|
||||
PKG_RELEASE:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-gpl.tgz
|
||||
PKG_SOURCE_URL:=https://tls.mbed.org/download/
|
||||
PKG_HASH:=e9d797ded824e1ca7516faab7fa3c4c73c5bc3199b832a06f61ee8709df71a69
|
||||
PKG_HASH:=268e2a2aa328f4f6ffb1ea48dcbbc477896f88581561f1fe809638425e98d06a
|
||||
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_LICENSE:=GPL-2.0+
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/include/mbedtls/config.h
|
||||
+++ b/include/mbedtls/config.h
|
||||
@@ -566,17 +566,17 @@
|
||||
@@ -586,17 +586,17 @@
|
||||
*
|
||||
* Comment macros to disable the curve and functions for it
|
||||
*/
|
||||
@@ -26,7 +26,7 @@
|
||||
#define MBEDTLS_ECP_DP_CURVE25519_ENABLED
|
||||
|
||||
/**
|
||||
@@ -601,8 +601,8 @@
|
||||
@@ -621,8 +621,8 @@
|
||||
* Requires: MBEDTLS_HMAC_DRBG_C
|
||||
*
|
||||
* Comment this macro to disable deterministic ECDSA.
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_KEY_EXCHANGE_PSK_ENABLED
|
||||
@@ -655,7 +655,7 @@
|
||||
@@ -675,7 +675,7 @@
|
||||
* See dhm.h for more details.
|
||||
*
|
||||
*/
|
||||
@@ -45,7 +45,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED
|
||||
@@ -674,8 +674,8 @@
|
||||
@@ -694,8 +694,8 @@
|
||||
* MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256
|
||||
* MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA
|
||||
* MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED
|
||||
@@ -700,7 +700,7 @@
|
||||
@@ -720,7 +720,7 @@
|
||||
* MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA
|
||||
* MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA
|
||||
*/
|
||||
@@ -64,7 +64,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_KEY_EXCHANGE_RSA_ENABLED
|
||||
@@ -834,7 +834,7 @@
|
||||
@@ -854,7 +854,7 @@
|
||||
* MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256
|
||||
* MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384
|
||||
*/
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED
|
||||
@@ -858,7 +858,7 @@
|
||||
@@ -878,7 +878,7 @@
|
||||
* MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256
|
||||
* MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384
|
||||
*/
|
||||
@@ -82,7 +82,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED
|
||||
@@ -962,7 +962,7 @@
|
||||
@@ -982,7 +982,7 @@
|
||||
* This option is only useful if both MBEDTLS_SHA256_C and
|
||||
* MBEDTLS_SHA512_C are defined. Otherwise the available hash module is used.
|
||||
*/
|
||||
@@ -91,7 +91,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_ENTROPY_NV_SEED
|
||||
@@ -1057,14 +1057,14 @@
|
||||
@@ -1077,14 +1077,14 @@
|
||||
* Uncomment this macro to disable the use of CRT in RSA.
|
||||
*
|
||||
*/
|
||||
@@ -108,7 +108,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_SHA256_SMALLER
|
||||
@@ -1080,7 +1080,7 @@
|
||||
@@ -1100,7 +1100,7 @@
|
||||
*
|
||||
* Uncomment to enable the smaller implementation of SHA256.
|
||||
*/
|
||||
@@ -117,7 +117,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_SSL_ALL_ALERT_MESSAGES
|
||||
@@ -1207,7 +1207,7 @@
|
||||
@@ -1227,7 +1227,7 @@
|
||||
* configuration of this extension).
|
||||
*
|
||||
*/
|
||||
@@ -126,7 +126,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO
|
||||
@@ -1381,8 +1381,8 @@
|
||||
@@ -1401,8 +1401,8 @@
|
||||
* callbacks are provided by MBEDTLS_SSL_TICKET_C.
|
||||
*
|
||||
* Comment this macro to disable support for SSL session tickets
|
||||
@@ -136,7 +136,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_SSL_EXPORT_KEYS
|
||||
@@ -1412,7 +1412,7 @@
|
||||
@@ -1432,7 +1432,7 @@
|
||||
*
|
||||
* Comment this macro to disable support for truncated HMAC in SSL
|
||||
*/
|
||||
@@ -145,7 +145,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_SSL_TRUNCATED_HMAC_COMPAT
|
||||
@@ -1470,8 +1470,8 @@
|
||||
@@ -1490,8 +1490,8 @@
|
||||
* Requires: MBEDTLS_VERSION_C
|
||||
*
|
||||
* Comment this to disable run-time checking and save ROM space
|
||||
@@ -155,7 +155,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3
|
||||
@@ -1798,7 +1798,7 @@
|
||||
@@ -1818,7 +1818,7 @@
|
||||
* MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256
|
||||
* MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256
|
||||
*/
|
||||
@@ -164,7 +164,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_CCM_C
|
||||
@@ -1812,7 +1812,7 @@
|
||||
@@ -1832,7 +1832,7 @@
|
||||
* This module enables the AES-CCM ciphersuites, if other requisites are
|
||||
* enabled as well.
|
||||
*/
|
||||
@@ -173,7 +173,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_CERTS_C
|
||||
@@ -1824,7 +1824,7 @@
|
||||
@@ -1844,7 +1844,7 @@
|
||||
*
|
||||
* This module is used for testing (ssl_client/server).
|
||||
*/
|
||||
@@ -182,7 +182,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_CIPHER_C
|
||||
@@ -1877,7 +1877,7 @@
|
||||
@@ -1897,7 +1897,7 @@
|
||||
*
|
||||
* This module provides debugging functions.
|
||||
*/
|
||||
@@ -191,7 +191,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_DES_C
|
||||
@@ -1906,7 +1906,7 @@
|
||||
@@ -1926,7 +1926,7 @@
|
||||
* \warning DES is considered a weak cipher and its use constitutes a
|
||||
* security risk. We recommend considering stronger ciphers instead.
|
||||
*/
|
||||
@@ -200,7 +200,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_DHM_C
|
||||
@@ -2067,8 +2067,8 @@
|
||||
@@ -2087,8 +2087,8 @@
|
||||
* Requires: MBEDTLS_MD_C
|
||||
*
|
||||
* Uncomment to enable the HMAC_DRBG random number geerator.
|
||||
@@ -210,7 +210,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_MD_C
|
||||
@@ -2362,7 +2362,7 @@
|
||||
@@ -2382,7 +2382,7 @@
|
||||
* Caller: library/md.c
|
||||
*
|
||||
*/
|
||||
@@ -219,7 +219,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_RSA_C
|
||||
@@ -2468,8 +2468,8 @@
|
||||
@@ -2488,8 +2488,8 @@
|
||||
* Caller:
|
||||
*
|
||||
* Requires: MBEDTLS_CIPHER_C
|
||||
@@ -229,7 +229,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_SSL_CLI_C
|
||||
@@ -2568,8 +2568,8 @@
|
||||
@@ -2588,8 +2588,8 @@
|
||||
* Module: library/version.c
|
||||
*
|
||||
* This module provides run-time version information.
|
||||
@@ -239,7 +239,7 @@
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_X509_USE_C
|
||||
@@ -2679,7 +2679,7 @@
|
||||
@@ -2699,7 +2699,7 @@
|
||||
* Module: library/xtea.c
|
||||
* Caller:
|
||||
*/
|
||||
@@ -248,7 +248,7 @@
|
||||
|
||||
/* \} name SECTION: mbed TLS modules */
|
||||
|
||||
@@ -2798,7 +2798,7 @@
|
||||
@@ -2818,7 +2818,7 @@
|
||||
* on it, and considering stronger message digests instead.
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -4,12 +4,12 @@ the new library with binaries compiled against the old library.
|
||||
|
||||
--- a/library/CMakeLists.txt
|
||||
+++ b/library/CMakeLists.txt
|
||||
@@ -141,7 +141,7 @@ endif(USE_STATIC_MBEDTLS_LIBRARY)
|
||||
@@ -147,7 +147,7 @@ endif(USE_STATIC_MBEDTLS_LIBRARY)
|
||||
|
||||
if(USE_SHARED_MBEDTLS_LIBRARY)
|
||||
add_library(mbedcrypto SHARED ${src_crypto})
|
||||
- set_target_properties(mbedcrypto PROPERTIES VERSION 2.7.5 SOVERSION 2)
|
||||
+ set_target_properties(mbedcrypto PROPERTIES VERSION 2.7.5 SOVERSION 0)
|
||||
- set_target_properties(mbedcrypto PROPERTIES VERSION 2.7.10 SOVERSION 2)
|
||||
+ set_target_properties(mbedcrypto PROPERTIES VERSION 2.7.10 SOVERSION 0)
|
||||
target_link_libraries(mbedcrypto ${libs})
|
||||
|
||||
add_library(mbedx509 SHARED ${src_x509})
|
||||
|
||||
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=openssl
|
||||
PKG_BASE:=1.0.2
|
||||
PKG_BUGFIX:=p
|
||||
PKG_BUGFIX:=s
|
||||
PKG_VERSION:=$(PKG_BASE)$(PKG_BUGFIX)
|
||||
PKG_RELEASE:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
@@ -23,7 +23,7 @@ PKG_SOURCE_URL:=http://www.openssl.org/source/ \
|
||||
http://www.openssl.org/source/old/$(PKG_BASE)/ \
|
||||
ftp://ftp.funet.fi/pub/crypt/mirrors/ftp.openssl.org/source \
|
||||
ftp://ftp.sunet.se/pub/security/tools/net/openssl/source/
|
||||
PKG_HASH:=50a98e07b1a89eb8f6a99477f262df71c6fa7bef77df4dc83025a2845c827d00
|
||||
PKG_HASH:=cabd5c9492825ce5bd23f3c3aeed6a97f8142f606d893df216411f07d1abab96
|
||||
|
||||
PKG_LICENSE:=OpenSSL
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/Configure
|
||||
+++ b/Configure
|
||||
@@ -2143,6 +2143,11 @@ EOF
|
||||
@@ -2144,6 +2144,11 @@ EOF
|
||||
close(OUT);
|
||||
}
|
||||
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
fi; \
|
||||
--- a/crypto/Makefile
|
||||
+++ b/crypto/Makefile
|
||||
@@ -85,11 +85,11 @@ testapps:
|
||||
@@ -87,11 +87,11 @@ testapps:
|
||||
@if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
|
||||
|
||||
subdirs:
|
||||
@@ -106,7 +106,7 @@
|
||||
|
||||
links:
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../include/openssl $(EXHEADER)
|
||||
@@ -100,7 +100,7 @@ links:
|
||||
@@ -102,7 +102,7 @@ links:
|
||||
# lib: $(LIB): are splitted to avoid end-less loop
|
||||
lib: $(LIB)
|
||||
@touch lib
|
||||
@@ -115,7 +115,7 @@
|
||||
$(AR) $(LIB) $(LIBOBJ)
|
||||
test -z "$(FIPSLIBDIR)" || $(AR) $(LIB) $(FIPSLIBDIR)fipscanister.o
|
||||
$(RANLIB) $(LIB) || echo Never mind.
|
||||
@@ -111,7 +111,7 @@ shared: buildinf.h lib subdirs
|
||||
@@ -113,7 +113,7 @@ shared: buildinf.h lib subdirs
|
||||
fi
|
||||
|
||||
libs:
|
||||
@@ -124,7 +124,7 @@
|
||||
|
||||
install:
|
||||
@[ -n "$(INSTALLTOP)" ] # should be set by top Makefile...
|
||||
@@ -120,7 +120,7 @@ install:
|
||||
@@ -122,7 +122,7 @@ install:
|
||||
(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
|
||||
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
|
||||
done;
|
||||
|
||||
@@ -5,9 +5,9 @@ PKG_RELEASE=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/uclient.git
|
||||
PKG_SOURCE_DATE:=2018-08-03
|
||||
PKG_SOURCE_VERSION:=ae1c656ff041c6f1ccb37b070fa261e0d71f2b12
|
||||
PKG_MIRROR_HASH:=e88c92f880d3c1cf4162f62c4eeb8986baa8d73772e51eed3a60a8346aeb1b7c
|
||||
PKG_SOURCE_DATE:=2018-11-24
|
||||
PKG_SOURCE_VERSION:=3ba74ebc9363993ea2a83fd73b4c1b1a96e73940
|
||||
PKG_MIRROR_HASH:=3c456a8ab965ed8db216ac1bfaf2b974e2f689137a7c35d0220e5b7d9c42a994
|
||||
CMAKE_INSTALL:=1
|
||||
|
||||
PKG_BUILD_DEPENDS:=ustream-ssl
|
||||
|
||||
@@ -12,9 +12,9 @@ PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(LEDE_GIT)/project/uhttpd.git
|
||||
PKG_SOURCE_DATE:=2017-11-04
|
||||
PKG_SOURCE_VERSION:=a235636a2687fafb9c474e4b134a59ff66425c92
|
||||
PKG_MIRROR_HASH:=626392a485e8ab8085bb55d9424b176be9143529db59a820a7de71061a93a007
|
||||
PKG_SOURCE_DATE:=2018-11-28
|
||||
PKG_SOURCE_VERSION:=cdfc902a4cb77bc538a729f9e1c8a8578454a0e5
|
||||
PKG_MIRROR_HASH:=6b21111547a4453355bd6c941a47f0116a652a77d87c1e05a035168b8ab2aa6f
|
||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||
PKG_LICENSE:=ISC
|
||||
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ca-certificates
|
||||
PKG_VERSION:=20170717
|
||||
PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
|
||||
PKG_VERSION:=20190110
|
||||
PKG_RELEASE:=1
|
||||
PKG_MAINTAINER:=
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).tar.xz
|
||||
PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/main/c/ca-certificates
|
||||
PKG_HASH:=e487639b641fa75445174734dd6e9d600373e3248b3d86a7e3c6d0f6977decd2
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
|
||||
PKG_HASH:=ee4bf0f4c6398005f5b5ca4e0b87b82837ac5c3b0280a1cb3a63c47555c3a675
|
||||
|
||||
PKG_INSTALL:=1
|
||||
|
||||
@@ -57,6 +57,7 @@ endef
|
||||
define Package/ca-bundle/install
|
||||
$(INSTALL_DIR) $(1)/etc/ssl/certs
|
||||
cat $(PKG_INSTALL_DIR)/usr/share/ca-certificates/*/*.crt >$(1)/etc/ssl/certs/ca-certificates.crt
|
||||
$(LN) /etc/ssl/certs/ca-certificates.crt $(1)/etc/ssl/cert.pem
|
||||
endef
|
||||
$(eval $(call BuildPackage,ca-certificates))
|
||||
$(eval $(call BuildPackage,ca-bundle))
|
||||
|
||||
@@ -15,10 +15,10 @@ PKG_RELEASE:=1
|
||||
PKG_FLAGS:=essential
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://git.lede-project.org/project/opkg-lede.git
|
||||
PKG_SOURCE_DATE:=2017-12-08
|
||||
PKG_SOURCE_VERSION:=9f61f7acf3845d2e09675b49fec5d783d57eb780
|
||||
PKG_MIRROR_HASH:=3e70d78e92f73e0848a75cfd74762656a4172b6d71369b9e2717dc57acf39cbf
|
||||
PKG_SOURCE_URL:=https://git.openwrt.org/project/opkg-lede.git
|
||||
PKG_SOURCE_DATE:=2019-01-18
|
||||
PKG_SOURCE_VERSION:=7708a01a084872bbe4c46f36d2da021fdeb10862
|
||||
PKG_MIRROR_HASH:=117148ece22e64654264afd869606ef5507edd3dc965ffe000c6b1b1074b3f4a
|
||||
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
PKG_LICENSE_FILES:=COPYING
|
||||
@@ -43,7 +43,7 @@ define Package/opkg
|
||||
CATEGORY:=Base system
|
||||
TITLE:=opkg package manager
|
||||
DEPENDS:=+uclient-fetch +libpthread +libubox
|
||||
URL:=https://git.lede-project.org/?p=project/opkg-lede.git
|
||||
URL:=$(PKG_SOURCE_URL)
|
||||
MENU:=1
|
||||
endef
|
||||
|
||||
@@ -91,7 +91,7 @@ define Package/opkg/install
|
||||
$(INSTALL_BIN) ./files/20_migrate-feeds $(1)/etc/uci-defaults/
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/opkg-cl $(1)/bin/opkg
|
||||
ifneq ($(CONFIG_SIGNED_PACKAGES),)
|
||||
echo "option check_signature 1" >> $(1)/etc/opkg.conf
|
||||
echo "option check_signature" >> $(1)/etc/opkg.conf
|
||||
endif
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(INSTALL_BIN) ./files/opkg-key $(1)/usr/sbin/
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=procd
|
||||
PKG_RELEASE:=1
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(LEDE_GIT)/project/procd.git
|
||||
|
||||
@@ -383,6 +383,10 @@ _procd_send_signal() {
|
||||
local instance="$2"
|
||||
local signal="$3"
|
||||
|
||||
case "$signal" in
|
||||
[A-Z]*) signal="$(kill -l "$signal" 2>/dev/null)" || return 1;;
|
||||
esac
|
||||
|
||||
json_init
|
||||
json_add_string name "$service"
|
||||
[ -n "$instance" -a "$instance" != "*" ] && json_add_string instance "$instance"
|
||||
|
||||
@@ -12,10 +12,10 @@ PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(LEDE_GIT)/project/rpcd.git
|
||||
PKG_SOURCE_DATE:=2018-05-13
|
||||
PKG_SOURCE_VERSION:=820621952d537c49deba470c6f61c40df93f4ba8
|
||||
PKG_SOURCE_DATE:=2018-11-28
|
||||
PKG_SOURCE_VERSION:=3aa81d0dfae167eccc26203bd0c96f3e3450f253
|
||||
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
|
||||
PKG_MIRROR_HASH:=24322b547cb062e9676da51d09de19d1cb9fb07df9e82b2b63fc0f714ec1c14b
|
||||
PKG_MIRROR_HASH:=1befc5e1793a687e7a37b4f4d611e5f95aef4b79ad4b288c4dcb4c74d212509b
|
||||
|
||||
PKG_LICENSE:=ISC
|
||||
PKG_LICENSE_FILES:=
|
||||
|
||||
1
rules.mk
1
rules.mk
@@ -265,6 +265,7 @@ PATCH:=patch
|
||||
PYTHON:=python
|
||||
|
||||
INSTALL_BIN:=install -m0755
|
||||
INSTALL_SUID:=install -m4755
|
||||
INSTALL_DIR:=install -d -m0755
|
||||
INSTALL_DATA:=install -m0644
|
||||
INSTALL_CONF:=install -m0600
|
||||
|
||||
@@ -101,13 +101,10 @@ define Device/mx60
|
||||
# otherwise the final image will fail to boot. This is set within the
|
||||
# MX60 kernel header definition which is found at
|
||||
# ./tools/firmware-utils/src/mkmerakifw.c, line 103~
|
||||
KERNEL_SIZE := 2984k
|
||||
KERNEL_SIZE := 4031k
|
||||
IMAGE_SIZE := 1021m
|
||||
KERNEL := kernel-bin | gzip | uImage gzip | MerakiAdd-dtb | MerakiNAND
|
||||
KERNEL_INITRAMFS := copy-file $(KDIR)/vmlinux | gzip | uImage gzip | \
|
||||
check-size $$(KERNEL_SIZE) | \
|
||||
MerakiAdd-dtb | pad-to 2047k | MerakiAdd-initramfs | \
|
||||
MerakiNAND
|
||||
KERNEL_INITRAMFS := kernel-bin | gzip | dtb | wndr4700-specialImage gzip
|
||||
IMAGE/sysupgrade.tar := sysupgrade-tar
|
||||
UBINIZE_OPTS := -E 5
|
||||
endef
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
setenv boot_args 'setenv bootargs root=/dev/sda2 rw rootfstype=ext4'
|
||||
setenv load_part1 'sata init; ext2load sata 1:1 ${kernel_addr_r} /boot/uImage; ext2load sata 1:1 ${fdt_addr_r} /boot/apollo3g.dtb'
|
||||
setenv load_part2 'sata init; ext2load sata 0:1 ${kernel_addr_r} /boot/uImage; ext2load sata 0:1 ${fdt_addr_r} /boot/apollo3g.dtb'
|
||||
setenv load_sata 'if run load_part1; then echo Loaded part 1; elif run load_part2; then echo Loaded part 2; fi'
|
||||
setenv load_part1 'ext2load sata 0:1 ${kernel_addr_r} /boot/uImage; ext2load sata 0:1 ${fdt_addr_r} /boot/apollo3g.dtb'
|
||||
setenv load_part2 'ext2load sata 1:1 ${kernel_addr_r} /boot/uImage; ext2load sata 1:1 ${fdt_addr_r} /boot/apollo3g.dtb'
|
||||
setenv load_sata 'sata init; if run load_part1; then echo Loaded part 1; elif run load_part2; then echo Loaded part 2; fi'
|
||||
setenv boot_sata 'run load_sata; run boot_args addtty; bootm ${kernel_addr_r} - ${fdt_addr_r}'
|
||||
run boot_sata
|
||||
|
||||
@@ -240,7 +240,7 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
|
||||
#define PPC4XX_SEC_VERSION_STR "0.5"
|
||||
|
||||
@@ -1221,6 +1222,7 @@ static int crypto4xx_probe(struct platfo
|
||||
@@ -1230,6 +1231,7 @@ static int crypto4xx_probe(struct platfo
|
||||
if (rc)
|
||||
goto err_start_dev;
|
||||
|
||||
@@ -248,7 +248,7 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
return 0;
|
||||
|
||||
err_start_dev:
|
||||
@@ -1247,6 +1249,8 @@ static int crypto4xx_remove(struct platf
|
||||
@@ -1256,6 +1258,8 @@ static int crypto4xx_remove(struct platf
|
||||
struct device *dev = &ofdev->dev;
|
||||
struct crypto4xx_core_device *core_dev = dev_get_drvdata(dev);
|
||||
|
||||
@@ -257,7 +257,7 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
free_irq(core_dev->irq, dev);
|
||||
irq_dispose_mapping(core_dev->irq);
|
||||
|
||||
@@ -1267,7 +1271,7 @@ MODULE_DEVICE_TABLE(of, crypto4xx_match)
|
||||
@@ -1276,7 +1280,7 @@ MODULE_DEVICE_TABLE(of, crypto4xx_match)
|
||||
|
||||
static struct platform_driver crypto4xx_driver = {
|
||||
.driver = {
|
||||
@@ -266,7 +266,7 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
.of_match_table = crypto4xx_match,
|
||||
},
|
||||
.probe = crypto4xx_probe,
|
||||
@@ -1279,4 +1283,3 @@ module_platform_driver(crypto4xx_driver)
|
||||
@@ -1288,4 +1292,3 @@ module_platform_driver(crypto4xx_driver)
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("James Hsiao <jhsiao@amcc.com>");
|
||||
MODULE_DESCRIPTION("Driver for AMCC PPC4xx crypto accelerator");
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
From 8d9f1b2c4ad8b86c4a5af5e4787ea4eae7853f6d Mon Sep 17 00:00:00 2001
|
||||
From: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
Date: Thu, 20 Jun 2019 11:29:15 +0200
|
||||
Subject: Revert "crypto: crypto4xx - properly set IV after de- and encrypt"
|
||||
|
||||
This reverts commit e9a60ab1609a7d975922adad1bf9c46ac6954584.
|
||||
|
||||
This fixes a compile problem in upstream kernel 4.4.
|
||||
---
|
||||
drivers/crypto/amcc/crypto4xx_alg.c | 3 +--
|
||||
drivers/crypto/amcc/crypto4xx_core.c | 9 ---------
|
||||
2 files changed, 1 insertion(+), 11 deletions(-)
|
||||
|
||||
--- a/drivers/crypto/amcc/crypto4xx_alg.c
|
||||
+++ b/drivers/crypto/amcc/crypto4xx_alg.c
|
||||
@@ -138,8 +138,7 @@ static int crypto4xx_setkey_aes(struct c
|
||||
sa = (struct dynamic_sa_ctl *) ctx->sa_in;
|
||||
ctx->hash_final = 0;
|
||||
|
||||
- set_dynamic_sa_command_0(sa, SA_NOT_SAVE_HASH, (cm == CRYPTO_MODE_CBC ?
|
||||
- SA_SAVE_IV : SA_NOT_SAVE_IV),
|
||||
+ set_dynamic_sa_command_0(sa, SA_NOT_SAVE_HASH, SA_NOT_SAVE_IV,
|
||||
SA_LOAD_HASH_FROM_SA, SA_LOAD_IV_FROM_STATE,
|
||||
SA_NO_HEADER_PROC, SA_HASH_ALG_NULL,
|
||||
SA_CIPHER_ALG_AES, SA_PAD_TYPE_ZERO,
|
||||
--- a/drivers/crypto/amcc/crypto4xx_core.c
|
||||
+++ b/drivers/crypto/amcc/crypto4xx_core.c
|
||||
@@ -646,15 +646,6 @@ static u32 crypto4xx_ablkcipher_done(str
|
||||
addr = dma_map_page(dev->core_dev->device, sg_page(dst),
|
||||
dst->offset, dst->length, DMA_FROM_DEVICE);
|
||||
}
|
||||
-
|
||||
- if (pd_uinfo->sa_va->sa_command_0.bf.save_iv == SA_SAVE_IV) {
|
||||
- struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req);
|
||||
-
|
||||
- crypto4xx_memcpy_from_le32((u32 *)req->iv,
|
||||
- pd_uinfo->sr_va->save_iv,
|
||||
- crypto_skcipher_ivsize(skcipher));
|
||||
- }
|
||||
-
|
||||
crypto4xx_ret_sg_desc(dev, pd_uinfo);
|
||||
if (ablk_req->base.complete != NULL)
|
||||
ablk_req->base.complete(&ablk_req->base, 0);
|
||||
@@ -47,7 +47,7 @@ Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
@@ -4945,6 +4946,9 @@ void ata_qc_complete(struct ata_queued_c
|
||||
@@ -4946,6 +4947,9 @@ void ata_qc_complete(struct ata_queued_c
|
||||
{
|
||||
struct ata_port *ap = qc->ap;
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
|
||||
|
||||
#include "xhci.h"
|
||||
#include "xhci-trace.h"
|
||||
@@ -227,6 +229,458 @@ static void xhci_pme_acpi_rtd3_enable(st
|
||||
@@ -229,6 +231,458 @@ static void xhci_pme_acpi_rtd3_enable(st
|
||||
static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { }
|
||||
#endif /* CONFIG_ACPI */
|
||||
|
||||
@@ -503,7 +503,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
|
||||
/* called during probe() after chip reset completes */
|
||||
static int xhci_pci_setup(struct usb_hcd *hcd)
|
||||
{
|
||||
@@ -266,6 +720,22 @@ static int xhci_pci_probe(struct pci_dev
|
||||
@@ -268,6 +722,22 @@ static int xhci_pci_probe(struct pci_dev
|
||||
struct hc_driver *driver;
|
||||
struct usb_hcd *hcd;
|
||||
|
||||
@@ -526,7 +526,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
|
||||
driver = (struct hc_driver *)id->driver_data;
|
||||
|
||||
/* Prevent runtime suspending between USB-2 and USB-3 initialization */
|
||||
@@ -323,6 +793,16 @@ static void xhci_pci_remove(struct pci_d
|
||||
@@ -325,6 +795,16 @@ static void xhci_pci_remove(struct pci_d
|
||||
{
|
||||
struct xhci_hcd *xhci;
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ produce a noisy warning.
|
||||
|
||||
--- a/drivers/usb/host/xhci-pci.c
|
||||
+++ b/drivers/usb/host/xhci-pci.c
|
||||
@@ -191,7 +191,7 @@ static void xhci_pci_quirks(struct devic
|
||||
@@ -193,7 +193,7 @@ static void xhci_pci_quirks(struct devic
|
||||
xhci->quirks |= XHCI_TRUST_TX_LENGTH;
|
||||
if (pdev->vendor == PCI_VENDOR_ID_RENESAS &&
|
||||
pdev->device == 0x0015)
|
||||
@@ -24,7 +24,7 @@ produce a noisy warning.
|
||||
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -388,10 +388,14 @@ static int xhci_try_enable_msi(struct us
|
||||
@@ -386,10 +386,14 @@ static int xhci_try_enable_msi(struct us
|
||||
free_irq(hcd->irq, hcd);
|
||||
hcd->irq = 0;
|
||||
|
||||
@@ -44,7 +44,7 @@ produce a noisy warning.
|
||||
/* hcd->irq is 0, we have MSI */
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1656,6 +1656,7 @@ struct xhci_hcd {
|
||||
@@ -1657,6 +1657,7 @@ struct xhci_hcd {
|
||||
/* support xHCI 0.96 spec USB2 software LPM */
|
||||
unsigned sw_lpm_support:1;
|
||||
/* support xHCI 1.0 spec USB2 hardware LPM */
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
--- a/arch/mips/ath79/setup.c
|
||||
+++ b/arch/mips/ath79/setup.c
|
||||
@@ -44,6 +44,7 @@ static char ath79_sys_type[ATH79_SYS_TYP
|
||||
|
||||
static void ath79_restart(char *command)
|
||||
{
|
||||
+ local_irq_disable();
|
||||
ath79_device_reset_set(AR71XX_RESET_FULL_CHIP);
|
||||
for (;;)
|
||||
if (cpu_wait)
|
||||
--- a/arch/mips/include/asm/mach-ath79/ath79.h
|
||||
+++ b/arch/mips/include/asm/mach-ath79/ath79.h
|
||||
@@ -134,6 +134,7 @@ static inline u32 ath79_pll_rr(unsigned
|
||||
static inline void ath79_reset_wr(unsigned reg, u32 val)
|
||||
{
|
||||
__raw_writel(val, ath79_reset_base + reg);
|
||||
+ (void) __raw_readl(ath79_reset_base + reg); /* flush */
|
||||
}
|
||||
|
||||
static inline u32 ath79_reset_rr(unsigned reg)
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -1118,6 +1118,9 @@ config MIPS_MSC
|
||||
@@ -1121,6 +1121,9 @@ config MIPS_MSC
|
||||
config MIPS_NILE4
|
||||
bool
|
||||
|
||||
|
||||
@@ -241,7 +241,7 @@
|
||||
*/
|
||||
--- a/net/ipv6/datagram.c
|
||||
+++ b/net/ipv6/datagram.c
|
||||
@@ -433,7 +433,7 @@ int ipv6_recv_error(struct sock *sk, str
|
||||
@@ -434,7 +434,7 @@ int ipv6_recv_error(struct sock *sk, str
|
||||
ipv6_iface_scope_id(&sin->sin6_addr,
|
||||
IP6CB(skb)->iif);
|
||||
} else {
|
||||
@@ -250,7 +250,7 @@
|
||||
&sin->sin6_addr);
|
||||
sin->sin6_scope_id = 0;
|
||||
}
|
||||
@@ -773,12 +773,12 @@ int ip6_datagram_send_ctl(struct net *ne
|
||||
@@ -772,12 +772,12 @@ int ip6_datagram_send_ctl(struct net *ne
|
||||
}
|
||||
|
||||
if (fl6->flowlabel&IPV6_FLOWINFO_MASK) {
|
||||
@@ -310,7 +310,7 @@
|
||||
if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK)
|
||||
--- a/net/ipv6/ip6_tunnel.c
|
||||
+++ b/net/ipv6/ip6_tunnel.c
|
||||
@@ -1310,7 +1310,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
|
||||
@@ -1319,7 +1319,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
|
||||
|
||||
dsfield = ipv6_get_dsfield(ipv6h);
|
||||
if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS)
|
||||
@@ -346,7 +346,7 @@
|
||||
#endif /* _LINUX_TYPES_H */
|
||||
--- a/net/ipv4/af_inet.c
|
||||
+++ b/net/ipv4/af_inet.c
|
||||
@@ -1321,8 +1321,8 @@ static struct sk_buff **inet_gro_receive
|
||||
@@ -1322,8 +1322,8 @@ static struct sk_buff **inet_gro_receive
|
||||
if (unlikely(ip_fast_csum((u8 *)iph, 5)))
|
||||
goto out_unlock;
|
||||
|
||||
@@ -610,7 +610,7 @@
|
||||
goto next_ht;
|
||||
--- a/net/ipv6/ip6_offload.c
|
||||
+++ b/net/ipv6/ip6_offload.c
|
||||
@@ -225,7 +225,7 @@ static struct sk_buff **ipv6_gro_receive
|
||||
@@ -226,7 +226,7 @@ static struct sk_buff **ipv6_gro_receive
|
||||
continue;
|
||||
|
||||
iph2 = (struct ipv6hdr *)(p->data + off);
|
||||
@@ -642,9 +642,9 @@
|
||||
- *(__be32 *)iph = to;
|
||||
+ net_hdr_word(iph) = to;
|
||||
if (skb->ip_summed == CHECKSUM_COMPLETE)
|
||||
skb->csum = csum_add(csum_sub(skb->csum, from), to);
|
||||
return 1;
|
||||
@@ -134,7 +134,7 @@ static inline int IP6_ECN_set_ce(struct
|
||||
skb->csum = csum_add(csum_sub(skb->csum, (__force __wsum)from),
|
||||
(__force __wsum)to);
|
||||
@@ -135,7 +135,7 @@ static inline int IP6_ECN_set_ce(struct
|
||||
|
||||
static inline void IP6_ECN_clear(struct ipv6hdr *iph)
|
||||
{
|
||||
@@ -664,7 +664,7 @@
|
||||
|
||||
#define IP6_MF 0x0001
|
||||
#define IP6_OFFSET 0xFFF8
|
||||
@@ -418,8 +418,8 @@ static inline void __ipv6_addr_set_half(
|
||||
@@ -411,8 +411,8 @@ static inline void __ipv6_addr_set_half(
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -675,7 +675,7 @@
|
||||
}
|
||||
|
||||
static inline void ipv6_addr_set(struct in6_addr *addr,
|
||||
@@ -478,6 +478,8 @@ static inline bool ipv6_prefix_equal(con
|
||||
@@ -471,6 +471,8 @@ static inline bool ipv6_prefix_equal(con
|
||||
const __be32 *a1 = addr1->s6_addr32;
|
||||
const __be32 *a2 = addr2->s6_addr32;
|
||||
unsigned int pdw, pbi;
|
||||
@@ -684,7 +684,7 @@
|
||||
|
||||
/* check complete u32 in prefix */
|
||||
pdw = prefixlen >> 5;
|
||||
@@ -486,7 +488,9 @@ static inline bool ipv6_prefix_equal(con
|
||||
@@ -479,7 +481,9 @@ static inline bool ipv6_prefix_equal(con
|
||||
|
||||
/* check incomplete u32 in prefix */
|
||||
pbi = prefixlen & 0x1f;
|
||||
@@ -695,7 +695,7 @@
|
||||
return false;
|
||||
|
||||
return true;
|
||||
@@ -630,13 +634,13 @@ static inline void ipv6_addr_set_v4mappe
|
||||
@@ -608,13 +612,13 @@ static inline void ipv6_addr_set_v4mappe
|
||||
*/
|
||||
static inline int __ipv6_addr_diff32(const void *token1, const void *token2, int addrlen)
|
||||
{
|
||||
@@ -711,7 +711,7 @@
|
||||
if (xb)
|
||||
return i * 32 + 31 - __fls(ntohl(xb));
|
||||
}
|
||||
@@ -805,17 +809,18 @@ static inline int ip6_default_np_autolab
|
||||
@@ -783,17 +787,18 @@ static inline int ip6_default_np_autolab
|
||||
static inline void ip6_flow_hdr(struct ipv6hdr *hdr, unsigned int tclass,
|
||||
__be32 flowlabel)
|
||||
{
|
||||
@@ -814,7 +814,7 @@
|
||||
static struct fib6_node *node_alloc(void)
|
||||
--- a/net/netfilter/nf_conntrack_proto_tcp.c
|
||||
+++ b/net/netfilter/nf_conntrack_proto_tcp.c
|
||||
@@ -456,7 +456,7 @@ static void tcp_sack(const struct sk_buf
|
||||
@@ -458,7 +458,7 @@ static void tcp_sack(const struct sk_buf
|
||||
|
||||
/* Fast path for timestamp-only option */
|
||||
if (length == TCPOLEN_TSTAMP_ALIGNED
|
||||
@@ -838,7 +838,7 @@
|
||||
|
||||
--- a/net/ipv4/tcp_input.c
|
||||
+++ b/net/ipv4/tcp_input.c
|
||||
@@ -3836,14 +3836,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||
@@ -3852,14 +3852,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||
{
|
||||
const __be32 *ptr = (const __be32 *)(th + 1);
|
||||
|
||||
|
||||
@@ -64,7 +64,6 @@ CONFIG_GENERIC_IO=y
|
||||
CONFIG_GENERIC_IRQ_CHIP=y
|
||||
CONFIG_GENERIC_IRQ_SHOW=y
|
||||
CONFIG_GENERIC_SMP_IDLE_THREAD=y
|
||||
# CONFIG_GEN_RTC is not set
|
||||
CONFIG_GPIOLIB=y
|
||||
CONFIG_GPIO_DEVRES=y
|
||||
CONFIG_GPIO_DWAPB=y
|
||||
@@ -154,7 +153,6 @@ CONFIG_RCU_STALL_COMMON=y
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_REGMAP_MMIO=y
|
||||
CONFIG_RESET_CONTROLLER=y
|
||||
# CONFIG_RTC is not set
|
||||
# CONFIG_SCHED_INFO is not set
|
||||
# CONFIG_SCSI_DMA is not set
|
||||
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
|
||||
|
||||
@@ -70,7 +70,6 @@ CONFIG_GENERIC_IRQ_CHIP=y
|
||||
CONFIG_GENERIC_IRQ_SHOW=y
|
||||
CONFIG_GENERIC_PENDING_IRQ=y
|
||||
CONFIG_GENERIC_SMP_IDLE_THREAD=y
|
||||
# CONFIG_GEN_RTC is not set
|
||||
CONFIG_GPIOLIB=y
|
||||
CONFIG_GPIO_DEVRES=y
|
||||
CONFIG_GPIO_DWAPB=y
|
||||
@@ -166,7 +165,6 @@ CONFIG_REGMAP_MMIO=y
|
||||
CONFIG_RESET_CONTROLLER=y
|
||||
CONFIG_RFS_ACCEL=y
|
||||
CONFIG_RPS=y
|
||||
# CONFIG_RTC is not set
|
||||
# CONFIG_SCHED_INFO is not set
|
||||
# CONFIG_SCSI_DMA is not set
|
||||
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
|
||||
|
||||
@@ -40,7 +40,7 @@ it on BCM4708 family.
|
||||
/* called during probe() after chip reset completes */
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -152,6 +152,49 @@ static int xhci_start(struct xhci_hcd *x
|
||||
@@ -150,6 +150,49 @@ static int xhci_start(struct xhci_hcd *x
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -90,7 +90,7 @@ it on BCM4708 family.
|
||||
/*
|
||||
* Reset a halted HC.
|
||||
*
|
||||
@@ -568,10 +611,20 @@ int xhci_init(struct usb_hcd *hcd)
|
||||
@@ -566,10 +609,20 @@ int xhci_init(struct usb_hcd *hcd)
|
||||
|
||||
static int xhci_run_finished(struct xhci_hcd *xhci)
|
||||
{
|
||||
@@ -114,7 +114,7 @@ it on BCM4708 family.
|
||||
xhci->shared_hcd->state = HC_STATE_RUNNING;
|
||||
xhci->cmd_ring_state = CMD_RING_STATE_RUNNING;
|
||||
|
||||
@@ -581,6 +634,10 @@ static int xhci_run_finished(struct xhci
|
||||
@@ -579,6 +632,10 @@ static int xhci_run_finished(struct xhci
|
||||
xhci_dbg_trace(xhci, trace_xhci_dbg_init,
|
||||
"Finished xhci_run for USB3 roothub");
|
||||
return 0;
|
||||
@@ -127,7 +127,7 @@ it on BCM4708 family.
|
||||
/*
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1639,6 +1639,7 @@ struct xhci_hcd {
|
||||
@@ -1640,6 +1640,7 @@ struct xhci_hcd {
|
||||
#define XHCI_BROKEN_STREAMS (1 << 19)
|
||||
#define XHCI_PME_STUCK_QUIRK (1 << 20)
|
||||
#define XHCI_MISSING_CAS (1 << 24)
|
||||
|
||||
@@ -13,7 +13,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
|
||||
|
||||
--- a/drivers/mtd/spi-nor/spi-nor.c
|
||||
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||
@@ -875,6 +875,18 @@ static const struct flash_info *spi_nor_
|
||||
@@ -881,6 +881,18 @@ static const struct flash_info *spi_nor_
|
||||
}
|
||||
dev_err(nor->dev, "unrecognized JEDEC id bytes: %02x, %2x, %2x\n",
|
||||
id[0], id[1], id[2]);
|
||||
|
||||
@@ -15,7 +15,7 @@ Signed-off-by: Steve Glendinning <steve.glendinning@smsc.com>
|
||||
|
||||
--- a/drivers/net/usb/smsc95xx.c
|
||||
+++ b/drivers/net/usb/smsc95xx.c
|
||||
@@ -1785,7 +1785,6 @@ static int smsc95xx_rx_fixup(struct usbn
|
||||
@@ -1788,7 +1788,6 @@ static int smsc95xx_rx_fixup(struct usbn
|
||||
if (dev->net->features & NETIF_F_RXCSUM)
|
||||
smsc95xx_rx_csum_offload(skb);
|
||||
skb_trim(skb, skb->len - 4); /* remove fcs */
|
||||
@@ -23,7 +23,7 @@ Signed-off-by: Steve Glendinning <steve.glendinning@smsc.com>
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -1803,7 +1802,6 @@ static int smsc95xx_rx_fixup(struct usbn
|
||||
@@ -1806,7 +1805,6 @@ static int smsc95xx_rx_fixup(struct usbn
|
||||
if (dev->net->features & NETIF_F_RXCSUM)
|
||||
smsc95xx_rx_csum_offload(ax_skb);
|
||||
skb_trim(ax_skb, ax_skb->len - 4); /* remove fcs */
|
||||
|
||||
@@ -13,7 +13,7 @@ http://www.spinics.net/lists/linux-mm/msg72236.html
|
||||
|
||||
--- a/include/linux/vmstat.h
|
||||
+++ b/include/linux/vmstat.h
|
||||
@@ -219,7 +219,11 @@ static inline void __inc_zone_state(stru
|
||||
@@ -220,7 +220,11 @@ static inline void __inc_zone_state(stru
|
||||
static inline void __dec_zone_state(struct zone *zone, enum zone_stat_item item)
|
||||
{
|
||||
atomic_long_dec(&zone->vm_stat[item]);
|
||||
|
||||
@@ -19,7 +19,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
--- a/drivers/spi/spi-bcm2835.c
|
||||
+++ b/drivers/spi/spi-bcm2835.c
|
||||
@@ -688,6 +688,8 @@ static int bcm2835_spi_setup(struct spi_
|
||||
@@ -686,6 +686,8 @@ static int bcm2835_spi_setup(struct spi_
|
||||
{
|
||||
int err;
|
||||
struct gpio_chip *chip;
|
||||
@@ -28,7 +28,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
/*
|
||||
* sanity checking the native-chipselects
|
||||
*/
|
||||
@@ -704,15 +706,42 @@ static int bcm2835_spi_setup(struct spi_
|
||||
@@ -702,15 +704,42 @@ static int bcm2835_spi_setup(struct spi_
|
||||
"setup: only two native chip-selects are supported\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -659,7 +659,7 @@ dwc_otg: Remove duplicate gadget probe/unregister function
|
||||
}
|
||||
--- a/drivers/usb/core/hub.c
|
||||
+++ b/drivers/usb/core/hub.c
|
||||
@@ -5005,7 +5005,7 @@ static void port_event(struct usb_hub *h
|
||||
@@ -5014,7 +5014,7 @@ static void port_event(struct usb_hub *h
|
||||
if (portchange & USB_PORT_STAT_C_OVERCURRENT) {
|
||||
u16 status = 0, unused;
|
||||
|
||||
@@ -670,7 +670,7 @@ dwc_otg: Remove duplicate gadget probe/unregister function
|
||||
msleep(100); /* Cool down */
|
||||
--- a/drivers/usb/core/message.c
|
||||
+++ b/drivers/usb/core/message.c
|
||||
@@ -1913,6 +1913,85 @@ free_interfaces:
|
||||
@@ -1925,6 +1925,85 @@ free_interfaces:
|
||||
if (cp->string == NULL &&
|
||||
!(dev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
|
||||
cp->string = usb_cache_string(dev, cp->desc.iConfiguration);
|
||||
|
||||
@@ -1848,7 +1848,7 @@ vchiq: hack: Add include depecated dma include file
|
||||
+#endif /* VCHIQ_2835_H */
|
||||
--- /dev/null
|
||||
+++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
|
||||
@@ -0,0 +1,586 @@
|
||||
@@ -0,0 +1,585 @@
|
||||
+/**
|
||||
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
|
||||
+ *
|
||||
@@ -2274,8 +2274,7 @@ vchiq: hack: Add include depecated dma include file
|
||||
+ actual_pages = get_user_pages(task, task->mm,
|
||||
+ (unsigned long)buf & ~(PAGE_SIZE - 1),
|
||||
+ num_pages,
|
||||
+ (type == PAGELIST_READ) /*Write */ ,
|
||||
+ 0 /*Force */ ,
|
||||
+ (type == PAGELIST_READ) ? FOLL_WRITE : 0 /*Flags */ ,
|
||||
+ pages,
|
||||
+ NULL /*vmas */);
|
||||
+ up_read(&task->mm->mmap_sem);
|
||||
@@ -2437,7 +2436,7 @@ vchiq: hack: Add include depecated dma include file
|
||||
+}
|
||||
--- /dev/null
|
||||
+++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c
|
||||
@@ -0,0 +1,2903 @@
|
||||
@@ -0,0 +1,2902 @@
|
||||
+/**
|
||||
+ * Copyright (c) 2014 Raspberry Pi (Trading) Ltd. All rights reserved.
|
||||
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
|
||||
@@ -3917,8 +3916,7 @@ vchiq: hack: Add include depecated dma include file
|
||||
+ current->mm, /* mm */
|
||||
+ (unsigned long)virt_addr, /* start */
|
||||
+ num_pages, /* len */
|
||||
+ 0, /* write */
|
||||
+ 0, /* force */
|
||||
+ 0, /* flags */
|
||||
+ pages, /* pages (array of page pointers) */
|
||||
+ NULL); /* vmas */
|
||||
+ up_read(¤t->mm->mmap_sem);
|
||||
|
||||
@@ -17,7 +17,7 @@ Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
|
||||
|
||||
--- a/drivers/video/fbdev/core/fbmem.c
|
||||
+++ b/drivers/video/fbdev/core/fbmem.c
|
||||
@@ -1084,6 +1084,25 @@ fb_blank(struct fb_info *info, int blank
|
||||
@@ -1091,6 +1091,25 @@ fb_blank(struct fb_info *info, int blank
|
||||
}
|
||||
EXPORT_SYMBOL(fb_blank);
|
||||
|
||||
@@ -43,7 +43,7 @@ Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
|
||||
static long do_fb_ioctl(struct fb_info *info, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
@@ -1094,6 +1113,7 @@ static long do_fb_ioctl(struct fb_info *
|
||||
@@ -1101,6 +1120,7 @@ static long do_fb_ioctl(struct fb_info *
|
||||
struct fb_cmap cmap_from;
|
||||
struct fb_cmap_user cmap;
|
||||
struct fb_event event;
|
||||
@@ -51,7 +51,7 @@ Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
|
||||
void __user *argp = (void __user *)arg;
|
||||
long ret = 0;
|
||||
|
||||
@@ -1211,6 +1231,15 @@ static long do_fb_ioctl(struct fb_info *
|
||||
@@ -1218,6 +1238,15 @@ static long do_fb_ioctl(struct fb_info *
|
||||
unlock_fb_info(info);
|
||||
console_unlock();
|
||||
break;
|
||||
@@ -67,7 +67,7 @@ Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
|
||||
default:
|
||||
if (!lock_fb_info(info))
|
||||
return -ENODEV;
|
||||
@@ -1365,6 +1394,7 @@ static long fb_compat_ioctl(struct file
|
||||
@@ -1372,6 +1401,7 @@ static long fb_compat_ioctl(struct file
|
||||
case FBIOPAN_DISPLAY:
|
||||
case FBIOGET_CON2FBMAP:
|
||||
case FBIOPUT_CON2FBMAP:
|
||||
|
||||
@@ -29,7 +29,7 @@ Signed-off-by: popcornmix <popcornmix@gmail.com>
|
||||
static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
|
||||
u32 *data, int in_pm)
|
||||
{
|
||||
@@ -763,8 +768,59 @@ static int smsc95xx_ioctl(struct net_dev
|
||||
@@ -766,8 +771,59 @@ static int smsc95xx_ioctl(struct net_dev
|
||||
return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL);
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ Subject: [PATCH] config: Enable CONFIG_MEMCG, but leave it disabled (due to
|
||||
|
||||
--- a/kernel/cgroup.c
|
||||
+++ b/kernel/cgroup.c
|
||||
@@ -5311,7 +5311,7 @@ int __init cgroup_init_early(void)
|
||||
@@ -5315,7 +5315,7 @@ int __init cgroup_init_early(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ Subject: [PATCH] config: Enable CONFIG_MEMCG, but leave it disabled (due to
|
||||
|
||||
/**
|
||||
* cgroup_init - cgroup initialization
|
||||
@@ -5807,6 +5807,27 @@ static int __init cgroup_disable(char *s
|
||||
@@ -5811,6 +5811,27 @@ static int __init cgroup_disable(char *s
|
||||
}
|
||||
__setup("cgroup_disable=", cgroup_disable);
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ meaning they don't end up with the same MAC address as the built-in RPi adaptor.
|
||||
|
||||
--- a/drivers/net/usb/smsc95xx.c
|
||||
+++ b/drivers/net/usb/smsc95xx.c
|
||||
@@ -817,10 +817,6 @@ static int smsc95xx_is_macaddr_param(str
|
||||
@@ -820,10 +820,6 @@ static int smsc95xx_is_macaddr_param(str
|
||||
|
||||
static void smsc95xx_init_mac_address(struct usbnet *dev)
|
||||
{
|
||||
@@ -24,7 +24,7 @@ meaning they don't end up with the same MAC address as the built-in RPi adaptor.
|
||||
/* try reading mac address from EEPROM */
|
||||
if (smsc95xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN,
|
||||
dev->net->dev_addr) == 0) {
|
||||
@@ -831,7 +827,11 @@ static void smsc95xx_init_mac_address(st
|
||||
@@ -834,7 +830,11 @@ static void smsc95xx_init_mac_address(st
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ See issue 1248.
|
||||
static char *macaddr = ":";
|
||||
module_param(macaddr, charp, 0);
|
||||
MODULE_PARM_DESC(macaddr, "MAC address");
|
||||
@@ -1841,6 +1845,8 @@ static int smsc95xx_rx_fixup(struct usbn
|
||||
@@ -1844,6 +1848,8 @@ static int smsc95xx_rx_fixup(struct usbn
|
||||
if (dev->net->features & NETIF_F_RXCSUM)
|
||||
smsc95xx_rx_csum_offload(skb);
|
||||
skb_trim(skb, skb->len - 4); /* remove fcs */
|
||||
@@ -33,7 +33,7 @@ See issue 1248.
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -1858,6 +1864,8 @@ static int smsc95xx_rx_fixup(struct usbn
|
||||
@@ -1861,6 +1867,8 @@ static int smsc95xx_rx_fixup(struct usbn
|
||||
if (dev->net->features & NETIF_F_RXCSUM)
|
||||
smsc95xx_rx_csum_offload(ax_skb);
|
||||
skb_trim(ax_skb, ax_skb->len - 4); /* remove fcs */
|
||||
|
||||
@@ -21,7 +21,7 @@ Signed-off-by: Sam Nazarko <email@samnazarko.co.uk>
|
||||
static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
|
||||
u32 *data, int in_pm)
|
||||
{
|
||||
@@ -1006,13 +1010,13 @@ static int smsc95xx_reset(struct usbnet
|
||||
@@ -1009,13 +1013,13 @@ static int smsc95xx_reset(struct usbnet
|
||||
|
||||
if (!turbo_mode) {
|
||||
burst_cap = 0;
|
||||
|
||||
@@ -16,7 +16,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
--- a/drivers/mmc/card/block.c
|
||||
+++ b/drivers/mmc/card/block.c
|
||||
@@ -2553,6 +2553,13 @@ static const struct mmc_fixup blk_fixups
|
||||
@@ -2547,6 +2547,13 @@ static const struct mmc_fixup blk_fixups
|
||||
MMC_FIXUP("V10016", CID_MANFID_KINGSTON, CID_OEMID_ANY, add_quirk_mmc,
|
||||
MMC_QUIRK_TRIM_BROKEN),
|
||||
|
||||
@@ -32,7 +32,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
--- a/drivers/mmc/core/core.c
|
||||
+++ b/drivers/mmc/core/core.c
|
||||
@@ -2253,7 +2253,8 @@ EXPORT_SYMBOL(mmc_erase);
|
||||
@@ -2257,7 +2257,8 @@ EXPORT_SYMBOL(mmc_erase);
|
||||
int mmc_can_erase(struct mmc_card *card)
|
||||
{
|
||||
if ((card->host->caps & MMC_CAP_ERASE) &&
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user