summaryrefslogtreecommitdiff
path: root/board/voiceblue/eeprom.c
diff options
context:
space:
mode:
Diffstat (limited to 'board/voiceblue/eeprom.c')
-rw-r--r--board/voiceblue/eeprom.c97
1 files changed, 50 insertions, 47 deletions
diff --git a/board/voiceblue/eeprom.c b/board/voiceblue/eeprom.c
index 2ae46d1..f7e0ba5 100644
--- a/board/voiceblue/eeprom.c
+++ b/board/voiceblue/eeprom.c
@@ -22,75 +22,82 @@
* Some code shamelessly stolen back from Robin Getz.
*/
-#define DEBUG
-
#include <common.h>
#include <exports.h>
#include <timestamp.h>
#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);
+ printf("Timeout reading 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);
+ printf("Timeout writing register %02x\n", reg);
return 0;
}
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;
- printf("MAC Address: ");
- err = i = 0;
+ puts("HWaddr: ");
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];
@@ -99,7 +106,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];
@@ -111,7 +118,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;
}
@@ -147,34 +154,30 @@ 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");
- printf("Application expects ABI version %d\n", XF_VERSION);
- printf("Actual U-Boot ABI version %d\n", (int)get_version());
+ i = get_version();
+ if (i != XF_VERSION) {
+ printf("Using ABI version %d, but U-Boot provides %d\n",
+ XF_VERSION, i);
return 1;
}
- if ((SMC_inw (&dev, BANK_SELECT) & 0xFF00) != 0x3300) {
- printf("SMSC91111 not found.\n");
+ if ((SMC_inw(&dev, BANK_SELECT) & 0xFF00) != 0x3300) {
+ puts("SMSC91111 not found\n");
return 2;
}
/* Called without parameters - print MAC address */
if (argc < 2) {
- verify_macaddr(&dev, NULL);
+ verify_macaddr(NULL);
return 0;
}
/* Print help message */
if (argv[1][1] == 'h') {
- printf("VoiceBlue EEPROM writer\n");
- printf("Built: %s at %s\n", U_BOOT_DATE, U_BOOT_TIME);
- printf("Usage:\n\t<mac_address> [<element_1>] [<...>]\n");
+ puts("VoiceBlue EEPROM writer\n"
+ "Built: " U_BOOT_DATE " at " U_BOOT_TIME "\n"
+ "Usage:\n\t<mac_address> [<element_1>] [<...>]\n");
return 0;
}
@@ -191,7 +194,7 @@ int eeprom(int argc, char *argv[])
printf("Element %d: odd character count\n", i - 1);
return 3;
case -3:
- printf("Out of EEPROM memory\n");
+ puts("Out of EEPROM memory\n");
return 3;
default:
p += ret;
@@ -200,16 +203,16 @@ int eeprom(int argc, char *argv[])
}
/* First argument (MAC) is mandatory */
- set_mac(&dev, argv[1]);
- if (verify_macaddr(&dev, argv[1])) {
- printf("*** MAC address does not match! ***\n");
+ set_mac(argv[1]);
+ if (verify_macaddr(argv[1])) {
+ puts("*** HWaddr does not match! ***\n");
return 4;
}
while (len--)
*p++ = 0;
- write_data(&dev, (u16 *)buf, sizeof(buf) >> 1);
+ write_data((u16 *)buf, sizeof(buf) >> 1);
return 0;
}