From 0ce2081817af689905843885c9a32f4ec50fbd23 Mon Sep 17 00:00:00 2001 From: Francisco Molina Date: Fri, 9 Aug 2019 08:59:54 +0200 Subject: [PATCH] cpu/kinetis: re-enable HWRNG for k64f - Fix SCGx used for RNGA since RNGA is not mapped to SCG3 for K64F. --- cpu/kinetis/Makefile.features | 2 -- cpu/kinetis/include/cpu_conf_kinetis.h | 16 ++++++++++------ cpu/kinetis/include/cpu_conf_kinetis_k.h | 13 +++++++++++++ 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/cpu/kinetis/Makefile.features b/cpu/kinetis/Makefile.features index d8b43c087c..5c0199efe0 100644 --- a/cpu/kinetis/Makefile.features +++ b/cpu/kinetis/Makefile.features @@ -3,8 +3,6 @@ FEATURES_PROVIDED += periph_cpuid # HACK Do not define 'hwrng' if the board does not supports it # A whitelist on CPU_MODEL would be better but this information/variable is not # available yet. -# HWRNG uses the wrong hwrng register for the frdm-k64f board/cpu_model -_KINETIS_BOARDS_WITHOUT_HWRNG += frdm-k64f # TRNG driver is not implemented for 'CPU_MODEL == mkw41z512vht4' _KINETIS_BOARDS_WITHOUT_HWRNG += frdm-kw41z phynode-kw41z usb-kw41z # No HWRNG in MK20D7 devices diff --git a/cpu/kinetis/include/cpu_conf_kinetis.h b/cpu/kinetis/include/cpu_conf_kinetis.h index dfd3e171de..421b9e7408 100644 --- a/cpu/kinetis/include/cpu_conf_kinetis.h +++ b/cpu/kinetis/include/cpu_conf_kinetis.h @@ -154,15 +154,19 @@ extern "C" * @name Hardware random number generator module configuration * @{ */ -#if !defined(HWRNG_CLKEN) && defined(RNG) && !defined(RNG_CMD_ST_MASK) -#define KINETIS_RNGA RNG +#if !defined(HWRNG_CLK_REG) && !defined(HWRNG_CLK_REG_SHIFT) #if defined(SIM_SCGC3_RNGA_SHIFT) -#define HWRNG_CLKEN() (bit_set32(&SIM->SCGC3, SIM_SCGC3_RNGA_SHIFT)) -#define HWRNG_CLKDIS() (bit_clear32(&SIM->SCGC3, SIM_SCGC3_RNGA_SHIFT)) +#define HWRNG_CLK_REG SIM->SCGC3 +#define HWRNG_CLK_REG_SHIFT SIM_SCGC3_RNGA_SHIFT #elif defined(SIM_SCGC6_RNGA_SHIFT) -#define HWRNG_CLKEN() (bit_set32(&SIM->SCGC6, SIM_SCGC6_RNGA_SHIFT)) -#define HWRNG_CLKDIS() (bit_clear32(&SIM->SCGC6, SIM_SCGC6_RNGA_SHIFT)) +#define HWRNG_CLK_REG SIM->SCGC6 +#define HWRNG_CLK_REG_SHIFT SIM_SCGC6_RNGA_SHIFT #endif +#endif +#if defined(RNG) +#define KINETIS_RNGA RNG +#define HWRNG_CLKEN() (bit_set32(&HWRNG_CLK_REG, HWRNG_CLK_REG_SHIFT)) +#define HWRNG_CLKDIS() (bit_clear32(&HWRNG_CLK_REG, HWRNG_CLK_REG_SHIFT)) #endif /* KINETIS_RNGA */ /** @} */ diff --git a/cpu/kinetis/include/cpu_conf_kinetis_k.h b/cpu/kinetis/include/cpu_conf_kinetis_k.h index 58de7ee115..3897c77ded 100644 --- a/cpu/kinetis/include/cpu_conf_kinetis_k.h +++ b/cpu/kinetis/include/cpu_conf_kinetis_k.h @@ -119,6 +119,19 @@ defined(CPU_MODEL_MK64FX512VLQ12) || \ defined(CPU_MODEL_MK64FX512VMD12) #include "vendor/MK64F12.h" + +/** + * @name Hardware random number generator module configuration + * + * For K64F SCG3 or SCG6 can be used depending on if the the + * peripheral is accessed through AIPS-lite0 or AIPS-lite1. + * For K64F RNGA is only mapped to SCG6. + * @{ + */ +#define HWRNG_CLK_REG (SIM->SCGC6) +#define HWRNG_CLK_REG_SHIFT (SIM_SCGC6_RNGA_SHIFT) +/** @} */ + #endif #endif /* (KINETIS_SUBFAMILY == y) */ #endif /* (KINETIS_FAMILY == x) */