Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions arch.mk
Original file line number Diff line number Diff line change
Expand Up @@ -563,11 +563,27 @@ endif
## RISCV64 (64-bit)
ifeq ($(ARCH),RISCV64)
CROSS_COMPILE?=riscv64-unknown-elf-

# M-mode vs S-mode configuration
ifeq ($(RISCV_MMODE),1)
# Machine Mode: Running directly from eNVM/L2 SRAM
# Boots from SD card after initializing DDR
CFLAGS+=-DWOLFBOOT_RISCV_MMODE
# Use M-mode specific linker script
LSCRIPT_IN:=hal/$(TARGET)-m.ld
else
# Supervisor Mode (default): Running under HSS with DDR available
endif

CFLAGS+=-DMMU -DWOLFBOOT_DUALBOOT
CFLAGS+=-DWOLFBOOT_UPDATE_DISK -DMAX_DISKS=1

# Disk boot support
UPDATE_OBJS:=src/update_disk.o
OBJS += src/gpt.o
OBJS += src/disk.o
# Note: sdhci.o is added by options.mk when DISK_SDCARD=1

ARCH_FLAGS=-march=rv64imafd -mabi=lp64d -mcmodel=medany
CFLAGS+=-fno-builtin-printf -DUSE_M_TIME -g -nostartfiles -DARCH_RISCV -DARCH_RISCV64
CFLAGS+=$(ARCH_FLAGS)
Expand All @@ -580,6 +596,7 @@ ifeq ($(ARCH),RISCV64)
# Unified RISC-V boot code (32/64-bit via __riscv_xlen)
OBJS+=src/boot_riscv_start.o src/boot_riscv.o src/vector_riscv.o

# FDT support required
CFLAGS+=-DWOLFBOOT_FDT
OBJS+=src/fdt.o

Expand Down
98 changes: 98 additions & 0 deletions config/examples/polarfire_mpfs250-m.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# PolarFire SoC MPFS250T M-Mode (Machine Mode) Configuration
#
# This configuration runs wolfBoot directly from eNVM in M-mode (Machine Mode),
# initializes DDR memory, and boots Linux from SD card.
#
# Boot flow:
# 1. eNVM (0x20220100) -> L2_SCRATCH (0x0A000000) - wolfBoot starts
# 2. DDR initialization (PLLs, controller, training)
# 3. Load signed OS image from SD card partition to DDR
# 4. Verify signature and boot
#
# Flash using mpfsBootmodeProgrammer (bootmode 1):
# java -jar mpfsBootmodeProgrammer.jar --bootmode 1 --die MPFS250T \
# --package FCG1152 --workdir $PWD wolfboot.elf

ARCH?=RISCV64
TARGET?=mpfs250
SIGN?=ECC384
HASH?=SHA384
IMAGE_HEADER_SIZE=512
WOLFBOOT_VERSION?=1
ARMORED?=0
DEBUG?=0
DEBUG_SYMBOLS?=1
DEBUG_UART?=1
VTOR?=1
EXT_FLASH?=0
SPI_FLASH?=0
NO_XIP?=1
NVM_FLASH_WRITEONCE?=0
UART_FLASH?=0
V?=0
NO_MPU?=1
RAM_CODE?=0
SPMATH?=1
DUALBANK_SWAP?=0
PKA?=0
ENCRYPT=0
WOLFTPM?=0
ELF?=1
#DEBUG_ELF?=1

# M-Mode Configuration
# Runs on E51 core in Machine Mode from L2 SRAM
RISCV_MMODE?=1

# Stack size per hart (reduced for L2 SRAM constraints)
CFLAGS_EXTRA+=-DSTACK_SIZE_PER_HART=8192

# Use RISC-V assembly version of ECDSA and SHA
NO_ASM?=0
NO_ARM_ASM?=0

# Enable SD card for loading application
DISK_SDCARD?=1
DISK_EMMC?=0
# L2 SRAM Address for wolfBoot (256KB available)
# Stack grows down from end of L2_SCRATCH
WOLFBOOT_ORIGIN?=0x0A000000

# Flash sector size (4KB typical)
WOLFBOOT_SECTOR_SIZE?=0x1000

# Load Partition to RAM Address
WOLFBOOT_LOAD_ADDRESS?=0x8E000000

# Partition layout for PolarFire SoC MPFS250T
# Using update_disk loader we just need to specify the partition number (A/B)
WOLFBOOT_NO_PARTITIONS=1
CFLAGS_EXTRA+=-DBOOT_PART_A=1
CFLAGS_EXTRA+=-DBOOT_PART_B=2
# Speed up disk partition read (512KB chunks - max DMA size)
CFLAGS_EXTRA+=-DDISK_BLOCK_SIZE=0x80000

# DTS (Device Tree) load address
WOLFBOOT_LOAD_DTS_ADDRESS?=0x8A000000

# Optional Encryption
CUSTOM_ENCRYPT_KEY=1
ENCRYPT=1
ENCRYPT_WITH_AES256=1
OBJS_EXTRA=src/my_custom_encrypt_key.o

# Debug options (useful for initial M-mode bring-up)
#CFLAGS_EXTRA+=-DDEBUG_BOOT

# Optional EMMC_SD debugging logs
#CFLAGS_EXTRA+=-DDEBUG_SDHCI
# Optional disk debugging logs
#CFLAGS_EXTRA+=-DDEBUG_DISK
#CFLAGS_EXTRA+=-DDISK_TEST

# Used by test-application for ELF
WOLFBOOT_PARTITION_BOOT_ADDRESS=0x80200000
WOLFBOOT_PARTITION_SIZE=0x4000000



12 changes: 6 additions & 6 deletions config/examples/polarfire_mpfs250.config
Original file line number Diff line number Diff line change
Expand Up @@ -52,17 +52,17 @@ CFLAGS_EXTRA+=-DBOOT_PART_B=2
# Speed up disk partition read (512KB chunks - max DMA size)
CFLAGS_EXTRA+=-DDISK_BLOCK_SIZE=0x80000

# DTS (Device Tree)
# DTS (Device Tree) load address
WOLFBOOT_LOAD_DTS_ADDRESS?=0x8A000000

# Optional Encryption
#CUSTOM_ENCRYPT_KEY=1
#ENCRYPT=1
#ENCRYPT_WITH_AES256=1
#OBJS_EXTRA=src/my_custom_encrypt_key.o
CUSTOM_ENCRYPT_KEY=1
ENCRYPT=1
ENCRYPT_WITH_AES256=1
OBJS_EXTRA=src/my_custom_encrypt_key.o

# Optional EMMC_SD debugging logs
#CFLAGS_EXTRA+=-DDEBUG_MMC
#CFLAGS_EXTRA+=-DDEBUG_SDHCI
# Optional disk debugging logs
#CFLAGS_EXTRA+=-DDEBUG_DISK
#CFLAGS_EXTRA+=-DDISK_TEST
Expand Down
Loading
Loading