rp2040: Add _ramfunc macro to internal.h and use in bootrom.c and chipid.c

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor
2021-07-04 11:40:45 -04:00
parent ba958468b7
commit f2b4d353d8
3 changed files with 13 additions and 9 deletions

View File

@@ -7,15 +7,15 @@
#include <stdint.h> // uint16_t, uint32_t, uintptr_t
#include <string.h> // memcpy
#include "compiler.h" // noinline, __section
#include "internal.h" // _ramfunc
#define ROM_TABLE_CODE(c1, c2) ((c1) | ((c2) << 8))
// All functions in here need to be RAM-resident, as we may need
// to (especially for the flash functions) call while the XIP layer
// is unavailable.
#define noinline_ram noinline __section(".ramfunc.read_chip_id")
static void * noinline_ram
static void * _ramfunc
rom_func_lookup(uint32_t code)
{
// Table and lookup function are provided by the BOOTROM
@@ -25,7 +25,7 @@ rom_func_lookup(uint32_t code)
return fn(table, code);
}
void noinline_ram
void _ramfunc
reset_to_usb_boot(uint32_t gpio_activity_pin_mask
, uint32_t disable_interface_mask)
{
@@ -33,21 +33,21 @@ reset_to_usb_boot(uint32_t gpio_activity_pin_mask
fn(gpio_activity_pin_mask, disable_interface_mask);
}
void noinline_ram
void _ramfunc
connect_internal_flash(void)
{
void (*fn)(void) = rom_func_lookup(ROM_TABLE_CODE('I', 'F'));
fn();
}
void noinline_ram
void _ramfunc
flash_exit_xip(void)
{
void (*fn)(void) = rom_func_lookup(ROM_TABLE_CODE('E', 'X'));
fn();
}
void noinline_ram
void _ramfunc
flash_flush_cache(void)
{
void (*fn)(void) = rom_func_lookup(ROM_TABLE_CODE('F', 'C'));