mac80211: update brcmfmac including missing boardrev workaround
[openwrt.git] / package / kernel / mac80211 / patches / 344-0016-brcmfmac-keep-ARP-and-ND-offload-enabled-during-WOWL.patch
1 From: Hante Meuleman <meuleman@broadcom.com>
2 Date: Wed, 17 Feb 2016 11:27:05 +0100
3 Subject: [PATCH] brcmfmac: keep ARP and ND offload enabled during WOWL
4
5 Currently ARP and ND (IPv6 Neigbor Discovery) offload get disabled
6 on entering suspend. However when firmwares support the wowl_cap
7 iovar then these offload routines can be kept enabled as they
8 will work during WOWL as well.
9
10 Reviewed-by: Arend Van Spriel <arend@broadcom.com>
11 Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com>
12 Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
13 Signed-off-by: Hante Meuleman <meuleman@broadcom.com>
14 Signed-off-by: Arend van Spriel <arend@broadcom.com>
15 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
16 ---
17
18 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
19 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
20 @@ -3556,7 +3556,8 @@ static s32 brcmf_cfg80211_resume(struct
21                 brcmf_report_wowl_wakeind(wiphy, ifp);
22                 brcmf_fil_iovar_int_set(ifp, "wowl_clear", 0);
23                 brcmf_config_wowl_pattern(ifp, "clr", NULL, 0, NULL, 0);
24 -               brcmf_configure_arp_nd_offload(ifp, true);
25 +               if (!brcmf_feat_is_enabled(ifp, BRCMF_FEAT_WOWL_ARP_ND))
26 +                       brcmf_configure_arp_nd_offload(ifp, true);
27                 brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_PM,
28                                       cfg->wowl.pre_pmmode);
29                 cfg->wowl.active = false;
30 @@ -3580,7 +3581,8 @@ static void brcmf_configure_wowl(struct
31  
32         brcmf_dbg(TRACE, "Suspend, wowl config.\n");
33  
34 -       brcmf_configure_arp_nd_offload(ifp, false);
35 +       if (!brcmf_feat_is_enabled(ifp, BRCMF_FEAT_WOWL_ARP_ND))
36 +               brcmf_configure_arp_nd_offload(ifp, false);
37         brcmf_fil_cmd_int_get(ifp, BRCMF_C_GET_PM, &cfg->wowl.pre_pmmode);
38         brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_PM, PM_MAX);
39  
40 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
41 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
42 @@ -147,6 +147,7 @@ void brcmf_feat_attach(struct brcmf_pub
43         if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_WOWL)) {
44                 err = brcmf_fil_iovar_int_get(ifp, "wowl_cap", &wowl_cap);
45                 if (!err) {
46 +                       ifp->drvr->feat_flags |= BIT(BRCMF_FEAT_WOWL_ARP_ND);
47                         if (wowl_cap & BRCMF_WOWL_PFN_FOUND)
48                                 ifp->drvr->feat_flags |=
49                                         BIT(BRCMF_FEAT_WOWL_ND);
50 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h
51 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h
52 @@ -29,6 +29,7 @@
53   * SCAN_RANDOM_MAC: Random MAC during (net detect) scheduled scan.
54   * WOWL_ND: WOWL net detect (PNO)
55   * WOWL_GTK: (WOWL) GTK rekeying offload
56 + * WOWL_ARP_ND: ARP and Neighbor Discovery offload support during WOWL.
57   */
58  #define BRCMF_FEAT_LIST \
59         BRCMF_FEAT_DEF(MBSS) \
60 @@ -40,7 +41,8 @@
61         BRCMF_FEAT_DEF(TDLS) \
62         BRCMF_FEAT_DEF(SCAN_RANDOM_MAC) \
63         BRCMF_FEAT_DEF(WOWL_ND) \
64 -       BRCMF_FEAT_DEF(WOWL_GTK)
65 +       BRCMF_FEAT_DEF(WOWL_GTK) \
66 +       BRCMF_FEAT_DEF(WOWL_ARP_ND)
67  
68  /*
69   * Quirks: