@@ -303,6 +303,19 @@ 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 Cortex-A9 when MMU is off (FSBL leaves MMU off
314+ # on Zynq-7000). Use wolfBoot's own aligned-safe memcpy from src/string.c.
315+ # U-Boot legacy header detection for Linux/U-Boot payloads (Milestone 5)
316+ CFLAGS+ =-DWOLFBOOT_UBOOT_LEGACY
317+ endif
318+
306319 ifeq ($(TARGET),va416x0)
307320 CFLAGS+ =-I$(WOLFBOOT_ROOT ) /hal/vorago/ \
308321 -I$(VORAGO_SDK_DIR ) /common/drivers/hdr/ \
@@ -344,6 +357,49 @@ ifeq ($(CORTEX_A5),1)
344357 -DWOLFSSL_ARM_ARCH=7 -DWOLFSSL_ARMASM_INLINE -DWOLFSSL_ARMASM_NO_NEON
345358 endif
346359 endif
360+ else
361+ ifeq ($(CORTEX_A9 ) ,1)
362+ # Cortex-A9 (ARMv7-A, 32-bit) - Zynq-7000.
363+ # Build in ARM state (-marm); reset vector lands in ARM mode after FSBL.
364+ # Note: do not filter out -mthumb from CFLAGS/LDFLAGS - that converts the
365+ # variables to simple-expansion flavor and breaks lazy $(LSCRIPT) expansion
366+ # in test-app/Makefile. -marm appended later wins over -mthumb anyway.
367+ FPU=-mfpu =vfp3-d16
368+ CFLAGS+=-mcpu =cortex-a9 -mtune=cortex-a9 -marm -static -z noexecstack \
369+ -mno-unaligned-access
370+ LDFLAGS+=-mcpu =cortex-a9 -mtune=cortex-a9 -marm -static -z noexecstack
371+ # Cortex-A9 uses the same generic ARMv7-A startup as Cortex-A5
372+ # (src/boot_arm32_start.S handles VBAR, per-mode stacks, cache
373+ # invalidate, async-abort enable for any ARMv7-A target).
374+ OBJS+ =src/boot_arm32.o src/boot_arm32_start.o
375+ # Linux/U-Boot payload: enable MMU + FDT codepaths in update_ram.c so DTBs
376+ # can be loaded from a separate signed PART_DTS_BOOT partition. The MMU
377+ # itself stays inherited from FSBL's flat 1:1 mapping; wolfBoot does not
378+ # manage page tables on Cortex-A9.
379+ ifeq ($(MMU),1)
380+ CFLAGS+ =-DMMU -DWOLFBOOT_FDT
381+ OBJS+ =src/fdt.o
382+ endif
383+ # SD card / eMMC boot: swap the update_ram loader for update_disk + GPT.
384+ # The SDHCI HAL hooks live in hal/zynq7000.c and translate the generic
385+ # Cadence-layout driver to the Arasan SDHCI v2.0 controller.
386+ ifneq ($(filter 1,$(DISK_SDCARD) $(DISK_EMMC)),)
387+ CFLAGS+ =-DWOLFBOOT_UPDATE_DISK -DMAX_DISKS=1
388+ UPDATE_OBJS: =src/update_disk.o
389+ OBJS += src/gpt.o
390+ OBJS += src/disk.o
391+ endif
392+ ifeq ($(NO_ASM),1)
393+ MATH_OBJS+ =$(WOLFBOOT_LIB_WOLFSSL ) /wolfcrypt/src/sp_c32.o
394+ else
395+ MATH_OBJS+ =$(WOLFBOOT_LIB_WOLFSSL ) /wolfcrypt/src/sp_arm32.o
396+ ifneq ($(NO_ARM_ASM),1)
397+ OBJS+ =$(WOLFBOOT_LIB_WOLFSSL ) /wolfcrypt/src/port/arm/armv8-32-sha256-asm.o
398+ OBJS+ =$(WOLFBOOT_LIB_WOLFSSL ) /wolfcrypt/src/port/arm/armv8-32-sha256-asm_c.o
399+ CFLAGS+ =-DWOLFSSL_SP_ARM32_ASM -DWOLFSSL_ARMASM -DWOLFSSL_ARMASM_NO_HW_CRYPTO \
400+ -DWOLFSSL_ARM_ARCH=7 -DWOLFSSL_ARMASM_INLINE -DWOLFSSL_ARMASM_NO_NEON
401+ endif
402+ endif
347403else
348404 # All others use boot_arm.o
349405 OBJS+ =src/boot_arm.o
456512endif
457513endif
458514endif
515+ endif
459516
460517
461518# # Renesas RX
0 commit comments