[meta-xilinx] [ZynqMP] Booting from QSPI instead of SD Card
Giordon Stark
kratsg at gmail.com
Fri Nov 17 06:10:57 PST 2017
Hi Mike,
Thanks -- I was wondering about this, since it's been a struggle to find
information about this. We do have two gotchas that might affect whether we
can use SPL or not.
1) we have a custom FSBL we need to use for the board [custom power-on
sequence, clocks, etc...] that the engineers wrote
2) we do not have a working SD card on the board, a problem with the
placement process
So this gives me a question or two:
- how do I partition the QSPI without being able to initially boot linux on
the board using SD Card boot?
- do I edit my device tree to define the partitions for the kernel to be
aware of -- and how do I make sure I partition exactly like defined?
I will take a look at meta-topic.
Giordon
On Fri, Nov 17, 2017 at 2:01 AM Mike Looijmans <mike.looijmans at topic.nl>
wrote:
> 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 at 0(???) { partition1; partition2; partition3; .... }.
> *How
> > do I know what to actually write for the flash at 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 <
> SANDEEPG at xilinx.com
> > <mailto:SANDEEPG at xilinx.com>> 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 at zcu102-zynqmp <mailto:root at 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:kratsg at gmail.com <mailto:
> kratsg at gmail.com>]
> > *Sent:* Thursday, November 16, 2017 2:11 PM
> > *To:* Sandeep Gundlupet Raju <SANDEEPG at xilinx.com
> > <mailto:SANDEEPG at xilinx.com>>
> > *Cc:* meta-xilinx at yoctoproject.org <mailto:
> meta-xilinx at yoctoproject.org>
> > *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
> > <SANDEEPG at xilinx.com <mailto:SANDEEPG at xilinx.com>> wrote:____
> >
> > ____
> >
> > *Thanks,*____
> >
> > *Sandeep*____
> >
> > ____
> >
> > *From:*meta-xilinx-bounces at yoctoproject.org
> > <mailto:meta-xilinx-bounces at yoctoproject.org>
> > [mailto:meta-xilinx-bounces at yoctoproject.org
> > <mailto:meta-xilinx-bounces at yoctoproject.org>] *On Behalf Of
> *Giordon
> > Stark
> > *Sent:* Thursday, August 17, 2017 6:10 PM
> > *To:* meta-xilinx at yoctoproject.org <mailto:
> meta-xilinx at yoctoproject.org>
> > *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 <+31%20499%20336%20979>
> E-mail: mike.looijmans at topicproducts.com
> Website: www.topicproducts.com
>
> Please consider the environment before printing this e-mail
>
>
>
> --
> _______________________________________________
> meta-xilinx mailing list
> meta-xilinx at yoctoproject.org
> https://lists.yoctoproject.org/listinfo/meta-xilinx
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.yoctoproject.org/pipermail/meta-xilinx/attachments/20171117/e70fbc9d/attachment.html>
More information about the meta-xilinx
mailing list