mt7915_mcu_get_eeprom() ignores the valid flag of the EFUSE_ACCESS response, and copies undefined data for an unwritten efuse block. Return -ENODATA for an invalid block. mt7915_eeprom_load() skips the block and leaves its eeprom range untouched. mt7915_eeprom_has_background_radar() then reports no background radar on MT7906. Fixes: e57b7901469f ("mt76: add mac80211 driver for MT7915 PCIe-based chipsets") Signed-off-by: Felix Fietkau --- drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c | 2 +- drivers/net/wireless/mediatek/mt76/mt7915/mcu.c | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c index 145d14a1012d..0ab02580423f 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c @@ -154,7 +154,7 @@ static int mt7915_eeprom_load(struct mt7915_dev *dev) block_num = DIV_ROUND_UP(eeprom_size, eeprom_blk_size); for (i = 0; i < block_num; i++) { ret = mt7915_mcu_get_eeprom(dev, i * eeprom_blk_size, NULL); - if (ret < 0) + if (ret < 0 && ret != -ENODATA) return ret; } } diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c index 67b470f4bd9b..e66968b819da 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c @@ -2952,6 +2952,11 @@ int mt7915_mcu_get_eeprom(struct mt7915_dev *dev, u32 offset, u8 *read_buf) } res = (struct mt7915_mcu_eeprom_info *)skb->data; + if (!le32_to_cpu(res->valid)) { + dev_kfree_skb(skb); + return -ENODATA; + } + if (!buf) { u32 addr = le32_to_cpu(res->addr); -- 2.47.3