|
|
|
@ -350,22 +350,41 @@ int do_fwr (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int do_rmsr (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) |
|
|
|
|
int do_rspr (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) |
|
|
|
|
{ |
|
|
|
|
unsigned int reg = 0; |
|
|
|
|
unsigned int val = 0; |
|
|
|
|
|
|
|
|
|
val = (unsigned int)simple_strtoul (argv[1], NULL, 16); |
|
|
|
|
reg = (unsigned int)simple_strtoul (argv[1], NULL, 16); |
|
|
|
|
val = (unsigned int)simple_strtoul (argv[2], NULL, 16); |
|
|
|
|
if (argc < 1) { |
|
|
|
|
printf ("Usage:\n%s\n", cmdtp->usage); |
|
|
|
|
return 1; |
|
|
|
|
} |
|
|
|
|
if (argc > 1) { |
|
|
|
|
MTS (val); |
|
|
|
|
MFS (val); |
|
|
|
|
} else { |
|
|
|
|
MFS (val); |
|
|
|
|
switch (reg) { |
|
|
|
|
case 0x1: |
|
|
|
|
if (argc > 2) { |
|
|
|
|
MTS (val, rmsr); |
|
|
|
|
NOP; |
|
|
|
|
MFS (val, rmsr); |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
MFS (val, rmsr); |
|
|
|
|
} |
|
|
|
|
puts ("MSR"); |
|
|
|
|
break; |
|
|
|
|
case 0x3: |
|
|
|
|
MFS (val, rear); |
|
|
|
|
puts ("EAR"); |
|
|
|
|
break; |
|
|
|
|
case 0x5: |
|
|
|
|
MFS (val, resr); |
|
|
|
|
puts ("ESR"); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
return 1; |
|
|
|
|
} |
|
|
|
|
printf ("rmsr: 0x%08lx\n", val); |
|
|
|
|
printf (": 0x%08lx\n", val); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -388,7 +407,11 @@ U_BOOT_CMD (fwr, 4, 1, do_fwr, |
|
|
|
|
" 2 - blocking data write\n" |
|
|
|
|
" 3 - blocking control write\n"); |
|
|
|
|
|
|
|
|
|
U_BOOT_CMD (rmsr, 2, 1, do_rmsr, |
|
|
|
|
"rmsr - read MSR register\n", "- read MSR register.\n"); |
|
|
|
|
U_BOOT_CMD (rspr, 3, 1, do_rspr, |
|
|
|
|
"rmsr - read/write special purpose register\n", |
|
|
|
|
"- reg_num [write value] read/write special purpose register\n" |
|
|
|
|
" 0 - MSR - Machine status register\n" |
|
|
|
|
" 1 - EAR - Exception address register\n" |
|
|
|
|
" 2 - ESR - Exception status register\n"); |
|
|
|
|
|
|
|
|
|
#endif /* CONFIG_MICROBLAZE & CFG_CMD_MFSL */ |
|
|
|
|