mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-11 07:34:31 +00:00
net: rtl8139: Read HW address from EEPROM only on probe
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@gmail.com> Cc: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
parent
2df3a51510
commit
d8afb8b28e
1 changed files with 18 additions and 9 deletions
|
@ -502,17 +502,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);
|
||||
|
@ -521,9 +515,6 @@ static int rtl8139_init_common(struct rtl8139_priv *priv)
|
|||
return -1;
|
||||
}
|
||||
|
||||
/* Non-DM compatibility */
|
||||
memcpy(priv->dev.enetaddr, priv->enetaddr, 6);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -532,6 +523,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);
|
||||
|
@ -626,6 +630,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++;
|
||||
|
|
Loading…
Reference in a new issue