MX6 SoloX bare metal startup and Manufacturing tool

Showing results for 
Search instead for 
Did you mean: 

MX6 SoloX bare metal startup and Manufacturing tool

Contributor II



I have used A9_launch_m4 example and able to run the code if I flash this code to SD card on imx6 solox SABRE development board.

But when I tried to flash this code to QSPI NOR flash memory using manufacturing tool, I am able to flash it without any error but I did not see any output on UART.


Please refer the attached files (Example and Manufacturing tool files)

Can you please tell me if I need to change the sources(.c or .h files) or the manufacturing tool files (ini or ucl2 files) to make this example to work with QSPI memory?

Original Attachment has been moved to:

Original Attachment has been moved to:

Original Attachment has been moved to:

Labels (6)
0 Kudos
3 Replies

NXP TechSupport
NXP TechSupport

Hi Yashavanthkumar

first I would suggest to run uboot, please look at

mfg tools script mfgtool2-yocto-mx6-sabresd-qspi-nor.vbs,

check what type of qspi is populated on board:

qspi-nor-micron-n25q256a-config, qspi-nor-spansion-s25fl128s-config.

IMX6_L3.14.28_MFG_TOOL (REV L3.14.28_1.0.0)

i.MX6Q|i.MX 6Quad Processors|Quad Core|Freescale

Also please check attached Linux Guide.

After uboot could be run from qspi, one can rename example and run it

in the same way as uboot.

Best regards



Note: If this post answers your question, please click the Correct Answer button. Thank you!


0 Kudos

Contributor II

Hi igorpadykov​,

We are able to boot from QSPI now by modifying the addresses of ivt structure members.

Thanks for your support.

0 Kudos

Contributor III

Hi Igor igorpadykov,

Thanks for the reply! I have the same problem. I am able to run uboot from QSPI. I think the problem in running the example could be because of IVT.

I can run the example image from SD. It works perfectly from there.

Now that I am trying to run the same example from QSPI2, I flashed the image at an offset of 0x1000 in QSPI2 using Mfg Tool. But it does not show any output.

After referring to the post: Re: Boot ROM copy QuadSPI to OCRAM

I thought of changing the IVT in order to make boot_data_ptr and self_ptr to point to address in QSPI and rest everything pointing to OCRAM (in case of plugin) and DDR (in case of ivt2 for actual program) as in the original example.

1) Can you please check the modified IVT structure below (taken from plat_startup.h file) and tell me if the changes are fine? I have highlighted the changes in red.

2) Can you suggest if we need to modify .org 0x400 to .org 0x1000 since we want to flash it in QSPI and not in SD this time?


/* 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

0 Kudos