summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorMarek Vasut <marek.vasut+renesas@gmail.com>2020-04-12 22:58:27 +0200
committermarex <marex@desktop.lan>2020-05-01 12:35:21 +0200
commit38b306db2334a6565b326874eb4ff536e28654ba (patch)
treef976336b95826fa2fca62e7aa654ac359f10dfcf /drivers
parent661479ffc1a0b7ea159dae1ca34d61d009896870 (diff)
net: rtl8139: Factor out hardware reset
This hardware reset and reset-wait implementation was twice in the driver, factor it out into a separate function. This really should use wait_for_bit() eventually and return -ETIMEDOUT, but thus far, handling of any of this is missing from the driver. This must be added later. Thus far, no functional change. Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com> Cc: Joe Hershberger <joe.hershberger@ni.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/rtl8139.c28
1 files changed, 11 insertions, 17 deletions
diff --git a/drivers/net/rtl8139.c b/drivers/net/rtl8139.c
index 6aed7bd895..68ef9eea25 100644
--- a/drivers/net/rtl8139.c
+++ b/drivers/net/rtl8139.c
@@ -370,16 +370,13 @@ static void rtl8139_set_rx_mode(struct eth_device *dev)
outl(0xffffffff, ioaddr + RTL_REG_MAR0 + 4);
}
-static void rtl8139_reset(struct eth_device *dev)
+static void rtl8139_hw_reset(struct eth_device *dev)
{
u8 reg;
int i;
outb(RTL_REG_CHIPCMD_CMDRESET, ioaddr + RTL_REG_CHIPCMD);
- cur_rx = 0;
- cur_tx = 0;
-
/* Give the chip 10ms to finish the reset. */
for (i = 0; i < 100; i++) {
reg = inb(ioaddr + RTL_REG_CHIPCMD);
@@ -388,7 +385,16 @@ static void rtl8139_reset(struct eth_device *dev)
udelay(100);
}
+}
+
+static void rtl8139_reset(struct eth_device *dev)
+{
+ int i;
+
+ cur_rx = 0;
+ cur_tx = 0;
+ rtl8139_hw_reset(dev);
for (i = 0; i < ETH_ALEN; i++)
outb(dev->enetaddr[i], ioaddr + RTL_REG_MAC0 + i);
@@ -570,19 +576,7 @@ static int rtl8139_recv(struct eth_device *dev)
static void rtl8139_stop(struct eth_device *dev)
{
- u8 reg;
- int i;
-
ioaddr = dev->iobase;
- /* reset the chip */
- outb(RTL_REG_CHIPCMD_CMDRESET, ioaddr + RTL_REG_CHIPCMD);
-
- /* Give the chip 10ms to finish the reset. */
- for (i = 0; i < 100; i++) {
- reg = inb(ioaddr + RTL_REG_CHIPCMD);
- if (!(reg & RTL_REG_CHIPCMD_CMDRESET))
- break;
- udelay (100); /* wait 100us */
- }
+ rtl8139_hw_reset(dev);
}