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
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to