-
Notifications
You must be signed in to change notification settings - Fork 2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
cpu/esp32: platform independent code for thread_arch, irq_arch and exception #18247
cpu/esp32: platform independent code for thread_arch, irq_arch and exception #18247
Conversation
Xtensa-specific code was moved from thread_arch.c to thread_arch_xtensa.c. RISC-V code has been added to thread_arch_riscv.c. This allows to handle both Xtensa and RISC-V based ESP SoCs.
Xtensa-specific code was moved from irq_arch.c to irq_arch_xtensa.c. RISC-V code has been added to irq_arch_riscv.c. This allows to handle both Xtensa and RISC-V based ESP SoCs.
If necessary, the PR could be split into seperate PRs. |
@benpicco The PR still seems to have a lot of changes, but
The files If it helps, I could further split this PR into two PRs, one with the changes that move platform dependent code to the platform dependent files The changes in |
Contribution description
This PR is a splitt-off from PR #17841. It provides a platform independent implementation of
thread_arch.c
,irq_arch.c
andexception.c
so that it can be used for Xtensa-based and RISC-V based ESP32x SoC variants.For that purpose the platform dependent code is moved from
thread_arch.c
,irq_arch.c
,exception.c
tothread_arch_xtensa.c
,irq_arch_xtensa.c
,exception_xtensa.c
andthread_arch_riscv.c
,irq_arch_riscv.c
,exception.c_riscv
, respectively. Furthermore, someDEBUG
messages are fixed to be platform independent.Background:
thread_arch_xtensa.c
is not really independent of the used ESP SoC. Although ESP8266 and ESP32 share most of the code, that's whythread_arch_xtensa.c
is defined incpu/esp_common
, they require some SoC specific code, especially inthread_yield_*
functions. These functions are something very special to ESP SoCs and not common for Xtensa cores.vectors.S
for for RISC-V interrupt handling andportasm.S
for RISC-V context switching from ESP-IDF, because they are needed by other ESP-IDF functions, e.g. by the startup function, which we also use directly from ESP-IDF. Unfortunately, they are not compatible with the RISC-V implementation incpu/riscv_common
. They use a different context frame structure, a different interrupt context structure, a different interrupt/exception handling and a different startup function. Even if we could reuse some parts ofriscv_common
, including a common folder in the compilation always means all or nothing. Therefore we can't usecpu/riscv_common
at all.irq_disable
/irq_restore
inriscv_common
only reset/set theMIE
bit inmstatus
register while the implementation for RISC-V based ESPs requires to change the value of the SoC specific interrupt level registerINTERRUPT_CORE0_CPU_INT_THRESH_REG
.Thus, neither is the Xtensa code general enough to justify a
cpu/xtensa_common
folder, nor are the thread or interrupt handling for RISC-V based ESP compatible with the implementation inriscv_common
.Therefore,
thread_arch.c
,irq_arch.c
,exception.c
tothread_arch_xtensa.c
,irq_arch_xtensa.c
,exception_xtensa.c
andthread_arch_riscv.c
,irq_arch_riscv.c
,exception.c_riscv
, respectively.Testing procedure
Issues/PRs references
Split-off from PR #17841