* Prepare for release
* Fix problems in memory test on some boards (which was not non-destructive as intended) * Patch by Gary Jennejohn, 28 Oct 2003: Change fs/fat/fat.c to put I/O buffers in BSS instead on the stack to prevent stack overflow on ARM systems
This commit is contained in:
		
							parent
							
								
									a0f2fe524c
								
							
						
					
					
						commit
						5fa66df63a
					
				|  | @ -2,6 +2,13 @@ | ||||||
| Changes for U-Boot 1.0.0: | Changes for U-Boot 1.0.0: | ||||||
| ====================================================================== | ====================================================================== | ||||||
| 
 | 
 | ||||||
|  | * Fix problems in memory test on some boards (which was not | ||||||
|  |   non-destructive as intended) | ||||||
|  | 
 | ||||||
|  | * Patch by Gary Jennejohn, 28 Oct 2003: | ||||||
|  |   Change fs/fat/fat.c to put I/O buffers in BSS instead on the stack | ||||||
|  |   to prevent stack overflow on ARM systems | ||||||
|  | 
 | ||||||
| * Patch by Stephan Linz, 28 Oct 2003: | * Patch by Stephan Linz, 28 Oct 2003: | ||||||
|   fix init sequence error for NIOS port |   fix init sequence error for NIOS port | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -230,8 +230,8 @@ static long int dram_size (long int mamr_value, long int *base, | ||||||
| 	volatile immap_t *immap = (immap_t *) CFG_IMMR; | 	volatile immap_t *immap = (immap_t *) CFG_IMMR; | ||||||
| 	volatile memctl8xx_t *memctl = &immap->im_memctl; | 	volatile memctl8xx_t *memctl = &immap->im_memctl; | ||||||
| 	volatile long int *addr; | 	volatile long int *addr; | ||||||
| 	ulong cnt, val; |  	ulong cnt, val, size; | ||||||
| 	ulong save[32];			/* to make test non-destructive */ |  	ulong save[32];			/* to make test non-destructive */ | ||||||
| 	unsigned char i = 0; | 	unsigned char i = 0; | ||||||
| 
 | 
 | ||||||
| 	memctl->memc_mamr = mamr_value; | 	memctl->memc_mamr = mamr_value; | ||||||
|  | @ -250,7 +250,13 @@ static long int dram_size (long int mamr_value, long int *base, | ||||||
| 
 | 
 | ||||||
| 	/* check at base address */ | 	/* check at base address */ | ||||||
| 	if ((val = *addr) != 0) { | 	if ((val = *addr) != 0) { | ||||||
|  | 		/* Restore the original data before leaving the function.
 | ||||||
|  | 		 */ | ||||||
| 		*addr = save[i]; | 		*addr = save[i]; | ||||||
|  | 		for (cnt = 1; cnt <= maxsize / sizeof(long); cnt <<= 1) { | ||||||
|  | 			addr  = (volatile ulong *) base + cnt; | ||||||
|  | 			*addr = save[--i]; | ||||||
|  | 		} | ||||||
| 		return (0); | 		return (0); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -261,7 +267,14 @@ static long int dram_size (long int mamr_value, long int *base, | ||||||
| 		*addr = save[--i]; | 		*addr = save[--i]; | ||||||
| 
 | 
 | ||||||
| 		if (val != (~cnt)) { | 		if (val != (~cnt)) { | ||||||
| 			return (cnt * sizeof (long)); | 			size = cnt * sizeof (long); | ||||||
|  | 			/* Restore the original data before returning
 | ||||||
|  | 			 */ | ||||||
|  | 			for (cnt <<= 1; cnt <= maxsize / sizeof (long); cnt <<= 1) { | ||||||
|  | 				addr  = (volatile ulong *) base + cnt; | ||||||
|  | 				*addr = save[--i]; | ||||||
|  | 			} | ||||||
|  | 			return (size); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	return (maxsize); | 	return (maxsize); | ||||||
|  |  | ||||||
|  | @ -269,7 +269,7 @@ static long int try_init (volatile memctl8260_t * memctl, ulong sdmr, | ||||||
| 			  ulong orx, volatile uchar * base) | 			  ulong orx, volatile uchar * base) | ||||||
| { | { | ||||||
| 	volatile uchar c = 0xff; | 	volatile uchar c = 0xff; | ||||||
| 	ulong cnt, val; | 	ulong cnt, val, size; | ||||||
| 	volatile ulong *addr; | 	volatile ulong *addr; | ||||||
| 	volatile uint *sdmr_ptr; | 	volatile uint *sdmr_ptr; | ||||||
| 	volatile uint *orx_ptr; | 	volatile uint *orx_ptr; | ||||||
|  | @ -344,7 +344,13 @@ static long int try_init (volatile memctl8260_t * memctl, ulong sdmr, | ||||||
| 	*addr = 0; | 	*addr = 0; | ||||||
| 
 | 
 | ||||||
| 	if ((val = *addr) != 0) { | 	if ((val = *addr) != 0) { | ||||||
|  | 		/* Restore the original data before leaving the function.
 | ||||||
|  | 		 */ | ||||||
| 		*addr = save[i]; | 		*addr = save[i]; | ||||||
|  | 		for (cnt = 1; cnt <= maxsize / sizeof(long); cnt <<= 1) { | ||||||
|  | 			addr  = (volatile ulong *) base + cnt; | ||||||
|  | 			*addr = save[--i]; | ||||||
|  | 		} | ||||||
| 		return (0); | 		return (0); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -353,10 +359,17 @@ static long int try_init (volatile memctl8260_t * memctl, ulong sdmr, | ||||||
| 		val = *addr; | 		val = *addr; | ||||||
| 		*addr = save[--i]; | 		*addr = save[--i]; | ||||||
| 		if (val != ~cnt) { | 		if (val != ~cnt) { | ||||||
|  | 			size = cnt * sizeof (long); | ||||||
|  | 			/* Restore the original data before returning
 | ||||||
|  | 			 */ | ||||||
|  | 			for (cnt <<= 1; cnt <= maxsize / sizeof (long); cnt <<= 1) { | ||||||
|  | 				addr  = (volatile ulong *) base + cnt; | ||||||
|  | 				*addr = save[--i]; | ||||||
|  | 			} | ||||||
| 			/* Write the actual size to ORx
 | 			/* Write the actual size to ORx
 | ||||||
| 			 */ | 			 */ | ||||||
| 			*orx_ptr = orx | ~(cnt * sizeof (long) - 1); | 			*orx_ptr = orx | ~(size - 1); | ||||||
| 			return (cnt * sizeof (long)); | 			return (size); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	return (maxsize); | 	return (maxsize); | ||||||
|  |  | ||||||
|  | @ -228,8 +228,8 @@ static long int dram_size (long int mamr_value, long int *base, | ||||||
| 	volatile immap_t *immap = (immap_t *) CFG_IMMR; | 	volatile immap_t *immap = (immap_t *) CFG_IMMR; | ||||||
| 	volatile memctl8xx_t *memctl = &immap->im_memctl; | 	volatile memctl8xx_t *memctl = &immap->im_memctl; | ||||||
| 	volatile long int *addr; | 	volatile long int *addr; | ||||||
| 	ulong cnt, val; |  	ulong cnt, val, size; | ||||||
| 	ulong save[32];			/* to make test non-destructive */ |  	ulong save[32];			/* to make test non-destructive */ | ||||||
| 	unsigned char i = 0; | 	unsigned char i = 0; | ||||||
| 
 | 
 | ||||||
| 	memctl->memc_mamr = mamr_value; | 	memctl->memc_mamr = mamr_value; | ||||||
|  | @ -248,7 +248,13 @@ static long int dram_size (long int mamr_value, long int *base, | ||||||
| 
 | 
 | ||||||
| 	/* check at base address */ | 	/* check at base address */ | ||||||
| 	if ((val = *addr) != 0) { | 	if ((val = *addr) != 0) { | ||||||
|  | 		/* Restore the original data before leaving the function.
 | ||||||
|  | 		 */ | ||||||
| 		*addr = save[i]; | 		*addr = save[i]; | ||||||
|  | 		for (cnt = 1; cnt <= maxsize / sizeof(long); cnt <<= 1) { | ||||||
|  | 			addr  = (volatile ulong *) base + cnt; | ||||||
|  | 			*addr = save[--i]; | ||||||
|  | 		} | ||||||
| 		return (0); | 		return (0); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -259,7 +265,14 @@ static long int dram_size (long int mamr_value, long int *base, | ||||||
| 		*addr = save[--i]; | 		*addr = save[--i]; | ||||||
| 
 | 
 | ||||||
| 		if (val != (~cnt)) { | 		if (val != (~cnt)) { | ||||||
| 			return (cnt * sizeof (long)); | 			size = cnt * sizeof (long); | ||||||
|  | 			/* Restore the original data before returning
 | ||||||
|  | 			 */ | ||||||
|  | 			for (cnt <<= 1; cnt <= maxsize / sizeof (long); cnt <<= 1) { | ||||||
|  | 				addr  = (volatile ulong *) base + cnt; | ||||||
|  | 				*addr = save[--i]; | ||||||
|  | 			} | ||||||
|  | 			return (size); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	return (maxsize); | 	return (maxsize); | ||||||
|  |  | ||||||
|  | @ -321,8 +321,8 @@ static long int dram_size (long int mamr_value, long int *base, | ||||||
| 	volatile immap_t *immap = (immap_t *) CFG_IMMR; | 	volatile immap_t *immap = (immap_t *) CFG_IMMR; | ||||||
| 	volatile memctl8xx_t *memctl = &immap->im_memctl; | 	volatile memctl8xx_t *memctl = &immap->im_memctl; | ||||||
| 	volatile long int *addr; | 	volatile long int *addr; | ||||||
| 	ulong cnt, val; |  	ulong cnt, val, size; | ||||||
| 	ulong save[32];			/* to make test non-destructive */ |  	ulong save[32];			/* to make test non-destructive */ | ||||||
| 	unsigned char i = 0; | 	unsigned char i = 0; | ||||||
| 
 | 
 | ||||||
| 	memctl->memc_mamr = mamr_value; | 	memctl->memc_mamr = mamr_value; | ||||||
|  | @ -341,7 +341,13 @@ static long int dram_size (long int mamr_value, long int *base, | ||||||
| 
 | 
 | ||||||
| 	/* check at base address */ | 	/* check at base address */ | ||||||
| 	if ((val = *addr) != 0) { | 	if ((val = *addr) != 0) { | ||||||
|  | 		/* Restore the original data before leaving the function.
 | ||||||
|  | 		 */ | ||||||
| 		*addr = save[i]; | 		*addr = save[i]; | ||||||
|  | 		for (cnt = 1; cnt <= maxsize / sizeof(long); cnt <<= 1) { | ||||||
|  | 			addr  = (volatile ulong *) base + cnt; | ||||||
|  | 			*addr = save[--i]; | ||||||
|  | 		} | ||||||
| 		return (0); | 		return (0); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -352,7 +358,14 @@ static long int dram_size (long int mamr_value, long int *base, | ||||||
| 		*addr = save[--i]; | 		*addr = save[--i]; | ||||||
| 
 | 
 | ||||||
| 		if (val != (~cnt)) { | 		if (val != (~cnt)) { | ||||||
| 			return (cnt * sizeof (long)); | 			size = cnt * sizeof (long); | ||||||
|  | 			/* Restore the original data before returning
 | ||||||
|  | 			 */ | ||||||
|  | 			for (cnt <<= 1; cnt <= maxsize / sizeof (long); cnt <<= 1) { | ||||||
|  | 				addr  = (volatile ulong *) base + cnt; | ||||||
|  | 				*addr = save[--i]; | ||||||
|  | 			} | ||||||
|  | 			return (size); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	return (maxsize); | 	return (maxsize); | ||||||
|  |  | ||||||
|  | @ -97,7 +97,7 @@ flash_init (void) | ||||||
| #ifndef CONFIG_P3G4 | #ifndef CONFIG_P3G4 | ||||||
| 	    printf("["); | 	    printf("["); | ||||||
| 	    print_size (size, ""); | 	    print_size (size, ""); | ||||||
| 	    printf("@%08lX] ", size>>20, base); | 	    printf("@%08lX] ", base); | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| 	    if (flash_info[i].flash_id == FLASH_UNKNOWN) { | 	    if (flash_info[i].flash_id == FLASH_UNKNOWN) { | ||||||
|  |  | ||||||
							
								
								
									
										120
									
								
								board/rmu/rmu.c
								
								
								
								
							
							
						
						
									
										120
									
								
								board/rmu/rmu.c
								
								
								
								
							|  | @ -94,39 +94,41 @@ int checkboard (void) | ||||||
| 
 | 
 | ||||||
| long int initdram (int board_type) | long int initdram (int board_type) | ||||||
| { | { | ||||||
|     volatile immap_t     *immap  = (immap_t *)CFG_IMMR; | 	volatile immap_t *immap = (immap_t *) CFG_IMMR; | ||||||
|     volatile memctl8xx_t *memctl = &immap->im_memctl; | 	volatile memctl8xx_t *memctl = &immap->im_memctl; | ||||||
|     long int size9 ; | 	long int size9; | ||||||
| 
 | 
 | ||||||
|     upmconfig(UPMA, (uint *)sdram_table, sizeof(sdram_table)/sizeof(uint)); | 	upmconfig (UPMA, (uint *) sdram_table, | ||||||
|  | 		   sizeof (sdram_table) / sizeof (uint)); | ||||||
| 
 | 
 | ||||||
| 	/* Refresh clock prescalar */ | 	/* Refresh clock prescalar */ | ||||||
|     memctl->memc_mptpr = CFG_MPTPR ; | 	memctl->memc_mptpr = CFG_MPTPR; | ||||||
| 
 | 
 | ||||||
|     memctl->memc_mar  = 0x00000088; | 	memctl->memc_mar = 0x00000088; | ||||||
| 
 | 
 | ||||||
| 	/* Map controller banks 1 to the SDRAM bank */ | 	/* Map controller banks 1 to the SDRAM bank */ | ||||||
|     memctl->memc_or1 = CFG_OR1_PRELIM; | 	memctl->memc_or1 = CFG_OR1_PRELIM; | ||||||
|     memctl->memc_br1 = CFG_BR1_PRELIM; | 	memctl->memc_br1 = CFG_BR1_PRELIM; | ||||||
| 
 | 
 | ||||||
|     memctl->memc_mamr = CFG_MAMR_9COL & (~(MAMR_PTAE)); /* no refresh yet */ | 	memctl->memc_mamr = CFG_MAMR_9COL & (~(MAMR_PTAE));	/* no refresh yet */ | ||||||
| 
 | 
 | ||||||
|     udelay(200); | 	udelay (200); | ||||||
| 
 | 
 | ||||||
|     /* perform SDRAM initializsation sequence */ | 	/* perform SDRAM initializsation sequence */ | ||||||
| 
 | 
 | ||||||
| 	memctl->memc_mcr  = 0x80002136 ; /* SDRAM bank 0 */ | 	memctl->memc_mcr = 0x80002136;	/* SDRAM bank 0 */ | ||||||
|     udelay(1); | 	udelay (1); | ||||||
| 
 | 
 | ||||||
|     memctl->memc_mamr |= MAMR_PTAE;	/* enable refresh */ | 	memctl->memc_mamr |= MAMR_PTAE;	/* enable refresh */ | ||||||
| 
 | 
 | ||||||
|     udelay (1000); | 	udelay (1000); | ||||||
| 
 | 
 | ||||||
| 	/* Check Bank 0 Memory Size,
 | 	/* Check Bank 0 Memory Size,
 | ||||||
| 	 * 9 column mode | 	 * 9 column mode | ||||||
| 	 */ | 	 */ | ||||||
| 
 | 
 | ||||||
| 	size9 = dram_size (CFG_MAMR_9COL, (ulong *)SDRAM_BASE_PRELIM, SDRAM_MAX_SIZE) ; | 	size9 = dram_size (CFG_MAMR_9COL, (ulong *) SDRAM_BASE_PRELIM, | ||||||
|  | 			   SDRAM_MAX_SIZE); | ||||||
| 
 | 
 | ||||||
| 	/*
 | 	/*
 | ||||||
| 	 * Final mapping: | 	 * Final mapping: | ||||||
|  | @ -135,7 +137,7 @@ long int initdram (int board_type) | ||||||
| 	memctl->memc_or1 = ((-size9) & 0xFFFF0000) | CFG_OR_TIMING_SDRAM; | 	memctl->memc_or1 = ((-size9) & 0xFFFF0000) | CFG_OR_TIMING_SDRAM; | ||||||
| 	udelay (1000); | 	udelay (1000); | ||||||
| 
 | 
 | ||||||
|     return (size9); | 	return (size9); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* ------------------------------------------------------------------------- */ | /* ------------------------------------------------------------------------- */ | ||||||
|  | @ -148,44 +150,58 @@ long int initdram (int board_type) | ||||||
|  * - short between data lines |  * - short between data lines | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| static long int dram_size (long int mamr_value, long int *base, long int maxsize) | static long int dram_size (long int mamr_value, long int *base, | ||||||
|  | 			   long int maxsize) | ||||||
| { | { | ||||||
|     volatile immap_t     *immap  = (immap_t *)CFG_IMMR; | 	volatile immap_t *immap = (immap_t *) CFG_IMMR; | ||||||
|     volatile memctl8xx_t *memctl = &immap->im_memctl; | 	volatile memctl8xx_t *memctl = &immap->im_memctl; | ||||||
|     volatile long int	 *addr; | 	volatile long int *addr; | ||||||
|     ulong		  cnt, val; | 	ulong cnt, val, size; | ||||||
|     ulong		  save[32];	/* to make test non-destructive */ | 	ulong save[32];		/* to make test non-destructive */ | ||||||
|     unsigned char	  i = 0; | 	unsigned char i = 0; | ||||||
| 
 | 
 | ||||||
|     memctl->memc_mamr = mamr_value; | 	memctl->memc_mamr = mamr_value; | ||||||
| 
 | 
 | ||||||
|     for (cnt = maxsize/sizeof(long); cnt > 0; cnt >>= 1) { | 	for (cnt = maxsize / sizeof (long); cnt > 0; cnt >>= 1) { | ||||||
| 	addr = base + cnt;	/* pointer arith! */ | 		addr = base + cnt;	/* pointer arith! */ | ||||||
| 
 | 
 | ||||||
| 	save[i++] = *addr; | 		save[i++] = *addr; | ||||||
| 	*addr = ~cnt; | 		*addr = ~cnt; | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /* write 0 to base address */ |  | ||||||
|     addr = base; |  | ||||||
|     save[i] = *addr; |  | ||||||
|     *addr = 0; |  | ||||||
| 
 |  | ||||||
|     /* check at base address */ |  | ||||||
|     if ((val = *addr) != 0) { |  | ||||||
| 	*addr = save[i]; |  | ||||||
| 	return (0); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     for (cnt = 1; cnt <= maxsize/sizeof(long); cnt <<= 1) { |  | ||||||
| 	addr = base + cnt;	/* pointer arith! */ |  | ||||||
| 
 |  | ||||||
| 	val = *addr; |  | ||||||
| 	*addr = save[--i]; |  | ||||||
| 
 |  | ||||||
| 	if (val != (~cnt)) { |  | ||||||
| 	    return (cnt * sizeof(long)); |  | ||||||
| 	} | 	} | ||||||
|     } | 
 | ||||||
|     return (maxsize); | 	/* write 0 to base address */ | ||||||
|  | 	addr = base; | ||||||
|  | 	save[i] = *addr; | ||||||
|  | 	*addr = 0; | ||||||
|  | 
 | ||||||
|  | 	/* check at base address */ | ||||||
|  | 	if ((val = *addr) != 0) { | ||||||
|  | 		/* Restore the original data before leaving the function.
 | ||||||
|  | 		 */ | ||||||
|  | 		*addr = save[i]; | ||||||
|  | 		for (cnt = 1; cnt <= maxsize / sizeof(long); cnt <<= 1) { | ||||||
|  | 			addr  = (volatile ulong *) base + cnt; | ||||||
|  | 			*addr = save[--i]; | ||||||
|  | 		} | ||||||
|  | 		return (0); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	for (cnt = 1; cnt <= maxsize / sizeof (long); cnt <<= 1) { | ||||||
|  | 		addr = base + cnt;	/* pointer arith! */ | ||||||
|  | 
 | ||||||
|  | 		val = *addr; | ||||||
|  | 		*addr = save[--i]; | ||||||
|  | 
 | ||||||
|  | 		if (val != (~cnt)) { | ||||||
|  | 			size = cnt * sizeof (long); | ||||||
|  | 			/* Restore the original data before returning
 | ||||||
|  | 			 */ | ||||||
|  | 			for (cnt <<= 1; cnt <= maxsize / sizeof (long); cnt <<= 1) { | ||||||
|  | 				addr  = (volatile ulong *) base + cnt; | ||||||
|  | 				*addr = save[--i]; | ||||||
|  | 			} | ||||||
|  | 			return (size); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return (maxsize); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -230,7 +230,7 @@ static long int try_init (volatile memctl8260_t * memctl, ulong sdmr, | ||||||
| 	volatile uint *orx_ptr; | 	volatile uint *orx_ptr; | ||||||
| 	int i; | 	int i; | ||||||
| 	ulong save[32];				/* to make test non-destructive */ | 	ulong save[32];				/* to make test non-destructive */ | ||||||
| 	ulong maxsize; | 	ulong maxsize, size; | ||||||
| 
 | 
 | ||||||
| 	/* We must be able to test a location outsize the maximum legal size
 | 	/* We must be able to test a location outsize the maximum legal size
 | ||||||
| 	 * to find out THAT we are outside; but this address still has to be | 	 * to find out THAT we are outside; but this address still has to be | ||||||
|  | @ -299,7 +299,13 @@ static long int try_init (volatile memctl8260_t * memctl, ulong sdmr, | ||||||
| 	*addr = 0; | 	*addr = 0; | ||||||
| 
 | 
 | ||||||
| 	if ((val = *addr) != 0) { | 	if ((val = *addr) != 0) { | ||||||
|  | 		/* Restore the original data before leaving the function.
 | ||||||
|  | 		 */ | ||||||
| 		*addr = save[i]; | 		*addr = save[i]; | ||||||
|  | 		for (cnt = 1; cnt <= maxsize / sizeof(long); cnt <<= 1) { | ||||||
|  | 			addr  = (volatile ulong *) base + cnt; | ||||||
|  | 			*addr = save[--i]; | ||||||
|  | 		} | ||||||
| 		return (0); | 		return (0); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -308,10 +314,17 @@ static long int try_init (volatile memctl8260_t * memctl, ulong sdmr, | ||||||
| 		val = *addr; | 		val = *addr; | ||||||
| 		*addr = save[--i]; | 		*addr = save[--i]; | ||||||
| 		if (val != ~cnt) { | 		if (val != ~cnt) { | ||||||
|  | 			size = cnt * sizeof (long); | ||||||
|  | 			/* Restore the original data before leaving the function.
 | ||||||
|  | 			 */  | ||||||
|  | 			for (cnt <<= 1; cnt <= maxsize / sizeof (long); cnt <<= 1) { | ||||||
|  | 				addr  = (volatile ulong *) base + cnt; | ||||||
|  | 				*addr = save[--i]; | ||||||
|  | 			} | ||||||
| 			/* Write the actual size to ORx
 | 			/* Write the actual size to ORx
 | ||||||
| 			 */ | 			 */ | ||||||
| 			*orx_ptr = orx | ~(cnt * sizeof (long) - 1); | 			*orx_ptr = orx | ~(size - 1); | ||||||
| 			return (cnt * sizeof (long)); | 			return (size); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	return (maxsize); | 	return (maxsize); | ||||||
|  |  | ||||||
|  | @ -389,8 +389,8 @@ static long int dram_size (long int mamr_value, long int *base, | ||||||
| 	volatile immap_t *immap = (immap_t *) CFG_IMMR; | 	volatile immap_t *immap = (immap_t *) CFG_IMMR; | ||||||
| 	volatile memctl8xx_t *memctl = &immap->im_memctl; | 	volatile memctl8xx_t *memctl = &immap->im_memctl; | ||||||
| 	volatile long int *addr; | 	volatile long int *addr; | ||||||
| 	ulong cnt, val; | 	ulong cnt, val, size; | ||||||
| 	ulong save[32];				/* to make test non-destructive */ | 	ulong save[32];			/* to make test non-destructive */ | ||||||
| 	unsigned char i = 0; | 	unsigned char i = 0; | ||||||
| 
 | 
 | ||||||
| 	memctl->memc_mamr = mamr_value; | 	memctl->memc_mamr = mamr_value; | ||||||
|  | @ -409,7 +409,13 @@ static long int dram_size (long int mamr_value, long int *base, | ||||||
| 
 | 
 | ||||||
| 	/* check at base address */ | 	/* check at base address */ | ||||||
| 	if ((val = *addr) != 0) { | 	if ((val = *addr) != 0) { | ||||||
|  | 		/* Restore the original data before leaving the function.
 | ||||||
|  | 		 */ | ||||||
| 		*addr = save[i]; | 		*addr = save[i]; | ||||||
|  | 		for (cnt = 1; cnt <= maxsize / sizeof(long); cnt <<= 1) { | ||||||
|  | 			addr  = (volatile ulong *) base + cnt; | ||||||
|  | 			*addr = save[--i]; | ||||||
|  | 		} | ||||||
| 		return (0); | 		return (0); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -420,7 +426,14 @@ static long int dram_size (long int mamr_value, long int *base, | ||||||
| 		*addr = save[--i]; | 		*addr = save[--i]; | ||||||
| 
 | 
 | ||||||
| 		if (val != (~cnt)) { | 		if (val != (~cnt)) { | ||||||
| 			return (cnt * sizeof (long)); | 			size = cnt * sizeof (long); | ||||||
|  | 			/* Restore the original data before returning
 | ||||||
|  | 			 */ | ||||||
|  | 			for (cnt <<= 1; cnt <= maxsize / sizeof (long); cnt <<= 1) { | ||||||
|  | 				addr  = (volatile ulong *) base + cnt; | ||||||
|  | 				*addr = save[--i]; | ||||||
|  | 			} | ||||||
|  | 			return (size); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	return (maxsize); | 	return (maxsize); | ||||||
|  |  | ||||||
							
								
								
									
										29
									
								
								fs/fat/fat.c
								
								
								
								
							
							
						
						
									
										29
									
								
								fs/fat/fat.c
								
								
								
								
							|  | @ -33,11 +33,6 @@ | ||||||
| 
 | 
 | ||||||
| #if (CONFIG_COMMANDS & CFG_CMD_FAT) | #if (CONFIG_COMMANDS & CFG_CMD_FAT) | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_AUTO_UPDATE |  | ||||||
| /* the VFAT code has a bug which breaks auto update */ |  | ||||||
| #undef CONFIG_SUPPORT_VFAT |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| /*
 | /*
 | ||||||
|  * Convert a string to lowercase. |  * Convert a string to lowercase. | ||||||
|  */ |  */ | ||||||
|  | @ -429,6 +424,7 @@ slot2str(dir_slot *slotptr, char *l_name, int *idx) | ||||||
|  * into 'retdent' |  * into 'retdent' | ||||||
|  * Return 0 on success, -1 otherwise. |  * Return 0 on success, -1 otherwise. | ||||||
|  */ |  */ | ||||||
|  | __u8	 get_vfatname_block[MAX_CLUSTSIZE]; | ||||||
| static int | static int | ||||||
| get_vfatname(fsdata *mydata, int curclust, __u8 *cluster, | get_vfatname(fsdata *mydata, int curclust, __u8 *cluster, | ||||||
| 	     dir_entry *retdent, char *l_name) | 	     dir_entry *retdent, char *l_name) | ||||||
|  | @ -447,7 +443,6 @@ get_vfatname(fsdata *mydata, int curclust, __u8 *cluster, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if ((__u8*)slotptr >= nextclust) { | 	if ((__u8*)slotptr >= nextclust) { | ||||||
| 		__u8	 block[MAX_CLUSTSIZE]; |  | ||||||
| 		dir_slot *slotptr2; | 		dir_slot *slotptr2; | ||||||
| 
 | 
 | ||||||
| 		slotptr--; | 		slotptr--; | ||||||
|  | @ -457,18 +452,18 @@ get_vfatname(fsdata *mydata, int curclust, __u8 *cluster, | ||||||
| 			FAT_ERROR("Invalid FAT entry\n"); | 			FAT_ERROR("Invalid FAT entry\n"); | ||||||
| 			return -1; | 			return -1; | ||||||
| 		} | 		} | ||||||
| 		if (get_cluster(mydata, curclust, block, | 		if (get_cluster(mydata, curclust, get_vfatname_block, | ||||||
| 				mydata->clust_size * SECTOR_SIZE) != 0) { | 				mydata->clust_size * SECTOR_SIZE) != 0) { | ||||||
| 			FAT_DPRINT("Error: reading directory block\n"); | 			FAT_DPRINT("Error: reading directory block\n"); | ||||||
| 			return -1; | 			return -1; | ||||||
| 		} | 		} | ||||||
| 		slotptr2 = (dir_slot*) block; | 		slotptr2 = (dir_slot*) get_vfatname_block; | ||||||
| 		while (slotptr2->id > 0x01) { | 		while (slotptr2->id > 0x01) { | ||||||
| 			slotptr2++; | 			slotptr2++; | ||||||
| 		} | 		} | ||||||
| 		/* Save the real directory entry */ | 		/* Save the real directory entry */ | ||||||
| 		realdent = (dir_entry*)slotptr2 + 1; | 		realdent = (dir_entry*)slotptr2 + 1; | ||||||
| 		while ((__u8*)slotptr2 >= block) { | 		while ((__u8*)slotptr2 >= get_vfatname_block) { | ||||||
| 			slot2str(slotptr2, l_name, &idx); | 			slot2str(slotptr2, l_name, &idx); | ||||||
| 			slotptr2--; | 			slotptr2--; | ||||||
| 		} | 		} | ||||||
|  | @ -514,12 +509,12 @@ mkcksum(const char *str) | ||||||
|  * Get the directory entry associated with 'filename' from the directory |  * Get the directory entry associated with 'filename' from the directory | ||||||
|  * starting at 'startsect' |  * starting at 'startsect' | ||||||
|  */ |  */ | ||||||
|  | __u8 get_dentfromdir_block[MAX_CLUSTSIZE]; | ||||||
| static dir_entry *get_dentfromdir (fsdata * mydata, int startsect, | static dir_entry *get_dentfromdir (fsdata * mydata, int startsect, | ||||||
| 				   char *filename, dir_entry * retdent, | 				   char *filename, dir_entry * retdent, | ||||||
| 				   int dols) | 				   int dols) | ||||||
| { | { | ||||||
|     __u16 prevcksum = 0xffff; |     __u16 prevcksum = 0xffff; | ||||||
|     __u8 block[MAX_CLUSTSIZE]; |  | ||||||
|     __u32 curclust = START (retdent); |     __u32 curclust = START (retdent); | ||||||
|     int files = 0, dirs = 0; |     int files = 0, dirs = 0; | ||||||
| 
 | 
 | ||||||
|  | @ -528,12 +523,12 @@ static dir_entry *get_dentfromdir (fsdata * mydata, int startsect, | ||||||
| 	dir_entry *dentptr; | 	dir_entry *dentptr; | ||||||
| 	int i; | 	int i; | ||||||
| 
 | 
 | ||||||
| 	if (get_cluster (mydata, curclust, block, | 	if (get_cluster (mydata, curclust, get_dentfromdir_block, | ||||||
| 		 mydata->clust_size * SECTOR_SIZE) != 0) { | 		 mydata->clust_size * SECTOR_SIZE) != 0) { | ||||||
| 	    FAT_DPRINT ("Error: reading directory block\n"); | 	    FAT_DPRINT ("Error: reading directory block\n"); | ||||||
| 	    return NULL; | 	    return NULL; | ||||||
| 	} | 	} | ||||||
| 	dentptr = (dir_entry *) block; | 	dentptr = (dir_entry *) get_dentfromdir_block; | ||||||
| 	for (i = 0; i < DIRENTSPERCLUST; i++) { | 	for (i = 0; i < DIRENTSPERCLUST; i++) { | ||||||
| 	    char s_name[14], l_name[256]; | 	    char s_name[14], l_name[256]; | ||||||
| 
 | 
 | ||||||
|  | @ -544,7 +539,7 @@ static dir_entry *get_dentfromdir (fsdata * mydata, int startsect, | ||||||
| 		    (dentptr->name[0] & 0x40)) { | 		    (dentptr->name[0] & 0x40)) { | ||||||
| 		    prevcksum = ((dir_slot *) dentptr) | 		    prevcksum = ((dir_slot *) dentptr) | ||||||
| 			    ->alias_checksum; | 			    ->alias_checksum; | ||||||
| 		    get_vfatname (mydata, curclust, block, | 		    get_vfatname (mydata, curclust, get_dentfromdir_block, | ||||||
| 				  dentptr, l_name); | 				  dentptr, l_name); | ||||||
| 		    if (dols) { | 		    if (dols) { | ||||||
| 			int isdir = (dentptr->attr & ATTR_DIR); | 			int isdir = (dentptr->attr & ATTR_DIR); | ||||||
|  | @ -716,11 +711,11 @@ read_bootsectandvi(boot_sector *bs, volume_info *volinfo, int *fatsize) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | __u8 do_fat_read_block[MAX_CLUSTSIZE];  /* Block buffer */ | ||||||
| static long | static long | ||||||
| do_fat_read (const char *filename, void *buffer, unsigned long maxsize, | do_fat_read (const char *filename, void *buffer, unsigned long maxsize, | ||||||
| 	     int dols) | 	     int dols) | ||||||
| { | { | ||||||
|     __u8 block[MAX_CLUSTSIZE];  /* Block buffer */ |  | ||||||
|     char fnamecopy[2048]; |     char fnamecopy[2048]; | ||||||
|     boot_sector bs; |     boot_sector bs; | ||||||
|     volume_info volinfo; |     volume_info volinfo; | ||||||
|  | @ -792,11 +787,11 @@ do_fat_read (const char *filename, void *buffer, unsigned long maxsize, | ||||||
|     while (1) { |     while (1) { | ||||||
| 	int i; | 	int i; | ||||||
| 
 | 
 | ||||||
| 	if (disk_read (cursect, mydata->clust_size, block) < 0) { | 	if (disk_read (cursect, mydata->clust_size, do_fat_read_block) < 0) { | ||||||
| 	    FAT_DPRINT ("Error: reading rootdir block\n"); | 	    FAT_DPRINT ("Error: reading rootdir block\n"); | ||||||
| 	    return -1; | 	    return -1; | ||||||
| 	} | 	} | ||||||
| 	dentptr = (dir_entry *) block; | 	dentptr = (dir_entry *) do_fat_read_block; | ||||||
| 	for (i = 0; i < DIRENTSPERBLOCK; i++) { | 	for (i = 0; i < DIRENTSPERBLOCK; i++) { | ||||||
| 	    char s_name[14], l_name[256]; | 	    char s_name[14], l_name[256]; | ||||||
| 
 | 
 | ||||||
|  | @ -806,7 +801,7 @@ do_fat_read (const char *filename, void *buffer, unsigned long maxsize, | ||||||
| 		if ((dentptr->attr & ATTR_VFAT) && | 		if ((dentptr->attr & ATTR_VFAT) && | ||||||
| 		    (dentptr->name[0] & 0x40)) { | 		    (dentptr->name[0] & 0x40)) { | ||||||
| 		    prevcksum = ((dir_slot *) dentptr)->alias_checksum; | 		    prevcksum = ((dir_slot *) dentptr)->alias_checksum; | ||||||
| 		    get_vfatname (mydata, 0, block, dentptr, l_name); | 		    get_vfatname (mydata, 0, do_fat_read_block, dentptr, l_name); | ||||||
| 		    if (dols == LS_ROOT) { | 		    if (dols == LS_ROOT) { | ||||||
| 			int isdir = (dentptr->attr & ATTR_DIR); | 			int isdir = (dentptr->attr & ATTR_DIR); | ||||||
| 			char dirc; | 			char dirc; | ||||||
|  |  | ||||||
|  | @ -24,6 +24,6 @@ | ||||||
| #ifndef	__VERSION_H__ | #ifndef	__VERSION_H__ | ||||||
| #define	__VERSION_H__ | #define	__VERSION_H__ | ||||||
| 
 | 
 | ||||||
| #define	U_BOOT_VERSION	"U-Boot 1.0.0-pre" | #define	U_BOOT_VERSION	"U-Boot 1.0.0" | ||||||
| 
 | 
 | ||||||
| #endif	/* __VERSION_H__ */ | #endif	/* __VERSION_H__ */ | ||||||
|  |  | ||||||
|  | @ -111,9 +111,9 @@ static int init_baudrate (void) | ||||||
| 
 | 
 | ||||||
| static int display_banner (void) | static int display_banner (void) | ||||||
| { | { | ||||||
|  | #ifdef CONFIG_SILENT_CONSOLE | ||||||
| 	DECLARE_GLOBAL_DATA_PTR; | 	DECLARE_GLOBAL_DATA_PTR; | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_SILENT_CONSOLE |  | ||||||
| 	if (gd->flags & GD_FLG_SILENT) | 	if (gd->flags & GD_FLG_SILENT) | ||||||
| 		return (0); | 		return (0); | ||||||
| #endif | #endif | ||||||
|  | @ -161,9 +161,9 @@ static int display_dram_config (void) | ||||||
| 
 | 
 | ||||||
| static void display_flash_config (ulong size) | static void display_flash_config (ulong size) | ||||||
| { | { | ||||||
|  | #ifdef CONFIG_SILENT_CONSOLE | ||||||
| 	DECLARE_GLOBAL_DATA_PTR; | 	DECLARE_GLOBAL_DATA_PTR; | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_SILENT_CONSOLE |  | ||||||
| 	if (gd->flags & GD_FLG_SILENT) | 	if (gd->flags & GD_FLG_SILENT) | ||||||
| 		return; | 		return; | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue