diff options
| author | wdenk <wdenk> | 2004-04-18 10:13:26 +0000 | 
|---|---|---|
| committer | wdenk <wdenk> | 2004-04-18 10:13:26 +0000 | 
| commit | c26e454dfc6650428854fa2db3b1ed7f19e0ba0e (patch) | |
| tree | 2ad2368558e366e127683028a71381cb1dd37140 /common/cmd_mem.c | |
| parent | ea66bc8804b66633faae5b7066571c9d68b4d14a (diff) | |
| download | olio-uboot-2014.01-c26e454dfc6650428854fa2db3b1ed7f19e0ba0e.tar.xz olio-uboot-2014.01-c26e454dfc6650428854fa2db3b1ed7f19e0ba0e.zip | |
Patches by Pantelis Antoniou, 16 Apr 2004:
- add support for a new version of an Intracom board and fix
  various other things on others.
- add verify support to the crc32 command (define
  CONFIG_CRC32_VERIFY to enable it)
- fix FEC driver for MPC8xx systems:
  1. fix compilation problems for boards that use dynamic
     allocation of DPRAM
  2. shut down FEC after network transfers
- HUSH parser fixes:
  1. A new test command was added. This is a simplified version of
     the one in the bourne shell.
  2. A new exit command was added which terminates the current
     executing script.
  3. Fixed handing of $? (exit code of last executed command)
Diffstat (limited to 'common/cmd_mem.c')
| -rw-r--r-- | common/cmd_mem.c | 71 | 
1 files changed, 71 insertions, 0 deletions
| diff --git a/common/cmd_mem.c b/common/cmd_mem.c index f18bfde3a..8430298a3 100644 --- a/common/cmd_mem.c +++ b/common/cmd_mem.c @@ -963,6 +963,8 @@ mod_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char *argv[])  	return 0;  } +#ifndef CONFIG_CRC32_VERIFY +  int do_mem_crc (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  {  	ulong addr, length; @@ -992,6 +994,62 @@ int do_mem_crc (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	return 0;  } +#else	/* CONFIG_CRC32_VERIFY */ + +int do_mem_crc (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ +	ulong addr, length; +	ulong crc; +	ulong *ptr; +	ulong vcrc;  +	int verify; +	int ac; +	char **av; + +	if (argc < 3) { +  usage: +		printf ("Usage:\n%s\n", cmdtp->usage); +		return 1; +	} + +	av = argv + 1; +	ac = argc - 1; +	if (strcmp(*av, "-v") == 0) { +		verify = 1; +		av++; +		ac--; +		if (ac < 3) +			goto usage; +	} else +		verify = 0; + +	addr = simple_strtoul(*av++, NULL, 16); +	addr += base_address; +	length = simple_strtoul(*av++, NULL, 16); + +	crc = crc32(0, (const uchar *) addr, length); + +	if (!verify) { +		printf ("CRC32 for %08lx ... %08lx ==> %08lx\n", +				addr, addr + length - 1, crc); +		if (ac > 2) { +			ptr = (ulong *) simple_strtoul (*av++, NULL, 16); +			*ptr = crc; +		} +	} else { +		vcrc = simple_strtoul(*av++, NULL, 16); +		if (vcrc != crc) { +			printf ("CRC32 for %08lx ... %08lx ==> %08lx != %08lx ** ERROR **\n", +					addr, addr + length - 1, crc, vcrc); +			return 1; +		} +	} + +	return 0; + +} +#endif	/* CONFIG_CRC32_VERIFY */ +  /**************************************************/  #if (CONFIG_COMMANDS & CFG_CMD_MEMORY)  U_BOOT_CMD( @@ -1032,12 +1090,25 @@ U_BOOT_CMD(  	"[.b, .w, .l] addr1 addr2 count\n    - compare memory\n"  ); +#ifndef CONFIG_CRC32_VERIFY +  U_BOOT_CMD(  	crc32,    4,    1,     do_mem_crc,  	"crc32   - checksum calculation\n",  	"address count [addr]\n    - compute CRC32 checksum [save at addr]\n"  ); +#else	/* CONFIG_CRC32_VERIFY */ + +U_BOOT_CMD( +	crc32,    5,    1,     do_mem_crc, +	"crc32   - checksum calculation\n", +	"address count [addr]\n    - compute CRC32 checksum [save at addr]\n" +	"-v address count crc\n    - verify crc of memory area\n" +); + +#endif	/* CONFIG_CRC32_VERIFY */ +  U_BOOT_CMD(  	base,    2,    1,     do_mem_base,  	"base    - print or set address offset\n", |