lan78xx: This series of patches are for lan78xx driver.
v5 cover lan78xx: This series of patches are for lan78xx driver.
This series of patches are for lan78xx driver.
These patches fixes potential issues associated with lan78xx driver.
v5
- Updated changes as per comments
v4
- Updated changes to handle return values as per comments
- Updated EEPROM write handling as per comments
v3
- Updated chagnes as per comments
v2
- Added patch version information
- Added fixes tag
- Updated patch description
- Updated chagnes as per comments
v1
- Splitted patches as per comments
- Dropped "fixed_phy device support" and "Fix for system suspend" changes
Nisar Sayed (3):
lan78xx: Fix for eeprom read/write when device auto suspend
lan78xx: Allow EEPROM write for less than MAX_EEPROM_SIZE
lan78xx: Use default values loaded from EEPROM/OTP after reset
drivers/net/usb/lan78xx.c | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-)
Signature · 1 line
2.14.1
PATCH v5 1/3 lan78xx: Fix for eeprom read/write when device auto suspend
Fix for eeprom read/write when device auto suspend
--- drivers/net/usb/lan78xx.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-)
drivers/net/usb/lan78xx.c +20 -4
@@ -1265,30 +1265,46 @@ static int lan78xx_ethtool_get_eeprom(struct net_device *netdev, struct ethtool_eeprom *ee, u8 *data) { struct lan78xx_net *dev = netdev_priv(netdev); +int ret; + + ret =usb_autopm_get_interface (dev->intf); +if (ret) +return ret; ee->magic =LAN78XX_EEPROM_MAGIC ; -return lan78xx_read_raw_eeprom (dev, ee->offset, ee->len, data); + ret =lan78xx_read_raw_eeprom (dev, ee->offset, ee->len, data); + +usb_autopm_put_interface (dev->intf); + +return ret; }static int lan78xx_ethtool_set_eeprom (struct net_device *netdev,struct ethtool_eeprom *ee,u8 *data) {struct lan78xx_net *dev =netdev_priv (netdev); +int ret; + + ret =usb_autopm_get_interface (dev->intf); +if (ret) +return ret;/* Allow entire eeprom update only */ if ((ee->magic ==LAN78XX_EEPROM_MAGIC ) && (ee->offset ==0 ) && (ee->len ==512 ) && (data[0 ] ==EEPROM_INDICATOR )) -return lan78xx_write_raw_eeprom (dev, ee->offset, ee->len, data); + ret =lan78xx_write_raw_eeprom (dev, ee->offset, ee->len, data);else if ((ee->magic ==LAN78XX_OTP_MAGIC ) && (ee->offset ==0 ) && (ee->len ==512 ) && (data[0 ] ==OTP_INDICATOR_1 )) -return lan78xx_write_raw_otp (dev, ee->offset, ee->len, data); + ret =lan78xx_write_raw_otp (dev, ee->offset, ee->len, data); -return -EINVAL ; +usb_autopm_put_interface (dev->intf); + +return ret; } static void lan78xx_get_strings(struct net_device *netdev, u32 stringset,
Signature · 1 line
2.14.1
PATCH v5 2/3 lan78xx: Allow EEPROM write for less than MAX_EEPROM_SIZE
In reply to Nisar SayedAllow EEPROM write for less than MAX_EEPROM_SIZE
--- drivers/net/usb/lan78xx.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)
drivers/net/usb/lan78xx.c +4 -5
@@ -1290,11 +1290,10 @@ static int lan78xx_ethtool_set_eeprom(struct net_device *netdev,if (ret)return ret; -/* Allow entire eeprom update only */ -if ((ee->magic ==LAN78XX_EEPROM_MAGIC ) && - (ee->offset ==0 ) && - (ee->len ==512 ) && - (data[0 ] ==EEPROM_INDICATOR )) +/* Invalid EEPROM_INDICATOR at offset zero will result in a failure +* to load data from EEPROM +*/ +if (ee->magic ==LAN78XX_EEPROM_MAGIC ) ret =lan78xx_write_raw_eeprom (dev, ee->offset, ee->len, data); else if ((ee->magic == LAN78XX_OTP_MAGIC) && (ee->offset == 0) &&
Signature · 1 line
2.14.1
PATCH v5 3/3 lan78xx: Use default values loaded from EEPROM/OTP after reset
In reply to Nisar SayedUse default value of auto duplex and auto speed values loaded from EEPROM/OTP after reset. The LAN78xx allows platform configurations to be loaded from EEPROM/OTP.
Ex: When external phy is connected, the MAC can be configured to have correct auto speed, auto duplex, auto polarity configured from the EEPROM/OTP.
--- drivers/net/usb/lan78xx.c | 1 - 1 file changed, 1 deletion(-)
drivers/net/usb/lan78xx.c +0 -1
@@ -2449,7 +2449,6 @@ static int lan78xx_reset(struct lan78xx_net *dev)/* LAN7801 only has RGMII mode */ if (dev->chipid ==ID_REV_CHIP_ID_7801_ ) buf &= ~MAC_CR_GMII_EN_ ; - buf |=MAC_CR_AUTO_DUPLEX_ |MAC_CR_AUTO_SPEED_ ; ret =lan78xx_write_reg (dev,MAC_CR , buf); ret =lan78xx_read_reg (dev,MAC_TX , &buf);
Signature · 1 line
2.14.1
David Miller
maintainerFrom: Nisar Sayed <[email protected]>
Date: Thu, 21 Sep 2017 02:36:35 +0530
Quoted 3 lines
This series of patches are for lan78xx driver.
These patches fixes potential issues associated with lan78xx driver.
Series applied, thank you.