UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 69780

2016.4-2017.3 Zynq UltraScale+ MPSoC: PetaLinux does not correctly override the U-boot environment variables to set SD boot when both eMMC(SDIO0) and SD(SDIO1) are enabled in design

Description

2016.4-2017.3 PetaLinux does not correctly override the U-boot environment variables to set SD boot when both eMMC(SDIO0) and SD(SDIO1) are enabled in design

For example:

I have an eMMC device on SDIO0 and an SD card on SDIO1. 

I configure PetaLinux to boot from the SDIO1 device by selecting the following:

petalinux-config ---> Subsystem AUTO Hardware Settings ---> SD/SDIO Settings ---> Primary SD/SDIO (psu_sd_1)

However, the tools still generate a U-Boot that inexplicably attempts to boot from mmc 0 instead of mmc 1 as expected.

Solution

To resolve this issue, you will need to change the U-boot environment variables.

1) Copy the U-boot environment variable define CONFIG_EXTRA_ENV_SETTINGS from <plnx-proj-root>/project-spec/meta-plnx-generated/recipes-bsp/u-boot/configs/platform-auto.h

Then add it to the following file <plnx-proj-root>/project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h

2) Modify the cp_kernel2ram env variable from mmc 0 to mmc 1 as highlighted below:

#define
 CONFIG_EXTRA_ENV_SETTINGS \
    SERIAL_MULTI \
    CONSOLE_ARG \
    DFU_ALT_INFO \
    PSSERIAL0 \
    "nc=setenv stdout nc;setenv stdin nc;\0" \
    "ethaddr=00:0a:35:00:22:01\0" \
    "sdbootdev=0\0" \
    "bootenv=uEnv.txt\0" \
    "importbootenv=echo \"Importing environment from SD ...\"; " \
        "env import -t ${loadbootenv_addr} $filesize\0" \
    "loadbootenv=load mmc $sdbootdev:$partid ${loadbootenv_addr}
${bootenv}\0" \
    "sd_uEnvtxt_existence_test=test -e mmc $sdbootdev:$partid /uEnv.txt\0" \
 
    "uenvboot=" \
        "if run sd_uEnvtxt_existence_test; then " \
            "run loadbootenv; " \
            "echo Loaded environment from ${bootenv}; " \
            "run importbootenv; " \
            "fi; " \
        "if test -n $uenvcmd; then " \
            "echo Running uenvcmd ...; " \
            "run uenvcmd; " \
        "fi\0" \
    "autoload=no\0" \
    "clobstart=0x10000000\0" \
    "netstart=0x10000000\0" \
    "dtbnetstart=0x11800000\0" \
    "loadaddr=0x10000000\0" \
    "boot_img=BOOT.BIN\0" \
    "load_boot=tftpboot ${clobstart} ${boot_img}\0" \
    "update_boot=setenv img boot; setenv psize ${bootsize}; setenv
installcmd \"install_boot\"; run load_boot ${installcmd}; setenv img;
setenv psize; setenv installcmd\0" \
    "install_boot=mmcinfo && fatwrite mmc 0 ${clobstart}
${boot_img} ${filesize}\0" \
    "bootenvsize=0x40000\0" \
    "bootenvstart=0x1e00000\0" \
    "eraseenv=sf probe 0 && sf erase ${bootenvstart}
${bootenvsize}\0" \
    "jffs2_img=rootfs.jffs2\0" \
    "load_jffs2=tftpboot ${clobstart} ${jffs2_img}\0" \
    "update_jffs2=setenv img jffs2; setenv psize ${jffs2size}; setenv
installcmd \"install_jffs2\"; run load_jffs2 test_img; setenv img;
setenv psize; setenv installcmd\0" \
    "sd_update_jffs2=echo Updating jffs2 from SD; mmcinfo &&
fatload mmc 0:1 ${clobstart} ${jffs2_img} && run
install_jffs2\0" \
    "install_jffs2=sf probe 0 && sf erase ${jffs2start}
${jffs2size} && " \
        "sf write ${clobstart} ${jffs2start} ${filesize}\0" \
    "kernel_img=image.ub\0" \
    "load_kernel=tftpboot ${clobstart} ${kernel_img}\0" \
    "update_kernel=setenv img kernel; setenv psize ${kernelsize}; setenv
installcmd \"install_kernel\"; run load_kernel ${installcmd}; setenv
img; setenv psize; setenv installcmd\0" \
    "install_kernel=mmcinfo && fatwrite mmc 0 ${clobstart}
${kernel_img} ${filesize}\0" \
    "cp_kernel2ram=mmcinfo && fatload mmc 1 ${netstart} ${kernel_img}\0" \
    "dtb_img=system.dtb\0" \
    "load_dtb=tftpboot ${clobstart} ${dtb_img}\0" \
    "update_dtb=setenv img dtb; setenv psize ${dtbsize}; setenv installcmd
\"install_dtb\"; run load_dtb test_img; setenv img; setenv psize; setenv
 installcmd\0" \
    "sd_update_dtb=echo Updating dtb from SD; mmcinfo && fatload
mmc 0:1 ${clobstart} ${dtb_img} && run install_dtb\0" \
    "loadbootenv_addr=0x00100000\0" \
    "fault=echo ${img} image size is greater than allocated place -
partition ${img} is NOT UPDATED\0" \
    "test_crc=if imi ${clobstart}; then run test_img; else echo ${img} Bad
CRC - ${img} is NOT UPDATED; fi\0" \
    "test_img=setenv var \"if test ${filesize} -gt ${psize}\\; then run
fault\\; else run ${installcmd}\\; fi\"; run var; setenv var\0" \
    "netboot=tftpboot ${netstart} ${kernel_img} && bootm\0" \
    "default_bootcmd=run uenvboot; run cp_kernel2ram && bootm
${netstart}\0" \
""


3) Run the following commands

petalinux-build -c u-boot -x cleanall
petalinux-build -c u-boot
AR# 69780
Date 11/28/2017
Status Active
Type Known Issues
Devices
  • Zynq UltraScale+ MPSoC
Tools
  • PetaLinux - 2016.4
  • PetaLinux - 2017.1
  • PetaLinux - 2017.2
  • More
  • PetaLinux - 2017.3
  • PetaLinux - 2017.4
  • Less
Boards & Kits
  • Zynq UltraScale+ MPSoC Boards and Kits
Page Bookmarked