POST: support for km_arm and mem_regions test definition
v3 cover POST: support for km_arm and mem_regions test definition
This series adds support for POST on the km_arm boards. These boards use a jumper to run some self-tests at the board power-up. There are some adaptations for POST to run on the ARM architecture.
This series defines a new mem_regions POST test. This test also takes place before relocation, but it only tests some regions of the RAM so that it is quicker.
Changes for v2:
- added CONFIG_POST_EXTERNAL_WORD_FUNCS to allow to redefine post_word_load/store in the board support file when the proposed functions are not suitable.
Changes for v3:
- moved COFNIG_POST_EXTERNAL_WORD_FUNCS to an individual patch
- moved memory test configuration for km_arm from post to board code
Valentin Longchamp (8):
POST/arm: adaptations needed for POST on ARM to work
POST: allow redefinition of post_word_load/store
POST: add post_log_res field for post results in global data
POST: make env test flags fetching optional
POST: drivers/memory.c coding style cleanup
POST: add new memory regions test
km_arm: change CONFIG_SYS_TEXT_BASE to end of RAM
km_arm: enable POST for these boards
arch/arm/include/asm/global_data.h | 5 + arch/arm/lib/board.c | 2 + arch/blackfin/include/asm/global_data.h | 1 + arch/nios2/include/asm/global_data.h | 1 + arch/powerpc/include/asm/global_data.h | 1 + arch/sparc/include/asm/global_data.h | 1 + board/keymile/km_arm/km_arm.c | 32 ++++++ include/configs/km/km_arm.h | 8 ++- include/post.h | 10 ++ post/drivers/memory.c | 173 +++++++++++++++++++----------- post/post.c | 29 ++++-- post/tests.c | 15 +++- 12 files changed, 203 insertions(+), 75 deletions(-)
PATCH v3 1/8 POST/arm: adaptations needed for POST on ARM to work
For post to run on ARM, 3 things are needed:
- post_log_word to be defined in gd
- a post.h include in arch/arm/lib/board.c
---
Changes for v2:
- introduced CONFIG_POST_EXTERNAL_WORD_FUNCS
Changes for v3:
- removed CONFIG_POST_EXTERNAL_WORD_FUNCS. This is now in a separate patch
--- arch/arm/include/asm/global_data.h | 4 ++++ arch/arm/lib/board.c | 2 ++ 2 files changed, 6 insertions(+), 0 deletions(-)
arch/arm/include/asm/global_data.h +4 -0
@@ -75,6 +75,10 @@ typedef struct global_data {#endif void **jt;/* jump table */ char env_buf[32 ];/* buffer for getenv() before reloc. */ +#if defined(CONFIG_POST ) || defined(CONFIG_LOGBUFFER ) +unsigned long post_log_word;/* Record POST activities */ +unsigned long post_init_f_time;/* When post_init_f started */ +#endif } gd_t;/*
arch/arm/lib/board.c +2 -0
@@ -49,6 +49,8 @@#include <nand.h> #include <onenand_uboot.h> #include <mmc.h> +#include <post.h> +#include <logbuff.h> #ifdef CONFIG_BITBANGMII #include <miiphy.h>
Signature · 1 line
1.7.1
PATCH v3 1/8 POST/arm: adaptations needed for POST on ARM to work
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20110902/89d18a62/attachment.pgp
PATCH v3 2/8 POST: allow redefinition of post_word_load/store
In reply to Valentin LongchampThe predefinde post_word_load/store functions do not fit all boards, so we introduce a way to define post_word_load/store as externs in post.h that then can be defined in board specific files. This is done with the CONFIG_POST_EXTERNAL_WORD_FUNCS #define
--- include/post.h | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)
include/post.h +8 -0
@@ -33,6 +33,7 @@#if defined(CONFIG_POST ) || defined(CONFIG_LOGBUFFER ) +#ifndef CONFIG_POST_EXTERNAL_WORD_FUNCS #ifdef CONFIG_SYS_POST_WORD_ADDR #define _POST_WORD_ADDR CONFIG_SYS_POST_WORD_ADDR#else
@@ -85,6 +86,13 @@ static inline void post_word_store (ulong value) {out_le32 ((volatile void *)(_POST_WORD_ADDR), value); } + +#else + +extern ulong post_word_load (void ); +extern void post_word_store (ulong value); + +#endif /* CONFIG_POST_EXTERNAL_WORD_FUNCS */ #endif /* defined (CONFIG_POST) || defined(CONFIG_LOGBUFFER) */ #endif /* __ASSEMBLY__ */
Signature · 1 line
1.7.1
PATCH v3 3/8 POST: add post_log_res field for post results in global data
In reply to Valentin LongchampThe current post_log_word in global data is currently split into 2x 16 bits: half for the test start, half for the test success. Since we alredy have more than 16 POST tests defined and more could be defined, this may result in an overflow and the post_output_backlog would not work for the tests defined further of these 16 positions.
An additional field is added to global data so that we can now support up to 32 (depending of architecture) tests. The post_log_word is only used to record the start of the test and the new field post_log_res for the test success (or failure). The post_output_backlog is for this change also adapted.
--- arch/arm/include/asm/global_data.h | 1 + arch/blackfin/include/asm/global_data.h | 1 + arch/nios2/include/asm/global_data.h | 1 + arch/powerpc/include/asm/global_data.h | 1 + arch/sparc/include/asm/global_data.h | 1 + post/post.c | 9 +++++---- 6 files changed, 10 insertions(+), 4 deletions(-)
arch/arm/include/asm/global_data.h +1 -0
@@ -77,6 +77,7 @@ typedef struct global_data {char env_buf[32 ];/* buffer for getenv() before reloc. */ #if defined(CONFIG_POST ) || defined(CONFIG_LOGBUFFER )unsigned long post_log_word;/* Record POST activities */ +unsigned long post_log_res;/* success of POST test */ unsigned long post_init_f_time;/* When post_init_f started */ #endif } gd_t;
arch/blackfin/include/asm/global_data.h +1 -0
@@ -50,6 +50,7 @@ typedef struct global_data {unsigned long env_valid;/* Checksum of Environment valid? */ #if defined(CONFIG_POST ) || defined(CONFIG_LOGBUFFER )unsigned long post_log_word;/* Record POST activities */ +unsigned long post_log_res;/* success of POST test */ unsigned long post_init_f_time;/* When post_init_f started */ #endif
arch/nios2/include/asm/global_data.h +1 -0
@@ -34,6 +34,7 @@ typedef struct global_data {unsigned long env_valid;/* Checksum of Environment valid */ #if defined(CONFIG_POST ) || defined(CONFIG_LOGBUFFER )unsigned long post_log_word;/* Record POST activities */ +unsigned long post_log_res;/* success of POST test */ unsigned long post_init_f_time;/* When post_init_f started */ #endif void **jt;/* Standalone app jump table */
arch/powerpc/include/asm/global_data.h +1 -0
@@ -160,6 +160,7 @@ typedef struct global_data {#endif #if defined(CONFIG_POST ) || defined(CONFIG_LOGBUFFER )unsigned long post_log_word;/* Record POST activities */ +unsigned long post_log_res;/* success of POST test */ unsigned long post_init_f_time;/* When post_init_f started */ #endif #ifdef CONFIG_BOARD_TYPES
arch/sparc/include/asm/global_data.h +1 -0
@@ -58,6 +58,7 @@ typedef struct global_data {#endif #if defined(CONFIG_POST ) || defined(CONFIG_LOGBUFFER )unsigned long post_log_word;/* Record POST activities */ +unsigned long post_log_res;/* success of POST test */ unsigned long post_init_f_time;/* When post_init_f started */ #endif #ifdef CONFIG_BOARD_TYPES
post/post.c +5 -4
@@ -100,6 +100,7 @@ void post_bootmode_init (void)/* Reset activity record */ gd->post_log_word =0 ; + gd->post_log_res =0 ; }int post_bootmode_get (unsigned int *last_test)
@@ -123,12 +124,12 @@ int post_bootmode_get (unsigned int *last_test)/* POST tests run before relocation only mark status bits .... */ static void post_log_mark_start (unsigned long testid ) { - gd->post_log_word |= (testid)<<16 ; + gd->post_log_word |= testid; }static void post_log_mark_succ (unsigned long testid ) { - gd->post_log_word |= testid; + gd->post_log_res |= testid; }/* ... and the messages are output once we are relocated */
@@ -137,9 +138,9 @@ void post_output_backlog ( void )int j;for (j =0 ; j < post_list_size; j++) { -if (gd->post_log_word & (post_list[j].testid<<16 )) { +if (gd->post_log_word & (post_list[j].testid)) {post_log ("POST %s " , post_list[j].cmd); -if (gd->post_log_word & post_list[j].testid) +if (gd->post_log_res & post_list[j].testid)post_log ("PASSED\n" );else {post_log ("FAILED\n" );
Signature · 1 line
1.7.1
PATCH v3 3/8 POST: add post_log_res field for post results in global data
Dear Valentin Longchamp,
Quoted 15 lines · In message <[email protected]>…
The current
post_log_wordin global data is currently split into 2x 16 bits: half for the test start, half for the test success. Since we alredy have more than 16 POST tests defined and more could be defined, this may result in an overflow and thepost_output_backlogwould not work for the tests defined further of these 16 positions.An additional field is added to global data so that we can now support up to 32 (depending of architecture) tests. The
post_log_wordis only used to record the start of the test and the new fieldpost_log_resfor the test success (or failure). Thepost_output_backlogis for this change also adapted.Signed-off-by Valentin Longchamp <[email protected]>Signed-off-by Holger Brunck <[email protected]>Acked-by Mike Frysinger <[email protected]>
Quoted 8 lines
--- arch/arm/include/asm/global_data.h | 1 + arch/blackfin/include/asm/global_data.h | 1 + arch/nios2/include/asm/global_data.h | 1 + arch/powerpc/include/asm/global_data.h | 1 + arch/sparc/include/asm/global_data.h | 1 + post/post.c | 9 +++++---- 6 files changed, 10 insertions(+), 4 deletions(-)
Checkpatch says:
total: 0 errors, 1 warnings, 67 lines checked
Please clean up and resubmit. Thanks.
Best regards,
Wolfgang Denk
Signature · 5 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de When choosing between two evils, I always like to take the one I've never tried before. -- Mae West, "Klondike Annie"
PATCH v3 3/8 POST: add post_log_res field for post results in global data
Hello Wolfgang,
Quoted 29 lines · Wolfgang Denk
Dear Valentin Longchamp,
Quoted 15 lines · In message <[email protected]>…
The current
post_log_wordin global data is currently split into 2x 16 bits: half for the test start, half for the test success. Since we alredy have more than 16 POST tests defined and more could be defined, this may result in an overflow and thepost_output_backlogwould not work for the tests defined further of these 16 positions.An additional field is added to global data so that we can now support up to 32 (depending of architecture) tests. The
post_log_wordis only used to record the start of the test and the new fieldpost_log_resfor the test success (or failure). Thepost_output_backlogis for this change also adapted.Signed-off-by Valentin Longchamp <[email protected]>Signed-off-by Holger Brunck <[email protected]>Acked-by Mike Frysinger <[email protected]>Quoted 8 lines
--- arch/arm/include/asm/global_data.h | 1 + arch/blackfin/include/asm/global_data.h | 1 + arch/nios2/include/asm/global_data.h | 1 + arch/powerpc/include/asm/global_data.h | 1 + arch/sparc/include/asm/global_data.h | 1 + post/post.c | 9 +++++---- 6 files changed, 10 insertions(+), 4 deletions(-)Checkpatch says:
Quoted 8 lines
total: 0 errors, 1 warnings, 67 lines checked
Please clean up and resubmit. Thanks.
Best regards,
Wolfgang Denk
I have a question here:
There was a v4 version of these patches for which messages were sent yesterday that they were applied. And now I receive these checkpatch warnings/errors asking for resubmitting but for the v3 patches.
Could you please tell me what the exact status is ?
Then what exact checkpatch.pl version are you (or your script) using ? Because I don't get the same output as you.
Best Regards
Signature · 13 lines
Valentin Longchamp Embedded Software Engineer Hardware and Chip Integration ______________________________________ KEYMILE AG Schwarzenburgstr. 73 CH-3097 Liebefeld Phone +41 31 377 1318 Fax +41 31 377 1212 valentin.longchamp at keymile.com www.keymile.com ______________________________________ KEYMILE: A Specialist as a Partner
PATCH v3 4/8 POST: make env test flags fetching optional
In reply to Valentin LongchampSome boards have the environment variables defined in a slow EEPROM. post_run accesses these environment variables to define which tests have to be run (in post_get_flags). This is very slow before the code relocation on some boards with a slow I2C EEPROM for environement variables.
This patch adds a config option to skip the fetching of the test flags in the environment variables. The test flags assigned to the tests then only are the ones statically defined for the test in post/tests.c.
--- post/post.c | 20 +++++++++++++++----- 1 files changed, 15 insertions(+), 5 deletions(-)
post/post.c +15 -5
@@ -170,7 +170,8 @@ static void post_bootmode_test_off (void)post_word_store (word); } -static void post_get_flags (int *test_flags) +#ifndef CONFIG_POST_SKIP_ENV_FLAGS +static void post_get_env_flags (int *test_flags) {int flag[] = {POST_POWERON ,POST_NORMAL ,POST_SLOWTEST ,POST_CRITICAL };
@@ -183,10 +184,6 @@ static void post_get_flags (int *test_flags)int last;int i, j; -for (j =0 ; j < post_list_size; j++) { - test_flags[j] = post_list[j].flags; - } -for (i =0 ; i < varnum; i++) {if (getenv_f (var[i], list,sizeof (list)) <=0 )continue ;
@@ -224,6 +221,19 @@ static void post_get_flags (int *test_flags) name = s + 1; } } +} +#endif + +static void post_get_flags (int *test_flags) +{ +int j; + +for (j =0 ; j < post_list_size; j++) + test_flags[j] = post_list[j].flags; + +#ifndef CONFIG_POST_SKIP_ENV_FLAGS +post_get_env_flags (test_flags); +#endif for (j =0 ; j < post_list_size; j++) {if (test_flags[j] &POST_POWERON ) {
Signature · 1 line
1.7.1
PATCH v3 5/8 POST: drivers/memory.c coding style cleanup
In reply to Valentin LongchampThis is needed for a further patch adding a new memory test.
--- post/drivers/memory.c | 118 +++++++++++++++++++++++++------------------------ 1 files changed, 60 insertions(+), 58 deletions(-)
post/drivers/memory.c +60 -58
@@ -250,7 +250,7 @@ static int memory_post_dataline(unsigned long long * pmem) hi = (temp64>>32 ) &0xffffffff ; lo = temp64 &0xffffffff ; -post_log ("Memory (date line) error at %08x, " +post_log ("Memory (date line) error at %08x, " "wrote %08x%08x, read %08x%08x !\n" , pmem, pathi, patlo, hi, lo); ret =-1 ;
@@ -281,7 +281,7 @@ static int memory_post_addrline(ulong *testaddr, ulong *base, ulong size) }#endif if (readback == *testaddr) { -post_log ("Memory (address line) error at %08x<->%08x, " +post_log ("Memory (address line) error at %08x<->%08x, " "XOR value %08x !\n" , testaddr, target, xor); ret =-1 ;
@@ -291,7 +291,7 @@ static int memory_post_addrline(ulong *testaddr, ulong *base, ulong size)return ret; } -static int memory_post_test1 (unsigned long start, +static int memory_post_test1 (unsigned long start,unsigned long size,unsigned long val) {
@@ -303,13 +303,13 @@ static int memory_post_test1 (unsigned long start,for (i =0 ; i < size /sizeof (ulong); i++) { mem[i] = val;if (i %1024 ==0 ) -WATCHDOG_RESET (); +WATCHDOG_RESET (); } -for (i =0 ; i < size /sizeof (ulong) && ret ==0 ; i++) { +for (i =0 ; i < size /sizeof (ulong) && !ret; i++) { readback = mem[i];if (readback != val) { -post_log ("Memory error at %08x, " +post_log ("Memory error at %08x, " "wrote %08x, read %08x !\n" , mem + i, val, readback);
@@ -317,13 +317,13 @@ static int memory_post_test1 (unsigned long start,break ; }if (i %1024 ==0 ) -WATCHDOG_RESET (); +WATCHDOG_RESET (); }return ret; } -static int memory_post_test2 (unsigned long start,unsigned long size) +static int memory_post_test2 (unsigned long start,unsigned long size) {unsigned long i;ulong *mem = (ulong *) start;
@@ -333,13 +333,13 @@ static int memory_post_test2 (unsigned long start, unsigned long size)for (i =0 ; i < size /sizeof (ulong); i++) { mem[i] =1 << (i %32 );if (i %1024 ==0 ) -WATCHDOG_RESET (); +WATCHDOG_RESET (); } -for (i =0 ; i < size /sizeof (ulong) && ret ==0 ; i++) { +for (i =0 ; i < size /sizeof (ulong) && !ret; i++) { readback = mem[i];if (readback != (1 << (i %32 ))) { -post_log ("Memory error at %08x, " +post_log ("Memory error at %08x, " "wrote %08x, read %08x !\n" , mem + i,1 << (i %32 ), readback);
@@ -347,13 +347,13 @@ static int memory_post_test2 (unsigned long start, unsigned long size)break ; }if (i %1024 ==0 ) -WATCHDOG_RESET (); +WATCHDOG_RESET (); }return ret; } -static int memory_post_test3 (unsigned long start,unsigned long size) +static int memory_post_test3 (unsigned long start,unsigned long size) {unsigned long i;ulong *mem = (ulong *) start;
@@ -363,13 +363,13 @@ static int memory_post_test3 (unsigned long start, unsigned long size)for (i =0 ; i < size /sizeof (ulong); i++) { mem[i] = i;if (i %1024 ==0 ) -WATCHDOG_RESET (); +WATCHDOG_RESET (); } -for (i =0 ; i < size /sizeof (ulong) && ret ==0 ; i++) { +for (i =0 ; i < size /sizeof (ulong) && !ret; i++) { readback = mem[i];if (readback != i) { -post_log ("Memory error at %08x, " +post_log ("Memory error at %08x, " "wrote %08x, read %08x !\n" , mem + i, i, readback);
@@ -377,13 +377,13 @@ static int memory_post_test3 (unsigned long start, unsigned long size)break ; }if (i %1024 ==0 ) -WATCHDOG_RESET (); +WATCHDOG_RESET (); }return ret; } -static int memory_post_test4 (unsigned long start,unsigned long size) +static int memory_post_test4 (unsigned long start,unsigned long size) {unsigned long i;ulong *mem = (ulong *) start;
@@ -393,13 +393,13 @@ static int memory_post_test4 (unsigned long start, unsigned long size)for (i =0 ; i < size /sizeof (ulong); i++) { mem[i] = ~i;if (i %1024 ==0 ) -WATCHDOG_RESET (); +WATCHDOG_RESET (); } -for (i =0 ; i < size /sizeof (ulong) && ret ==0 ; i++) { +for (i =0 ; i < size /sizeof (ulong) && !ret; i++) { readback = mem[i];if (readback != ~i) { -post_log ("Memory error at %08x, " +post_log ("Memory error@%08x, " "wrote %08x, read %08x !\n" , mem + i, ~i, readback);
@@ -407,47 +407,48 @@ static int memory_post_test4 (unsigned long start, unsigned long size)break ; }if (i %1024 ==0 ) -WATCHDOG_RESET (); +WATCHDOG_RESET (); }return ret; } -static int memory_post_tests (unsigned long start,unsigned long size) +static int memory_post_tests (unsigned long start,unsigned long size) {int ret =0 ; -if (ret ==0 ) - ret =memory_post_dataline ((unsigned long long *)start); -WATCHDOG_RESET (); -if (ret ==0 ) - ret =memory_post_addrline ((ulong *)start, (ulong *)start, size); -WATCHDOG_RESET (); -if (ret ==0 ) - ret =memory_post_addrline ((ulong *)(start + size -8 ), +if (!ret) + ret =memory_post_dataline ((unsigned long long *)start); +WATCHDOG_RESET (); +if (!ret) + ret =memory_post_addrline ((ulong *)start, (ulong *)start, + size); +WATCHDOG_RESET (); +if (!ret) + ret =memory_post_addrline ((ulong *)(start + size -8 ), (ulong *)start, size); -WATCHDOG_RESET (); -if (ret ==0 ) - ret =memory_post_test1 (start, size,0x00000000 ); -WATCHDOG_RESET (); -if (ret ==0 ) - ret =memory_post_test1 (start, size,0xffffffff ); -WATCHDOG_RESET (); -if (ret ==0 ) - ret =memory_post_test1 (start, size,0x55555555 ); -WATCHDOG_RESET (); -if (ret ==0 ) - ret =memory_post_test1 (start, size,0xaaaaaaaa ); -WATCHDOG_RESET (); -if (ret ==0 ) - ret =memory_post_test2 (start, size); -WATCHDOG_RESET (); -if (ret ==0 ) - ret =memory_post_test3 (start, size); -WATCHDOG_RESET (); -if (ret ==0 ) - ret =memory_post_test4 (start, size); -WATCHDOG_RESET (); +WATCHDOG_RESET (); +if (!ret) + ret =memory_post_test1 (start, size,0x00000000 ); +WATCHDOG_RESET (); +if (!ret) + ret =memory_post_test1 (start, size,0xffffffff ); +WATCHDOG_RESET (); +if (!ret) + ret =memory_post_test1 (start, size,0x55555555 ); +WATCHDOG_RESET (); +if (!ret) + ret =memory_post_test1 (start, size,0xaaaaaaaa ); +WATCHDOG_RESET (); +if (!ret) + ret =memory_post_test2 (start, size); +WATCHDOG_RESET (); +if (!ret) + ret =memory_post_test3 (start, size); +WATCHDOG_RESET (); +if (!ret) + ret =memory_post_test4 (start, size); +WATCHDOG_RESET ();return ret; }
@@ -499,11 +500,12 @@ int memory_post_test(int flags) ret =memory_post_tests (vstart, memsize); }else {/* POST_NORMAL */ unsigned long i; -for (i =0 ; i < (memsize >>20 ) && ret ==0 ; i++) { -if (ret ==0 ) - ret =memory_post_tests (i <<20 ,0x800 ); -if (ret ==0 ) - ret =memory_post_tests ( +for (i =0 ; i < (memsize >>20 ) && !ret; i++) { +if (!ret) + ret =memory_post_tests (vstart + + (i <<20 ),0x800 ); +if (!ret) + ret =memory_post_tests (vstart + (i <<20 ) +0xff800 ,0x800 ); } }
Signature · 1 line
1.7.1
PATCH v3 5/8 POST: drivers/memory.c coding style cleanup
Dear Valentin Longchamp,
Quoted 7 lines · In message <[email protected]>…
This is needed for a further patch adding a new memory test.
Signed-off-by Valentin Longchamp <[email protected]>Acked-by Mike Frysinger <[email protected]>--- post/drivers/memory.c | 118 +++++++++++++++++++++++++------------------------ 1 files changed, 60 insertions(+), 58 deletions(-)
Checkpatch says:
total: 3 errors, 5 warnings, 230 lines checked
Please clean up and resubmit. Thanks.
Best regards,
Wolfgang Denk
Signature · 4 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de How does a project get to be a year late? ... One day at a time.
PATCH v3 6/8 POST: add new memory regions test
In reply to Valentin LongchampThis test is similar to the actual POST memory test but quicker and far less complete. It checks the address and data lines and then only tests some regularly placed sub regions of the RAM.
This can be useful when we want to test the RAM but we do not have enough time to run the full memory test.
The POST memory test code was rearranged in order to avoid code duplication between the two tests but the memory test functionnality remains the same.
---
Changes for v3:
- cosmetic changes in the test list
--- include/post.h | 2 + post/drivers/memory.c | 81 +++++++++++++++++++++++++++++++++++++----------- post/tests.c | 15 ++++++++- 3 files changed, 78 insertions(+), 20 deletions(-)
include/post.h +2 -0
@@ -194,6 +194,8 @@ extern int post_hotkeys_pressed(void);#define CONFIG_SYS_POST_BSPEC5 0x00100000#define CONFIG_SYS_POST_CODEC 0x00200000#define CONFIG_SYS_POST_COPROC 0x00400000 +#define CONFIG_SYS_POST_FLASH 0x00800000 +#define CONFIG_SYS_POST_MEM_REGIONS 0x01000000int memory_post_test (int flags);#endif /* CONFIG_POST */
post/drivers/memory.c +62 -19
123 lines not on this page · raw message
post/tests.c +14 -1
@@ -54,6 +54,7 @@ extern int fpga_post_test (int flags);extern int lwmon5_watchdog_post_test (int flags);extern int sysmon1_post_test (int flags);extern int coprocessor_post_test (int flags); +extern int memory_regions_post_test (int flags);extern int sysmon_init_f (void );
@@ -301,7 +302,19 @@ struct post_test post_list[] =NULL ,NULL ,CONFIG_SYS_POST_COPROC - } + }, +#endif +#if CONFIG_POST & CONFIG_SYS_POST_MEM_REGIONS + { +"Memory regions test" , +"mem_regions" , +"This test checks regularly placed regions of the RAM." , +POST_ROM |POST_SLOWTEST |POST_PREREL , + &memory_regions_post_test, +NULL , +NULL , +CONFIG_SYS_POST_MEM_REGIONS + }, #endif };
Signature · 1 line
1.7.1
PATCH v3 6/8 POST: add new memory regions test
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20110902/a62737c9/attachment.pgp
PATCH v3 6/8 POST: add new memory regions test
In reply to Valentin LongchampDear Valentin Longchamp,
Quoted 12 lines · In message <[email protected]>…
This test is similar to the actual POST memory test but quicker and far less complete. It checks the address and data lines and then only tests some regularly placed sub regions of the RAM.
This can be useful when we want to test the RAM but we do not have enough time to run the full memory test.The POST memory test code was rearranged in order to avoid code duplication between the two tests but the memory test functionnality remains the same.
Signed-off-by Valentin Longchamp <[email protected]>Signed-off-by Holger Brunck <[email protected]>Cc Mike Frysinger <[email protected]>
Quoted 8 lines
---
Changes for v3:
- cosmetic changes in the test list--- include/post.h | 2 + post/drivers/memory.c | 81 +++++++++++++++++++++++++++++++++++++----------- post/tests.c | 15 ++++++++- 3 files changed, 78 insertions(+), 20 deletions(-)
Checkpatch says:
total: 0 errors, 4 warnings, 158 lines checked
Please clean up and resubmit. Thanks.
Best regards,
Wolfgang Denk
Signature · 7 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
The evolution of the human race will not be accomplished in the ten
thousand years of tame animals, but in the million years of wild
animals, because man is and will always be a wild animal.
- Charles Galton DarwinPATCH v3 7/8 km_arm: change CONFIG_SYS_TEXT_BASE to end of RAM
In reply to Valentin LongchampThis allows to test a larger part of the RAM in the memory tests.
--- include/configs/km/km_arm.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
include/configs/km/km_arm.h +1 -1
@@ -54,7 +54,7 @@#include "asm/arch/config.h" -#define CONFIG_SYS_TEXT_BASE 0x04000000/* code address after reloc */ +#define CONFIG_SYS_TEXT_BASE 0x07d00000/* code address after reloc */ #define CONFIG_SYS_MEMTEST_START 0x00400000/* 4M */ #define CONFIG_SYS_MEMTEST_END 0x007fffff/*(_8M -1) */ #define CONFIG_SYS_LOAD_ADDR 0x00800000/* default load adr- 8M */
Signature · 1 line
1.7.1
PATCH v3 7/8 km_arm: change CONFIG_SYS_TEXT_BASE to end of RAM
Hello Valentin,
Quoted 14 lines · Valentin Longchamp
This allows to test a larger part of the RAM in the memory tests.
Signed-off-by Valentin Longchamp <[email protected]>Signed-off-by Holger Brunck <[email protected]>Cc Prafulla Wadaskar <[email protected]>--- include/configs/km/km_arm.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)include/configs/km/km_arm.h +0
-0
include/configs/km/km_arm.h line 57
Quoted 5 lines
include/configs/km/km_arm.h +1
-1@@ -54,7 +54,7 @@#include "asm/arch/config.h" -#define CONFIG_SYS_TEXT_BASE 0x04000000/* code address after reloc */ +#define CONFIG_SYS_TEXT_BASE 0x07d00000/* code address after reloc */
Hmm... are you really sure, this address is after relocation? I think this comment is a hangover and should be deleted (or fixed to "code address before relocation")
bye,
Heiko
Signature · 2 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
PATCH v3 7/8 km_arm: change CONFIG_SYS_TEXT_BASE to endof RAM
Hello Heiko,
Quoted 18 lines · Heiko Schocher
Hello Valentin,
Quoted 15 lines · Valentin Longchamp
This allows to test a larger part of the RAM in the memory tests.
Signed-off-by Valentin Longchamp <[email protected]>Signed-off-by Holger Brunck <[email protected]>Cc Prafulla Wadaskar <[email protected]>--- include/configs/km/km_arm.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)include/configs/km/km_arm.h +0
-0@@ -54,7 +54,7 @@
Quoted 8 lines
include/configs/km/km_arm.h line 57
Quoted 4 lines
include/configs/km/km_arm.h +1
-1#include "asm/arch/config.h" -#define CONFIG_SYS_TEXT_BASE 0x04000000/* code address after reloc */ +#define CONFIG_SYS_TEXT_BASE 0x07d00000/* code address after reloc */ Hmm... are you really sure, this address is after relocation? I think this comment is a hangover and should be deleted (or fixed to "code address before relocation")
Yes, you are right, this is the code address before relocation. Will fix the comment.
Signature · 13 lines
Valentin Longchamp Embedded Software Engineer Hardware and Chip Integration ______________________________________ KEYMILE AG Schwarzenburgstr. 73 CH-3097 Liebefeld Phone +41 31 377 1318 Fax +41 31 377 1212 valentin.longchamp at keymile.com www.keymile.com ______________________________________ KEYMILE: A Specialist as a Partner
PATCH v3 8/8 km_arm: enable POST for these boards
In reply to Valentin LongchampThe current km_arm boards have a Power-On test jumper. When this jumper is set, this triggers some Power-On tests on the board.
This patch enables the support of this jumper for starting the memory_regions test when the jumper is set.
---
Changes for v2:
- adapted to CONFIG_POST_EXTERNAL_WORD_FUNCS
- implemented suggestion from Sergei
Changes for v3:
- moved arch_memory_test_prepare from post/board/km_arm to board/keymile/km_arm/km_arm.c
--- board/keymile/km_arm/km_arm.c | 32 ++++++++++++++++++++++++++++++++ include/configs/km/km_arm.h | 6 ++++++ 2 files changed, 38 insertions(+), 0 deletions(-)
board/keymile/km_arm/km_arm.c +32 -0
@@ -483,6 +483,38 @@ int get_scl(void) }#endif +#if defined(CONFIG_POST ) + +#define KM_POST_EN_L 44 + +int post_hotkeys_pressed (void ) +{ +return !kw_gpio_get_value (KM_POST_EN_L ); +} + +ulong post_word_load (void ) +{ +volatile void * addr = (void *) (gd->ram_size -BOOTCOUNT_ADDR +4 ); +return in_le32 (addr); + +} +void post_word_store (ulong value) +{ +volatile void * addr = (void *) (gd->ram_size -BOOTCOUNT_ADDR +4 ); +out_le32 (addr, value); +} + +int arch_memory_test_prepare (u32 *vstart,u32 *size,phys_addr_t *phys_offset) +{ + *vstart =CONFIG_SYS_SDRAM_BASE ; + +/* we go up to relocation plus a 1 MB margin */ + *size =CONFIG_SYS_TEXT_BASE - (1 <<20 ); + +return 0 ; +} +#endif +#if defined(CONFIG_SYS_EEPROM_WREN )int eeprom_write_enable (unsigned dev_addr,int state) {
include/configs/km/km_arm.h +6 -0
@@ -271,4 +271,10 @@ int get_scl(void);/* address for the bootcount (taken from end of RAM) */ #define BOOTCOUNT_ADDR (CONFIG_KM_RESERVED_PRAM) +/* enable POST tests with log */ +#define CONFIG_POST (CONFIG_SYS_POST_MEM_REGIONS) +#define CONFIG_POST_SKIP_ENV_FLAGS +#define CONFIG_POST_EXTERNAL_WORD_FUNCS +#define CONFIG_CMD_DIAG +#endif /* _CONFIG_KM_ARM_H */
Signature · 1 line
1.7.1
Wolfgang Denk
AppliedPATCH v3 8/8 km_arm: enable POST for these boards
Dear Valentin Longchamp,
Quoted 16 lines · In message <[email protected]>…
The current
km_armboards have a Power-On test jumper. When this jumper is set, this triggers some Power-On tests on the board.This patch enables the support of this jumper for starting the
memory_regionstest when the jumper is set.Signed-off-by Valentin Longchamp <[email protected]>Signed-off-by Holger Brunck <[email protected]>Cc Prafulla Wadaskar <[email protected]>---
Changes for v2:
- adapted toCONFIG_POST_EXTERNAL_WORD_FUNCS
- implemented suggestion from Sergei
Changes for v3:
- movedarch_memory_test_preparefrom post/board/km_arm toboard/keymile/km_arm/km_arm.c
Quoted 4 lines
--- board/keymile/km_arm/km_arm.c | 32 ++++++++++++++++++++++++++++++++ include/configs/km/km_arm.h | 6 ++++++ 2 files changed, 38 insertions(+), 0 deletions(-)
Applied, thanks.
Best regards,
Wolfgang Denk
Signature · 7 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
You young'uns. That was *long* before AltaVista, DejaNews, or even
(gasp) the *Web*! In fact, we typed that thread on steam-powered card
punchers, and shipped it around via Pony Express.
-- Randal Schwartz in <[email protected]>PATCH v3 8/8 km_arm: enable POST for these boards
Hi Wolfgang,
Quoted 24 lines · Wolfgang Denk
Dear Valentin Longchamp,
Quoted 16 lines · In message <[email protected]>…
The current
km_armboards have a Power-On test jumper. When this jumper is set, this triggers some Power-On tests on the board.This patch enables the support of this jumper for starting the
memory_regionstest when the jumper is set.Signed-off-by Valentin Longchamp <[email protected]>Signed-off-by Holger Brunck <[email protected]>Cc Prafulla Wadaskar <[email protected]>---
Changes for v2:
- adapted toCONFIG_POST_EXTERNAL_WORD_FUNCS
- implemented suggestion from Sergei
Changes for v3:
- movedarch_memory_test_preparefrom post/board/km_arm toboard/keymile/km_arm/km_arm.cQuoted 4 lines
--- board/keymile/km_arm/km_arm.c | 32 ++++++++++++++++++++++++++++++++ include/configs/km/km_arm.h | 6 ++++++ 2 files changed, 38 insertions(+), 0 deletions(-)
Quoted 2 lines
Applied, thanks.
you already committed a v4 of this patch together with the patch serie. See:
http://lists.denx.de/pipermail/u-boot/2011-October/104061.html
So could you please revert this one? Because this breaks the board support for all our arm based boards.
Best regards
Holger
PATCH v3 8/8 km_arm: enable POST for these boards
Dear Holger Brunck,
Quoted 3 lines · In message <[email protected]> you wrote:
you already committed a v4 of this patch together with the patch serie. See:
http://lists.denx.de/pipermail/u-boot/2011-October/104061.html
Oops. Sorry...
Quoted 2 lines
So could you please revert this one? Because this breaks the board support for all our arm based boards.
Done.
Best regards,
Wolfgang Denk
Signature · 5 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de Respect is a rational process -- McCoy, "The Galileo Seven", stardate 2822.3