From 843400fd267cf465d0119cc9623edd28deb40108 Mon Sep 17 00:00:00 2001 From: Breno Matheus Lima Date: Wed, 10 Oct 2018 01:10:40 +0000 Subject: doc: imx: Reorganize i.MX SoC common documentation The following documents describe device details according to the i.MX family: - README.imx25 - README.imx27 - README.imx5 - README.imx6 - README.mxs Move all device common related document to doc/imx/common for a better directory structure. Signed-off-by: Breno Lima --- doc/imx/README.imx25 | 10 -- doc/imx/README.imx27 | 10 -- doc/imx/README.imx5 | 40 ------ doc/imx/README.imx6 | 90 -------------- doc/imx/README.mxs | 290 -------------------------------------------- doc/imx/common/README.imx25 | 10 ++ doc/imx/common/README.imx27 | 10 ++ doc/imx/common/README.imx5 | 40 ++++++ doc/imx/common/README.imx6 | 90 ++++++++++++++ doc/imx/common/README.mxs | 290 ++++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 440 insertions(+), 440 deletions(-) delete mode 100644 doc/imx/README.imx25 delete mode 100644 doc/imx/README.imx27 delete mode 100644 doc/imx/README.imx5 delete mode 100644 doc/imx/README.imx6 delete mode 100644 doc/imx/README.mxs create mode 100644 doc/imx/common/README.imx25 create mode 100644 doc/imx/common/README.imx27 create mode 100644 doc/imx/common/README.imx5 create mode 100644 doc/imx/common/README.imx6 create mode 100644 doc/imx/common/README.mxs diff --git a/doc/imx/README.imx25 b/doc/imx/README.imx25 deleted file mode 100644 index 0ca21b6dfe..0000000000 --- a/doc/imx/README.imx25 +++ /dev/null @@ -1,10 +0,0 @@ -U-Boot for Freescale i.MX25 - -This file contains information for the port of U-Boot to the Freescale i.MX25 -SoC. - -1. CONVENTIONS FOR FUSE ASSIGNMENTS ------------------------------------ - -1.1 MAC Address: It is stored in the words 26 to 31 of fuse bank 0, using the - natural MAC byte order (i.e. MSB first). diff --git a/doc/imx/README.imx27 b/doc/imx/README.imx27 deleted file mode 100644 index 6f92cb47ce..0000000000 --- a/doc/imx/README.imx27 +++ /dev/null @@ -1,10 +0,0 @@ -U-Boot for Freescale i.MX27 - -This file contains information for the port of U-Boot to the Freescale i.MX27 -SoC. - -1. CONVENTIONS FOR FUSE ASSIGNMENTS ------------------------------------ - -1.1 MAC Address: It is stored in the words 4 to 9 of fuse bank 0, using the - reversed MAC byte order (i.e. LSB first). diff --git a/doc/imx/README.imx5 b/doc/imx/README.imx5 deleted file mode 100644 index ea0e144ced..0000000000 --- a/doc/imx/README.imx5 +++ /dev/null @@ -1,40 +0,0 @@ -U-Boot for Freescale i.MX5x - -This file contains information for the port of U-Boot to the Freescale -i.MX5x SoCs. - -1. CONFIGURATION OPTIONS/SETTINGS ---------------------------------- - -1.1 CONFIG_MX51_PLL_ERRATA: Workaround for i.MX51 PLL errata. - This option should be enabled by all boards using the i.MX51 silicon - version up until (including) 3.0 running at 800MHz. - The PLL's in the i.MX51 processor can go out of lock due to a metastable - condition in an analog flip-flop when used at high frequencies. - This workaround implements an undocumented feature in the PLL (dither - mode), which causes the effect of this failure to be much lower (in terms - of frequency deviation), avoiding system failure, or at least decreasing - the likelihood of system failure. - -1.2 CONFIG_SYS_MAIN_PWR_ON: Trigger MAIN_PWR_ON upon startup. - This option should be enabled for boards having a SYS_ON_OFF_CTL signal - connected to GPIO1[23] and triggering the MAIN_PWR_ON signal like in the - reference designs. - -2. CONVENTIONS FOR FUSE ASSIGNMENTS ------------------------------------ - -2.1 MAC Address: It is stored in the words 9 to 14 of fuse bank 1, using the - natural MAC byte order (i.e. MSB first). - - This is an example how to program an example MAC address 01:23:45:67:89:ab - into the eFuses. Assure that the programming voltage is available and then - execute: - - => fuse prog -y 1 9 01 23 45 67 89 ab - - After programming a MAC address, consider locking the MAC fuses. This is - done by programming the MAC_ADDR_LOCK fuse, which is bit 4 of word 0 in - bank 1: - - => fuse prog -y 1 0 10 diff --git a/doc/imx/README.imx6 b/doc/imx/README.imx6 deleted file mode 100644 index eab88353f6..0000000000 --- a/doc/imx/README.imx6 +++ /dev/null @@ -1,90 +0,0 @@ -U-Boot for Freescale i.MX6 - -This file contains information for the port of U-Boot to the Freescale i.MX6 -SoC. - -1. CONVENTIONS FOR FUSE ASSIGNMENTS ------------------------------------ - -1.1 MAC Address: It is stored in fuse bank 4, with the 32 lsbs in word 2 and the - 16 msbs in word 3[15:0]. - For i.MX6SX and i.MX6UL, they have two MAC addresses. The second MAC address - is stored in fuse bank 4, with the 16 lsb in word 3[31:16] and the 32 msbs in - word 4. - -Example: - -For reading the MAC address fuses on a MX6Q: - -- The MAC address is stored in two fuse addresses (the fuse addresses are -described in the Fusemap Descriptions table from the mx6q Reference Manual): - -0x620[31:0] - MAC_ADDR[31:0] -0x630[15:0] - MAC_ADDR[47:32] - -In order to use the fuse API, we need to pass the bank and word values, which -are calculated as below: - -Fuse address for the lower MAC address: 0x620 -Base address for the fuses: 0x400 - -(0x620 - 0x400)/0x10 = 0x22 = 34 decimal - -As the fuses are arranged in banks of 8 words: - -34 / 8 = 4 and the remainder is 2, so in this case: - -bank = 4 -word = 2 - -And the U-Boot command would be: - -=> fuse read 4 2 -Reading bank 4: - -Word 0x00000002: 9f027772 - -Doing the same for the upper MAC address: - -Fuse address for the upper MAC address: 0x630 -Base address for the fuses: 0x400 - -(0x630 - 0x400)/0x10 = 0x23 = 35 decimal - -As the fuses are arranged in banks of 8 words: - -35 / 8 = 4 and the remainder is 3, so in this case: - -bank = 4 -word = 3 - -And the U-Boot command would be: - -=> fuse read 4 3 -Reading bank 4: - -Word 0x00000003: 00000004 - -,which matches the ethaddr value: -=> echo ${ethaddr} -00:04:9f:02:77:72 - -Some other useful hints: - -- The 'bank' and 'word' numbers can be easily obtained from the mx6 Reference -Manual. For the mx6quad case, please check the "46.5 OCOTP Memory Map/Register -Definition" from the "i.MX 6Dual/6Quad Applications Processor Reference Manual, -Rev. 1, 04/2013" document. For example, for the MAC fuses we have: - -Address: -21B_C620 Value of OTP Bank4 Word2 (MAC Address)(OCOTP_MAC0) - -21B_C630 Value of OTP Bank4 Word3 (MAC Address)(OCOTP_MAC1) - -- The command '=> fuse read 4 2 2' reads the whole MAC addresses at once: - -=> fuse read 4 2 2 -Reading bank 4: - -Word 0x00000002: 9f027772 00000004 - diff --git a/doc/imx/README.mxs b/doc/imx/README.mxs deleted file mode 100644 index e23ab9cc6d..0000000000 --- a/doc/imx/README.mxs +++ /dev/null @@ -1,290 +0,0 @@ -Booting U-Boot on a MXS processor -================================= - -This document describes the MXS U-Boot port. This document mostly covers topics -related to making the module/board bootable. - -Terminology ------------ - -The term "MXS" refers to a family of Freescale SoCs that is composed by MX23 -and MX28. - -The dollar symbol ($) introduces a snipped of shell code. This shall be typed -into the unix command prompt in U-Boot source code root directory. - -The (=>) introduces a snipped of code that should by typed into U-Boot command -prompt - -Contents --------- - -1) Prerequisites -2) Compiling U-Boot for a MXS based board -3) Installation of U-Boot for a MXS based board to SD card -4) Installation of U-Boot into NAND flash on a MX28 based board -5) Installation of U-Boot into SPI NOR flash on a MX28 based board - -1) Prerequisites ----------------- - -To make a MXS based board bootable, some tools are necessary. The only -mandatory tool is the "mxsboot" tool found in U-Boot source tree. The -tool is built automatically when compiling U-Boot for i.MX23 or i.MX28. - -The production of BootStream image is handled via "mkimage", which is -also part of the U-Boot source tree. The "mkimage" requires OpenSSL -development libraries to be installed. In case of Debian and derivates, -this is installed by running: - - $ sudo apt-get install libssl-dev - -NOTE: The "elftosb" tool distributed by Freescale Semiconductor is no - longer necessary for general use of U-Boot on i.MX23 and i.MX28. - The mkimage supports generation of BootStream images encrypted - with a zero key, which is the vast majority of use-cases. In - case you do need to produce image encrypted with non-zero key - or other special features, please use the "elftosb" tool, - otherwise continue to section 2). The installation procedure of - the "elftosb" is outlined below: - -Firstly, obtain the elftosb archive from the following location: - - ftp://ftp.denx.de/pub/tools/elftosb-10.12.01.tar.gz - -We use a $VER variable here to denote the current version. At the time of -writing of this document, that is "10.12.01". To obtain the file from command -line, use: - - $ VER="10.12.01" - $ wget ftp://ftp.denx.de/pub/tools/elftosb-${VER}.tar.gz - -Extract the file: - - $ tar xzf elftosb-${VER}.tar.gz - -Compile the file. We need to manually tell the linker to use also libm: - - $ cd elftosb-${VER}/ - $ make LIBS="-lstdc++ -lm" elftosb - -Optionally, remove debugging symbols from elftosb: - - $ strip bld/linux/elftosb - -Finally, install the "elftosb" binary. The "install" target is missing, so just -copy the binary by hand: - - $ sudo cp bld/linux/elftosb /usr/local/bin/ - -Make sure the "elftosb" binary can be found in your $PATH, in this case this -means "/usr/local/bin/" has to be in your $PATH. - -2) Compiling U-Boot for a MXS based board -------------------------------------------- - -Compiling the U-Boot for a MXS board is straightforward and done as compiling -U-Boot for any other ARM device. For cross-compiler setup, please refer to -ELDK5.0 documentation. First, clean up the source code: - - $ make mrproper - -Next, configure U-Boot for a MXS based board - - $ make _config - -Examples: - -1. For building U-Boot for Aries M28EVK board: - - $ make m28evk_config - -2. For building U-Boot for Freescale MX28EVK board: - - $ make mx28evk_config - -3. For building U-Boot for Freescale MX23EVK board: - - $ make mx23evk_config - -4. For building U-Boot for Olimex MX23 Olinuxino board: - - $ make mx23_olinuxino_config - -Lastly, compile U-Boot and prepare a "BootStream". The "BootStream" is a special -type of file, which MXS CPUs can boot. This is handled by the following -command: - - $ make u-boot.sb - -HINT: To speed-up the build process, you can add -j, where N is number of - compiler instances that'll run in parallel. - -The code produces "u-boot.sb" file. This file needs to be augmented with a -proper header to allow successful boot from SD or NAND. Adding the header is -discussed in the following chapters. - -NOTE: The process that produces u-boot.sb uses the mkimage to generate the - BootStream. The BootStream is encrypted with zero key. In case you need - some special features of the BootStream and plan on using the "elftosb" - tool instead, the invocation to produce a compatible BootStream with the - one produced by mkimage is outlined below. For further details, refer to - the documentation bundled with the "elftosb" package. - - $ elftosb -zf imx23 -c arch/arm/cpu/arm926ejs/mxs/u-boot-imx23.bd \ - -o u-boot.sb - $ elftosb -zf imx28 -c arch/arm/cpu/arm926ejs/mxs/u-boot-imx28.bd \ - -o u-boot.sb - -3) Installation of U-Boot for a MXS based board to SD card ----------------------------------------------------------- - -To boot a MXS based board from SD, set the boot mode DIP switches according to -to MX28 manual, section 12.2.1 (Table 12-2) or MX23 manual, section 35.1.2 -(Table 35-3). - -The SD card used to boot U-Boot must contain a DOS partition table, which in -turn carries a partition of special type and which contains a special header. -The rest of partitions in the DOS partition table can be used by the user. - -To prepare such partition, use your favourite partitioning tool. The partition -must have the following parameters: - - * Start sector .......... sector 2048 - * Partition size ........ at least 1024 kb - * Partition type ........ 0x53 (sometimes "OnTrack DM6 Aux3") - -For example in Linux fdisk, the sequence for a clear card follows. Be sure to -run fdisk with the option "-u=sectors" to set units to sectors: - - * o ..................... create a clear partition table - * n ..................... create new partition - * p ............. primary partition - * 1 ............. first partition - * 2048 .......... first sector is 2048 - * +1M ........... make the partition 1Mb big - * t 1 ................... change first partition ID - * 53 ............ change the ID to 0x53 (OnTrack DM6 Aux3) - * - * w ..................... write partition table to disk - -The partition layout is ready, next the special partition must be filled with -proper contents. The contents is generated by running the following command -(see chapter 2)): - - $ ./tools/mxsboot sd u-boot.sb u-boot.sd - -The resulting file, "u-boot.sd", shall then be written to the partition. In this -case, we assume the first partition of the SD card is /dev/mmcblk0p1: - - $ dd if=u-boot.sd of=/dev/mmcblk0p1 - -Last step is to insert the card into the MXS based board and boot. - -NOTE: If the user needs to adjust the start sector, the "mxsboot" tool contains - a "-p" switch for that purpose. The "-p" switch takes the sector number as - an argument. - -4) Installation of U-Boot into NAND flash on a MX28 based board ---------------------------------------------------------------- - -To boot a MX28 based board from NAND, set the boot mode DIP switches according -to MX28 manual section 12.2.1 (Table 12-2), PORT=GPMI, NAND 1.8 V. - -There are two possibilities when preparing an image writable to NAND flash. - - I) The NAND wasn't written at all yet or the BCB is broken - ---------------------------------------------------------- - In this case, both BCB (FCB and DBBT) and firmware needs to be - written to NAND. To generate NAND image containing all these, - there is a tool called "mxsboot" in the "tools/" directory. The tool - is invoked on "u-boot.sb" file from chapter 2): - - $ ./tools/mxsboot nand u-boot.sb u-boot.nand - - NOTE: The above invokation works for NAND flash with geometry of - 2048b per page, 64b OOB data, 128kb erase size. If your chip - has a different geometry, please use: - - -w change page size (default 2048 b) - -o change oob size (default 64 b) - -e change erase size (default 131072 b) - - The geometry information can be obtained from running U-Boot - on the MX28 board by issuing the "nand info" command. - - The resulting file, "u-boot.nand" can be written directly to NAND - from the U-Boot prompt. To simplify the process, the U-Boot default - environment contains script "update_nand_full" to update the system. - - This script expects a working TFTP server containing the file - "u-boot.nand" in it's root directory. This can be changed by - adjusting the "update_nand_full_filename" variable. - - To update the system, run the following in U-Boot prompt: - - => run update_nand_full - - In case you would only need to update the bootloader in future, - see II) below. - - II) The NAND was already written with a good BCB - ------------------------------------------------ - This part applies after the part I) above was done at least once. - - If part I) above was done correctly already, there is no need to - write the FCB and DBBT parts of NAND again. It's possible to upgrade - only the bootloader image. - - To simplify the process of firmware update, the U-Boot default - environment contains script "update_nand_firmware" to update only - the firmware, without rewriting FCB and DBBT. - - This script expects a working TFTP server containing the file - "u-boot.sb" in it's root directory. This can be changed by - adjusting the "update_nand_firmware_filename" variable. - - To update the system, run the following in U-Boot prompt: - - => run update_nand_firmware - - III) Special settings for the update scripts - -------------------------------------------- - There is a slight possibility of the user wanting to adjust the - STRIDE and COUNT options of the NAND boot. For description of these, - see MX28 manual section 12.12.1.2 and 12.12.1.3. - - The update scripts take this possibility into account. In case the - user changes STRIDE by blowing fuses, the user also has to change - "update_nand_stride" variable. In case the user changes COUNT by - blowing fuses, the user also has to change "update_nand_count" - variable for the update scripts to work correctly. - - In case the user needs to boot a firmware image bigger than 1Mb, the - user has to adjust the "update_nand_firmware_maxsz" variable for the - update scripts to work properly. - -5) Installation of U-Boot into SPI NOR flash on a MX28 based board ------------------------------------------------------------------- - -The u-boot.sb file can be directly written to SPI NOR from U-Boot prompt. - -Load u-boot.sb into RAM, this can be done in several ways and one way is to use -tftp: - => tftp u-boot.sb 0x42000000 - -Probe the SPI NOR flash: - => sf probe - -(SPI NOR should be succesfully detected in this step) - -Erase the blocks where U-Boot binary will be written to: - => sf erase 0x0 0x80000 - -Write u-boot.sb to SPI NOR: - => sf write 0x42000000 0 0x80000 - -Power off the board and set the boot mode DIP switches to boot from the SPI NOR -according to MX28 manual section 12.2.1 (Table 12-2) - -Last step is to power up the board and U-Boot should start from SPI NOR. diff --git a/doc/imx/common/README.imx25 b/doc/imx/common/README.imx25 new file mode 100644 index 0000000000..0ca21b6dfe --- /dev/null +++ b/doc/imx/common/README.imx25 @@ -0,0 +1,10 @@ +U-Boot for Freescale i.MX25 + +This file contains information for the port of U-Boot to the Freescale i.MX25 +SoC. + +1. CONVENTIONS FOR FUSE ASSIGNMENTS +----------------------------------- + +1.1 MAC Address: It is stored in the words 26 to 31 of fuse bank 0, using the + natural MAC byte order (i.e. MSB first). diff --git a/doc/imx/common/README.imx27 b/doc/imx/common/README.imx27 new file mode 100644 index 0000000000..6f92cb47ce --- /dev/null +++ b/doc/imx/common/README.imx27 @@ -0,0 +1,10 @@ +U-Boot for Freescale i.MX27 + +This file contains information for the port of U-Boot to the Freescale i.MX27 +SoC. + +1. CONVENTIONS FOR FUSE ASSIGNMENTS +----------------------------------- + +1.1 MAC Address: It is stored in the words 4 to 9 of fuse bank 0, using the + reversed MAC byte order (i.e. LSB first). diff --git a/doc/imx/common/README.imx5 b/doc/imx/common/README.imx5 new file mode 100644 index 0000000000..ea0e144ced --- /dev/null +++ b/doc/imx/common/README.imx5 @@ -0,0 +1,40 @@ +U-Boot for Freescale i.MX5x + +This file contains information for the port of U-Boot to the Freescale +i.MX5x SoCs. + +1. CONFIGURATION OPTIONS/SETTINGS +--------------------------------- + +1.1 CONFIG_MX51_PLL_ERRATA: Workaround for i.MX51 PLL errata. + This option should be enabled by all boards using the i.MX51 silicon + version up until (including) 3.0 running at 800MHz. + The PLL's in the i.MX51 processor can go out of lock due to a metastable + condition in an analog flip-flop when used at high frequencies. + This workaround implements an undocumented feature in the PLL (dither + mode), which causes the effect of this failure to be much lower (in terms + of frequency deviation), avoiding system failure, or at least decreasing + the likelihood of system failure. + +1.2 CONFIG_SYS_MAIN_PWR_ON: Trigger MAIN_PWR_ON upon startup. + This option should be enabled for boards having a SYS_ON_OFF_CTL signal + connected to GPIO1[23] and triggering the MAIN_PWR_ON signal like in the + reference designs. + +2. CONVENTIONS FOR FUSE ASSIGNMENTS +----------------------------------- + +2.1 MAC Address: It is stored in the words 9 to 14 of fuse bank 1, using the + natural MAC byte order (i.e. MSB first). + + This is an example how to program an example MAC address 01:23:45:67:89:ab + into the eFuses. Assure that the programming voltage is available and then + execute: + + => fuse prog -y 1 9 01 23 45 67 89 ab + + After programming a MAC address, consider locking the MAC fuses. This is + done by programming the MAC_ADDR_LOCK fuse, which is bit 4 of word 0 in + bank 1: + + => fuse prog -y 1 0 10 diff --git a/doc/imx/common/README.imx6 b/doc/imx/common/README.imx6 new file mode 100644 index 0000000000..eab88353f6 --- /dev/null +++ b/doc/imx/common/README.imx6 @@ -0,0 +1,90 @@ +U-Boot for Freescale i.MX6 + +This file contains information for the port of U-Boot to the Freescale i.MX6 +SoC. + +1. CONVENTIONS FOR FUSE ASSIGNMENTS +----------------------------------- + +1.1 MAC Address: It is stored in fuse bank 4, with the 32 lsbs in word 2 and the + 16 msbs in word 3[15:0]. + For i.MX6SX and i.MX6UL, they have two MAC addresses. The second MAC address + is stored in fuse bank 4, with the 16 lsb in word 3[31:16] and the 32 msbs in + word 4. + +Example: + +For reading the MAC address fuses on a MX6Q: + +- The MAC address is stored in two fuse addresses (the fuse addresses are +described in the Fusemap Descriptions table from the mx6q Reference Manual): + +0x620[31:0] - MAC_ADDR[31:0] +0x630[15:0] - MAC_ADDR[47:32] + +In order to use the fuse API, we need to pass the bank and word values, which +are calculated as below: + +Fuse address for the lower MAC address: 0x620 +Base address for the fuses: 0x400 + +(0x620 - 0x400)/0x10 = 0x22 = 34 decimal + +As the fuses are arranged in banks of 8 words: + +34 / 8 = 4 and the remainder is 2, so in this case: + +bank = 4 +word = 2 + +And the U-Boot command would be: + +=> fuse read 4 2 +Reading bank 4: + +Word 0x00000002: 9f027772 + +Doing the same for the upper MAC address: + +Fuse address for the upper MAC address: 0x630 +Base address for the fuses: 0x400 + +(0x630 - 0x400)/0x10 = 0x23 = 35 decimal + +As the fuses are arranged in banks of 8 words: + +35 / 8 = 4 and the remainder is 3, so in this case: + +bank = 4 +word = 3 + +And the U-Boot command would be: + +=> fuse read 4 3 +Reading bank 4: + +Word 0x00000003: 00000004 + +,which matches the ethaddr value: +=> echo ${ethaddr} +00:04:9f:02:77:72 + +Some other useful hints: + +- The 'bank' and 'word' numbers can be easily obtained from the mx6 Reference +Manual. For the mx6quad case, please check the "46.5 OCOTP Memory Map/Register +Definition" from the "i.MX 6Dual/6Quad Applications Processor Reference Manual, +Rev. 1, 04/2013" document. For example, for the MAC fuses we have: + +Address: +21B_C620 Value of OTP Bank4 Word2 (MAC Address)(OCOTP_MAC0) + +21B_C630 Value of OTP Bank4 Word3 (MAC Address)(OCOTP_MAC1) + +- The command '=> fuse read 4 2 2' reads the whole MAC addresses at once: + +=> fuse read 4 2 2 +Reading bank 4: + +Word 0x00000002: 9f027772 00000004 + diff --git a/doc/imx/common/README.mxs b/doc/imx/common/README.mxs new file mode 100644 index 0000000000..e23ab9cc6d --- /dev/null +++ b/doc/imx/common/README.mxs @@ -0,0 +1,290 @@ +Booting U-Boot on a MXS processor +================================= + +This document describes the MXS U-Boot port. This document mostly covers topics +related to making the module/board bootable. + +Terminology +----------- + +The term "MXS" refers to a family of Freescale SoCs that is composed by MX23 +and MX28. + +The dollar symbol ($) introduces a snipped of shell code. This shall be typed +into the unix command prompt in U-Boot source code root directory. + +The (=>) introduces a snipped of code that should by typed into U-Boot command +prompt + +Contents +-------- + +1) Prerequisites +2) Compiling U-Boot for a MXS based board +3) Installation of U-Boot for a MXS based board to SD card +4) Installation of U-Boot into NAND flash on a MX28 based board +5) Installation of U-Boot into SPI NOR flash on a MX28 based board + +1) Prerequisites +---------------- + +To make a MXS based board bootable, some tools are necessary. The only +mandatory tool is the "mxsboot" tool found in U-Boot source tree. The +tool is built automatically when compiling U-Boot for i.MX23 or i.MX28. + +The production of BootStream image is handled via "mkimage", which is +also part of the U-Boot source tree. The "mkimage" requires OpenSSL +development libraries to be installed. In case of Debian and derivates, +this is installed by running: + + $ sudo apt-get install libssl-dev + +NOTE: The "elftosb" tool distributed by Freescale Semiconductor is no + longer necessary for general use of U-Boot on i.MX23 and i.MX28. + The mkimage supports generation of BootStream images encrypted + with a zero key, which is the vast majority of use-cases. In + case you do need to produce image encrypted with non-zero key + or other special features, please use the "elftosb" tool, + otherwise continue to section 2). The installation procedure of + the "elftosb" is outlined below: + +Firstly, obtain the elftosb archive from the following location: + + ftp://ftp.denx.de/pub/tools/elftosb-10.12.01.tar.gz + +We use a $VER variable here to denote the current version. At the time of +writing of this document, that is "10.12.01". To obtain the file from command +line, use: + + $ VER="10.12.01" + $ wget ftp://ftp.denx.de/pub/tools/elftosb-${VER}.tar.gz + +Extract the file: + + $ tar xzf elftosb-${VER}.tar.gz + +Compile the file. We need to manually tell the linker to use also libm: + + $ cd elftosb-${VER}/ + $ make LIBS="-lstdc++ -lm" elftosb + +Optionally, remove debugging symbols from elftosb: + + $ strip bld/linux/elftosb + +Finally, install the "elftosb" binary. The "install" target is missing, so just +copy the binary by hand: + + $ sudo cp bld/linux/elftosb /usr/local/bin/ + +Make sure the "elftosb" binary can be found in your $PATH, in this case this +means "/usr/local/bin/" has to be in your $PATH. + +2) Compiling U-Boot for a MXS based board +------------------------------------------- + +Compiling the U-Boot for a MXS board is straightforward and done as compiling +U-Boot for any other ARM device. For cross-compiler setup, please refer to +ELDK5.0 documentation. First, clean up the source code: + + $ make mrproper + +Next, configure U-Boot for a MXS based board + + $ make _config + +Examples: + +1. For building U-Boot for Aries M28EVK board: + + $ make m28evk_config + +2. For building U-Boot for Freescale MX28EVK board: + + $ make mx28evk_config + +3. For building U-Boot for Freescale MX23EVK board: + + $ make mx23evk_config + +4. For building U-Boot for Olimex MX23 Olinuxino board: + + $ make mx23_olinuxino_config + +Lastly, compile U-Boot and prepare a "BootStream". The "BootStream" is a special +type of file, which MXS CPUs can boot. This is handled by the following +command: + + $ make u-boot.sb + +HINT: To speed-up the build process, you can add -j, where N is number of + compiler instances that'll run in parallel. + +The code produces "u-boot.sb" file. This file needs to be augmented with a +proper header to allow successful boot from SD or NAND. Adding the header is +discussed in the following chapters. + +NOTE: The process that produces u-boot.sb uses the mkimage to generate the + BootStream. The BootStream is encrypted with zero key. In case you need + some special features of the BootStream and plan on using the "elftosb" + tool instead, the invocation to produce a compatible BootStream with the + one produced by mkimage is outlined below. For further details, refer to + the documentation bundled with the "elftosb" package. + + $ elftosb -zf imx23 -c arch/arm/cpu/arm926ejs/mxs/u-boot-imx23.bd \ + -o u-boot.sb + $ elftosb -zf imx28 -c arch/arm/cpu/arm926ejs/mxs/u-boot-imx28.bd \ + -o u-boot.sb + +3) Installation of U-Boot for a MXS based board to SD card +---------------------------------------------------------- + +To boot a MXS based board from SD, set the boot mode DIP switches according to +to MX28 manual, section 12.2.1 (Table 12-2) or MX23 manual, section 35.1.2 +(Table 35-3). + +The SD card used to boot U-Boot must contain a DOS partition table, which in +turn carries a partition of special type and which contains a special header. +The rest of partitions in the DOS partition table can be used by the user. + +To prepare such partition, use your favourite partitioning tool. The partition +must have the following parameters: + + * Start sector .......... sector 2048 + * Partition size ........ at least 1024 kb + * Partition type ........ 0x53 (sometimes "OnTrack DM6 Aux3") + +For example in Linux fdisk, the sequence for a clear card follows. Be sure to +run fdisk with the option "-u=sectors" to set units to sectors: + + * o ..................... create a clear partition table + * n ..................... create new partition + * p ............. primary partition + * 1 ............. first partition + * 2048 .......... first sector is 2048 + * +1M ........... make the partition 1Mb big + * t 1 ................... change first partition ID + * 53 ............ change the ID to 0x53 (OnTrack DM6 Aux3) + * + * w ..................... write partition table to disk + +The partition layout is ready, next the special partition must be filled with +proper contents. The contents is generated by running the following command +(see chapter 2)): + + $ ./tools/mxsboot sd u-boot.sb u-boot.sd + +The resulting file, "u-boot.sd", shall then be written to the partition. In this +case, we assume the first partition of the SD card is /dev/mmcblk0p1: + + $ dd if=u-boot.sd of=/dev/mmcblk0p1 + +Last step is to insert the card into the MXS based board and boot. + +NOTE: If the user needs to adjust the start sector, the "mxsboot" tool contains + a "-p" switch for that purpose. The "-p" switch takes the sector number as + an argument. + +4) Installation of U-Boot into NAND flash on a MX28 based board +--------------------------------------------------------------- + +To boot a MX28 based board from NAND, set the boot mode DIP switches according +to MX28 manual section 12.2.1 (Table 12-2), PORT=GPMI, NAND 1.8 V. + +There are two possibilities when preparing an image writable to NAND flash. + + I) The NAND wasn't written at all yet or the BCB is broken + ---------------------------------------------------------- + In this case, both BCB (FCB and DBBT) and firmware needs to be + written to NAND. To generate NAND image containing all these, + there is a tool called "mxsboot" in the "tools/" directory. The tool + is invoked on "u-boot.sb" file from chapter 2): + + $ ./tools/mxsboot nand u-boot.sb u-boot.nand + + NOTE: The above invokation works for NAND flash with geometry of + 2048b per page, 64b OOB data, 128kb erase size. If your chip + has a different geometry, please use: + + -w change page size (default 2048 b) + -o change oob size (default 64 b) + -e change erase size (default 131072 b) + + The geometry information can be obtained from running U-Boot + on the MX28 board by issuing the "nand info" command. + + The resulting file, "u-boot.nand" can be written directly to NAND + from the U-Boot prompt. To simplify the process, the U-Boot default + environment contains script "update_nand_full" to update the system. + + This script expects a working TFTP server containing the file + "u-boot.nand" in it's root directory. This can be changed by + adjusting the "update_nand_full_filename" variable. + + To update the system, run the following in U-Boot prompt: + + => run update_nand_full + + In case you would only need to update the bootloader in future, + see II) below. + + II) The NAND was already written with a good BCB + ------------------------------------------------ + This part applies after the part I) above was done at least once. + + If part I) above was done correctly already, there is no need to + write the FCB and DBBT parts of NAND again. It's possible to upgrade + only the bootloader image. + + To simplify the process of firmware update, the U-Boot default + environment contains script "update_nand_firmware" to update only + the firmware, without rewriting FCB and DBBT. + + This script expects a working TFTP server containing the file + "u-boot.sb" in it's root directory. This can be changed by + adjusting the "update_nand_firmware_filename" variable. + + To update the system, run the following in U-Boot prompt: + + => run update_nand_firmware + + III) Special settings for the update scripts + -------------------------------------------- + There is a slight possibility of the user wanting to adjust the + STRIDE and COUNT options of the NAND boot. For description of these, + see MX28 manual section 12.12.1.2 and 12.12.1.3. + + The update scripts take this possibility into account. In case the + user changes STRIDE by blowing fuses, the user also has to change + "update_nand_stride" variable. In case the user changes COUNT by + blowing fuses, the user also has to change "update_nand_count" + variable for the update scripts to work correctly. + + In case the user needs to boot a firmware image bigger than 1Mb, the + user has to adjust the "update_nand_firmware_maxsz" variable for the + update scripts to work properly. + +5) Installation of U-Boot into SPI NOR flash on a MX28 based board +------------------------------------------------------------------ + +The u-boot.sb file can be directly written to SPI NOR from U-Boot prompt. + +Load u-boot.sb into RAM, this can be done in several ways and one way is to use +tftp: + => tftp u-boot.sb 0x42000000 + +Probe the SPI NOR flash: + => sf probe + +(SPI NOR should be succesfully detected in this step) + +Erase the blocks where U-Boot binary will be written to: + => sf erase 0x0 0x80000 + +Write u-boot.sb to SPI NOR: + => sf write 0x42000000 0 0x80000 + +Power off the board and set the boot mode DIP switches to boot from the SPI NOR +according to MX28 manual section 12.2.1 (Table 12-2) + +Last step is to power up the board and U-Boot should start from SPI NOR. -- cgit