Visible to Intel only — GUID: oiw1540272401352
Ixiasoft
1. Overview
2. Use Cases
3. Quad SPI Flash Layout
4. Intel® Quartus® Prime Software and Tool Support
5. Software Support
6. Flash Corruption - Detection and Recovery
7. Remote System Update Example
8. Version Compatibility Considerations
9. Using RSU with HPS First
A. Configuration Flow Diagrams
B. RSU Status and Error Codes
C. U-Boot RSU Reference Information
D. LIBRSU Reference Information
E. Combined Application Images
10. Document Revision History for the SoC Remote System Update User Guide
2.1. Manufacturing
2.2. Application Image Boot
2.3. Factory Image Boot
2.4. Modifying the List of Application Images
2.5. Querying RSU Status
2.6. Loading a Specific Image
2.7. Protected Access to Flash
2.8. Remote System Update Watchdog
2.9. RSU Notify
2.10. Updating the Factory Image
2.11. Updating the Decision Firmware
2.12. Retrying when Configuration Fails
2.13. Querying the Decision Firmware Version
7.2.1. Setting up the Environment
7.2.2. Building the Hardware Projects
7.2.3. Building Arm* Trusted Firmware
7.2.4. Building U-Boot
7.2.5. Creating the Initial Flash Image
7.2.6. Creating the Application Image
7.2.7. Creating the Factory Update Image
7.2.8. Creating the Decision Firmware Update Image
7.2.9. Building Linux*
7.2.10. Building ZLIB
7.2.11. Building LIBRSU and RSU Client
7.2.12. Building the Root File System
7.2.13. Building the SD Card
C.6.1. rsu_init
C.6.2. rsu_exit
C.6.3. rsu_slot_count
C.6.4. rsu_slot_by_name
C.6.5. rsu_slot_get_info
C.6.6. rsu_slot_size
C.6.7. rsu_slot_priority
C.6.8. rsu_slot_erase
C.6.9. rsu_slot_program_buf
C.6.10. rsu_slot_program_factory_update_buf
C.6.11. rsu_slot_program_buf_raw
C.6.12. rsu_slot_verify_buf
C.6.13. rsu_slot_verify_buf_raw
C.6.14. rsu_slot_enable
C.6.15. rsu_slot_disable
C.6.16. rsu_slot_load
C.6.17. rsu_slot_load_factory
C.6.18. rsu_slot_rename
C.6.19. rsu_slot_delete
C.6.20. rsu_slot_create
C.6.21. rsu_status_log
C.6.22. rsu_notify
C.6.23. rsu_clear_error_status
C.6.24. rsu_reset_retry_counter
C.6.25. rsu_dcmf_version
C.6.26. rsu_max_retry
C.6.27. rsu_dcmf_status
C.6.28. rsu_create_empty_cpb
C.6.29. rsu_restore_cpb
C.6.30. rsu_save_cpb
C.6.31. rsu_restore_spt
C.6.32. rsu_save_spt
C.6.33. rsu_running_factory
C.7.1. dtb
C.7.2. list
C.7.3. slot_by_name
C.7.4. slot_count
C.7.5. slot_disable
C.7.6. slot_enable
C.7.7. slot_erase
C.7.8. slot_get_info
C.7.9. slot_load
C.7.10. slot_load_factory
C.7.11. slot_priority
C.7.12. slot_program_buf
C.7.13. slot_program_buf_raw
C.7.14. slot_program_factory_update_buf
C.7.15. slot_rename
C.7.16. slot_delete
C.7.17. slot_create
C.7.18. slot_size
C.7.19. slot_verify_buf
C.7.20. slot_verify_buf_raw
C.7.21. status_log
C.7.22. update
C.7.23. notify
C.7.24. clear_error_status
C.7.25. reset_retry_counter
C.7.26. display_dcmf_version
C.7.27. display_dcmf_status
C.7.28. display_max_retry
C.7.29. restore_spt
C.7.30. save_spt
C.7.31. create_empty_cpb
C.7.32. restore_cpb
C.7.33. save_cpb
C.7.34. check_running_factory
D.6.1. librsu_init
D.6.2. librsu_exit
D.6.3. rsu_slot_count
D.6.4. rsu_slot_by_name
D.6.5. rsu_slot_get_info
D.6.6. rsu_slot_size
D.6.7. rsu_slot_priority
D.6.8. rsu_slot_erase
D.6.9. rsu_slot_program_buf
D.6.10. rsu_slot_program_factory_update_buf
D.6.11. rsu_slot_program_file
D.6.12. rsu_slot_program_factory_update_file
D.6.13. rsu_slot_program_buf_raw
D.6.14. rsu_slot_program_file_raw
D.6.15. rsu_slot_verify_buf
D.6.16. rsu_slot_verify_file
D.6.17. rsu_slot_verify_buf_raw
D.6.18. rsu_slot_verify_file_raw
D.6.19. rsu_slot_program_callback
D.6.20. rsu_slot_program_callback_raw
D.6.21. rsu_slot_verify_callback
D.6.22. rsu_slot_verify_callback_raw
D.6.23. rsu_slot_copy_to_file
D.6.24. rsu_slot_enable
D.6.25. rsu_slot_disable
D.6.26. rsu_slot_load_after_reboot
D.6.27. rsu_slot_load_factory_after_reboot
D.6.28. rsu_slot_rename
D.6.29. rsu_slot_delete
D.6.30. rsu_slot_create
D.6.31. rsu_status_log
D.6.32. rsu_notify
D.6.33. rsu_clear_error_status
D.6.34. rsu_reset_retry_counter
D.6.35. rsu_dcmf_version
D.6.36. rsu_max_retry
D.6.37. rsu_dcmf_status
D.6.38. rsu_save_spt
D.6.39. rsu_restore_spt
D.6.40. rsu_save_cpb
D.6.41. rsu_create_empty_cpb
D.6.42. rsu_restore_cpb
D.6.43. rsu_running_factory
D.7.1. count
D.7.2. list
D.7.3. size
D.7.4. priority
D.7.5. enable
D.7.6. disable
D.7.7. request
D.7.8. request-factory
D.7.9. erase
D.7.10. add
D.7.11. add-factory-update
D.7.12. add-raw
D.7.13. verify
D.7.14. verify-raw
D.7.15. copy
D.7.16. log
D.7.17. notify
D.7.18. clear-error-status
D.7.19. reset-retry-counter
D.7.20. display-dcmf-version
D.7.21. display-dcmf-status
D.7.22. display-max-retry
D.7.23. create-slot
D.7.24. delete-slot
D.7.25. restore-spt
D.7.26. save-spt
D.7.27. create-empty-cpb
D.7.28. restore-cpb
D.7.29. save-cpb
D.7.30. check-running-factory
D.7.31. help
Visible to Intel only — GUID: oiw1540272401352
Ixiasoft
8.5.2. Using Multiple SSBLs with QSPI
This section presents the recommended approach to support multiple SSBLs when they are stored in the SDM QSPI flash.
Changes required in the Programming File Generator, at initial image creation time:
- Use the default naming scheme for the bitstream partitions:
- FACTORY_IMAGE for factory image
- P1, P2, and so on for application images
- Make copies of the U-Boot image files (u-boot-socfpga/u-boot-dtb.img) to have the .bin extension, as that is what the Programming File Generator requires for binary files. For example name them u-boot-socfpga/u-boot-dtb.img.bin
Attention: Intel® Quartus® Prime Programming File Generator versions prior to 21.2 have an issue which causes block partitions (specified by entering the start and end address of the partition) containing raw data files (.hex, .bin, .puf or .wkey) to be resized to match the size of the raw data file. When using these versions, pad the raw file with 0xFFs to match the size of the partition.Attention: Intel® Quartus® Prime Programming File Generator version 21.2 has an issue which causes block partitions (specified by entering the start and end address of the partition) containing raw data files (.hex, .bin, .puf or .wkey) to have incorrect content. Intel® Quartus® Prime Pro Edition software version 21.2 Patch 0.14 fixes this issue.
- In the Input Files tab, click the Add Raw button, then select the .bin file filter at the bottom and browse for the renamed U-Boot image file. Once added, click the file to select it, then click Properties on the right. Make sure to change the “Bit-swap” option from “off” to “on”. This is telling the PFG that it is a regular binary file.
- Create new partitions to contain SSBLs, one for each bitstream:
- SSBL partitions are large enough for the U-Boot image (1 MB suffices for most applications)
- Name the partition with a name that is derived from the bitstream partition name, and is less than 15 characters long (limit for SPT partition name excluding null terminator). For example “FACTORY_IM.SSBL”, “P1.SSBL”, etc.
- For the initially loaded SSBL partitions, select the corresponding U-Boot binary image files as Input file so that they are loaded with the SSBLs.
- Generate the initial image.
Changes required in FSBL:
- Query SDM and read flash to determine all the partition information, and the currently running bitstream location in flash.
- Look up the currently running bitstream location in the list of the SPT partitions to determine the partition containing the currently running bitstream.
- Add the “.SSBL” to the name of the currently running partition and find the SSBL partition using that name. Treat “FACTORY_IMAGE” differently as adding “.SSBL” to it can make it longer than the maximum allowable of 15 characters.
- Instead of loading the SSBL for a hardcoded address, load it from the partition found at the previous step.
If the SSBL is configured with read-only environment, then no changes are needed. If the SSBL is configured with a modifiable environment, then the following changes are recommended:
- Make the SSBL partitions larger than the maximum anticipated U-Boot image, to accommodate the environment. 1 MB can still suffice, as typical U-Boot image is smaller, and typical environment size is 4 KB.
- Change the hardcoded value for the SSBL environment address to query SDM for partitioning information and currently running image to determine the name of the current SSBL partition, and use its top portion as environment.
The recommended application image update procedure also changes:
- Use LIBRSU to erase the application image partition. This also disables it, removing it from the CPB.
- Use MTD to erase SSBL partition instead of LIBRSU because it does not support erasing raw partitions yet, just bitstreams.
- Use MTD to write the new contents of the SSBL partition instead of LIBRSU because it does not support writing raw partitions, just bitstreams.
- Use LIBRSU to write the new application image. This also enables it, putting it as highest priority in the CPB.