diff options
| author | wdenk <wdenk> | 2003-10-19 23:22:11 +0000 | 
|---|---|---|
| committer | wdenk <wdenk> | 2003-10-19 23:22:11 +0000 | 
| commit | a3ad8e26a4ac96838b2963cb462770c70c9f6443 (patch) | |
| tree | be6c86113d1ce3da1d26b19b305d77d00370703f | |
| parent | d7281f41094bee59eca958de3c04995a2f79034a (diff) | |
| download | olio-uboot-2014.01-a3ad8e26a4ac96838b2963cb462770c70c9f6443.tar.xz olio-uboot-2014.01-a3ad8e26a4ac96838b2963cb462770c70c9f6443.zip | |
* Patch by Steven Scholz, 18 Oct 2003:
  Fix AT91RM9200 ethernet driver
* Patch by Nye Liu, 17 Oct 2003:
  Fix typo in include/mpc8xx.h
* Patch by Richard Woodruff, 16 Oct 03:
  Fixes for cpu/arm925/interrupt.c
  - Initialize timestamp & lastdec vars.
  - fix timestamp overflows.
  - fix lastdec overflow.
  - smarter normalization to allow udelay() below 1ms to work.
* Patch by Scott McNutt, 16 Oct
  add networking support for the Altera Nios Development Kit,
  Cyclone Edition (DK-1C20)
* Patch by Jon Diekema, 14 Oct 2003:
  add hint about doc/README.silent to README file
| -rw-r--r-- | CHANGELOG | 20 | ||||
| -rw-r--r-- | README | 5 | ||||
| -rw-r--r-- | cpu/arm925t/interrupts.c | 67 | ||||
| -rw-r--r-- | cpu/at91rm9200/at91rm9200_ether.c | 6 | ||||
| -rw-r--r-- | doc/README.dk1c20 | 7 | ||||
| -rw-r--r-- | doc/README.nios | 4 | ||||
| -rw-r--r-- | drivers/smc91111.h | 25 | ||||
| -rw-r--r-- | include/configs/DK1C20.h | 9 | ||||
| -rw-r--r-- | include/mpc8xx.h | 2 | ||||
| -rw-r--r-- | lib_nios/board.c | 10 | 
10 files changed, 118 insertions, 37 deletions
| @@ -2,6 +2,26 @@  Changes for U-Boot 1.0.0:  ====================================================================== +* Patch by Steven Scholz, 18 Oct 2003: +  Fix AT91RM9200 ethernet driver + +* Patch by Nye Liu, 17 Oct 2003: +  Fix typo in include/mpc8xx.h + +* Patch by Richard Woodruff, 16 Oct 03: +  Fixes for cpu/arm925/interrupt.c +  - Initialize timestamp & lastdec vars. +  - fix timestamp overflows. +  - fix lastdec overflow. +  - smarter normalization to allow udelay() below 1ms to work. + +* Patch by Scott McNutt, 16 Oct +  add networking support for the Altera Nios Development Kit, +  Cyclone Edition (DK-1C20) + +* Patch by Jon Diekema, 14 Oct 2003: +  add hint about doc/README.silent to README file +  * Add CompactFlash support for NSCU  * Fix PCI problems on PPChameleonEVB @@ -487,6 +487,11 @@ The following options need to be configured:  		default i/o. Serial console can be forced with  		environment 'console=serial'. +                When CONFIG_SILENT_CONSOLE is defined, all console +                messages (by U-Boot and Linux!) can be silenced with +                the "silent" environment variable. See +                doc/README.silent for more information. +  - Console Baudrate:  		CONFIG_BAUDRATE - in bps  		Select one of the baudrates listed in diff --git a/cpu/arm925t/interrupts.c b/cpu/arm925t/interrupts.c index 132af1a3c..7897184fc 100644 --- a/cpu/arm925t/interrupts.c +++ b/cpu/arm925t/interrupts.c @@ -185,9 +185,14 @@ int interrupt_init (void)  {  	int32_t val; +	/* Start the decrementer ticking down from 0xffffffff */  	*((int32_t *) (CFG_TIMERBASE + LOAD_TIM)) = TIMER_LOAD_VAL;  	val = MPUTIM_ST | MPUTIM_AR | MPUTIM_CLOCK_ENABLE | (CFG_PVT << MPUTIM_PTV_BIT);  	*((int32_t *) (CFG_TIMERBASE + CNTL_TIMER)) = val; + +	/* init the timestamp and lastdec value */ +	reset_timer_masked(); +  	return (0);  } @@ -210,7 +215,7 @@ void set_timer (ulong t)  	timestamp = t;  } -/* very rough timer... */ +/* delay x useconds AND perserve advance timstamp value */  void udelay (unsigned long usec)  {  #ifdef CONFIG_INNOVATOROMAP1510 @@ -220,16 +225,24 @@ void udelay (unsigned long usec)  	for (i = time_remaining; i > 0; i--) {  	}  #else +	ulong tmo, tmp; -	ulong tmo; - -	tmo = usec / 1000; -	tmo *= CFG_HZ; -	tmo /= 1000; +	if(usec >= 1000){               /* if "big" number, spread normalization to seconds */ +		tmo = usec / 1000;      /* start to normalize for usec to ticks per sec */ +		tmo *= CFG_HZ;          /* find number of "ticks" to wait to achieve target */ +		tmo /= 1000;            /* finish normalize. */ +	}else{                          /* else small number, don't kill it prior to HZ multiply */ +		tmo = usec * CFG_HZ; +		tmo /= (1000*1000); +	} -	tmo += get_timer (0); +	tmp = get_timer (0);		/* get current timestamp */ +	if( (tmo + tmp) < tmp ) 	/* if setting this fordward will roll time stamp */ +		reset_timer_masked ();	/* reset "advancing" timestamp to 0, set lastdec value */ +	else +		tmo += tmp;		/* else, set advancing stamp wake up time */ -	while (get_timer_masked () < tmo) +	while (get_timer_masked () < tmo)/* loop till event */  		/*NOP*/;  #endif  } @@ -237,19 +250,23 @@ void udelay (unsigned long usec)  void reset_timer_masked (void)  {  	/* reset time */ -	lastdec = READ_TIMER; -	timestamp = 0; +	lastdec = READ_TIMER;  /* capure current decrementer value time */ +	timestamp = 0;         /* start "advancing" time stamp from 0 */  }  ulong get_timer_masked (void)  { -	ulong now = READ_TIMER;           /* current tick value */ +	ulong now = READ_TIMER;		/* current tick value */ -	if (lastdec >= now) {             /* did I roll (rem decrementer) */ +	if (lastdec >= now) {		/* normal mode (non roll) */  		/* normal mode */ -		timestamp += lastdec - now;   /* record amount of time since last check */ -	} else { -		/* we have an overflow ... */ +		timestamp += lastdec - now; /* move stamp fordward with absoulte diff ticks */ +	} else {			/* we have overflow of the count down timer */ +		/* nts = ts + ld + (TLV - now) +		 * ts=old stamp, ld=time that passed before passing through -1 +		 * (TLV-now) amount of time after passing though -1 +		 * nts = new "advancing time stamp"...it could also roll and cause problems. +		 */  		timestamp += lastdec + TIMER_LOAD_VAL - now;  	}  	lastdec = now; @@ -257,6 +274,7 @@ ulong get_timer_masked (void)  	return timestamp;  } +/* waits specified delay value and resets timestamp */  void udelay_masked (unsigned long usec)  {  #ifdef CONFIG_INNOVATOROMAP1510 @@ -265,15 +283,20 @@ void udelay_masked (unsigned long usec)      for (i=time_remaining; i>0; i--) { }  #else -	ulong tmo; +	ulong tmo, tmp; -	tmo = usec / 1000; -	tmo *= CFG_HZ; -	tmo /= 1000; +	if(usec >= 1000){               /* if "big" number, spread normalization to seconds */ +		tmo = usec / 1000;      /* start to normalize for usec to ticks per sec */ +		tmo *= CFG_HZ;          /* find number of "ticks" to wait to achieve target */ +		tmo /= 1000;            /* finish normalize. */ +	}else{                          /* else small number, don't kill it prior to HZ multiply */ +		tmo = usec * CFG_HZ; +		tmo /= (1000*1000); +	} -	reset_timer_masked (); +	reset_timer_masked ();	/* set "advancing" timestamp to 0, set lastdec vaule */ -	while (get_timer_masked () < tmo) +	while (get_timer_masked () < tmo) /* wait for time stamp to overtake tick number.*/  		/*NOP*/;  #endif  } @@ -292,7 +315,7 @@ unsigned long long get_ticks(void)   * On ARM it returns the number of timer ticks per second.   */  ulong get_tbclk (void) -{	/* poor timer, may need to improve especiall for bootp. */ +{  	ulong tbclk;  	tbclk = CFG_HZ; diff --git a/cpu/at91rm9200/at91rm9200_ether.c b/cpu/at91rm9200/at91rm9200_ether.c index 47b57da08..347a57b2c 100644 --- a/cpu/at91rm9200/at91rm9200_ether.c +++ b/cpu/at91rm9200/at91rm9200_ether.c @@ -334,12 +334,12 @@ static UCHAR at91rm9200_EmacReadPhy (AT91PS_EMAC p_mac,   *	TRUE - if data read successfully   */  static UCHAR at91rm9200_EmacWritePhy (AT91PS_EMAC p_mac, -									  unsigned char RegisterAddress, -									  unsigned short *pOutput) +				      unsigned char RegisterAddress, +				      unsigned short *pOutput)  {  	p_mac->EMAC_MAN = (AT91C_EMAC_HIGH & ~AT91C_EMAC_LOW) |  			AT91C_EMAC_CODE_802_3 | AT91C_EMAC_RW_W | -			(RegisterAddress << 18); +			(RegisterAddress << 18) | *pOutput;  	udelay (10000); diff --git a/doc/README.dk1c20 b/doc/README.dk1c20 index b052433b6..b3a6b8bb0 100644 --- a/doc/README.dk1c20 +++ b/doc/README.dk1c20 @@ -2,7 +2,7 @@  			 Nios Development Kit  			   Cyclone Editions -		    Last Update: October 4, 2003 +		    Last Update: October 15, 2003  ====================================================================  This file contains information regarding U-Boot and the Altera @@ -34,7 +34,10 @@ The hello_world example works fine.  Programming U-Boot into FLASH with GERMS  -----------------------------------------  The current version of the DK-1C20 port occupies less than -60 KByte. So everything will fit into a single Flash sector. +60 KByte with network support disabled. So everything will fit +into a single flash sector. With network support (e.g. bootp, +tftpboot, ping, etc) the flash footprint is about 77K. +  To program U-Boot into the DK-1C20 flash using GERMS do the  following: diff --git a/doc/README.nios b/doc/README.nios index d7e87d575..aee0ecdc2 100644 --- a/doc/README.nios +++ b/doc/README.nios @@ -1,7 +1,7 @@  			   U-Boot for Nios-32 -		    Last Update: October 4, 2003 +		    Last Update: October 15, 2003  ====================================================================  This file contains information regarding U-Boot and the Altera @@ -173,8 +173,6 @@ BTW, thats a 'zero' ... not the letter 'O'.  There are plenty of areas where help is needed. Here's are some ideas  for those interested in contributing: --SMC 91C111 support. E.g. add in tftpboot, etc. -  -CompactFlash. Port & test CF/FAT.  -ASMI support. Use ASMI for environment, etc. diff --git a/drivers/smc91111.h b/drivers/smc91111.h index 4efa25656..fc694ac72 100644 --- a/drivers/smc91111.h +++ b/drivers/smc91111.h @@ -178,6 +178,31 @@ typedef unsigned long int 		dword;  				})  #endif +#if defined(CONFIG_SMC_USE_32_BIT) + +#define	SMC_inl(r) 	(*((volatile dword *)(SMC_BASE_ADDRESS+(r)))) + +#define SMC_insl(r,b,l) 	({	int __i ;  \ +					dword *__b2;  \ +			    		__b2 = (dword *) b;  \ +			    		for (__i = 0; __i < l; __i++) {  \ +					  *(__b2 + __i) = SMC_inl(r);  \ +					  SMC_inl(0);  \ +					};  \ +				}) + +#define	SMC_outl(d,r)	(*((volatile dword *)(SMC_BASE_ADDRESS+(r))) = d) + +#define SMC_outsl(r,b,l)	({	int __i; \ +					dword *__b2; \ +					__b2 = (dword *) b; \ +					for (__i = 0; __i < l; __i++) { \ +					    SMC_outl( *(__b2 + __i), r); \ +					} \ +				}) + +#endif /* CONFIG_SMC_USE_32_BIT */ +  #endif  /*--------------------------------------------------------------- diff --git a/include/configs/DK1C20.h b/include/configs/DK1C20.h index ddb1a2fb1..938e83aec 100644 --- a/include/configs/DK1C20.h +++ b/include/configs/DK1C20.h @@ -96,12 +96,10 @@  /*------------------------------------------------------------------------   * Ethernet -- needs work!   *----------------------------------------------------------------------*/ -#if 0  #define CONFIG_DRIVER_SMC91111			/* Using SMC91c111	*/ -#define CONFIG_SMC91111_BASE	0x00910000	/* Base address		*/ -#undef  CONFIG_SMC91111_EXT_PHY			/* No external PHY	*/ -#define CONFIG_SMC_USE_32_BIT	1		/* 32-bit i/f		*/ -#endif +#define CONFIG_SMC91111_BASE	0x00910300	/* Base address		*/ +#undef  CONFIG_SMC91111_EXT_PHY			/* Internal PHY		*/ +#define CONFIG_SMC_USE_32_BIT			/* 32-bit data rd/wr	*/  #define CONFIG_ETHADDR		08:00:3e:26:0a:5b  #define CONFIG_NETMASK		255.255.255.0 @@ -131,7 +129,6 @@  				 CFG_CMD_JFFS2	| \  				 CFG_CMD_KGDB	| \  				 CFG_CMD_NAND	| \ -				 CFG_CMD_NET	| \  				 CFG_CMD_MMC	| \  				 CFG_CMD_MII	| \  				 CFG_CMD_PCI	| \ diff --git a/include/mpc8xx.h b/include/mpc8xx.h index 365064370..4c0c73c76 100644 --- a/include/mpc8xx.h +++ b/include/mpc8xx.h @@ -138,7 +138,7 @@  #define PLPRCR_MF_MSK	0xffff001e	/* Multiplication factor + PDF bits	*/  #define PLPRCR_MFN_MSK	0xf8000000	/* Multiplication factor numerator bits */  #define PLPRCR_MFN_SHIFT 0x0000001b	/* Multiplication factor numerator shift*/ -#define PLPRCR_MFD_MSK	0x03c00000	/* Multiplication factor denominator bits */ +#define PLPRCR_MFD_MSK	0x07c00000	/* Multiplication factor denominator bits */  #define PLPRCR_MFD_SHIFT 0x00000017	/* Multiplication factor denominator shift*/  #define PLPRCR_S_MSK	0x00300000	/* Multiplication factor integer bits	*/  #define PLPRCR_S_SHIFT	0x00000014	/* Multiplication factor integer shift	*/ diff --git a/lib_nios/board.c b/lib_nios/board.c index c81c0011e..8718fecc8 100644 --- a/lib_nios/board.c +++ b/lib_nios/board.c @@ -27,6 +27,7 @@  #include <common.h>  #include <devices.h>  #include <watchdog.h> +#include <net.h>  /* @@ -107,6 +108,8 @@ void board_init (void)  	bd_t *bd;  	init_fnc_t **init_fnc_ptr; +	char *s, *e; +	int i;  	/* Pointer is writable since we allocated a register for it.  	 * Nios treats CFG_GBL_DATA_OFFSET as an address. @@ -129,6 +132,12 @@ void board_init (void)  	bd->bi_sramstart= CFG_SRAM_BASE;  	bd->bi_sramsize	= CFG_SRAM_SIZE;  	bd->bi_baudrate	= CONFIG_BAUDRATE; +	bd->bi_ip_addr = getenv_IPaddr ("ipaddr"); +	s = getenv ("ethaddr"); +	for (i = 0; i < 6; ++i) { +		bd->bi_enetaddr[i] = s ? simple_strtoul (s, &e, 16) : 0; +		if (s) s = (*e) ? e + 1 : e; +	}  	for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {  		if ((*init_fnc_ptr) () != 0) { @@ -164,3 +173,4 @@ void hang (void)  	puts("### ERROR ### Please reset board ###\n");  	for (;;);  } + |