I.MX6SX start M4 from U-Boot with QSPI flash

Showing results for 
Show  only  | Search instead for 
Did you mean: 

I.MX6SX start M4 from U-Boot with QSPI flash

Contributor I


I am on 6X Sabre-SDB board. I flashed U-Boot from MQX: MQX/tools/u-boot-sdb.imx

I also built an MQX example application and was able to flash it to QSPI flash with the update command

and boot the M4 with: run m4boot

Now i want to do this with normal u-boot-fslc from yocto. I am on https://github.com/Freescale/fsl-community-bsp-platform master

After enabling the setexpr command in u-boot config i can flash the M4 image with this command:

update_m4_from_sd=if sf probe 1:0; then if run loadm4image; then setexpr fw_sz ${filesize} + 0xffff; setexpr fw_sz ${fw_sz} / 0x10000; setexpr fw_sz ${fw_sz} * 0x10000; sf erase 0x0 ${fw_sz}; sf write ${loadaddr} 0x0 ${filesize}; fi; fi

This works fine. With the u-boot from MQX i would run this to boot the M4 (works fine too): sf probe 1:0; bootaux 0x78000000

But in Freescale/u-boot-fslc at patches-2015.01 · GitHub the bootaux command is missing.

I have the following commands, i think they are used to boot the M4 from DDR, but i want to boot from QSPI flash:

mw.l 0x4006e028 0x3f000485;
mw.l 0x4006b08c 0x00015a5a;

So my question is, what exactly does the bootaux command?

other question: How can i use "M4 Fast Up" with my u-boot-fslc in yocto?

In the machine config: meta-fsl-arm/conf/machine/imx6sxsabresd.conf

There is: UBOOT_CONFIG[m4fastup] = "mx6sxsabresd_m4fastup_config"

So i guess, the whole u-boot stuff for the SoloX is not yet in u-boot in Github.

would be nice to have the source code for all this stuff Smiley Happy

Labels (1)
Tags (3)
0 Kudos
5 Replies

Contributor III

Hello Jan,

I'm going through the same thing currently.

The source code for bootaux is the following:

boot_private_data = 0x78000000


SRC_BASE_ADDR = 0x020D8000

  struct src *src_reg;

  u32 stack, pc;

  if (!boot_private_data)

  return 1;

  stack = *(u32 *)boot_private_data;

  pc = *(u32 *)(boot_private_data + 4);

  /* Set the stack and pc to M4 bootROM */

  writel(stack, M4_BOOTROM_BASE_ADDR);

  writel(pc, M4_BOOTROM_BASE_ADDR + 4);

  /* Enable M4 */

  src_reg = (struct src *)SRC_BASE_ADDR;

  setbits_le32(&src_reg->scr, 0x00400000);

  clrbits_le32(&src_reg->scr, 0x00000010);

  return 0;

To do this inside a u-boot version without the bootaux command, you can do something like

=> sf probe 1:0; cp 0x78000000 0x007F8000 8; mw.l 0x020D8000 0xA0480529;

This started the M4 from QSPI2 for me.

0 Kudos

Contributor III


Looks like the u-boot still is not in u-boot-fsl, or I'm looking at the wrong repo?


0 Kudos

Contributor III

You are correct

0 Kudos

NXP Employee
NXP Employee

Hi Jan

bootaux command uses QuadSPI Configuration Parameters Table

for running image, sect.8.6.3 QuadSPI Configuration Parameters

IMX6SXRM.  Attached Release Notes p.11, User Guide p.28

show its usage. Regarding SoloX support it may be useful to look below

Freescale OpenEmbedded/Yocto Layers discussion list ()

Best regards


0 Kudos

Contributor I

Hi Igor,

thanks for the reply. For our application booting the M4 from environment/bootscript is useful,

but what we really want to use is the "m4fastup" as seen here: meta-fsl-arm/imx6sxsabresd.conf at master · Freescale/meta-fsl-arm · GitHub

The m4fastup boots the M4 early in the U-Boot code, and for this we need the sourcecode.

The normal mx6sxsabresd_config is there but the mx6sxsabresd_m4fastup_config

is missing. When can we expect the source code for this?

Best regards

Jan Hieber

0 Kudos