[Armadeus-commitlog] armadeus branch, master, updated. release-3.3-177-g8e56d58
Brought to you by:
sszy
|
From: Fabien M <fa...@us...> - 2010-12-21 11:46:24
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "armadeus".
The branch, master has been updated
via 8e56d58ed2dc8ee75a5b6796889f8bcfb610bd61 (commit)
via 68598e131042cb337cf4fc7e89456ac64246a60d (commit)
via 03eed9afacc69da17139a82ab3e1bf8b4542d9d8 (commit)
from a82afb1dd6619624a8ad120f3ea601f02ad58676 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 8e56d58ed2dc8ee75a5b6796889f8bcfb610bd61
Merge: 68598e131042cb337cf4fc7e89456ac64246a60d a82afb1dd6619624a8ad120f3ea601f02ad58676
Author: Fabien Marteau <fab...@ar...>
Date: Tue Dec 21 12:45:55 2010 +0100
Merge branch 'master' of ssh://armadeus.git.sourceforge.net/gitroot/armadeus/armadeus
commit 68598e131042cb337cf4fc7e89456ac64246a60d
Author: Fabien Marteau <fab...@ar...>
Date: Tue Dec 21 12:45:34 2010 +0100
[u-boot] Configure WEIM chip select register at boot time
commit 03eed9afacc69da17139a82ab3e1bf8b4542d9d8
Author: Fabien Marteau <fab...@ar...>
Date: Tue Dec 21 09:44:25 2010 +0100
[u-boot] Adding 16bits access memory test program : mtest16
-----------------------------------------------------------------------
Summary of changes:
.../target/u-boot/u-boot-2010.03-401-apf51.patch | 141 +++++---
.../u-boot-2010.03-411-memtest_16bits_access.patch | 398 ++++++++++++++++++++
2 files changed, 493 insertions(+), 46 deletions(-)
create mode 100644 buildroot/target/u-boot/u-boot-2010.03-411-memtest_16bits_access.patch
diff --git a/buildroot/target/u-boot/u-boot-2010.03-401-apf51.patch b/buildroot/target/u-boot/u-boot-2010.03-401-apf51.patch
index 623ca70..1c6e715 100644
--- a/buildroot/target/u-boot/u-boot-2010.03-401-apf51.patch
+++ b/buildroot/target/u-boot/u-boot-2010.03-401-apf51.patch
@@ -1,9 +1,10 @@
-diff -purN u-boot-2010.03-ref/board/armadeus/apf51/apf51.c u-boot-2010.03/board/armadeus/apf51/apf51.c
---- u-boot-2010.03-ref/board/armadeus/apf51/apf51.c 1970-01-01 01:00:00.000000000 +0100
-+++ u-boot-2010.03/board/armadeus/apf51/apf51.c 2010-11-10 00:45:59.000000000 +0100
-@@ -0,0 +1,1071 @@
+Index: u-boot-2010.03/board/armadeus/apf51/apf51.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ u-boot-2010.03/board/armadeus/apf51/apf51.c 2010-12-21 12:15:00.000000000 +0100
+@@ -0,0 +1,1102 @@
+/*
-+ * (C) Copyright 2010 Eric Jarrige, Armadeus Project
++ * (C) Copyright 2010 Eric Jarrige, Armadeus Project
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
@@ -342,6 +343,48 @@ diff -purN u-boot-2010.03-ref/board/armadeus/apf51/apf51.c u-boot-2010.03/board/
+// missing in DS mxc_request_iomux(MX51_PIN_EIM_BCLK, IOMUX_CONFIG_ALT0);
+// missing in DS mxc_request_iomux(MX51_PIN_EIM_RW , IOMUX_CONFIG_ALT0);
+
++ /*
++ * Configure Register for each chip select
++ */
++ __REG(CONFIG_WCR_ADDR) = CONFIG_WCR_VALUE;
++ __REG(CONFIG_WIAR_ADDR) = CONFIG_WIAR_VALUE;
++
++ __REG(CONFIG_CS1GCR1_ADDR) = CONFIG_CS1GCR1_VALUE;
++ __REG(CONFIG_CS2GCR1_ADDR) = CONFIG_CS2GCR1_VALUE;
++ __REG(CONFIG_CS3GCR1_ADDR) = CONFIG_CS3GCR1_VALUE;
++ __REG(CONFIG_CS4GCR1_ADDR) = CONFIG_CS4GCR1_VALUE;
++ __REG(CONFIG_CS5GCR1_ADDR) = CONFIG_CS5GCR1_VALUE;
++
++ __REG(CONFIG_CS1GCR2_ADDR) = CONFIG_CS1GCR2_VALUE;
++ __REG(CONFIG_CS2GCR2_ADDR) = CONFIG_CS2GCR2_VALUE;
++ __REG(CONFIG_CS3GCR2_ADDR) = CONFIG_CS3GCR2_VALUE;
++ __REG(CONFIG_CS4GCR2_ADDR) = CONFIG_CS4GCR2_VALUE;
++ __REG(CONFIG_CS5GCR2_ADDR) = CONFIG_CS5GCR2_VALUE;
++
++ __REG(CONFIG_CS1RCR1_ADDR) = CONFIG_CS1RCR1_VALUE;
++ __REG(CONFIG_CS2RCR1_ADDR) = CONFIG_CS2RCR1_VALUE;
++ __REG(CONFIG_CS3RCR1_ADDR) = CONFIG_CS3RCR1_VALUE;
++ __REG(CONFIG_CS4RCR1_ADDR) = CONFIG_CS4RCR1_VALUE;
++ __REG(CONFIG_CS5RCR1_ADDR) = CONFIG_CS5RCR1_VALUE;
++
++ __REG(CONFIG_CS1RCR2_ADDR) = CONFIG_CS1RCR2_VALUE;
++ __REG(CONFIG_CS2RCR2_ADDR) = CONFIG_CS2RCR2_VALUE;
++ __REG(CONFIG_CS3RCR2_ADDR) = CONFIG_CS3RCR2_VALUE;
++ __REG(CONFIG_CS4RCR2_ADDR) = CONFIG_CS4RCR2_VALUE;
++ __REG(CONFIG_CS5RCR2_ADDR) = CONFIG_CS5RCR2_VALUE;
++
++ __REG(CONFIG_CS1WCR1_ADDR) = CONFIG_CS1WCR1_VALUE;
++ __REG(CONFIG_CS2WCR1_ADDR) = CONFIG_CS2WCR1_VALUE;
++ __REG(CONFIG_CS3WCR1_ADDR) = CONFIG_CS3WCR1_VALUE;
++ __REG(CONFIG_CS4WCR1_ADDR) = CONFIG_CS4WCR1_VALUE;
++ __REG(CONFIG_CS5WCR1_ADDR) = CONFIG_CS5WCR1_VALUE;
++
++ __REG(CONFIG_CS1WCR2_ADDR) = CONFIG_CS1WCR2_VALUE;
++ __REG(CONFIG_CS2WCR2_ADDR) = CONFIG_CS2WCR2_VALUE;
++ __REG(CONFIG_CS3WCR2_ADDR) = CONFIG_CS3WCR2_VALUE;
++ __REG(CONFIG_CS4WCR2_ADDR) = CONFIG_CS4WCR2_VALUE;
++ __REG(CONFIG_CS5WCR2_ADDR) = CONFIG_CS5WCR2_VALUE;
++
+}
+
+void setup_keypad(void)
@@ -431,17 +474,6 @@ diff -purN u-boot-2010.03-ref/board/armadeus/apf51/apf51.c u-boot-2010.03/board/
+ mxc_request_iomux(CONFIG_SYS_FPGA_INIT, IOMUX_CONFIG_ALT3);
+ mxc_iomux_set_pad(CONFIG_SYS_FPGA_INIT, GPIO_PAD_CFG);
+
-+ #define CS1GCR1 0x18
-+ #define CS1WCR1 0x28
-+ #define WCR 0x90
-+
-+ /* set 16bits bus size, muxed synchronous mode */
-+ __REG(WEIM_BASE_ADDR + CS1GCR1) = 0x019100bf;
-+ /* adjust CS1 timings */
-+ __REG(WEIM_BASE_ADDR + CS1WCR1) = 0x01000008; /* full speed write */
-+
-+ /* force BCLK free run */
-+ __REG(WEIM_BASE_ADDR + WCR) = 0x00000021;
+}
+
+void setup_display(void)
@@ -1073,15 +1105,17 @@ diff -purN u-boot-2010.03-ref/board/armadeus/apf51/apf51.c u-boot-2010.03/board/
+);
+
+
-diff -purN u-boot-2010.03-ref/board/armadeus/apf51/config.mk u-boot-2010.03/board/armadeus/apf51/config.mk
---- u-boot-2010.03-ref/board/armadeus/apf51/config.mk 1970-01-01 01:00:00.000000000 +0100
-+++ u-boot-2010.03/board/armadeus/apf51/config.mk 2010-09-16 22:55:20.000000000 +0200
+Index: u-boot-2010.03/board/armadeus/apf51/config.mk
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ u-boot-2010.03/board/armadeus/apf51/config.mk 2010-12-20 17:49:14.000000000 +0100
@@ -0,0 +1,2 @@
+LDSCRIPT := $(SRCTREE)/board/$(BOARDDIR)/u-boot.lds
+TEXT_BASE = 0x9FF00000
-diff -purN u-boot-2010.03-ref/board/armadeus/apf51/Makefile u-boot-2010.03/board/armadeus/apf51/Makefile
---- u-boot-2010.03-ref/board/armadeus/apf51/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ u-boot-2010.03/board/armadeus/apf51/Makefile 2010-09-16 19:04:20.000000000 +0200
+Index: u-boot-2010.03/board/armadeus/apf51/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ u-boot-2010.03/board/armadeus/apf51/Makefile 2010-12-20 17:49:14.000000000 +0100
@@ -0,0 +1,50 @@
+#
+# Copyright (C) 2007, Guennadi Liakhovetski <lg...@de...>
@@ -1133,9 +1167,10 @@ diff -purN u-boot-2010.03-ref/board/armadeus/apf51/Makefile u-boot-2010.03/board
+sinclude $(obj).depend
+
+#########################################################################
-diff -purN u-boot-2010.03-ref/board/armadeus/apf51/u-boot.lds u-boot-2010.03/board/armadeus/apf51/u-boot.lds
---- u-boot-2010.03-ref/board/armadeus/apf51/u-boot.lds 1970-01-01 01:00:00.000000000 +0100
-+++ u-boot-2010.03/board/armadeus/apf51/u-boot.lds 2010-09-16 22:10:12.000000000 +0200
+Index: u-boot-2010.03/board/armadeus/apf51/u-boot.lds
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ u-boot-2010.03/board/armadeus/apf51/u-boot.lds 2010-12-20 17:49:14.000000000 +0100
@@ -0,0 +1,64 @@
+/*
+ * January 2004 - Changed to support H4 device
@@ -1201,10 +1236,11 @@ diff -purN u-boot-2010.03-ref/board/armadeus/apf51/u-boot.lds u-boot-2010.03/boa
+ .bss : { *(.bss) }
+ _end = .;
+}
-diff -purN u-boot-2010.03-ref/include/asm-arm/mach-types.h u-boot-2010.03/include/asm-arm/mach-types.h
---- u-boot-2010.03-ref/include/asm-arm/mach-types.h 2010-03-31 23:54:39.000000000 +0200
-+++ u-boot-2010.03/include/asm-arm/mach-types.h 2010-05-24 22:38:29.000000000 +0200
-@@ -2699,6 +2699,7 @@ extern unsigned int __machine_arch_type;
+Index: u-boot-2010.03/include/asm-arm/mach-types.h
+===================================================================
+--- u-boot-2010.03.orig/include/asm-arm/mach-types.h 2010-03-31 23:54:39.000000000 +0200
++++ u-boot-2010.03/include/asm-arm/mach-types.h 2010-12-20 17:49:14.000000000 +0100
+@@ -2699,6 +2699,7 @@
#define MACH_TYPE_MX53_EVK 2716
#define MACH_TYPE_IGEP0030 2717
#define MACH_TYPE_AXELL_H40_H50_CTRL 2718
@@ -1212,7 +1248,7 @@ diff -purN u-boot-2010.03-ref/include/asm-arm/mach-types.h u-boot-2010.03/includ
#ifdef CONFIG_ARCH_EBSA110
# ifdef machine_arch_type
-@@ -34944,6 +34945,18 @@ extern unsigned int __machine_arch_type;
+@@ -34944,6 +34945,18 @@
# define machine_is_axell_h40_h50_ctrl() (0)
#endif
@@ -1231,10 +1267,11 @@ diff -purN u-boot-2010.03-ref/include/asm-arm/mach-types.h u-boot-2010.03/includ
/*
* These have not yet been registered
*/
-diff -purN u-boot-2010.03-ref/MAKEALL u-boot-2010.03/MAKEALL
---- u-boot-2010.03-ref/MAKEALL 2010-09-16 23:11:51.000000000 +0200
-+++ u-boot-2010.03/MAKEALL 2010-05-16 11:05:33.000000000 +0200
-@@ -549,6 +549,7 @@ LIST_ARM9=" \
+Index: u-boot-2010.03/MAKEALL
+===================================================================
+--- u-boot-2010.03.orig/MAKEALL 2010-12-20 17:49:13.000000000 +0100
++++ u-boot-2010.03/MAKEALL 2010-12-20 17:49:14.000000000 +0100
+@@ -549,6 +549,7 @@
ap946es \
ap966 \
apf27 \
@@ -1242,10 +1279,11 @@ diff -purN u-boot-2010.03-ref/MAKEALL u-boot-2010.03/MAKEALL
cp920t \
cp922_XA10 \
cp926ejs \
-diff -purN u-boot-2010.03-ref/Makefile u-boot-2010.03/Makefile
---- u-boot-2010.03-ref/Makefile 2010-09-16 23:11:51.000000000 +0200
-+++ u-boot-2010.03/Makefile 2010-05-16 11:10:10.000000000 +0200
-@@ -2735,6 +2735,9 @@ afeb9260_config: unconfig
+Index: u-boot-2010.03/Makefile
+===================================================================
+--- u-boot-2010.03.orig/Makefile 2010-12-20 17:49:13.000000000 +0100
++++ u-boot-2010.03/Makefile 2010-12-20 17:49:14.000000000 +0100
+@@ -2735,6 +2735,9 @@
apf27_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm926ejs apf27 armadeus mx27
@@ -1255,9 +1293,10 @@ diff -purN u-boot-2010.03-ref/Makefile u-boot-2010.03/Makefile
at91cap9adk_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm926ejs at91cap9adk atmel at91
-diff -purN u-boot-2010.03-ref/board/armadeus/apf51/fpga.h u-boot-2010.03/board/armadeus/apf51/fpga.h
---- u-boot-2010.03-ref/board/armadeus/apf51/fpga.h 1970-01-01 01:00:00.000000000 +0100
-+++ u-boot-2010.03/board/armadeus/apf51/fpga.h 2010-09-16 22:10:12.000000000 +0200
+Index: u-boot-2010.03/board/armadeus/apf51/fpga.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ u-boot-2010.03/board/armadeus/apf51/fpga.h 2010-12-20 17:49:14.000000000 +0100
@@ -0,0 +1,39 @@
+/*
+ * (C) Copyright 2002-2010
@@ -1298,10 +1337,11 @@ diff -purN u-boot-2010.03-ref/board/armadeus/apf51/fpga.h u-boot-2010.03/board/a
+extern int fpga_abort_fn (int cookie);
+extern int fpga_post_fn (int cookie);
+extern int fpga_busy_fn (int cookie);
-diff -purN u-boot-2010.03-ref/board/armadeus/apf51/fpga.c u-boot-2010.03/board/armadeus/apf51/fpga.c
---- u-boot-2010.03-ref/board/armadeus/apf51/fpga.c 1970-01-01 01:00:00.000000000 +0100
-+++ u-boot-2010.03/board/armadeus/apf51/fpga.c 2010-09-16 22:10:12.000000000 +0200
-@@ -0,0 +1,261 @@
+Index: u-boot-2010.03/board/armadeus/apf51/fpga.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ u-boot-2010.03/board/armadeus/apf51/fpga.c 2010-12-21 12:42:04.000000000 +0100
+@@ -0,0 +1,270 @@
+ /*
+ * (C) Copyright 2002-2010
+ * Nicolas Colombain <nic...@ar...>
@@ -1351,6 +1391,8 @@ diff -purN u-boot-2010.03-ref/board/armadeus/apf51/fpga.c u-boot-2010.03/board/a
+ extern int imx_gpio_pin_get(unsigned int pin);
+
+ u32 temp_clk; /* use to restore the emi_clk_sel after donwload */
++ u32 temp_rcr1;
++ u32 temp_wcr1;
+
+ /* Note that these are pointers to code that is in Flash. They will be
+ * relocated at runtime.
@@ -1393,6 +1435,12 @@ diff -purN u-boot-2010.03-ref/board/armadeus/apf51/fpga.c u-boot-2010.03/board/a
+ temp_clk = __REG(CCM_BASE_ADDR + CLKCTL_CBCDR);
+ __REG(CCM_BASE_ADDR + CLKCTL_CBCDR) = temp_clk | EMI_CLK_SEL;
+
++ temp_rcr1 = __REG(CONFIG_CS1RCR1_ADDR);
++ __REG(CONFIG_CS1RCR1_ADDR) = 0x01000010;
++
++ temp_wcr1 = __REG(CONFIG_CS1WCR1_ADDR);
++ __REG(CONFIG_CS1WCR1_ADDR) = 0x01000008;
++
+ /* FPGA PROG */
+ imx_gpio_pin_set(CONFIG_SYS_FPGA_PRG, 1);
+ imx_gpio_pin_cfg_dir(CONFIG_SYS_FPGA_PRG, 1);
@@ -1530,7 +1578,8 @@ diff -purN u-boot-2010.03-ref/board/armadeus/apf51/fpga.c u-boot-2010.03/board/a
+ PRINTF ("%s:%d: FPGA POST \n", __FUNCTION__, __LINE__);
+ /* restore emi_clk_sel */
+ __REG(CCM_BASE_ADDR + CLKCTL_CBCDR) = temp_clk;
-+
++ __REG(CONFIG_CS1RCR1_ADDR) = temp_rcr1;
++ __REG(CONFIG_CS1WCR1_ADDR) = temp_wcr1;
+ return cookie;
+ }
+
diff --git a/buildroot/target/u-boot/u-boot-2010.03-411-memtest_16bits_access.patch b/buildroot/target/u-boot/u-boot-2010.03-411-memtest_16bits_access.patch
new file mode 100644
index 0000000..6d03409
--- /dev/null
+++ b/buildroot/target/u-boot/u-boot-2010.03-411-memtest_16bits_access.patch
@@ -0,0 +1,398 @@
+Index: u-boot-2010.03/common/cmd_mem.c
+===================================================================
+--- u-boot-2010.03.orig/common/cmd_mem.c 2010-12-20 17:52:41.000000000 +0100
++++ u-boot-2010.03/common/cmd_mem.c 2010-12-20 18:17:30.000000000 +0100
+@@ -26,7 +26,6 @@
+ *
+ * Copied from FADS ROM, Dan Malek (dm...@jl...)
+ */
+-
+ #include <common.h>
+ #include <command.h>
+ #ifdef CONFIG_HAS_DATAFLASH
+@@ -977,6 +976,362 @@
+ }
+
+
++/*
++ * Perform a memory test. A more complete alternative test can be
++ * configured using CONFIG_SYS_ALT_MEMTEST. The complete test loops until
++ * interrupted by ctrl-c or by a failure of one of the sub-tests.
++ */
++int do_mem_mtest16 (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
++{
++ vu_short *addr, *start, *end;
++ ushort val;
++ ushort readback;
++ ushort errs = 0;
++ int iterations = 1;
++ int iteration_limit;
++
++#if defined(CONFIG_SYS_ALT_MEMTEST)
++ vu_short len;
++ vu_short offset;
++ vu_short test_offset;
++ vu_short pattern;
++ vu_short temp;
++ vu_short anti_pattern;
++ vu_short num_words;
++#if defined(CONFIG_SYS_MEMTEST_SCRATCH)
++ vu_short *dummy = (vu_long*)CONFIG_SYS_MEMTEST_SCRATCH;
++#else
++ vu_short *dummy = 0; /* yes, this is address 0x0, not NULL */
++#endif
++ int j;
++
++ static const ushort bitpattern[] = {
++ 0x0001, /* single bit */
++ 0x0003, /* two adjacent bits */
++ 0x0007, /* three adjacent bits */
++ 0x000F, /* four adjacent bits */
++ 0x0005, /* two non-adjacent bits */
++ 0x0015, /* three non-adjacent bits */
++ 0x0055, /* four non-adjacent bits */
++ 0xaaaa, /* alternating 1/0 */
++ };
++#else
++ ulong incr;
++ ushort pattern;
++#endif
++
++ if (argc > 1)
++ start = (ulong *)simple_strtoul(argv[1], NULL, 16);
++ else
++ start = (ulong *)CONFIG_SYS_MEMTEST_START;
++
++ if (argc > 2)
++ end = (ulong *)simple_strtoul(argv[2], NULL, 16);
++ else
++ end = (ulong *)(CONFIG_SYS_MEMTEST_END);
++
++ if (argc > 3)
++ pattern = (ulong)simple_strtoul(argv[3], NULL, 16);
++ else
++ pattern = 0;
++
++ if (argc > 4)
++ iteration_limit = (ulong)simple_strtoul(argv[4], NULL, 16);
++ else
++ iteration_limit = 0;
++
++#if defined(CONFIG_SYS_ALT_MEMTEST)
++ printf ("Testing %04x ... %04x:\n", (uint)start, (uint)end);
++ PRINTF("%s:%d: start 0x%p end 0x%p\n",
++ __FUNCTION__, __LINE__, start, end);
++
++ for (;;) {
++ if (ctrlc()) {
++ putc ('\n');
++ return 1;
++ }
++
++
++ if (iteration_limit && iterations > iteration_limit) {
++ printf("Tested %d iteration(s) with %lu errors.\n",
++ iterations-1, errs);
++ return errs != 0;
++ }
++
++ printf("Iteration: %6d\r", iterations);
++ PRINTF("\n");
++ iterations++;
++
++ /*
++ * Data line test: write a pattern to the first
++ * location, write the 1's complement to a 'parking'
++ * address (changes the state of the data bus so a
++ * floating bus doen't give a false OK), and then
++ * read the value back. Note that we read it back
++ * into a variable because the next time we read it,
++ * it might be right (been there, tough to explain to
++ * the quality guys why it prints a failure when the
++ * "is" and "should be" are obviously the same in the
++ * error message).
++ *
++ * Rather than exhaustively testing, we test some
++ * patterns by shifting '1' bits through a field of
++ * '0's and '0' bits through a field of '1's (i.e.
++ * pattern and ~pattern).
++ */
++ addr = start;
++ for (j = 0; j < sizeof(bitpattern)/sizeof(bitpattern[0]); j++) {
++ val = bitpattern[j];
++ for(; val != 0; val <<= 1) {
++ *addr = val;
++ *dummy = ~val; /* clear the test data off of the bus */
++ readback = *addr;
++ if(readback != val) {
++ printf ("FAILURE (data line): "
++ "expected %04x, actual %04x\n",
++ val, readback);
++ errs++;
++ if (ctrlc()) {
++ putc ('\n');
++ return 1;
++ }
++ }
++ *addr = ~val;
++ *dummy = val;
++ readback = *addr;
++ if(readback != ~val) {
++ printf ("FAILURE (data line): "
++ "Is %04x, should be %04x\n",
++ readback, ~val);
++ errs++;
++ if (ctrlc()) {
++ putc ('\n');
++ return 1;
++ }
++ }
++ }
++ }
++
++ /*
++ * Based on code whose Original Author and Copyright
++ * information follows: Copyright (c) 1998 by Michael
++ * Barr. This software is placed into the public
++ * domain and may be used for any purpose. However,
++ * this notice must not be changed or removed and no
++ * warranty is either expressed or implied by its
++ * publication or distribution.
++ */
++
++ /*
++ * Address line test
++ *
++ * Description: Test the address bus wiring in a
++ * memory region by performing a walking
++ * 1's test on the relevant bits of the
++ * address and checking for aliasing.
++ * This test will find single-bit
++ * address failures such as stuck -high,
++ * stuck-low, and shorted pins. The base
++ * address and size of the region are
++ * selected by the caller.
++ *
++ * Notes: For best results, the selected base
++ * address should have enough LSB 0's to
++ * guarantee single address bit changes.
++ * For example, to test a 64-Kbyte
++ * region, select a base address on a
++ * 64-Kbyte boundary. Also, select the
++ * region size as a power-of-two if at
++ * all possible.
++ *
++ * Returns: 0 if the test succeeds, 1 if the test fails.
++ */
++ len = ((ulong)end - (ulong)start)/sizeof(vu_long);
++ pattern = (vu_long) 0xaaaaaaaa;
++ anti_pattern = (vu_long) 0x55555555;
++
++ PRINTF("%s:%d: length = 0x%.4x\n",
++ __FUNCTION__, __LINE__,
++ len);
++ /*
++ * Write the default pattern at each of the
++ * power-of-two offsets.
++ */
++ for (offset = 1; offset < len; offset <<= 1) {
++ start[offset] = pattern;
++ }
++
++ /*
++ * Check for address bits stuck high.
++ */
++ test_offset = 0;
++ start[test_offset] = anti_pattern;
++
++ for (offset = 1; offset < len; offset <<= 1) {
++ temp = start[offset];
++ if (temp != pattern) {
++ printf ("\nFAILURE: Address bit stuck high @ 0x%.4x:"
++ " expected 0x%.4x, actual 0x%.4x\n",
++ (ulong)&start[offset], pattern, temp);
++ errs++;
++ if (ctrlc()) {
++ putc ('\n');
++ return 1;
++ }
++ }
++ }
++ start[test_offset] = pattern;
++ WATCHDOG_RESET();
++
++ /*
++ * Check for addr bits stuck low or shorted.
++ */
++ for (test_offset = 1; test_offset < len; test_offset <<= 1) {
++ start[test_offset] = anti_pattern;
++
++ for (offset = 1; offset < len; offset <<= 1) {
++ temp = start[offset];
++ if ((temp != pattern) && (offset != test_offset)) {
++ printf ("\nFAILURE: Address bit stuck low or shorted @"
++ " 0x%.4x: expected 0x%.4x, actual 0x%.4x\n",
++ (ulong)&start[offset], pattern, temp);
++ errs++;
++ if (ctrlc()) {
++ putc ('\n');
++ return 1;
++ }
++ }
++ }
++ start[test_offset] = pattern;
++ }
++
++ /*
++ * Description: Test the integrity of a physical
++ * memory device by performing an
++ * increment/decrement test over the
++ * entire region. In the process every
++ * storage bit in the device is tested
++ * as a zero and a one. The base address
++ * and the size of the region are
++ * selected by the caller.
++ *
++ * Returns: 0 if the test succeeds, 1 if the test fails.
++ */
++ num_words = ((ulong)end - (ulong)start)/sizeof(vu_long) + 1;
++
++ /*
++ * Fill memory with a known pattern.
++ */
++ for (pattern = 1, offset = 0; offset < num_words; pattern++, offset++) {
++ WATCHDOG_RESET();
++ start[offset] = pattern;
++ }
++
++ /*
++ * Check each location and invert it for the second pass.
++ */
++ for (pattern = 1, offset = 0; offset < num_words; pattern++, offset++) {
++ WATCHDOG_RESET();
++ temp = start[offset];
++ if (temp != pattern) {
++ printf ("\nFAILURE (read/write) @ 0x%.4x:"
++ " expected 0x%.4x, actual 0x%.4x)\n",
++ (ulong)&start[offset], pattern, temp);
++ errs++;
++ if (ctrlc()) {
++ putc ('\n');
++ return 1;
++ }
++ }
++
++ anti_pattern = ~pattern;
++ start[offset] = anti_pattern;
++ }
++
++ /*
++ * Check each location for the inverted pattern and zero it.
++ */
++ for (pattern = 1, offset = 0; offset < num_words; pattern++, offset++) {
++ WATCHDOG_RESET();
++ anti_pattern = ~pattern;
++ temp = start[offset];
++ if (temp != anti_pattern) {
++ printf ("\nFAILURE (read/write): @ 0x%.4x:"
++ " expected 0x%.4x, actual 0x%.4x)\n",
++ (ulong)&start[offset], anti_pattern, temp);
++ errs++;
++ if (ctrlc()) {
++ putc ('\n');
++ return 1;
++ }
++ }
++ start[offset] = 0;
++ }
++ }
++
++#else /* The original, quickie test */
++ incr = 1;
++ for (;;) {
++ if (ctrlc()) {
++ putc ('\n');
++ return 1;
++ }
++
++ if (iteration_limit && iterations > iteration_limit) {
++ printf("Tested %d iteration(s) with %lu errors.\n",
++ iterations-1, errs);
++ return errs != 0;
++ }
++ ++iterations;
++
++ printf ("\rPattern %04X Writing..."
++ "%12s"
++ "\b\b\b\b\b\b\b\b\b\b",
++ pattern, "");
++
++ for (addr=start,val=pattern; addr<end; addr++) {
++ WATCHDOG_RESET();
++ *addr = val;
++ val += incr;
++ }
++
++ puts ("Reading...");
++
++ for (addr=start,val=pattern; addr<end; addr++) {
++ WATCHDOG_RESET();
++ readback = *addr;
++ if (readback != val) {
++ printf ("\nMem error @ 0x%08X: "
++ "found %04X, expected %04X\n",
++ (uint)addr, readback, val);
++ errs++;
++ if (ctrlc()) {
++ putc ('\n');
++ return 1;
++ }
++ }
++ val += incr;
++ }
++
++ /*
++ * Flip the pattern each time to make lots of zeros and
++ * then, the next time, lots of ones. We decrement
++ * the "negative" patterns and increment the "positive"
++ * patterns to preserve this feature.
++ */
++ if(pattern & 0x80000000) {
++ pattern = -pattern; /* complement & increment */
++ }
++ else {
++ pattern = ~pattern;
++ }
++ incr = -incr;
++ }
++#endif
++ return 0; /* not reached */
++}
++
++
+ /* Modify memory.
+ *
+ * Syntax:
+@@ -1035,7 +1390,7 @@
+ * the next value. A non-converted value exits.
+ */
+ do {
+- printf("%08lx:", addr);
++ printf("%04x:", addr);
+ if (size == 4)
+ printf(" %08x", *((uint *)addr));
+ else if (size == 2)
+@@ -1333,6 +1688,13 @@
+ "[start [end [pattern [iterations]]]]"
+ );
+
++U_BOOT_CMD(
++ mtest16, 5, 1, do_mem_mtest16,
++ "simple RAM read/write 16 bits test",
++ "[start [end [pattern [iterations]]]]"
++);
++
++
+ #ifdef CONFIG_MX_CYCLIC
+ U_BOOT_CMD(
+ mdc, 4, 1, do_mem_mdc,
hooks/post-receive
--
armadeus
|