[U-Boot] [PATCH u-boot git] dm9000 EEPROM reading bugfix

From: David Brownell dbrownell@users.sourceforge.net
Make the U-Boot dm9000 driver read addresses from EEPROM just like Linux does ... read six bytes, instead of reading twelve bytes then discarding every one.
Using the right Ethernet address is a big win.
Signed-off-by: David Brownell dbrownell@users.sourceforge.net --- drivers/net/dm9000x.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
--- a/drivers/net/dm9000x.c +++ b/drivers/net/dm9000x.c @@ -113,7 +113,7 @@ void eth_halt(void); static int dm9000_probe(void); static u16 phy_read(int); static void phy_write(int, u16); -u16 read_srom_word(int); +static void read_srom_word(int, u8 *); static u8 DM9000_ior(int); static void DM9000_iow(int reg, u8 value);
@@ -348,8 +348,8 @@ eth_init(bd_t * bd) /* Set Node address */ if (!eth_getenv_enetaddr("ethaddr", enetaddr)) { #if !defined(CONFIG_AT91SAM9261EK) - for (i = 0; i < 6; i++) - enetaddr[i] = read_srom_word(i); + for (i = 0; i < 3; i++) + read_srom_word(i, enetaddr + 2 * i); eth_setenv_enetaddr("ethaddr", enetaddr); #endif } @@ -541,14 +541,14 @@ eth_rx(void) /* Read a word data from SROM */ -u16 -read_srom_word(int offset) +static void read_srom_word(int offset, u8 *to) { DM9000_iow(DM9000_EPAR, offset); DM9000_iow(DM9000_EPCR, 0x4); udelay(8000); DM9000_iow(DM9000_EPCR, 0x0); - return (DM9000_ior(DM9000_EPDRL) + (DM9000_ior(DM9000_EPDRH) << 8)); + to[0] = DM9000_ior(DM9000_EPDRL); + to[1] = DM9000_ior(DM9000_EPDRH); }
void

On 16:04 Sun 12 Apr , David Brownell wrote:
On Sunday 12 April 2009, David Brownell wrote:
... read six bytes, instead of reading twelve
bytes then discarding every one.
Urgh, editing goof. Should read "discarding every other one".
please send a new version
Best Regards, J.

From: David Brownell dbrownell@users.sourceforge.net
Make the U-Boot dm9000 driver read addresses from EEPROM just like Linux does ... read six bytes, instead of reading twelve bytes and then discarding every other one.
Using the right Ethernet address is a big win.
Signed-off-by: David Brownell dbrownell@users.sourceforge.net --- drivers/net/dm9000x.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
--- a/drivers/net/dm9000x.c +++ b/drivers/net/dm9000x.c @@ -113,7 +113,7 @@ void eth_halt(void); static int dm9000_probe(void); static u16 phy_read(int); static void phy_write(int, u16); -u16 read_srom_word(int); +static void read_srom_word(int, u8 *); static u8 DM9000_ior(int); static void DM9000_iow(int reg, u8 value);
@@ -348,8 +348,8 @@ eth_init(bd_t * bd) /* Set Node address */ if (!eth_getenv_enetaddr("ethaddr", enetaddr)) { #if !defined(CONFIG_AT91SAM9261EK) - for (i = 0; i < 6; i++) - enetaddr[i] = read_srom_word(i); + for (i = 0; i < 3; i++) + read_srom_word(i, enetaddr + 2 * i); eth_setenv_enetaddr("ethaddr", enetaddr); #endif } @@ -541,14 +541,14 @@ eth_rx(void) /* Read a word data from SROM */ -u16 -read_srom_word(int offset) +static void read_srom_word(int offset, u8 *to) { DM9000_iow(DM9000_EPAR, offset); DM9000_iow(DM9000_EPCR, 0x4); udelay(8000); DM9000_iow(DM9000_EPCR, 0x0); - return (DM9000_ior(DM9000_EPDRL) + (DM9000_ior(DM9000_EPDRH) << 8)); + to[0] = DM9000_ior(DM9000_EPDRL); + to[1] = DM9000_ior(DM9000_EPDRH); }
void

On 23:15 Thu 16 Apr , David Brownell wrote:
From: David Brownell dbrownell@users.sourceforge.net
Make the U-Boot dm9000 driver read addresses from EEPROM just like Linux does ... read six bytes, instead of reading twelve bytes and then discarding every other one.
Using the right Ethernet address is a big win.
Signed-off-by: David Brownell dbrownell@users.sourceforge.net
look fine for me
Ben any comments?
Best Regards, J.

Jean-Christophe PLAGNIOL-VILLARD wrote:
On 23:15 Thu 16 Apr , David Brownell wrote:
From: David Brownell dbrownell@users.sourceforge.net
Make the U-Boot dm9000 driver read addresses from EEPROM just like Linux does ... read six bytes, instead of reading twelve bytes and then discarding every other one.
Using the right Ethernet address is a big win.
:)
Signed-off-by: David Brownell dbrownell@users.sourceforge.net
look fine for me
Ben any comments?
Best Regards, J.
I'll apply to net/next
regards, Ben

Wolfgang,
David Brownell wrote:
From: David Brownell dbrownell@users.sourceforge.net
Make the U-Boot dm9000 driver read addresses from EEPROM just like Linux does ... read six bytes, instead of reading twelve bytes and then discarding every other one.
Using the right Ethernet address is a big win.
Signed-off-by: David Brownell dbrownell@users.sourceforge.net
drivers/net/dm9000x.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
--- a/drivers/net/dm9000x.c +++ b/drivers/net/dm9000x.c @@ -113,7 +113,7 @@ void eth_halt(void); static int dm9000_probe(void); static u16 phy_read(int); static void phy_write(int, u16); -u16 read_srom_word(int); +static void read_srom_word(int, u8 *); static u8 DM9000_ior(int); static void DM9000_iow(int reg, u8 value);
@@ -348,8 +348,8 @@ eth_init(bd_t * bd) /* Set Node address */ if (!eth_getenv_enetaddr("ethaddr", enetaddr)) { #if !defined(CONFIG_AT91SAM9261EK)
for (i = 0; i < 6; i++)
enetaddr[i] = read_srom_word(i);
for (i = 0; i < 3; i++)
eth_setenv_enetaddr("ethaddr", enetaddr);read_srom_word(i, enetaddr + 2 * i);
#endif } @@ -541,14 +541,14 @@ eth_rx(void) /* Read a word data from SROM */ -u16 -read_srom_word(int offset) +static void read_srom_word(int offset, u8 *to) { DM9000_iow(DM9000_EPAR, offset); DM9000_iow(DM9000_EPCR, 0x4); udelay(8000); DM9000_iow(DM9000_EPCR, 0x0);
- return (DM9000_ior(DM9000_EPDRL) + (DM9000_ior(DM9000_EPDRH) << 8));
- to[0] = DM9000_ior(DM9000_EPDRL);
- to[1] = DM9000_ior(DM9000_EPDRH);
}
void
Please apply this directly. I incorrectly looked at it as a feature rather than a bug fix.
regards, Ben

Dear David Brownell,
In message 200904162315.15209.david-b@pacbell.net you wrote:
From: David Brownell dbrownell@users.sourceforge.net
Make the U-Boot dm9000 driver read addresses from EEPROM just like Linux does ... read six bytes, instead of reading twelve bytes and then discarding every other one.
Using the right Ethernet address is a big win.
Signed-off-by: David Brownell dbrownell@users.sourceforge.net
drivers/net/dm9000x.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
Applied, thanks.
Best regards,
Wolfgang Denk
participants (4)
-
Ben Warren
-
David Brownell
-
Jean-Christophe PLAGNIOL-VILLARD
-
Wolfgang Denk