Skip to content

Commit 9697f6a

Browse files
dgarskedanielinux
authored andcommitted
Versal SDCard support
1 parent 3908563 commit 9697f6a

12 files changed

Lines changed: 900 additions & 274 deletions

File tree

arch.mk

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,12 @@ ifeq ($(ARCH),AARCH64)
8787
CFLAGS+=-DWOLFBOOT_DUALBOOT
8888
# Support detection and skip of U-Boot legacy header
8989
CFLAGS+=-DWOLFBOOT_UBOOT_LEGACY
90+
# PLM owns RVBAR on Versal in JTAG boot; skip RVBAR writes
91+
CFLAGS+=-DSKIP_RVBAR=1
92+
# Disable SDMA for multi-block transfers - use PIO instead.
93+
# The Versal Arasan SDHCI controller does not restart SDMA after
94+
# boundary crossings via SRS22/SRS23 writes (Cadence-specific behavior).
95+
CFLAGS_EXTRA+=-DSDHCI_SDMA_DISABLED
9096
endif
9197

9298
ifeq ($(TARGET),nxp_ls1028a)
@@ -1520,7 +1526,20 @@ BOOT_IMG?=test-app/image.bin
15201526
ifeq ($(ARCH),AARCH64)
15211527
CFLAGS+=-DMMU -DWOLFBOOT_FDT -DWOLFBOOT_DUALBOOT
15221528
OBJS+=src/fdt.o
1523-
UPDATE_OBJS:=src/update_ram.o
1529+
ifneq ($(filter 1,$(DISK_SDCARD) $(DISK_EMMC)),)
1530+
# Disk-based boot (SD card or eMMC)
1531+
CFLAGS+=-DWOLFBOOT_UPDATE_DISK
1532+
ifeq ($(MAX_DISKS),)
1533+
MAX_DISKS=1
1534+
endif
1535+
CFLAGS+=-DMAX_DISKS=$(MAX_DISKS)
1536+
UPDATE_OBJS:=src/update_disk.o
1537+
OBJS+=src/gpt.o
1538+
OBJS+=src/disk.o
1539+
else
1540+
# RAM-based boot from external flash (default)
1541+
UPDATE_OBJS:=src/update_ram.o
1542+
endif
15241543
else
15251544
ifeq ($(DUALBANK_SWAP),1)
15261545
CFLAGS+=-DWOLFBOOT_DUALBOOT
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
# wolfBoot configuration for AMD Versal VMK180 - SD Card Boot
2+
# Versal Prime VM1802 ACAP - Dual ARM Cortex-A72
3+
#
4+
# This configuration enables SD card boot for the Versal:
5+
# PLM -> PSM -> BL31 (EL3) -> wolfBoot (EL2) -> Linux (EL1)
6+
#
7+
# wolfBoot loads firmware images from MBR partitions on SD card.
8+
# Uses the generic SDHCI driver with SD1 controller (external SD slot).
9+
10+
ARCH?=AARCH64
11+
TARGET?=versal
12+
13+
WOLFBOOT_VERSION?=1
14+
15+
# ECC-384 with SHA-384 (good balance of security and performance)
16+
SIGN?=ECC384
17+
HASH?=SHA384
18+
IMAGE_HEADER_SIZE?=512
19+
20+
# Debug options
21+
DEBUG?=1
22+
DEBUG_SYMBOLS=1
23+
DEBUG_UART=1
24+
25+
# SD card support - use SDHCI driver
26+
DISK_SDCARD?=1
27+
DISK_EMMC?=0
28+
29+
# Disable QSPI flash when using SD card
30+
EXT_FLASH?=0
31+
NO_XIP=1
32+
33+
# ELF loading support
34+
ELF?=1
35+
36+
# Boot Benchmarking (optional)
37+
BOOT_BENCHMARK?=1
38+
39+
# General options
40+
VTOR?=1
41+
CORTEX_M0?=0
42+
NO_ASM?=0
43+
ALLOW_DOWNGRADE?=0
44+
NVM_FLASH_WRITEONCE?=0
45+
V?=0
46+
SPMATH?=1
47+
RAM_CODE?=0
48+
DUALBANK_SWAP?=0
49+
PKA?=0
50+
WOLFTPM?=0
51+
52+
# Toolchain
53+
USE_GCC=1
54+
CROSS_COMPILE=aarch64-none-elf-
55+
56+
# ============================================================================
57+
# Partition Layout - MBR (required by Versal boot ROM)
58+
# ============================================================================
59+
# SD Card partition layout (MBR):
60+
# Partition 1: boot (128MB, FAT32 LBA, bootable) - BOOT.BIN
61+
# Partition 2: OFP_A (200MB, Linux) - Primary signed image
62+
# Partition 3: OFP_B (200MB, Linux) - Update signed image
63+
# Partition 4: rootfs (remainder) - Linux root filesystem
64+
#
65+
# Use partition numbers instead of flash addresses
66+
# These are 0-based indices into the parsed partition array:
67+
# part[0]=boot, part[1]=OFP_A, part[2]=OFP_B, part[3]=rootfs
68+
WOLFBOOT_NO_PARTITIONS=1
69+
CFLAGS_EXTRA+=-DBOOT_PART_A=1
70+
CFLAGS_EXTRA+=-DBOOT_PART_B=2
71+
72+
# Disk read chunk size (512KB)
73+
CFLAGS_EXTRA+=-DDISK_BLOCK_SIZE=0x80000
74+
75+
# Linux rootfs is on partition 4 (default is /dev/mmcblk0p2 for QSPI boot)
76+
CFLAGS_EXTRA+=-DLINUX_BOOTARGS_ROOT=\"/dev/mmcblk0p4\"
77+
78+
# ============================================================================
79+
# Boot Memory Layout
80+
# ============================================================================
81+
# wolfBoot runs from DDR at 0x8000000 (same address as U-Boot)
82+
WOLFBOOT_ORIGIN=0x8000000
83+
84+
# Load Partition to RAM Address (Linux kernel loads here)
85+
WOLFBOOT_LOAD_ADDRESS?=0x10000000
86+
87+
# DTS (Device Tree) load address
88+
# Must be in DDR low (0x0-0x7FFFFFFF) - matches QSPI config and FIT ITS load address
89+
WOLFBOOT_LOAD_DTS_ADDRESS?=0x1000
90+
91+
# ============================================================================
92+
# Required for test-app (even with WOLFBOOT_NO_PARTITIONS=1)
93+
# ============================================================================
94+
WOLFBOOT_PARTITION_BOOT_ADDRESS=0x80200000
95+
WOLFBOOT_PARTITION_SIZE=0x4000000
96+
WOLFBOOT_SECTOR_SIZE=0x1000
97+
98+
# ============================================================================
99+
# UART Configuration - UART1 for APU console (matches VMK180 board)
100+
# ============================================================================
101+
CFLAGS_EXTRA+=-DDEBUG_UART_NUM=0
102+
103+
# ============================================================================
104+
# Optional Debug Options (uncomment to enable)
105+
# ============================================================================
106+
# SDHCI driver debug logs
107+
#CFLAGS_EXTRA+=-DDEBUG_SDHCI
108+
# Disk layer debug logs
109+
#CFLAGS_EXTRA+=-DDEBUG_DISK
110+
# GPT partition debug logs
111+
#CFLAGS_EXTRA+=-DDEBUG_GPT
112+
# Disk read/write test at boot
113+
#CFLAGS_EXTRA+=-DDISK_TEST

0 commit comments

Comments
 (0)