* Add `esp32p4` feature to `esp-hal-procmacros` * Add `esp32p4` feature to `esp-hal-common` * Create the `esp32p4-hal` package * Add ESP32-P4 to CI workflow * Fix a silly typo :) * Update `CHANGELOG.md`
76 lines
2.1 KiB
Plaintext
76 lines
2.1 KiB
Plaintext
ENTRY(_start)
|
|
|
|
PROVIDE(_stext = ORIGIN(ROTEXT));
|
|
PROVIDE(_max_hart_id = 1);
|
|
|
|
PROVIDE(UserSoft = DefaultHandler);
|
|
PROVIDE(SupervisorSoft = DefaultHandler);
|
|
PROVIDE(MachineSoft = DefaultHandler);
|
|
PROVIDE(UserTimer = DefaultHandler);
|
|
PROVIDE(SupervisorTimer = DefaultHandler);
|
|
PROVIDE(MachineTimer = DefaultHandler);
|
|
PROVIDE(UserExternal = DefaultHandler);
|
|
PROVIDE(SupervisorExternal = DefaultHandler);
|
|
PROVIDE(MachineExternal = DefaultHandler);
|
|
|
|
PROVIDE(ExceptionHandler = DefaultExceptionHandler);
|
|
|
|
/* The ESP32-C2 and ESP32-C3 have interrupt IDs 1-31, while the ESP32-C6,
|
|
ESP32-H2, and ESP32-P4 have IDs 0-31, so we much define the handler for the
|
|
one additional interrupt ID: */
|
|
PROVIDE(interrupt0 = DefaultHandler);
|
|
|
|
PROVIDE(__post_init = default_post_init);
|
|
|
|
/* A PAC/HAL defined routine that should initialize custom interrupt controller if needed. */
|
|
PROVIDE(_setup_interrupts = default_setup_interrupts);
|
|
|
|
/* # Multi-processing hook function
|
|
fn _mp_hook() -> bool;
|
|
|
|
This function is called from all the harts and must return true only for one hart,
|
|
which will perform memory initialization. For other harts it must return false
|
|
and implement wake-up in platform-dependent way (e.g. after waiting for a user interrupt).
|
|
*/
|
|
PROVIDE(_mp_hook = default_mp_hook);
|
|
|
|
/* # Start trap function override
|
|
By default uses the riscv crates default trap handler
|
|
but by providing the `_start_trap` symbol external crates can override.
|
|
*/
|
|
PROVIDE(_start_trap = default_start_trap);
|
|
|
|
/* Must be called __global_pointer$ for linker relaxations to work. */
|
|
PROVIDE(__global_pointer$ = _data_start + 0x800);
|
|
|
|
SECTIONS {
|
|
.trap : ALIGN(4)
|
|
{
|
|
KEEP(*(.trap));
|
|
*(.trap.*);
|
|
} > RWTEXT
|
|
}
|
|
INSERT BEFORE .rwtext;
|
|
|
|
SECTIONS {
|
|
/**
|
|
* Bootloader really wants to have separate segments for ROTEXT and RODATA
|
|
* It also needs to be located in a separate 64k flash segment.
|
|
*/
|
|
.text_gap (NOLOAD): {
|
|
. = ALIGN(0x10000) + 0x20;
|
|
} > ROM
|
|
}
|
|
INSERT BEFORE .rodata;
|
|
|
|
/* Shared sections - ordering matters */
|
|
INCLUDE "text.x"
|
|
INCLUDE "rwtext.x"
|
|
INCLUDE "rodata.x"
|
|
INCLUDE "rwdata.x"
|
|
INCLUDE "rtc_fast.x"
|
|
INCLUDE "stack.x"
|
|
/* End of Shared sections */
|
|
|
|
INCLUDE "debug.x"
|