aboutsummaryrefslogtreecommitdiffstats
path: root/docs/README.booting.zynq.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/README.booting.zynq.md')
-rw-r--r--docs/README.booting.zynq.md194
1 files changed, 194 insertions, 0 deletions
diff --git a/docs/README.booting.zynq.md b/docs/README.booting.zynq.md
new file mode 100644
index 00000000..a9b6e8f3
--- /dev/null
+++ b/docs/README.booting.zynq.md
@@ -0,0 +1,194 @@
+# Booting OS Images on Zynq target boards
+
+Booting OS images on Zynq boards can be done using JTAG, SD, eMMC, QSPI and NAND
+boot modes.
+
+* [Setting Up the Target](#setting-up-the-target)
+* [Booting from JTAG](#booting-from-jtag)
+ * [Loading boot components using XSCT](#loading-boot-components-using-xsct)
+ * [Loading Kernel, Root Filesystem and U-boot boot script](#loading-kernel-root-filesystem-and-u-boot-boot-script)
+ * [Using XSCT](#using-xsct)
+ * [Using TFTP](#using-tftp)
+* [Booting from SD](#booting-from-sd)
+* [Booting from QSPI](#booting-from-qspi)
+
+## Setting Up the Target
+1. Connect a USB cable between the CP210x USB-to-UART bridge USB Mini-B on
+ the target and the USB port on the host machine.
+2. Connect a micro USB cable from the ZC702 board USB UART port (J17) to the USB
+ port on the host machine.
+3. Default UART terminal(serial port) settings is Speed `115200`, Data `8 bit`,
+ Parity `None`, Stop bits ` 1 bit` and Flow control `None`.
+4. Set the board to JTAG and other boot mode by setting the boot mode switch by
+ referring to board user guide. For zynq-generic machine configuration
+ file ZC702 evaluation board is used as reference and below is the
+ configuration boot mode settings (SW16).
+
+> **Note:** Switch OFF = 0 = Low; ON = 1 = High
+
+| Boot Mode | Mode Pins [0:4] | Mode SW16 [1:5] | Comments |
+|-----------|-----------------|-------------------------|------------------------|
+| JTAG | 00000 | OFF, OFF, OFF, OFF, OFF | PS JTAG |
+| QSPI | 01000 | OFF, ON, OFF, OFF, OFF | QSPI 32-bit addressing |
+| SD | 00110 | OFF, OFF, ON, ON, OFF | SD 2.0 |
+
+---
+## Booting from JTAG
+
+This boot flow requires the use of the AMD Xilinx tools, specifically XSCT and
+the associated JTAG device drivers. This also requires access to the JTAG interface
+on the board, a number of AMD Xilinx and third-party boards come with on-board JTAG
+modules.
+
+1. Source the Vivado or Vitis tools `settings.sh` scripts.
+2. Power on the board, Open the XSCT console in the Vitis IDE by clicking the
+ XSCT button. Alternatively, you can also open the XSCT console by selecting
+ Xilinx -> XSCT Console.
+```
+$ xsct
+```
+3. In the XSCT console, connect to the target over JTAG using the connect command.
+ Optionally user can use `-url` to specify the local/remote hw_server. The
+ connect command returns the channel ID of the connection.
+```
+xsct% connect
+```
+4. The targets command lists the available targets and allows you to select a
+ target using its ID. The targets are assigned IDs as they are discovered on
+ the JTAG chain, so the IDs can change from session to session.
+```
+xsct% targets
+```
+
+> **Note:** For non-interactive usage such as scripting, you can use the `-filter`
+ option to select a target instead of selecting the target using its ID.
+---
+### Loading boot components using XSCT
+
+1. Download the boot images for the target using XSCT with the `fpga` and `dow`
+ command. Zynq boot images will be located in the `${DEPLOY_DIR_IMAGE}`
+ directory.
+
+> **Note:** In yocto by default, ${DEPLOY_DIR_IMAGE}/system.dtb is used for both
+> u-boot and kernel.
+
+2. Program the bitstream or skip this step if you are loading from u-boot or linux.
+```
+xsct% fpga -no-revision-check ${DEPLOY_DIR_IMAGE}/download.bit
+```
+3. Select APU Cortex-A9 Core 0 to load and execute FSBL.
+```
+xsct% targets -set -nocase -filter {name =~ "arm*#0"}
+xsct% catch {stop}
+```
+5. Download and run FSBL from APU Cortex-A9 Core 0
+```
+xsct% dow ${DEPLOY_DIR_IMAGE}/zynq_fsbl.elf
+xsct% con
+```
+7. Now download U-boot.elf and Device tree to APU and execute.
+```
+xsct% stop
+xsct% dow ${DEPLOY_DIR_IMAGE}/u-boot.elf
+xsct% dow -data ${DEPLOY_DIR_IMAGE}/system.dtb 0x100000
+xsct% con
+```
+
+8. In the target Serial Terminal, press any key to stop the U-Boot auto-boot.
+```
+...
+Hit any key to stop autoboot: 0
+U-Boot>
+```
+---
+### Loading Kernel, Root Filesystem and U-boot boot script
+
+Load the images into the target DDR load address i.e.,
+`DDR base address + <image_offset>`.
+
+Below example uses base DDR address as 0x0 which matches in vivado address editor.
+
+| Image Type | Base DDR Address | Image Offset | Load Address in DDR |
+|--------------------|------------------|---------------|---------------------|
+| Kernel | 0x0 | 0x200000 | 0x200000 |
+| Device Tree | 0x0 | 0x100000 | 0x100000 |
+| Rootfs | 0x0 | 0x4000000 | 0x4000000 |
+| U-boot boot script | 0x0 | 0x3000000 | 0x3000000 |
+
+> **Note:**
+> 1. `<target-image>` refers to core-image-minimal or petalinux-image-minimal
+> 2. For pxeboot boot create a symlink for `<target-image>-${MACHINE}-${DATETIME}.cpio.gz.u-boot`
+> as shown `$ ln -sf ${DEPLOY_DIR_IMAGE}/<target-image>-${MACHINE}-${DATETIME}.cpio.gz.u-boot ${DEPLOY_DIR_IMAGE}/rootfs.cpio.gz.u-boot`
+> to ensure the INITRD name in pxeboot.cfg matches with image name.
+> 3. Whilst it is possible to load the images via JTAG this connection is slow and
+this process can take a long time to execute (more than 10 minutes). If your
+system has ethernet it is recommended that you use TFTP to load these images
+using U-Boot.
+> 4. If common ${DEPLOY_DIR_IMAGE}/system.dtb is used by u-boot and kernel, this
+> is already part of boot.bin we can skip loading dtb, else load kernel dtb.
+---
+#### Using XSCT
+
+1. Suspend the execution of active target using `stop` command in XSCT.
+```
+xsct% stop
+```
+2. Using the `dow` command to load the images into the target DDR/PL DDR load
+ address.
+```
+xsct% dow -data ${DEPLOY_DIR_IMAGE}/uImage 0x200000
+xsct% dow -data ${DEPLOY_DIR_IMAGE}/system.dtb 0x100000
+xsct% dow -data ${DEPLOY_DIR_IMAGE}/core-image-minimal-${MACHINE}.cpio.gz.u-boot 0x4000000
+xsct% dow -data ${DEPLOY_DIR_IMAGE}/boot.scr 0x3000000
+```
+---
+#### Using TFTP
+
+1. Configure the `ipaddr` and `serverip` of the U-Boot environment.
+```
+Versal> set serverip <server ip>
+Versal> set ipaddr <board ip>
+```
+2. Load the images to DDR address. Make sure images are copied to tftp directory.
+```
+U-Boot> tftpboot 0x200000 ${TFTPDIR}/uImage
+U-Boot> tftpboot 0x100000 ${TFTPDIR}/system.dtb
+U-Boot> tftpboot 0x4000000 ${TFTPDIR}/core-image-minimal-${MACHINE}.cpio.gz.u-boot
+U-Boot> tftpboot 0x3000000 ${TFTPDIR}/boot.scr
+```
+---
+### Booting Linux
+
+Once the images are loaded continue the execution.
+
+1. After loading images resume the execution of active target using the `con`
+command in XSCT shell, Skip step 1 for if you have used TFTP to load images.
+```
+xsct% con
+```
+2. Terminate xsct shell.
+```
+xsct% exit
+```
+3. In the target Serial Terminal, from U-Boot prompt run `boot` command.
+```
+U-Boot> boot
+```
+---
+## Booting from SD
+
+1. Load the SD card into the ZC702 board in the SD slot.
+2. Configure the ZC702 board to boot in SD-Boot mode (1-OFF, 2-OFF, 3-ON, 4-ON, 5-OFF)
+ by setting the SW6. Refer [Setting Up the Target](#setting-up-the-target).
+3. Follow SD boot instructions [README](README.booting.storage.md) for more details.
+---
+## Booting from QSPI
+
+1. To boot ZC702 board in QSPI boot mode, Power on the ZCU102 board and boot
+ using JTAG or SD boot mode, to ensure that U-Boot is running and also have
+ boot.bin copied to DDR location using XSCT `dow` or `tftpboot` or `fatload`
+ command.
+2. Follow Flash boot instructions [README](README.booting.flash.md) for more details.
+3. After flashing the images, turn off the power switch on the board, and change
+ the SW16 boot mode pin settings to QSPI boot mode (1-OFF, 2-ON, 3-OFF, 4-OFF, 5-OFF)
+ by setting the SW16. Refer [Setting Up the Target](#setting-up-the-target). \ No newline at end of file