I am working on mpc8548cds board …
Feature : POST DIAGNOSTICS;
In u-boot : post/memory.c,cpu.c..etc..
Need your suggestion…
There is function pointers in post.c which calls the respective function to
perform diag test ( example ram , cpu, ether ..etc ) which will be picked from
tests.c ( This is the structure which defines all the fileds of the tests)
Function pointer defined in post.c
static int post_run_single (struct post_test *test,
int test_flags, int
flags, unsigned int i) {
…
..
if ((*test->test) (flags) != 0) { ( This function pointers will
call cpu tests from post/cpu.c defined below based tested entered from u-boot
promt )
post_log ("FAILED\n")
} else {
post_log ("PASSED\n")
}
------------------------------------------------------------------------------------------------------------
CASE 1 Experiment :
Post/cpu.c
int cpu_post_test (int flags)
{
int ic = icache_status ();
int ret = 0;
int c;
post_result_cpu = 0;
cpu_dbg = 0;
boot_flag_post = 0;
printf( “ Testing cpu diag \n”); à TRAP IS Generated and box got
rebooted.
Other part of code exits..
}
>From u-boot prompt.
=>diag run cpu
By log I verfied that this TRAP is generated from the post/cpu.c because of
printf
NIP: 00000000 XER: 00000000 LR: FFF25C40 REGS: 3feed878 TRAP: 0700 DAR: 00000004
MSR: 00029200 EE: 1 PR: 0 FP: 0 ME: 1 IR/DR: 00
GPR00: 00000004 3FEED968 00000200 3FEEDA18 3FEEDA18 3FEEDA08 FFFFFFF4 00000007
GPR08: 00000000 00000000 FFFFFFFF 3FEED918 44028042 00000000 3FFBBC00 00000000
GPR16: 00000000 00000000 00000000 00000000 00000000 3FEF0378 00000003 0000000C
GPR24: 3FEF0350 00000600 00000002 00000600 3FEEDA18 3FEEDF90 FFF4D3BC 00000000
** Illegal Instruction **
Call backtrace:
3FF73310 FFF25DB8 FFF25E38 FFF338A0 3FFA2FAC 3FFA3564 3FF8D620
3FF98820 3FF98E98 3FF99000 3FF8AE44 3FF81DA8 3FF72628
Program Check Exception
NIPÞ
CASE 2 Experiment:
Post/cpu.c
int cpu_post_test (int flags)
{
int ic = icache_status ();
int ret = 0;
int c;
post_result_cpu = 0;
cpu_dbg = 0;
boot_flag_post = 0;
< Removed or commented the printf statement >
return 0; NO TRAP is Generated.
.
}
Another approach to validate the post/cpu.c fuction. Is working correctly or
not.
In file post.c
Declared this API and directly called cpu_post_test(flags) before the function
pointers. This API executed correctly with out a TRAP and results were
displayed correctly.
extern int cpu_post_test (int flags);
static int post_run_single (struct post_test *test,
int test_flags, int
flags, unsigned int i) {
ret = cpu_post_test(flags);
#if 0
if ((*test->test) (flags) != 0) {
post_log ("FAILED\n")
} else {
post_log ("PASSED\n")
}
#iendif
Could u please let me know how do I avoid this TRAP when I am using the
function pointers.. CASE 1 Experiment:
Regards,
Rajshekar
_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot