From d445454a54495cc6c1d61eb4901e744990a11360 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Fri, 28 Nov 2025 14:59:14 +0100 Subject: [PATCH] docs and changelog --- zynq/zynq7000-rt/CHANGELOG.md | 11 +++++++++++ zynq/zynq7000-rt/src/rt.rs | 12 ++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/zynq/zynq7000-rt/CHANGELOG.md b/zynq/zynq7000-rt/CHANGELOG.md index 4e39988..0c6c123 100644 --- a/zynq/zynq7000-rt/CHANGELOG.md +++ b/zynq/zynq7000-rt/CHANGELOG.md @@ -10,6 +10,17 @@ and this project adheres to [Semantic Versioning](http://semver.org/). Bugfixes in startup assembler code. +## Changed + +- `.data` initialization is skipped if it is already in place, which is usually the default + case because it is flashed to RAM. + +## Fixed + +- Stack initialization was bugged and stack was not properly initialized for some of the + processor modes (all modes except system mode and IRQ mode). +- MMU is enabled after the MMU table was copied (which is done in the `.data` coping step). + # [v0.1.1] 2025-10-10 Documentation fixes. diff --git a/zynq/zynq7000-rt/src/rt.rs b/zynq/zynq7000-rt/src/rt.rs index 3af6e3b..27b8813 100644 --- a/zynq/zynq7000-rt/src/rt.rs +++ b/zynq/zynq7000-rt/src/rt.rs @@ -96,42 +96,42 @@ initialize: // Set up stacks first. ldr r3, =_stack_top - // IRQ mode + // Set stack pointer (right after) and mask interrupts for IRQ mode (Mode 0x12) msr cpsr_c, {irq_mode} // IRQ stack pointer mov sp, r3 ldr r1, =_irq_stack_size sub r3, r3, r1 - // Supervisor mode + // Set stack pointer (right after) and mask interrupts for Supervisor/SVC mode (Mode 0x13) msr cpsr_c, {svc_mode} // Supervisor stack pointer mov sp, r3 ldr r1, =_svc_stack_size sub r3, r3, r1 - // Abort mode + // Set stack pointer (right after) and mask interrupts for Abort/ABT mode (Mode 0x17) msr cpsr_c, {abt_mode} // Abort stack pointer mov sp, r3 ldr r1, =_abt_stack_size sub r3, r3, r1 - // FIQ mode + // Set stack pointer (right after) and mask interrupts for FIQ mode (Mode 0x11) msr cpsr_c, {fiq_mode} // FIQ stack pointer mov sp, r3 ldr r1, =_fiq_stack_size sub r3, r3, r1 - // Undefined mode + // Set stack pointer (right after) and mask interrupts for Undefined/UND mode (Mode 0x1B) msr cpsr_c, {und_mode} // Undefined stack pointer mov sp, r3 ldr r1, =_und_stack_size sub r3, r3, r1 - // System mode + // Set stack pointer (right after) and mask interrupts for System/SYS mode (Mode 0x1F) msr cpsr_c, {sys_mode} // System stack pointer (main stack) mov sp, r3