From e9d875a5371c89a3f351df5aec593ac90ba89ecc Mon Sep 17 00:00:00 2001 From: Christian Lamparter Date: Sun, 18 Aug 2019 02:21:46 +0200 Subject: [PATCH] ath10k-ct: update to HEAD of 2019-08-14 - 9e5ab2 Update ath10k-ct to commit 9e5ab25027e0971fa24ccf93373324c08c4e992d git log --pretty=oneline --abbrev-commit f0aa8130..9e5ab250 9e5ab25 ath10k-ct: Update to latest 5.2 upstream, support bigger mtu, 160Mhz Created with the help of the make-package-update-commit.sh script and refresh patches. Signed-off-by: Christian Lamparter --- package/kernel/ath10k-ct/Makefile | 6 +- ...rect-multicast-broadcast-rate-settin.patch | 26 ------ ...64-ath10k-commit-rates-from-mac80211.patch | 6 +- ...rolling-support-for-various-chipsets.patch | 10 +-- ...h10k-4.16-use-tpt-trigger-by-default.patch | 6 +- ...ilable-channels-via-DT-ieee80211-fre.patch | 2 +- ...station-exists-before-forwarding-tx-.patch | 81 +++++++++++++++++++ 7 files changed, 96 insertions(+), 41 deletions(-) create mode 100644 package/kernel/ath10k-ct/patches/976-ath10k-Check-if-station-exists-before-forwarding-tx-.patch diff --git a/package/kernel/ath10k-ct/Makefile b/package/kernel/ath10k-ct/Makefile index 8814684451..05d30891f5 100644 --- a/package/kernel/ath10k-ct/Makefile +++ b/package/kernel/ath10k-ct/Makefile @@ -8,9 +8,9 @@ PKG_LICENSE_FILES:= PKG_SOURCE_URL:=https://github.com/greearb/ath10k-ct.git PKG_SOURCE_PROTO:=git -PKG_SOURCE_DATE:=2019-06-13 -PKG_SOURCE_VERSION:=f0aa81302b2286715fa2fa5a2f4ebe2faf17694c -PKG_MIRROR_HASH:=a6d418dfec02842529a53b3c48236e7a375a654a03e199fbc5178bdb269b7d64 +PKG_SOURCE_DATE:=2019-08-14 +PKG_SOURCE_VERSION:=9e5ab25027e0971fa24ccf93373324c08c4e992d +PKG_MIRROR_HASH:=95dc42a5615f80528223859b4f9618feafb5a0a29a9eb4c4bc983f76c74fb535 # Build the 5.2 ath10k-ct driver version. Other option is "-4.19". # Probably this should match as closely as diff --git a/package/kernel/ath10k-ct/patches/163-ath10k-fix-incorrect-multicast-broadcast-rate-settin.patch b/package/kernel/ath10k-ct/patches/163-ath10k-fix-incorrect-multicast-broadcast-rate-settin.patch index d4090e5673..2b550e76df 100644 --- a/package/kernel/ath10k-ct/patches/163-ath10k-fix-incorrect-multicast-broadcast-rate-settin.patch +++ b/package/kernel/ath10k-ct/patches/163-ath10k-fix-incorrect-multicast-broadcast-rate-settin.patch @@ -41,29 +41,3 @@ Origin: other, https://patchwork.kernel.org/patch/10723033/ if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) rateidx += ATH10K_MAC_FIRST_OFDM_RATE_IDX; ---- a/ath10k-5.2/mac.c -+++ b/ath10k-5.2/mac.c -@@ -6518,8 +6518,8 @@ static void ath10k_bss_info_changed(stru - struct cfg80211_chan_def def; - u32 vdev_param, pdev_param, slottime, preamble; - u16 bitrate, hw_value; -- u8 rate, basic_rate_idx; -- int rateidx, ret = 0, hw_rate_code; -+ u8 rate, basic_rate_idx, rateidx; -+ int ret = 0, hw_rate_code, mcast_rate; - enum nl80211_band band; - const struct ieee80211_supported_band *sband; - -@@ -6706,7 +6706,11 @@ static void ath10k_bss_info_changed(stru - if (changed & BSS_CHANGED_MCAST_RATE && - !ath10k_mac_vif_chan(arvif->vif, &def)) { - band = def.chan->band; -- rateidx = vif->bss_conf.mcast_rate[band] - 1; -+ mcast_rate = vif->bss_conf.mcast_rate[band]; -+ if (mcast_rate > 0) -+ rateidx = mcast_rate - 1; -+ else -+ rateidx = ffs(vif->bss_conf.basic_rates) - 1; - - if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) - rateidx += ATH10K_MAC_FIRST_OFDM_RATE_IDX; diff --git a/package/kernel/ath10k-ct/patches/164-ath10k-commit-rates-from-mac80211.patch b/package/kernel/ath10k-ct/patches/164-ath10k-commit-rates-from-mac80211.patch index 6a95ae3df8..b67ad2c3c4 100644 --- a/package/kernel/ath10k-ct/patches/164-ath10k-commit-rates-from-mac80211.patch +++ b/package/kernel/ath10k-ct/patches/164-ath10k-commit-rates-from-mac80211.patch @@ -37,7 +37,7 @@ Signed-off-by: Sven Eckelmann hw_rate_code); --- a/ath10k-5.2/mac.c +++ b/ath10k-5.2/mac.c -@@ -6728,6 +6728,7 @@ static void ath10k_bss_info_changed(stru +@@ -6732,6 +6732,7 @@ static void ath10k_bss_info_changed(stru "mac vdev %d mcast_rate %x\n", arvif->vdev_id, rate); @@ -45,7 +45,7 @@ Signed-off-by: Sven Eckelmann vdev_param = ar->wmi.vdev_param->mcast_data_rate; ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, rate); -@@ -6736,6 +6737,7 @@ static void ath10k_bss_info_changed(stru +@@ -6740,6 +6741,7 @@ static void ath10k_bss_info_changed(stru "failed to set mcast rate on vdev %i: %d\n", arvif->vdev_id, ret); @@ -53,7 +53,7 @@ Signed-off-by: Sven Eckelmann vdev_param = ar->wmi.vdev_param->bcast_data_rate; ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, rate); -@@ -6762,6 +6764,7 @@ static void ath10k_bss_info_changed(stru +@@ -6766,6 +6768,7 @@ static void ath10k_bss_info_changed(stru return; } diff --git a/package/kernel/ath10k-ct/patches/201-ath10k-4.16_add-LED-and-GPIO-controlling-support-for-various-chipsets.patch b/package/kernel/ath10k-ct/patches/201-ath10k-4.16_add-LED-and-GPIO-controlling-support-for-various-chipsets.patch index d5041b2a7a..38ec21f52f 100644 --- a/package/kernel/ath10k-ct/patches/201-ath10k-4.16_add-LED-and-GPIO-controlling-support-for-various-chipsets.patch +++ b/package/kernel/ath10k-ct/patches/201-ath10k-4.16_add-LED-and-GPIO-controlling-support-for-various-chipsets.patch @@ -683,7 +683,7 @@ v13: .patch_load_addr = QCA9888_HW_2_0_PATCH_LOAD_ADDR, .uart_pin = 7, .cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH, -@@ -3446,6 +3452,10 @@ int ath10k_core_start(struct ath10k *ar, +@@ -3452,6 +3458,10 @@ int ath10k_core_start(struct ath10k *ar, ath10k_wmi_check_apply_board_power_ctl_table(ar); } @@ -694,7 +694,7 @@ v13: return 0; err_hif_stop: -@@ -3702,9 +3712,18 @@ static void ath10k_core_register_work(st +@@ -3708,9 +3718,18 @@ static void ath10k_core_register_work(st goto err_spectral_destroy; } @@ -713,7 +713,7 @@ v13: err_spectral_destroy: ath10k_spectral_destroy(ar); err_debug_destroy: -@@ -3764,6 +3783,8 @@ void ath10k_core_unregister(struct ath10 +@@ -3770,6 +3789,8 @@ void ath10k_core_unregister(struct ath10 if (!test_bit(ATH10K_FLAG_CORE_REGISTERED, &ar->dev_flags)) return; @@ -732,7 +732,7 @@ v13: #include "htt.h" #include "htc.h" -@@ -1436,6 +1437,13 @@ struct ath10k { +@@ -1441,6 +1442,13 @@ struct ath10k { } testmode; struct { @@ -967,7 +967,7 @@ v13: { --- a/ath10k-5.2/wmi-tlv.c +++ b/ath10k-5.2/wmi-tlv.c -@@ -4309,6 +4309,8 @@ static const struct wmi_ops wmi_tlv_ops +@@ -4311,6 +4311,8 @@ static const struct wmi_ops wmi_tlv_ops .gen_echo = ath10k_wmi_tlv_op_gen_echo, .gen_vdev_spectral_conf = ath10k_wmi_tlv_op_gen_vdev_spectral_conf, .gen_vdev_spectral_enable = ath10k_wmi_tlv_op_gen_vdev_spectral_enable, diff --git a/package/kernel/ath10k-ct/patches/202-ath10k-4.16-use-tpt-trigger-by-default.patch b/package/kernel/ath10k-ct/patches/202-ath10k-4.16-use-tpt-trigger-by-default.patch index ead46b9b61..e5dd967a26 100644 --- a/package/kernel/ath10k-ct/patches/202-ath10k-4.16-use-tpt-trigger-by-default.patch +++ b/package/kernel/ath10k-ct/patches/202-ath10k-4.16-use-tpt-trigger-by-default.patch @@ -42,7 +42,7 @@ Signed-off-by: Mathias Kresin if (ret) --- a/ath10k-4.19/mac.c +++ b/ath10k-4.19/mac.c -@@ -9963,7 +9963,7 @@ int ath10k_mac_register(struct ath10k *a +@@ -9965,7 +9965,7 @@ int ath10k_mac_register(struct ath10k *a wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST); #ifdef CPTCFG_MAC80211_LEDS @@ -53,7 +53,7 @@ Signed-off-by: Mathias Kresin #endif --- a/ath10k-5.2/core.h +++ b/ath10k-5.2/core.h -@@ -1538,6 +1538,10 @@ struct ath10k { +@@ -1543,6 +1543,10 @@ struct ath10k { u8 csi_data[4096]; u16 csi_data_len; @@ -79,7 +79,7 @@ Signed-off-by: Mathias Kresin if (ret) --- a/ath10k-5.2/mac.c +++ b/ath10k-5.2/mac.c -@@ -10163,7 +10163,7 @@ int ath10k_mac_register(struct ath10k *a +@@ -10178,7 +10178,7 @@ int ath10k_mac_register(struct ath10k *a ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER; #ifdef CPTCFG_MAC80211_LEDS diff --git a/package/kernel/ath10k-ct/patches/203-ath10k-Limit-available-channels-via-DT-ieee80211-fre.patch b/package/kernel/ath10k-ct/patches/203-ath10k-Limit-available-channels-via-DT-ieee80211-fre.patch index 7a5b4fd21f..3a22fc74cb 100644 --- a/package/kernel/ath10k-ct/patches/203-ath10k-Limit-available-channels-via-DT-ieee80211-fre.patch +++ b/package/kernel/ath10k-ct/patches/203-ath10k-Limit-available-channels-via-DT-ieee80211-fre.patch @@ -29,7 +29,7 @@ Forwarded: https://patchwork.kernel.org/patch/10549245/ #include #include #include -@@ -9687,6 +9688,7 @@ int ath10k_mac_register(struct ath10k *a +@@ -9689,6 +9690,7 @@ int ath10k_mac_register(struct ath10k *a ar->hw->wiphy->bands[NL80211_BAND_5GHZ] = band; } diff --git a/package/kernel/ath10k-ct/patches/976-ath10k-Check-if-station-exists-before-forwarding-tx-.patch b/package/kernel/ath10k-ct/patches/976-ath10k-Check-if-station-exists-before-forwarding-tx-.patch new file mode 100644 index 0000000000..a2f3a3f41a --- /dev/null +++ b/package/kernel/ath10k-ct/patches/976-ath10k-Check-if-station-exists-before-forwarding-tx-.patch @@ -0,0 +1,81 @@ +From cc8ec75f5ad4acf9babe5e26a10c9bca10624593 Mon Sep 17 00:00:00 2001 +From: Hauke Mehrtens +Date: Sun, 18 Aug 2019 15:33:51 +0200 +Subject: [PATCH] ath10k: Check if station exists before forwarding tx airtime + report + +It looks like the FW on QCA9984 already reports the tx airtimes before +the station is added to the peer entry. The peer entry is created in +ath10k_peer_map_event() just with the vdev_id and the ethaddr, but +not with a station entry, this is added later in ath10k_peer_create() in +callbacks from mac80211. + +When there is no sta added to the peer entry, this function fails +because it calls ieee80211_sta_register_airtime() with NULL. + +This was reported in OpenWrt some time ago: +https://bugs.openwrt.org/index.php?do=details&task_id=2414 + +This commit should fix this crash: +[ 75.991714] Unable to handle kernel paging request at virtual address fffff9e8 +[ 75.991756] pgd = c0204000 +[ 75.997955] [fffff9e8] *pgd=5fdfd861, *pte=00000000, *ppte=00000000 +[ 76.000537] Internal error: Oops: 37 [#1] SMP ARM +[ 76.006686] Modules linked in: pppoe ppp_async ath10k_pci ath10k_core ath pptp pppox ppp_mppe ppp_generic mac80211 iptable_nat ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_tcpmss xt_statistic xt_state xt_recent xt_nat xt_multiport xt_mark xt_mac xt_limit xt_length xt_hl xt_helper xt_esp xt_ecn xt_dscp xt_conntrack xt_connmark xt_connlimit xt_connbytes xt_comment xt_TCPMSS xt_REDIRECT xt_LOG xt_HL xt_FLOWOFFLOAD xt_DSCP xt_CT xt_CLASSIFY usbserial slhc nf_reject_ipv4 nf_nat_redirect nf_nat_masquerade_ipv4 nf_conntrack_ipv4 nf_nat_ipv4 nf_log_ipv4 nf_flow_table_hw nf_flow_table nf_defrag_ipv4 nf_conntrack_rtcache nf_conntrack_netlink iptable_raw iptable_mangle iptable_filter ipt_ah ipt_ECN ip_tables crc_ccitt compat chaoskey fuse sch_cake sch_tbf sch_ingress sch_htb sch_hfsc em_u32 cls_u32 +[ 76.059974] cls_tcindex cls_route cls_matchall cls_fw cls_flow cls_basic act_skbedit act_mirred ledtrig_usbport xt_set ip_set_list_set ip_set_hash_netportnet ip_set_hash_netport ip_set_hash_netnet ip_set_hash_netiface ip_set_hash_net ip_set_hash_mac ip_set_hash_ipportnet ip_set_hash_ipportip ip_set_hash_ipport ip_set_hash_ipmark ip_set_hash_ip ip_set_bitmap_port ip_set_bitmap_ipmac ip_set_bitmap_ip ip_set nfnetlink ip6table_nat nf_conntrack_ipv6 nf_defrag_ipv6 nf_nat_ipv6 ip6t_NPT ip6t_MASQUERADE nf_nat_masquerade_ipv6 nf_nat nf_conntrack nf_log_ipv6 nf_log_common ip6table_mangle ip6table_filter ip6_tables ip6t_REJECT x_tables nf_reject_ipv6 msdos ip_gre gre ifb sit tunnel4 ip_tunnel tun vfat fat hfsplus cifs nls_utf8 nls_iso8859_15 nls_iso8859_1 nls_cp850 nls_cp437 nls_cp1250 sha1_generic md5 md4 +[ 76.130634] usb_storage leds_gpio xhci_plat_hcd xhci_pci xhci_hcd dwc3 dwc3_of_simple ohci_platform ohci_hcd phy_qcom_dwc3 ahci ehci_platform sd_mod ahci_platform libahci_platform libahci libata scsi_mod ehci_hcd gpio_button_hotplug ext4 mbcache jbd2 exfat crc32c_generic +[ 76.154772] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.14.132 #0 +[ 76.177001] Hardware name: Generic DT based system +[ 76.182990] task: c0b06d80 task.stack: c0b00000 +[ 76.187832] PC is at ieee80211_sta_register_airtime+0x24/0x148 [mac80211] +[ 76.192211] LR is at ath10k_htt_t2h_msg_handler+0x678/0x10f4 [ath10k_core] +[ 76.199052] pc : [] lr : [] psr: a0000113 +[ 76.205820] sp : c0b01d54 ip : 00000002 fp : bf869c0c +[ 76.211981] r10: 0000003c r9 : dbdca138 r8 : 00060002 +[ 76.217192] r7 : 00000000 r6 : dabe1150 r5 : 00000000 r4 : dbdc95c0 +[ 76.222401] r3 : 00000000 r2 : 00060002 r1 : 00000000 r0 : 00000000 +[ 76.229003] Flags: NzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none +[ 76.235509] Control: 10c5787d Table: 5c94006a DAC: 00000051 +[ 76.242716] Process swapper/0 (pid: 0, stack limit = 0xc0b00210) +[ 76.248446] Stack: (0xc0b01d54 to 0xc0b02000) +[ 76.254532] 1d40: dbdc95c0 00000000 dabe1150 +[ 76.258808] 1d60: 00000001 dabe1150 dbdca138 0000003c bf869c0c bf83e8b0 00000002 c0314b10 +[ 76.266969] 1d80: dbdc9c70 00000001 00000001 dabe114c 00010000 00000000 dbdcd724 bf88f3d8 +[ 76.275126] 1da0: c0310d28 db393c00 dbdc95c0 00000000 c0b01dd0 c07fb4c4 dbdcd724 00000001 +[ 76.283286] 1dc0: 00000022 bf88b09c db393c00 00000022 c0b01dd0 c0b01dd0 00000000 dbdcc5c0 +[ 76.291445] 1de0: bf88f04c dbdcd654 dbdcd71c dbdc95c0 00000014 dbdcd724 dbdcc5c0 00000005 +[ 76.299605] 1e00: 0004b400 bf85c360 00000000 bf87101c c0b01e24 00000006 00000000 dbdc95c0 +[ 76.307764] 1e20: 00000001 00000040 0000012c c0b01e80 1cf51000 bf85c448 dbdcd440 dbdc95c0 +[ 76.315925] 1e40: dbdca440 ffffa880 00000040 bf88cb68 dbdcd440 00000001 00000040 ffffa880 +[ 76.324084] 1e60: c0b02d00 c06d72e0 dd990080 c0a3f080 c0b255dc c0b047e4 c090afac c090e80c +[ 76.332244] 1e80: c0b01e80 c0b01e80 c0b01e88 c0b01e88 dd4cc200 00000000 00000003 c0b0208c +[ 76.340405] 1ea0: c0b02080 40000003 ffffe000 00000100 c0b02080 c03015c8 00000000 00000001 +[ 76.348564] 1ec0: dd408000 c0a38210 c0b2c7c0 0000000a ffffa880 c0b02d00 c07fb764 00200102 +[ 76.356723] 1ee0: dd4cc268 c0a3e414 00000000 00000000 00000001 dd408000 de803000 00000000 +[ 76.364883] 1f00: 00000000 c03247cc c0a3e414 c0368f1c c0b03f60 c0b153cc de80200c de802000 +[ 76.373042] 1f20: c0b01f48 c0301488 c0308630 60000013 ffffffff c0b01f7c 00000000 c0b00000 +[ 76.381204] 1f40: 00000000 c030c08c 00000001 00000000 00000000 c0315180 ffffe000 c0b03cc0 +[ 76.389363] 1f60: c0b03c70 00000000 00000000 c0a2da28 00000000 00000000 c0b01f90 c0b01f98 +[ 76.397522] 1f80: c030862c c0308630 60000013 ffffffff 00000051 00000000 ffffe000 c035dd18 +[ 76.405681] 1fa0: 000000bf c0b03c40 00000000 c0b2c000 dddfce80 c035e060 c0b2c040 c0a00cf4 +[ 76.413842] 1fc0: ffffffff ffffffff 00000000 c0a0067c c0a2da28 00000000 00000000 c0b2c1d4 +[ 76.422001] 1fe0: c0b03c5c c0a2da24 c0b07ee0 4220406a 512f04d0 4220807c 00000000 00000000 +[ 76.430335] [] (ieee80211_sta_register_airtime [mac80211]) from [<00000002>] (0x2) +[ 76.438314] Code: e1cd81f0 e1a08002 e1cda1f8 e58de020 (e5102618) +[ 76.446965] ---[ end trace 227a38ade964d642 ]--- + +Fixes: bb31b7cb106c ("ath10k: report tx airtime provided by fw") +Signed-off-by: Hauke Mehrtens +--- + +--- a/ath10k-5.2/htt_rx.c ++++ b/ath10k-5.2/htt_rx.c +@@ -2497,7 +2497,7 @@ do_generic: + spin_lock_bh(&ar->data_lock); + + peer = ath10k_peer_find_by_id(ar, peer_id); +- if (!peer) { ++ if (!peer || !peer->sta) { + spin_unlock_bh(&ar->data_lock); + rcu_read_unlock(); + continue; -- 2.30.2