mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-08-04 16:20:34 +00:00
According to the PRMs of both ARC EM & ARC HS families on entry to Fast IRQ handler ARC hardware saves PC (Program Counter) value of where processor was right before jumping to the IRQ handler into 2 registers: ILINK & ERET. But it turned out in case of ARC HS (at least in configuration with Fast IRQs & 1 register bank) only ILINK was populated with the previous PC, while in Zephyr we relied on what we read out of ERET. That lead to funny issues when CPU returned from IRQ handling to some unexpected location. And now with that precious knowledge we're switching to return address recovery from ILINK so that with both families of ARC processors (EM & HS) we may get reliably good results. The wrapper is few cycles shorter/faster as well, as we may shave off another extra instruction for transferring ERET value from its AUX reg to a scratch core register to be later stored in the memory. +----+---------------+---------------+--------------+ | | FIRQ | RIRQ | RIRQ(Secure) | +----+---------------+---------------+--------------+ | HS | ILINK=PC | ILINK=PC | NULL | +----+---------------+---------------+--------------+ | EM | ILINK=ERET=PC | ILINK=ERET=PC | ILINK=PC | +----+---------------+---------------+--------------+ Signed-off-by: Watson Zeng <zhiwei@synopsys.com> |
||
---|---|---|
.. | ||
arc | ||
arm | ||
common | ||
nios2 | ||
posix | ||
riscv | ||
sparc | ||
x86 | ||
xtensa | ||
CMakeLists.txt | ||
Kconfig |