Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp2609858pxb; Tue, 24 Aug 2021 03:26:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxpcxVA9IfexF0LHcdI5SxAzRshd64KhPc0FxDSsa7qrXU3EZMMl9xxsXlIuspinu6h/zcZ X-Received: by 2002:a17:906:3fd7:: with SMTP id k23mr40156511ejj.176.1629800776000; Tue, 24 Aug 2021 03:26:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1629800775; cv=none; d=google.com; s=arc-20160816; b=j+sVl7WCLmW9GHg/I7yDRYZ5I/u5xhaknSIKKEEtXnwZxVS7q3fEOkD9mdCKmMnar8 nF85BHwshsn7vH4gXlpXAdR13B60mAPw2jS3NY14rfMGLSvGUqP6g/MRkMebm3T3xgnd qi3bbQ785Zy3giM3nTcVT2OyFdU51WcvzgZWo/GftlD73o+JZp+NSRLyo01o88pyJtQN isRuJmU3qnWDxZk3HN7sX4wruht/9n/zoKH0krkhHkFCv6GTDIFU37VnKOROGTTGVeB/ rsetOElIdezBsMfEeKistAbA4WOzfqLDUnyceuhVPwUmebJYcNudwRNivOW5uw3Tb4kY BvhQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=QrC6jkonR3RdTI0OswIjJZ+gzXSMdknobKEQdmAzb5I=; b=MdNRgH+KiKUd1SlbVkVKkQS+VffHF9MUx1vGI7+zhIyNEWYgK+eHaUxoOmDmigiOI7 7y99MkkzRZ/ymaaG78jgm/6c1S9HiaKc1Hi3XyKV9kxWGlLx+aps8/aDb+JbKoWFBDL9 qgbkJjkWxVY11sYAZsdd7LD8e0pREuVq1qQLekGFRY0VCzpfP8MFGN+5GqXeycg2mo4Y fGo3Zne8v1DlMowZ6Daj2nSNZZvNLiTioPzjPy3jK6KrBg7c33i3nguj/WBf6BLCNhVg S1FFhLfaANsPCSbmHluPLx+F5yqTgMJWfSyPo3Jbau0fr7mbbghMll4FaAtmhxjNno5k eNBQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=sx1j7F3K; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id gb21si16466971ejc.639.2021.08.24.03.25.52; Tue, 24 Aug 2021 03:26:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=sx1j7F3K; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236250AbhHXKXs (ORCPT + 99 others); Tue, 24 Aug 2021 06:23:48 -0400 Received: from mail.kernel.org ([198.145.29.99]:59480 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236232AbhHXKXr (ORCPT ); Tue, 24 Aug 2021 06:23:47 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 0AE316127B; Tue, 24 Aug 2021 10:23:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1629800584; bh=NWEDq2hoY5PcY5jaCuKwtpYsxVSsHWuwH7OubOY4F7E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sx1j7F3KLUBb8xkJFbtQIdKqgG/wzNEOh6lIiQldvwtPNNH9jTeroo+wc6p02UeZJ yFkTDh5w0vuKWebsNhfLz/DfnUOgGNnjtZlIfI1v2rOr/O63KoWd9W579EFtdIJZua 6TPiBRuYWyvA9UJ/2YvVfxlkQjWRVYBJhicQBz+a6Egae8JeHRDZB96WvAcXUrFXiG rBssCZ5rTx3mfTxOCtS40vlQWWV55vygaCSUz/LsjCtOUYr9RTclug9hH4XINXYT6M IvHrF01X7jMds2dfMwGibyRMpJn7lHreD/G/nmDknocsHxHbhUhZC8db5C+axt9aVP 8QmWeNHZ0XmBg== From: Lorenzo Bianconi To: nbd@nbd.name Cc: linux-wireless@vger.kernel.org, lorenzo.bianconi@redhat.com, sean.wang@mediatek.com, Deren.Wu@mediatek.com Subject: [PATCH 4/9] mt76: connac: set 6G phymode in single-sku support Date: Tue, 24 Aug 2021 12:22:22 +0200 Message-Id: X-Mailer: git-send-email 2.31.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org Configure tx rate power for 6GHz channels. This is a preliminary patch to enable 6GHz band for mt7921 devices. Tested-by: Deren Wu Signed-off-by: Lorenzo Bianconi --- drivers/net/wireless/mediatek/mt76/eeprom.c | 3 ++ .../wireless/mediatek/mt76/mt76_connac_mcu.c | 48 +++++++++++++++++-- .../wireless/mediatek/mt76/mt76_connac_mcu.h | 2 +- 3 files changed, 49 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/eeprom.c b/drivers/net/wireless/mediatek/mt76/eeprom.c index 3b47e85e95e7..376c3bd883e5 100644 --- a/drivers/net/wireless/mediatek/mt76/eeprom.c +++ b/drivers/net/wireless/mediatek/mt76/eeprom.c @@ -285,6 +285,9 @@ s8 mt76_get_rate_power_limits(struct mt76_phy *phy, case NL80211_BAND_5GHZ: band = '5'; break; + case NL80211_BAND_6GHZ: + band = '6'; + break; default: return target_power; } diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c index f5c1a7d9306e..8e1475aa35ac 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c @@ -1839,6 +1839,9 @@ static s8 mt76_connac_get_ch_power(struct mt76_phy *phy, case NL80211_BAND_5GHZ: sband = &phy->sband_5g.sband; break; + case NL80211_BAND_6GHZ: + sband = &phy->sband_6g.sband; + break; default: return target_power; } @@ -1880,6 +1883,24 @@ mt76_connac_mcu_rate_txpower_band(struct mt76_phy *phy, 142, 144, 149, 151, 153, 155, 157, 159, 161, 165 }; + static const u8 chan_list_6ghz[] = { + 1, 3, 5, 7, 9, 11, 13, + 15, 17, 19, 21, 23, 25, 27, + 29, 33, 35, 37, 39, 41, 43, + 45, 47, 49, 51, 53, 55, 57, + 59, 61, 65, 67, 69, 71, 73, + 75, 77, 79, 81, 83, 85, 87, + 89, 91, 93, 97, 99, 101, 103, + 105, 107, 109, 111, 113, 115, 117, + 119, 121, 123, 125, 129, 131, 133, + 135, 137, 139, 141, 143, 145, 147, + 149, 151, 153, 155, 157, 161, 163, + 165, 167, 169, 171, 173, 175, 177, + 179, 181, 183, 185, 187, 189, 193, + 195, 197, 199, 201, 203, 205, 207, + 209, 211, 213, 215, 217, 219, 221, + 225, 227, 229, 233 + }; int i, n_chan, batch_size, idx = 0, tx_power, last_ch; struct mt76_connac_sku_tlv sku_tlbv; struct mt76_power_limits limits; @@ -1893,6 +1914,9 @@ mt76_connac_mcu_rate_txpower_band(struct mt76_phy *phy, if (band == NL80211_BAND_2GHZ) { n_chan = ARRAY_SIZE(chan_list_2ghz); ch_list = chan_list_2ghz; + } else if (band == NL80211_BAND_6GHZ) { + n_chan = ARRAY_SIZE(chan_list_6ghz); + ch_list = chan_list_6ghz; } else { n_chan = ARRAY_SIZE(chan_list_5ghz); ch_list = chan_list_5ghz; @@ -1901,13 +1925,13 @@ mt76_connac_mcu_rate_txpower_band(struct mt76_phy *phy, if (!phy->cap.has_5ghz) last_ch = chan_list_2ghz[n_chan - 1]; + else if (phy->cap.has_6ghz) + last_ch = chan_list_6ghz[n_chan - 1]; else last_ch = chan_list_5ghz[n_chan - 1]; for (i = 0; i < batch_size; i++) { - struct mt76_connac_tx_power_limit_tlv tx_power_tlv = { - .band = band == NL80211_BAND_2GHZ ? 1 : 2, - }; + struct mt76_connac_tx_power_limit_tlv tx_power_tlv = {}; int j, err, msg_len, num_ch; struct sk_buff *skb; @@ -1923,6 +1947,18 @@ mt76_connac_mcu_rate_txpower_band(struct mt76_phy *phy, memcpy(tx_power_tlv.alpha2, dev->alpha2, sizeof(dev->alpha2)); tx_power_tlv.n_chan = num_ch; + switch (band) { + case NL80211_BAND_2GHZ: + tx_power_tlv.band = 1; + break; + case NL80211_BAND_6GHZ: + tx_power_tlv.band = 3; + break; + default: + tx_power_tlv.band = 2; + break; + } + for (j = 0; j < num_ch; j++, idx++) { struct ieee80211_channel chan = { .hw_value = ch_list[idx], @@ -1973,6 +2009,12 @@ int mt76_connac_mcu_set_rate_txpower(struct mt76_phy *phy) if (err < 0) return err; } + if (phy->cap.has_6ghz) { + err = mt76_connac_mcu_rate_txpower_band(phy, + NL80211_BAND_6GHZ); + if (err < 0) + return err; + } return 0; } diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h index cb36dd39221c..0f11574af535 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h +++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h @@ -964,7 +964,7 @@ struct mt76_connac_tx_power_limit_tlv { __le16 len; /* DW1 - cmd hint */ u8 n_chan; /* # channel */ - u8 band; /* 2.4GHz - 5GHz */ + u8 band; /* 2.4GHz - 5GHz - 6GHz */ u8 last_msg; u8 pad1; /* DW3 */ -- 2.31.1