diff options
| -rw-r--r-- | common/cmd_mem.c | 322 | 
1 files changed, 161 insertions, 161 deletions
| diff --git a/common/cmd_mem.c b/common/cmd_mem.c index 02ff65843..5235bfe58 100644 --- a/common/cmd_mem.c +++ b/common/cmd_mem.c @@ -655,32 +655,31 @@ static ulong mem_test_alt(vu_long *start, vu_long *end)  		0xaaaaaaaa,	/* alternating 1/0 */  	}; -		/* -		 * Data line test: write a pattern to the first -		 * location, write the 1's complement to a 'parking' -		 * address (changes the state of the data bus so a -		 * floating bus doesn't give a false OK), and then -		 * read the value back. Note that we read it back -		 * into a variable because the next time we read it, -		 * it might be right (been there, tough to explain to -		 * the quality guys why it prints a failure when the -		 * "is" and "should be" are obviously the same in the -		 * error message). -		 * -		 * Rather than exhaustively testing, we test some -		 * patterns by shifting '1' bits through a field of -		 * '0's and '0' bits through a field of '1's (i.e. -		 * pattern and ~pattern). -		 */ -		addr = start; -		for (j = 0; j < sizeof(bitpattern) / sizeof(bitpattern[0]); -				j++) { -		    val = bitpattern[j]; -		    for (; val != 0; val <<= 1) { +	/* +	 * Data line test: write a pattern to the first +	 * location, write the 1's complement to a 'parking' +	 * address (changes the state of the data bus so a +	 * floating bus doesn't give a false OK), and then +	 * read the value back. Note that we read it back +	 * into a variable because the next time we read it, +	 * it might be right (been there, tough to explain to +	 * the quality guys why it prints a failure when the +	 * "is" and "should be" are obviously the same in the +	 * error message). +	 * +	 * Rather than exhaustively testing, we test some +	 * patterns by shifting '1' bits through a field of +	 * '0's and '0' bits through a field of '1's (i.e. +	 * pattern and ~pattern). +	 */ +	addr = start; +	for (j = 0; j < sizeof(bitpattern) / sizeof(bitpattern[0]); j++) { +		val = bitpattern[j]; +		for (; val != 0; val <<= 1) {  			*addr  = val;  			*dummy  = ~val; /* clear the test data off the bus */  			readback = *addr; -			if(readback != val) { +			if (readback != val) {  				printf("FAILURE (data line): "  					"expected %08lx, actual %08lx\n",  						val, readback); @@ -703,129 +702,130 @@ static ulong mem_test_alt(vu_long *start, vu_long *end)  					return -1;  				}  			} -		    }  		} +	} -		/* -		 * Based on code whose Original Author and Copyright -		 * information follows: Copyright (c) 1998 by Michael -		 * Barr. This software is placed into the public -		 * domain and may be used for any purpose. However, -		 * this notice must not be changed or removed and no -		 * warranty is either expressed or implied by its -		 * publication or distribution. -		 */ +	/* +	 * Based on code whose Original Author and Copyright +	 * information follows: Copyright (c) 1998 by Michael +	 * Barr. This software is placed into the public +	 * domain and may be used for any purpose. However, +	 * this notice must not be changed or removed and no +	 * warranty is either expressed or implied by its +	 * publication or distribution. +	 */ -		/* -		 * Address line test -		 * -		 * Description: Test the address bus wiring in a -		 *              memory region by performing a walking -		 *              1's test on the relevant bits of the -		 *              address and checking for aliasing. -		 *              This test will find single-bit -		 *              address failures such as stuck-high, -		 *              stuck-low, and shorted pins. The base -		 *              address and size of the region are -		 *              selected by the caller. -		 * -		 * Notes:	For best results, the selected base -		 *              address should have enough LSB 0's to -		 *              guarantee single address bit changes. -		 *              For example, to test a 64-Kbyte -		 *              region, select a base address on a -		 *              64-Kbyte boundary. Also, select the -		 *              region size as a power-of-two if at -		 *              all possible. -		 * -		 * Returns:     0 if the test succeeds, 1 if the test fails. -		 */ -		len = ((ulong)end - (ulong)start)/sizeof(vu_long); -		pattern = (vu_long) 0xaaaaaaaa; -		anti_pattern = (vu_long) 0x55555555; +	/* +	* Address line test -		debug("%s:%d: length = 0x%.8lx\n", -			__func__, __LINE__, len); -		/* -		 * Write the default pattern at each of the -		 * power-of-two offsets. -		 */ -		for (offset = 1; offset < len; offset <<= 1) -			start[offset] = pattern; +	 * Description: Test the address bus wiring in a +	 *              memory region by performing a walking +	 *              1's test on the relevant bits of the +	 *              address and checking for aliasing. +	 *              This test will find single-bit +	 *              address failures such as stuck-high, +	 *              stuck-low, and shorted pins. The base +	 *              address and size of the region are +	 *              selected by the caller. -		/* -		 * Check for address bits stuck high. -		 */ -		test_offset = 0; -		start[test_offset] = anti_pattern; +	 * Notes:	For best results, the selected base +	 *              address should have enough LSB 0's to +	 *              guarantee single address bit changes. +	 *              For example, to test a 64-Kbyte +	 *              region, select a base address on a +	 *              64-Kbyte boundary. Also, select the +	 *              region size as a power-of-two if at +	 *              all possible. +	 * +	 * Returns:     0 if the test succeeds, 1 if the test fails. +	 */ +	len = ((ulong)end - (ulong)start)/sizeof(vu_long); +	pattern = (vu_long) 0xaaaaaaaa; +	anti_pattern = (vu_long) 0x55555555; -		for (offset = 1; offset < len; offset <<= 1) { -		    temp = start[offset]; -		    if (temp != pattern) { +	debug("%s:%d: length = 0x%.8lx\n", +		__func__, __LINE__, len); +	/* +	 * Write the default pattern at each of the +	 * power-of-two offsets. +	 */ +	for (offset = 1; offset < len; offset <<= 1) +		start[offset] = pattern; + +	/* +	 * Check for address bits stuck high. +	 */ +	test_offset = 0; +	start[test_offset] = anti_pattern; + +	for (offset = 1; offset < len; offset <<= 1) { +		temp = start[offset]; +		if (temp != pattern) {  			printf("\nFAILURE: Address bit stuck high @ 0x%.8lx:"  				" expected 0x%.8lx, actual 0x%.8lx\n",  				(ulong)&start[offset], pattern, temp);  			errs++;  			if (ctrlc()) { -			    putc('\n'); -			    return -1; +				putc('\n'); +				return -1;  			} -		    }  		} -		start[test_offset] = pattern; -		WATCHDOG_RESET(); +	} +	start[test_offset] = pattern; +	WATCHDOG_RESET(); -		/* -		 * Check for addr bits stuck low or shorted. -		 */ -		for (test_offset = 1; test_offset < len; test_offset <<= 1) { -		    start[test_offset] = anti_pattern; +	/* +	 * Check for addr bits stuck low or shorted. +	 */ +	for (test_offset = 1; test_offset < len; test_offset <<= 1) { +		start[test_offset] = anti_pattern; -		    for (offset = 1; offset < len; offset <<= 1) { +		for (offset = 1; offset < len; offset <<= 1) {  			temp = start[offset];  			if ((temp != pattern) && (offset != test_offset)) { -			    printf("\nFAILURE: Address bit stuck low or shorted @" -				" 0x%.8lx: expected 0x%.8lx, actual 0x%.8lx\n", -				(ulong)&start[offset], pattern, temp); -			    errs++; -			    if (ctrlc()) { -				putc('\n'); -				return -1; -			    } +				printf("\nFAILURE: Address bit stuck low or" +					" shorted @ 0x%.8lx: expected 0x%.8lx," +					" actual 0x%.8lx\n", +					(ulong)&start[offset], pattern, temp); +				errs++; +				if (ctrlc()) { +					putc('\n'); +					return -1; +				}  			} -		    } -		    start[test_offset] = pattern;  		} +		start[test_offset] = pattern; +	} -		/* -		 * Description: Test the integrity of a physical -		 *		memory device by performing an -		 *		increment/decrement test over the -		 *		entire region. In the process every -		 *		storage bit in the device is tested -		 *		as a zero and a one. The base address -		 *		and the size of the region are -		 *		selected by the caller. -		 * -		 * Returns:     0 if the test succeeds, 1 if the test fails. -		 */ -		num_words = ((ulong)end - (ulong)start)/sizeof(vu_long) + 1; +	/* +	 * Description: Test the integrity of a physical +	 *		memory device by performing an +	 *		increment/decrement test over the +	 *		entire region. In the process every +	 *		storage bit in the device is tested +	 *		as a zero and a one. The base address +	 *		and the size of the region are +	 *		selected by the caller. +	 * +	 * Returns:     0 if the test succeeds, 1 if the test fails. +	 */ +	num_words = ((ulong)end - (ulong)start)/sizeof(vu_long) + 1; -		/* -		 * Fill memory with a known pattern. -		 */ -		for (pattern = 1, offset = 0; offset < num_words; pattern++, offset++) { -			WATCHDOG_RESET(); -			start[offset] = pattern; -		} +	/* +	 * Fill memory with a known pattern. +	 */ +	for (pattern = 1, offset = 0; offset < num_words; pattern++, offset++) { +		WATCHDOG_RESET(); +		start[offset] = pattern; +	} -		/* -		 * Check each location and invert it for the second pass. -		 */ -		for (pattern = 1, offset = 0; offset < num_words; pattern++, offset++) { -		    WATCHDOG_RESET(); -		    temp = start[offset]; -		    if (temp != pattern) { +	/* +	 * Check each location and invert it for the second pass. +	 */ +	for (pattern = 1, offset = 0; offset < num_words; pattern++, offset++) { +		WATCHDOG_RESET(); +		temp = start[offset]; +		if (temp != pattern) {  			printf("\nFAILURE (read/write) @ 0x%.8lx:"  				" expected 0x%.8lx, actual 0x%.8lx)\n",  				(ulong)&start[offset], pattern, temp); @@ -834,20 +834,20 @@ static ulong mem_test_alt(vu_long *start, vu_long *end)  				putc('\n');  				return -1;  			} -		    } - -		    anti_pattern = ~pattern; -		    start[offset] = anti_pattern;  		} -		/* -		 * Check each location for the inverted pattern and zero it. -		 */ -		for (pattern = 1, offset = 0; offset < num_words; pattern++, offset++) { -		    WATCHDOG_RESET(); -		    anti_pattern = ~pattern; -		    temp = start[offset]; -		    if (temp != anti_pattern) { +		anti_pattern = ~pattern; +		start[offset] = anti_pattern; +	} + +	/* +	 * Check each location for the inverted pattern and zero it. +	 */ +	for (pattern = 1, offset = 0; offset < num_words; pattern++, offset++) { +		WATCHDOG_RESET(); +		anti_pattern = ~pattern; +		temp = start[offset]; +		if (temp != anti_pattern) {  			printf("\nFAILURE (read/write): @ 0x%.8lx:"  				" expected 0x%.8lx, actual 0x%.8lx)\n",  				(ulong)&start[offset], anti_pattern, temp); @@ -856,9 +856,9 @@ static ulong mem_test_alt(vu_long *start, vu_long *end)  				putc('\n');  				return -1;  			} -		    } -		    start[offset] = 0;  		} +		start[offset] = 0; +	}  	return 0;  } @@ -886,34 +886,34 @@ static ulong mem_test_quick(vu_long *start, vu_long *end, vu_long pattern,  		else  			pattern = ~pattern;  	} -		printf("\rPattern %08lX  Writing..." -			"%12s" -			"\b\b\b\b\b\b\b\b\b\b", -			pattern, ""); +	printf("\rPattern %08lX  Writing..." +		"%12s" +		"\b\b\b\b\b\b\b\b\b\b", +		pattern, ""); -		for (addr = start, val = pattern; addr < end; addr++) { -			WATCHDOG_RESET(); -			*addr = val; -			val += incr; -		} +	for (addr = start, val = pattern; addr < end; addr++) { +		WATCHDOG_RESET(); +		*addr = val; +		val += incr; +	} -		puts("Reading..."); +	puts("Reading..."); -		for (addr = start, val = pattern; addr < end; addr++) { -			WATCHDOG_RESET(); -			readback = *addr; -			if (readback != val) { -				printf("\nMem error @ 0x%08X: " -					"found %08lX, expected %08lX\n", -					(uint)(uintptr_t)addr, readback, val); -				errs++; -				if (ctrlc()) { -					putc('\n'); -					return -1; -				} +	for (addr = start, val = pattern; addr < end; addr++) { +		WATCHDOG_RESET(); +		readback = *addr; +		if (readback != val) { +			printf("\nMem error @ 0x%08X: " +				"found %08lX, expected %08lX\n", +				(uint)(uintptr_t)addr, readback, val); +			errs++; +			if (ctrlc()) { +				putc('\n'); +				return -1;  			} -			val += incr;  		} +		val += incr; +	}  	return 0;  } |