diff options
| -rw-r--r-- | board/voiceblue/Makefile | 33 | ||||
| -rw-r--r-- | board/voiceblue/eeprom.c | 97 | ||||
| -rw-r--r-- | board/voiceblue/eeprom.lds | 51 | ||||
| -rw-r--r-- | board/voiceblue/eeprom_start.S | 11 | 
4 files changed, 65 insertions, 127 deletions
| diff --git a/board/voiceblue/Makefile b/board/voiceblue/Makefile index 121c717d9..0067f0563 100644 --- a/board/voiceblue/Makefile +++ b/board/voiceblue/Makefile @@ -29,40 +29,37 @@ LIB	= $(obj)lib$(BOARD).a  COBJS	:= voiceblue.o  SOBJS	:= setup.o -SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) eeprom.c eeprom_start.S +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)  OBJS	:= $(addprefix $(obj),$(COBJS))  SOBJS	:= $(addprefix $(obj),$(SOBJS)) -gcclibdir := $(shell dirname `$(CC) -print-libgcc-file-name`) -  LOAD_ADDR = 0x10400000 -LDSCRIPT = $(TOPDIR)/board/$(BOARDDIR)/eeprom.lds -lnk = $(if $(obj),$(obj),.) + +#########################################################################  all:	$(obj).depend $(LIB) $(obj)eeprom.srec $(obj)eeprom.bin  $(LIB):	$(OBJS) $(SOBJS) -	$(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS) +	$(AR) $(ARFLAGS) $@ $^ + +$(obj)eeprom_start.o: +	echo "b eeprom" | $(CC) $(AFLAGS) -c -x assembler -o $@ - -$(obj)eeprom.srec:	$(obj)eeprom.o $(obj)eeprom_start.o $(obj)u-boot.lds -	cd $(lnk) && $(LD) -T $(obj)u-boot.lds -g -Ttext $(LOAD_ADDR) \ -		-o $(<:.o=) -e eeprom eeprom.o eeprom_start.o \ +$(obj)eeprom:		$(obj)eeprom_start.o $(obj)eeprom.o +	$(LD) -Ttext $(LOAD_ADDR) -e eeprom -o $@ $^ \  		-L$(obj)../../examples/standalone -lstubs \ -		-L$(obj)../../lib_generic -lgeneric \ -		-L$(gcclibdir) -lgcc -	$(OBJCOPY) -O srec $(<:.o=) $@ +		$(PLATFORM_LIBS) -$(obj)eeprom.bin:	$(obj)eeprom.srec -	$(OBJCOPY) -I srec -O binary $< $@ 2>/dev/null +$(obj)eeprom.srec:	$(obj)eeprom +	$(OBJCOPY) -S -O srec $(<:.o=) $@ -$(obj)u-boot.lds: $(LDSCRIPT) -	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@ +$(obj)eeprom.bin:	$(obj)eeprom +	$(OBJCOPY) -S -O binary $< $@  clean:  	rm -f $(SOBJS) $(OBJS) $(obj)eeprom \  		$(obj)eeprom.srec $(obj)eeprom.bin \ -		$(obj)eeprom.o $(obj)eeprom_start.o \ -		 $(obj)u-boot.lds +		$(obj)eeprom.o $(obj)eeprom_start.o  distclean:	clean  	rm -f $(LIB) core *.bak $(obj).depend diff --git a/board/voiceblue/eeprom.c b/board/voiceblue/eeprom.c index 2ae46d10c..f7e0ba56a 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;  } diff --git a/board/voiceblue/eeprom.lds b/board/voiceblue/eeprom.lds deleted file mode 100644 index 1e48494da..000000000 --- a/board/voiceblue/eeprom.lds +++ /dev/null @@ -1,51 +0,0 @@ -/* - * (C) Copyright 2002 - * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de> - * (C) Copyright 2005 - * Ladislav Michl, 2N Telekomunikace, <michl@2n.cz> - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ - -OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") -OUTPUT_ARCH(arm) -ENTRY(_start) -SECTIONS -{ -	. = ALIGN(4); -	.text      : -	{ -	  eeprom_start.o	(.text) -	  *(.text) -	} - -	. = ALIGN(4); -	.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } - -	. = ALIGN(4); -	.data : { *(.data) } - -	. = ALIGN(4); -	.got : { *(.got) } - -	. = ALIGN(4); -	__bss_start = .; -	.bss (NOLOAD) : { *(.bss) . = ALIGN(4); } -	_end = .; -} diff --git a/board/voiceblue/eeprom_start.S b/board/voiceblue/eeprom_start.S deleted file mode 100644 index 8f88de5c3..000000000 --- a/board/voiceblue/eeprom_start.S +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright (c) 2005  2N Telekomunikace - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - */ - -.globl	_start -_start:	b	eeprom |