| From ae247e1c90e6dc47f7c58be2d7daaefe818e3b2d Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 30 Sep 2022 23:13:10 +0800 |
| Subject: wifi: mt76: mt7915: rework eeprom tx paths and streams init |
| |
| From: Shayne Chen <shayne.chen@mediatek.com> |
| |
| [ Upstream commit a7ec8bcf00034ce84d4c9a15dffd7577fbed4db2 ] |
| |
| Rework tx paths and streams init part to improve readability, and make |
| sure that the available tx streams should be smaller than or equal to |
| the available tx paths. |
| |
| Signed-off-by: Shayne Chen <shayne.chen@mediatek.com> |
| Signed-off-by: Felix Fietkau <nbd@nbd.name> |
| Stable-dep-of: de147cc28985 ("wifi: mt76: mt7915: Fix chainmask calculation on mt7915 DBDC") |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| .../wireless/mediatek/mt76/mt7915/eeprom.c | 57 ++++++++----------- |
| .../wireless/mediatek/mt76/mt7915/eeprom.h | 5 -- |
| 2 files changed, 23 insertions(+), 39 deletions(-) |
| |
| diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c |
| index 4b1a9811646f..83bced0c0785 100644 |
| --- a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c |
| +++ b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c |
| @@ -173,60 +173,49 @@ static void mt7915_eeprom_parse_band_config(struct mt7915_phy *phy) |
| void mt7915_eeprom_parse_hw_cap(struct mt7915_dev *dev, |
| struct mt7915_phy *phy) |
| { |
| - u8 nss, nss_band, nss_band_max, *eeprom = dev->mt76.eeprom.data; |
| + u8 path, nss, nss_max = 4, *eeprom = dev->mt76.eeprom.data; |
| struct mt76_phy *mphy = phy->mt76; |
| - bool ext_phy = phy != &dev->phy; |
| |
| mt7915_eeprom_parse_band_config(phy); |
| |
| - /* read tx/rx mask from eeprom */ |
| + /* read tx/rx path from eeprom */ |
| if (is_mt7915(&dev->mt76)) { |
| - nss = FIELD_GET(MT_EE_WIFI_CONF0_TX_PATH, |
| - eeprom[MT_EE_WIFI_CONF]); |
| + path = FIELD_GET(MT_EE_WIFI_CONF0_TX_PATH, |
| + eeprom[MT_EE_WIFI_CONF]); |
| } else { |
| - nss = FIELD_GET(MT_EE_WIFI_CONF0_TX_PATH, |
| - eeprom[MT_EE_WIFI_CONF + phy->band_idx]); |
| + path = FIELD_GET(MT_EE_WIFI_CONF0_TX_PATH, |
| + eeprom[MT_EE_WIFI_CONF + phy->band_idx]); |
| } |
| |
| - if (!nss || nss > 4) |
| - nss = 4; |
| + if (!path || path > 4) |
| + path = 4; |
| |
| /* read tx/rx stream */ |
| - nss_band = nss; |
| - |
| + nss = path; |
| if (dev->dbdc_support) { |
| if (is_mt7915(&dev->mt76)) { |
| - nss_band = FIELD_GET(MT_EE_WIFI_CONF3_TX_PATH_B0, |
| - eeprom[MT_EE_WIFI_CONF + 3]); |
| + nss = FIELD_GET(MT_EE_WIFI_CONF3_TX_PATH_B0, |
| + eeprom[MT_EE_WIFI_CONF + 3]); |
| if (phy->band_idx) |
| - nss_band = FIELD_GET(MT_EE_WIFI_CONF3_TX_PATH_B1, |
| - eeprom[MT_EE_WIFI_CONF + 3]); |
| + nss = FIELD_GET(MT_EE_WIFI_CONF3_TX_PATH_B1, |
| + eeprom[MT_EE_WIFI_CONF + 3]); |
| } else { |
| - nss_band = FIELD_GET(MT_EE_WIFI_CONF_STREAM_NUM, |
| - eeprom[MT_EE_WIFI_CONF + 2 + phy->band_idx]); |
| + nss = FIELD_GET(MT_EE_WIFI_CONF_STREAM_NUM, |
| + eeprom[MT_EE_WIFI_CONF + 2 + phy->band_idx]); |
| } |
| |
| - nss_band_max = is_mt7986(&dev->mt76) ? |
| - MT_EE_NSS_MAX_DBDC_MA7986 : MT_EE_NSS_MAX_DBDC_MA7915; |
| - } else { |
| - nss_band_max = is_mt7986(&dev->mt76) ? |
| - MT_EE_NSS_MAX_MA7986 : MT_EE_NSS_MAX_MA7915; |
| + if (!is_mt7986(&dev->mt76)) |
| + nss_max = 2; |
| } |
| |
| - if (!nss_band || nss_band > nss_band_max) |
| - nss_band = nss_band_max; |
| - |
| - if (nss_band > nss) { |
| - dev_warn(dev->mt76.dev, |
| - "nss mismatch, nss(%d) nss_band(%d) band(%d) ext_phy(%d)\n", |
| - nss, nss_band, phy->band_idx, ext_phy); |
| - nss = nss_band; |
| - } |
| + if (!nss) |
| + nss = nss_max; |
| + nss = min_t(u8, min_t(u8, nss_max, nss), path); |
| |
| - mphy->chainmask = BIT(nss) - 1; |
| - if (ext_phy) |
| + mphy->chainmask = BIT(path) - 1; |
| + if (phy->band_idx) |
| mphy->chainmask <<= dev->chainshift; |
| - mphy->antenna_mask = BIT(nss_band) - 1; |
| + mphy->antenna_mask = BIT(nss) - 1; |
| dev->chainmask |= mphy->chainmask; |
| dev->chainshift = hweight8(dev->mphy.chainmask); |
| } |
| diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.h b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.h |
| index 7578ac6d0be6..f3e56817d36e 100644 |
| --- a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.h |
| +++ b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.h |
| @@ -58,11 +58,6 @@ enum mt7915_eeprom_field { |
| #define MT_EE_RATE_DELTA_SIGN BIT(6) |
| #define MT_EE_RATE_DELTA_EN BIT(7) |
| |
| -#define MT_EE_NSS_MAX_MA7915 4 |
| -#define MT_EE_NSS_MAX_DBDC_MA7915 2 |
| -#define MT_EE_NSS_MAX_MA7986 4 |
| -#define MT_EE_NSS_MAX_DBDC_MA7986 4 |
| - |
| enum mt7915_adie_sku { |
| MT7976_ONE_ADIE_DBDC = 0x7, |
| MT7975_ONE_ADIE = 0x8, |
| -- |
| 2.35.1 |
| |