developer | c1997a8 | 2023-03-30 15:28:14 +0800 | [diff] [blame^] | 1 | From 6256e5a3577ddf726a30774b2366e7ccf098031a Mon Sep 17 00:00:00 2001 |
developer | 0cee47d | 2022-10-12 14:03:27 +0800 | [diff] [blame] | 2 | From: StanleyYP Wang <StanleyYP.Wang@mediatek.com> |
developer | c1997a8 | 2023-03-30 15:28:14 +0800 | [diff] [blame^] | 3 | Date: Thu, 30 Mar 2023 15:12:37 +0800 |
| 4 | Subject: [PATCH 1127/1133] mt76: mt7915: add E3 re-bonding for low yield rate |
developer | 81ca9d6 | 2022-10-14 11:23:22 +0800 | [diff] [blame] | 5 | issue |
developer | 0cee47d | 2022-10-12 14:03:27 +0800 | [diff] [blame] | 6 | |
developer | 0cee47d | 2022-10-12 14:03:27 +0800 | [diff] [blame] | 7 | --- |
developer | c1997a8 | 2023-03-30 15:28:14 +0800 | [diff] [blame^] | 8 | mt7915/eeprom.c | 28 ++++++++++++++++++++++++++++ |
| 9 | mt7915/mt7915.h | 1 + |
| 10 | 2 files changed, 29 insertions(+) |
developer | 0cee47d | 2022-10-12 14:03:27 +0800 | [diff] [blame] | 11 | |
| 12 | diff --git a/mt7915/eeprom.c b/mt7915/eeprom.c |
developer | c1997a8 | 2023-03-30 15:28:14 +0800 | [diff] [blame^] | 13 | index 612be3f..c6d8ca1 100644 |
developer | 0cee47d | 2022-10-12 14:03:27 +0800 | [diff] [blame] | 14 | --- a/mt7915/eeprom.c |
| 15 | +++ b/mt7915/eeprom.c |
developer | c1997a8 | 2023-03-30 15:28:14 +0800 | [diff] [blame^] | 16 | @@ -239,6 +239,32 @@ void mt7915_eeprom_parse_hw_cap(struct mt7915_dev *dev, |
developer | 0cee47d | 2022-10-12 14:03:27 +0800 | [diff] [blame] | 17 | dev->chainshift = hweight8(dev->mphy.chainmask); |
| 18 | } |
| 19 | |
| 20 | +void mt7915_eeprom_rebonding(struct mt7915_dev *dev) |
| 21 | +{ |
| 22 | +#define MT7976_ADIE_MASK BIT(1) |
| 23 | +#define MT7986_ADIE1_EFFUSE_OFFSET 0x1000 |
| 24 | +#define MT7986_ADIE1_MT7976C_OFFSET 0x270 |
| 25 | +#define MT7986_ADIE1_E3_OFFSET 0x271 |
developer | c1997a8 | 2023-03-30 15:28:14 +0800 | [diff] [blame^] | 26 | + u32 adie_offset, offset, sku = mt7915_check_adie(dev, true); |
| 27 | + u8 read_buf[MT7915_EEPROM_BLOCK_SIZE], *eeprom = dev->mt76.eeprom.data; |
| 28 | + |
developer | 0cee47d | 2022-10-12 14:03:27 +0800 | [diff] [blame] | 29 | + |
| 30 | + if (!(sku & MT7976_ADIE_MASK)) |
| 31 | + return; |
| 32 | + |
| 33 | + adie_offset = (sku == MT7976_DUAL_ADIE) ? MT7986_ADIE1_EFFUSE_OFFSET : 0; |
| 34 | + |
| 35 | + /* 7976 A-Die, To identify MT7976C */ |
developer | c1997a8 | 2023-03-30 15:28:14 +0800 | [diff] [blame^] | 36 | + offset = MT7986_ADIE1_MT7976C_OFFSET + adie_offset; |
| 37 | + mt7915_mcu_get_eeprom(dev, offset, read_buf); |
| 38 | + eeprom[MT7986_ADIE1_MT7976C_OFFSET] = read_buf[offset % MT7915_EEPROM_BLOCK_SIZE]; |
developer | 0cee47d | 2022-10-12 14:03:27 +0800 | [diff] [blame] | 39 | + |
| 40 | + /* E3 re-binding */ |
developer | c1997a8 | 2023-03-30 15:28:14 +0800 | [diff] [blame^] | 41 | + offset = MT7986_ADIE1_E3_OFFSET + adie_offset; |
| 42 | + mt7915_mcu_get_eeprom(dev, offset, read_buf); |
| 43 | + eeprom[MT7986_ADIE1_E3_OFFSET] = read_buf[offset % MT7915_EEPROM_BLOCK_SIZE]; |
developer | 0cee47d | 2022-10-12 14:03:27 +0800 | [diff] [blame] | 44 | +} |
| 45 | + |
| 46 | int mt7915_eeprom_init(struct mt7915_dev *dev) |
| 47 | { |
| 48 | int ret; |
developer | c1997a8 | 2023-03-30 15:28:14 +0800 | [diff] [blame^] | 49 | @@ -275,6 +301,8 @@ int mt7915_eeprom_init(struct mt7915_dev *dev) |
developer | 0cee47d | 2022-10-12 14:03:27 +0800 | [diff] [blame] | 50 | return ret; |
| 51 | } |
| 52 | |
| 53 | + mt7915_eeprom_rebonding(dev); |
| 54 | + |
| 55 | ret = mt7915_eeprom_load_precal(dev); |
| 56 | if (ret) |
| 57 | return ret; |
developer | 0cee47d | 2022-10-12 14:03:27 +0800 | [diff] [blame] | 58 | diff --git a/mt7915/mt7915.h b/mt7915/mt7915.h |
developer | c1997a8 | 2023-03-30 15:28:14 +0800 | [diff] [blame^] | 59 | index 73bc030..5999134 100644 |
developer | 0cee47d | 2022-10-12 14:03:27 +0800 | [diff] [blame] | 60 | --- a/mt7915/mt7915.h |
| 61 | +++ b/mt7915/mt7915.h |
developer | fd8e115 | 2023-02-14 11:29:23 +0800 | [diff] [blame] | 62 | @@ -558,6 +558,7 @@ u32 mt7915_wed_init_buf(void *ptr, dma_addr_t phys, int token_id); |
developer | 81ca9d6 | 2022-10-14 11:23:22 +0800 | [diff] [blame] | 63 | |
developer | 0cee47d | 2022-10-12 14:03:27 +0800 | [diff] [blame] | 64 | int mt7915_register_device(struct mt7915_dev *dev); |
| 65 | void mt7915_unregister_device(struct mt7915_dev *dev); |
| 66 | +void mt7915_eeprom_rebonding(struct mt7915_dev *dev); |
| 67 | int mt7915_eeprom_init(struct mt7915_dev *dev); |
| 68 | void mt7915_eeprom_parse_hw_cap(struct mt7915_dev *dev, |
| 69 | struct mt7915_phy *phy); |
developer | 0cee47d | 2022-10-12 14:03:27 +0800 | [diff] [blame] | 70 | -- |
developer | c04f540 | 2023-02-03 09:22:26 +0800 | [diff] [blame] | 71 | 2.18.0 |
developer | 0cee47d | 2022-10-12 14:03:27 +0800 | [diff] [blame] | 72 | |