diff options
author | Lucas Stach <l.stach@pengutronix.de> | 2018-01-26 14:32:32 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2018-01-30 07:53:49 +0100 |
commit | 1d7d0552920567dc6bab8a0fcd1fb10453d23dfc (patch) | |
tree | aecab5a7ff49ee7141cb0e473f68ad55f3da77a8 /drivers | |
parent | 6a187cf04b6acb0b8bcfa25f722fc686de20f9b4 (diff) | |
download | barebox-1d7d0552920567dc6bab8a0fcd1fb10453d23dfc.tar.gz barebox-1d7d0552920567dc6bab8a0fcd1fb10453d23dfc.tar.xz |
net/e1000: don't register EERPOM device if the content is invalid
If the EEPROM content isn't valid, there is no point in registering the
EEPROM device, as it will reject any read attempt anyway.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/e1000/eeprom.c | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/drivers/net/e1000/eeprom.c b/drivers/net/e1000/eeprom.c index b0408107bb..319910103e 100644 --- a/drivers/net/e1000/eeprom.c +++ b/drivers/net/e1000/eeprom.c @@ -1556,15 +1556,6 @@ int e1000_register_eeprom(struct e1000_hw *hw) eecd = e1000_read_reg(hw, E1000_EECD); - hw->eepromcdev.dev = hw->dev; - hw->eepromcdev.ops = &e1000_eeprom_ops; - hw->eepromcdev.name = xasprintf("e1000-eeprom%d", hw->dev->id); - hw->eepromcdev.size = 0x1000; - - ret = devfs_create(&hw->eepromcdev); - if (ret < 0) - return ret; - if (eecd & E1000_EECD_AUTO_RD) { if (eecd & E1000_EECD_EE_PRES) { if (eecd & E1000_EECD_FLASH_IN_USE) { @@ -1587,6 +1578,18 @@ int e1000_register_eeprom(struct e1000_hw *hw) dev_err(hw->dev, "Flash Auto-Read not done\n"); } + if (e1000_eeprom_valid(hw)) { + hw->eepromcdev.dev = hw->dev; + hw->eepromcdev.ops = &e1000_eeprom_ops; + hw->eepromcdev.name = xasprintf("e1000-eeprom%d", + hw->dev->id); + hw->eepromcdev.size = 0x1000; + + ret = devfs_create(&hw->eepromcdev); + if (ret < 0) + return ret; + } + if (eecd & E1000_EECD_I210_FLASH_DETECTED) { hw->mtd.parent = hw->dev; hw->mtd.read = e1000_mtd_read; @@ -1609,18 +1612,22 @@ int e1000_register_eeprom(struct e1000_hw *hw) ret = add_mtd_device(&hw->mtd, "e1000-nor", DEVICE_ID_DYNAMIC); - if (ret) { - devfs_remove(&hw->eepromcdev); - return ret; - } + if (ret) + goto out_eeprom; } ret = e1000_register_invm(hw); - if (ret < 0) { - if (eecd & E1000_EECD_I210_FLASH_DETECTED) - del_mtd_device(&hw->mtd); + if (ret < 0) + goto out_mtd; + + return E1000_SUCCESS; + +out_mtd: + if (eecd & E1000_EECD_I210_FLASH_DETECTED) + del_mtd_device(&hw->mtd); +out_eeprom: + if (e1000_eeprom_valid(hw)) devfs_remove(&hw->eepromcdev); - } return ret; } |