zephyr/arch/sparc
Martin Åberg a1d1a5f547 SPARC: Keep interrupts disabled during kernel init
This commit avoids enabling interrupts during Zephyr init.

Details:
Interrupts will be enabled only when the first thread starts or if
arch_irq_unlock() is called before that.

The logic is now:
1. Enable traps, disable interrupts globally
2. Initialize bss
3. Call _PrepC

Use in-place memset() to avoid register window overflow and underflow
traps. That is perhaps not the common scenario, but could happen with
memset() implementation which contains SAVE instructions on a system
with few register windows.

The second, and more important, item this commit addresses is that it
increases the processor interrupt level (priority) to highest. That
is, it enters _PrepC with all maskable interrupts levels disabled.

This fixes some cases where interrupts could be taken after
z_clock_driver_init() while the system was still initializing. That
seem to have occurred when clearing large thread stacks.

The third thing is that we now start out with current window pointer
0 (PSR.CWP=0) instead of 1. It has no practical implication except
for preparing for possible future support for systems with only
two windows.

Signed-off-by: Martin Åberg <martin.aberg@gaisler.com>
2021-07-22 10:25:53 -04:00
..
core SPARC: Keep interrupts disabled during kernel init 2021-07-22 10:25:53 -04:00
include sparc: write through switched_from in arch_switch() 2021-02-17 06:35:03 -05:00
CMakeLists.txt arch: Add SPARC processor architecture 2020-11-13 14:53:55 -08:00
Kconfig Revert "lib/os/heap: introduce option to force big heap mode" 2021-02-19 07:32:22 -05:00