diff options
Diffstat (limited to 'board/v38b')
| -rw-r--r-- | board/v38b/ethaddr.c | 91 | ||||
| -rw-r--r-- | board/v38b/u-boot.lds | 3 | 
2 files changed, 28 insertions, 66 deletions
| diff --git a/board/v38b/ethaddr.c b/board/v38b/ethaddr.c index aaa629ef6..4e2494eee 100644 --- a/board/v38b/ethaddr.c +++ b/board/v38b/ethaddr.c @@ -1,5 +1,4 @@  /* - *   * (C) Copyright 2006   * Wolfgang Denk, DENX Software Engineering, wd@denx.de.   * @@ -25,48 +24,13 @@  #include <common.h>  #include <mpc5xxx.h> -#define GPIO_ENABLE	(MPC5XXX_WU_GPIO) - -/* Open Drain Emulation Register */ -#define GPIO_ODR	(MPC5XXX_WU_GPIO + 0x04) - -/* Data Direction Register */ -#define GPIO_DDR	(MPC5XXX_WU_GPIO + 0x08) - -/* Data Value Out Register */ -#define GPIO_DVOR	(MPC5XXX_WU_GPIO + 0x0C) - -/* Interrupt Enable Register */ -#define GPIO_IER	(MPC5XXX_WU_GPIO + 0x10) - -/* Individual Interrupt Enable Register */ -#define GPIO_IIER	(MPC5XXX_WU_GPIO + 0x14) - -/* Interrupt Type Register */ -#define GPIO_ITR	(MPC5XXX_WU_GPIO + 0x18) - -/* Master Enable Register */ -#define GPIO_MER	(MPC5XXX_WU_GPIO + 0x1C) - -/* Data Input Value Register */ -#define GPIO_DIVR	(MPC5XXX_WU_GPIO + 0x20) - -/* Status Register */ -#define GPIO_SR		(MPC5XXX_WU_GPIO + 0x24) - -#define PSC6_0		0x10000000 -#define WKUP_7		0x80000000 - -/* For NS4 A/B board define WKUP_7, for V38B board PSC_6 */ -#define GPIO_PIN	PSC6_0 +/* For the V38B board the pin is GPIO_PSC_6 */ +#define GPIO_PIN	GPIO_PSC6_0  #define NO_ERROR	0  #define ERR_NO_NUMBER	1  #define ERR_BAD_NUMBER	2 -typedef volatile unsigned long GPIO_REG; -typedef GPIO_REG *GPIO_REG_PTR; -  static int is_high(void);  static int check_device(void);  static void io_out(int value); @@ -79,33 +43,34 @@ static void write_byte(unsigned char command);  void read_2501_memory(unsigned char *psernum, unsigned char *perr);  void board_get_enetaddr(uchar *enetaddr); +  static int is_high()  { -	return (* ((vu_long *) GPIO_DIVR) & GPIO_PIN); +	return (*((vu_long *) MPC5XXX_WU_GPIO_DATA_I) & GPIO_PIN);  }  static void io_out(int value)  {  	if (value) -		*((vu_long *) GPIO_DVOR) |= GPIO_PIN; +		*((vu_long *) MPC5XXX_WU_GPIO_DATA_O) |= GPIO_PIN;  	else -		*((vu_long *) GPIO_DVOR) &= ~GPIO_PIN; +		*((vu_long *) MPC5XXX_WU_GPIO_DATA_O) &= ~GPIO_PIN;  }  static void io_input()  { -	*((vu_long *) GPIO_DDR) &= ~GPIO_PIN; +	*((vu_long *) MPC5XXX_WU_GPIO_DIR) &= ~GPIO_PIN;  	udelay(3);	/* allow input to settle */  }  static void io_output()  { -	*((vu_long *) GPIO_DDR) |= GPIO_PIN; +	*((vu_long *) MPC5XXX_WU_GPIO_DIR) |= GPIO_PIN;  }  static void init_gpio()  { -	*((vu_long *) GPIO_ENABLE) |= GPIO_PIN;	/* Enable appropriate pin */ +	*((vu_long *) MPC5XXX_WU_GPIO_ENABLE) |= GPIO_PIN;	/* Enable appropriate pin */  }  void read_2501_memory(unsigned char *psernum, unsigned char *perr) @@ -117,8 +82,8 @@ void read_2501_memory(unsigned char *psernum, unsigned char *perr)  	*perr = 0;  	crcval = 0; -	for (i=0; i<NBYTES; i++) - +	for (i = 0; i < NBYTES; i++) +		buf[i] = 0;  	if (!check_device())  		*perr = ERR_NO_NUMBER; @@ -130,10 +95,10 @@ void read_2501_memory(unsigned char *psernum, unsigned char *perr)  		write_byte(0x00);  		read_byte(&crcval);		/* Read CRC of address and command */ -		for (i=0; i<NBYTES; i++) -			read_byte( &buf[i] ); +		for (i = 0; i < NBYTES; i++) +			read_byte(&buf[i]);  	} -	if (strncmp((const char*) &buf[11], "MAREL IEEE 802.3", 16)) { +	if (strncmp((const char *) &buf[11], "MAREL IEEE 802.3", 16)) {  		*perr = ERR_BAD_NUMBER;  		psernum[0] = 0x00;  		psernum[1] = 0xE0; @@ -141,8 +106,7 @@ void read_2501_memory(unsigned char *psernum, unsigned char *perr)  		psernum[3] = 0xFF;  		psernum[4] = 0xFF;  		psernum[5] = 0xFF; -	} -	else { +	} else {  		psernum[0] = 0x00;  		psernum[1] = 0xE0;  		psernum[2] = 0xEE; @@ -173,27 +137,23 @@ static void write_byte(unsigned char command)  {  	char i; -	for (i=0; i<8; i++) { +	for (i = 0; i < 8; i++) {  		/* 1 us to 15 us low pulse starts bit slot */  		/* Start with high pulse for 3 us */  		io_input(); -  		udelay(3);  		io_out(0);  		io_output(); -  		udelay(3);  		if (command & 0x01) {  			/* 60 us high for 1-bit */  			io_input();  			udelay(60); -		} -		else { +		} else  			/* 60 us low for 0-bit */  			udelay(60); -		}  		/*  Leave pin as input */  		io_input(); @@ -201,11 +161,11 @@ static void write_byte(unsigned char command)  	}  } -static void read_byte(unsigned char  *data) +static void read_byte(unsigned char *data)  {  	unsigned char i, rdat = 0; -	for (i=0; i<8; i++) { +	for (i = 0; i < 8; i++) {  		/* read one bit from one-wire device */  		/* 1 - 15 us low starts bit slot */ @@ -233,22 +193,21 @@ static void read_byte(unsigned char  *data)  void board_get_enetaddr(uchar *enetaddr)  { -	unsigned char sn[6], err=NO_ERROR; +	unsigned char sn[6], err = NO_ERROR;  	init_gpio();  	read_2501_memory(sn, &err);  	if (err == NO_ERROR) { -		sprintf(enetaddr, "%02x:%02x:%02x:%02x:%02x:%02x", +		sprintf((char *)enetaddr, "%02x:%02x:%02x:%02x:%02x:%02x",  				sn[0], sn[1], sn[2], sn[3], sn[4], sn[5]);  		printf("MAC address: %s\n", enetaddr); -		setenv("ethaddr", enetaddr); -	} -	else { -		sprintf(enetaddr, "00:01:02:03:04:05"); +		setenv("ethaddr", (char *)enetaddr); +	} else { +		sprintf((char *)enetaddr, "00:01:02:03:04:05");  		printf("Error reading MAC address.\n");  		printf("Setting default to %s\n", enetaddr); -		setenv("ethaddr", enetaddr); +		setenv("ethaddr", (char *)enetaddr);  	}  } diff --git a/board/v38b/u-boot.lds b/board/v38b/u-boot.lds index 6ec525691..4fdea6b78 100644 --- a/board/v38b/u-boot.lds +++ b/board/v38b/u-boot.lds @@ -61,6 +61,7 @@ SECTIONS      *(.rodata)      *(.rodata1)      *(.rodata.str1.4) +    *(.eh_frame)    }    .fini      : { *(.fini)    } =0    .ctors     : { *(.ctors)   } @@ -93,11 +94,13 @@ SECTIONS    _edata  =  .;    PROVIDE (edata = .); +  . = .;    __u_boot_cmd_start = .;    .u_boot_cmd : { *(.u_boot_cmd) }    __u_boot_cmd_end = .; +  . = .;    __start___ex_table = .;    __ex_table : { *(__ex_table) }    __stop___ex_table = .; |