[U-Boot-Users] [PATCH] Make Sequoia boot vxWorks

In order to make vxWorks boot the following changes had to be made:
- Do not TLB#0, which is hardwired by vxWorks to be used for the machine check interrupt - Patch some periferal bus configuration register to match the use by vxWorks
Signed-off-by: Niklaus Giger niklaus.giger@netstal.com --- board/amcc/sequoia/init.S | 17 ++++++++++------- board/amcc/sequoia/sequoia.c | 11 +++++++++++ common/cmd_elf.c | 3 +++ cpu/ppc4xx/start.S | 5 ++++- include/configs/sequoia.h | 2 ++ 5 files changed, 30 insertions(+), 8 deletions(-)
diff --git a/board/amcc/sequoia/init.S b/board/amcc/sequoia/init.S index 45bcd4b..f7f268b 100644 --- a/board/amcc/sequoia/init.S +++ b/board/amcc/sequoia/init.S @@ -87,8 +87,17 @@ tlbtab: tlbtab_start
+ /* TLB#0: vxWorks needs this entry for the Machine Check interrupt, */ + tlbentry( 0x40000000, SZ_256M, 0, 0, AC_R|AC_W|AC_X|SA_G|SA_I ) + + /* TLB#1: TLB-entry for DDR SDRAM (Up to 2GB) */ + tlbentry( CFG_SDRAM_BASE, SZ_256M, CFG_SDRAM_BASE, 0, AC_R|AC_W|AC_X|SA_G|SA_I ) + + /* TLB#2: TLB-entry for EBC */ + tlbentry( CFG_BCSR_BASE, SZ_256M, CFG_BCSR_BASE, 1, AC_R|AC_W|AC_X|SA_G|SA_I ) + /* - * BOOT_CS (FLASH) must be first. Before relocation SA_I can be off to use the + * TLB#3: BOOT_CS (FLASH) must be forth. Before relocation SA_I can be off to use the * speed up boot process. It is patched after relocation to enable SA_I */ #ifndef CONFIG_NAND_SPL @@ -97,9 +106,6 @@ tlbtab: tlbentry( CFG_NAND_BOOT_SPL_SRC, SZ_4K, CFG_NAND_BOOT_SPL_SRC, 1, AC_R|AC_W|AC_X|SA_G ) #endif
- /* TLB-entry for DDR SDRAM (Up to 2GB) */ - tlbentry( CFG_SDRAM_BASE, SZ_256M, CFG_SDRAM_BASE, 0, AC_R|AC_W|AC_X|SA_G|SA_I ) - #ifdef CFG_INIT_RAM_DCACHE /* TLB-entry for init-ram in dcache (SA_I must be turned off!) */ tlbentry( CFG_INIT_RAM_ADDR, SZ_64K, CFG_INIT_RAM_ADDR, 0, AC_R|AC_W|AC_X|SA_G ) @@ -111,9 +117,6 @@ tlbtab: tlbentry( CFG_PCI_MEMBASE2, SZ_256M, CFG_PCI_MEMBASE2, 1, AC_R|AC_W|SA_G|SA_I ) tlbentry( CFG_PCI_MEMBASE3, SZ_256M, CFG_PCI_MEMBASE3, 1, AC_R|AC_W|SA_G|SA_I )
- /* TLB-entry for EBC */ - tlbentry( CFG_BCSR_BASE, SZ_1K, CFG_BCSR_BASE, 1, AC_R|AC_W|AC_X|SA_G|SA_I ) - /* TLB-entry for NAND */ tlbentry( CFG_NAND_ADDR, SZ_1K, CFG_NAND_ADDR, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
diff --git a/board/amcc/sequoia/sequoia.c b/board/amcc/sequoia/sequoia.c index f823117..09c5f69 100644 --- a/board/amcc/sequoia/sequoia.c +++ b/board/amcc/sequoia/sequoia.c @@ -582,3 +582,14 @@ int post_hotkeys_pressed(void) return 0; /* No hotkeys supported */ } #endif /* CONFIG_POST */ + +#ifdef CFG_PATCH_BEFORE_BOOTING_VXWORKS +void patch_vxworks_boot(void) +{ + printf("Patching pb0/3 for vxWorks\n"); + mtebc(pb0cr, 0xfe0ba000); + mtebc(pb0ap, 0x03017300); + mtebc(pb3cr, 0xd00fc000); + mtebc(pb3ap, 0x7f8ffe80); +} +#endif diff --git a/common/cmd_elf.c b/common/cmd_elf.c index 0e3d56f..a3790c1 100644 --- a/common/cmd_elf.c +++ b/common/cmd_elf.c @@ -209,6 +209,9 @@ int do_bootvx (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) /* leave addr as load_addr */ }
+#if defined(CFG_PATCH_BEFORE_BOOTING_VXWORKS) + patch_vxworks_boot(); +#endif printf ("## Using bootline (@ 0x%lx): %s\n", bootaddr, (char *) bootaddr); printf ("## Starting vxWorks at 0x%08lx ...\n", addr); diff --git a/cpu/ppc4xx/start.S b/cpu/ppc4xx/start.S index 8ecaaea..3f1c061 100644 --- a/cpu/ppc4xx/start.S +++ b/cpu/ppc4xx/start.S @@ -1432,7 +1432,10 @@ relocate_code: dccci 0,0 /* Invalidate data cache, now no longer our stack */ sync isync - addi r1,r0,0x0000 /* TLB entry #0 */ +#ifndef CFG_TLB_FOR_BOOT_FLASH +#define CFG_TLB_FOR_BOOT_FLASH 0 +#endif + addi r1,r0,CFG_TLB_FOR_BOOT_FLASH /* TLB entry (default #0) */ tlbre r0,r1,0x0002 /* Read contents */ ori r0,r0,0x0c00 /* Or in the inhibit, write through bit */ tlbwe r0,r1,0x0002 /* Save it out */ diff --git a/include/configs/sequoia.h b/include/configs/sequoia.h index 3219992..300b3f5 100644 --- a/include/configs/sequoia.h +++ b/include/configs/sequoia.h @@ -53,6 +53,8 @@ #define CFG_MONITOR_LEN (384 * 1024) /* Reserve 384 kB for Monitor */ #define CFG_MALLOC_LEN (256 * 1024) /* Reserve 256 kB for malloc() */
+#define CFG_TLB_FOR_BOOT_FLASH 3 /* Default is 0 */ +#define CFG_PATCH_BEFORE_BOOTING_VXWORKS 1 #define CFG_BOOT_BASE_ADDR 0xf0000000 #define CFG_SDRAM_BASE 0x00000000 /* _must_ be 0 */ #define CFG_FLASH_BASE 0xfc000000 /* start of FLASH */
participants (1)
-
Niklaus Giger