Skip to content

Commit a59bd61

Browse files
committed
Peer review feedback
1 parent f6a884c commit a59bd61

File tree

8 files changed

+35
-25
lines changed

8 files changed

+35
-25
lines changed

arch.mk

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,10 @@ endif
563563
## RISCV (32-bit)
564564
ifeq ($(ARCH),RISCV)
565565
CROSS_COMPILE?=riscv32-unknown-elf-
566-
ARCH_FLAGS=-march=rv32imac -mabi=ilp32 -mcmodel=medany
566+
# GCC 12+ requires explicit zicsr/zifencei extensions
567+
RISCV32_ZICSR := $(shell echo "" | $(CC) -march=rv32imac_zicsr -x c -c - -o /dev/null 2>/dev/null && echo _zicsr)
568+
RISCV32_ZIFENCEI := $(shell echo "" | $(CC) -march=rv32imac_zifencei -x c -c - -o /dev/null 2>/dev/null && echo _zifencei)
569+
ARCH_FLAGS=-march=rv32imac$(RISCV32_ZICSR)$(RISCV32_ZIFENCEI) -mabi=ilp32 -mcmodel=medany
567570
CFLAGS+=-fno-builtin-printf -DUSE_M_TIME -g -nostartfiles -DARCH_RISCV
568571
CFLAGS+=$(ARCH_FLAGS)
569572
LDFLAGS+=$(ARCH_FLAGS)
@@ -605,12 +608,17 @@ ifeq ($(ARCH),RISCV64)
605608
UPDATE_OBJS?=src/update_ram.o
606609
endif
607610

611+
# GCC 12+ / binutils 2.38+ split CSR and fence.i instructions into
612+
# separate extensions (zicsr, zifencei). Detect and add if supported.
613+
RISCV64_ZICSR := $(shell echo "" | $(CC) -march=rv64imac_zicsr -x c -c - -o /dev/null 2>/dev/null && echo _zicsr)
614+
RISCV64_ZIFENCEI := $(shell echo "" | $(CC) -march=rv64imac_zifencei -x c -c - -o /dev/null 2>/dev/null && echo _zifencei)
615+
608616
ifeq ($(RISCV_MMODE),1)
609617
# E51 core: rv64imac (no FPU, no crypto extensions)
610-
ARCH_FLAGS=-march=rv64imac -mabi=lp64 -mcmodel=medany
618+
ARCH_FLAGS=-march=rv64imac$(RISCV64_ZICSR)$(RISCV64_ZIFENCEI) -mabi=lp64 -mcmodel=medany
611619
else
612620
# U54 cores: rv64gc (with FPU)
613-
ARCH_FLAGS=-march=rv64imafd -mabi=lp64d -mcmodel=medany
621+
ARCH_FLAGS=-march=rv64imafd$(RISCV64_ZICSR)$(RISCV64_ZIFENCEI) -mabi=lp64d -mcmodel=medany
614622

615623
# FDT support required
616624
CFLAGS+=-DWOLFBOOT_FDT

hal/mpfs250.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1079,12 +1079,15 @@ static void qspi_uart_program(void)
10791079
uart_qspi_puts("READY\r\n");
10801080

10811081
/* Receive destination address then data length (4 bytes LE each) */
1082-
addr = 0;
1083-
for (int i = 0; i < 4; i++)
1084-
addr |= ((uint32_t)uart_qspi_rx() << (i * 8));
1085-
size = 0;
1086-
for (int i = 0; i < 4; i++)
1087-
size |= ((uint32_t)uart_qspi_rx() << (i * 8));
1082+
{
1083+
int i;
1084+
addr = 0;
1085+
for (i = 0; i < 4; i++)
1086+
addr |= ((uint32_t)uart_qspi_rx() << (i * 8));
1087+
size = 0;
1088+
for (i = 0; i < 4; i++)
1089+
size |= ((uint32_t)uart_qspi_rx() << (i * 8));
1090+
}
10881091

10891092
wolfBoot_printf("QSPI-PROG: addr=0x%x size=%u bytes\r\n", addr, size);
10901093

hal/riscv.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,6 @@
8383
#define MODE_PREFIX(__suffix) s##__suffix
8484
#endif
8585

86-
87-
8886
/* ============================================================================
8987
* CSR Access Macros
9088
* ============================================================================ */

src/boot_riscv.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ void do_boot(const uint32_t *app_offset)
419419
#endif
420420
#ifdef MMU
421421
unsigned long dts_addr;
422-
#else
422+
#elif __riscv_xlen == 64
423423
unsigned long dts_addr = 0;
424424
#endif
425425

src/boot_riscv_start.S

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,12 @@ _reset:
6363
* 5. Handle multi-hart (E51 runs, U54s park in WFI)
6464
* ======================================================================== */
6565

66-
#if 0 //def TARGET_mpfs250
66+
/* Early UART initialization for M-mode boot on MPFS.
67+
* Intentionally disabled: only needed for low-level bring-up debug
68+
* to enable serial output before C runtime is available.
69+
* To re-enable, change the guard to `#ifdef TARGET_mpfs250`. */
70+
#if 0
6771
/*
68-
* Early UART initialization for M-mode boot on MPFS.
69-
* This enables debug output during the boot sequence.
70-
*/
7172
li t0, 0x20000000 /* UART0 base */
7273
li t1, 0x20002000 /* SYSREG_BASE */
7374
/* Enable UART0 clock */

src/sdhci.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ void sdhci_irq_handler(void)
167167
/* Signal that interrupt was handled */
168168
g_mmc_irq_pending = 1;
169169

170-
#ifdef DEBUG_SDHCI_IRQ
170+
#ifdef DEBUG_SDHCI_IRQ /* separate from DEBUG_SDHCI: IRQ handler is very noisy */
171171
wolfBoot_printf("sdhci_irq_handler: status=0x%08X, flags=0x%02X\n",
172172
status, g_mmc_irq_status);
173173
#endif

src/update_disk.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,9 +242,9 @@ void RAMFUNCTION wolfBoot_start(void)
242242
uint32_t load_off;
243243
const uint8_t *hdr_ptr = NULL;
244244
#ifdef MMU
245-
uint8_t *dts_addr = NULL;
245+
uint8_t *dts_addr = NULL; /* used by do_boot() under MMU */
246246
#ifdef WOLFBOOT_FDT
247-
uint32_t dts_size = 0;
247+
uint32_t dts_size = 0; /* only used for FIT image parsing */
248248
#endif
249249
#endif
250250
char part_name[4] = {'P', ':', 'X', '\0'};

tools/scripts/mpfs_qspi_prog.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,12 @@
4343
print("Error: 'pyserial' not installed. Run: pip install pyserial")
4444
sys.exit(1)
4545

46-
BAUD_RATE = 115200
47-
CHUNK_SIZE = 256
48-
ACK_BYTE = 0x06
49-
PROMPT_TIMEOUT = 60 # seconds to wait for wolfBoot prompt after reset
50-
ERASE_TIMEOUT = 120 # seconds for sector erase (64KB sectors, ~800ms each)
51-
DONE_TIMEOUT = 30 # seconds to wait for DONE after last chunk
46+
BAUD_RATE = 115200
47+
CHUNK_SIZE = 256
48+
ACK_BYTE = 0x06
49+
PROMPT_TIMEOUT = 60 # seconds to wait for wolfBoot prompt after reset
50+
ERASE_TIMEOUT = 120 # seconds for sector erase (64KB sectors, ~800ms each)
51+
DONE_TIMEOUT = 30 # seconds to wait for DONE after last chunk
5252

5353

5454
def wait_for(port, keyword, timeout_sec, label=""):

0 commit comments

Comments
 (0)