X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=board%2Fnetstar%2Feeprom.c;h=aa375a4b1a731585a62e2c35c6de069949a4a59b;hb=a78ded13111dde555ed5de99cff10f41ae674cb1;hp=adb01b96b89ce465e50ffc5357a2c188d8114b1e;hpb=d798e27b14543762f9f5d0561a3430c7f9e2153b;p=u-boot diff --git a/board/netstar/eeprom.c b/board/netstar/eeprom.c index adb01b96b8..aa375a4b1a 100644 --- a/board/netstar/eeprom.c +++ b/board/netstar/eeprom.c @@ -28,67 +28,76 @@ #include #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]; @@ -97,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]; @@ -109,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; } @@ -140,39 +149,35 @@ static int parse_element(char *s, unsigned char *buf, int len) return cnt; } -int eeprom(int argc, char *argv[]) +int eeprom(int argc, char * const 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("NetStar EEPROM writer\n"); - printf("Built: %s at %s\n", U_BOOT_DATE, U_BOOT_TIME); - printf("Usage:\n\t [] [<...>]\n"); + puts("NetStar EEPROM writer\n" + "Built: " U_BOOT_DATE " at " U_BOOT_TIME "\n" + "Usage:\n\t [] [<...>]\n"); return 0; } @@ -189,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; @@ -198,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; }