@@ -303,6 +303,28 @@ ifeq ($(ARCH),ARM)
303303 CFLAGS+ =-DWOLFBOOT_USE_STDLIBC
304304 endif
305305
306+ ifeq ($(TARGET),zynq7000)
307+ # AMD/Xilinx Zynq-7000 (Cortex-A9, ARMv7-A) - ZC702 Evaluation Kit.
308+ # Loaded by Xilinx FSBL into DDR; see hal/zynq7000.{c,h,ld}.
309+ CORTEX_A9 =1
310+ UPDATE_OBJS: =src/update_ram.o
311+ CFLAGS+ =-DWOLFBOOT_DUALBOOT -fno-builtin -ffreestanding
312+ # Do NOT define WOLFBOOT_USE_STDLIBC: newlib's memcpy uses unaligned
313+ # LDRs which fault on ARMv7-A whenever the active mapping treats memory
314+ # as Strongly-Ordered (typically MMU off, but also some boot-stage
315+ # configurations). wolfBoot's startup keeps FSBL's MMU + flat 1:1
316+ # mapping enabled to avoid that, but we still link against the
317+ # aligned-safe memcpy in src/string.c so unaligned loads can never
318+ # surprise us regardless of MMU state.
319+ # U-Boot legacy 64-byte header strip is only meaningful for the
320+ # Linux/U-Boot payload variant (zynq7000_linux.config). Bare-metal
321+ # payloads (zynq7000.config, zc702_sdcard.config) shouldn't risk a
322+ # ~1-in-2^32 false-positive collision with UBOOT_IMG_HDR_MAGIC.
323+ ifeq ($(LINUX_PAYLOAD),1)
324+ CFLAGS+ =-DWOLFBOOT_UBOOT_LEGACY
325+ endif
326+ endif
327+
306328 ifeq ($(TARGET),va416x0)
307329 CFLAGS+ =-I$(WOLFBOOT_ROOT ) /hal/vorago/ \
308330 -I$(VORAGO_SDK_DIR ) /common/drivers/hdr/ \
@@ -344,6 +366,49 @@ ifeq ($(CORTEX_A5),1)
344366 -DWOLFSSL_ARM_ARCH=7 -DWOLFSSL_ARMASM_INLINE -DWOLFSSL_ARMASM_NO_NEON
345367 endif
346368 endif
369+ else
370+ ifeq ($(CORTEX_A9 ) ,1)
371+ # Cortex-A9 (ARMv7-A, 32-bit) - Zynq-7000.
372+ # Build in ARM state (-marm); reset vector lands in ARM mode after FSBL.
373+ # Note: do not filter out -mthumb from CFLAGS/LDFLAGS - that converts the
374+ # variables to simple-expansion flavor and breaks lazy $(LSCRIPT) expansion
375+ # in test-app/Makefile. -marm appended later wins over -mthumb anyway.
376+ FPU=-mfpu =vfp3-d16
377+ CFLAGS+=-mcpu =cortex-a9 -mtune=cortex-a9 -marm -mno-unaligned-access
378+ LDFLAGS+=-mcpu =cortex-a9 -mtune=cortex-a9 -marm -static \
379+ -Wl,-z,noexecstack
380+ # Cortex-A9 uses the same generic ARMv7-A startup as Cortex-A5
381+ # (src/boot_arm32_start.S handles VBAR, per-mode stacks, cache
382+ # invalidate, async-abort enable for any ARMv7-A target).
383+ OBJS+ =src/boot_arm32.o src/boot_arm32_start.o
384+ # Linux/U-Boot payload: enable MMU + FDT codepaths in update_ram.c so DTBs
385+ # can be loaded from a separate signed PART_DTS_BOOT partition. The MMU
386+ # itself stays inherited from FSBL's flat 1:1 mapping; wolfBoot does not
387+ # manage page tables on Cortex-A9.
388+ ifeq ($(MMU),1)
389+ CFLAGS+ =-DMMU -DWOLFBOOT_FDT
390+ OBJS+ =src/fdt.o
391+ endif
392+ # SD card / eMMC boot: swap the update_ram loader for update_disk + GPT.
393+ # The SDHCI HAL hooks live in hal/zynq7000.c and translate the generic
394+ # Cadence-layout driver to the Arasan SDHCI v2.0 controller.
395+ ifneq ($(filter 1,$(DISK_SDCARD) $(DISK_EMMC)),)
396+ CFLAGS+ =-DWOLFBOOT_UPDATE_DISK -DMAX_DISKS=1
397+ UPDATE_OBJS: =src/update_disk.o
398+ OBJS += src/gpt.o
399+ OBJS += src/disk.o
400+ endif
401+ ifeq ($(NO_ASM),1)
402+ MATH_OBJS+ =$(WOLFBOOT_LIB_WOLFSSL ) /wolfcrypt/src/sp_c32.o
403+ else
404+ MATH_OBJS+ =$(WOLFBOOT_LIB_WOLFSSL ) /wolfcrypt/src/sp_arm32.o
405+ ifneq ($(NO_ARM_ASM),1)
406+ OBJS+ =$(WOLFBOOT_LIB_WOLFSSL ) /wolfcrypt/src/port/arm/armv8-32-sha256-asm.o
407+ OBJS+ =$(WOLFBOOT_LIB_WOLFSSL ) /wolfcrypt/src/port/arm/armv8-32-sha256-asm_c.o
408+ CFLAGS+ =-DWOLFSSL_SP_ARM32_ASM -DWOLFSSL_ARMASM -DWOLFSSL_ARMASM_NO_HW_CRYPTO \
409+ -DWOLFSSL_ARM_ARCH=7 -DWOLFSSL_ARMASM_INLINE -DWOLFSSL_ARMASM_NO_NEON
410+ endif
411+ endif
347412else
348413 # All others use boot_arm.o
349414 OBJS+ =src/boot_arm.o
456521endif
457522endif
458523endif
524+ endif
459525
460526
461527# # Renesas RX
0 commit comments