diff options
Diffstat (limited to 'drivers/net/sfc/ethtool.c')
-rw-r--r-- | drivers/net/sfc/ethtool.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/net/sfc/ethtool.c b/drivers/net/sfc/ethtool.c index fa98af58223e..abd8fcd6e62d 100644 --- a/drivers/net/sfc/ethtool.c +++ b/drivers/net/sfc/ethtool.c | |||
@@ -172,10 +172,7 @@ static struct efx_ethtool_stat efx_ethtool_stats[] = { | |||
172 | /* Number of ethtool statistics */ | 172 | /* Number of ethtool statistics */ |
173 | #define EFX_ETHTOOL_NUM_STATS ARRAY_SIZE(efx_ethtool_stats) | 173 | #define EFX_ETHTOOL_NUM_STATS ARRAY_SIZE(efx_ethtool_stats) |
174 | 174 | ||
175 | /* EEPROM range with gPXE configuration */ | ||
176 | #define EFX_ETHTOOL_EEPROM_MAGIC 0xEFAB | 175 | #define EFX_ETHTOOL_EEPROM_MAGIC 0xEFAB |
177 | #define EFX_ETHTOOL_EEPROM_MIN 0x100U | ||
178 | #define EFX_ETHTOOL_EEPROM_MAX 0x400U | ||
179 | 176 | ||
180 | /************************************************************************** | 177 | /************************************************************************** |
181 | * | 178 | * |
@@ -545,8 +542,8 @@ static int efx_ethtool_get_eeprom_len(struct net_device *net_dev) | |||
545 | 542 | ||
546 | if (!spi) | 543 | if (!spi) |
547 | return 0; | 544 | return 0; |
548 | return min(spi->size, EFX_ETHTOOL_EEPROM_MAX) - | 545 | return min(spi->size, EFX_EEPROM_BOOTCONFIG_END) - |
549 | min(spi->size, EFX_ETHTOOL_EEPROM_MIN); | 546 | min(spi->size, EFX_EEPROM_BOOTCONFIG_START); |
550 | } | 547 | } |
551 | 548 | ||
552 | static int efx_ethtool_get_eeprom(struct net_device *net_dev, | 549 | static int efx_ethtool_get_eeprom(struct net_device *net_dev, |
@@ -557,8 +554,10 @@ static int efx_ethtool_get_eeprom(struct net_device *net_dev, | |||
557 | size_t len; | 554 | size_t len; |
558 | int rc; | 555 | int rc; |
559 | 556 | ||
560 | rc = falcon_spi_read(spi, eeprom->offset + EFX_ETHTOOL_EEPROM_MIN, | 557 | mutex_lock(&efx->spi_lock); |
558 | rc = falcon_spi_read(spi, eeprom->offset + EFX_EEPROM_BOOTCONFIG_START, | ||
561 | eeprom->len, &len, buf); | 559 | eeprom->len, &len, buf); |
560 | mutex_unlock(&efx->spi_lock); | ||
562 | eeprom->magic = EFX_ETHTOOL_EEPROM_MAGIC; | 561 | eeprom->magic = EFX_ETHTOOL_EEPROM_MAGIC; |
563 | eeprom->len = len; | 562 | eeprom->len = len; |
564 | return rc; | 563 | return rc; |
@@ -575,8 +574,10 @@ static int efx_ethtool_set_eeprom(struct net_device *net_dev, | |||
575 | if (eeprom->magic != EFX_ETHTOOL_EEPROM_MAGIC) | 574 | if (eeprom->magic != EFX_ETHTOOL_EEPROM_MAGIC) |
576 | return -EINVAL; | 575 | return -EINVAL; |
577 | 576 | ||
578 | rc = falcon_spi_write(spi, eeprom->offset + EFX_ETHTOOL_EEPROM_MIN, | 577 | mutex_lock(&efx->spi_lock); |
578 | rc = falcon_spi_write(spi, eeprom->offset + EFX_EEPROM_BOOTCONFIG_START, | ||
579 | eeprom->len, &len, buf); | 579 | eeprom->len, &len, buf); |
580 | mutex_unlock(&efx->spi_lock); | ||
580 | eeprom->len = len; | 581 | eeprom->len = len; |
581 | return rc; | 582 | return rc; |
582 | } | 583 | } |