Much of the zynq booting information on the Xilinx website focuses on petalinux and the Xilinx SDK and doesn't apply to the Openembedded/Yocto toolflow at all.

The boot flow can be mostly the same as any ARM based board, but Xilinx doesn't provide that information anywhere. You can find an example in our repo though, https://github.com/topic-embedded-products/meta-topic which applies to the Topic boards, but this should work with the Xilinx boards as well if you use the appropriate configs and devicetrees.

The QSPI boot procedure for the ZynqMP using Yocto/OE should be:

Partition the QSPI:
- boot.bin (192k)
- ATF (128k or whatever your sector size is)
- u-boot.bin (768k)
- "rootfs"

Building u-boot SPL using OE should deliver boot.bin and u-boot.img. This should also put the PMU firmware into boot.bin using the configuration option in u-boot (this isn't done for Xilinx boards by default, see meta-topic how to patch that in).

The arm-trusted-firmware binary (not the elf but the atf-qspi.bin that is produced by the arm-trusted-firmware recipe) goes into the second partition.

This should get the bootloader up and running.

If you partition the rootfs using UBI, you can put the kernel, devicetree and rootfs and FPGA bitstream in there. u-boot can read UBI filesystems so you don't need separate partitions for these.


Tip: Boot to Linux using SD card, then program the QSPI flash using "flashcp" commands and "ubiformat" for the root.


Note that you don't need FSBL or bootgen anywhere in this flow.


On 17-11-17 07:17, Giordon Stark wrote:
Hi Sandeep,

Thanks for the detail! Is this not documented at all anywhere on a Xilinx wiki? I'm surprised, given the slight complexity in the steps, that this procedure isn't as straightforward as for an SD Card boot [but maybe that's me]. I suppose I still have a few more questions using concrete examples:

My BIF looks like

//arch = zynqmp; split = false; format = BIN
the_ROM_image:
{
     [fsbl_config]a53_x64
     [bootloader]C:\Users\kratsg\Desktop\zu19eg_3.sdk\fsbl\Debug\fsbl.elf
     [destination_cpu = pmu]Z:\gfex-prototype3\pmu-gfex-prototype3.elf
[destination_device = pl]C:\Users\kratsg\Desktop\zu19eg_3.sdk\zcu19eg_top_hw_platform_0\zcu19eg_top.bit [destination_cpu = a53-0, exception_level = el-3, trustzone]Z:\gfex-prototype3\arm-trusted-firmware.elf [destination_cpu = a53-0, exception_level = el-2]Z:\gfex-prototype3\u-boot.elf
}

*Why does the BIF not contain the kernel image - as you would do so in the procedure for SDCard boot?*
*
*
Next, our DTS files are here: https://github.com/kratsg/meta-l1calo/tree/master/conf/machine/boards/gfex/prototype3. Specifically, I'm looking at "spi1 = &qspi" in system-top.dts and I will probably need to add the QSPI partitions under this. The point is that I make a flash node flash@0(???) { partition1; partition2; partition3; .... }. *How do I know what to actually write for the flash@0 stuff? It's not clear to me how large these blocks should be and how to make sure the offsets are correct and can be picked up via u-boot and so on. [I looked here: http://www.wiki.xilinx.com/Linux+ZynqMP+GQSPI+Driver as an example since your email about creating MTD partitions wasn't rendered correctly for me, so I couldn't read that part, missing an image or something else?]*
*
*
*Finally, I'm a little confused about how you're able to have a Linux prompt without the kernel or filesystem.* Since it looks like you're programming QSPI with the devicetree, the kernel, and the filesystem -- how would you have a linux prompt before linux is on there? Chicken before the egg? Is the procedure that you flash the board with the BOOT.bin using the XSDK, get the u-boot prompt, and program the QSPI from u-boot prompt?

Thanks!

Giordon

On Thu, Nov 16, 2017 at 11:16 PM Sandeep Gundlupet Raju <[email protected] <mailto:[email protected]>> wrote:

    Hi Giordon,____

    __ __

    $ vim boota53.bif  //Add below content____

    __ __

    the_ROM_image:____

    {____

    [fsbl_config] a53_x64____

    [pmufw_image] <PATH_TO_IMAGES>/pmu_fw.elf____

    [bootloader] <PATH_TO_IMAGES>/zynqmp_fsbl.elf____

    [destination_device=pl] <PATH_TO_IMAGES>/design_1_wrapper.bit____

    [destination_cpu=a53-0] <PATH_TO_IMAGES>/bl31.elf____

    [destination_cpu=a53-0] <PATH_TO_IMAGES>/u-boot.elf____

    }____

    __ __

    Run below commands to generate the BOOT.bin____

    $ source vivado/setting.sh____

    $ bootgen -image boota53.bif -arch zynqmp -w -o i BOOT.bin ____

    __ __


      Using QSPI JFFS2 partition as root file system____

    __ __

    Linux rootfs can be mounted from JFFS2 partition on the qspi. This
    document briefs about the steps to use qspi JFFS2 rootfs. This procedure
    describes generic flow, which can be more simplified if you are using
    petalinux.____

    __ __


        Enabling JFFS2 support in Linux (enabled by default)____

    __ __


          Enable Generic QSPI controller driver____

    CONFIG_SPI_ZYNQMP_GQSPI:                                          │____

       │                                      │____

       │ Enables Xilinx GQSPI controller driver for Zynq UltraScale+ MPSoC.
                                      │____

       │                              │____

       │ Symbol: SPI_ZYNQMP_GQSPI [=y]                          │____

       │ Type  : tristate                      │____

       │ Prompt: Xilinx ZynqMP GQSPI controller                  │____

       │   Location:              │____

       │     -> Device Drivers          │____

       │       -> SPI support (SPI [=y])      │____

       │   Defined at drivers/spi/Kconfig:716  │____

       │   Depends on: SPI [=y] && SPI_MASTER [=y] && HAS_DMA [=y]____

    __ __


          Enable JFFS2 file system support.____

    image001.png____


    __ __

    __ __


        Create MTD partitions for the QSPI____

    MTD partitions can be defined in the qspi device tree node as flash
    device. Example of qspi partition is as below:____

    ____

    These partition can be seem from Linux prompt:____

    root@zcu102-zynqmp <mailto:root@zcu102-zynqmp>:~# cat /proc/mtd
    dev: size erasesize name
    mtd0: 00200000 00002000 "qspi-fsbl-uboot"
    mtd1: 01000000 00002000 "qspi-linux"
    mtd2: 00020000 00002000 "qspi-device-tree"
    mtd3: 04000000 00002000 "qspi-rootfs" ____


    __ __


        Preparing and populating rootfs in mtd partition____

    __ __

    A jffs2 filesystem image can be created using mtd utilities, which can be
    then flashed to the desired mtd partition (mtd3 in our case). While
    creating jffs2 image, make sure to pass correct eraseblock size (can be
    found by sf probe 0 0 0 command on u-boot prompt).____

    __ __


          Generating jffs2 image____

    In yocto project you can specify following two parameters in the
    local.conf:____

    IMAGE_FSTYPES += " jffs2"____

    JFFS2_ERASEBLOCK = "0x2000"____

    This will generate <image name>.jffs2 file in the deploy area.____

    __ __

    __ __

    Separately if you have tar.gz or rootfs directory, you can generate the
    rootfs image on the host machine by following command____

    mkfs.jffs2 --root=<rootfs directory location> --eraseblock=<erase block
    size> -p -o rootfs.jffs2____


    __ __

    __ __


          Flashing jffs2 image on the partition____

    It is possible to flash the generated image from u-boot as well as from
    the Linux prompt.____

    It is necessary to clean /erase the flash before writing new data (though
    Linux will take care).____

    __1)__From Linux prompt:____

    __a.__Erase the entire partition and also format it to jffs2____

    # flash_eraseall -j /dev/mtd3____

    __b.__Write the jffs2 image on mtd 3 partition____

    # flashcp <path to rootfs.jffs2> /dev/mtd3____

    __ __

    __2)__From u-boot prompt____

    __a.__Probe the flash device____

    > sf probe 0 0 0____

    __b.__Erase the entire partition (here you need to know the offset and
    size)____

    > sf erase 0x1300000 0x4000000____

    __c.__Load the jffs2 image in the memory location (ddr) from sd card
    (other tftp from network)____

    > fatload mmc 0 0x10000000 rootfs.jffs2____

    __d.__Write the image from the memory on to the flash____

    > sf write 0x10000000 0x1300000 ${filesize}____

    __ __

    __3)__From Linux prompt with tar.gz image (not jffs2)____

    Rootfs content can be simply copied after mounting jffs2 partition____

    __a.__Erase the entire partition and also format it to jffs2 (mandatory) 
____

    # flash_eraseall -j /dev/mtd3____

    __b.__Determine the location of rootfs.tar.gz image (can be on sd card or
    network. Assuming sd card for now)____

    __i.__Mount the sd card____

    #  mount /dev/mmcblk0p1 /media____

    __c.__Mount jffs2 partition on the /mnt____

    # mount -t  jffs2 /dev/mtdblock3 /mnt____

    __d.__Copy the file system to the jffs2 partition____

    # cd /mnt/____

    # tar zxvf /media/rootfs.tar.gz (choose appropriate path here).____


        Setting kernel rootfs ____

    __ __

    One can use rootfs from the jffs2 partition regardless of the boot-mode.
    Rootfs path can be specified to kernel through bootargs. One can change
    the bootargs from the u-boot prompt.____

    For sd-boot, the the bootargs for the root partition is set by sdroot0
    variable. You can change the sdroot0 variable to add following to the
    bootargs____

    root=/dev/mtdblock3 rw rootwait rootfstype=jffs2 ____

    u-boot> setenv sdroot0 "setenv bootargs earlycon clk_ignore_unused
    root=/dev/mtdblock3 rw rootwait rootfstype=jffs2"____

    u-boot> saveenv  # for next boot____

    u-boot> run sdboot____

    __ __

    Similarly for other bootmodes make sure that the bootargs is set 
properly.____

    __ __

    *Thanks,____*

    *Sandeep____*

    __ __

    *From:*Giordon Stark [mailto:[email protected] <mailto:[email protected]>]
    *Sent:* Thursday, November 16, 2017 2:11 PM
    *To:* Sandeep Gundlupet Raju <[email protected]
    <mailto:[email protected]>>
    *Cc:* [email protected] <mailto:[email protected]>
    *Subject:* Re: [meta-xilinx] [ZynqMP] Booting from QSPI instead of SD 
Card____

    __ __

    Thanks a lot Sandeep,____

    __ __

    Do you know what you are supposed to do with the filesystem? E.G. if you
    create a bif file, that contains what specifically? The linked User Guide
    seems to indicate not using that, but I'm unclear. I suppose I need the
    following in order:____

    __ __

    - FSBL____

    - PMU____

    - ATF____

    - uramdisk.gz____

    - devicetree____

    - u-boot____

    - Image____

    __ __

    Correct?____

    __ __

    Giordon____

    On Thu, Aug 17, 2017 at 9:46 PM Sandeep Gundlupet Raju
    <[email protected] <mailto:[email protected]>> wrote:____

        ____

        *Thanks,*____

        *Sandeep*____

        ____

        *From:*[email protected]
        <mailto:[email protected]>
        [mailto:[email protected]
        <mailto:[email protected]>] *On Behalf Of *Giordon
        Stark
        *Sent:* Thursday, August 17, 2017 6:10 PM
        *To:* [email protected] <mailto:[email protected]>
        *Subject:* [meta-xilinx] [ZynqMP] Booting from QSPI instead of SD 
Card____

        ____

        Hi,____

        ____

        Many thanks to the folks here for helping me get the SD Card booting
        working (especially with the data duplicator command to burn the SD
        card correctly with partitions). What's the general procedure for
        having the board boot from the QSPI instead of the SD card? Do you
        need specific software on the computer and transfer over JTAG?____

        Refer UG1209
        
https://www.xilinx.com/support/documentation/sw_manuals/xilinx2017_1/ug1209-embedded-design-tutorial.pdf
        ____

        ____

        It would be great if someone could point me to a set of 
instructions.____

        ____

        Giordon____






Kind regards,

Mike Looijmans
System Expert

TOPIC Products
Materiaalweg 4, NL-5681 RJ Best
Postbus 440, NL-5680 AK Best
Telefoon: +31 (0) 499 33 69 79
E-mail: [email protected]
Website: www.topicproducts.com

Please consider the environment before printing this e-mail



--
_______________________________________________
meta-xilinx mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/meta-xilinx

Reply via email to