From deafdfbeedbb6eedf9fbc8518191d4420da6b1c7 Mon Sep 17 00:00:00 2001 From: Nick Brassel Date: Wed, 22 Nov 2023 12:08:52 +1100 Subject: [PATCH] Add simpler method for relocating functions to RAM. (#21804) --- platforms/arm_atsam/_util.h | 9 +++++++++ platforms/avr/_util.h | 10 ++++++++++ platforms/chibios/_util.h | 9 +++++++++ quantum/util.h | 4 ++++ 4 files changed, 32 insertions(+) create mode 100644 platforms/arm_atsam/_util.h create mode 100644 platforms/avr/_util.h create mode 100644 platforms/chibios/_util.h diff --git a/platforms/arm_atsam/_util.h b/platforms/arm_atsam/_util.h new file mode 100644 index 000000000000..38aa9f447288 --- /dev/null +++ b/platforms/arm_atsam/_util.h @@ -0,0 +1,9 @@ +// Copyright 2023 Nick Brassel (@tzarc) +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +#define RESIDENT_IN_RAM(funcname) __attribute__((section(".ramfunc." #funcname), noinline)) funcname + +#if __has_include_next("_util.h") +# include_next "_util.h" +#endif diff --git a/platforms/avr/_util.h b/platforms/avr/_util.h new file mode 100644 index 000000000000..81b94896ba1a --- /dev/null +++ b/platforms/avr/_util.h @@ -0,0 +1,10 @@ +// Copyright 2023 Nick Brassel (@tzarc) +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +// AVR can't actually run anything from RAM, so just no-op the define. +#define RESIDENT_IN_RAM(funcname) funcname + +#if __has_include_next("_util.h") +# include_next "_util.h" +#endif diff --git a/platforms/chibios/_util.h b/platforms/chibios/_util.h new file mode 100644 index 000000000000..64eb62fa1513 --- /dev/null +++ b/platforms/chibios/_util.h @@ -0,0 +1,9 @@ +// Copyright 2023 Nick Brassel (@tzarc) +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +#define RESIDENT_IN_RAM(funcname) __attribute__((section(".ram0_init." #funcname), noinline)) funcname + +#if __has_include_next("_util.h") +# include_next "_util.h" +#endif diff --git a/quantum/util.h b/quantum/util.h index 21e3487b2828..94d9f2231796 100644 --- a/quantum/util.h +++ b/quantum/util.h @@ -50,3 +50,7 @@ #if !defined(PACKED) # define PACKED __attribute__((__packed__)) #endif + +#if __has_include("_util.h") +# include "_util.h" /* Include the platform's _util.h */ +#endif