iMX6DQ_SPI_to_uSDHC => working

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

iMX6DQ_SPI_to_uSDHC => working

Jump to solution
1,685 Views
jaiganesh
Contributor III

Hello all,

               We are using sabrelite board and would like to boot the board from SD card. There are binaries provided by linaro (iMX6DQ_SPI_to_uSDHC3.bin and iMX6DQ_SPI_to_uSDHC4.bin) and it is working fine. But I would like to know what this binary file is exactly doing (how this binary makes the board to boot from sd card)?

               I have referred Minimal boot-loader for IMX6 Sabrelite where they mentioned that this binary writes two registers. What are those registers and if possible can I get the source code of these binaries or atleast the working?

Thanks

Jai Ganesh S

Labels (1)
0 Kudos
1 Solution
964 Views
jaiganesh
Contributor III

Found how the jump code works..

                    1) The registers to be taken care of are => SRC_GPR9 and SRC_GPR10.
                    2) SRC_SBMR1 is the register that determines the boot device

                    3) The concept of ROM is, after reset, if SRC_GPR10[28] is set, ROM will copy SRC_GPR9[25:0] to SRC_SBMR1.

                    4) So inorder to jump from SPI to other boot devices, an appropiate value must be written in SRC_GPR9 register and set the 28th bit of SRC_GPR10 register and                              make a software reset. (This is what happens in jump code)

                    5) Now ROM will check 28th bit of SRC_GPR10 register. It is set. So it copies SRC_GPR9[25:0] to SRC_SBMR1, that will determine the boot device.

Please refer to the fusemap section of imx6 application processor reference manual to determine what values must be written to SRC_GPR9 register for various boot devices.

For more details, refer:

     http://boundarydevices.com/running-linaro-ubuntu-on-i-mx6-sabre-lite-and-nitrogen6x/

     [U-Boot] [PATCH 1/3] common/cmd_rsmode.c: add imx reset mode command

View solution in original post

0 Kudos
3 Replies
965 Views
jaiganesh
Contributor III

Found how the jump code works..

                    1) The registers to be taken care of are => SRC_GPR9 and SRC_GPR10.
                    2) SRC_SBMR1 is the register that determines the boot device

                    3) The concept of ROM is, after reset, if SRC_GPR10[28] is set, ROM will copy SRC_GPR9[25:0] to SRC_SBMR1.

                    4) So inorder to jump from SPI to other boot devices, an appropiate value must be written in SRC_GPR9 register and set the 28th bit of SRC_GPR10 register and                              make a software reset. (This is what happens in jump code)

                    5) Now ROM will check 28th bit of SRC_GPR10 register. It is set. So it copies SRC_GPR9[25:0] to SRC_SBMR1, that will determine the boot device.

Please refer to the fusemap section of imx6 application processor reference manual to determine what values must be written to SRC_GPR9 register for various boot devices.

For more details, refer:

     http://boundarydevices.com/running-linaro-ubuntu-on-i-mx6-sabre-lite-and-nitrogen6x/

     [U-Boot] [PATCH 1/3] common/cmd_rsmode.c: add imx reset mode command

0 Kudos
964 Views
EricNelson
Senior Contributor II

Hello Jai,

The Freescale binaries are likely written in assembly language, so you can simply disassemble to find out what they're doing.

If you're looking for background about how they work, I'd suggest looking at the U-Boot sources for the "bmode" command:

     u-boot-imx6/arch/arm/cpu/armv7/mx6/soc.c at production · boundarydevices/u-boot-imx6 · GitHub

And for background, find the discussions surrounding the commits on the U-Boot mailing list:

     http://lists.denx.de/pipermail/u-boot/

In essence, all either one does is write some "fuse override" registers and execute a reset. The internal ROM boot loader checks the override bits before (or in addition to) reading the fuses to determine the boot path.

964 Views
jaiganesh
Contributor III

Hi Eric,

          Thanks for your reply. You mentioned that there are some "fuse override" registers, but I am not sure what those registers are ? Is there any specific document available so that, we can understand how boot is transferred from SPI NOR to "SD/MMC" card in detail.

     We are building custom board based on sabrelite and we have only one sd card interface. And why I want to understand this in detail is, for our new custom board, we made SPI NOR as primary boot device and would like to make "SD card" bootable, and so we will be in the position to build our own binary similar to "iMX6DQ_SPI_to_uSDHC4.bin" so that boot device changes to "SD MMC" card.

Thanks,

Jai Ganesh

0 Kudos