From patchwork Thu May 19 08:16:28 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: AceLan Kao X-Patchwork-Id: 1633118 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=QXO58GCQ; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4L3jPV42KBz9tld for ; Thu, 19 May 2022 18:16:46 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1nrbKq-0002XT-Vw; Thu, 19 May 2022 08:16:40 +0000 Received: from mail-pg1-f170.google.com ([209.85.215.170]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1nrbKo-0002WU-Qv for kernel-team@lists.ubuntu.com; Thu, 19 May 2022 08:16:39 +0000 Received: by mail-pg1-f170.google.com with SMTP id j21so4203480pga.13 for ; Thu, 19 May 2022 01:16:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ObF6ejF3z0UuBR/R6ckMNSPvCIthWfFQ8xIDk4IGAtE=; b=QXO58GCQIbCTDPnoDBvsWmnqP5oiiiXUroJfnnAzk+p/C/1Q4uBUHUUbrLK8WliX/m axIl+5Gz+wepPVcGHf/DlzZe9ucNfHf0PIvhdr8hT6cXK7vAOgMI32u0Y2Iqozqhz8mC P8UDDFc6YNShSZQpt9OQr0ygLLMKvEx0K5KnjaeQ4OH6f2c8stxbn99dkmiIqNFTGta0 jI/u9IDyCduVHieDe8NWq3p5l4n+EwgTptWz91cuaHd3V1/KHF5uHAxgx+5k2MOQug49 MQltYH1VOWhaLIsHEF407IsPCSQzc4Lx7idV3bigxeU+gXOPLGk1kia0In8DjT1xsbZb GRIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=ObF6ejF3z0UuBR/R6ckMNSPvCIthWfFQ8xIDk4IGAtE=; b=GX/b+PqhZpjK1mtAhbwRxvmNHQ20y7EiQAZuZbKDP47l0rjiv1kPLiqfMlZ+hF8v2o I48PXDVkCpOH2aRN7X3lQlp1nKfWu1U6x71AO3ndomYxa3MHXLlR9E2slwwi+MWgiNVF dXDB1qx8gS8ZjDf7oUXaCt6HePijBO3sLe5dkO2iCtUq+TI9UXzehJvUGavBkOWcQVVp Q0nf9fjlsAqmQ9MJY+JObpRJ7ZbjUtiEQQJUqSW2BsA8A8lUABchMnJjVrYLtbHMf3Jp I/x77fEMtr/QJp2JPpISdYs/fhGJ2wUDJ2hUA/BpysLt0wYk4WY5l0JpPIER6JhmFeAZ da4w== X-Gm-Message-State: AOAM53362VvUMipQPzo0dTX9Zzfq7+CCOsG/Zc7nIei9tnOBnABmRYpv BhxnXAVAsh6WDJpBRapFsSFR824b2JY= X-Google-Smtp-Source: ABdhPJzbuPk21ATHypiWwq53DkvAfk9DopNduUZokhyxKcBW3ejYGnoemM7I0xwNhLHEGSy2vTId7g== X-Received: by 2002:a63:3194:0:b0:3f6:a28:77cf with SMTP id x142-20020a633194000000b003f60a2877cfmr2979120pgx.264.1652948196386; Thu, 19 May 2022 01:16:36 -0700 (PDT) Received: from localhost (220-135-95-34.hinet-ip.hinet.net. [220.135.95.34]) by smtp.gmail.com with ESMTPSA id iz10-20020a170902ef8a00b0015e8d4eb1ddsm3064175plb.39.2022.05.19.01.16.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 May 2022 01:16:35 -0700 (PDT) From: AceLan Kao To: kernel-team@lists.ubuntu.com Subject: [PATCH 1/5][SRU][J] rtw88: Add update beacon flow for AP mode Date: Thu, 19 May 2022 16:16:28 +0800 Message-Id: <20220519081632.1555666-2-acelan.kao@canonical.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220519081632.1555666-1-acelan.kao@canonical.com> References: <20220519081632.1555666-1-acelan.kao@canonical.com> MIME-Version: 1.0 Received-SPF: pass client-ip=209.85.215.170; envelope-from=acelan@gmail.com; helo=mail-pg1-f170.google.com X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Po-Hao Huang BugLink: https://bugs.launchpad.net/bugs/1969326 To support stations in power saving mode, AP should notify stations that there are frames buffered at the AP via TIM during beacons. Driver used to transmit identical beacons that were downloaded to hardware during the initiation phase. This beacon will become obsolete over time. If the beacon does not contain sufficient information, station would not be able to percept that there is data to receive. Hence it won't wake up and start the PS-poll procedure, this could lead to timeout and/or lost data segments. In order to resolve this issue, driver will now download beacon to hardware whenever the content is updated. Enable hardware to update dtim_count for more efficiency, this reduces the overhead of downloading beacon at every beacon interval since most of the time only the dtim_count needs to be updated. Change queue mapping for broadcast/multicast frames to high queue, so these frames can be prioritized and sent when dtim_count is zero. Signed-off-by: Po-Hao Huang Signed-off-by: Ping-Ke Shih Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20220407095858.46807-4-pkshih@realtek.com (baported from commit f2217968ffdae702c21cc00fa804fbbd9ee6bb4b linux-next) Signed-off-by: Chia-Lin Kao (AceLan) --- drivers/net/wireless/realtek/rtw88/fw.c | 4 +++- drivers/net/wireless/realtek/rtw88/fw.h | 1 + drivers/net/wireless/realtek/rtw88/mac80211.c | 17 ++++++++++++++++- drivers/net/wireless/realtek/rtw88/main.c | 6 ++++++ drivers/net/wireless/realtek/rtw88/main.h | 2 ++ drivers/net/wireless/realtek/rtw88/pci.c | 3 +++ drivers/net/wireless/realtek/rtw88/reg.h | 2 ++ drivers/net/wireless/realtek/rtw88/tx.c | 17 +++++++++++++++++ drivers/net/wireless/realtek/rtw88/tx.h | 4 ++++ 9 files changed, 54 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/fw.c b/drivers/net/wireless/realtek/rtw88/fw.c index a384fc3a4f2b..aaefaabf2fd7 100644 --- a/drivers/net/wireless/realtek/rtw88/fw.c +++ b/drivers/net/wireless/realtek/rtw88/fw.c @@ -1001,6 +1001,7 @@ static struct sk_buff *rtw_get_rsvd_page_skb(struct ieee80211_hw *hw, struct rtw_vif *rtwvif; struct sk_buff *skb_new; struct cfg80211_ssid *ssid; + u16 tim_offset; if (rsvd_pkt->type == RSVD_DUMMY) { skb_new = alloc_skb(1, GFP_KERNEL); @@ -1019,7 +1020,8 @@ static struct sk_buff *rtw_get_rsvd_page_skb(struct ieee80211_hw *hw, switch (rsvd_pkt->type) { case RSVD_BEACON: - skb_new = ieee80211_beacon_get(hw, vif); + skb_new = ieee80211_beacon_get_tim(hw, vif, &tim_offset, NULL); + rsvd_pkt->tim_offset = tim_offset; break; case RSVD_PS_POLL: skb_new = ieee80211_pspoll_get(hw, vif); diff --git a/drivers/net/wireless/realtek/rtw88/fw.h b/drivers/net/wireless/realtek/rtw88/fw.h index 64dcde35a021..bcba3660a77a 100644 --- a/drivers/net/wireless/realtek/rtw88/fw.h +++ b/drivers/net/wireless/realtek/rtw88/fw.h @@ -145,6 +145,7 @@ struct rtw_rsvd_page { struct sk_buff *skb; enum rtw_rsvd_packet_type type; u8 page; + u16 tim_offset; bool add_txdesc; struct cfg80211_ssid *ssid; u16 probe_req_size; diff --git a/drivers/net/wireless/realtek/rtw88/mac80211.c b/drivers/net/wireless/realtek/rtw88/mac80211.c index 6f5629852416..9a8f6a84baa9 100644 --- a/drivers/net/wireless/realtek/rtw88/mac80211.c +++ b/drivers/net/wireless/realtek/rtw88/mac80211.c @@ -391,8 +391,10 @@ static void rtw_ops_bss_info_changed(struct ieee80211_hw *hw, coex_stat->wl_beacon_interval = conf->beacon_int; } - if (changed & BSS_CHANGED_BEACON) + if (changed & BSS_CHANGED_BEACON) { + rtw_set_dtim_period(rtwdev, conf->dtim_period); rtw_fw_download_rsvd_page(rtwdev); + } if (changed & BSS_CHANGED_BEACON_ENABLED) { if (conf->enable_beacon) @@ -463,6 +465,18 @@ static int rtw_ops_sta_remove(struct ieee80211_hw *hw, return 0; } +static int rtw_ops_set_tim(struct ieee80211_hw *hw, struct ieee80211_sta *sta, + bool set) +{ + struct rtw_dev *rtwdev = hw->priv; + + mutex_lock(&rtwdev->mutex); + rtw_fw_download_rsvd_page(rtwdev); + mutex_unlock(&rtwdev->mutex); + + return 0; +} + static int rtw_ops_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, struct ieee80211_vif *vif, struct ieee80211_sta *sta, struct ieee80211_key_conf *key) @@ -829,6 +843,7 @@ const struct ieee80211_ops rtw_ops = { .conf_tx = rtw_ops_conf_tx, .sta_add = rtw_ops_sta_add, .sta_remove = rtw_ops_sta_remove, + .set_tim = rtw_ops_set_tim, .set_key = rtw_ops_set_key, .ampdu_action = rtw_ops_ampdu_action, .can_aggregate_in_amsdu = rtw_ops_can_aggregate_in_amsdu, diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c index 69512856bb46..bc14b2f63ab9 100644 --- a/drivers/net/wireless/realtek/rtw88/main.c +++ b/drivers/net/wireless/realtek/rtw88/main.c @@ -628,6 +628,12 @@ static void rtw_txq_ba_work(struct work_struct *work) rtw_iterate_stas_atomic(rtwdev, rtw_txq_ba_iter, &data); } +void rtw_set_dtim_period(struct rtw_dev *rtwdev, int dtim_period) +{ + rtw_write32_set(rtwdev, REG_TCR, BIT_TCR_UPDATE_TIMIE); + rtw_write8(rtwdev, REG_DTIM_COUNTER_ROOT, dtim_period - 1); +} + void rtw_get_channel_params(struct cfg80211_chan_def *chandef, struct rtw_channel_params *chan_params) { diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h index 56812127a053..afb3f2cbfa9f 100644 --- a/drivers/net/wireless/realtek/rtw88/main.h +++ b/drivers/net/wireless/realtek/rtw88/main.h @@ -571,6 +571,7 @@ struct rtw_tx_pkt_info { u32 tx_pkt_size; u8 offset; u8 pkt_offset; + u8 tim_offset; u8 mac_id; u8 rate_id; u8 rate; @@ -1981,6 +1982,7 @@ static inline int rtw_chip_dump_fw_crash(struct rtw_dev *rtwdev) void rtw_get_channel_params(struct cfg80211_chan_def *chandef, struct rtw_channel_params *ch_param); bool check_hw_ready(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 target); +void rtw_set_dtim_period(struct rtw_dev *rtwdev, int dtim_period); bool ltecoex_read_reg(struct rtw_dev *rtwdev, u16 offset, u32 *val); bool ltecoex_reg_write(struct rtw_dev *rtwdev, u16 offset, u32 value); void rtw_restore_reg(struct rtw_dev *rtwdev, diff --git a/drivers/net/wireless/realtek/rtw88/pci.c b/drivers/net/wireless/realtek/rtw88/pci.c index 08cf66141889..70ca338ed180 100644 --- a/drivers/net/wireless/realtek/rtw88/pci.c +++ b/drivers/net/wireless/realtek/rtw88/pci.c @@ -686,6 +686,9 @@ static u8 rtw_hw_queue_mapping(struct sk_buff *skb) queue = RTW_TX_QUEUE_BCN; else if (unlikely(ieee80211_is_mgmt(fc) || ieee80211_is_ctl(fc))) queue = RTW_TX_QUEUE_MGMT; + else if (is_broadcast_ether_addr(hdr->addr1) || + is_multicast_ether_addr(hdr->addr1)) + queue = RTW_TX_QUEUE_HI0; else if (WARN_ON_ONCE(q_mapping >= ARRAY_SIZE(ac_to_hwq))) queue = ac_to_hwq[IEEE80211_AC_BE]; else diff --git a/drivers/net/wireless/realtek/rtw88/reg.h b/drivers/net/wireless/realtek/rtw88/reg.h index c0fb1e446245..8cb693530065 100644 --- a/drivers/net/wireless/realtek/rtw88/reg.h +++ b/drivers/net/wireless/realtek/rtw88/reg.h @@ -387,12 +387,14 @@ #define BIT_EN_FREE_CNT BIT(3) #define BIT_DIS_SECOND_CCA (BIT(0) | BIT(1)) #define REG_HIQ_NO_LMT_EN 0x5A7 +#define REG_DTIM_COUNTER_ROOT 0x5A8 #define BIT_HIQ_NO_LMT_EN_ROOT BIT(0) #define REG_TIMER0_SRC_SEL 0x05B4 #define BIT_TSFT_SEL_TIMER0 (BIT(4) | BIT(5) | BIT(6)) #define REG_TCR 0x0604 #define BIT_PWRMGT_HWDATA_EN BIT(7) +#define BIT_TCR_UPDATE_TIMIE BIT(5) #define REG_RCR 0x0608 #define BIT_APP_FCS BIT(31) #define BIT_APP_MIC BIT(30) diff --git a/drivers/net/wireless/realtek/rtw88/tx.c b/drivers/net/wireless/realtek/rtw88/tx.c index 3a101aa139ed..d3c3c0aa99bd 100644 --- a/drivers/net/wireless/realtek/rtw88/tx.c +++ b/drivers/net/wireless/realtek/rtw88/tx.c @@ -67,6 +67,10 @@ void rtw_tx_fill_tx_desc(struct rtw_tx_pkt_info *pkt_info, struct sk_buff *skb) SET_TX_DESC_HW_SSN_SEL(txdesc, pkt_info->hw_ssn_sel); SET_TX_DESC_NAVUSEHDR(txdesc, pkt_info->nav_use_hdr); SET_TX_DESC_BT_NULL(txdesc, pkt_info->bt_null); + if (pkt_info->tim_offset) { + SET_TX_DESC_TIM_EN(txdesc, 1); + SET_TX_DESC_TIM_OFFSET(txdesc, pkt_info->tim_offset); + } } EXPORT_SYMBOL(rtw_tx_fill_tx_desc); @@ -422,6 +426,19 @@ void rtw_tx_rsvd_page_pkt_info_update(struct rtw_dev *rtwdev, if (type == RSVD_QOS_NULL) pkt_info->bt_null = true; + if (type == RSVD_BEACON) { + struct rtw_rsvd_page *rsvd_pkt; + int hdr_len; + + rsvd_pkt = list_first_entry_or_null(&rtwdev->rsvd_page_list, + struct rtw_rsvd_page, + build_list); + if (rsvd_pkt && rsvd_pkt->tim_offset != 0) { + hdr_len = sizeof(struct ieee80211_hdr_3addr); + pkt_info->tim_offset = rsvd_pkt->tim_offset - hdr_len; + } + } + rtw_tx_pkt_info_update_sec(rtwdev, pkt_info, skb); /* TODO: need to change hw port and hw ssn sel for multiple vifs */ diff --git a/drivers/net/wireless/realtek/rtw88/tx.h b/drivers/net/wireless/realtek/rtw88/tx.h index 56371eff9f7f..8419603adce4 100644 --- a/drivers/net/wireless/realtek/rtw88/tx.h +++ b/drivers/net/wireless/realtek/rtw88/tx.h @@ -33,6 +33,10 @@ le32p_replace_bits((__le32 *)(txdesc) + 0x05, value, GENMASK(6, 5)) #define SET_TX_DESC_SW_SEQ(txdesc, value) \ le32p_replace_bits((__le32 *)(txdesc) + 0x09, value, GENMASK(23, 12)) +#define SET_TX_DESC_TIM_EN(txdesc, value) \ + le32p_replace_bits((__le32 *)(txdesc) + 0x09, value, BIT(7)) +#define SET_TX_DESC_TIM_OFFSET(txdesc, value) \ + le32p_replace_bits((__le32 *)(txdesc) + 0x09, value, GENMASK(6, 0)) #define SET_TX_DESC_MAX_AGG_NUM(txdesc, value) \ le32p_replace_bits((__le32 *)(txdesc) + 0x03, value, GENMASK(21, 17)) #define SET_TX_DESC_USE_RTS(tx_desc, value) \ From patchwork Thu May 19 08:16:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: AceLan Kao X-Patchwork-Id: 1633119 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=LJ8bakSB; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4L3jPd1jvYz9t6g for ; Thu, 19 May 2022 18:16:53 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1nrbKv-0002Zp-1K; Thu, 19 May 2022 08:16:45 +0000 Received: from mail-pf1-f174.google.com ([209.85.210.174]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1nrbKq-0002X3-ME for kernel-team@lists.ubuntu.com; Thu, 19 May 2022 08:16:40 +0000 Received: by mail-pf1-f174.google.com with SMTP id c14so4514684pfn.2 for ; Thu, 19 May 2022 01:16:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=hx6ooyz+eniMVBhA6kIHNm7W77S2NohfnCjg+r8mYiM=; b=LJ8bakSB5nBo7acpNYHFZWQkaHQsfO/AQhTE2Ffqe0Xr/3PoBcb753n4nsaqE0MIkk 68uaCpFRAF+RtIyhuOGrgaKlEploW1yX1MoOnc/VP695xAcwjyHaVi6GfvkBHfwkUqRq ElHwswsz365TxxUHse5EbI1zDhY5tt126+9biHcM9MLE35o67oYRSUzCISYiOfu7NNna +KOF2PJ4JaLd5z3VwABwNcZLIoLLHX8cnW25JuhXOBs12gA7zE0hfyJBDeSwTflrJ6nz 8lQyxuhGsBCVBB74mf66MdruHoiSd/05QVxzQOMlCt9v+8Fai68Rh63C7Wuz/XfRknJ2 wbpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=hx6ooyz+eniMVBhA6kIHNm7W77S2NohfnCjg+r8mYiM=; b=siy3/HR72p8BXm4+h3xcB5Xibj2+Zk+pzSoYzLJELHb1bclLFByXaREf9eDyKCrhaE p4+mY+RIy1KMMYl8VIndq6CUFehq6Hua8mKB0915WcrGtwLObCQ6JoknWmhQH/qJExCB tkSCKXFIfdElA82bGJe4YoUA0TmbShjdtuP1670eegr7xXo20K80aniBc2tktE64b1AL sEYNR3jinGLY6hNi2fDbjgHOdR4Xi4reu0+Fu2FmSzdKMp5gYUhq03eo2kOwY5zNWYzb Ux4hQl26OMDU4RblT2KDZcugyFfW+rvFejek9mJ8AIs4Kia7/5Bbm+gy6gZjBytrEsL+ NCGw== X-Gm-Message-State: AOAM531EM4MlOj4m8BJsD7woLXRrGCsW/b8Y+F1KLH3Ki1ChkdPTSjFt OR4IK099s3G5ol/pgSRFSi8TUggekoY= X-Google-Smtp-Source: ABdhPJxd7sCAvTYiHtOHzlVPKFwmTOFEilTY7JFYfxJUMcskFTwg9YtvPYepSE/Q06lhI376TOpKPw== X-Received: by 2002:a05:6a00:2918:b0:512:e4b5:60fb with SMTP id cg24-20020a056a00291800b00512e4b560fbmr3531578pfb.50.1652948198389; Thu, 19 May 2022 01:16:38 -0700 (PDT) Received: from localhost (220-135-95-34.hinet-ip.hinet.net. [220.135.95.34]) by smtp.gmail.com with ESMTPSA id t20-20020a17090ad51400b001d97fc5a544sm2879894pju.2.2022.05.19.01.16.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 May 2022 01:16:37 -0700 (PDT) From: AceLan Kao To: kernel-team@lists.ubuntu.com Subject: [PATCH 2/5][SRU][J] rtw88: 8821c: Enable TX report for management frames Date: Thu, 19 May 2022 16:16:29 +0800 Message-Id: <20220519081632.1555666-3-acelan.kao@canonical.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220519081632.1555666-1-acelan.kao@canonical.com> References: <20220519081632.1555666-1-acelan.kao@canonical.com> MIME-Version: 1.0 Received-SPF: pass client-ip=209.85.210.174; envelope-from=acelan@gmail.com; helo=mail-pf1-f174.google.com X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Po-Hao Huang BugLink: https://bugs.launchpad.net/bugs/1969326 Without this setting, hardware would not report to driver even if management frames are transmitted successfully. So we fix it. Signed-off-by: Po-Hao Huang Signed-off-by: Ping-Ke Shih Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20220407095858.46807-5-pkshih@realtek.com (cherry picked from commit f1c4dabfe68df7321cba0a07a30b2776a303abb2 linux-next) Signed-off-by: Chia-Lin Kao (AceLan) --- drivers/net/wireless/realtek/rtw88/rtw8821c_table.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8821c_table.c b/drivers/net/wireless/realtek/rtw88/rtw8821c_table.c index 8e8915c5c498..6c82c4383497 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8821c_table.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8821c_table.c @@ -13,7 +13,7 @@ static const u32 rtw8821c_mac[] = { 0x04F, 0x00000001, 0x029, 0x000000F9, 0x420, 0x00000080, - 0x421, 0x0000000F, + 0x421, 0x0000001F, 0x428, 0x0000000A, 0x429, 0x00000010, 0x430, 0x00000000, From patchwork Thu May 19 08:16:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: AceLan Kao X-Patchwork-Id: 1633120 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=eH9aHLPZ; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4L3jPh2mdRz9t6g for ; Thu, 19 May 2022 18:16:56 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1nrbKx-0002cE-FT; Thu, 19 May 2022 08:16:47 +0000 Received: from mail-pf1-f174.google.com ([209.85.210.174]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1nrbKs-0002Xs-W8 for kernel-team@lists.ubuntu.com; Thu, 19 May 2022 08:16:43 +0000 Received: by mail-pf1-f174.google.com with SMTP id x143so4479013pfc.11 for ; Thu, 19 May 2022 01:16:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=IYjdUDDusufVR21P4qy6xWX+3c7mS7w1ws+7GNo6X7A=; b=eH9aHLPZi7nW+roX1pbEVcX5BJySKKsQG/3iDJdim5C1d+KF2tBlcMntitC9XkdJQ9 JkSd/RDGuJsvOR4donuEVjQJtKYm4KWYltxwcd0iIstjPC1JoxcdXpwDbXEmbxUjP7Er V6Xeo2xeMP31min/KLBaU1udlmY22RI3EV5/N2ac7BH1LTHdCDxndcfzGeCJv4IDBuAb klQsVhq9jl64/Vcbd1vJfTPOiYnKiS2MAwXkFP0UpvjBG/0obCYqWQXPQ8b+brc9eQsn XKV3mByIIZ2MAI5WEN6eQz/i02m4WU6bFr6o+o2cIHme9PYiCF5TgGtDGEg15nB4GupY I6sA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=IYjdUDDusufVR21P4qy6xWX+3c7mS7w1ws+7GNo6X7A=; b=cx5QJZxGbZQlgflEIjwC9nXybEz0YN2MuoxNgOXJcS+TI2VBzLvsywGft1kVLFg6J9 L6sikXTrDDDHkgiU+nem68EI5MHILubGmezo44wzV7Wb7muMlPPFw3XTHx/psJRf5Hxl gAOQN6Y3Bq4OKuIOll5uPhjeUoRjUQtKKk5e7Ec3tAJh6HkHMrW3kfxrBZK3ebhWG/BK UkRCWIr22tDJRyOcFanOcyEKw2xhLz7q+b5k9MiwW3vuzbOtTFt6zT27wEKTfxVk1z4Z r5DDi8UkDfPLKxTZl5FmY/PfzQqiml1n1wtBdRUSiJFyRF8A8vdECJrsonn/81MTsHTf AdXA== X-Gm-Message-State: AOAM532kLyEKaC/Z0qODd4gAtXX5olZgIodjXmst1wJo6xY8XcTaAFt7 fK9tw0Oc3x6TJ9oewoGBpWui67kfA1w= X-Google-Smtp-Source: ABdhPJx6ONssiv5m9VEjKXrP1/j2yAALXqNVhdLmNxnr2od0i6rxgclrOr0clc3TDxcThhzI7+Ev+g== X-Received: by 2002:a63:4e62:0:b0:398:cb40:19b0 with SMTP id o34-20020a634e62000000b00398cb4019b0mr2970670pgl.445.1652948200362; Thu, 19 May 2022 01:16:40 -0700 (PDT) Received: from localhost (220-135-95-34.hinet-ip.hinet.net. [220.135.95.34]) by smtp.gmail.com with ESMTPSA id e15-20020a170902784f00b001615de533a9sm3227260pln.30.2022.05.19.01.16.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 May 2022 01:16:39 -0700 (PDT) From: AceLan Kao To: kernel-team@lists.ubuntu.com Subject: [PATCH 3/5][SRU][J] rtw88: do PHY calibration while starting AP Date: Thu, 19 May 2022 16:16:30 +0800 Message-Id: <20220519081632.1555666-4-acelan.kao@canonical.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220519081632.1555666-1-acelan.kao@canonical.com> References: <20220519081632.1555666-1-acelan.kao@canonical.com> MIME-Version: 1.0 Received-SPF: pass client-ip=209.85.210.174; envelope-from=acelan@gmail.com; helo=mail-pf1-f174.google.com X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Ping-Ke Shih BugLink: https://bugs.launchpad.net/bugs/1969326 Calling calibration to yield expected PHY performance. We do this in STA mode, so do this in AP mode as well. Signed-off-by: Ping-Ke Shih Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20220407095858.46807-6-pkshih@realtek.com (cherry picked from commit f5207c122102cac22c78f438610d937a924aee3a linux-next) Signed-off-by: Chia-Lin Kao (AceLan) --- drivers/net/wireless/realtek/rtw88/mac80211.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/net/wireless/realtek/rtw88/mac80211.c b/drivers/net/wireless/realtek/rtw88/mac80211.c index 9a8f6a84baa9..256af5373401 100644 --- a/drivers/net/wireless/realtek/rtw88/mac80211.c +++ b/drivers/net/wireless/realtek/rtw88/mac80211.c @@ -418,6 +418,18 @@ static void rtw_ops_bss_info_changed(struct ieee80211_hw *hw, mutex_unlock(&rtwdev->mutex); } +static int rtw_ops_start_ap(struct ieee80211_hw *hw, struct ieee80211_vif *vif) +{ + struct rtw_dev *rtwdev = hw->priv; + struct rtw_chip_info *chip = rtwdev->chip; + + mutex_lock(&rtwdev->mutex); + chip->ops->phy_calibration(rtwdev); + mutex_unlock(&rtwdev->mutex); + + return 0; +} + static int rtw_ops_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 ac, const struct ieee80211_tx_queue_params *params) @@ -840,6 +852,7 @@ const struct ieee80211_ops rtw_ops = { .change_interface = rtw_ops_change_interface, .configure_filter = rtw_ops_configure_filter, .bss_info_changed = rtw_ops_bss_info_changed, + .start_ap = rtw_ops_start_ap, .conf_tx = rtw_ops_conf_tx, .sta_add = rtw_ops_sta_add, .sta_remove = rtw_ops_sta_remove, From patchwork Thu May 19 08:16:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: AceLan Kao X-Patchwork-Id: 1633121 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=E2cTM2I7; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4L3jPn491jz9t6g for ; Thu, 19 May 2022 18:17:01 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1nrbL2-0002gY-GA; Thu, 19 May 2022 08:16:52 +0000 Received: from mail-pj1-f48.google.com ([209.85.216.48]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1nrbKw-0002Yr-Kg for kernel-team@lists.ubuntu.com; Thu, 19 May 2022 08:16:46 +0000 Received: by mail-pj1-f48.google.com with SMTP id a23-20020a17090acb9700b001df4e9f4870so4562647pju.1 for ; Thu, 19 May 2022 01:16:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bseSh4fSG45qi0ZS+DsN7SS5Z4MfL7sJjZPlHtMGLOY=; b=E2cTM2I7KyZARfH0zEjMHUbrAL3Nl+9tnQ8JlRvOy8UNyRxYDiRtkVM5XE+A57k5qY T6h847Eh30S4Y7cj37F5gJanJs89aG7g8f6zu81OUD++BvrbpI0ca5H+sDz0szEV+TPk 2YWExEIbrpXHbW2hsDqsLpzgI6kyFgr8amf6AloeLnPikfFJAP68973aKx2QXzZCmgER WpCaM1V1bi/YgtzV5budSqUgro8RRU6x2YfVJiAoMAKd+Sqs0QqI2TFLs8Gntd2zOMRX P5BSW7Oo4XSnDVecq1m2aXM4OF3mdkcPPsNFaIFbMcIbFd5n0dhSqx7PR7m1YPw+B3Wh hH3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=bseSh4fSG45qi0ZS+DsN7SS5Z4MfL7sJjZPlHtMGLOY=; b=SY709N5crg2G13VW24oWzTtCgnd/NvhgvPhv4OAJcLuXXLIm5XUlryFZWzvtDjhPsO GPpkkspg5djLECfmiekoYR9+l2Lqapr3inlOTe7XIuBv19ucbq3c+3ws00uJGIv81QB6 ZIlgmFGAK2zl2A67AqOmZ/6INBLS32NJMt/sb/unsPX7ErnfHvYZijo52uS8iGZOkXkX uTehFPTt54TtEOIW1WLD4G4uCMwq6sw2Nx18g3DOzXNVrzg2QariFtqzwLN52rHioKDH Dm446BVqqGFTJNVpWEJxz/3S7hR4APxOdi8/ENDIvNLWfH41Z4e8EdUOqs7/Y/nS9M7S DXFQ== X-Gm-Message-State: AOAM530F/DfhgGcAETMXOcAJoviR3uCNTxHavb4Hmb8dSA0eEG34+ufk XE/HCCmjhnmlDWpRV8z5Up9+3qVcLO0= X-Google-Smtp-Source: ABdhPJythEPryjyPMiM+w3SjgPKVGZ8cCC9K82lXppWGBtc0eFZ9HYFGivr/hyffMrfRMvf8e6CqjQ== X-Received: by 2002:a17:903:120f:b0:15f:99f:9597 with SMTP id l15-20020a170903120f00b0015f099f9597mr3393764plh.45.1652948202342; Thu, 19 May 2022 01:16:42 -0700 (PDT) Received: from localhost (220-135-95-34.hinet-ip.hinet.net. [220.135.95.34]) by smtp.gmail.com with ESMTPSA id c2-20020a170903234200b0015e8d4eb2a8sm3093551plh.242.2022.05.19.01.16.41 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 May 2022 01:16:41 -0700 (PDT) From: AceLan Kao To: kernel-team@lists.ubuntu.com Subject: [PATCH 4/5][SRU][J] rtw88: 8821c: fix debugfs rssi value Date: Thu, 19 May 2022 16:16:31 +0800 Message-Id: <20220519081632.1555666-5-acelan.kao@canonical.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220519081632.1555666-1-acelan.kao@canonical.com> References: <20220519081632.1555666-1-acelan.kao@canonical.com> MIME-Version: 1.0 Received-SPF: pass client-ip=209.85.216.48; envelope-from=acelan@gmail.com; helo=mail-pj1-f48.google.com X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Po-Hao Huang BugLink: https://bugs.launchpad.net/bugs/1969326 RSSI value per frame is reported to mac80211 but not maintained in our own statistics, add it back to help us debug. Signed-off-by: Po-Hao Huang Signed-off-by: Ping-Ke Shih Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20220407095858.46807-7-pkshih@realtek.com (cherry picked from commit ece31c93d4d68f7eb8eea4431b052aacdb678de2 linux-next) Signed-off-by: Chia-Lin Kao (AceLan) --- drivers/net/wireless/realtek/rtw88/rtw8821c.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8821c.c b/drivers/net/wireless/realtek/rtw88/rtw8821c.c index 785b8181513f..f405f42d1c1b 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c @@ -506,6 +506,7 @@ static s8 get_cck_rx_pwr(struct rtw_dev *rtwdev, u8 lna_idx, u8 vga_idx) static void query_phy_status_page0(struct rtw_dev *rtwdev, u8 *phy_status, struct rtw_rx_pkt_stat *pkt_stat) { + struct rtw_dm_info *dm_info = &rtwdev->dm_info; s8 rx_power; u8 lna_idx = 0; u8 vga_idx = 0; @@ -517,6 +518,7 @@ static void query_phy_status_page0(struct rtw_dev *rtwdev, u8 *phy_status, pkt_stat->rx_power[RF_PATH_A] = rx_power; pkt_stat->rssi = rtw_phy_rf_power_2_rssi(pkt_stat->rx_power, 1); + dm_info->rssi[RF_PATH_A] = pkt_stat->rssi; pkt_stat->bw = RTW_CHANNEL_WIDTH_20; pkt_stat->signal_power = rx_power; } @@ -524,6 +526,7 @@ static void query_phy_status_page0(struct rtw_dev *rtwdev, u8 *phy_status, static void query_phy_status_page1(struct rtw_dev *rtwdev, u8 *phy_status, struct rtw_rx_pkt_stat *pkt_stat) { + struct rtw_dm_info *dm_info = &rtwdev->dm_info; u8 rxsc, bw; s8 min_rx_power = -120; @@ -543,6 +546,7 @@ static void query_phy_status_page1(struct rtw_dev *rtwdev, u8 *phy_status, pkt_stat->rx_power[RF_PATH_A] = GET_PHY_STAT_P1_PWDB_A(phy_status) - 110; pkt_stat->rssi = rtw_phy_rf_power_2_rssi(pkt_stat->rx_power, 1); + dm_info->rssi[RF_PATH_A] = pkt_stat->rssi; pkt_stat->bw = bw; pkt_stat->signal_power = max(pkt_stat->rx_power[RF_PATH_A], min_rx_power); From patchwork Thu May 19 08:16:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: AceLan Kao X-Patchwork-Id: 1633122 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=Lym8nO9A; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4L3jPz1B9tz9t6g for ; Thu, 19 May 2022 18:17:11 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1nrbLB-0002qx-AZ; Thu, 19 May 2022 08:17:01 +0000 Received: from mail-pl1-f178.google.com ([209.85.214.178]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1nrbL6-0002aI-BF for kernel-team@lists.ubuntu.com; Thu, 19 May 2022 08:16:56 +0000 Received: by mail-pl1-f178.google.com with SMTP id q4so4121310plr.11 for ; Thu, 19 May 2022 01:16:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bSV3KVfkb8Mq3Pxghkyx8ah3eiKhKgoqaY/SeZ6b9D4=; b=Lym8nO9AO0rfr8NH4QfDLI4hgMYiMhAQj7cHiJEYbkAqwfZbiECoomeX0hpXJkr6Y0 6q8dYcUjel3AaX7h4qVt59AFLMxUSRGlYgUWslK76gdSlnRVyWe8qFzabonw3+3ASJOA 3U0nPhxoXFBM5SYEuhB0DT2ahej5NoB6tKFzlp6RgXBAtzLDdIH0aixl2UUJYZzEERzG ioAv49FDoyzj+lRh3Skx9BDjaJieaNstyt5Cya2q9h2ovLEDQbkgCCLCYJ12eSR2MEPm wfc2qzQ5Ig+wGpuI71xen5xkJ2EdhE6UKOu4CB4i3tHt9IQ8sAT2h+VgjJat1FOk4Cfc wEbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=bSV3KVfkb8Mq3Pxghkyx8ah3eiKhKgoqaY/SeZ6b9D4=; b=2zsjOHXiCQaAk6bBYiWooWC253TkHPpUNUWV5JmFCIn9uriuSJgJZa7Jp4k8iZA2sw kJumpyTY/ezvG5ciSy2JUfIBwjMo5/V2OYt2fk6DFXfRP/DTLf2kSpdejpD2QJNojDOZ G5Ej/VkzQ/WvGg7Wwf3S6uTcubLaYdbFqRfmdhRthqNAIh+lYCD5FfXj677vy0OFDVJA Oou7jV9HWP6HyrWMU722ZkB+s6+E19kOL/yo0laaDr/B9X1PMbRheEKscZKYFAJ3v1jY mEaGWOf9xr4dOdrxHiHh9xA0lvrCq3XoipJ2fRUwmdD3EEfDstS6PYM9U87rkGzHN2Q+ YuuQ== X-Gm-Message-State: AOAM531pPtwRW7n1BTjVnVES/s5OescmUrRP2dPsoQu5z8IRR+krExUI Plh/6M+Kgu/tGCyX3Z1HsIMkayvCmO0= X-Google-Smtp-Source: ABdhPJwUobADakI8Rgbc/4MnAAg05KA7aR0qAkbCpQkkOcWOgWM2fJR2r+FAF/MCVfLlogUc7boYZg== X-Received: by 2002:a17:902:b683:b0:161:528c:2802 with SMTP id c3-20020a170902b68300b00161528c2802mr3743465pls.22.1652948204067; Thu, 19 May 2022 01:16:44 -0700 (PDT) Received: from localhost (220-135-95-34.hinet-ip.hinet.net. [220.135.95.34]) by smtp.gmail.com with ESMTPSA id t66-20020a628145000000b0050dc7628162sm3403006pfd.60.2022.05.19.01.16.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 May 2022 01:16:43 -0700 (PDT) From: AceLan Kao To: kernel-team@lists.ubuntu.com Subject: [PATCH 5/5][SRU][J] rtw88: add ieee80211:sta_rc_update ops Date: Thu, 19 May 2022 16:16:32 +0800 Message-Id: <20220519081632.1555666-6-acelan.kao@canonical.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220519081632.1555666-1-acelan.kao@canonical.com> References: <20220519081632.1555666-1-acelan.kao@canonical.com> MIME-Version: 1.0 Received-SPF: pass client-ip=209.85.214.178; envelope-from=acelan@gmail.com; helo=mail-pl1-f178.google.com X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Po-Hao Huang BugLink: https://bugs.launchpad.net/bugs/1969326 Adding this allows us to get notification when bitrate configuration of the station changes. Update according parameters to firmware so the rate control algorithm can work properly. Signed-off-by: Po-Hao Huang Signed-off-by: Ping-Ke Shih Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20220407095858.46807-2-pkshih@realtek.com (backported from commit c1edc86472fc3a5aa3b5c5c53c4e20f6a24992a6 linux-next) Signed-off-by: Chia-Lin Kao (AceLan) --- drivers/net/wireless/realtek/rtw88/fw.c | 4 +--- drivers/net/wireless/realtek/rtw88/mac80211.c | 14 +++++++++++++- drivers/net/wireless/realtek/rtw88/main.c | 6 ++++-- drivers/net/wireless/realtek/rtw88/main.h | 5 +++-- drivers/net/wireless/realtek/rtw88/phy.c | 2 +- 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/fw.c b/drivers/net/wireless/realtek/rtw88/fw.c index aaefaabf2fd7..9b460a8fa86c 100644 --- a/drivers/net/wireless/realtek/rtw88/fw.c +++ b/drivers/net/wireless/realtek/rtw88/fw.c @@ -541,7 +541,6 @@ void rtw_fw_send_rssi_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si) void rtw_fw_send_ra_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si) { u8 h2c_pkt[H2C_PKT_SIZE] = {0}; - bool no_update = si->updated; bool disable_pt = true; SET_H2C_CMD_ID_CLASS(h2c_pkt, H2C_CMD_RA_INFO); @@ -552,7 +551,7 @@ void rtw_fw_send_ra_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si) SET_RA_INFO_SGI_EN(h2c_pkt, si->sgi_enable); SET_RA_INFO_BW_MODE(h2c_pkt, si->bw_mode); SET_RA_INFO_LDPC(h2c_pkt, !!si->ldpc_en); - SET_RA_INFO_NO_UPDATE(h2c_pkt, no_update); + SET_RA_INFO_NO_UPDATE(h2c_pkt, si->no_update); SET_RA_INFO_VHT_EN(h2c_pkt, si->vht_enable); SET_RA_INFO_DIS_PT(h2c_pkt, disable_pt); SET_RA_INFO_RA_MASK0(h2c_pkt, (si->ra_mask & 0xff)); @@ -561,7 +560,6 @@ void rtw_fw_send_ra_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si) SET_RA_INFO_RA_MASK3(h2c_pkt, (si->ra_mask & 0xff000000) >> 24); si->init_ra_lv = 0; - si->updated = true; rtw_fw_send_h2c_command(rtwdev, h2c_pkt); } diff --git a/drivers/net/wireless/realtek/rtw88/mac80211.c b/drivers/net/wireless/realtek/rtw88/mac80211.c index 256af5373401..c663f851ebbd 100644 --- a/drivers/net/wireless/realtek/rtw88/mac80211.c +++ b/drivers/net/wireless/realtek/rtw88/mac80211.c @@ -735,7 +735,7 @@ static void rtw_ra_mask_info_update_iter(void *data, struct ieee80211_sta *sta) } si->use_cfg_mask = true; - rtw_update_sta_info(br_data->rtwdev, si); + rtw_update_sta_info(br_data->rtwdev, si, true); } static void rtw_ra_mask_info_update(struct rtw_dev *rtwdev, @@ -841,6 +841,17 @@ static void rtw_reconfig_complete(struct ieee80211_hw *hw, mutex_unlock(&rtwdev->mutex); } +static void rtw_ops_sta_rc_update(struct ieee80211_hw *hw, + struct ieee80211_vif *vif, + struct ieee80211_sta *sta, u32 changed) +{ + struct rtw_dev *rtwdev = hw->priv; + struct rtw_sta_info *si = (struct rtw_sta_info *)sta->drv_priv; + + if (changed & IEEE80211_RC_BW_CHANGED) + rtw_update_sta_info(rtwdev, si, true); +} + const struct ieee80211_ops rtw_ops = { .tx = rtw_ops_tx, .wake_tx_queue = rtw_ops_wake_tx_queue, @@ -870,6 +881,7 @@ const struct ieee80211_ops rtw_ops = { .set_antenna = rtw_ops_set_antenna, .get_antenna = rtw_ops_get_antenna, .reconfig_complete = rtw_reconfig_complete, + .sta_rc_update = rtw_ops_sta_rc_update, #ifdef CONFIG_PM .suspend = rtw_ops_suspend, .resume = rtw_ops_resume, diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c index bc14b2f63ab9..c60a34da4a5e 100644 --- a/drivers/net/wireless/realtek/rtw88/main.c +++ b/drivers/net/wireless/realtek/rtw88/main.c @@ -291,7 +291,7 @@ int rtw_sta_add(struct rtw_dev *rtwdev, struct ieee80211_sta *sta, for (i = 0; i < ARRAY_SIZE(sta->txq); i++) rtw_txq_init(rtwdev, sta->txq[i]); - rtw_update_sta_info(rtwdev, si); + rtw_update_sta_info(rtwdev, si, true); rtw_fw_media_status_report(rtwdev, si->mac_id, true); rtwdev->sta_cnt++; @@ -1040,7 +1040,8 @@ static u64 rtw_update_rate_mask(struct rtw_dev *rtwdev, return ra_mask; } -void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si) +void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si, + bool update) { struct rtw_dm_info *dm_info = &rtwdev->dm_info; struct ieee80211_sta *sta = si->sta; @@ -1142,6 +1143,7 @@ void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si) ra_mask = rtw_update_rate_mask(rtwdev, si, ra_mask, is_vht_enable, wireless_set); + si->no_update = !update; si->bw_mode = bw_mode; si->stbc_en = stbc_en; si->ldpc_en = ldpc_en; diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h index afb3f2cbfa9f..eb798319ea0c 100644 --- a/drivers/net/wireless/realtek/rtw88/main.h +++ b/drivers/net/wireless/realtek/rtw88/main.h @@ -743,7 +743,7 @@ struct rtw_sta_info { u8 ldpc_en:2; bool sgi_enable; bool vht_enable; - bool updated; + bool no_update; u8 init_ra_lv; u64 ra_mask; @@ -1993,7 +1993,8 @@ void rtw_chip_prepare_tx(struct rtw_dev *rtwdev); void rtw_vif_port_config(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif, u32 config); void rtw_tx_report_purge_timer(struct timer_list *t); -void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si); +void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si, + bool update); int rtw_core_start(struct rtw_dev *rtwdev); void rtw_core_stop(struct rtw_dev *rtwdev); int rtw_chip_info_setup(struct rtw_dev *rtwdev); diff --git a/drivers/net/wireless/realtek/rtw88/phy.c b/drivers/net/wireless/realtek/rtw88/phy.c index 569dd3cfde35..6df79421e7c5 100644 --- a/drivers/net/wireless/realtek/rtw88/phy.c +++ b/drivers/net/wireless/realtek/rtw88/phy.c @@ -476,7 +476,7 @@ static void rtw_phy_ra_info_update_iter(void *data, struct ieee80211_sta *sta) struct rtw_dev *rtwdev = data; struct rtw_sta_info *si = (struct rtw_sta_info *)sta->drv_priv; - rtw_update_sta_info(rtwdev, si); + rtw_update_sta_info(rtwdev, si, false); } static void rtw_phy_ra_info_update(struct rtw_dev *rtwdev)