lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 3 Jan 2019 02:10:28 +0100 From: Marek Vasut <marex@...x.de> To: netdev@...r.kernel.org Cc: Marek Vasut <marex@...x.de>, "David S . Miller" <davem@...emloft.net>, Nisar Sayed <Nisar.Sayed@...rochip.com>, Woojung Huh <Woojung.Huh@...rochip.com>, Andrew Lunn <andrew@...n.ch>, Florian Fainelli <f.fainelli@...il.com>, linux-usb@...r.kernel.org Subject: [PATCH 07/19] usbnet: smsc95xx: Split the reset function The smsc95xx_reset() is called either during bind or later during the driver operation. However, the MII structure can be populated only once, when the smsc95xx_reset() is called from the drivers bind function. Split the reset function to allow filling the MII structure only once. This is done in preparation of phydev conversion, where the code will connect to PHY between those two halves of the reset function. Signed-off-by: Marek Vasut <marex@...x.de> Cc: David S. Miller <davem@...emloft.net> Cc: Nisar Sayed <Nisar.Sayed@...rochip.com> Cc: Woojung Huh <Woojung.Huh@...rochip.com> Cc: Andrew Lunn <andrew@...n.ch> Cc: Florian Fainelli <f.fainelli@...il.com> Cc: linux-usb@...r.kernel.org To: netdev@...r.kernel.org --- drivers/net/usb/smsc95xx.c | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c index 551d05eb258e..e40cde490a42 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c @@ -944,14 +944,6 @@ static int smsc95xx_phy_initialize(struct usbnet *dev) { int bmcr, ret, timeout = 0; - /* Initialize MII structure */ - dev->mii.dev = dev->net; - dev->mii.mdio_read = smsc95xx_mdio_read; - dev->mii.mdio_write = smsc95xx_mdio_write; - dev->mii.phy_id_mask = 0x1f; - dev->mii.reg_num_mask = 0x1f; - dev->mii.phy_id = SMSC95XX_INTERNAL_PHY_ID; - /* reset phy and wait for reset to complete */ smsc95xx_mdio_write(dev->net, dev->mii.phy_id, MII_BMCR, BMCR_RESET); @@ -985,7 +977,7 @@ static int smsc95xx_phy_initialize(struct usbnet *dev) return 0; } -static int smsc95xx_reset(struct usbnet *dev) +static int smsc95xx_reset_pre(struct usbnet *dev) { struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); u32 read_buf, write_buf, burst_cap; @@ -1165,6 +1157,13 @@ static int smsc95xx_reset(struct usbnet *dev) } smsc95xx_set_multicast(dev->net); + return 0; +} + +static int smsc95xx_reset_post(struct usbnet *dev) +{ + u32 read_buf; + int ret; ret = smsc95xx_phy_initialize(dev); if (ret < 0) { @@ -1199,6 +1198,25 @@ static int smsc95xx_reset(struct usbnet *dev) return 0; } +static int smsc95xx_reset(struct usbnet *dev) +{ + int ret; + + ret = smsc95xx_reset_pre(dev); + if (ret) + return ret; + + /* Initialize MII structure */ + dev->mii.dev = dev->net; + dev->mii.mdio_read = smsc95xx_mdio_read; + dev->mii.mdio_write = smsc95xx_mdio_write; + dev->mii.phy_id_mask = 0x1f; + dev->mii.reg_num_mask = 0x1f; + dev->mii.phy_id = SMSC95XX_INTERNAL_PHY_ID; + + return smsc95xx_reset_post(dev); +} + static const struct net_device_ops smsc95xx_netdev_ops = { .ndo_open = usbnet_open, .ndo_stop = usbnet_stop, -- 2.19.2
Powered by blists - more mailing lists