Embedded MMC(eMMC) boot

=eMMC boot=

Introduction
The OMAP processor follows a 2 stage boot process. Details on the boot procedure can be found at the boot sequence page.

eMMC is an embedded MMC device; OMAP support both RAW and FAT boot from eMMC device in Slot-2.

eMMC FAT boot
FAT boot method is the same as MMC/SD Configuration flashing and booting procedure. MMC/SD card must be formatted with the correct partitions prior to flashing any device. Once the MMC/SD is configured it will contain two separate partitions that will be used to boot the device. The FAT32 partition is used for uboot, xloader, and kernel. The ext3 partitions is used for the actual file system. Once both of these are loaded onto an MMC/SD the device can boot up and run the selected file system.

But eMMC is an Embedded device. So we have to partition and format the the eMMC using kernel utility(fdisk, mke2fs) and that available in FileSystem.

Normal (existing) Linux Boot
Step-1 : ROM code transfers X-loader to SRAM and executes it. Step-2 : X-Loader transfers U-Boot to DRAM and executes it. Step-3 : U-Boot transfers the OS Kernel to DRAM and executes it.

eMMC RAW boot
Step-1 : ROM code reads 0th sector from eMMC device. Step-2 : Check TOC, sets up SDRAM using configuration headers in the TOC. Step-3 : ROM code reads 1st sector from eMMC device. Step-4 : Decode the length of the image and load address(SRAM) of the x-loader. And execute it. Step-5 : X-Loader transfers U-Boot to DRAM and executes it. Step-6 : U-boot reads Kernel from FAT partition to SDRAM and executes it. Step-7 : Kernel reads Filesystem.

''The Final destination of this RAW boot is to avoid the step-4 & step-5(as above). I.e. there is still a chance to kill x-loader completely and depend solely on bootloader.''

Following sections discuss about the eMMC RAW boot Flashing Procedure

eMMC boot Procedure for 3630-SDP
1. S9 dip switch settings for MMC/SD boot: 0001 1111

2. Create the x-loader and u-boot for 3630-SDP

3. Add the TOC in x-loader Use the Attached 'eMMC_raw_header' (size 512 bytes)– and add at beginning of the signed x-loader(MLO) => assume this new file name is “mlo-mmc2”. 'eMMC_raw_header' (right click and "save link as") 4. Copy the following files(in order) in bootable MMC/SD card - MLO - u-boot.bin - mlo-mmc2

5. Restart board to Boot from MMC/SD card

6. Flashing(x-loader and u-boot) to eMMC device

mmc init 0 mmc init 1 fatload mmc 0 80000000 mlo-mmc2 mmc write.i 1 0x80000000 0 ${filesize} fatload mmc 0 80000000 u-boot.bin mmc write.i 1 0x80000000 80000 ${filesize}

OR mmc init 0 mmc init 1 fatload mmc 0 80000000 mlo-mmc2 mmc write 1 80000000 0 25 fatload mmc 0 80000000 u-boot.bin mmc write 1 80000000 400 16B

7. Remove the MMC/SD card; Change the Dip-switch to boot from eMMC device and restart the SDP. S9 dip switch for eMMC boot: 1110 1111

eMMC boot Procedure for ZOOM3
1. H/W Modification in SOM board.

The desired SYS_BOOT configuration is: SYS_BOOT[5:0]: 110001           USB -> UART3 -> MMC1 -> MMC2 • All in RED color - resistors that should be installed according to the value given in the schematic. Although most of the SYS_BOOT resistors are 4.75 kohm, 2 are not: R73 (1 kohm), R44 (0 ohms). • Other 6(not in red) need to removed.

2. Create the x-loader and u-boot for ZOOM3

3. Same as step-3 for SDP 4. Same as step-4 for SDP 5. Same as step-5 for SDP 6. Same as step-6 for SDP

7. Remove the MMC/SD card; Change and restart the board

eMMC RAW boot & manage rest of space for user Data
eMMC device is a quite big size and full space is not required to hold the binaries. For example we have the following partition for each image

For ZOOM2 and ZOOM3 rest of the space in eMMC(16GB, usable space ~15GB) device can be used as File System or Userspace. I.e. (15GB-7.5MB) ie. ~14.9GB can be use as a multiple pertitions(file system and user memory). Here is an sample 'eMMC_raw_header(2)' of having two partition (4GB and ~10GB), that required to add in MLO file : Also this can be achive by following steps - Step-1 : Boot from eMMC device as step mentioned above. Step-2 : use /sbin/fdisk to create the partiton(s). Example: Disk /dev/mmcblk0: 15.9 GB, 15931539456 bytes 255 heads, 63 sectors/track, 1936 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot     Start       End    Blocks    Id   System /dev/mmcblk0p1              2          66      522112+  83  Linux /dev/mmcblk0p2             67        1936    15020775   83  Linux

Step-3 : format the partition (e.g. mkdosfs -F 32 /dev/mmcblk0p1). Step-4 : Dont flash(eMMC - xloader/ u-boot) further.