AnsweredAssumed Answered

IVT for bare metal boot of SoloX from QSPI

Question asked by ozu on Oct 15, 2015

Hi All,

I need to boot the SoloX from QSPI with a bare metal boot code and want it to trigger M4 later.

What I could do so far,

1) Can flash uboot in QSPI and it works.

2) Can flash the image from the attached sample program in SD and it boots A9 and then M4


My questions,

1) To make the image which works in SD, work also in QSPI, what do we need to change? Do we need to change IVT?

2) If we keep the same linker file and attempt a non XIP boot from QSPI, changing the addresses in IVT should work, right?

3) Following are my modified IVT structures from plat_startup.h (attached sample program). Modifications are highlighted in red. Can someone help me figure out, are these changes correct? The image doesn't work when placed in QSPI, with or without these changes.

4) Can anyone provide, sample boot code for bare metal boot from QSPI on SoloX?


Any help is appreciated!


plat_startup.h contents:


/* image starts at 0x00907000 */

/* flash header & DCD @ 0x400 */

.macro plat_dcd_startup

    b startup

  .org 0x400 //Do we need to change this?



/* First IVT to copy the plugin that initializes the system into OCRAM */

ivt_header:                    .long 0x402000D1    /* Tag=0xD1, Len=0x0020, Ver=0x40 */

app_code_jump_v:        .long 0x00907458    /* Plugin entry point, address after the second IVT table */

reserv1:                     .long 0x0

dcd_ptr:                     .long 0x0

boot_data_ptr:              .long 0x78001020 /*original: 0x00907420  */

self_ptr:                        .long 0x78001000 /*original: 0x00907400 */

app_code_csf:           .long 0x0 /* reserve 4K for csf */

reserv2:                     .long 0x0

boot_data:                 .long 0x00907000

image_len:              .long 16*1024

plugin:                      .long 0x1   /* Enable plugin flag */



/* Second IVT to give entry point into the bootloader copied to DDR */

ivt2_header:                   .long 0x402000D1    /* Tag=0xD1, Len=0x0020, Ver=0x40 */

app2_code_jump_v:       .long startup       /* Entry point for the bootloader */

reserv3:                           .long 0x0

dcd2_ptr:                         .long 0x0

boot_data2_ptr:              .long 0x7800104C /* original boot_data2 */

self_ptr2:                        .long 0x7800102C /* original ivt2_header */

app_code_csf2:               .long 0x0 /* reserve 4K for csf */

reserv4:                          .long 0x0

boot_data2:                  .long IMAGE_ENTRY_ADDR

image_len2:                  .long IMAGE_SIZE

plugin2:                          .long 0x0

Original Attachment has been moved to: