summaryrefslogtreecommitdiff
path: root/board
diff options
context:
space:
mode:
Diffstat (limited to 'board')
-rw-r--r--board/netstar/eeprom.c68
1 files changed, 37 insertions, 31 deletions
diff --git a/board/netstar/eeprom.c b/board/netstar/eeprom.c
index adb01b9..ad301eb 100644
--- a/board/netstar/eeprom.c
+++ b/board/netstar/eeprom.c
@@ -28,40 +28,50 @@
#include <net.h>
#include "../drivers/net/smc91111.h"
-static u16 read_eeprom_reg(struct eth_device *dev, u16 reg)
+static struct eth_device dev = {
+ .iobase = CONFIG_SMC91111_BASE
+};
+
+static u16 read_eeprom_reg(u16 reg)
{
int timeout;
- SMC_SELECT_BANK(dev, 2);
- SMC_outw(dev, reg, PTR_REG);
+ SMC_SELECT_BANK(&dev, 2);
+ SMC_outw(&dev, reg, PTR_REG);
+
+ SMC_SELECT_BANK(&dev, 1);
+ SMC_outw(&dev, SMC_inw(&dev, CTL_REG) | CTL_EEPROM_SELECT |
+ CTL_RELOAD, CTL_REG);
- SMC_SELECT_BANK(dev, 1);
- SMC_outw(dev, SMC_inw (dev, CTL_REG) | CTL_EEPROM_SELECT | CTL_RELOAD,
- CTL_REG);
timeout = 100;
- while((SMC_inw (dev, CTL_REG) & CTL_RELOAD) && --timeout)
+
+ while ((SMC_inw(&dev, CTL_REG) & CTL_RELOAD) && --timeout)
udelay(100);
if (timeout == 0) {
printf("Timeout Reading EEPROM register %02x\n", reg);
return 0;
}
- return SMC_inw (dev, GP_REG);
+ return SMC_inw(&dev, GP_REG);
}
-static int write_eeprom_reg(struct eth_device *dev, u16 value, u16 reg)
+static int write_eeprom_reg(u16 value, u16 reg)
{
int timeout;
- SMC_SELECT_BANK(dev, 2);
- SMC_outw(dev, reg, PTR_REG);
+ SMC_SELECT_BANK(&dev, 2);
+ SMC_outw(&dev, reg, PTR_REG);
+
+ SMC_SELECT_BANK(&dev, 1);
+
+ SMC_outw(&dev, value, GP_REG);
+ SMC_outw(&dev, SMC_inw(&dev, CTL_REG) | CTL_EEPROM_SELECT |
+ CTL_STORE, CTL_REG);
- SMC_SELECT_BANK(dev, 1);
- SMC_outw(dev, value, GP_REG);
- SMC_outw(dev, SMC_inw (dev, CTL_REG) | CTL_EEPROM_SELECT | CTL_STORE, CTL_REG);
timeout = 100;
- while ((SMC_inw(dev, CTL_REG) & CTL_STORE) && --timeout)
- udelay (100);
+
+ while ((SMC_inw(&dev, CTL_REG) & CTL_STORE) && --timeout)
+ udelay(100);
if (timeout == 0) {
printf("Timeout Writing EEPROM register %02x\n", reg);
return 0;
@@ -70,17 +80,17 @@ static int write_eeprom_reg(struct eth_device *dev, u16 value, u16 reg)
return 1;
}
-static int write_data(struct eth_device *dev, u16 *buf, int len)
+static int write_data(u16 *buf, int len)
{
u16 reg = 0x23;
while (len--)
- write_eeprom_reg(dev, *buf++, reg++);
+ write_eeprom_reg(*buf++, reg++);
return 0;
}
-static int verify_macaddr(struct eth_device *dev, char *s)
+static int verify_macaddr(char *s)
{
u16 reg;
int i, err = 0;
@@ -88,7 +98,7 @@ static int verify_macaddr(struct eth_device *dev, char *s)
printf("MAC Address: ");
err = i = 0;
for (i = 0; i < 3; i++) {
- reg = read_eeprom_reg(dev, 0x20 + i);
+ reg = read_eeprom_reg(0x20 + i);
printf("%02x:%02x%c", reg & 0xff, reg >> 8, i != 2 ? ':' : '\n');
if (s)
err |= reg != ((u16 *)s)[i];
@@ -97,7 +107,7 @@ static int verify_macaddr(struct eth_device *dev, char *s)
return err ? 0 : 1;
}
-static int set_mac(struct eth_device *dev, char *s)
+static int set_mac(char *s)
{
int i;
char *e, eaddr[6];
@@ -109,7 +119,7 @@ static int set_mac(struct eth_device *dev, char *s)
}
for (i = 0; i < 3; i++)
- write_eeprom_reg(dev, *(((u16 *)eaddr) + i), 0x20 + i);
+ write_eeprom_reg(*(((u16 *)eaddr) + i), 0x20 + i);
return 0;
}
@@ -145,10 +155,6 @@ int eeprom(int argc, char *argv[])
int i, len, ret;
unsigned char buf[58], *p;
- struct eth_device dev = {
- .iobase = CONFIG_SMC91111_BASE
- };
-
app_startup(argv);
if (get_version() != XF_VERSION) {
printf("Wrong XF_VERSION.\n");
@@ -157,14 +163,14 @@ int eeprom(int argc, char *argv[])
return 1;
}
- if ((SMC_inw (&dev, BANK_SELECT) & 0xFF00) != 0x3300) {
+ if ((SMC_inw(&dev, BANK_SELECT) & 0xFF00) != 0x3300) {
printf("SMSC91111 not found.\n");
return 2;
}
/* Called without parameters - print MAC address */
if (argc < 2) {
- verify_macaddr(&dev, NULL);
+ verify_macaddr(NULL);
return 0;
}
@@ -198,8 +204,8 @@ int eeprom(int argc, char *argv[])
}
/* First argument (MAC) is mandatory */
- set_mac(&dev, argv[1]);
- if (verify_macaddr(&dev, argv[1])) {
+ set_mac(argv[1]);
+ if (verify_macaddr(argv[1])) {
printf("*** MAC address does not match! ***\n");
return 4;
}
@@ -207,7 +213,7 @@ int eeprom(int argc, char *argv[])
while (len--)
*p++ = 0;
- write_data(&dev, (u16 *)buf, sizeof(buf) >> 1);
+ write_data((u16 *)buf, sizeof(buf) >> 1);
return 0;
}