diff mbox series

[09/10] net: rtl8139: Read HW address from EEPROM only on probe

Message ID 20200509203444.821733-9-marek.vasut+renesas@gmail.com
State Accepted
Commit d8afb8b28efb5af640d693e7f848732141482cfb
Headers show
Series [01/10] net: rtl8139: Factor out device name assignment | expand

Commit Message

Marek Vasut May 9, 2020, 8:34 p.m. UTC
Do not re-read the HW address from the EEPROM on every start of
transfer, otherwise the user will not be able to adjust ethaddr
as needed. Read the address only once, when the card is detected.

Signed-off-by: Marek Vasut <marek.vasut+renesas at gmail.com>
Cc: Joe Hershberger <joe.hershberger at ni.com>
---
 drivers/net/rtl8139.c | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)
diff mbox series

Patch

diff --git a/drivers/net/rtl8139.c b/drivers/net/rtl8139.c
index a6f17c499f..da22f912de 100644
--- a/drivers/net/rtl8139.c
+++ b/drivers/net/rtl8139.c
@@ -499,17 +499,11 @@  static int rtl8139_free_pkt_common(struct rtl8139_priv *priv, unsigned int len)
 
 static int rtl8139_init_common(struct rtl8139_priv *priv)
 {
-	unsigned short *ap = (unsigned short *)priv->enetaddr;
-	int addr_len, i;
 	u8 reg;
 
 	/* Bring the chip out of low-power mode. */
 	outb(0x00, priv->ioaddr + RTL_REG_CONFIG1);
 
-	addr_len = rtl8139_read_eeprom(priv, 0, 8) == 0x8129 ? 8 : 6;
-	for (i = 0; i < 3; i++)
-		*ap++ = le16_to_cpu(rtl8139_read_eeprom(priv, i + 7, addr_len));
-
 	rtl8139_reset(priv);
 
 	reg = inb(priv->ioaddr + RTL_REG_MEDIASTATUS);
@@ -518,9 +512,6 @@  static int rtl8139_init_common(struct rtl8139_priv *priv)
 		return -1;
 	}
 
-	/* Non-DM compatibility */
-	memcpy(priv->dev.enetaddr, priv->enetaddr, 6);
-
 	return 0;
 }
 
@@ -529,6 +520,19 @@  static void rtl8139_stop_common(struct rtl8139_priv *priv)
 	rtl8139_hw_reset(priv);
 }
 
+static void rtl8139_get_hwaddr(struct rtl8139_priv *priv)
+{
+	unsigned short *ap = (unsigned short *)priv->enetaddr;
+	int i, addr_len;
+
+	/* Bring the chip out of low-power mode. */
+	outb(0x00, priv->ioaddr + RTL_REG_CONFIG1);
+
+	addr_len = rtl8139_read_eeprom(priv, 0, 8) == 0x8129 ? 8 : 6;
+	for (i = 0; i < 3; i++)
+		*ap++ = le16_to_cpu(rtl8139_read_eeprom(priv, i + 7, addr_len));
+}
+
 static void rtl8139_name(char *str, int card_number)
 {
 	sprintf(str, "RTL8139#%u", card_number);
@@ -623,6 +627,11 @@  int rtl8139_initialize(bd_t *bis)
 		dev->recv = rtl8139_recv;
 		dev->mcast = rtl8139_bcast_addr;
 
+		rtl8139_get_hwaddr(priv);
+
+		/* Non-DM compatibility */
+		memcpy(priv->dev.enetaddr, priv->enetaddr, 6);
+
 		eth_register(dev);
 
 		card_number++;