diff options
Diffstat (limited to 'common/cmd_mem.c')
| -rw-r--r-- | common/cmd_mem.c | 58 | 
1 files changed, 44 insertions, 14 deletions
diff --git a/common/cmd_mem.c b/common/cmd_mem.c index 98508003b..a34b342f0 100644 --- a/common/cmd_mem.c +++ b/common/cmd_mem.c @@ -631,7 +631,7 @@ int do_mem_mtest (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	vu_long	*addr, *start, *end;  	ulong	val;  	ulong	readback; -	int     rcode = 0; +	ulong	errs = 0;  	int iterations = 1;  	int iteration_limit; @@ -698,9 +698,9 @@ int do_mem_mtest (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  		if (iteration_limit && iterations > iteration_limit) { -			printf("Tested %d iteration(s) without errors.\n", -				iterations-1); -			return 0; +			printf("Tested %d iteration(s) with %lu errors.\n", +				iterations-1, errs); +			return errs != 0;  		}  		printf("Iteration: %6d\r", iterations); @@ -732,9 +732,14 @@ int do_mem_mtest (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  			*dummy  = ~val; /* clear the test data off of the bus */  			readback = *addr;  			if(readback != val) { -			     printf ("FAILURE (data line): " +			    printf ("FAILURE (data line): "  				"expected %08lx, actual %08lx\n",  					  val, readback); +			    errs++; +			    if (ctrlc()) { +				putc ('\n'); +				return 1; +			    }  			}  			*addr  = ~val;  			*dummy  = val; @@ -743,6 +748,11 @@ int do_mem_mtest (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  			    printf ("FAILURE (data line): "  				"Is %08lx, should be %08lx\n",  					readback, ~val); +			    errs++; +			    if (ctrlc()) { +				putc ('\n'); +				return 1; +			    }  			}  		    }  		} @@ -808,7 +818,11 @@ int do_mem_mtest (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  			printf ("\nFAILURE: Address bit stuck high @ 0x%.8lx:"  				" expected 0x%.8lx, actual 0x%.8lx\n",  				(ulong)&start[offset], pattern, temp); -			return 1; +			errs++; +			if (ctrlc()) { +			    putc ('\n'); +			    return 1; +			}  		    }  		}  		start[test_offset] = pattern; @@ -826,7 +840,11 @@ int do_mem_mtest (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  			    printf ("\nFAILURE: Address bit stuck low or shorted @"  				" 0x%.8lx: expected 0x%.8lx, actual 0x%.8lx\n",  				(ulong)&start[offset], pattern, temp); -			    return 1; +			    errs++; +			    if (ctrlc()) { +				putc ('\n'); +				return 1; +			    }  			}  		    }  		    start[test_offset] = pattern; @@ -864,7 +882,11 @@ int do_mem_mtest (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  			printf ("\nFAILURE (read/write) @ 0x%.8lx:"  				" expected 0x%.8lx, actual 0x%.8lx)\n",  				(ulong)&start[offset], pattern, temp); -			return 1; +			errs++; +			if (ctrlc()) { +			    putc ('\n'); +			    return 1; +			}  		    }  		    anti_pattern = ~pattern; @@ -882,7 +904,11 @@ int do_mem_mtest (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  			printf ("\nFAILURE (read/write): @ 0x%.8lx:"  				" expected 0x%.8lx, actual 0x%.8lx)\n",  				(ulong)&start[offset], anti_pattern, temp); -			return 1; +			errs++; +			if (ctrlc()) { +			    putc ('\n'); +			    return 1; +			}  		    }  		    start[offset] = 0;  		} @@ -897,9 +923,9 @@ int do_mem_mtest (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  		}  		if (iteration_limit && iterations > iteration_limit) { -			printf("Tested %d iteration(s) without errors.\n", -				iterations-1); -			return 0; +			printf("Tested %d iteration(s) with %lu errors.\n", +				iterations-1, errs); +			return errs != 0;  		}  		++iterations; @@ -923,7 +949,11 @@ int do_mem_mtest (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  				printf ("\nMem error @ 0x%08X: "  					"found %08lX, expected %08lX\n",  					(uint)addr, readback, val); -				rcode = 1; +				errs++; +				if (ctrlc()) { +					putc ('\n'); +					return 1; +				}  			}  			val += incr;  		} @@ -943,7 +973,7 @@ int do_mem_mtest (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  		incr = -incr;  	}  #endif -	return rcode; +	return 0;	/* not reached */  }  |