From patchwork Wed Mar 5 00:08:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Wang X-Patchwork-Id: 14001665 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 92D04C021B8 for ; Wed, 5 Mar 2025 00:09:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=qbgU2cH7rLMVRgOlRIA1RhS/ev6Ps58SctfJOQWg6L0=; b=O5GocSP+EIl8hxN8K4Z9voSSqV +qkFrXOQE2X6GPo3NjlqTenlsj2Kder4t+APVgtsozA+Bx874Tv+yVLmJXvtWS7gmOw/qHEdwg2b6 I4lCE+xZSnMgfQ2RalUiWiq7PeMmEb5qCThhFeCSi7RtfRQatr2CATJJjA6GhAbVBdPjVlJLa2OXO 5BGeezEbpYuyxIBlCV6ETL/rdbWXXouW+npNT280Qz4BuUbzdQQkFSpZ5o7iNHodmdq5DYBeI0+Yi 1uyomxNkYB7Llhzlgw/EOVCsf6NotTK1f5oeXXQ0TfbdC35aJoTg7866R1Uo+MhgiZQlXyuaXevdD 4qTe7qug==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tpcJo-00000006b0r-1sd4; Wed, 05 Mar 2025 00:09:00 +0000 Received: from mail-oi1-f169.google.com ([209.85.167.169]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tpcJm-00000006b0F-2mNh for linux-mediatek@lists.infradead.org; Wed, 05 Mar 2025 00:08:59 +0000 Received: by mail-oi1-f169.google.com with SMTP id 5614622812f47-3f422d6e3b0so1859445b6e.1 for ; Tue, 04 Mar 2025 16:08:57 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741133337; x=1741738137; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=qbgU2cH7rLMVRgOlRIA1RhS/ev6Ps58SctfJOQWg6L0=; b=MDi7pYeuu9qbbdvwa/gAg9wRAf+nbsc4SwgPBRymd2AVyz2nVBAqomNtxg8SdswEtQ aqzw+yVDLGOCy8MZZ6qv9tqeC+YOctHk9Si4Yw2L6LygqrmCs/ySG6koewp6co8QrmBg No42hLOsyMOf29nMn21qa2rur2OtWdo/Tc+pYpSg9MkGSYvag1F8e/229jg9lPuvECEx R/HcK+hKZ0JRdyKzDD9WOw3v066QFjD1RNQH028m/COngZinw7Qw9Z+1nUCLAi9Qg8iH +5kysz5b0FW6fmSXOv55NVCfdZ4iev80UBCeSitJfHAauQINCDrpptU906X9aPzcpyDX bNgw== X-Forwarded-Encrypted: i=1; AJvYcCUlsKVVtZttV9LCKDNs9MlRAHR/NMH2ImGLODtczjJur/gWzCKoK4wm5kH++/+kY4T/PPeQUyNjovmyeM6Sdg==@lists.infradead.org X-Gm-Message-State: AOJu0Ywe8mWYGMv1ujljTQ8OKlmHe71McX5VDFJR0xm+KK9wuuGr2e8c 7yMl12OT7SpNtR+2/wabR0hGh2OHKHELpNESbdyuo3JoO9ywH0eB X-Gm-Gg: ASbGncvAUqKmvZ53ke4MO0mpDr1Ab5UBdfpjjyTDWfccABF5oinlmJhU4u4pRKXy26/ lSQo+6uA8Axszz9Q6y1w71Sc7W0zOxGdbvNn/D8zUaBhkQfeuD433ql7eYvhQevtonVZbTHtOZT 5V0uGgNSQyhOsaPYuw2pMEsXSJU8Z6mc2r3CLWuncLImOA+vHFXjkPwLa6cFKXGU+koTa7lpQA5 SDbO+2+fJeSKiX6KpD/GP2c/FC8I3Lo8nlcG1ZJzvxdDucJXOiBuEgRgyUzL3mCLpkn5NsbeGVX aprfZ35LXTjP9j2OpblzWGw1fBJkT0PUgDToVRObAv2fHsEAc5OtrFxQRPxu1w== X-Google-Smtp-Source: AGHT+IF1g8YRle5yYBcIvy9QWurAvDWoewqdz0axwJqoemwv8scXo9RxJe3DHXRGLaoFj/gkINBMfg== X-Received: by 2002:a05:6808:1889:b0:3f4:2209:c018 with SMTP id 5614622812f47-3f6831d34a4mr672670b6e.26.1741133337136; Tue, 04 Mar 2025 16:08:57 -0800 (PST) Received: from sean-ThinkPad-T450s.lan ([207.191.35.252]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3f67ee8f479sm299985b6e.40.2025.03.04.16.08.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Mar 2025 16:08:55 -0800 (PST) From: sean.wang@kernel.org To: nbd@nbd.name, lorenzo.bianconi@redhat.com Cc: sean.wang@mediatek.com, deren.wu@mediatek.com, mingyen.hsieh@mediatek.com, linux-wireless@vger.kernel.org, linux-mediatek@lists.infradead.org, stable@vger.kernel.org, Caleb Jorden Subject: [PATCH v5 1/6] Revert "wifi: mt76: mt7925: Update mt7925_mcu_uni_[tx,rx]_ba for MLO" Date: Tue, 4 Mar 2025 16:08:46 -0800 Message-Id: <20250305000851.493671-1-sean.wang@kernel.org> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250304_160858_703495_7CDF0C01 X-CRM114-Status: GOOD ( 13.28 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org From: Sean Wang For MLO, mac80211 will send the BA action for each link to the driver, so the driver does not need to handle it itself. Therefore, revert this patch. Fixes: eb2a9a12c609 ("wifi: mt76: mt7925: Update mt7925_mcu_uni_[tx,rx]_ba for MLO") Cc: stable@vger.kernel.org Signed-off-by: Ming Yen Hsieh Tested-by: Caleb Jorden Signed-off-by: Sean Wang --- v2: 1) generate the patch based on the latest mt76 tree 2) update the commit message v3: 1) fixed the merge conflict v4: 1) added tested-by tag v5: 1) update the Fixes tag 2) rebase to wireless.git --- .../net/wireless/mediatek/mt76/mt7925/main.c | 10 ++-- .../net/wireless/mediatek/mt76/mt7925/mcu.c | 50 ++++--------------- .../wireless/mediatek/mt76/mt7925/mt7925.h | 2 - 3 files changed, 15 insertions(+), 47 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/main.c b/drivers/net/wireless/mediatek/mt76/mt7925/main.c index 98daf80ac131..8dba17c8697c 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7925/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7925/main.c @@ -1289,22 +1289,22 @@ mt7925_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif, case IEEE80211_AMPDU_RX_START: mt76_rx_aggr_start(&dev->mt76, &msta->deflink.wcid, tid, ssn, params->buf_size); - mt7925_mcu_uni_rx_ba(dev, vif, params, true); + mt7925_mcu_uni_rx_ba(dev, params, true); break; case IEEE80211_AMPDU_RX_STOP: mt76_rx_aggr_stop(&dev->mt76, &msta->deflink.wcid, tid); - mt7925_mcu_uni_rx_ba(dev, vif, params, false); + mt7925_mcu_uni_rx_ba(dev, params, false); break; case IEEE80211_AMPDU_TX_OPERATIONAL: mtxq->aggr = true; mtxq->send_bar = false; - mt7925_mcu_uni_tx_ba(dev, vif, params, true); + mt7925_mcu_uni_tx_ba(dev, params, true); break; case IEEE80211_AMPDU_TX_STOP_FLUSH: case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT: mtxq->aggr = false; clear_bit(tid, &msta->deflink.wcid.ampdu_state); - mt7925_mcu_uni_tx_ba(dev, vif, params, false); + mt7925_mcu_uni_tx_ba(dev, params, false); break; case IEEE80211_AMPDU_TX_START: set_bit(tid, &msta->deflink.wcid.ampdu_state); @@ -1313,7 +1313,7 @@ mt7925_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif, case IEEE80211_AMPDU_TX_STOP_CONT: mtxq->aggr = false; clear_bit(tid, &msta->deflink.wcid.ampdu_state); - mt7925_mcu_uni_tx_ba(dev, vif, params, false); + mt7925_mcu_uni_tx_ba(dev, params, false); ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid); break; } diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7925/mcu.c index 15815ad84713..4c133200c70b 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7925/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7925/mcu.c @@ -607,60 +607,30 @@ mt7925_mcu_sta_ba(struct mt76_dev *dev, struct mt76_vif_link *mvif, /** starec & wtbl **/ int mt7925_mcu_uni_tx_ba(struct mt792x_dev *dev, - struct ieee80211_vif *vif, struct ieee80211_ampdu_params *params, bool enable) { struct mt792x_sta *msta = (struct mt792x_sta *)params->sta->drv_priv; - struct mt792x_vif *mvif = (struct mt792x_vif *)vif->drv_priv; - struct mt792x_link_sta *mlink; - struct mt792x_bss_conf *mconf; - unsigned long usable_links = ieee80211_vif_usable_links(vif); - struct mt76_wcid *wcid; - u8 link_id, ret; - - for_each_set_bit(link_id, &usable_links, IEEE80211_MLD_MAX_NUM_LINKS) { - mconf = mt792x_vif_to_link(mvif, link_id); - mlink = mt792x_sta_to_link(msta, link_id); - wcid = &mlink->wcid; - - if (enable && !params->amsdu) - mlink->wcid.amsdu = false; + struct mt792x_vif *mvif = msta->vif; + struct mt76_wcid *wcid = &mvif->sta.deflink.wcid; - ret = mt7925_mcu_sta_ba(&dev->mt76, &mconf->mt76, wcid, params, - enable, true); - if (ret < 0) - break; - } + if (enable && !params->amsdu) + msta->deflink.wcid.amsdu = false; - return ret; + return mt7925_mcu_sta_ba(&dev->mt76, &mvif->bss_conf.mt76, wcid, + params, enable, true); } int mt7925_mcu_uni_rx_ba(struct mt792x_dev *dev, - struct ieee80211_vif *vif, struct ieee80211_ampdu_params *params, bool enable) { struct mt792x_sta *msta = (struct mt792x_sta *)params->sta->drv_priv; - struct mt792x_vif *mvif = (struct mt792x_vif *)vif->drv_priv; - struct mt792x_link_sta *mlink; - struct mt792x_bss_conf *mconf; - unsigned long usable_links = ieee80211_vif_usable_links(vif); - struct mt76_wcid *wcid; - u8 link_id, ret; - - for_each_set_bit(link_id, &usable_links, IEEE80211_MLD_MAX_NUM_LINKS) { - mconf = mt792x_vif_to_link(mvif, link_id); - mlink = mt792x_sta_to_link(msta, link_id); - wcid = &mlink->wcid; - - ret = mt7925_mcu_sta_ba(&dev->mt76, &mconf->mt76, wcid, params, - enable, false); - if (ret < 0) - break; - } + struct mt792x_vif *mvif = msta->vif; + struct mt76_wcid *wcid = &mvif->sta.deflink.wcid; - return ret; + return mt7925_mcu_sta_ba(&dev->mt76, &mvif->bss_conf.mt76, wcid, + params, enable, false); } static int mt7925_load_clc(struct mt792x_dev *dev, const char *fw_name) diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/mt7925.h b/drivers/net/wireless/mediatek/mt76/mt7925/mt7925.h index 8707b5d04743..fd5f9d4ea4a7 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7925/mt7925.h +++ b/drivers/net/wireless/mediatek/mt76/mt7925/mt7925.h @@ -263,11 +263,9 @@ int mt7925_mcu_set_beacon_filter(struct mt792x_dev *dev, struct ieee80211_vif *vif, bool enable); int mt7925_mcu_uni_tx_ba(struct mt792x_dev *dev, - struct ieee80211_vif *vif, struct ieee80211_ampdu_params *params, bool enable); int mt7925_mcu_uni_rx_ba(struct mt792x_dev *dev, - struct ieee80211_vif *vif, struct ieee80211_ampdu_params *params, bool enable); void mt7925_scan_work(struct work_struct *work); From patchwork Wed Mar 5 00:08:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Wang X-Patchwork-Id: 14001666 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id AC446C021B8 for ; Wed, 5 Mar 2025 00:09:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=K29PyePUpk5WVq4lLAdCQNE/othRM+FfI7C3wd/RqYg=; b=CFsfSlDoKJz5aaVmH/eOuNqPa9 rGangilLzbAt+88BDKHH4wfQMtZJ3pdIGxV7OdLk+lZ9A2BPuLc8N4JZZ09ve0mKtP8Ts1y7CtOUi 4YS5S7FSjj8SRAPyAN4zg8g32Vsbk13mR0CB6BVtFRCYDrGuVpWC+Qvnoip5z7BX966mpqEPOkWU0 WglqFsv4IuTOItYaTpDPZ5XxrxUxYeI0HRj3vWp7yxV1+TvRUWhhxoQTRHvBLbrvqTYtBIMbRaTTx bIi9t0qjNa0uQaiAMS83TnpYn5ivIUD9m3IAVCp+xy+4gZPimR63zMyNM4KX92xuj45vhYCltf6AQ k0IUuajg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tpcJs-00000006b24-37WB; Wed, 05 Mar 2025 00:09:04 +0000 Received: from mail-oi1-f174.google.com ([209.85.167.174]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tpcJp-00000006b16-486a for linux-mediatek@lists.infradead.org; Wed, 05 Mar 2025 00:09:03 +0000 Received: by mail-oi1-f174.google.com with SMTP id 5614622812f47-3f40b12520eso4799778b6e.3 for ; Tue, 04 Mar 2025 16:09:01 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741133341; x=1741738141; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=K29PyePUpk5WVq4lLAdCQNE/othRM+FfI7C3wd/RqYg=; b=btY/+oxOE+a/u5Bko+rZfyDXTunFvfrV3Ff9pUWFNfPZAD6JZy0ACl5kxUCmUg8F5e bgbTZ956HGJDIs+JzxvFptRDYd2aIenG5sS4gwjcfLMXNB46JI7g7i4cGldt32drb7H7 nGP4t8kpCuqXnECdOwXZv6VLqUvLzTfwU3YL1eyiPxdWskHlTyV1LYYixFWRj4msweG/ 7l6bc3maeSbjJhXGkBaiNx0n+uxIssT7+S364bm+K4n0bpKW4S2vM/odxnrec3Ih4gTS RGtM3BWj8RuLva/B1wk4ygMgODiatrjiwAHb2PAp5GkO5a4iO7SCsGm4/KZYZO7YvyXm +DfQ== X-Forwarded-Encrypted: i=1; AJvYcCXf0RuHU7Guynfe25IAjRmH46GItCvRTKarAyx+ukZEvztKl79gdXxEAqzJpuZ6WJoSl6+kPljZqRVCGUiu8Q==@lists.infradead.org X-Gm-Message-State: AOJu0YyI+IH2xeHrR5yfT2SoFAG04T0Cc47FZPE4Oq3ZBBCbKqYX0wuh eYL0Coe0RyPOEwpQ031bffBa1LMEm/rb3i5o+9Mk+Uh4CvBN35Ga X-Gm-Gg: ASbGncvR2qGqTspxmqBnzHsfysi2ET4NO535Ut7ZCw8lgRZCH7sdxHU5ZDVmwXYZWg0 8t0MFtzKF21ozG4KJtSqjfFTZ9eXIMqO3SyHig0toVRWrNnHPDUtUWcH+1LVjY97qL0Et7w3DzV X3wx93l32a3x8wdG9Fke5s5hy6hCIbhYtiqCVZvqtsW+nt+jFwmQ6mzyuFKEIcgB5BDUlrCnoVU 0EMBQadZEi5YYIGblPimYWYDdMVaEuZIYzZflFwFTrW3Pg9WWGjfaAAzetkrB3x0daa23mJcwGe 0hqDZ+DOvn+rfE1X2dvhAdDk3lZr2JnLLNC2vqY7Zy9IcBtU3SPoCPI+OiaAIQ== X-Google-Smtp-Source: AGHT+IHk5Z4MAR+2LKqaAWAqGAhbyH341r43aDMKsumqMh5/HkJ+xA7G/KuX0nkkLzZMwaGtSmpJ0w== X-Received: by 2002:a05:6808:3584:b0:3f6:684f:2f24 with SMTP id 5614622812f47-3f68315d0afmr458666b6e.16.1741133340971; Tue, 04 Mar 2025 16:09:00 -0800 (PST) Received: from sean-ThinkPad-T450s.lan ([207.191.35.252]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3f67ee8f479sm299985b6e.40.2025.03.04.16.08.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Mar 2025 16:08:59 -0800 (PST) From: sean.wang@kernel.org To: nbd@nbd.name, lorenzo.bianconi@redhat.com Cc: sean.wang@mediatek.com, deren.wu@mediatek.com, mingyen.hsieh@mediatek.com, linux-wireless@vger.kernel.org, linux-mediatek@lists.infradead.org, stable@vger.kernel.org, Caleb Jorden Subject: [PATCH v5 2/6] wifi: mt76: mt7925: fix the wrong link_idx when has p2p_device Date: Tue, 4 Mar 2025 16:08:47 -0800 Message-Id: <20250305000851.493671-2-sean.wang@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250305000851.493671-1-sean.wang@kernel.org> References: <20250305000851.493671-1-sean.wang@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250304_160902_021824_37F5DF63 X-CRM114-Status: GOOD ( 14.31 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org From: Ming Yen Hsieh When the p2p device and MLO station concurrent, the p2p device will occupy the wrong link_idx when the MLO secondary link is added. Fixes: e38a82d25b08 ("wifi: mt76: connac: Extend mt76_connac_mcu_uni_add_dev for MLO") Cc: stable@vger.kernel.org Co-developed-by: Sean Wang Signed-off-by: Sean Wang Tested-by: Caleb Jorden Signed-off-by: Ming Yen Hsieh --- v2: 1) generate the patch based on the latest mt76 tree 2) update the commit message v3: 1) fixed the merge conflict v4: 1) added tested-by tag 2) removed unrelated files v5: 1) update co-developed-by tag 2) rebase to wireless.git --- drivers/net/wireless/mediatek/mt76/mt76.h | 1 + .../net/wireless/mediatek/mt76/mt76_connac_mcu.c | 4 ++-- drivers/net/wireless/mediatek/mt76/mt7925/main.c | 14 ++++++++++---- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h index 132148f7b107..05651efb549e 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76.h +++ b/drivers/net/wireless/mediatek/mt76/mt76.h @@ -769,6 +769,7 @@ struct mt76_testmode_data { struct mt76_vif_link { u8 idx; + u8 link_idx; u8 omac_idx; u8 band_idx; u8 wmm_idx; diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c index f30cf9e71610..d0e49d68c5db 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c @@ -1168,7 +1168,7 @@ int mt76_connac_mcu_uni_add_dev(struct mt76_phy *phy, .tag = cpu_to_le16(DEV_INFO_ACTIVE), .len = cpu_to_le16(sizeof(struct req_tlv)), .active = enable, - .link_idx = mvif->idx, + .link_idx = mvif->link_idx, }, }; struct { @@ -1191,7 +1191,7 @@ int mt76_connac_mcu_uni_add_dev(struct mt76_phy *phy, .bmc_tx_wlan_idx = cpu_to_le16(wcid->idx), .sta_idx = cpu_to_le16(wcid->idx), .conn_state = 1, - .link_idx = mvif->idx, + .link_idx = mvif->link_idx, }, }; int err, idx, cmd, len; diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/main.c b/drivers/net/wireless/mediatek/mt76/mt7925/main.c index 8dba17c8697c..4f35c2f16d0d 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7925/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7925/main.c @@ -360,10 +360,15 @@ static int mt7925_mac_link_bss_add(struct mt792x_dev *dev, struct mt76_txq *mtxq; int idx, ret = 0; - mconf->mt76.idx = __ffs64(~dev->mt76.vif_mask); - if (mconf->mt76.idx >= MT792x_MAX_INTERFACES) { - ret = -ENOSPC; - goto out; + if (vif->type == NL80211_IFTYPE_P2P_DEVICE) { + mconf->mt76.idx = MT792x_MAX_INTERFACES; + } else { + mconf->mt76.idx = __ffs64(~dev->mt76.vif_mask); + + if (mconf->mt76.idx >= MT792x_MAX_INTERFACES) { + ret = -ENOSPC; + goto out; + } } mconf->mt76.omac_idx = ieee80211_vif_is_mld(vif) ? @@ -371,6 +376,7 @@ static int mt7925_mac_link_bss_add(struct mt792x_dev *dev, mconf->mt76.band_idx = 0xff; mconf->mt76.wmm_idx = ieee80211_vif_is_mld(vif) ? 0 : mconf->mt76.idx % MT76_CONNAC_MAX_WMM_SETS; + mconf->mt76.link_idx = hweight16(mvif->valid_links); if (mvif->phy->mt76->chandef.chan->band != NL80211_BAND_2GHZ) mconf->mt76.basic_rates_idx = MT792x_BASIC_RATES_TBL + 4; From patchwork Wed Mar 5 00:08:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Wang X-Patchwork-Id: 14001667 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2C2A6C282D3 for ; Wed, 5 Mar 2025 00:09:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=U9eJeXiBH2lgfUF9NdCY1XMR3UJufv/lPn99+6l/Nkk=; b=XBh7t20EGpu1M7vezIir10ICPv wJPuR/JNhi1HQtTSZ8t9eMGuCAAsyDFTjlaqups1BW1ZUJv6k836lrX6AOlCNWDxKwZ2Qu3FC+3CJ /3ai0GfxzsOiDSlxyg4TJ2UmC6Ormoh4D7GriARsXDy2yF/hMyoswWMjoujj5NCQ8lOZrSdh9g0rT 50PgTOrG2z1P/jbilb7m/hiSpfzh+xbqdNIRLCSl6FpRbiEULyKQuinhezyFWf1DNy4p6+JKe8F4b vZ0O9L+vK+BMGgd8c8xxWeDil9i4ByQSZDfpi7+RVqKKS5BA3Hxtvh2md/hM3268DWLM7UhRUrk9A HxAKFZBg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tpcJv-00000006b3Q-1O9x; Wed, 05 Mar 2025 00:09:07 +0000 Received: from mail-oi1-f173.google.com ([209.85.167.173]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tpcJt-00000006b26-0yeo for linux-mediatek@lists.infradead.org; Wed, 05 Mar 2025 00:09:06 +0000 Received: by mail-oi1-f173.google.com with SMTP id 5614622812f47-3f3ffe06107so3777170b6e.2 for ; Tue, 04 Mar 2025 16:09:05 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741133344; x=1741738144; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=U9eJeXiBH2lgfUF9NdCY1XMR3UJufv/lPn99+6l/Nkk=; b=c4LFPXTIKiFa+qNcKuUwc1va9j4yH+7uA+m4BWMnG4uT2/UMLM9OMKZsjbb4rnvoO7 qPNTYeVTtZYxwVicPrpKEEd10WYYTWWWfwHYSz+X2/9XBrf8aigQzK25OREwBhL69ufN wH91JXH6sZ65BHQXxs93/VaroLxA8h6UGdjgAwDU87nixgLwPZm7ObjVbuLYvqwapzvu F5SFW9mKtIdICjZGAEKt0XOm5JM+Xk08xjkeYEIDZUJn0z6UP/dibi4vQRkX7Hz9hB5q lorWO+Iv2/NPPL9dcQDba2A63ydYez7zkHT68iV9Pl7yjDdzQA1ASKyv479fv2PxicMB 0g/g== X-Forwarded-Encrypted: i=1; AJvYcCXbdvfr963pG4JM2OTHymn+n8cpW85PKFtTkPc8wALqckY12M1g9LGGJQ4J1ANktID/WZJjOIGBNVG28xiKHQ==@lists.infradead.org X-Gm-Message-State: AOJu0YzEzj/eOLiks2j3NVP+lTmaygFOIUoeCm+ta6WL6RDfXhdZ10xZ pFmqn4JsD2DGtjXNkTsapdGvDMa9eiW96cpUTaKCxf4NaQSq4qhSYM5lrjpC X-Gm-Gg: ASbGnct0xF57OL7voRacN6IhTYyltGgETdHxbCBIyUz+vf5u0c07APNnLklNrWSWKlJ EzwAv5hoWxnESzwJCEYD9VpmJ+Et78S7Q3rxSoZLgcOLA+C8zrXrUXL3DE4T87+yJ1t85jgn9rR I8vuDZjB0cN6FUttXD13tjapJiL1NgXF2rZt+rU8f/U3WNYo73JcnouY8s5ayDM7Euj+7QehHMb TOaHY+AQ68gKRnK1IucgoGHYAG0UIkDhABZe0xhi8oXjmkwCFV9v9f9ooZcFInCi44600pNiXYp NRduHPunOtQ2nrwhSkyNImlI/vNMPhR4VzKLsnWzkCDFf2dsf9YLuyI2jzYAqA== X-Google-Smtp-Source: AGHT+IEwvVhbQJMEaGdrFKMtOxiiJCKto8VYM3jUlbmpjF3jkBrGvZ4szLZ7/dmzI2XnhwPbqNTrlg== X-Received: by 2002:a05:6808:1a1b:b0:3f4:af3:74a5 with SMTP id 5614622812f47-3f6831755e7mr500177b6e.21.1741133344379; Tue, 04 Mar 2025 16:09:04 -0800 (PST) Received: from sean-ThinkPad-T450s.lan ([207.191.35.252]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3f67ee8f479sm299985b6e.40.2025.03.04.16.09.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Mar 2025 16:09:03 -0800 (PST) From: sean.wang@kernel.org To: nbd@nbd.name, lorenzo.bianconi@redhat.com Cc: sean.wang@mediatek.com, deren.wu@mediatek.com, mingyen.hsieh@mediatek.com, linux-wireless@vger.kernel.org, linux-mediatek@lists.infradead.org, stable@vger.kernel.org, Caleb Jorden Subject: [PATCH v5 3/6] wifi: mt76: mt7925: fix the wrong simultaneous cap for MLO Date: Tue, 4 Mar 2025 16:08:48 -0800 Message-Id: <20250305000851.493671-3-sean.wang@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250305000851.493671-1-sean.wang@kernel.org> References: <20250305000851.493671-1-sean.wang@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250304_160905_274381_2493ADF4 X-CRM114-Status: GOOD ( 11.06 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org From: Ming Yen Hsieh The mt7925 chip is only support a single radio, so the maximum number of simultaneous should be 0. Fixes: 86c051f2c418 ("wifi: mt76: mt7925: enabling MLO when the firmware supports it") Cc: stable@vger.kernel.org Co-developed-by: Sean Wang Signed-off-by: Sean Wang Tested-by: Caleb Jorden Signed-off-by: Ming Yen Hsieh --- v2: 1) generate the patch based on the latest mt76 tree 2) update the commit message v3: 1) fixed the merge conflict v4: 1) add tested-by tag v5: 1) update co-developed-by tag 2) rebase to wireless.git --- drivers/net/wireless/mediatek/mt76/mt7925/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/main.c b/drivers/net/wireless/mediatek/mt76/mt7925/main.c index 4f35c2f16d0d..604f771af68e 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7925/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7925/main.c @@ -256,7 +256,7 @@ int mt7925_init_mlo_caps(struct mt792x_phy *phy) ext_capab[0].eml_capabilities = phy->eml_cap; ext_capab[0].mld_capa_and_ops = - u16_encode_bits(1, IEEE80211_MLD_CAP_OP_MAX_SIMUL_LINKS); + u16_encode_bits(0, IEEE80211_MLD_CAP_OP_MAX_SIMUL_LINKS); wiphy->flags |= WIPHY_FLAG_SUPPORTS_MLO; wiphy->iftype_ext_capab = ext_capab; From patchwork Wed Mar 5 00:08:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Wang X-Patchwork-Id: 14001668 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 96411C021B8 for ; Wed, 5 Mar 2025 00:09:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=5KmCyNELJJemcnmUYppjmKqqpaAMRTnfnaa6QXbepoU=; b=tDCz32xHWJj+o387YpaE0NiiC0 VgO0Q67WT5G4/83bpiPtbs5b2U5gnL+v0m1FRPr9uHdiZcZ2bhugvMK+weIBx2x9sDsytFppZ23sP /PxcAR6vq/27AmYjGJPE9/ezrhFm8qi6WGBAZqWEyt1vEabm5AxiIo/kQ8c1HPyJEOz4keMbGJy++ wT7dMF2BvrrQdQ3r2mPzcGKRO1nyNqvwVsegBczjVV19tulPASNh8amKSvydYW0x+3ilKWFTDiAgO FVOSv0sMfEQeMdfPo5SGcD/fe4FYvR2098kCDlys2eRIWyFm7aO5XhmSlaFUFsovmzvofpzN66shY mmMSATUA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tpcK0-00000006b5T-2inT; Wed, 05 Mar 2025 00:09:12 +0000 Received: from mail-oi1-f176.google.com ([209.85.167.176]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tpcJy-00000006b4h-17FX for linux-mediatek@lists.infradead.org; Wed, 05 Mar 2025 00:09:11 +0000 Received: by mail-oi1-f176.google.com with SMTP id 5614622812f47-3f6740963b4so1268840b6e.3 for ; Tue, 04 Mar 2025 16:09:10 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741133349; x=1741738149; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5KmCyNELJJemcnmUYppjmKqqpaAMRTnfnaa6QXbepoU=; b=rCafN7u9fXRaht4KVDBJb+wfCJ4w80hstqnnxvC1p/9I31f+NWQdtZcCZUpu2ngEdG W+0FJCnkB/TFS6wwrXAV17w3M3ROP4GCktrooiCd0Y9Y8cTJjDBsMEsht0ONFrUvdGM7 jIvVSClEFlcQ2EG1wx5rnzEWF8PXzAnqxlOKJ8N1OmmzQq8d34A0EjFRG40o4JiQNFtr aEwZi7ZKTh2NF6h8D+Vfdr+CXKFogpHB/J+Pbh3P45LwGf62kFsO6C86S8V5sAtFaeLY HXxJuW86JqbMrAVo2kZTXo+5z24J/NSZm4IpPJczCAj2YeEronK9MYfagc33rdt2g98W FFsQ== X-Forwarded-Encrypted: i=1; AJvYcCXoqIIP/2eVk/umeTNcruQXShQp++4wh+9zxD0IjRBoff59PAqvUtJi4MR+KrH9hEPEu2d+dnort9bJAy0Lgw==@lists.infradead.org X-Gm-Message-State: AOJu0Yz3nLf/Z568xZ560VUWkSK/UvvWqypTeldJvAELqzo6tGEdpChI Q83tO92FFQw87LF1IRLoco9xw+/lzEsmFVLjNF/VM7wM9zv04NzT X-Gm-Gg: ASbGnctc9AQ9FBLcKtEIAQgQOu6nZJUK61fOjPH/6HiFoVv9PdjDj7J800VknSJ15YD Yq5PQwf2r9/E08FRbu+ViXcDMuR9/W/18xhVvD9aeCb/qv6sdGoubwyvcizGYjYT/EYQlmuOUHa s0GneoyKUZJ/8bMDasdARGi0Ndq2QjYxwbrqdw4r1pC4BLIwmvujrb3+GMzlYBNDt7KF2z8wsI+ 6jP8GexVQ6z1RPPdbBbFHTFg84r5BA7PMJarVK0dKn0AxT67X/aY0bYjPK87h0FaqEW1J/oYso2 lHttJydCNwa9YIGAp7KY9jXe0FvLX0OHgOf32zBv6+JG0tJSetfgEqYAIyV9ZQ== X-Google-Smtp-Source: AGHT+IHWNG2Yylm4c0/Jpo3YYVB+/tZtr02EkH0F6DG8CID8z8g+0y3pM7nC7o413CB1rGVMvbBteA== X-Received: by 2002:a05:6808:1825:b0:3f6:786c:cb9a with SMTP id 5614622812f47-3f6831f35e0mr485321b6e.37.1741133349420; Tue, 04 Mar 2025 16:09:09 -0800 (PST) Received: from sean-ThinkPad-T450s.lan ([207.191.35.252]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3f67ee8f479sm299985b6e.40.2025.03.04.16.09.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Mar 2025 16:09:07 -0800 (PST) From: sean.wang@kernel.org To: nbd@nbd.name, lorenzo.bianconi@redhat.com Cc: sean.wang@mediatek.com, deren.wu@mediatek.com, mingyen.hsieh@mediatek.com, linux-wireless@vger.kernel.org, linux-mediatek@lists.infradead.org, stable@vger.kernel.org, Caleb Jorden Subject: [PATCH v5 4/6] wifi: mt76: mt7925: adjust rm BSS flow to prevent next connection failure Date: Tue, 4 Mar 2025 16:08:49 -0800 Message-Id: <20250305000851.493671-4-sean.wang@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250305000851.493671-1-sean.wang@kernel.org> References: <20250305000851.493671-1-sean.wang@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250304_160910_305792_2A8DC3DA X-CRM114-Status: GOOD ( 13.28 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org From: Ming Yen Hsieh Removing BSS without removing STAREC first will cause firmware abnormal and next connection fail. Fixes: f8797298565e ("wifi: mt76: mt7925: Cleanup MLO settings post-disconnection") Cc: stable@vger.kernel.org Co-developed-by: Sean Wang Signed-off-by: Sean Wang Tested-by: Caleb Jorden Signed-off-by: Ming Yen Hsieh --- v2: 1) generate the patch based on the latest mt76 tree 2) update the commit message v3: 1) fixed the merge conflict v4: 1) add tested-by tag v5: 1) fixed mt7925/main.c:1245:28: warning: unused variable "mvif" [-Wunused-variable] 2) update co-developed-by tag 3) rebase to wireless.git --- .../net/wireless/mediatek/mt76/mt7925/main.c | 44 +++++++++++++++---- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/main.c b/drivers/net/wireless/mediatek/mt76/mt7925/main.c index 604f771af68e..a7464839318e 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7925/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7925/main.c @@ -1155,7 +1155,12 @@ static void mt7925_mac_link_sta_remove(struct mt76_dev *mdev, struct mt792x_bss_conf *mconf; mconf = mt792x_link_conf_to_mconf(link_conf); - mt792x_mac_link_bss_remove(dev, mconf, mlink); + + if (ieee80211_vif_is_mld(vif)) + mt792x_mac_link_bss_remove(dev, mconf, mlink); + else + mt7925_mcu_add_bss_info(&dev->phy, mconf->mt76.ctx, link_conf, + link_sta, false); } spin_lock_bh(&mdev->sta_poll_lock); @@ -1175,6 +1180,31 @@ mt7925_mac_sta_remove_links(struct mt792x_dev *dev, struct ieee80211_vif *vif, struct mt76_wcid *wcid; unsigned int link_id; + /* clean up bss before starec */ + for_each_set_bit(link_id, &old_links, IEEE80211_MLD_MAX_NUM_LINKS) { + struct ieee80211_link_sta *link_sta; + struct ieee80211_bss_conf *link_conf; + struct mt792x_bss_conf *mconf; + struct mt792x_link_sta *mlink; + + link_sta = mt792x_sta_to_link_sta(vif, sta, link_id); + if (!link_sta) + continue; + + mlink = mt792x_sta_to_link(msta, link_id); + if (!mlink) + continue; + + link_conf = mt792x_vif_to_bss_conf(vif, link_id); + if (!link_conf) + continue; + + mconf = mt792x_link_conf_to_mconf(link_conf); + + mt7925_mcu_add_bss_info(&dev->phy, mconf->mt76.ctx, link_conf, + link_sta, false); + } + for_each_set_bit(link_id, &old_links, IEEE80211_MLD_MAX_NUM_LINKS) { struct ieee80211_link_sta *link_sta; struct mt792x_link_sta *mlink; @@ -1242,14 +1272,10 @@ void mt7925_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif, mt7925_mac_sta_remove_links(dev, vif, sta, rem); - if (ieee80211_vif_is_mld(vif)) { - mt7925_mcu_set_dbdc(&dev->mphy, false); - - /* recovery omac address for the legacy interface */ - memcpy(dev_req.tlv.omac_addr, vif->addr, ETH_ALEN); - mt76_mcu_send_msg(mdev, MCU_UNI_CMD(DEV_INFO_UPDATE), - &dev_req, sizeof(dev_req), true); - } + /* recovery omac address for the legacy interface */ + memcpy(dev_req.tlv.omac_addr, vif->addr, ETH_ALEN); + mt76_mcu_send_msg(mdev, MCU_UNI_CMD(DEV_INFO_UPDATE), + &dev_req, sizeof(dev_req), true); if (vif->type == NL80211_IFTYPE_STATION) { struct mt792x_vif *mvif = (struct mt792x_vif *)vif->drv_priv; From patchwork Wed Mar 5 00:08:50 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Wang X-Patchwork-Id: 14001669 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DFAACC021B8 for ; Wed, 5 Mar 2025 00:09:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=DZq1QVFR2Y4L6SmWL/g11Hjl8Ghbc2LyxG/QBtnz4Ek=; b=z3XucVOZKIgAcY2ctoBF/IbQ+o dEHXC9Pp9Zm4kEknUGUZhfR/Ua4gqRYzA5lMeuIe6eSJQK4vUOeXr0qwZ3gAGbnPU4VhHWw6gW/6l A1HxW/Rl1F6PeOcK9sWQi41B+UoBWQ9ElTGVLjK0ZXFfd95IwdHaEIrTWx1P1MOTV8FNtT2bnf7Ph jt/xyy/4yL/mwsN313pr/N9280ZBx+SheF9XKX61882Dk1CEmw5JtzPTZvTba51/YiIt54mZLZeoJ jOgbBClLR4gxkkxPUCU0tpy6nuju8CkPmWDJD1bbVwXUr3794QLmeDff4W35J0rvhqBDpWUpOEmKz Z1qD+e8w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tpcK5-00000006b6u-40c3; Wed, 05 Mar 2025 00:09:17 +0000 Received: from mail-oi1-f174.google.com ([209.85.167.174]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tpcK3-00000006b6K-1t7N for linux-mediatek@lists.infradead.org; Wed, 05 Mar 2025 00:09:16 +0000 Received: by mail-oi1-f174.google.com with SMTP id 5614622812f47-3f682bb0d77so151720b6e.1 for ; Tue, 04 Mar 2025 16:09:15 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741133355; x=1741738155; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DZq1QVFR2Y4L6SmWL/g11Hjl8Ghbc2LyxG/QBtnz4Ek=; b=updgBk40UrWARMIFug5aZZWMukJRnhdB1RelfiDUX5wlnaolmE1u8C7jX2Ia3oTP2/ 9DNwrcGAmLeQGprYcHDaXfsEeioZQoX6LEb3ULydtznEfFQfViiVMql0ssJOYyvQNrtM jWHQCQDe+26+eJ8EssiK6Lxf+cTpH/GW52qkfzzJY//qMu0SLqEj2N4y9QgCIWEC4zeD IYpvqlKSoR8FYq0Ev2pk168d9o6oomu96BB3Qd5U6u5N8ekfKmHgmYhg86jRJiNUUa+c nJfS8c2cjUZ6L8f69EdPXyPmLyRD4Skn+gn7F5IFGmTRQhZSMBE0WcV48UMHnzm81TNH Hhdw== X-Forwarded-Encrypted: i=1; AJvYcCVNWLR7KWEpoVnz7fUTy7u8oyQa8WcrJLbWLoeNRVpuKTKxBcEOXEjemNppzoZxWdxq3OWwEtyERgESxZ0kNQ==@lists.infradead.org X-Gm-Message-State: AOJu0YzypQpjudxQFIfI0kniEMuQCE+0fuE8moAfqnNdY/HaD5SJtvTj ETIK7VMB3JUTbr9CG5Bh0xpPo5r+5+60l/K6g8vLVK48Jak83rNByRwZAlMB X-Gm-Gg: ASbGnctohqDJATKKijSMxlusc4YXScpW/CaAot27pBCEe0+/NCFftKLMEvUbvzJa7DC yn4DCvB93R0H3GJid13Jmf5qkqGQXoAyBeblyHv2QNUD30axgZR4A5wtYAB56NQrc/NdUnLByPR aANO1UuT+N0S4VFbCG4CHo0BL1/+7KMRqIGt9Ar91+JH/ACp1LxlEMtWc6dbITc5Danl6qLKohi F72dJI8UWjAyoNzOXrxVrYiEx3gNPUrcpw4pv0IVeJvWn644Wa94hl+s0zfbQYG0Tjd+WgzqRlJ fbPGmgVBWxqa4mcvWk9a2TjOfd3z3AFQZR8nW6dCt2SYAk5T+Y43wRJElsonDQ== X-Google-Smtp-Source: AGHT+IHRlYZehCnayI0/SSWxl0V/woi03L0dMl7UT9bDMYd2zx2ye4bxdeydVicDxirQtf76987GeQ== X-Received: by 2002:a05:6808:38c5:b0:3ec:bf55:e33f with SMTP id 5614622812f47-3f682d02020mr776039b6e.9.1741133354724; Tue, 04 Mar 2025 16:09:14 -0800 (PST) Received: from sean-ThinkPad-T450s.lan ([207.191.35.252]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3f67ee8f479sm299985b6e.40.2025.03.04.16.09.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Mar 2025 16:09:13 -0800 (PST) From: sean.wang@kernel.org To: nbd@nbd.name, lorenzo.bianconi@redhat.com Cc: sean.wang@mediatek.com, deren.wu@mediatek.com, mingyen.hsieh@mediatek.com, linux-wireless@vger.kernel.org, linux-mediatek@lists.infradead.org, stable@vger.kernel.org, Caleb Jorden Subject: [PATCH v5 5/6] wifi: mt76: mt7925: integrate *mlo_sta_cmd and *sta_cmd Date: Tue, 4 Mar 2025 16:08:50 -0800 Message-Id: <20250305000851.493671-5-sean.wang@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250305000851.493671-1-sean.wang@kernel.org> References: <20250305000851.493671-1-sean.wang@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250304_160915_492771_EF086EE9 X-CRM114-Status: GOOD ( 12.29 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org From: Ming Yen Hsieh Integrate *mlo_sta_cmd and *sta_cmd for the MLO firmware. Fixes: 86c051f2c418 ("wifi: mt76: mt7925: enabling MLO when the firmware supports it") Cc: stable@vger.kernel.org Co-developed-by: Sean Wang Signed-off-by: Sean Wang Tested-by: Caleb Jorden Signed-off-by: Ming Yen Hsieh --- v2: 1) generate the patch based on the latest mt76 tree 2) update the commit message v3: 1) fixed the merge conflict v4: 1) added tested-by tag 2) removed the unrelated files v5: 1) update co-developed-by tag 2) rebase to wireless.git --- .../net/wireless/mediatek/mt76/mt7925/mcu.c | 64 ++----------------- 1 file changed, 4 insertions(+), 60 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7925/mcu.c index 4c133200c70b..34e7165d1a0f 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7925/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7925/mcu.c @@ -1820,49 +1820,6 @@ mt7925_mcu_sta_mld_tlv(struct sk_buff *skb, } } -static int -mt7925_mcu_sta_cmd(struct mt76_phy *phy, - struct mt76_sta_cmd_info *info) -{ - struct mt76_vif_link *mvif = (struct mt76_vif_link *)info->vif->drv_priv; - struct mt76_dev *dev = phy->dev; - struct sk_buff *skb; - int conn_state; - - skb = __mt76_connac_mcu_alloc_sta_req(dev, mvif, info->wcid, - MT7925_STA_UPDATE_MAX_SIZE); - if (IS_ERR(skb)) - return PTR_ERR(skb); - - conn_state = info->enable ? CONN_STATE_PORT_SECURE : - CONN_STATE_DISCONNECT; - if (info->link_sta) - mt76_connac_mcu_sta_basic_tlv(dev, skb, info->link_conf, - info->link_sta, - conn_state, info->newly); - if (info->link_sta && info->enable) { - mt7925_mcu_sta_phy_tlv(skb, info->vif, info->link_sta); - mt7925_mcu_sta_ht_tlv(skb, info->link_sta); - mt7925_mcu_sta_vht_tlv(skb, info->link_sta); - mt76_connac_mcu_sta_uapsd(skb, info->vif, info->link_sta->sta); - mt7925_mcu_sta_amsdu_tlv(skb, info->vif, info->link_sta); - mt7925_mcu_sta_he_tlv(skb, info->link_sta); - mt7925_mcu_sta_he_6g_tlv(skb, info->link_sta); - mt7925_mcu_sta_eht_tlv(skb, info->link_sta); - mt7925_mcu_sta_rate_ctrl_tlv(skb, info->vif, - info->link_sta); - mt7925_mcu_sta_state_v2_tlv(phy, skb, info->link_sta, - info->vif, info->rcpi, - info->state); - mt7925_mcu_sta_mld_tlv(skb, info->vif, info->link_sta->sta); - } - - if (info->enable) - mt7925_mcu_sta_hdr_trans_tlv(skb, info->vif, info->link_sta); - - return mt76_mcu_skb_send_msg(dev, skb, info->cmd, true); -} - static void mt7925_mcu_sta_remove_tlv(struct sk_buff *skb) { @@ -1875,8 +1832,8 @@ mt7925_mcu_sta_remove_tlv(struct sk_buff *skb) } static int -mt7925_mcu_mlo_sta_cmd(struct mt76_phy *phy, - struct mt76_sta_cmd_info *info) +mt7925_mcu_sta_cmd(struct mt76_phy *phy, + struct mt76_sta_cmd_info *info) { struct mt792x_vif *mvif = (struct mt792x_vif *)info->vif->drv_priv; struct mt76_dev *dev = phy->dev; @@ -1890,12 +1847,10 @@ mt7925_mcu_mlo_sta_cmd(struct mt76_phy *phy, if (IS_ERR(skb)) return PTR_ERR(skb); - if (info->enable) + if (info->enable && info->link_sta) { mt76_connac_mcu_sta_basic_tlv(dev, skb, info->link_conf, info->link_sta, info->enable, info->newly); - - if (info->enable && info->link_sta) { mt7925_mcu_sta_phy_tlv(skb, info->vif, info->link_sta); mt7925_mcu_sta_ht_tlv(skb, info->link_sta); mt7925_mcu_sta_vht_tlv(skb, info->link_sta); @@ -1946,7 +1901,6 @@ int mt7925_mcu_sta_update(struct mt792x_dev *dev, }; struct mt792x_sta *msta; struct mt792x_link_sta *mlink; - int err; if (link_sta) { msta = (struct mt792x_sta *)link_sta->sta->drv_priv; @@ -1954,17 +1908,7 @@ int mt7925_mcu_sta_update(struct mt792x_dev *dev, } info.wcid = link_sta ? &mlink->wcid : &mvif->sta.deflink.wcid; - if (link_sta) - info.newly = state != MT76_STA_INFO_STATE_ASSOC; - else - info.newly = state == MT76_STA_INFO_STATE_ASSOC ? false : true; - - if (ieee80211_vif_is_mld(vif)) - err = mt7925_mcu_mlo_sta_cmd(&dev->mphy, &info); - else - err = mt7925_mcu_sta_cmd(&dev->mphy, &info); - - return err; + return mt7925_mcu_sta_cmd(&dev->mphy, &info); } int mt7925_mcu_set_beacon_filter(struct mt792x_dev *dev, From patchwork Wed Mar 5 00:08:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Wang X-Patchwork-Id: 14001670 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 14F98C021B8 for ; Wed, 5 Mar 2025 00:09:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=wdMXQ8DVuTg7ZnWdsQQ0oBojxJey5AseHHD1u1BZ0G4=; b=GtaCJ5WLhorUgWYIus17VZ4kKO 1fVpJXptDLgxO2hcA7bIkpey3fFoUp/ErzG843lVdXFzOv3Hu96fmJCvrVCOBfSou5IxB31OWKOmB UgBh1YlBxyBNnhS9GUSq4wN/JU5Vh4OGM3vCIhi6ayYHBF9lX3z/0YLXY+sgFs8H6tARF1bCTLaZ7 S+YVuKZVtkz3evAZzKAEqd4oc/wAg7052KYzyexsi6Hj5CpNDHnXWlcqybZtmg1HqUKxoZB0oTbCY fJNFYoAyQ+QXnzyEF6k9jm8fwF6/shDMBF2yziy3W+tdoUc48gQrJKvSuiR+GqZl8F7Q6qc8vmPO4 kzxDUXnA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tpcKA-00000006b8N-14Oc; Wed, 05 Mar 2025 00:09:22 +0000 Received: from mail-oo1-f46.google.com ([209.85.161.46]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tpcK8-00000006b7f-3Ngg for linux-mediatek@lists.infradead.org; Wed, 05 Mar 2025 00:09:21 +0000 Received: by mail-oo1-f46.google.com with SMTP id 006d021491bc7-5fea43da18aso1617469eaf.1 for ; Tue, 04 Mar 2025 16:09:20 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741133360; x=1741738160; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wdMXQ8DVuTg7ZnWdsQQ0oBojxJey5AseHHD1u1BZ0G4=; b=jtLSv7a8+gYpk5lqRAUkob79Oxx46MNqAoZJGHq5p68/d84TUuMz25FLtQflZX6Rgu HMZehV4iioylzkzABEwc3A7idp+DTWBBrVhcEN45CDbK8G2OhePryDRr6fgHw+pjtlCB B75kDm4xXiJW8ZgTyp1nfZVOanXw2ajNcgWWhvWOrNG76/zHAzC8TM5+6juyC+sFukz3 HR1gJisy0qtZdJ1Ews7Y7w3s553LVNzeVoSDOMy4Smd0Atf+z3Ug3iVqVh/w+iL//Cid fzLDowT79KGA+/X8NDB8i4dr2REnYRbk6sE0C1W1uAHNqd5YbZ4/W35hWSfiOkOVeXMz Wjmg== X-Forwarded-Encrypted: i=1; AJvYcCUkfqV3M62pXSVw9j2Nby8TmKZS+jLuaqKqWnZrGlaLrvJH/a/Na0u+quOfRau888BjQTzDpi2EVj0nkBDc9Q==@lists.infradead.org X-Gm-Message-State: AOJu0YyYGR1sR3Khs13Z3sJwkSA6C3ENvLyp8pdWGniHJYoA5A04doKQ AuzMrs4WzXaWdzAWJkhwpxb5VOoGcCeHWs5rN3ngJu+IKiiCjvKd X-Gm-Gg: ASbGncu2uE0TfLROoNF9PzXZ/giUz1oUghVPi4gTMjvN6S1+8r5DEUW6+M85OavrVl1 cYucoVKPIDMyIcIOb7fTWC6Yu9EfEzZJ4NPKrFSDJQ2vNTH6EaplPhoUSuvni1Dc8kljXyCUx4l g0hqhhC1ZL6nd8uICJ3caW5OtFaBIgdpDVW/VyKCDhTOLVzqGsBvIa263PlTPQBs8XW1byrgXyP BCLPCkQJtCgO0kydePIMAm4x9xMnCgDqmr7zroK9WSpgyj5wJ7XvTym3cJqxg3adpSaXa6ITEN4 raPx/xInZAg9sBiGt63ApQ2tp52DBx4Vw2m5q1W8Flg9bU4YS4w5wa7/G4uh4A== X-Google-Smtp-Source: AGHT+IFahbflM/2sxhPc2hoXIoRKE+629RaJj0eVCjQn7LPrXNp8XwvlKkE+YUuntxdL8oWJdNV5PA== X-Received: by 2002:a05:6808:1306:b0:3f4:10eb:7fce with SMTP id 5614622812f47-3f683229a3fmr564639b6e.37.1741133359660; Tue, 04 Mar 2025 16:09:19 -0800 (PST) Received: from sean-ThinkPad-T450s.lan ([207.191.35.252]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3f67ee8f479sm299985b6e.40.2025.03.04.16.09.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Mar 2025 16:09:17 -0800 (PST) From: sean.wang@kernel.org To: nbd@nbd.name, lorenzo.bianconi@redhat.com Cc: sean.wang@mediatek.com, deren.wu@mediatek.com, mingyen.hsieh@mediatek.com, linux-wireless@vger.kernel.org, linux-mediatek@lists.infradead.org, stable@vger.kernel.org, Caleb Jorden Subject: [PATCH v5 6/6] wifi: mt76: mt7925: update the power-saving flow Date: Tue, 4 Mar 2025 16:08:51 -0800 Message-Id: <20250305000851.493671-6-sean.wang@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250305000851.493671-1-sean.wang@kernel.org> References: <20250305000851.493671-1-sean.wang@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250304_160920_848344_7F067063 X-CRM114-Status: GOOD ( 17.73 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org From: Ming Yen Hsieh After joining MLO, ensure that all links are setup before enabling power-saving. Fixes: 86c051f2c418 ("wifi: mt76: mt7925: enabling MLO when the firmware supports it") Cc: stable@vger.kernel.org Co-developed-by: Sean Wang Signed-off-by: Sean Wang Tested-by: Caleb Jorden Signed-off-by: Ming Yen Hsieh --- v2: 1) generate the patch based on the latest mt76 tree 2) update the commit message v3: 1) fixed the merge conflict v4: 1) added tested-by tag v5: 1) fixed mt7925/main.c:1245:28: warning: unused variable "mvif" [-Wunused-variable] 2) update co-developed-by tag 3) rebase to wireless.git --- .../net/wireless/mediatek/mt76/mt7925/init.c | 1 + .../net/wireless/mediatek/mt76/mt7925/main.c | 67 ++++++++++++++++--- .../wireless/mediatek/mt76/mt7925/mt7925.h | 1 + drivers/net/wireless/mediatek/mt76/mt792x.h | 9 +++ 4 files changed, 69 insertions(+), 9 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/init.c b/drivers/net/wireless/mediatek/mt76/mt7925/init.c index f41ca4248497..a2bb36dab231 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7925/init.c +++ b/drivers/net/wireless/mediatek/mt76/mt7925/init.c @@ -244,6 +244,7 @@ int mt7925_register_device(struct mt792x_dev *dev) dev->mt76.tx_worker.fn = mt792x_tx_worker; INIT_DELAYED_WORK(&dev->pm.ps_work, mt792x_pm_power_save_work); + INIT_DELAYED_WORK(&dev->mlo_pm_work, mt7925_mlo_pm_work); INIT_WORK(&dev->pm.wake_work, mt792x_pm_wake_work); spin_lock_init(&dev->pm.wake.lock); mutex_init(&dev->pm.mutex); diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/main.c b/drivers/net/wireless/mediatek/mt76/mt7925/main.c index a7464839318e..aea0151d25d6 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7925/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7925/main.c @@ -427,6 +427,7 @@ mt7925_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) mvif->bss_conf.vif = mvif; mvif->sta.vif = mvif; mvif->deflink_id = IEEE80211_LINK_UNSPECIFIED; + mvif->mlo_pm_state = MT792x_MLO_LINK_DISASSOC; ret = mt7925_mac_link_bss_add(dev, &vif->bss_conf, &mvif->sta.deflink); if (ret < 0) @@ -1242,6 +1243,8 @@ void mt7925_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif, { struct mt792x_dev *dev = container_of(mdev, struct mt792x_dev, mt76); struct mt792x_sta *msta = (struct mt792x_sta *)sta->drv_priv; + struct mt792x_vif *mvif = (struct mt792x_vif *)vif->drv_priv; + struct { struct { u8 omac_idx; @@ -1283,6 +1286,8 @@ void mt7925_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif, mvif->wep_sta = NULL; ewma_rssi_init(&mvif->bss_conf.rssi); } + + mvif->mlo_pm_state = MT792x_MLO_LINK_DISASSOC; } EXPORT_SYMBOL_GPL(mt7925_mac_sta_remove); @@ -1354,6 +1359,38 @@ mt7925_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif, return ret; } +static void +mt7925_mlo_pm_iter(void *priv, u8 *mac, struct ieee80211_vif *vif) +{ + struct mt792x_dev *dev = priv; + struct mt792x_vif *mvif = (struct mt792x_vif *)vif->drv_priv; + unsigned long valid = ieee80211_vif_is_mld(vif) ? + mvif->valid_links : BIT(0); + struct ieee80211_bss_conf *bss_conf; + int i; + + if (mvif->mlo_pm_state != MT792x_MLO_CHANGED_PS) + return; + + mt792x_mutex_acquire(dev); + for_each_set_bit(i, &valid, IEEE80211_MLD_MAX_NUM_LINKS) { + bss_conf = mt792x_vif_to_bss_conf(vif, i); + mt7925_mcu_uni_bss_ps(dev, bss_conf); + } + mt792x_mutex_release(dev); +} + +void mt7925_mlo_pm_work(struct work_struct *work) +{ + struct mt792x_dev *dev = container_of(work, struct mt792x_dev, + mlo_pm_work.work); + struct ieee80211_hw *hw = mt76_hw(dev); + + ieee80211_iterate_active_interfaces(hw, + IEEE80211_IFACE_ITER_RESUME_ALL, + mt7925_mlo_pm_iter, dev); +} + static bool is_valid_alpha2(const char *alpha2) { if (!alpha2) @@ -1903,6 +1940,9 @@ static void mt7925_vif_cfg_changed(struct ieee80211_hw *hw, mt7925_mcu_sta_update(dev, NULL, vif, true, MT76_STA_INFO_STATE_ASSOC); mt7925_mcu_set_beacon_filter(dev, vif, vif->cfg.assoc); + + if (ieee80211_vif_is_mld(vif)) + mvif->mlo_pm_state = MT792x_MLO_LINK_ASSOC; } if (changed & BSS_CHANGED_ARP_FILTER) { @@ -1913,9 +1953,19 @@ static void mt7925_vif_cfg_changed(struct ieee80211_hw *hw, } if (changed & BSS_CHANGED_PS) { - for_each_set_bit(i, &valid, IEEE80211_MLD_MAX_NUM_LINKS) { - bss_conf = mt792x_vif_to_bss_conf(vif, i); + if (hweight16(mvif->valid_links) < 2) { + /* legacy */ + bss_conf = &vif->bss_conf; mt7925_mcu_uni_bss_ps(dev, bss_conf); + } else { + if (mvif->mlo_pm_state == MT792x_MLO_LINK_ASSOC) { + mvif->mlo_pm_state = MT792x_MLO_CHANGED_PS_PENDING; + } else if (mvif->mlo_pm_state == MT792x_MLO_CHANGED_PS) { + for_each_set_bit(i, &valid, IEEE80211_MLD_MAX_NUM_LINKS) { + bss_conf = mt792x_vif_to_bss_conf(vif, i); + mt7925_mcu_uni_bss_ps(dev, bss_conf); + } + } } } @@ -1966,11 +2016,12 @@ static void mt7925_link_info_changed(struct ieee80211_hw *hw, if (changed & (BSS_CHANGED_QOS | BSS_CHANGED_BEACON_ENABLED)) mt7925_mcu_set_tx(dev, info); - if (changed & BSS_CHANGED_BSSID) { - if (ieee80211_vif_is_mld(vif) && - hweight16(mvif->valid_links) == 2) - /* Indicate the secondary setup done */ - mt7925_mcu_uni_bss_bcnft(dev, info, true); + if (mvif->mlo_pm_state == MT792x_MLO_CHANGED_PS_PENDING) { + /* Indicate the secondary setup done */ + mt7925_mcu_uni_bss_bcnft(dev, info, true); + + ieee80211_queue_delayed_work(hw, &dev->mlo_pm_work, 5 * HZ); + mvif->mlo_pm_state = MT792x_MLO_CHANGED_PS; } mt792x_mutex_release(dev); @@ -2054,8 +2105,6 @@ mt7925_change_vif_links(struct ieee80211_hw *hw, struct ieee80211_vif *vif, goto free; if (mconf != &mvif->bss_conf) { - mt7925_mcu_set_bss_pm(dev, link_conf, true); - err = mt7925_set_mlo_roc(phy, &mvif->bss_conf, vif->active_links); if (err < 0) diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/mt7925.h b/drivers/net/wireless/mediatek/mt76/mt7925/mt7925.h index fd5f9d4ea4a7..cb7b1a49fbd1 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7925/mt7925.h +++ b/drivers/net/wireless/mediatek/mt76/mt7925/mt7925.h @@ -268,6 +268,7 @@ int mt7925_mcu_uni_tx_ba(struct mt792x_dev *dev, int mt7925_mcu_uni_rx_ba(struct mt792x_dev *dev, struct ieee80211_ampdu_params *params, bool enable); +void mt7925_mlo_pm_work(struct work_struct *work); void mt7925_scan_work(struct work_struct *work); void mt7925_roc_work(struct work_struct *work); int mt7925_mcu_uni_bss_ps(struct mt792x_dev *dev, diff --git a/drivers/net/wireless/mediatek/mt76/mt792x.h b/drivers/net/wireless/mediatek/mt76/mt792x.h index 32ed01a96bf7..6e25a4421e12 100644 --- a/drivers/net/wireless/mediatek/mt76/mt792x.h +++ b/drivers/net/wireless/mediatek/mt76/mt792x.h @@ -81,6 +81,13 @@ enum mt792x_reg_power_type { MT_AP_VLP, }; +enum mt792x_mlo_pm_state { + MT792x_MLO_LINK_DISASSOC, + MT792x_MLO_LINK_ASSOC, + MT792x_MLO_CHANGED_PS_PENDING, + MT792x_MLO_CHANGED_PS, +}; + DECLARE_EWMA(avg_signal, 10, 8) struct mt792x_link_sta { @@ -134,6 +141,7 @@ struct mt792x_vif { struct mt792x_phy *phy; u16 valid_links; u8 deflink_id; + enum mt792x_mlo_pm_state mlo_pm_state; struct work_struct csa_work; struct timer_list csa_timer; @@ -239,6 +247,7 @@ struct mt792x_dev { const struct mt792x_irq_map *irq_map; struct work_struct ipv6_ns_work; + struct delayed_work mlo_pm_work; /* IPv6 addresses for WoWLAN */ struct sk_buff_head ipv6_ns_list;