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

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

Hi Niklaus,
On Friday 02 March 2007 16:26, Niklaus Giger wrote:
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;
Are you sure that this parameter is supported. A quick "googling" only showed this parameter in the VxWorks function reboot(), and I don't think this is the entry point of the VxWorks image.
Best regards, Stefan
===================================================================== DENX Software Engineering GmbH, HRB 165235 Munich, CEO: Wolfgang Denk Office: Kirchenstr. 5, D-82194 Groebenzell, Germany =====================================================================

Stefan Roesesr@denx.de 04.04.07 15:19:53 >>>
Hi Niklaus,
On Friday 02 March 2007 16:26, Niklaus Giger wrote:
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;
Are you sure that this parameter is supported. A quick "googling" only showed this parameter in the VxWorks function reboot(), and I don't think this is the entry point of the VxWorks image.
It is also used by the function void usrInit (int startType) and gets passed afterward to various init functions, e.g. usrBootLineInit. My board specific code tested its value, which made me discover this bug.
Best regards
Niklaus

Hi Niklaus,
On Wednesday 04 April 2007 15:30, Niklaus Giger wrote:
@@ -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;
Are you sure that this parameter is supported. A quick "googling" only showed this parameter in the VxWorks function reboot(), and I don't think this is the entry point of the VxWorks image.
It is also used by the function void usrInit (int startType) and gets passed afterward to various init functions, e.g. usrBootLineInit. My board specific code tested its value, which made me discover this bug.
OK, thanks for clarifying.
Could you then please resubmit a new patch with a poper git commit description and a signed-off line. And please don't use "2" (BOOT_CLEAR) as default here. Default should be "0" (BOOT_NORMAL). Perhaps you could make it configurable via an env variable?
Best regards, Stefan
===================================================================== DENX Software Engineering GmbH, HRB 165235 Munich, CEO: Wolfgang Denk Office: Kirchenstr. 5, D-82194 Groebenzell, Germany =====================================================================
participants (2)
-
Niklaus Giger
-
Stefan Roese