[U-Boot-Users] Cannot boot reliably vxWorks on PPC44x

Niklaus Giger
2007-03-02T15:26:01Z

Hi

I am trying to boot a vxWorks image (version 6.4) on my Yosemite board
(PPC440EP) using the amcc440ep BSP. Booting from a vxWorks bootrom
worked without problems.

Booting vxWorks from u-boot (more or less git HEAD) failed. After
uncommenting in the vxWorks amcc440ep/config.h the following four
lines
#undef INCLUDE_440X5_DCACHE_RECOVERY
#undef INCLUDE_440X5_TLB_RECOVERY
#undef INCLUDE_440X5_PARITY_RECOVERY
#undef INCLUDE_440X5_TLB_RECOVERY_MAX
#undef INCLUDE_440X5_MCH_LOGGER
vxWorks boots sometimes if I reset the the board using our BDI.
It seems that it never boots after the first reset, but often after the
second reset. It never boots without an attached BDI.

vxWorks and BDI initialize the TLB quite differently, but the vxWorks
startup seems to have already initialised the TLB, but more or less
around the time it activates it.

Has anybody seen a similar problem?
Has anybody successfully booted a vxWorks image on a PPC44x processor?
Has anybody an idea where this problem could stem from? (I use
the BDI config 4xxep440.cfg from ftp://ftp.denx.de/pub/BDI2000/).

BTW, the boot cmd of vxWorks expects a parameter, therefore I think
it would make sense to apply a patch like
diff --git a/common/cmd_elf.c b/common/cmd_elf.c
old mode 100644
new mode 100755
index 0e3d56f..dc4eb27
--- a/common/cmd_elf.c
+++ b/common/cmd_elf.c
@@ -213,7 +213,7 @@ int do_bootvx (cmd_tbl_t *cmdtp, int flag, int argc, char
*argv[])
(char *) bootaddr);
printf ("## Starting vxWorks at 0x%08lx ...\n", addr);

- ((void (*)(void)) addr) ();
+ ((void (*)(int)) addr) (2); /* 0 => BOOT_NORMAL 2=> BOOT_CLEAR */

puts ("## vxWorks terminated\n");
return 1;

Best regards

Niklaus Giger