diff options
| author | wdenk <wdenk> | 2004-07-11 17:40:54 +0000 | 
|---|---|---|
| committer | wdenk <wdenk> | 2004-07-11 17:40:54 +0000 | 
| commit | 56523f12830227fc18437bf935fefdb10fe25cca (patch) | |
| tree | 11ad0e08e2284224ebde36161e184450510b9f03 /common | |
| parent | 857cad37a41c431582a74be56f858ee0476cd0d9 (diff) | |
| download | olio-uboot-2014.01-56523f12830227fc18437bf935fefdb10fe25cca.tar.xz olio-uboot-2014.01-56523f12830227fc18437bf935fefdb10fe25cca.zip | |
* Patch by Martin Krause, 30 Jun 2004:
  Add support for TQM5200 board
* Patch by Martin Krause, 29 Jun 2004:
  Add loopw command: infinite write loop on address range
Diffstat (limited to 'common')
| -rw-r--r-- | common/cmd_mem.c | 84 | ||||
| -rw-r--r-- | common/cmd_reginfo.c | 66 | 
2 files changed, 145 insertions, 5 deletions
| diff --git a/common/cmd_mem.c b/common/cmd_mem.c index aeacb8eb2..2bdbc9df1 100644 --- a/common/cmd_mem.c +++ b/common/cmd_mem.c @@ -550,6 +550,81 @@ int do_mem_loop (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	}  } +#ifdef CONFIG_LOOPW +int do_mem_loopw (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ +	ulong	addr, length, i, data; +	int	size; +	volatile uint	*longp; +	volatile ushort *shortp; +	volatile u_char	*cp; +	 +	if (argc < 4) { +		printf ("Usage:\n%s\n", cmdtp->usage); +		return 1; +	} + +	/* Check for a size spefication. +	 * Defaults to long if no or incorrect specification. +	 */ +	if ((size = cmd_get_data_size(argv[0], 4)) < 0) +		return 1; + +	/* Address is always specified. +	*/ +	addr = simple_strtoul(argv[1], NULL, 16); + +	/* Length is the number of objects, not number of bytes. +	*/ +	length = simple_strtoul(argv[2], NULL, 16); + +	/* data to write */ +	data = simple_strtoul(argv[3], NULL, 16); +	 +	/* We want to optimize the loops to run as fast as possible. +	 * If we have only one object, just run infinite loops. +	 */ +	if (length == 1) { +		if (size == 4) { +			longp = (uint *)addr; +			for (;;) +				*longp = data; +					} +		if (size == 2) { +			shortp = (ushort *)addr; +			for (;;) +				*shortp = data; +		} +		cp = (u_char *)addr; +		for (;;) +			*cp = data; +	} + +	if (size == 4) { +		for (;;) { +			longp = (uint *)addr; +			i = length; +			while (i-- > 0) +				*longp++ = data; +		} +	} +	if (size == 2) { +		for (;;) { +			shortp = (ushort *)addr; +			i = length; +			while (i-- > 0) +				*shortp++ = data; +		} +	} +	for (;;) { +		cp = (u_char *)addr; +		i = length; +		while (i-- > 0) +			*cp++ = data; +	} +} +#endif /* CONFIG_LOOPW */ +  /*   * Perform a memory test. A more complete alternative test can be   * configured using CFG_ALT_MEMTEST. The complete test loops until @@ -1123,6 +1198,15 @@ U_BOOT_CMD(  	"    - loop on a set of addresses\n"  ); +#ifdef CONFIG_LOOPW +U_BOOT_CMD( +	loopw,    4,    1,    do_mem_loopw, +	"loopw   - infinite write loop on address range\n", +	"[.b, .w, .l] address number_of_objects data_to_write\n" +	"    - loop on a set of addresses\n" +); +#endif /* CONFIG_LOOPW */ +  U_BOOT_CMD(  	mtest,    4,    1,     do_mem_mtest,  	"mtest   - simple RAM test\n", diff --git a/common/cmd_reginfo.c b/common/cmd_reginfo.c index ee5e14f8f..a3af20fea 100644 --- a/common/cmd_reginfo.c +++ b/common/cmd_reginfo.c @@ -29,6 +29,8 @@  #include <asm/processor.h>  #elif defined (CONFIG_5xx)  #include <mpc5xx.h> +#elif defined (CONFIG_MPC5200) +#include <mpc5xxx.h>  #endif  #if (CONFIG_COMMANDS & CFG_CMD_REGINFO) @@ -87,7 +89,6 @@ int do_reginfo (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	 * May be some CPM info here?  	 */ -/* DBU[dave@cray.com]   For the CRAY-L1, but should be generically 405gp */  #elif defined (CONFIG_405GP)  	printf ("\n405GP registers; MSR=%08x\n",mfmsr());  	printf ("\nUniversal Interrupt Controller Regs\n" @@ -175,7 +176,7 @@ int do_reginfo (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	mtdcr(ebccfga,pb7ap); 	printf ("%08x ", mfdcr(ebccfgd));  	puts ("\n\n"); -/* For the BUBINGA (IBM 405EP eval) but should be generically 405ep */ +  #elif defined(CONFIG_405EP)  	printf ("\n405EP registers; MSR=%08x\n",mfmsr());  	printf ("\nUniversal Interrupt Controller Regs\n" @@ -275,7 +276,61 @@ int do_reginfo (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	puts ("\nU-Bus to IMB3 Bus Interface\n");  	printf("\tUMCR\t0x%08X\tUIPEND\t0x%08X \n", uimb->uimb_umcr, uimb->uimb_uipend);  	puts ("\n\n"); -#endif /* CONFIG_5xx */ + +#elif defined(CONFIG_MPC5200) +	puts ("\nMPC5200 registers\n"); +	printf ("MBAR=%08x\n", CFG_MBAR); +	puts ("Memory map registers\n"); +	printf ("\tCS0: start %08X\tstop %08X\tconfig %08X\ten %d\n",  +		*(volatile ulong*)MPC5XXX_CS0_START, +		*(volatile ulong*)MPC5XXX_CS0_STOP, +		*(volatile ulong*)MPC5XXX_CS0_CFG, +		(*(volatile ulong*)MPC5XXX_ADDECR & 0x00010000) ? 1 : 0); +	printf ("\tCS1: start %08X\tstop %08X\tconfig %08X\ten %d\n",  +		*(volatile ulong*)MPC5XXX_CS1_START, +		*(volatile ulong*)MPC5XXX_CS1_STOP, +		*(volatile ulong*)MPC5XXX_CS1_CFG, +		(*(volatile ulong*)MPC5XXX_ADDECR & 0x00020000) ? 1 : 0); +	printf ("\tCS2: start %08X\tstop %08X\tconfig %08X\ten %d\n",  +		*(volatile ulong*)MPC5XXX_CS2_START, +		*(volatile ulong*)MPC5XXX_CS2_STOP, +		*(volatile ulong*)MPC5XXX_CS2_CFG, +		(*(volatile ulong*)MPC5XXX_ADDECR & 0x00040000) ? 1 : 0); +	printf ("\tCS3: start %08X\tstop %08X\tconfig %08X\ten %d\n",  +		*(volatile ulong*)MPC5XXX_CS3_START, +		*(volatile ulong*)MPC5XXX_CS3_STOP, +		*(volatile ulong*)MPC5XXX_CS3_CFG, +		(*(volatile ulong*)MPC5XXX_ADDECR & 0x00080000) ? 1 : 0); +	printf ("\tCS4: start %08X\tstop %08X\tconfig %08X\ten %d\n",  +		*(volatile ulong*)MPC5XXX_CS4_START, +		*(volatile ulong*)MPC5XXX_CS4_STOP, +		*(volatile ulong*)MPC5XXX_CS4_CFG, +		(*(volatile ulong*)MPC5XXX_ADDECR & 0x00100000) ? 1 : 0); +	printf ("\tCS5: start %08X\tstop %08X\tconfig %08X\ten %d\n",  +		*(volatile ulong*)MPC5XXX_CS5_START, +		*(volatile ulong*)MPC5XXX_CS5_STOP, +		*(volatile ulong*)MPC5XXX_CS5_CFG, +		(*(volatile ulong*)MPC5XXX_ADDECR & 0x00200000) ? 1 : 0); +	printf ("\tCS6: start %08X\tstop %08X\tconfig %08X\ten %d\n",  +		*(volatile ulong*)MPC5XXX_CS6_START, +		*(volatile ulong*)MPC5XXX_CS6_STOP, +		*(volatile ulong*)MPC5XXX_CS6_CFG, +		(*(volatile ulong*)MPC5XXX_ADDECR & 0x04000000) ? 1 : 0); +	printf ("\tCS7: start %08X\tstop %08X\tconfig %08X\ten %d\n",  +		*(volatile ulong*)MPC5XXX_CS7_START, +		*(volatile ulong*)MPC5XXX_CS7_STOP, +		*(volatile ulong*)MPC5XXX_CS7_CFG, +		(*(volatile ulong*)MPC5XXX_ADDECR & 0x08000000) ? 1 : 0); +	printf ("\tBOOTCS: start %08X\tstop %08X\tconfig %08X\ten %d\n",  +		*(volatile ulong*)MPC5XXX_BOOTCS_START, +		*(volatile ulong*)MPC5XXX_BOOTCS_STOP, +		*(volatile ulong*)MPC5XXX_BOOTCS_CFG, +		(*(volatile ulong*)MPC5XXX_ADDECR & 0x02000000) ? 1 : 0); +	printf ("\tSDRAMCS0: %08X\n",  +		*(volatile ulong*)MPC5XXX_SDRAM_CS0CFG); +	printf ("\tSDRAMCS0: %08X\n",  +		*(volatile ulong*)MPC5XXX_SDRAM_CS1CFG); +#endif /* CONFIG_MPC5200 */  	return 0;  } @@ -284,8 +339,9 @@ int do_reginfo (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])   /**************************************************/ -#if (defined(CONFIG_8xx) || defined(CONFIG_405GP) || defined(CONFIG_405EP)) && \ -     (CONFIG_COMMANDS & CFG_CMD_REGINFO) +#if ( defined(CONFIG_8xx)   || defined(CONFIG_405GP) || \ +      defined(CONFIG_405EP) || defined(CONFIG_MPC5200)  ) && \ +    (CONFIG_COMMANDS & CFG_CMD_REGINFO)  U_BOOT_CMD(   	reginfo,	2,	1,	do_reginfo, |