developer | 7e2761e | 2023-10-12 08:11:13 +0800 | [diff] [blame] | 1 | From dcace898314b1d369b61a0c4f7f9e325f04784dc Mon Sep 17 00:00:00 2001 |
| 2 | From: StanleyYP Wang <StanleyYP.Wang@mediatek.com> |
| 3 | Date: Fri, 26 May 2023 14:44:04 +0800 |
| 4 | Subject: [PATCH 61/98] wifi: mt76: mt7996: add kite eeprom load support |
| 5 | |
| 6 | Signed-off-by: StanleyYP Wang <StanleyYP.Wang@mediatek.com> |
| 7 | --- |
| 8 | mt7996/eeprom.c | 33 ++++++++++++++++++++++----------- |
| 9 | mt7996/mcu.c | 2 +- |
| 10 | mt7996/mt7996.h | 10 ++++++++++ |
| 11 | 3 files changed, 33 insertions(+), 12 deletions(-) |
| 12 | |
| 13 | diff --git a/mt7996/eeprom.c b/mt7996/eeprom.c |
| 14 | index 56605de..6605853 100644 |
| 15 | --- a/mt7996/eeprom.c |
| 16 | +++ b/mt7996/eeprom.c |
| 17 | @@ -53,9 +53,12 @@ static int mt7996_check_eeprom(struct mt7996_dev *dev) |
| 18 | u8 *eeprom = dev->mt76.eeprom.data; |
| 19 | u16 val = get_unaligned_le16(eeprom); |
| 20 | |
| 21 | +#define CHECK_EEPROM_ERR(match) (match ? 0 : -EINVAL) |
| 22 | switch (val) { |
| 23 | case 0x7990: |
| 24 | - return 0; |
| 25 | + return CHECK_EEPROM_ERR(is_mt7996(&dev->mt76)); |
| 26 | + case 0x7992: |
| 27 | + return CHECK_EEPROM_ERR(is_mt7992(&dev->mt76)); |
| 28 | default: |
| 29 | return -EINVAL; |
| 30 | } |
| 31 | @@ -66,13 +69,20 @@ const char *mt7996_eeprom_name(struct mt7996_dev *dev) |
| 32 | if (dev->bin_file_mode) |
| 33 | return dev->mt76.bin_file_name; |
| 34 | |
| 35 | - /* reserve for future variants */ |
| 36 | - if (dev->testmode_enable) |
| 37 | - return MT7996_EEPROM_DEFAULT_TM; |
| 38 | - else if (dev->chip_sku == MT7996_SKU_404) |
| 39 | - return MT7996_EEPROM_DEFAULT_404; |
| 40 | - else |
| 41 | + switch (mt76_chip(&dev->mt76)) { |
| 42 | + case 0x7990: |
| 43 | + if (dev->testmode_enable) |
| 44 | + return MT7996_EEPROM_DEFAULT_TM; |
| 45 | + else if (dev->chip_sku == MT7996_SKU_404) |
| 46 | + return MT7996_EEPROM_DEFAULT_404; |
| 47 | + else |
| 48 | + return MT7996_EEPROM_DEFAULT; |
| 49 | + case 0x7992: |
| 50 | + return dev->testmode_enable ? |
| 51 | + MT7992_EEPROM_DEFAULT_TM : MT7992_EEPROM_DEFAULT; |
| 52 | + default: |
| 53 | return MT7996_EEPROM_DEFAULT; |
| 54 | + } |
| 55 | } |
| 56 | |
| 57 | int |
| 58 | @@ -125,7 +135,7 @@ mt7996_eeprom_load_default(struct mt7996_dev *dev) |
| 59 | goto out; |
| 60 | } |
| 61 | |
| 62 | - memcpy(eeprom, fw->data, MT7996_EEPROM_SIZE); |
| 63 | + memcpy(eeprom, fw->data, mt7996_eeprom_size(dev)); |
| 64 | dev->flash_mode = true; |
| 65 | |
| 66 | out: |
| 67 | @@ -141,7 +151,7 @@ static int mt7996_eeprom_load_flash(struct mt7996_dev *dev) |
| 68 | /* return > 0 for load success, return 0 for load failed, return < 0 for non memory */ |
| 69 | dev->bin_file_mode = mt76_check_bin_file_mode(&dev->mt76); |
| 70 | if (dev->bin_file_mode) { |
| 71 | - dev->mt76.eeprom.size = MT7996_EEPROM_SIZE; |
| 72 | + dev->mt76.eeprom.size = mt7996_eeprom_size(dev); |
| 73 | dev->mt76.eeprom.data = devm_kzalloc(dev->mt76.dev, dev->mt76.eeprom.size, |
| 74 | GFP_KERNEL); |
| 75 | if (!dev->mt76.eeprom.data) |
| 76 | @@ -153,7 +163,7 @@ static int mt7996_eeprom_load_flash(struct mt7996_dev *dev) |
| 77 | if (mt7996_check_eeprom(dev)) |
| 78 | return 0; |
| 79 | } else { |
| 80 | - ret = mt76_eeprom_init(&dev->mt76, MT7996_EEPROM_SIZE); |
| 81 | + ret = mt76_eeprom_init(&dev->mt76, mt7996_eeprom_size(dev)); |
| 82 | } |
| 83 | |
| 84 | return ret; |
| 85 | @@ -186,6 +196,7 @@ static int mt7996_eeprom_load(struct mt7996_dev *dev) |
| 86 | { |
| 87 | int ret; |
| 88 | u8 free_block_num; |
| 89 | + u16 eeprom_size = mt7996_eeprom_size(dev); |
| 90 | u32 block_num, i; |
| 91 | u32 eeprom_blk_size = MT7996_EEPROM_BLOCK_SIZE; |
| 92 | |
| 93 | @@ -200,7 +211,7 @@ static int mt7996_eeprom_load(struct mt7996_dev *dev) |
| 94 | return -EINVAL; |
| 95 | |
| 96 | /* read eeprom data from efuse */ |
| 97 | - block_num = DIV_ROUND_UP(MT7996_EEPROM_SIZE, eeprom_blk_size); |
| 98 | + block_num = DIV_ROUND_UP(eeprom_size, eeprom_blk_size); |
| 99 | for (i = 0; i < block_num; i++) { |
| 100 | ret = mt7996_mcu_get_eeprom(dev, i * eeprom_blk_size); |
| 101 | if (ret < 0) |
| 102 | diff --git a/mt7996/mcu.c b/mt7996/mcu.c |
| 103 | index 255d0ba..e9088ba 100644 |
| 104 | --- a/mt7996/mcu.c |
| 105 | +++ b/mt7996/mcu.c |
| 106 | @@ -3425,7 +3425,7 @@ static int mt7996_mcu_set_eeprom_flash(struct mt7996_dev *dev) |
| 107 | .tag = cpu_to_le16(UNI_EFUSE_BUFFER_MODE), |
| 108 | .buffer_mode = EE_MODE_BUFFER |
| 109 | }; |
| 110 | - u16 eeprom_size = MT7996_EEPROM_SIZE; |
| 111 | + u16 eeprom_size = mt7996_eeprom_size(dev); |
| 112 | u8 total = DIV_ROUND_UP(eeprom_size, PER_PAGE_SIZE); |
| 113 | u8 *eep = (u8 *)dev->mt76.eeprom.data; |
| 114 | int eep_len, i; |
| 115 | diff --git a/mt7996/mt7996.h b/mt7996/mt7996.h |
| 116 | index eb192eb..433d886 100644 |
| 117 | --- a/mt7996/mt7996.h |
| 118 | +++ b/mt7996/mt7996.h |
| 119 | @@ -44,7 +44,12 @@ |
| 120 | #define MT7996_EEPROM_DEFAULT "mediatek/mt7996/mt7996_eeprom.bin" |
| 121 | #define MT7996_EEPROM_DEFAULT_404 "mediatek/mt7996/mt7996_eeprom_dual_404.bin" |
| 122 | #define MT7996_EEPROM_DEFAULT_TM "mediatek/mt7996/mt7996_eeprom_tm.bin" |
| 123 | +#define MT7992_EEPROM_DEFAULT "mediatek/mt7996/mt7992_eeprom.bin" |
| 124 | +#define MT7992_EEPROM_DEFAULT_TM "mediatek/mt7996/mt7992_eeprom_tm.bin" |
| 125 | + |
| 126 | #define MT7996_EEPROM_SIZE 7680 |
| 127 | +#define MT7992_EEPROM_SIZE 7680 |
| 128 | + |
| 129 | #define MT7996_EEPROM_BLOCK_SIZE 16 |
| 130 | #define MT7996_TOKEN_SIZE 16384 |
| 131 | #define MT7996_HW_TOKEN_SIZE 8192 |
| 132 | @@ -643,6 +648,11 @@ void mt7996_mcu_scs_sta_poll(struct work_struct *work); |
| 133 | void mt7996_tm_rf_test_event(struct mt7996_dev *dev, struct sk_buff *skb); |
| 134 | #endif |
| 135 | |
| 136 | +static inline u16 mt7996_eeprom_size(struct mt7996_dev *dev) |
| 137 | +{ |
| 138 | + return is_mt7996(&dev->mt76) ? MT7996_EEPROM_SIZE : MT7992_EEPROM_SIZE; |
| 139 | +} |
| 140 | + |
| 141 | static inline u8 mt7996_max_interface_num(struct mt7996_dev *dev) |
| 142 | { |
| 143 | return min(MT7996_MAX_INTERFACES * (1 + dev->dbdc_support + dev->tbtc_support), |
| 144 | -- |
| 145 | 2.18.0 |
| 146 | |