diff options
Diffstat (limited to 'board/tqm8xx/tqm8xx.c')
| -rw-r--r-- | board/tqm8xx/tqm8xx.c | 19 | 
1 files changed, 16 insertions, 3 deletions
| diff --git a/board/tqm8xx/tqm8xx.c b/board/tqm8xx/tqm8xx.c index 53f1f2abb..badc79401 100644 --- a/board/tqm8xx/tqm8xx.c +++ b/board/tqm8xx/tqm8xx.c @@ -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 memctl8xx_t *memctl = &immap->im_memctl;  	volatile long int *addr; -	ulong cnt, val; -	ulong save[32];				/* to make test non-destructive */ +	ulong cnt, val, size; +	ulong save[32];			/* to make test non-destructive */  	unsigned char i = 0;  	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 */  	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);  	} @@ -420,7 +426,14 @@ static long int dram_size (long int mamr_value, long int *base,  		*addr = save[--i];  		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); |