Commit c8fcda89 authored by Alessandro Rubini's avatar Alessandro Rubini

g45memtest: new tool

parent 5715d9cc
......@@ -86,6 +86,7 @@ Build}.
* The Complete Filesystem::
* Installation of WRS-3::
* Code layout in a production switch::
* Troubleshooting::
@end menu
@c ##########################################################################
......@@ -1001,6 +1002,41 @@ the network or usb if a button is kept pressed at boot.
@c In this case you must follow
@c
@c ##########################################################################
@node Troubleshooting
@chapter Troubleshooting
This chapter includes notes about issues we found and how to address them,
or extra tools
@c ==========================================================================
@node Testing SDRAM
@section Testing SDRAM
In case you suspect to have RAM issues and are not even able to boot
@i{barebox}, this package offers the program @i{g45memtest}. It is a
merge of @i{at91boot} and @code{commands/memtest.c} from barebox, with
the small @i{printf} I use in other projects (e.g. @i{pptp}).
The binary is included in the package as @code{binaries/g45memtest}.
It should be loaded like @code{at91boot}: it configures the RAM and
the PLL, and then runs the test.
The source is distributed as a patch-set over @i{at91boot} (the same
version we use to boot the switch), in @code{patches/g45memtest}. To
compile, untar the source, apply the patches and compile. The
following commands are what I used to compile it (you'll need to set
@code{CROSS_COMPILE} first, though).
@example
tar xzf /opt/wrs-build/downloads/at91bootstrap-3-3.0.tar.gz
git am $WRS_BASE_DIR/../patches/g45memtest/00*
make at91sam9g45ek_defconfig
make
@end example
The output binary is the only file called ``@code{binaries/*.bin}'',
that should be renamed to @code{g45memtest}.
@c ##########################################################################
......
From f87ac48aaf4ec7726391b87577fceede1b561228 Mon Sep 17 00:00:00 2001
From: Alessandro Rubini <rubini@gnudd.com>
Date: Thu, 15 Sep 2011 23:41:14 +0200
Subject: [PATCH 1/6] board 9g45ek: fix ddr config for WRS-V3
---
board/at91sam9g45ek/at91sam9g45ek.c | 2 +-
crt0_gnu.S | 2 +-
driver/ddramc.c | 6 +++---
include/AT91SAM9G45_inc.h | 2 +-
4 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/board/at91sam9g45ek/at91sam9g45ek.c b/board/at91sam9g45ek/at91sam9g45ek.c
index d6b10db..8569231 100644
--- a/board/at91sam9g45ek/at91sam9g45ek.c
+++ b/board/at91sam9g45ek/at91sam9g45ek.c
@@ -158,7 +158,7 @@ void ddramc_hw_init(void)
(AT91C_DDRC2_DBW_16_BITS | AT91C_DDRC2_MD_DDR2_SDRAM);
ddram_config.ddramc_cr = (AT91C_DDRC2_NC_DDR10_SDR9 | // 10 column bits (1K)
- AT91C_DDRC2_NR_14 | // 14 row bits (8K)
+ AT91C_DDRC2_NR_13 | // 13 row bits (8K)
AT91C_DDRC2_CAS_3 | // CAS Latency 3
AT91C_DDRC2_DLL_RESET_DISABLED); // DLL not reset
diff --git a/crt0_gnu.S b/crt0_gnu.S
index df956d8..c00b717 100644
--- a/crt0_gnu.S
+++ b/crt0_gnu.S
@@ -56,7 +56,7 @@ _exception_vectors:
b swi_vector /* Software Interrupt */
b pabt_vector /* Prefetch Abort */
b dabt_vector /* Data Abort */
-.word _edata /* Size of the image for SAM-BA */
+.word _edata - _exception_vectors /* Size of the image for SAM-BA */
b irq_vector /* IRQ : read the AIC */
b fiq_vector /* FIQ */
diff --git a/driver/ddramc.c b/driver/ddramc.c
index 08eac28..e2824ff 100644
--- a/driver/ddramc.c
+++ b/driver/ddramc.c
@@ -126,7 +126,7 @@ int ddram_init(unsigned int ddram_controller_address,
write_ddramc(ddram_controller_address, HDDRSDRC2_MR,
AT91C_DDRC2_MODE_EXT_LMR_CMD);
/* Perform a write access to DDR address so that BA[1] is set to 1 and BA[0] is set to 0. */
- *((unsigned int *)(ddram_address + (0x2 << ba_offset))) = 0;
+ *((unsigned int *)(ddram_address + 0x4000000 /* (0x2 << ba_offset) */)) = 0;
// wait 2 cycles min (of tCK) = 15 ns min
Wait(2);
@@ -135,7 +135,7 @@ int ddram_init(unsigned int ddram_controller_address,
/* Perform a write access to DDR address so that BA[1] is set to 1 and BA[0] is set to 1. */
write_ddramc(ddram_controller_address, HDDRSDRC2_MR,
AT91C_DDRC2_MODE_EXT_LMR_CMD);
- *((unsigned int *)(ddram_address + (0x3 << ba_offset))) = 0;
+ *((unsigned int *)(ddram_address + 0x6000000 /* (0x3 << ba_offset) */)) = 0;
// wait 2 cycles min (of tCK) = 15 ns min
Wait(2);
@@ -144,7 +144,7 @@ int ddram_init(unsigned int ddram_controller_address,
/* Perform a write access to DDR address so that BA[1] is set to 0 and BA[0] is set to 1. */
write_ddramc(ddram_controller_address, HDDRSDRC2_MR,
AT91C_DDRC2_MODE_EXT_LMR_CMD);
- *((unsigned int *)(ddram_address + (0x1 << ba_offset))) = 0;
+ *((unsigned int *)(ddram_address + 0x2000000 /* (0x1 << ba_offset) */)) = 0;
// wait 200 cycles min (of tCK) = 1500 ns min
Wait(100);
diff --git a/include/AT91SAM9G45_inc.h b/include/AT91SAM9G45_inc.h
index 550aea4..a4a168f 100644
--- a/include/AT91SAM9G45_inc.h
+++ b/include/AT91SAM9G45_inc.h
@@ -267,7 +267,7 @@
#define AT91C_DDRC2_NC_DDR10_SDR9 (0x1) // (HDDRSDRC2) DDR 10 Bits | SDR 9 Bits
#define AT91C_DDRC2_NC_DDR11_SDR10 (0x2) // (HDDRSDRC2) DDR 11 Bits | SDR 10 Bits
#define AT91C_DDRC2_NC_DDR12_SDR11 (0x3) // (HDDRSDRC2) DDR 12 Bits | SDR 11 Bits
-#define AT91C_DDRC2_NR (0x3 << 2) // (HDDRSDRC2) Number of Row Bits
+#define AT91C_DDRC2_NR AT91C_DDRC2_NR_13 // (HDDRSDRC2) Number of Row Bits
#define AT91C_DDRC2_NR_11 (0x0 << 2) // (HDDRSDRC2) 11 Bits
#define AT91C_DDRC2_NR_12 (0x1 << 2) // (HDDRSDRC2) 12 Bits
#define AT91C_DDRC2_NR_13 (0x2 << 2) // (HDDRSDRC2) 13 Bits
--
1.7.7.2
From c27eea873f4a7dd9bea3da51b8e4aba27b9e52fc Mon Sep 17 00:00:00 2001
From: Alessandro Rubini <rubini@gnudd.com>
Date: Tue, 6 Mar 2012 10:18:59 +0100
Subject: [PATCH 2/6] printf: added files from pptp, unchanged
---
lib/diag-printf.c | 34 ++++++++++++++++++++++++++
lib/printf-mini.c | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 103 insertions(+), 0 deletions(-)
create mode 100644 lib/diag-printf.c
create mode 100644 lib/printf-mini.c
diff --git a/lib/diag-printf.c b/lib/diag-printf.c
new file mode 100644
index 0000000..4f26782
--- /dev/null
+++ b/lib/diag-printf.c
@@ -0,0 +1,34 @@
+/*
+ * Basic printf based on vprintf based on vsprintf
+ *
+ * Alessandro Rubini for CERN, 2011 -- public domain
+ * (please note that the vsprintf is not public domain but GPL)
+ */
+#include <stdarg.h>
+#include <pptp/pptp.h>
+#include <pptp/diag.h>
+
+#define PP_BUF 128 /* We prefer small targets */
+
+static char print_buf[PP_BUF];
+
+int pp_vprintf(const char *fmt, va_list args)
+{
+ int ret;
+
+ ret = pp_vsprintf(print_buf, fmt, args);
+ pp_puts(print_buf);
+ return ret;
+}
+
+int pp_printf(const char *fmt, ...)
+{
+ va_list args;
+ int r;
+
+ va_start(args, fmt);
+ r = pp_vprintf(fmt, args);
+ va_end(args);
+
+ return r;
+}
diff --git a/lib/printf-mini.c b/lib/printf-mini.c
new file mode 100644
index 0000000..d68c848
--- /dev/null
+++ b/lib/printf-mini.c
@@ -0,0 +1,69 @@
+#include <stdarg.h>
+/*
+ * minimal vsprintf: only %s and hex values
+ * Alessandro Rubini 2010, based on code in u-boot (from older Linux)
+ * GNU GPL version 2.
+ */
+int pp_vsprintf(char *buf, const char *fmt, va_list args)
+{
+ int i, j;
+ static char hex[] = "0123456789abcdef";
+ char *s;
+ char *str = buf;
+
+ for (; *fmt ; ++fmt) {
+ if (*fmt != '%') {
+ *str++ = *fmt;
+ continue;
+ }
+
+ repeat:
+ fmt++; /* Skip '%' initially, other stuff later */
+
+ /* Skip the complete format string */
+ switch(*fmt) {
+ case '\0':
+ goto ret;
+ case '*':
+ /* should be precision, just eat it */
+ i = va_arg(args, int);
+ /* fall through: discard unknown stuff */
+ default:
+ goto repeat;
+
+ /* Special cases for conversions */
+
+ case 'c': /* char: supported */
+ *str++ = (unsigned char) va_arg(args, int);
+ break;
+ case 's': /* string: supported */
+ s = va_arg(args, char *);
+ while (*s)
+ *str++ = *s++;
+ break;
+ case 'n': /* number-thus-far: not supported */
+ break;
+ case '%': /* supported */
+ *str++ = '%';
+ break;
+
+ /* all integer (and pointer) are printed as <%08x> */
+ case 'o':
+ case 'x':
+ case 'X':
+ case 'd':
+ case 'i':
+ case 'u':
+ case 'p':
+ i = va_arg(args, int);
+ *str++ = '<';
+ for (j = 28; j >= 0; j -= 4)
+ *str++ = hex[(i>>j)&0xf];
+ *str++ = '>';
+ break;
+ }
+ }
+ ret:
+ *str = '\0';
+ return str - buf;
+}
--
1.7.7.2
From 3ebc7c415750ffcd7cf4241010027773609e6919 Mon Sep 17 00:00:00 2001
From: Alessandro Rubini <rubini@gnudd.com>
Date: Tue, 6 Mar 2012 10:37:27 +0100
Subject: [PATCH 3/6] printf: fixes and addition to makefile
---
include/pp_printf.h | 9 +++++++++
lib/diag-printf.c | 3 +--
lib/libc.mk | 3 +++
lib/printf-mini.c | 1 +
main.c | 1 +
5 files changed, 15 insertions(+), 2 deletions(-)
create mode 100644 include/pp_printf.h
diff --git a/include/pp_printf.h b/include/pp_printf.h
new file mode 100644
index 0000000..6ceca25
--- /dev/null
+++ b/include/pp_printf.h
@@ -0,0 +1,9 @@
+/* prototypes for the mini printf, copied from pptp */
+
+#include <stdarg.h>
+
+int pp_vprintf(const char *fmt, va_list args);
+int pp_printf(const char *fmt, ...);
+int pp_vsprintf(char *buf, const char *fmt, va_list args);
+
+#define pp_puts dbgu_print
diff --git a/lib/diag-printf.c b/lib/diag-printf.c
index 4f26782..07a1d78 100644
--- a/lib/diag-printf.c
+++ b/lib/diag-printf.c
@@ -5,8 +5,7 @@
* (please note that the vsprintf is not public domain but GPL)
*/
#include <stdarg.h>
-#include <pptp/pptp.h>
-#include <pptp/diag.h>
+#include <pp_printf.h>
#define PP_BUF 128 /* We prefer small targets */
diff --git a/lib/libc.mk b/lib/libc.mk
index 219e55b..a79c4bd 100644
--- a/lib/libc.mk
+++ b/lib/libc.mk
@@ -7,6 +7,9 @@ COBJS-y += $(LIBC)string.o
COBJS-y += $(LIBC)div0.o
COBJS-y += $(LIBC)udiv.o
COBJS-y += $(LIBC)eabi_utils.o
+COBJS-y += $(LIBC)printf-mini.o
+COBJS-y += $(LIBC)diag-printf.o
+
SOBJS-y += $(LIBC)_udivsi3.o
SOBJS-y += $(LIBC)_umodsi3.o
diff --git a/lib/printf-mini.c b/lib/printf-mini.c
index d68c848..0c0ea73 100644
--- a/lib/printf-mini.c
+++ b/lib/printf-mini.c
@@ -1,4 +1,5 @@
#include <stdarg.h>
+#include <pp_printf.h>
/*
* minimal vsprintf: only %s and hex values
* Alessandro Rubini 2010, based on code in u-boot (from older Linux)
diff --git a/main.c b/main.c
index 2a46204..8810324 100644
--- a/main.c
+++ b/main.c
@@ -30,6 +30,7 @@
* Creation : ODi Apr 19th 2006
*-----------------------------------------------------------------------------
*/
+#include <pp_printf.h>
#include "part.h"
#include "main.h"
#include "dbgu.h"
--
1.7.7.2
From 74e27efd703fbafab08c28c7f7d0eb1aaae7db8e Mon Sep 17 00:00:00 2001
From: Alessandro Rubini <rubini@gnudd.com>
Date: Tue, 6 Mar 2012 11:38:53 +0100
Subject: [PATCH 5/6] memtest: fix it and add to makefile
---
lib/libc.mk | 1 +
lib/memtest.c | 85 +++++++++++++++++++++++---------------------------------
2 files changed, 36 insertions(+), 50 deletions(-)
diff --git a/lib/libc.mk b/lib/libc.mk
index a79c4bd..7c7a6c1 100644
--- a/lib/libc.mk
+++ b/lib/libc.mk
@@ -9,6 +9,7 @@ COBJS-y += $(LIBC)udiv.o
COBJS-y += $(LIBC)eabi_utils.o
COBJS-y += $(LIBC)printf-mini.o
COBJS-y += $(LIBC)diag-printf.o
+COBJS-y += $(LIBC)memtest.o
SOBJS-y += $(LIBC)_udivsi3.o
diff --git a/lib/memtest.c b/lib/memtest.c
index d9c8b3d..52542c9 100644
--- a/lib/memtest.c
+++ b/lib/memtest.c
@@ -23,9 +23,26 @@
* MA 02111-1307 USA
*/
-#include <common.h>
-#include <command.h>
-#include <types.h>
+#include <pp_printf.h>
+#include <dbgu.h>
+
+/* BEGIN HACKS - to compile barebox code out of barebox */
+typedef unsigned char uchar;
+typedef unsigned short ushort;
+typedef unsigned int uint;
+typedef unsigned long ulong;
+typedef volatile unsigned long vu_long;
+typedef volatile unsigned short vu_short;
+typedef volatile unsigned char vu_char;
+
+#define putchar __putc
+#define printf pp_printf
+#define puts dbgu_print
+
+static inline int ctrlc(void) {return 0;}
+static inline void __putc(int c) {printf("%c", c);}
+
+/* END HACKS - to compile barebox code out of barebox */
/*
* Perform a memory test. A more complete alternative test can be
@@ -34,7 +51,7 @@
* sub-tests.
*/
#ifdef CONFIG_CMD_MTEST_ALTERNATIVE
-static int mem_test(ulong _start, ulong _end, ulong pattern_unused)
+int mem_test(ulong _start, ulong _end, ulong pattern_unused)
{
vu_long *start = (vu_long *)_start;
vu_long *end = (vu_long *)_end;
@@ -105,7 +122,7 @@ static int mem_test(ulong _start, ulong _end, ulong pattern_unused)
readback = *addr;
if(readback != val) {
printf ("FAILURE (data line): "
- "expected 0x%08lx, actual 0x%08lx at address 0x%p\n",
+ "expected 0x%08lx, actual 0x%08lx at address 0x%p\r\n",
val, readback, addr);
}
*addr = ~val;
@@ -113,7 +130,7 @@ static int mem_test(ulong _start, ulong _end, ulong pattern_unused)
readback = *addr;
if(readback != ~val) {
printf ("FAILURE (data line): "
- "Is 0x%08lx, should be 0x%08lx at address 0x%p\n",
+ "Is 0x%08lx, should be 0x%08lx at address 0x%p\r\n",
readback, ~val, addr);
}
}
@@ -164,7 +181,7 @@ static int mem_test(ulong _start, ulong _end, ulong pattern_unused)
pattern = (vu_long) 0xaaaaaaaa;
anti_pattern = (vu_long) 0x55555555;
- debug("%s:%d: addr mask = 0x%.8lx\n",
+ debug("%s:%d: addr mask = 0x%.8lx\r\n",
__FUNCTION__, __LINE__,
addr_mask);
/*
@@ -183,8 +200,8 @@ static int mem_test(ulong _start, ulong _end, ulong pattern_unused)
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",
+ printf ("FAILURE: Address bit stuck high @ 0x%.8lx:"
+ " expected 0x%.8lx, actual 0x%.8lx\r\n",
(ulong)&start[offset], pattern, temp);
return 1;
}
@@ -200,8 +217,8 @@ static int mem_test(ulong _start, ulong _end, ulong pattern_unused)
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",
+ printf ("FAILURE: Address bit stuck low or shorted @"
+ " 0x%.8lx: expected 0x%.8lx, actual 0x%.8lx\r\n",
(ulong)&start[offset], pattern, temp);
return 1;
}
@@ -236,8 +253,8 @@ static int mem_test(ulong _start, ulong _end, ulong pattern_unused)
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",
+ printf ("FAILURE (read/write) @ 0x%.8lx:"
+ " expected 0x%.8lx, actual 0x%.8lx)\r\n",
(ulong)&start[offset], pattern, temp);
return 1;
}
@@ -253,8 +270,8 @@ static int mem_test(ulong _start, ulong _end, ulong pattern_unused)
anti_pattern = ~pattern;
temp = start[offset];
if (temp != anti_pattern) {
- printf ("\nFAILURE (read/write): @ 0x%.8lx:"
- " expected 0x%.8lx, actual 0x%.8lx)\n",
+ printf ("FAILURE (read/write): @ 0x%.8lx:"
+ " expected 0x%.8lx, actual 0x%.8lx)\r\n",
(ulong)&start[offset], anti_pattern, temp);
return 1;
}
@@ -264,7 +281,7 @@ static int mem_test(ulong _start, ulong _end, ulong pattern_unused)
}
#else
-static int mem_test(ulong _start, ulong _end, ulong pattern)
+int mem_test(ulong _start, ulong _end, ulong pattern)
{
vu_long *addr;
vu_long *start = (vu_long *)_start;
@@ -296,8 +313,8 @@ static int mem_test(ulong _start, ulong _end, ulong pattern)
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",
+ printf ("\r\nMem error @ 0x%08X: "
+ "found 0x%08lX, expected 0x%08lX\r\n",
(uint)addr, readback, val);
rcode = 1;
}
@@ -321,35 +338,3 @@ static int mem_test(ulong _start, ulong _end, ulong pattern)
return rcode;
}
#endif
-
-static int do_mem_mtest(struct command *cmdtp, 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.7.7.2
From cf60a3a806e75315e39610d40607d76efcc5816c Mon Sep 17 00:00:00 2001
From: Alessandro Rubini <rubini@gnudd.com>
Date: Tue, 6 Mar 2012 11:39:13 +0100
Subject: [PATCH 6/6] main: call memtest
---
main.c | 92 +++-------------------------------------------------------------
1 files changed, 4 insertions(+), 88 deletions(-)
diff --git a/main.c b/main.c
index 8810324..e4a6956 100644
--- a/main.c
+++ b/main.c
@@ -83,6 +83,7 @@ void Wait(unsigned int count)
/*------------------------------------------------------------------------------*/
int main(void)
{
+ extern void mem_test(unsigned long ini, unsigned long end);
/*
* ================== 1st step: Hardware Initialization =================
*
@@ -101,92 +102,7 @@ int main(void)
load_1wire_info();
#endif
- dbg_log(1, "Begin to load image...\n\r");
- /*
- * ==================== 2nd step: Load from media ====================
- *
- * Load from Dataflash in RAM
- */
-#if defined(CONFIG_DATAFLASH) || defined(CONFIG_DATAFLASH_CARD)
-#if defined(CONFIG_LOAD_LINUX)
- LoadLinux();
-#elif defined(CONFIG_LOAD_NK) || defined(CONFIG_LOAD_EBOOT)
- LoadWince();
-#else
- load_df(AT91C_SPI_PCS_DATAFLASH, IMG_ADDRESS, IMG_SIZE, JUMP_ADDR);
-#endif
-#endif
-
- /*
- * Load from Nandflash in RAM
- */
-#if defined(CONFIG_NANDFLASH)
-#if defined(CONFIG_LOAD_LINUX)
- LoadLinux();
-#elif defined(CONFIG_LOAD_NK) || defined(CONFIG_LOAD_EBOOT)
- LoadWince();
-#else
- read_nandflash((unsigned char *)JUMP_ADDR, (unsigned long)IMG_ADDRESS,
- (int)IMG_SIZE);
-#endif
-#endif
-
- /*
- * Load from Norflash in RAM
- */
-#ifdef CONFIG_FLASH
- load_norflash(IMG_ADDRESS, IMG_SIZE, JUMP_ADDR);
-#endif
-
-#if defined(CONFIG_SDCARD)
-#if defined(CONFIG_LOAD_LINUX)
- LoadLinux();
-#elif defined(CONFIG_LOAD_NK) || defined(CONFIG_LOAD_EBOOT)
- LoadWince();
-#else
- load_SDCard();
-#endif
-#endif
-
- dbg_log(1, "Loading image done.\n\r");
- /*
- * ==================== 3rd step: Process the Image ===================
- */
- /*
- * Uncompress the image
- */
-#ifdef CONFIG_GUNZIP
- decompress_image((void *)IMG_ADDRESS, (void *)JUMP_ADDR, IMG_SIZE); /* NOT IMPLEMENTED YET */
- msg_print(MSG_DECOMPRESS);
-#endif
-
- /*
- * ==================== 4th step: Start the application ===================
- */
- /*
- * Set linux arguments
- */
-#ifdef CONFIG_LINUX_ARG
- linux_arg(LINUX_ARG); /* NOT IMPLEMENTED YET */
- msg_print(MSG_LINUX);
-#endif /* LINUX_ARG */
-
-#ifdef CONFIG_SCLK
- /* Switch slow clock late so that external oscillator has time to startup */
- sclk_enable();
-#endif
-
-#ifdef WINCE
-#ifdef CONFIG_LOAD_NK
- Jump(JUMP_ADDR + 0x1000);
-#else
- Jump(JUMP_ADDR);
-#endif
-#else /* !WINCE */
-#ifdef CONFIG_LOAD_NK
- return (JUMP_ADDR + 0x1000);
-#else
- return JUMP_ADDR;
-#endif
-#endif
+ pp_printf("Running application at %p\n", mem_test);
+ mem_test(0x70000000,0x74000000);
+ return 0; /* not reached */
}
--
1.7.7.2
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment