diff --git a/boards/arduino-mega2560/Makefile.features b/boards/arduino-mega2560/Makefile.features index c4e9afe55bcd038784a7c3627ffb01704c62c312..67246c4e1ad08557082946735830cb0ce87467af 100644 --- a/boards/arduino-mega2560/Makefile.features +++ b/boards/arduino-mega2560/Makefile.features @@ -1,3 +1,4 @@ +FEATURES_PROVIDED += puf_sram include $(RIOTBOARD)/common/arduino-atmega/Makefile.features include $(RIOTCPU)/atmega2560/Makefile.features diff --git a/cpu/atmega_common/include/cpu_conf.h b/cpu/atmega_common/include/cpu_conf.h index 933c60bc59cdf21792d41a725bcf5a3771eeceba..7eacb5bf2bfc70d92cd2beb41903003896d10c3d 100644 --- a/cpu/atmega_common/include/cpu_conf.h +++ b/cpu/atmega_common/include/cpu_conf.h @@ -51,6 +51,11 @@ extern "C" { #define THREAD_STACKSIZE_IDLE (128) /** @} */ +/** + * @brief Attribute for memory sections required by SRAM PUF + */ +#define PUF_SRAM_ATTRIBUTES __attribute__((used, section(".noinit"))) + #ifdef __cplusplus } #endif diff --git a/cpu/atmega_common/startup.c b/cpu/atmega_common/startup.c index 1792fac5d893e59cfa371a9882cbcdd4b1dd80c1..0dbb20fbd305dc661eaad00944a9447feb2c7102 100644 --- a/cpu/atmega_common/startup.c +++ b/cpu/atmega_common/startup.c @@ -25,6 +25,9 @@ /* For Catchall-Loop */ #include "board.h" +#ifdef MODULE_PUF_SRAM +#include "puf_sram.h" +#endif /** * @brief functions for initializing the board, std-lib and kernel @@ -65,6 +68,9 @@ __attribute__((used, naked)) void init8_ovr(void) */ __attribute__((used)) void reset_handler(void) { +#ifdef MODULE_PUF_SRAM + puf_sram_init((uint8_t *)RAMEND-SEED_RAM_LEN, SEED_RAM_LEN); +#endif /* initialize the board and startup the kernel */ board_init(); /* startup the kernel */