Skip to content
Snippets Groups Projects
cmd_mem.c 25.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • 	ulong addr, length;
    	ulong crc;
    	ulong *ptr;
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	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 */
    
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    /**************************************************/
    #if (CONFIG_COMMANDS & CFG_CMD_MEMORY)
    
    U_BOOT_CMD(
    	md,     3,     1,      do_mem_md,
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	"md      - memory display\n",
    	"[.b, .w, .l] address [# of objects]\n    - memory display\n"
    );
    
    
    
    U_BOOT_CMD(
    	mm,     2,      1,       do_mem_mm,
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	"mm      - memory modify (auto-incrementing)\n",
    	"[.b, .w, .l] address\n" "    - memory modify, auto increment address\n"
    );
    
    
    
    U_BOOT_CMD(
    	nm,     2,	    1,     	do_mem_nm,
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	"nm      - memory modify (constant address)\n",
    	"[.b, .w, .l] address\n    - memory modify, read and keep address\n"
    );
    
    
    U_BOOT_CMD(
    	mw,    4,    1,     do_mem_mw,
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	"mw      - memory write (fill)\n",
    	"[.b, .w, .l] address value [count]\n    - write memory\n"
    );
    
    
    U_BOOT_CMD(
    	cp,    4,    1,    do_mem_cp,
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	"cp      - memory copy\n",
    	"[.b, .w, .l] source target count\n    - copy memory\n"
    );
    
    
    U_BOOT_CMD(
    	cmp,    4,     1,     do_mem_cmp,
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	"cmp     - memory compare\n",
    	"[.b, .w, .l] addr1 addr2 count\n    - compare memory\n"
    );
    
    
    #ifndef CONFIG_CRC32_VERIFY
    
    
    U_BOOT_CMD(
    	crc32,    4,    1,     do_mem_crc,
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	"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,
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	"base    - print or set address offset\n",
    	"\n    - print address offset for memory commands\n"
    	"base off\n    - set address offset for memory commands to 'off'\n"
    );
    
    
    U_BOOT_CMD(
    	loop,    3,    1,    do_mem_loop,
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	"loop    - infinite loop on address range\n",
    	"[.b, .w, .l] address number_of_objects\n"
    	"    - loop on a set of addresses\n"
    );
    
    
    U_BOOT_CMD(
    	mtest,    4,    1,     do_mem_mtest,
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	"mtest   - simple RAM test\n",
    	"[start [end [pattern]]]\n"
    	"    - simple RAM read/write test\n"
    );
    
    #endif
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #endif	/* CFG_CMD_MEMORY */