aboutsummaryrefslogtreecommitdiffstats
path: root/docs/README.booting.flash.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/README.booting.flash.md')
-rw-r--r--docs/README.booting.flash.md133
1 files changed, 133 insertions, 0 deletions
diff --git a/docs/README.booting.flash.md b/docs/README.booting.flash.md
new file mode 100644
index 00000000..3bc39882
--- /dev/null
+++ b/docs/README.booting.flash.md
@@ -0,0 +1,133 @@
+# Booting OS Images from Flash Device
+
+Booting OS Images from flash devices such as QSPI/NOR/NAND/OSPI.
+
+* [U-boot boot scripts configurations](#u-boot-boot-scripts-configurations)
+* [Booting from QSPI or NOR or OSPI](#booting-from-qspi-or-nor-or-ospi)
+
+## U-boot boot scripts configurations
+
+1. In QSPI/OSPI/NAND boot modes the boot.scr partition offset is fixed for all the
+ platforms by default in u-boot, and you can change by updating
+ CONFIG_BOOT_SCRIPT_OFFSET in u-boot config. Default boot script size is
+ 512KB(script_size_f=0x80000).
+2. Below table describes boot.scr partition offset and load address for all the
+ platforms.
+
+| Device | Partition Offset address for boot.scr | Load address of boot.scr in DDR |
+|------------|---------------------------------------|----------------------------------------|
+| MicroBlaze | 0x1F00000 | DDR base address + DDR Size - 0xe00000 |
+| Zynq-7000 | 0xFC0000 | DDR base address + 0x3000000 |
+| ZynqMP | 0x3E80000 | DDR base address + 0x20000000 |
+| Versal | 0x7F80000 | DDR base address + 0x20000000 |
+
+## Booting from QSPI or NOR or OSPI
+
+This section demonstrates the booting OS images from QSPI boot mode. For this,
+you need to make sure you have QSPI interface on board or a QSPI daughter card.
+
+> **Note:** Instructions are same for QSPI or NOR and OSPI flash.
+
+1. For example we'll assume QSPI flash size is 128MB and default CONFIG_BOOT_SCRIPT_OFFSET
+ defined in u-boot.
+
+| Flash Partition Name | Partition Offset | Partition Size |
+|----------------------|------------------|----------------|
+| boot.bin | 0x0 | 30MB |
+| bootenv | 0x1E00000 | 256Kb |
+| kernel | 0x1E40000 | 33MB |
+| bootscr | 0x3E80000 | 1.5MB |
+| rootfs | 0x4000000 | 64MB |
+
+2. Create a flash partition device-tree nodes depending on your flash size. ex:
+```
+&qspi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ flash0: flash@0 {
+ spi-tx-bus-width=<4>;
+ spi-rx-bus-width=<4>;
+ partition@0 {
+ label = "boot";
+ reg = <0x00000000 0x01e00000>;
+ };
+ partition@1 {
+ label = "bootenv";
+ reg = <0x01e00000 0x00040000>;
+ };
+ partition@2 {
+ label = "kernel";
+ reg = <0x01e40000 0x02040000>;
+ };
+ partition@3 {
+ label = "bootscr";
+ reg = <0x03e80000 0x01800000>;
+ };
+ partition@4 {
+ label = "rootfs";
+ reg = <0x04000000 0x04000000>;
+ };
+ };
+};
+```
+3. Set the U-boot boot script variables to match the flash partition offsets in
+ local.conf
+```
+QSPI_KERNEL_OFFSET = "0x1E40000"
+QSPI_KERNEL_SIZE = "0x2040000"
+QSPI_RAMDISK_OFFSET = "0x4000000"
+QSPI_RAMDISK_SIZE = "0x4000000"
+```
+4. Build the images and make sure images are copied to tftp directory.
+5. Once images are built, to ensure taget is booted using JTAG or SD boot modes.
+6. Also have boot.bin copied to DDR location using XSCT `dow` or `tftpboot` or
+ `fatload` command.
+7. Halt at U-Boot then run the following commands to flash the images on the
+ QSPI flash.
+```
+# check QSPI is available or not
+U-Boot> sf probe 0 0 0
+
+# Erase the boot partition
+U-Boot> sf erase 0x0 0x1E00000
+
+# Copy the boot.bin to DDR location using tftpboot
+U-Boot> tftpboot 0x10000000 ${TFTPDIR}/boot.bin
+
+# Write boot.bin file image to flash partition
+U-Boot> sf write 0x10000000 0x0 ${filesize}
+
+# Erase the bootenv partition for env storage (saveenv).
+U-Boot> sf erase 0x1E00000 0x1E40000
+
+# Erase the kernel partition
+U-Boot> sf erase 0x1E40000 0x2040000
+
+# Copy the Image file to DDR location using tftpboot
+U-Boot> tftpboot 0x10000000 ${TFTPDIR}/Image
+
+# Write kernel image to flash partition
+U-Boot> sf write 0x10000000 0x1E40000 ${filesize}
+
+# Erase the bootscr partition
+U-Boot> sf erase 0x3E80000 0x1800000
+
+# Copy the boot.scr file to DDR location using tftpboot
+U-Boot> tftpboot 0x10000000 ${TFTPDIR}/boot.scr
+
+# Write boot.scr file to flash partition
+U-Boot> sf write 0x10000000 0x3E80000 ${filesize}
+
+# Erase the rootfs partition
+U-Boot> sf erase 0x4000000 0x4000000
+
+# Copy the rootfs.cpio.gz.u-boot file to DDR location using tftpboot
+U-Boot> tftpboot 0x10000000 ${TFTPDIR}/rootfs.cpio.gz.u-boot
+
+# Write rootfs image to flash partition
+U-Boot> sf write 0x10000000 0x4000000 ${filesize}
+```
+8. After flashing the images, turn off the board and change the boot mode pin
+ settings to QSPI boot mode.
+9. Power cycle the board. The board now boots up using the images in the QSPI
+ flash.