Skip to content

Commit acb9d83

Browse files
dgarskedanielinux
authored andcommitted
Fixes for Xilinx Zynq UltraScale+ MPSoC:
* Fixes to support wolfBoot native make and gcc-arm cross compiler. ZD 18159 * Adjust wolfBoot linker script to not use 0 base, instead use end of DDR - 1MB. * Fixed QSPI bare-metal driver for multi-sector and read return code. * Fixed issue with Xilinx XMSS IMAGE_HEADER_SIZE in documentation. It should be 5000 bytes. * Performance optimizations for QSPI: - Allow configuration of SPI clock. - Improve GSPI FIFO TX/RX fill. * Added support for FAST_MEMCPY that supports an aligned 32-bit. * Added Flattened uImage Tree (FIT) image (FDT format). * Added Aarch64 support for FDT fixups. * Added Aarch64 startup to support EL2 with cache/MMU. * Added documentation about exception levels * Moved zynqmp registers to header. * Fix printf uart_writenum "buf" len. * Updated fdt-parser to support saving off larger data images.
1 parent a04f234 commit acb9d83

File tree

20 files changed

+2085
-862
lines changed

20 files changed

+2085
-862
lines changed

IDE/XilinxSDK/.cproject

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@
131131
</toolChain>
132132
</folderInfo>
133133
<sourceEntries>
134-
<entry excluding="src/qspi_flash.c|IDE/AURIX|IDE/CCS|IDE/MPLAB|IDE/Renesas|.git|IDE/IAR|test-app|tools|lib/wolfPKCS11|lib/wolfTPM|lib/wolfssl/linuxkm|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-aes-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-curve25519.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-sha256-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-sha3-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-sha512-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-curve25519.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-sha3-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-sha512-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-aes-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-curve25519.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha256-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha3-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha512-asm.S|lib/wolfssl/wolfcrypt/src/port/autosar|lib/wolfssl/wrapper|lib/wolfssl/zephyr|src/boot_x86_fsp.c|src/boot_x86_fsp_start.S|src/boot_x86_fsp_payload.c|src/boot_x86_64.c|src/boot_renesas.c|src/boot_renesas_start.S|src/boot_ppc_start.S|src/boot_ppc_mp.S|src/boot_ppc.c|src/x86|lib/wolfTPM/examples|lib/wolfTPM/tests|lib/wolfTPM/IDE|lib/wolfssl/tests|lib/wolfssl/tirtos|lib/wolfssl/swig|lib/wolfssl/mqx|lib/wolfssl/mplabx|lib/wolfssl/IPP|lib/wolfssl/mcapi|lib/wolfssl/testsuite|lib/wolfssl/examples|lib/wolfssl/IDE|lib/wolfssl/wolfcrypt/user-crypto|lib/wolfssl/wolfcrypt/src/aes_asm.S|lib/wolfssl/wolfcrypt/src/aes_gcm_asm.S|lib/wolfssl/wolfcrypt/src/aes_gcm_x86_asm.S|lib/wolfssl/wolfcrypt/src/aes_xts_asm.S|lib/wolfssl/wolfcrypt/src/chacha_asm.S|lib/wolfssl/wolfcrypt/src/fe_x25519_asm.S|lib/wolfssl/wolfcrypt/src/poly1305_asm.S|lib/wolfssl/wolfcrypt/src/sha256_asm.S|lib/wolfssl/wolfcrypt/src/sha3_asm.S|lib/wolfssl/wolfcrypt/src/sha512_asm.S|lib/wolfssl/wolfcrypt/src/sm3_asm.S|lib/wolfssl/wolfcrypt/src/sp_sm2_x86_64_asm.S|lib/wolfssl/wolfcrypt/src/sp_x86_64_asm.S|lib/wolfssl/wolfcrypt/src/wc_kyber_asm.S|src/vector_riscv.S|src/update_flash_hwswap.c|src/update_flash.c|src/boot_riscv.c|src/boot_arm.c|hal/aurix_tc3xx.c|hal/cc26x2.c|hal/hifive1.c|hal/imx_rt.c|hal/kinetis.c|hal/kontron_vx3060_s2.c|hal/kontron_vx3060_s2_loader.c|hal/library.c|hal/lpc.c|hal/mcxa.c|hal/nrf52.c|hal/nxp_p1021.c|hal/nxp_ppc.c|hal/nxp_t1024.c|hal/nxp_t2080.c|hal/psoc6.c|hal/raspi3.c|hal/renesas-ra.c|hal/renesas-rx.c|hal/renesas-rz.c|hal/rx65n.c|hal/rx72n.c|hal/same51.c|hal/samr21.c|hal/sim.c|hal/skeleton.c|hal/stm32c0.c|hal/stm32f4.c|hal/stm32f7.c|hal/stm32g0.c|hal/stm32h5.c|hal/stm32h7.c|hal/stm32l0.c|hal/stm32l4.c|hal/stm32l5.c|hal/stm32_tz.c|hal/stm32u5.c|hal/stm32wb.c|hal/ti_hercules.c|hal/x86_64_efi.c|hal/x86_fsp_qemu.c|hal/x86_fsp_qemu_loader.c|hal/x86_fsp_tgl.c|hal/x86_uart.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
134+
<entry excluding="lib/wolfssl/wolfcrypt/src/port/arm/thumb2-poly1305-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-kyber-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-chacha-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-kyber-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-poly1305-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-kyber-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-chacha-asm.S|src/qspi_flash.c|IDE/AURIX|IDE/CCS|IDE/MPLAB|IDE/Renesas|.git|IDE/IAR|test-app|tools|lib/wolfPKCS11|lib/wolfTPM|lib/wolfssl/linuxkm|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-aes-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-curve25519.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-sha256-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-sha3-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-sha512-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-curve25519.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-sha3-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-sha512-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-aes-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-curve25519.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha256-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha3-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha512-asm.S|lib/wolfssl/wolfcrypt/src/port/autosar|lib/wolfssl/wrapper|lib/wolfssl/zephyr|src/boot_x86_fsp.c|src/boot_x86_fsp_start.S|src/boot_x86_fsp_payload.c|src/boot_x86_64.c|src/boot_renesas.c|src/boot_renesas_start.S|src/boot_ppc_start.S|src/boot_ppc_mp.S|src/boot_ppc.c|src/x86|lib/wolfTPM/examples|lib/wolfTPM/tests|lib/wolfTPM/IDE|lib/wolfssl/tests|lib/wolfssl/tirtos|lib/wolfssl/swig|lib/wolfssl/mqx|lib/wolfssl/mplabx|lib/wolfssl/IPP|lib/wolfssl/mcapi|lib/wolfssl/testsuite|lib/wolfssl/examples|lib/wolfssl/IDE|lib/wolfssl/wolfcrypt/user-crypto|lib/wolfssl/wolfcrypt/src/aes_asm.S|lib/wolfssl/wolfcrypt/src/aes_gcm_asm.S|lib/wolfssl/wolfcrypt/src/aes_gcm_x86_asm.S|lib/wolfssl/wolfcrypt/src/aes_xts_asm.S|lib/wolfssl/wolfcrypt/src/chacha_asm.S|lib/wolfssl/wolfcrypt/src/fe_x25519_asm.S|lib/wolfssl/wolfcrypt/src/poly1305_asm.S|lib/wolfssl/wolfcrypt/src/sha256_asm.S|lib/wolfssl/wolfcrypt/src/sha3_asm.S|lib/wolfssl/wolfcrypt/src/sha512_asm.S|lib/wolfssl/wolfcrypt/src/sm3_asm.S|lib/wolfssl/wolfcrypt/src/sp_sm2_x86_64_asm.S|lib/wolfssl/wolfcrypt/src/sp_x86_64_asm.S|lib/wolfssl/wolfcrypt/src/wc_kyber_asm.S|src/vector_riscv.S|src/update_flash_hwswap.c|src/update_flash.c|src/boot_riscv.c|src/boot_arm.c|src/boot_arm32_start.S|src/boot_arm32.c|hal/aurix_tc3xx.c|hal/cc26x2.c|hal/hifive1.c|hal/imx_rt.c|hal/kinetis.c|hal/kontron_vx3060_s2.c|hal/kontron_vx3060_s2_loader.c|hal/library.c|hal/lpc.c|hal/mcxa.c|hal/nrf52.c|hal/nxp_p1021.c|hal/nxp_ppc.c|hal/nxp_t1024.c|hal/nxp_t2080.c|hal/psoc6.c|hal/raspi3.c|hal/renesas-ra.c|hal/renesas-rx.c|hal/renesas-rz.c|hal/rx65n.c|hal/rx72n.c|hal/same51.c|hal/sama5d3.c|hal/samr21.c|hal/sim.c|hal/skeleton.c|hal/stm32c0.c|hal/stm32f4.c|hal/stm32f7.c|hal/stm32g0.c|hal/stm32h5.c|hal/stm32h7.c|hal/stm32l0.c|hal/stm32l4.c|hal/stm32l5.c|hal/stm32_tz.c|hal/stm32u5.c|hal/stm32wb.c|hal/ti_hercules.c|hal/x86_64_efi.c|hal/x86_fsp_qemu.c|hal/x86_fsp_qemu_loader.c|hal/x86_fsp_tgl.c|hal/x86_uart.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
135135
</sourceEntries>
136136
</configuration>
137137
</storageModule>
@@ -267,7 +267,7 @@
267267
</toolChain>
268268
</folderInfo>
269269
<sourceEntries>
270-
<entry excluding="src/qspi_flash.c|IDE/AURIX|IDE/CCS|IDE/MPLAB|IDE/Renesas|.git|IDE/IAR|test-app|tools|lib/wolfPKCS11|lib/wolfTPM|lib/wolfssl/linuxkm|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-aes-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-curve25519.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-sha256-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-sha3-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-sha512-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-curve25519.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-sha3-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-sha512-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-aes-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-curve25519.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha256-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha3-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha512-asm.S|lib/wolfssl/wolfcrypt/src/port/autosar|lib/wolfssl/wrapper|lib/wolfssl/zephyr|src/boot_x86_fsp.c|src/boot_x86_fsp_start.S|src/boot_x86_fsp_payload.c|src/boot_x86_64.c|src/boot_renesas.c|src/boot_renesas_start.S|src/boot_ppc_start.S|src/boot_ppc_mp.S|src/boot_ppc.c|src/x86|lib/wolfTPM/examples|lib/wolfTPM/tests|lib/wolfTPM/IDE|lib/wolfssl/tests|lib/wolfssl/tirtos|lib/wolfssl/swig|lib/wolfssl/mqx|lib/wolfssl/mplabx|lib/wolfssl/IPP|lib/wolfssl/mcapi|lib/wolfssl/testsuite|lib/wolfssl/examples|lib/wolfssl/IDE|lib/wolfssl/wolfcrypt/user-crypto|lib/wolfssl/wolfcrypt/src/aes_asm.S|lib/wolfssl/wolfcrypt/src/aes_gcm_asm.S|lib/wolfssl/wolfcrypt/src/aes_gcm_x86_asm.S|lib/wolfssl/wolfcrypt/src/aes_xts_asm.S|lib/wolfssl/wolfcrypt/src/chacha_asm.S|lib/wolfssl/wolfcrypt/src/fe_x25519_asm.S|lib/wolfssl/wolfcrypt/src/poly1305_asm.S|lib/wolfssl/wolfcrypt/src/sha256_asm.S|lib/wolfssl/wolfcrypt/src/sha3_asm.S|lib/wolfssl/wolfcrypt/src/sha512_asm.S|lib/wolfssl/wolfcrypt/src/sm3_asm.S|lib/wolfssl/wolfcrypt/src/sp_sm2_x86_64_asm.S|lib/wolfssl/wolfcrypt/src/sp_x86_64_asm.S|lib/wolfssl/wolfcrypt/src/wc_kyber_asm.S|src/vector_riscv.S|src/update_flash_hwswap.c|src/update_flash.c|src/boot_riscv.c|src/boot_arm.c|hal/aurix_tc3xx.c|hal/cc26x2.c|hal/hifive1.c|hal/imx_rt.c|hal/kinetis.c|hal/kontron_vx3060_s2.c|hal/kontron_vx3060_s2_loader.c|hal/library.c|hal/lpc.c|hal/mcxa.c|hal/nrf52.c|hal/nxp_p1021.c|hal/nxp_ppc.c|hal/nxp_t1024.c|hal/nxp_t2080.c|hal/psoc6.c|hal/raspi3.c|hal/renesas-ra.c|hal/renesas-rx.c|hal/renesas-rz.c|hal/rx65n.c|hal/rx72n.c|hal/same51.c|hal/samr21.c|hal/sim.c|hal/skeleton.c|hal/stm32c0.c|hal/stm32f4.c|hal/stm32f7.c|hal/stm32g0.c|hal/stm32h5.c|hal/stm32h7.c|hal/stm32l0.c|hal/stm32l4.c|hal/stm32l5.c|hal/stm32_tz.c|hal/stm32u5.c|hal/stm32wb.c|hal/ti_hercules.c|hal/x86_64_efi.c|hal/x86_fsp_qemu.c|hal/x86_fsp_qemu_loader.c|hal/x86_fsp_tgl.c|hal/x86_uart.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
270+
<entry excluding="lib/wolfssl/wolfcrypt/src/port/arm/thumb2-poly1305-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-kyber-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-chacha-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-kyber-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-poly1305-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-kyber-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-chacha-asm.S|src/qspi_flash.c|IDE/AURIX|IDE/CCS|IDE/MPLAB|IDE/Renesas|.git|IDE/IAR|test-app|tools|lib/wolfPKCS11|lib/wolfTPM|lib/wolfssl/linuxkm|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-aes-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-curve25519.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-sha256-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-sha3-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-32-sha512-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-curve25519.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-sha3-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/armv8-sha512-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-aes-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-curve25519.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha256-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha3-asm.S|lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha512-asm.S|lib/wolfssl/wolfcrypt/src/port/autosar|lib/wolfssl/wrapper|lib/wolfssl/zephyr|src/boot_x86_fsp.c|src/boot_x86_fsp_start.S|src/boot_x86_fsp_payload.c|src/boot_x86_64.c|src/boot_renesas.c|src/boot_renesas_start.S|src/boot_ppc_start.S|src/boot_ppc_mp.S|src/boot_ppc.c|src/x86|lib/wolfTPM/examples|lib/wolfTPM/tests|lib/wolfTPM/IDE|lib/wolfssl/tests|lib/wolfssl/tirtos|lib/wolfssl/swig|lib/wolfssl/mqx|lib/wolfssl/mplabx|lib/wolfssl/IPP|lib/wolfssl/mcapi|lib/wolfssl/testsuite|lib/wolfssl/examples|lib/wolfssl/IDE|lib/wolfssl/wolfcrypt/user-crypto|lib/wolfssl/wolfcrypt/src/aes_asm.S|lib/wolfssl/wolfcrypt/src/aes_gcm_asm.S|lib/wolfssl/wolfcrypt/src/aes_gcm_x86_asm.S|lib/wolfssl/wolfcrypt/src/aes_xts_asm.S|lib/wolfssl/wolfcrypt/src/chacha_asm.S|lib/wolfssl/wolfcrypt/src/fe_x25519_asm.S|lib/wolfssl/wolfcrypt/src/poly1305_asm.S|lib/wolfssl/wolfcrypt/src/sha256_asm.S|lib/wolfssl/wolfcrypt/src/sha3_asm.S|lib/wolfssl/wolfcrypt/src/sha512_asm.S|lib/wolfssl/wolfcrypt/src/sm3_asm.S|lib/wolfssl/wolfcrypt/src/sp_sm2_x86_64_asm.S|lib/wolfssl/wolfcrypt/src/sp_x86_64_asm.S|lib/wolfssl/wolfcrypt/src/wc_kyber_asm.S|src/vector_riscv.S|src/update_flash_hwswap.c|src/update_flash.c|src/boot_riscv.c|src/boot_arm.c|src/boot_arm32_start.S|src/boot_arm32.c|hal/aurix_tc3xx.c|hal/cc26x2.c|hal/hifive1.c|hal/imx_rt.c|hal/kinetis.c|hal/kontron_vx3060_s2.c|hal/kontron_vx3060_s2_loader.c|hal/library.c|hal/lpc.c|hal/mcxa.c|hal/nrf52.c|hal/nxp_p1021.c|hal/nxp_ppc.c|hal/nxp_t1024.c|hal/nxp_t2080.c|hal/psoc6.c|hal/raspi3.c|hal/renesas-ra.c|hal/renesas-rx.c|hal/renesas-rz.c|hal/rx65n.c|hal/rx72n.c|hal/same51.c|hal/sama5d3.c|hal/samr21.c|hal/sim.c|hal/skeleton.c|hal/stm32c0.c|hal/stm32f4.c|hal/stm32f7.c|hal/stm32g0.c|hal/stm32h5.c|hal/stm32h7.c|hal/stm32l0.c|hal/stm32l4.c|hal/stm32l5.c|hal/stm32_tz.c|hal/stm32u5.c|hal/stm32wb.c|hal/ti_hercules.c|hal/x86_64_efi.c|hal/x86_fsp_qemu.c|hal/x86_fsp_qemu_loader.c|hal/x86_fsp_tgl.c|hal/x86_uart.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
271271
</sourceEntries>
272272
</configuration>
273273
</storageModule>

IDE/XilinxSDK/README.md

Lines changed: 60 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,51 @@ These template settings are also in this `.cproject` as preprocessor macros. The
4545
#define WOLFBOOT_LOAD_DTS_ADDRESS 0x11800000
4646
```
4747

48+
The default .cproject build symbols are:
49+
50+
```
51+
ARCH_AARCH64
52+
ARCH_FLASH_OFFSET=0x0
53+
CORTEX_A53
54+
DEBUG_ZYNQ=1
55+
EXT_FLASH=1
56+
FILL_BYTE=0xFF
57+
IMAGE_HEADER_SIZE=1024
58+
MMU
59+
NO_QNX
60+
NO_XIP
61+
PART_BOOT_EXT=1
62+
PART_SWAP_EXT=1
63+
PART_UPDATE_EXT=1
64+
TARGET_zynq
65+
WC_HASH_DATA_ALIGNMENT=8
66+
WOLFBOOT_ARCH_AARCH64
67+
WOLFBOOT_DUALBOOT
68+
WOLFBOOT_ELF
69+
WOLFBOOT_HASH_SHA3_384
70+
WOLFBOOT_ORIGIN=0x0
71+
WOLFBOOT_SHA_BLOCK_SIZE=4096
72+
WOLFBOOT_SIGN_RSA4096
73+
WOLFBOOT_UBOOT_LEGACY
74+
```
75+
4876
Note: If not using Position Independent Code (PIC) the linker script `ldscript.ld` must have the start address offset to match the `WOLFBOOT_LOAD_ADDRESS`.
4977

78+
79+
## Zynq UltraScale+ ARMv8 Crypto Extensions
80+
81+
To enable ARM assembly speedups for SHA:
82+
83+
1) Add these build symbols:
84+
85+
```
86+
WOLFSSL_ARMASM
87+
WOLFSSL_ARMASM_INLINE
88+
```
89+
90+
2) Add these compiler misc flags: `-mcpu=generic+crypto -mstrict-align -DWOLFSSL_AARCH64_NO_SQRMLSH`
91+
92+
5093
## Generate signing key
5194

5295
The keygen tool creates an RSA 4096-bit private key (`wolfboot_signing_private_key.der`) and exports the public key to `src/keystore.c` for wolfBoot to use at compile-time as the default root-of-trust.
@@ -91,9 +134,13 @@ Xilinx uses a `bootgen` tool for generating a boot binary image that has Xilinx
91134
* Use "offset=" option to place the application into a specific location in flash.
92135
* Use "load=" option to have FSBL load into specific location in RAM.
93136

94-
Generating a boot.bin (from boot.bif).
95-
Run the Xilinx -> Vitis Shell and cd into the workspace root.
137+
Default install locations for bootgen tools:
138+
* Linux: `/tools/Xilinx/Vitis/2022.1/bin`
139+
* Windows: `C:\Xilinx\Vitis\2022.1\bin`
96140

141+
Open the Vitis Shell from the IDE by using file menu "Xilinx" -> "Vitis Shell".
142+
143+
Generating a boot.bin (from boot.bif).
97144
Example boot.bif in workspace root:
98145

99146
```
@@ -102,11 +149,15 @@ Example boot.bif in workspace root:
102149
the_ROM_image:
103150
{
104151
[bootloader, destination_cpu=a53-0] zcu102\zynqmp_fsbl\fsbl_a53.elf
105-
[destination_cpu=a53-0, exception_level=el-1] wolfboot\Debug\wolfboot.elf
152+
[destination_cpu=a53-0, exception_level=el-2] wolfboot\Debug\wolfboot.elf
106153
[destination_cpu=a53-0, partition_owner=uboot, offset=0x800000] hello_world\Debug\hello_world_v1_signed.bin
107154
}
108155
```
109156

157+
You can also use exception level 3 or 1 depending on your needs.
158+
159+
From the workspace root:
160+
110161
```sh
111162
bootgen -image boot.bif -arch zynqmp -w -o BOOT.bin
112163

@@ -184,10 +235,10 @@ Successfully ran Hello World application
184235
```
185236
186237
6. Build “boot.bin” image:
187-
* `bootgen.exe -image boot.bif -arch zynqmp -o i BOOT.BIN -w`
238+
* `bootgen -image boot.bif -arch zynqmp -o i BOOT.BIN -w`
188239
189-
Note: To generate a report of a boot.bin use the `bootgen_utility`:
190-
`bootgen_utility -arch zynqmp -bin boot.bin -out boot.bin.txt`
240+
Note: To generate a report of a boot.bin use the `bootgen_utility` or after 2022.1 use `bootgen -read`:
241+
`bootgen -arch zynqmp -read BOOT.BIN`
191242
192243
## Post Quantum
193244
@@ -207,7 +258,8 @@ WOLFSSL_XMSS_VERIFY_ONLY
207258
WOLFSSL_XMSS_MAX_HEIGHT=32
208259
WOLFBOOT_SHA_BLOCK_SIZE=4096
209260
IMAGE_SIGNATURE_SIZE=2500
210-
IMAGE_HEADER_SIZE=4096
261+
XMSS_IMAGE_SIGNATURE_SIZE=2500
262+
IMAGE_HEADER_SIZE=5000
211263
```
212264
213265
2) Create and sign image:
@@ -300,3 +352,4 @@ Output image(s) successfully created.
300352
### References:
301353
* [ZAPP1319](https://www.xilinx.com/support/documentation/application_notes/xapp1319-zynq-usp-prog-nvm.pdf): Programming BBRAM and eFUSEs
302354
* [UG1283](https://www.xilinx.com/support/documentation/sw_manuals/xilinx2018_2/ug1283-bootgen-user-guide.pdf): Bootgen User Guide
355+
* [Using Cryptography in Zynq UltraScale MPSoC](https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842541/Using+Cryptography+in+Zynq+UltraScale+MPSoC)

arch.mk

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ WOLFCRYPT_OBJS+=./lib/wolfssl/wolfcrypt/src/sha256.o \
3737

3838

3939
ifeq ($(ARCH),x86_64)
40-
CFLAGS+=-DARCH_x86_64
40+
CFLAGS+=-DARCH_x86_64 -DFAST_MEMCPY
4141
ifeq ($(FORCE_32BIT),1)
4242
NO_ASM=1
4343
CFLAGS+=-DFORCE_32BIT
@@ -65,24 +65,33 @@ endif
6565
## ARM Cortex-A
6666
ifeq ($(ARCH),AARCH64)
6767
CROSS_COMPILE?=aarch64-none-elf-
68-
CFLAGS+=-DARCH_AARCH64
68+
CFLAGS+=-DARCH_AARCH64 -DFAST_MEMCPY
6969
OBJS+=src/boot_aarch64.o src/boot_aarch64_start.o
7070

71-
ifeq ($(TARGET),nxp_ls1028a)
72-
ARCH_FLAGS=-mcpu=cortex-a72+crypto -march=armv8-a+crypto -mtune=cortex-a72
73-
CFLAGS+=$(ARCH_FLAGS) -DCORTEX_A72
71+
ifeq ($(TARGET),zynq)
72+
ARCH_FLAGS=-march=armv8-a+crypto
73+
CFLAGS+=$(ARCH_FLAGS) -DCORTEX_A53
74+
CFLAGS+=-DNO_QNX
75+
# Support detection and skip of U-Boot legacy header */
76+
CFLAGS+=-DWOLFBOOT_UBOOT_LEGACY
77+
CFLAGS+=-DWOLFBOOT_DUALBOOT
78+
else
79+
ifeq ($(TARGET),nxp_ls1028a)
80+
ARCH_FLAGS=-mcpu=cortex-a72+crypto -march=armv8-a+crypto -mtune=cortex-a72
81+
CFLAGS+=$(ARCH_FLAGS) -DCORTEX_A72
7482

75-
CFLAGS +=-ffunction-sections -fdata-sections
76-
LDFLAGS+=-Wl,--gc-sections
83+
CFLAGS +=-ffunction-sections -fdata-sections
84+
LDFLAGS+=-Wl,--gc-sections
7785

78-
ifeq ($(DEBUG_UART),0)
79-
CFLAGS+=-fno-builtin-printf
80-
endif
86+
ifeq ($(DEBUG_UART),0)
87+
CFLAGS+=-fno-builtin-printf
88+
endif
8189

82-
SPI_TARGET=nxp
83-
else
84-
# By default disable ARM ASM for other targets
85-
NO_ARM_ASM?=1
90+
SPI_TARGET=nxp
91+
else
92+
# By default disable ARM ASM for other targets
93+
NO_ARM_ASM?=1
94+
endif
8695
endif
8796

8897
ifeq ($(SPMATH),1)
@@ -523,7 +532,7 @@ endif
523532
ifeq ($(ARCH),PPC)
524533
CROSS_COMPILE?=powerpc-linux-gnu-
525534
LDFLAGS+=-Wl,--build-id=none
526-
CFLAGS+=-DARCH_PPC
535+
CFLAGS+=-DARCH_PPC -DFAST_MEMCPY
527536

528537
ifeq ($(DEBUG_UART),0)
529538
CFLAGS+=-fno-builtin-printf
@@ -789,12 +798,6 @@ ifeq ($(TARGET),nxp_p1021)
789798
SPI_TARGET=nxp
790799
endif
791800

792-
ifeq ($(TARGET),zynq)
793-
# Support detection and skip of U-Boot legecy header */
794-
CFLAGS+=-DWOLFBOOT_UBOOT_LEGACY
795-
CFLAGS+=-DWOLFBOOT_DUALBOOT
796-
endif
797-
798801
ifeq ($(TARGET),ti_hercules)
799802
# HALCoGen Source and Include?
800803
CORTEX_R5=1
@@ -1087,12 +1090,12 @@ ifeq ($(ARCH),AARCH64)
10871090
CFLAGS+=-DMMU -DWOLFBOOT_DUALBOOT
10881091
OBJS+=src/fdt.o
10891092
UPDATE_OBJS:=src/update_ram.o
1093+
else
1094+
ifeq ($(DUALBANK_SWAP),1)
1095+
CFLAGS+=-DWOLFBOOT_DUALBOOT
1096+
UPDATE_OBJS:=src/update_flash_hwswap.o
1097+
endif
10901098
endif
1091-
ifeq ($(DUALBANK_SWAP),1)
1092-
CFLAGS+=-DWOLFBOOT_DUALBOOT
1093-
UPDATE_OBJS:=src/update_flash_hwswap.o
1094-
endif
1095-
10961099
# Set default update object (if not library)
10971100
ifneq ($(TARGET),library)
10981101
ifeq ($(UPDATE_OBJS),)

config/examples/sim-tpm-seal.config

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ WOLFBOOT_TPM_SEAL?=1
3131
WOLFBOOT_TPM_SEAL_NV_BASE=0x01400300
3232
#WOLFBOOT_TPM_SEAL_AUTH?=SealAuth
3333

34+
# Default image header size is larger to support room for policy
35+
IMAGE_HEADER_SIZE?=512
36+
3437
# TPM Logging
3538
#CFLAGS_EXTRA+=-DDEBUG_WOLFTPM
3639
#CFLAGS_EXTRA+=-DWOLFTPM_DEBUG_VERBOSE

config/examples/zynqmp.config

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
ARCH?=AARCH64
22
TARGET?=zynq
3+
4+
WOLFBOOT_VERSION?=0
5+
36
# Default to ZCU102 as hardware platform (QSPI sizes)
47
CFLAGS_EXTRA+=-DZCU102
58

@@ -28,15 +31,17 @@ IMAGE_HEADER_SIZE?=1024
2831
#IMAGE_HEADER_SIZE?=5288
2932

3033
DEBUG?=0
34+
DEBUG_SYMBOLS=1
3135
DEBUG_UART=1
32-
#DEBUG_ZYNQ=1
36+
CFLAGS_EXTRA+=-DDEBUG_ZYNQ=1
37+
#OPTIMIZATION_LEVEL=2
3338

3439
VTOR?=1
3540
CORTEX_M0?=0
3641
NO_ASM?=0
42+
NO_ARM_ASM?=0
3743
ALLOW_DOWNGRADE?=0
3844
NVM_FLASH_WRITEONCE?=0
39-
WOLFBOOT_VERSION?=0
4045
V?=0
4146
SPMATH?=1
4247
RAM_CODE?=0
@@ -48,6 +53,7 @@ SPI_FLASH?=0
4853
NO_XIP=1
4954
USE_GCC=1
5055
ELF?=1
56+
#DEBUG_ELF?=1
5157

5258
# Flash Sector Size
5359
WOLFBOOT_SECTOR_SIZE=0x20000
@@ -73,3 +79,6 @@ CROSS_COMPILE=aarch64-none-elf-
7379

7480
# Speed up reads from flash by using larger blocks
7581
CFLAGS_EXTRA+=-DWOLFBOOT_SHA_BLOCK_SIZE=4096
82+
83+
# QSPI Clock at 0=150MHz, 1=75MHz, 2=37.5MHz (default)
84+
#CFLAGS_EXTRA+=-DGQSPI_CLK_DIV=0

0 commit comments

Comments
 (0)