From patchwork Wed Feb 26 02:56:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Wang X-Patchwork-Id: 13991490 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 5D25EC021A4 for ; Wed, 26 Feb 2025 04:08:02 +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=dFB2FQZDy728LR2oVXqYPx5IKjU9F4S0qm3mUOW2x/Y=; b=A2B3UM8kNw1Ql6BHAeTH5bWLAG 0A6o8SL4IcWj9Xt762yIFzTwswlblWG3aVC1hmD0L1o9JrwKRjO85V5JWDML1Cg95NXRdqE7zHzdO RtGVRe0/2zLctYOG7FYR1Zlg6qGd1dKljUgjueRJEcbTISrfUOkodGGp2Qidc2F3VCJ9v9apslVQz B2biawnmypr3Nn9cJFy0I45YAOqYSmLfZGH4EVB4nDSvEPSKZIeaWWZ2HBPasBn3b34w8/eesp+m9 /No8SnLc34EzhJfCNKrSYKi32wZrisZ0rnPE0thQhdq7sruMuRFUoQ1isUuMatHdcRvqX/w1m6DY8 qeTxySkA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tn8iG-00000002Ku5-3lfc; Wed, 26 Feb 2025 04:08:00 +0000 Received: from mail-oa1-f49.google.com ([209.85.160.49]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tn7bQ-00000002EKg-46XY for linux-mediatek@lists.infradead.org; Wed, 26 Feb 2025 02:56:54 +0000 Received: by mail-oa1-f49.google.com with SMTP id 586e51a60fabf-2bcbfad2f8cso2599439fac.1 for ; Tue, 25 Feb 2025 18:56:52 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740538612; x=1741143412; 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=dFB2FQZDy728LR2oVXqYPx5IKjU9F4S0qm3mUOW2x/Y=; b=g/IkclpVsIz7TgWssKB65jDBj2ZHYABbADAPb9jCyV5lOGtGKjrG8jTrKKj89LZeGP /kiDpedCl8P6hI9OX/NeFr7qxvvpxh+agiyZR8W0aGJO9fPq6itUU2wwB9kbMOKTpSmh 1TyqPV+d5GeEgFPCbrkrnFJHDqwRGwbZi8mjW7q63KxyzJqW/CK7jp/ynIlYGk9l+G5R bHzHQIgNoeGtEHNxWK/walrYk3ITJg/JPeQNK4s+pNmju+T8s92B5s1eJ7bu8/7TzSQK 6WHo+I7TOz9iyRjxub95E4Ymhzn0yIwG+Li8EMdD8+iis0PxyGL51rfxgu46weLooRMd EyNA== X-Forwarded-Encrypted: i=1; AJvYcCXpfMEKfv14+KK/rXl5QHlxDkUUfsQ2KHO9PgNXHJRQMtcWQZVvNte5uhloLzjpT2G+F91eE1eo4IEtJdkZ/w==@lists.infradead.org X-Gm-Message-State: AOJu0YzZxklrO1fGvIQo+FvzSvmVyWnz6hM9tXME5lJSbPeMPFPjuaI6 nJ1kB+1cX9BvrCcoQNDCDRYZNzBRayqgVIaAtrsXCdoDOQCujsyf X-Gm-Gg: ASbGncuVYkG8YKUDheMOg0p6xYHOwxAoN/2ShdepaPeieathYaoro/mYrrQeOwmYpoc TbUv1vft4abSevBYnpL93r8c2qm98plFc1zccfhdvlu0/JXPDEjNAZ8pZPnvW2/PcArzdfAyq2P 9xjeAMkoZhJn1Fm7xe8Al9YAmfaGoTUxe0lJedZpAMaiRx5N1BJ3D6EKIIzqPef6dUqo6FHd0bY KJPgcRVO3mFsObinGdT4LgA1UXHJ5/ViR+EUClFzxQ7zfdVl/Cx6sTjggUrVOdzIF4JuzB8nWJL UDv5suSZ4cFpB5WYdFOT98NIGkZUA1qiGLPdo6LMXts= X-Google-Smtp-Source: AGHT+IHmwTTDvrBamsH9SHOSAyCie3DX9via90/cp21qptTv4gjlI8FuHuK5o3aDlvrSKUjqZLEcWw== X-Received: by 2002:a05:6871:eb18:b0:29f:df6d:999b with SMTP id 586e51a60fabf-2c10f533092mr3549074fac.39.1740538611881; Tue, 25 Feb 2025 18:56:51 -0800 (PST) Received: from sean-ThinkPad-T450s.lan ([207.191.35.252]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2c1113f0135sm676360fac.27.2025.02.25.18.56.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 18:56:50 -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 v4 1/6] Revert "wifi: mt76: mt7925: Update mt7925_mcu_uni_[tx,rx]_ba for MLO" Date: Tue, 25 Feb 2025 18:56:42 -0800 Message-Id: <20250226025647.102904-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-20250225_185653_053996_08FB214C X-CRM114-Status: GOOD ( 14.04 ) 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: e38a82d25b08 ("wifi: mt76: connac: Extend mt76_connac_mcu_uni_add_dev 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 --- .../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 Feb 26 02:56:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Wang X-Patchwork-Id: 13991440 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 BE01BC021BF for ; Wed, 26 Feb 2025 02:57:17 +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=ijn9Zs6TtjyptoPH/X9sgnzFhdzKOSXw5uRjIenFZHg=; b=o3pO8me4iViCHTwEClpAMbmJMu I/bWAeEuLK8zNZESPQg6KDF8tdyQTpvnZYWzwlrhEafcQQMP7ohVayQ4QRJ7n2xG9zUJAQ/9Mlvcp hz3rQ3XDkK4pFIm4GtpJhGQEhvNqNi67PS/SrPkKXin/dePQ2RD0IehxAURZWc0DrAr+TT/rygIwb TCjbs8TJK5uPwAc8OfNeU4XtEadsrvx8CEMGH9lI6AOLRx89+BhfUEhn5CgHb1ZgVLG4AQQ/5PTq7 3Dlo2Z1IzT7DWLAKcZIJn4wNraF4ZS2EX4kcHt3e75KqEbFCQpn0+ydsOxaRdYP/BM76tkGkzPCjb C2yl1z+A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tn7bo-00000002ESo-3F9G; Wed, 26 Feb 2025 02:57:16 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tn7bn-00000002ERY-20av for linux-mediatek@bombadil.infradead.org; Wed, 26 Feb 2025 02:57:15 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:MIME-Version :References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=ijn9Zs6TtjyptoPH/X9sgnzFhdzKOSXw5uRjIenFZHg=; b=pGvPRWUyO1zjY8OQyBELs0V2Y9 eLNrbVYG1koemAbcnze6A1zFUbDh9++AocluZdlF6bzEVNxHYLSqT/dqJLx62me2iEbiSLen7qXw5 BkwodCy5VAMqXkywEhRMNAACaobHbnM6kGH710l17mElHtpuUhwEIBrhPXf+PREq7oCRihHvfQagE 0KkzNB66wvK0s/it9OK+Swld1WQcPAopc+BiMNJ8JBcmblvqYhBTyQXWPfHtYyIrA1e9639nrsnD4 9phqalXfsCT3/ztcXbQs3Op+h+WeUwGrw3F1bYbxtHW4pdBNSaJKaEFg7VKkuTRL6eUP3PsICTxyT xj6wtviw==; Received: from mail-ot1-f51.google.com ([209.85.210.51]) by desiato.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tn7bX-00000003UzL-1DXR for linux-mediatek@lists.infradead.org; Wed, 26 Feb 2025 02:57:03 +0000 Received: by mail-ot1-f51.google.com with SMTP id 46e09a7af769-728a433ec30so442228a34.1 for ; Tue, 25 Feb 2025 18:56:57 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740538616; x=1741143416; 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=ijn9Zs6TtjyptoPH/X9sgnzFhdzKOSXw5uRjIenFZHg=; b=PWxDOgoU4ng4WRKTXhKnl+ccWgbNyO7S6pLNmInnlecTuDn0sEx9j1Hf6CcyT/+pxm VTyrqCNtioiunNbC9F2v3ejANjyRJab+7DlDwlYZLCjjlCNvoFHC5+CfRf0WoWR/Th+S URVg68R/x8vxbjlgduaKf4YrFqc5XUlyzqu2nJvQTte9ctcaioy1K0YfJrKf1RySqkxP 7wtKaOzhJlhhOgJiJVfVmioD4CFZ/a+rMamtMwi0EC8s3wEsC+qYD/zbhBl5jak5AB0q QY6E1u3VSKNwoYjGlY6XmJ0qDoOOSDARcKrQlE1UwoFMeM0apD75Qyq5JAmky4h7U3fM hpxg== X-Forwarded-Encrypted: i=1; AJvYcCV3Z/cD60e0GhRiYXLAs6J9BfePtXZtA6E2LOqmoB9jQibhxR/P8HxkgA/yuaIxoEbNVh5DUfUw7eRmNFSZpg==@lists.infradead.org X-Gm-Message-State: AOJu0YzJK8PAjmjp1fmcqAgZ/en7RvgeV7uzifn6HjWGuUczr9zp94Kg sXLM3nHc5ECjOLEcFuEPE8Zxfqc3hlXX8Tq1VdnnCqB+jEKCL+LG X-Gm-Gg: ASbGncsM9pwTGiK82Su2xvxJvFcWPuPBD+5bCs9k1Px/VISr3L7YDheN+mlXb865QuN tlryr6ZqI0aIU7geQZZblYzi8d8Po415Rit/yoQ5XE7pGUDT0NBIciLpQgb9nfluIm87+3zD/XT GUIr57mD5wUGLj5MfiuXwsMhR8wohrUid8C2KCHMKqbeocpkYE8wZH+mD/9esEE8Iw53NynZAVN s3AH2B1OUlIbo7tdKouFNv6fu9kazB4L6xO0r5zRzSEkdYBzd9z5kYdYKdusXNu/GDi4v7cLfNz FGeiJQlLVWc9/BcPMskYW3r1QNBgxszRegjxg2q4NBE= X-Google-Smtp-Source: AGHT+IH/v3xoOO5kFnmYW8uOZZ7ilJPTZbKGNYJW6EP3vASjM841Y2AYzpuzLLNxk+lzIh/mqbbErQ== X-Received: by 2002:a05:6830:412a:b0:727:2ff3:e046 with SMTP id 46e09a7af769-728a521c06dmr1013357a34.22.1740538615741; Tue, 25 Feb 2025 18:56:55 -0800 (PST) Received: from sean-ThinkPad-T450s.lan ([207.191.35.252]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2c1113f0135sm676360fac.27.2025.02.25.18.56.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 18:56:54 -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 v4 2/6] wifi: mt76: mt7925: fix the wrong link_idx when has p2p_device Date: Tue, 25 Feb 2025 18:56:43 -0800 Message-Id: <20250226025647.102904-2-sean.wang@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250226025647.102904-1-sean.wang@kernel.org> References: <20250226025647.102904-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-20250226_025659_669564_061731FE X-CRM114-Status: GOOD ( 14.64 ) 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 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 2) removed unrelated files --- 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 Feb 26 02:56:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Wang X-Patchwork-Id: 13991437 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 55D2EC021BE for ; Wed, 26 Feb 2025 02:57:04 +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=4VmNKfDBeT2r+sunfTq9ySMJ9kY9GvZ3/jQtVX3LyqY=; b=tRt7V57f3gbS5SnoYu9NL21iap 6lWbp/tKff7DjbZcUG9PW1ObmZ2/tg6XUf3kp0F+Htc11jpAt4e64Ymh8Ik9L0C8ffqBXAQvk/zTQ zIsBJqwcxnvfzhKGRWh22Adnyvp84B23k6beuitipX17MYtKg+BJsJEX2W2x6MuaIEb5QXnH52xw/ CbyHDrjKMGa36oFse65yO6nsvOlS1AiCdwseE+qTDNLnDQMAXG1NmFP2CT6zZS0G9hwfD64dU0U9L Niz/4e95XZBN2axZyjIBIapXxHGIGXKD8l+QvB00a30y5+rTtwOTfde7hr77t5gLpjThUI2EDvwKl ImJLSznw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tn7ba-00000002ENc-2EoJ; Wed, 26 Feb 2025 02:57:02 +0000 Received: from mail-ot1-f41.google.com ([209.85.210.41]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tn7bY-00000002EN1-1AzA for linux-mediatek@lists.infradead.org; Wed, 26 Feb 2025 02:57:01 +0000 Received: by mail-ot1-f41.google.com with SMTP id 46e09a7af769-72722d2717aso1709067a34.2 for ; Tue, 25 Feb 2025 18:57:00 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740538619; x=1741143419; 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=4VmNKfDBeT2r+sunfTq9ySMJ9kY9GvZ3/jQtVX3LyqY=; b=XwxyAkhIHXQaQB96NX1G8jYK9prvpEB6BMy2LXyeGZcMhCJG8blgl2PlmYmHbrp+zV EzXyfiCkm/FqfqFYaPhHCNjxDZrlsA+pQPYmvWIBV2TBEpfwzrUNdaKGD+U6AC3QtYKO atfp674pgERJ8IpvfXGfCDPM7ixsf79Hsb7mcQet8oe9O9Gipb+gKYBA9CtJafbpmYpD fybZ9mJXA5zcnphNJo5ncOCTpW7dGP6uY4fJoatP2ShuONJ+yYrD7qCfRFpSv4XrZuS5 pv/+Upp16czAn2aZvPemgm6BkcYaGM6yGxiKEX3XgEmVWrMBtQ/e45idOayj3GdNpN3a JflQ== X-Forwarded-Encrypted: i=1; AJvYcCX7M9w/tb2JvkQdTzr8xvNe2+hW0TtNRwkPgI2+vk1BRaukY8dSBjM5f7FfGSqs0L0t4qjfIfe//BL3o6PUbg==@lists.infradead.org X-Gm-Message-State: AOJu0YzIA74q39kbm07SpCi/a+I3YZNOpE3dnZkE3JoybS+ezMGpM0tK QI0H7HgLNBn+N2lhkI59jt+KF5hS3DBJkVvU07i4EyTGPf//mywCMKJDkmFQ X-Gm-Gg: ASbGncv9osF+XaWfavXHsSgWCrgS4zSmUvONIsfnwOdw83TO8l2ffyPs280w8E/kJbq wnBv4HiV6PTRtgt4RpKIqQV9vOhppLcyHf7PniMciIMKi/ianp82ZsS6wuONJpUeZ5m5Vdijl2i DKiy050Ye+XWyjM6YRTBUO7aw2HicrcfCVwCLQTYYvDlkW8fS7wA5mxOKhE7IG0lMh1u//ltiJr mB/4yVXnzU1EuTsqSismcwKs9BfZc2p8ciqY9ttfy7lYaPY2DaFW6f02Owk0uGVmXfqOskQ7UDa yVR1gDb2UevAwmFaC3tkjQn8euVm4W45vFCGlFEQbig= X-Google-Smtp-Source: AGHT+IFiUnxL+4G0l2kiQXu6jPoju3mD9QkYVvUkz+KEOIYzU+4oe5AsYRZuU8AunD+nl3yeKCZrdA== X-Received: by 2002:a05:6830:8d2:b0:727:38a9:c203 with SMTP id 46e09a7af769-7289d197965mr4381520a34.25.1740538619373; Tue, 25 Feb 2025 18:56:59 -0800 (PST) Received: from sean-ThinkPad-T450s.lan ([207.191.35.252]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2c1113f0135sm676360fac.27.2025.02.25.18.56.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 18:56:57 -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 v4 3/6] wifi: mt76: mt7925: fix the wrong simultaneous cap for MLO Date: Tue, 25 Feb 2025 18:56:44 -0800 Message-Id: <20250226025647.102904-3-sean.wang@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250226025647.102904-1-sean.wang@kernel.org> References: <20250226025647.102904-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-20250225_185700_318543_526FDFAE X-CRM114-Status: GOOD ( 11.35 ) 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 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) add tested-by tag --- 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 Feb 26 02:56:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Wang X-Patchwork-Id: 13991438 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 110CBC021BE for ; Wed, 26 Feb 2025 02:57: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=4vXi58LyDy1GWYlC/u6cuTmKczjfEVwi6s+UDBBfxoY=; b=RBweX8biM4VKw46kCEm35V2FfL hVe5vQt1VBpqYAIRYKkKbUpyPXW+390KaB+wEtUSLMAntBBwbXjFnIqEpYngupKAbc5ZuCwVRYGr5 ZHdamoYRM5tYUlj2U59ThWP+toj/Pwd33R+1MEz8hyA+rQ2EWNJg/aTLQ2LYIfW+sm+v5jqHrQOGu EVU7Cpoww2RhMj4nx6qtp/bF1xMauF1xmDSNzMr0LQHoXFdedKbwjCdMHFgnThjrlm3vRCuCjQsY6 aQH7WAHWAJ0v4xyyxtU3j5QLi/SSaiDnJI/DMrPDfJTw7urgQn6KbcWtxS+t8V0oB01abni6N4FjT FUtu8v9w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tn7bf-00000002EPP-0cXh; Wed, 26 Feb 2025 02:57:07 +0000 Received: from mail-oa1-f42.google.com ([209.85.160.42]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tn7bc-00000002EO0-0bWH for linux-mediatek@lists.infradead.org; Wed, 26 Feb 2025 02:57:05 +0000 Received: by mail-oa1-f42.google.com with SMTP id 586e51a60fabf-2b199bb8af9so288229fac.1 for ; Tue, 25 Feb 2025 18:57:03 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740538623; x=1741143423; 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=4vXi58LyDy1GWYlC/u6cuTmKczjfEVwi6s+UDBBfxoY=; b=MqT2N6DUhFUwJvQ37rClwtWrRgEhJwJovO3S+tq40rm0RLWvDnLPcDnn7Zyf4R5GxA O6sEK3Bo77AiHLhPcEunaYUmn8MRmHs/mFeC7EjZyTxtfXtIci4ovzIKr2rOVbtWLm54 /93kZn2vgx0WpBSvN6Nh/xz1qjXMGZq+9z0xHYEWkjvmT/OSRWK60toFtC8vz20QrUJb HwrETr7lOiq1HZ5xXvz7g/3n8MAjx4Jc7a6qDmxAjMnjpgjGhVvf9LSD6oyZcSYlA5uZ 9AWul88SctBxcJxdkvPCwtgPSmJsyfEDfi2XBAzTx6Ja8OCKHLL/IbtQmTSt+VFoH65C cTWg== X-Forwarded-Encrypted: i=1; AJvYcCWHaAwn1CqnjsJ9Xv2s72+zAGu31xTd0gUb4o3al+tj7KxhaozL3IvK9vF8vmNH9jwiZzYb6geepkQC1yLyQw==@lists.infradead.org X-Gm-Message-State: AOJu0YxQJqe4TrUM1eiEHx6xxFfjj/PzNyc7+weeRrUsyi88IyI9YCjs I9Xj7W6Xleqb9px/klRxA4MVJL1McvFERvNmJdoHZOQdSkEm73bk X-Gm-Gg: ASbGncvvqiv7k9vzctIKoOQpAOtyL80a9CdDYetXBnTeiePSCUtIsnUExRZqItCHiR5 e5jIHwa6YBNZHfqQADrsglmSTcwe0QM0ets6MfcMgTUa+BhaaQSxgTq3ILzawSNhcmIFVSKBFa3 9hflNRhG2ScBwLzlBPvtehasWLGqHn7RxPevuW7asMxkxqzO9mwx9rtetgECenGzZEC4TTY2PPw 3RPLObV+Q+40XwhRlyFAwfwKs8OTsC8tyZxeaBMHvP7igynIQL3wvO7nqVRA/laOVdsDharFhp9 fL/iZaEV2Ieer5Pb41PT9jTqn8am8Vhjvo9eTXnYbjU= X-Google-Smtp-Source: AGHT+IEIugqduV+RGP3uvFWYUDXl+R6/9G+jIQ080D5wrSR6I8qtMlDHw/vEuMSZFevfVt5/TORrow== X-Received: by 2002:a05:6871:6a7:b0:297:281b:fb6d with SMTP id 586e51a60fabf-2bd500303f0mr14238536fac.3.1740538623206; Tue, 25 Feb 2025 18:57:03 -0800 (PST) Received: from sean-ThinkPad-T450s.lan ([207.191.35.252]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2c1113f0135sm676360fac.27.2025.02.25.18.57.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 18:57:01 -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 v4 4/6] wifi: mt76: mt7925: adjust rm BSS flow to prevent next connection failure Date: Tue, 25 Feb 2025 18:56:45 -0800 Message-Id: <20250226025647.102904-4-sean.wang@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250226025647.102904-1-sean.wang@kernel.org> References: <20250226025647.102904-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-20250225_185704_184023_44EF2EC4 X-CRM114-Status: GOOD ( 14.26 ) 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 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) add tested-by tag --- .../net/wireless/mediatek/mt76/mt7925/main.c | 45 +++++++++++++++---- 1 file changed, 36 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..4a9f393b45ba 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; @@ -1212,6 +1242,7 @@ 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; @@ -1242,14 +1273,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 Feb 26 02:56: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: 13991439 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 5B112C021BE for ; Wed, 26 Feb 2025 02:57:12 +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=ky/E/gk2IbGf3P6mKrf8CYE7N91ey2oDG6HZ3mRTMOw=; b=hhkBJFbfDCcktg5oUuBxkgrBEj o+DNdHGmmSHNCKtq2WUvRJiqngr3odKNSH0s/GUHSVhcPcG3/CZ15Vei4yGp3kfgU6rX9h648RnOo ZIIgTaGjFED90m07zDN1rUx1dgXvDmGzxuYvJNsaQuYCAIsvqhASdbO38+dX/v5nqIKwQzu0ivcyr 56dTun3jw12fuWDYp4DjFV7+fckiXob2K0gdZZe7RD6J9h3OyI0wBnBoTESyNoAxh8LyGXUQZjRx/ ksPv4RpHePNk5OFWA46sESGAfAIkeGFDSxdAh/pBpRNMjRDcadY1564BDpJHCyHRkCmT/8rwIHZuy U3xA7aWA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tn7bj-00000002ERA-1sPr; Wed, 26 Feb 2025 02:57:11 +0000 Received: from mail-oa1-f42.google.com ([209.85.160.42]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tn7bh-00000002EQA-1Lkw for linux-mediatek@lists.infradead.org; Wed, 26 Feb 2025 02:57:10 +0000 Received: by mail-oa1-f42.google.com with SMTP id 586e51a60fabf-2c11ddc865eso294443fac.3 for ; Tue, 25 Feb 2025 18:57:09 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740538628; x=1741143428; 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=ky/E/gk2IbGf3P6mKrf8CYE7N91ey2oDG6HZ3mRTMOw=; b=D5RJQlA0UWqVN3b60mHObJPhe8kXy3F65qom8d5w+9BKVGwf8jHRliA6L1cK7GnTlk /JX4vw7M+bCKflB+5mUAptKA/eM4tt+i9A11qGO7unr7T/2vbgXMuJbFZbVMaFfB74jn OcY9TZxLgzoD7t7mLQK/iSKpeJDbpgScVXbDz6R1wmQfKWI8ybofNBNCGbFSy2KKx47i 3yrpuc1D5FOfz3nziv1FonOlkZg6zLCBwrSJJ/AxQW/QZDvXRzfNPZios6MNjxko9sBw WlhPWNNTPZrSl4e7qSpeG28qXPTy3tDE34EtMpUzPD/THwb8IHt4/qN80PythSezdiix s80g== X-Forwarded-Encrypted: i=1; AJvYcCUQXhcIirQ58mDjy/NeWfhLQeYGjYnEDOX6Wzzkky0rwqK/cs6aYfHlWrDQzJzP7ba/vwN/ycoSBLUOn1eH0Q==@lists.infradead.org X-Gm-Message-State: AOJu0Yx5Zyt3GmsJOuX9ElIZh8KPWZGRfW38uPSb3BNrYZrZAh+uL3FO dYH425q5xFzWKIN9zewBlSW7Vk1UGC9jiMJh0AVvTfUE0NzDfU3b X-Gm-Gg: ASbGnct7jmNSqlviHwyLQ1K5upIAc+2aPtSvytCKQf6avqFS+I/qxCLJzOLG4BS2B1q X0/U3McYCAutJQvunSLTIzHRNKS8L38HBiwVCNHJqKhQNztIhDu1FLt7s2Vnb5H+AYTMyyD/XF5 dfwfXGahssm50SDqkrrNzPSq3Rx72PKo9fR7OgPw0vCFjb57DtvlDpuCfD7R1rfLgYUTYvFcdDU SLb6baYB72iDeyoCZwsMbvQQzlQd8fa+hY8s45IOZbPnW3M2MnnbYuYJy8aZkRoGAtG27byXUUk /GJ98pRw5SsK1/BMXyNj3W94PvKVrCCQFQmJkbbin1E= X-Google-Smtp-Source: AGHT+IEtZju1Rl1egzmGRBcenriEnSnl7o/IjuwHVbSdPyLu15BX9lgZop131Px3youvTRzGGC10tQ== X-Received: by 2002:a05:6871:d217:b0:29e:7a13:1341 with SMTP id 586e51a60fabf-2c10f1d2310mr3493852fac.8.1740538628675; Tue, 25 Feb 2025 18:57:08 -0800 (PST) Received: from sean-ThinkPad-T450s.lan ([207.191.35.252]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2c1113f0135sm676360fac.27.2025.02.25.18.57.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 18:57: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 v4 5/6] wifi: mt76: mt7925: integrate *mlo_sta_cmd and *sta_cmd Date: Tue, 25 Feb 2025 18:56:46 -0800 Message-Id: <20250226025647.102904-5-sean.wang@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250226025647.102904-1-sean.wang@kernel.org> References: <20250226025647.102904-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-20250225_185709_362708_66CAAA42 X-CRM114-Status: GOOD ( 12.48 ) 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 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 2) removed the unrelated files --- .../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 Feb 26 02:56: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: 13991441 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 406FAC021BE for ; Wed, 26 Feb 2025 02:57:21 +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=V4Gi5oLcnu13m4QqfB45wOY6IeSYSo6Ivw3GwbQxIL4=; b=atcew4KIqpWA8rLJUIA6/Akwls xXovxmGydhqwkcNqoWZUCR/2VXqT80mkYuvWP7d3P2gVEk2hnILuwgE+RTGVD204mZuDtdKXyk9d7 RFacGLH5iC0KqP+t+OitRYYi261Dl1jr7D/XRVDGQQ5ka3asuvtVfBaO5FK4PnJci4K+y9dEh3myN jlq1Lz9920Jqe6YsPaf1d8QnYXu0BFBY2tB4/jIMnh/y2cpPnSh+Kg2I0O7oWlOmejAfrfIlu3qsL WoHsG10ifFF+ZoTL4+RaRcX1GtvQKGBPj0gQh8zwWjpDzgSAItG6hMqFNdXdeY2ly1i1YY3f7coYI Pd+iKn/w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tn7bs-00000002EUO-1au3; Wed, 26 Feb 2025 02:57:20 +0000 Received: from mail-ot1-f52.google.com ([209.85.210.52]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tn7bp-00000002ETO-3CF3 for linux-mediatek@lists.infradead.org; Wed, 26 Feb 2025 02:57:19 +0000 Received: by mail-ot1-f52.google.com with SMTP id 46e09a7af769-726819aa3fcso3453890a34.0 for ; Tue, 25 Feb 2025 18:57:17 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740538637; x=1741143437; 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=V4Gi5oLcnu13m4QqfB45wOY6IeSYSo6Ivw3GwbQxIL4=; b=CPMfrejjjMk9hvcNOf75EPkk/yHNzBwN/RSJbuhJ+KhLCbQ8wlEdr6BKWAAMWRxCLQ 479vV11VkJzrLCHet0tXFDa/UxA2H6nX7+NAA5hiPrNC+Duo5GKGig4Byam8lX/yPsmI tkwwv28NqmZE6o3dtal6BE3Jdelwxae+FAXRr0Ge8SEWXkGD8p3XDY3xUJylcy3fBxT4 p0CBk0VLj4mbLPp+8HUUu7NPsGxG5wj6Pa6NUh7WmrbKip4jaVBtnbUrWCqF+oU5ZqBi DKchRpV05e9NX1zcfpDqRtOjXnGqs10c1GdQ6mBcQCU4GqSb8+EoxfaONQbh5tmbm8Es L6dw== X-Forwarded-Encrypted: i=1; AJvYcCVRCshJqMZ2uOT9I26TpypobzkiiHU62TyDdNzCyRGRtWbW8Om0UVHodDvpf5e39Xvr3XqZCUWFaCYjCiRU3A==@lists.infradead.org X-Gm-Message-State: AOJu0YyoZPu4AUYTTGkA3FbioqbsNcdWQydLQNOc0tk8mtTDS61XaoAB 4NP7ycV6B699G7YMIXyHPhLi6wfti4oVb4U52RFl757HJGiq3+DU X-Gm-Gg: ASbGnctELK3FFdKDvdMOzwk1HwMNYxdSnoQwcPzw2GT5nf3l83yISKHkvFMnImvr+ie 0i4uqFnM5XWCYlGF5ui/zoUzjxnrbJMEXcOIPR07RJV3kPZLV/umUbKwqdRGjY07JIdEa5YDAqn 5gA4KzRMJyh8mXhp8UZzoKNH1sIOyPHjWrLoXlO34lGEoRaEoAv2uLt69l4UfAEBtHdeoqGfpKr isBwbVPu+jyTEPqOCDl8fqqEIAiGGaY73F1t8H84RMMWKPQS+WB/R+Mg4bVlVJFMneZd7DGHORk n88rJle29YthJUUD+aJI+Rt288zXk4HqUCJJoDigECQ= X-Google-Smtp-Source: AGHT+IGsp1z/zREzEGPS570DiATvLdI7NdTqzP+4QxfZKU3Y/BqW1Jyn1C1SsdTmTBZv6xAjGL3bww== X-Received: by 2002:a05:6830:6706:b0:727:f9a:8aea with SMTP id 46e09a7af769-728a50c73bamr1093423a34.4.1740538635443; Tue, 25 Feb 2025 18:57:15 -0800 (PST) Received: from sean-ThinkPad-T450s.lan ([207.191.35.252]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2c1113f0135sm676360fac.27.2025.02.25.18.57.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 18:57:14 -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 v4 6/6] wifi: mt76: mt7925: update the power-saving flow Date: Tue, 25 Feb 2025 18:56:47 -0800 Message-Id: <20250226025647.102904-6-sean.wang@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250226025647.102904-1-sean.wang@kernel.org> References: <20250226025647.102904-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-20250225_185717_806996_888898B4 X-CRM114-Status: GOOD ( 17.82 ) 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 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 --- .../net/wireless/mediatek/mt76/mt7925/init.c | 1 + .../net/wireless/mediatek/mt76/mt7925/main.c | 65 ++++++++++++++++--- .../wireless/mediatek/mt76/mt7925/mt7925.h | 1 + drivers/net/wireless/mediatek/mt76/mt792x.h | 9 +++ 4 files changed, 67 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 4a9f393b45ba..395c3d5d7954 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) @@ -1284,6 +1285,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); @@ -1355,6 +1358,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) @@ -1904,6 +1939,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) { @@ -1914,9 +1952,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); + } + } } } @@ -1967,11 +2015,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); @@ -2055,8 +2104,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;