Modifying Boot Flash Layout

Hi everyone,

I have gone through the reference design for booting the Arria 10 board as described here:

It works for the development kit. However, the board I am need to get booting from flash only has 512 Mb as opposed to 1 Gb storage the reference design uses. This should be possible, according to the A10 Supported Flash Devices list (512 Mb storage is supported for boot).

My guess is that I need to edit the files listed in the notes of the flash layout in the reference design

Location of RBF file, Linux kernel and Linux Device Tree are hardcoded in U-Boot source code as U-Boot environment variables (qspirbfaddr, qspibootimageaddr, qspifdtaddr). Their default values can be changed by editing the U-Boot source code file include/configs/socfpga_arria10.h.
Location of root file system is defined in the Linux Device Tree.

Can anyone tell me if I’m approaching this correctly? Has anyone had to edit the flash layout in the past and can tell me if it is feasible? Thanks for any help you can provide.



I have done something similar and modifying those files will remap the QSPI partitions as expected. In my case I kept a 1Gb device but partitioned it up to have redundant FPGA images (select-able during u-boot). I also mapped the new partitions in Linux via device tree modifications.


Hi Steve,

Thanks for the reply. Good to know it is possible to modify the boot as necessary. I have 1 Gb total storage using two flash devices, but I’ve read that the U-boot only uses chip 0. I asked if it was possible to boot from 512 Mb in case it’s not possible to use the second flash, but I have no idea if it is or isn’t and have no idea how to find out.

I don’t suppose you know if it is possible? I could partition the files to have everything aside from the root filesystem fitting on CS0, but I don’t know if its possible to modify U-boot to bounce through flash devices.


I would assume its possible but may require some heavier modifications to the Uboot code. You would have to see how the chip selects are handled to see if you can select the other device. If it was up in the Linux world it is as simple as changing the device tree settings.