From: Alexander Aring <alex.aring@gmail.com>
To: barebox@lists.infradead.org
Subject: [PATCH 4/6] memtest: remove memtest command
Date: Thu, 7 Feb 2013 11:44:58 +0100 [thread overview]
Message-ID: <1360233900-26486-5-git-send-email-alex.aring@gmail.com> (raw)
In-Reply-To: <1360233900-26486-1-git-send-email-alex.aring@gmail.com>
Remove memtest command.
Signed-off-by: Alexander Aring <alex.aring@gmail.com>
---
commands/Kconfig | 9 --
commands/Makefile | 1 -
commands/memtest.c | 351 -----------------------------------------------------
3 files changed, 361 deletions(-)
delete mode 100644 commands/memtest.c
diff --git a/commands/Kconfig b/commands/Kconfig
index d3c338c..7cc759c 100644
--- a/commands/Kconfig
+++ b/commands/Kconfig
@@ -516,15 +516,6 @@ config CMD_NANDTEST
select PARTITION_NEED_MTD
prompt "nandtest"
-config CMD_MTEST
- tristate
- prompt "mtest"
-
-config CMD_MTEST_ALTERNATIVE
- bool
- depends on CMD_MTEST
- prompt "alternative mtest implementation"
-
endmenu
menu "video command"
diff --git a/commands/Makefile b/commands/Makefile
index 0ae6b95..393ba51 100644
--- a/commands/Makefile
+++ b/commands/Makefile
@@ -7,7 +7,6 @@ obj-$(CONFIG_CMD_LOADY) += loadxy.o
obj-$(CONFIG_CMD_LOADS) += loads.o
obj-$(CONFIG_CMD_ECHO) += echo.o
obj-$(CONFIG_CMD_MEMORY) += mem.o
-obj-$(CONFIG_CMD_MTEST) += memtest.o
obj-$(CONFIG_CMD_EDIT) += edit.o
obj-$(CONFIG_CMD_EXEC) += exec.o
obj-$(CONFIG_CMD_SLEEP) += sleep.o
diff --git a/commands/memtest.c b/commands/memtest.c
deleted file mode 100644
index 2d64d00..0000000
--- a/commands/memtest.c
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * mtest - Perform a memory test
- *
- * (C) Copyright 2000
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- */
-
-#include <common.h>
-#include <command.h>
-#include <types.h>
-
-/*
- * Perform a memory test. A more complete alternative test can be
- * configured using CONFIG_CMD_MTEST_ALTERNATIVE. The complete test
- * loops until interrupted by ctrl-c or by a failure of one of the
- * sub-tests.
- */
-#ifdef CONFIG_CMD_MTEST_ALTERNATIVE
-static int mem_test(ulong _start, ulong _end, ulong pattern_unused)
-{
- vu_long *start = (vu_long *)_start;
- vu_long *end = (vu_long *)_end;
- vu_long *addr;
- ulong val;
- ulong readback;
- vu_long addr_mask;
- vu_long offset;
- vu_long test_offset;
- vu_long pattern;
- vu_long temp;
- vu_long anti_pattern;
- vu_long num_words;
-#ifdef CFG_MEMTEST_SCRATCH
- vu_long *dummy = (vu_long*)CFG_MEMTEST_SCRATCH;
-#else
- vu_long *dummy = start;
-#endif
- int j;
- int iterations = 1;
-
- static const ulong bitpattern[] = {
- 0x00000001, /* single bit */
- 0x00000003, /* two adjacent bits */
- 0x00000007, /* three adjacent bits */
- 0x0000000F, /* four adjacent bits */
- 0x00000005, /* two non-adjacent bits */
- 0x00000015, /* three non-adjacent bits */
- 0x00000055, /* four non-adjacent bits */
- 0xaaaaaaaa, /* alternating 1/0 */
- };
-
- /* XXX: enforce alignment of start and end? */
- for (;;) {
- if (ctrlc()) {
- putchar ('\n');
- return 1;
- }
-
- printf("Iteration: %6d\r", iterations);
- 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;
- /* XXX */
- if (addr == dummy) ++addr;
- 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 0x%08lx, actual 0x%08lx at address 0x%p\n",
- val, readback, addr);
- }
- *addr = ~val;
- *dummy = val;
- readback = *addr;
- if(readback != ~val) {
- printf ("FAILURE (data line): "
- "Is 0x%08lx, should be 0x%08lx at address 0x%p\n",
- readback, ~val, addr);
- }
- }
- }
-
- /*
- * 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.
- *
- * ## NOTE ## Be sure to specify start and end
- * addresses such that addr_mask has
- * lots of bits set. For example an
- * address range of 01000000 02000000 is
- * bad while a range of 01000000
- * 01ffffff is perfect.
- */
- addr_mask = ((ulong)end - (ulong)start)/sizeof(vu_long);
- pattern = (vu_long) 0xaaaaaaaa;
- anti_pattern = (vu_long) 0x55555555;
-
- debug("%s:%d: addr mask = 0x%.8lx\n",
- __FUNCTION__, __LINE__,
- addr_mask);
- /*
- * Write the default pattern at each of the
- * power-of-two offsets.
- */
- for (offset = 1; (offset & addr_mask) != 0; offset <<= 1)
- start[offset] = pattern;
-
- /*
- * Check for address bits stuck high.
- */
- test_offset = 0;
- start[test_offset] = anti_pattern;
-
- for (offset = 1; (offset & addr_mask) != 0; offset <<= 1) {
- temp = start[offset];
- if (temp != pattern) {
- printf ("\nFAILURE: Address bit stuck high @ 0x%.8lx:"
- " expected 0x%.8lx, actual 0x%.8lx\n",
- (ulong)&start[offset], pattern, temp);
- return 1;
- }
- }
- start[test_offset] = pattern;
-
- /*
- * Check for addr bits stuck low or shorted.
- */
- for (test_offset = 1; (test_offset & addr_mask) != 0; test_offset <<= 1) {
- start[test_offset] = anti_pattern;
-
- for (offset = 1; (offset & addr_mask) != 0; offset <<= 1) {
- temp = start[offset];
- if ((temp != pattern) && (offset != test_offset)) {
- printf ("\nFAILURE: Address bit stuck low or shorted @"
- " 0x%.8lx: expected 0x%.8lx, actual 0x%.8lx\n",
- (ulong)&start[offset], pattern, temp);
- 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++) {
- start[offset] = pattern;
- }
-
- /*
- * Check each location and invert it for the second pass.
- */
- for (pattern = 1, offset = 0; offset < num_words; pattern++, offset++) {
- temp = start[offset];
- if (temp != pattern) {
- printf ("\nFAILURE (read/write) @ 0x%.8lx:"
- " expected 0x%.8lx, actual 0x%.8lx)\n",
- (ulong)&start[offset], pattern, temp);
- 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++) {
- anti_pattern = ~pattern;
- temp = start[offset];
- if (temp != anti_pattern) {
- printf ("\nFAILURE (read/write): @ 0x%.8lx:"
- " expected 0x%.8lx, actual 0x%.8lx)\n",
- (ulong)&start[offset], anti_pattern, temp);
- return 1;
- }
- start[offset] = 0;
- }
- }
-
-}
-#else
-static int mem_test(ulong _start, ulong _end, ulong pattern)
-{
- vu_long *addr;
- vu_long *start = (vu_long *)_start;
- vu_long *end = (vu_long *)_end;
- ulong val;
- ulong readback;
- ulong incr;
- int rcode;
-
- incr = 1;
- for (;;) {
- if (ctrlc()) {
- putchar('\n');
- return 1;
- }
-
- printf ("\rPattern 0x%08lX Writing..."
- "%12s"
- "\b\b\b\b\b\b\b\b\b\b",
- pattern, "");
-
- for (addr=start,val=pattern; addr<end; addr++) {
- *addr = val;
- val += incr;
- }
-
- puts ("Reading...");
-
- for (addr=start,val=pattern; addr<end; addr++) {
- readback = *addr;
- if (readback != val) {
- printf ("\nMem error @ 0x%08X: "
- "found 0x%08lX, expected 0x%08lX\n",
- (uint)addr, readback, val);
- rcode = 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;
- }
- return rcode;
-}
-#endif
-
-static int do_mem_mtest(int argc, char *argv[])
-{
- ulong start, end, pattern = 0;
-
- if (argc < 3)
- return COMMAND_ERROR_USAGE;
-
- start = simple_strtoul(argv[1], NULL, 0);
- end = simple_strtoul(argv[2], NULL, 0);
-
- if (argc > 3)
- pattern = simple_strtoul(argv[3], NULL, 0);
-
- printf ("Testing 0x%08x ... 0x%08x:\n", (uint)start, (uint)end);
-
- return mem_test(start, end, pattern);
-}
-
-static const __maybe_unused char cmd_mtest_help[] =
-"Usage: <start> <end> "
-#ifdef CONFIG_CMD_MTEST_ALTERNATIVE
-"[pattern]"
-#endif
-"\nsimple RAM read/write test\n";
-
-BAREBOX_CMD_START(mtest)
- .cmd = do_mem_mtest,
- .usage = "simple RAM test",
- BAREBOX_CMD_HELP(cmd_mtest_help)
-BAREBOX_CMD_END
-
--
1.8.1.2
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2013-02-07 10:44 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-07 10:44 [PATCH v3 0/6] add new memtest command Alexander Aring
2013-02-07 10:44 ` [PATCH 1/6] common: fix codestyle in ALIGN macros Alexander Aring
2013-02-07 10:44 ` [PATCH 2/6] common: add ALIGN_DOWN macro Alexander Aring
2013-02-07 10:44 ` [PATCH 3/6] memory: add function address_in_sdram_regions Alexander Aring
2013-02-07 10:44 ` Alexander Aring [this message]
2013-02-07 10:44 ` [PATCH 5/6] common: add mem_test routine Alexander Aring
2013-02-07 10:52 ` Marc Kleine-Budde
2013-02-07 11:16 ` Alexander Aring
2013-02-07 11:00 ` Sascha Hauer
2013-02-07 11:40 ` Alexander Aring
2013-02-07 11:54 ` Sascha Hauer
2013-02-07 15:41 ` Alexander Aring
2013-02-07 10:45 ` [PATCH 6/6] commands: add new memtest command Alexander Aring
2013-02-07 10:56 ` Marc Kleine-Budde
2013-02-07 11:20 ` Alexander Aring
2013-02-07 12:01 ` Sascha Hauer
2013-02-07 15:42 ` Alexander Aring
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1360233900-26486-5-git-send-email-alex.aring@gmail.com \
--to=alex.aring@gmail.com \
--cc=barebox@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.