From 8337ab111e243d1c8f89fb1a789a63b4edd765b0 Mon Sep 17 00:00:00 2001 From: Benjamin Valentin Date: Mon, 25 Nov 2019 01:34:38 +0100 Subject: [PATCH 1/2] cpu/arm7_common: hook up puf_sram puf_sram only relies on an uninitialized chunk of memory. This means to enable it we just have to hook up puf_sram_init(). All memory after __bss_end should be uninitialized at startup, so just use that. --- cpu/arm7_common/Makefile.features | 1 + cpu/arm7_common/arm7_init.c | 9 +++++++++ cpu/lpc2387/include/cpu_conf.h | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/cpu/arm7_common/Makefile.features b/cpu/arm7_common/Makefile.features index 78b65033f3..f4b17a8c67 100644 --- a/cpu/arm7_common/Makefile.features +++ b/cpu/arm7_common/Makefile.features @@ -3,3 +3,4 @@ FEATURES_PROVIDED += arch_arm FEATURES_PROVIDED += arch_arm7 FEATURES_PROVIDED += cpp FEATURES_PROVIDED += periph_pm +FEATURES_PROVIDED += puf_sram diff --git a/cpu/arm7_common/arm7_init.c b/cpu/arm7_common/arm7_init.c index c0c1c06938..0dfdf92733 100644 --- a/cpu/arm7_common/arm7_init.c +++ b/cpu/arm7_common/arm7_init.c @@ -20,6 +20,9 @@ #include #include #include "thread.h" +#ifdef MODULE_PUF_SRAM +#include "puf_sram.h" +#endif #include "log.h" @@ -63,6 +66,12 @@ void bootloader(void) /* initialize bss and data */ _init_data(); +#ifdef MODULE_PUF_SRAM + /* uninitialized heap starts after bss section */ + extern unsigned int __bss_end; + puf_sram_init((uint8_t *) __bss_end, SEED_RAM_LEN); +#endif + /* cpu specific setup of clocks, peripherals */ cpu_init(); diff --git a/cpu/lpc2387/include/cpu_conf.h b/cpu/lpc2387/include/cpu_conf.h index 9f37cb9f0f..b7a385ec25 100644 --- a/cpu/lpc2387/include/cpu_conf.h +++ b/cpu/lpc2387/include/cpu_conf.h @@ -71,6 +71,11 @@ extern "C" { #define CC_CONF_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) /** @} */ +/** + * @brief Attribute for memory sections required by SRAM PUF + */ +#define PUF_SRAM_ATTRIBUTES __attribute__((used, section(".noinit"))) + #ifdef __cplusplus } #endif From 0da8c8f094a60d7b19ac9691a3c9e0e76b2cc6f1 Mon Sep 17 00:00:00 2001 From: Benjamin Valentin Date: Mon, 25 Nov 2019 02:08:59 +0100 Subject: [PATCH 2/2] tests/puf_sram: add newline in printf puts() will already print the newline itself, but for printf() we'll have to include it manually. --- tests/puf_sram/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/puf_sram/main.c b/tests/puf_sram/main.c index 61ac6fc6f7..21050fdf6a 100644 --- a/tests/puf_sram/main.c +++ b/tests/puf_sram/main.c @@ -25,7 +25,7 @@ int main(void) { puts("Start: Test random number generator"); - printf("Success: Data for puf_sram_seed: [0x%08" PRIX32 "]", puf_sram_seed); + printf("Success: Data for puf_sram_seed: [0x%08" PRIX32 "]\n", puf_sram_seed); puts("End: Test finished"); return 0;