| From a3c96bd2d17ffd8777dd7c3afe429daa3aada222 Mon Sep 17 00:00:00 2001 |
| From: StanleyYP Wang <StanleyYP.Wang@mediatek.com> |
| Date: Thu, 30 Mar 2023 15:12:37 +0800 |
| Subject: [PATCH 1023/1034] wifi: mt76: mt7915: add E3 re-bonding for low yield |
| rate issue |
| |
| Signed-off-by: StanleyYP Wang <StanleyYP.Wang@mediatek.com> |
| --- |
| mt7915/eeprom.c | 28 ++++++++++++++++++++++++++++ |
| mt7915/mt7915.h | 1 + |
| 2 files changed, 29 insertions(+) |
| |
| diff --git a/mt7915/eeprom.c b/mt7915/eeprom.c |
| index fd08d42a..3b44a9d7 100644 |
| --- a/mt7915/eeprom.c |
| +++ b/mt7915/eeprom.c |
| @@ -244,6 +244,32 @@ void mt7915_eeprom_parse_hw_cap(struct mt7915_dev *dev, |
| dev->chainshift = hweight8(dev->mphy.chainmask); |
| } |
| |
| +void mt7915_eeprom_rebonding(struct mt7915_dev *dev) |
| +{ |
| +#define MT7976_ADIE_MASK BIT(1) |
| +#define MT7986_ADIE1_EFFUSE_OFFSET 0x1000 |
| +#define MT7986_ADIE1_MT7976C_OFFSET 0x270 |
| +#define MT7986_ADIE1_E3_OFFSET 0x271 |
| + u32 adie_offset, offset, sku = mt7915_check_adie(dev, true); |
| + u8 read_buf[MT7915_EEPROM_BLOCK_SIZE], *eeprom = dev->mt76.eeprom.data; |
| + |
| + |
| + if (!(sku & MT7976_ADIE_MASK)) |
| + return; |
| + |
| + adie_offset = (sku == MT7976_DUAL_ADIE) ? MT7986_ADIE1_EFFUSE_OFFSET : 0; |
| + |
| + /* 7976 A-Die, To identify MT7976C */ |
| + offset = MT7986_ADIE1_MT7976C_OFFSET + adie_offset; |
| + mt7915_mcu_get_eeprom(dev, offset, read_buf); |
| + eeprom[MT7986_ADIE1_MT7976C_OFFSET] = read_buf[offset % MT7915_EEPROM_BLOCK_SIZE]; |
| + |
| + /* E3 re-binding */ |
| + offset = MT7986_ADIE1_E3_OFFSET + adie_offset; |
| + mt7915_mcu_get_eeprom(dev, offset, read_buf); |
| + eeprom[MT7986_ADIE1_E3_OFFSET] = read_buf[offset % MT7915_EEPROM_BLOCK_SIZE]; |
| +} |
| + |
| int mt7915_eeprom_init(struct mt7915_dev *dev) |
| { |
| int ret; |
| @@ -280,6 +306,8 @@ int mt7915_eeprom_init(struct mt7915_dev *dev) |
| return ret; |
| } |
| |
| + mt7915_eeprom_rebonding(dev); |
| + |
| ret = mt7915_eeprom_load_precal(dev); |
| if (ret) |
| return ret; |
| diff --git a/mt7915/mt7915.h b/mt7915/mt7915.h |
| index b5f76a32..851caa99 100644 |
| --- a/mt7915/mt7915.h |
| +++ b/mt7915/mt7915.h |
| @@ -503,6 +503,7 @@ u32 mt7915_wed_init_buf(void *ptr, dma_addr_t phys, int token_id); |
| |
| int mt7915_register_device(struct mt7915_dev *dev); |
| void mt7915_unregister_device(struct mt7915_dev *dev); |
| +void mt7915_eeprom_rebonding(struct mt7915_dev *dev); |
| int mt7915_eeprom_init(struct mt7915_dev *dev); |
| void mt7915_eeprom_parse_hw_cap(struct mt7915_dev *dev, |
| struct mt7915_phy *phy); |
| -- |
| 2.39.2 |
| |