diff options
| -rw-r--r-- | common/cmd_sf.c | 14 | 
1 files changed, 9 insertions, 5 deletions
| diff --git a/common/cmd_sf.c b/common/cmd_sf.c index 3994b0651..b4ceb7146 100644 --- a/common/cmd_sf.c +++ b/common/cmd_sf.c @@ -358,7 +358,8 @@ static void show_time(struct test_info *test, int stage)  	int bps;	/* Bits per second */  	speed = (long long)test->bytes * 1000; -	do_div(speed, test->time_ms[stage] * 1024); +	if (test->time_ms[stage]) +		do_div(speed, test->time_ms[stage] * 1024);  	bps = speed * 8;  	printf("%d %s: %d ticks, %d KiB/s %d.%03d Mbps\n", stage, @@ -446,11 +447,13 @@ static int do_spi_flash_test(int argc, char * const argv[])  {  	unsigned long offset;  	unsigned long len; -	uint8_t *buf = (uint8_t *)CONFIG_SYS_TEXT_BASE; +	uint8_t *buf, *from;  	char *endp;  	uint8_t *vbuf;  	int ret; +	if (argc < 3) +		return -1;  	offset = simple_strtoul(argv[1], &endp, 16);  	if (*argv[1] == 0 || *endp != 0)  		return -1; @@ -460,17 +463,18 @@ static int do_spi_flash_test(int argc, char * const argv[])  	vbuf = malloc(len);  	if (!vbuf) { -		printf("Cannot allocate memory\n"); +		printf("Cannot allocate memory (%lu bytes)\n", len);  		return 1;  	}  	buf = malloc(len);  	if (!buf) {  		free(vbuf); -		printf("Cannot allocate memory\n"); +		printf("Cannot allocate memory (%lu bytes)\n", len);  		return 1;  	} -	memcpy(buf, (char *)CONFIG_SYS_TEXT_BASE, len); +	from = map_sysmem(CONFIG_SYS_TEXT_BASE, 0); +	memcpy(buf, from, len);  	ret = spi_flash_test(flash, buf, len, offset, vbuf);  	free(vbuf);  	free(buf); |