- Fix issues related to the use of ELDK 4 when compiling for MarelV38B:
* remove warnings when compiling ethaddr.c
      * adjust linker script (fixes a crash resulting from incorrect
      definition of __u_boot_cmd_start)
- Some MarelV38B code cleanup.
			
			
This commit is contained in:
		
							parent
							
								
									dae80f3caf
								
							
						
					
					
						commit
						ffa150bc90
					
				| 
						 | 
					@ -1,5 +1,4 @@
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * (C) Copyright 2006
 | 
					 * (C) Copyright 2006
 | 
				
			||||||
 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 | 
					 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					@ -25,48 +24,13 @@
 | 
				
			||||||
#include <common.h>
 | 
					#include <common.h>
 | 
				
			||||||
#include <mpc5xxx.h>
 | 
					#include <mpc5xxx.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define GPIO_ENABLE	(MPC5XXX_WU_GPIO)
 | 
					/* For the V38B board the pin is GPIO_PSC_6 */
 | 
				
			||||||
 | 
					#define GPIO_PIN	GPIO_PSC6_0
 | 
				
			||||||
/* 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
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define NO_ERROR	0
 | 
					#define NO_ERROR	0
 | 
				
			||||||
#define ERR_NO_NUMBER	1
 | 
					#define ERR_NO_NUMBER	1
 | 
				
			||||||
#define ERR_BAD_NUMBER	2
 | 
					#define ERR_BAD_NUMBER	2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef volatile unsigned long GPIO_REG;
 | 
					 | 
				
			||||||
typedef GPIO_REG *GPIO_REG_PTR;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int is_high(void);
 | 
					static int is_high(void);
 | 
				
			||||||
static int check_device(void);
 | 
					static int check_device(void);
 | 
				
			||||||
static void io_out(int value);
 | 
					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 read_2501_memory(unsigned char *psernum, unsigned char *perr);
 | 
				
			||||||
void board_get_enetaddr(uchar *enetaddr);
 | 
					void board_get_enetaddr(uchar *enetaddr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int is_high()
 | 
					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)
 | 
					static void io_out(int value)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (value)
 | 
						if (value)
 | 
				
			||||||
		*((vu_long *) GPIO_DVOR) |= GPIO_PIN;
 | 
							*((vu_long *) MPC5XXX_WU_GPIO_DATA_O) |= GPIO_PIN;
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		*((vu_long *) GPIO_DVOR) &= ~GPIO_PIN;
 | 
							*((vu_long *) MPC5XXX_WU_GPIO_DATA_O) &= ~GPIO_PIN;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void io_input()
 | 
					static void io_input()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	*((vu_long *) GPIO_DDR) &= ~GPIO_PIN;
 | 
						*((vu_long *) MPC5XXX_WU_GPIO_DIR) &= ~GPIO_PIN;
 | 
				
			||||||
	udelay(3);	/* allow input to settle */
 | 
						udelay(3);	/* allow input to settle */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void io_output()
 | 
					static void io_output()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	*((vu_long *) GPIO_DDR) |= GPIO_PIN;
 | 
						*((vu_long *) MPC5XXX_WU_GPIO_DIR) |= GPIO_PIN;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void init_gpio()
 | 
					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)
 | 
					void read_2501_memory(unsigned char *psernum, unsigned char *perr)
 | 
				
			||||||
| 
						 | 
					@ -118,7 +83,7 @@ void read_2501_memory(unsigned char *psernum, unsigned char *perr)
 | 
				
			||||||
	crcval = 0;
 | 
						crcval = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < NBYTES; i++)
 | 
						for (i = 0; i < NBYTES; i++)
 | 
				
			||||||
 | 
							buf[i] = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!check_device())
 | 
						if (!check_device())
 | 
				
			||||||
		*perr = ERR_NO_NUMBER;
 | 
							*perr = ERR_NO_NUMBER;
 | 
				
			||||||
| 
						 | 
					@ -141,8 +106,7 @@ void read_2501_memory(unsigned char *psernum, unsigned char *perr)
 | 
				
			||||||
		psernum[3] = 0xFF;
 | 
							psernum[3] = 0xFF;
 | 
				
			||||||
		psernum[4] = 0xFF;
 | 
							psernum[4] = 0xFF;
 | 
				
			||||||
		psernum[5] = 0xFF;
 | 
							psernum[5] = 0xFF;
 | 
				
			||||||
	}
 | 
						} else {
 | 
				
			||||||
	else {
 | 
					 | 
				
			||||||
		psernum[0] = 0x00;
 | 
							psernum[0] = 0x00;
 | 
				
			||||||
		psernum[1] = 0xE0;
 | 
							psernum[1] = 0xE0;
 | 
				
			||||||
		psernum[2] = 0xEE;
 | 
							psernum[2] = 0xEE;
 | 
				
			||||||
| 
						 | 
					@ -177,23 +141,19 @@ static void write_byte(unsigned char command)
 | 
				
			||||||
		/* 1 us to 15 us low pulse starts bit slot */
 | 
							/* 1 us to 15 us low pulse starts bit slot */
 | 
				
			||||||
		/* Start with high pulse for 3 us */
 | 
							/* Start with high pulse for 3 us */
 | 
				
			||||||
		io_input();
 | 
							io_input();
 | 
				
			||||||
 | 
					 | 
				
			||||||
		udelay(3);
 | 
							udelay(3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		io_out(0);
 | 
							io_out(0);
 | 
				
			||||||
		io_output();
 | 
							io_output();
 | 
				
			||||||
 | 
					 | 
				
			||||||
		udelay(3);
 | 
							udelay(3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (command & 0x01) {
 | 
							if (command & 0x01) {
 | 
				
			||||||
			/* 60 us high for 1-bit */
 | 
								/* 60 us high for 1-bit */
 | 
				
			||||||
			io_input();
 | 
								io_input();
 | 
				
			||||||
			udelay(60);
 | 
								udelay(60);
 | 
				
			||||||
		}
 | 
							} else
 | 
				
			||||||
		else {
 | 
					 | 
				
			||||||
			/* 60 us low for 0-bit */
 | 
								/* 60 us low for 0-bit */
 | 
				
			||||||
			udelay(60);
 | 
								udelay(60);
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		/*  Leave pin as input */
 | 
							/*  Leave pin as input */
 | 
				
			||||||
		io_input();
 | 
							io_input();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -240,15 +200,14 @@ void board_get_enetaddr(uchar *enetaddr)
 | 
				
			||||||
	read_2501_memory(sn, &err);
 | 
						read_2501_memory(sn, &err);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (err == NO_ERROR) {
 | 
						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]);
 | 
									sn[0], sn[1], sn[2], sn[3], sn[4], sn[5]);
 | 
				
			||||||
		printf("MAC address: %s\n", enetaddr);
 | 
							printf("MAC address: %s\n", enetaddr);
 | 
				
			||||||
		setenv("ethaddr", enetaddr);
 | 
							setenv("ethaddr", (char *)enetaddr);
 | 
				
			||||||
	}
 | 
						} else {
 | 
				
			||||||
	else {
 | 
							sprintf((char *)enetaddr, "00:01:02:03:04:05");
 | 
				
			||||||
		sprintf(enetaddr, "00:01:02:03:04:05");
 | 
					 | 
				
			||||||
		printf("Error reading MAC address.\n");
 | 
							printf("Error reading MAC address.\n");
 | 
				
			||||||
		printf("Setting default to %s\n", enetaddr);
 | 
							printf("Setting default to %s\n", enetaddr);
 | 
				
			||||||
		setenv("ethaddr", enetaddr);
 | 
							setenv("ethaddr", (char *)enetaddr);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -61,6 +61,7 @@ SECTIONS
 | 
				
			||||||
    *(.rodata)
 | 
					    *(.rodata)
 | 
				
			||||||
    *(.rodata1)
 | 
					    *(.rodata1)
 | 
				
			||||||
    *(.rodata.str1.4)
 | 
					    *(.rodata.str1.4)
 | 
				
			||||||
 | 
					    *(.eh_frame)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  .fini      : { *(.fini)    } =0
 | 
					  .fini      : { *(.fini)    } =0
 | 
				
			||||||
  .ctors     : { *(.ctors)   }
 | 
					  .ctors     : { *(.ctors)   }
 | 
				
			||||||
| 
						 | 
					@ -93,11 +94,13 @@ SECTIONS
 | 
				
			||||||
  _edata  =  .;
 | 
					  _edata  =  .;
 | 
				
			||||||
  PROVIDE (edata = .);
 | 
					  PROVIDE (edata = .);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  . = .;
 | 
				
			||||||
  __u_boot_cmd_start = .;
 | 
					  __u_boot_cmd_start = .;
 | 
				
			||||||
  .u_boot_cmd : { *(.u_boot_cmd) }
 | 
					  .u_boot_cmd : { *(.u_boot_cmd) }
 | 
				
			||||||
  __u_boot_cmd_end = .;
 | 
					  __u_boot_cmd_end = .;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  . = .;
 | 
				
			||||||
  __start___ex_table = .;
 | 
					  __start___ex_table = .;
 | 
				
			||||||
  __ex_table : { *(__ex_table) }
 | 
					  __ex_table : { *(__ex_table) }
 | 
				
			||||||
  __stop___ex_table = .;
 | 
					  __stop___ex_table = .;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue