diff --git a/mt7915/eeprom.c b/mt7915/eeprom.c index 69a0bee4..c72e6ade 100644 --- a/mt7915/eeprom.c +++ b/mt7915/eeprom.c @@ -150,11 +150,11 @@ static int mt7915_eeprom_load(struct mt7915_dev *dev) if (free_block_num >= 29) return -EINVAL; - /* read eeprom data from efuse */ + /* read eeprom data from efuse, skipping unwritten blocks */ 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/mt7915/mcu.c b/mt7915/mcu.c index 682ee5c2..14ca636a 100644 --- a/mt7915/mcu.c +++ b/mt7915/mcu.c @@ -2957,6 +2957,11 @@ int mt7915_mcu_get_eeprom(struct mt7915_dev *dev, u32 offset, u8 *read_buf) return -EINVAL; } + if (!le32_to_cpu(res->valid)) { + dev_kfree_skb(skb); + return -ENODATA; + } + if (!buf) { u32 addr = le32_to_cpu(res->addr);