You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ut...@apache.org on 2021/02/17 13:22:49 UTC

[mynewt-core] branch master updated (cbf4886 -> e53ca22)

This is an automated email from the ASF dual-hosted git repository.

utzig pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git.


    from cbf4886  Enable HW HASH usage on frdm-k82f board
     new e1694f5  trng: k64f: rename to trng_kinetis
     new eea15f7  trng: kinetis: update driver for newer families
     new de78169  hw: bsp: frdm-k82f: enable TRNG usage
     new 2ad881e  trng: kinetis: remove delay in poller
     new e53ca22  trng: kinetis: seed RNGA with SIM->UIDL

The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 hw/bsp/frdm-k64f/pkg.yml                           |  2 +-
 hw/bsp/frdm-k64f/src/hal_bsp.c                     |  4 +-
 hw/bsp/frdm-k82f/pkg.yml                           |  3 +
 hw/bsp/frdm-k82f/src/hal_bsp.c                     | 18 ++++-
 hw/bsp/frdm-k82f/syscfg.yml                        |  3 +
 .../include/trng_kinetis/trng_kinetis.h}           |  8 +-
 .../trng/{trng_k64f => trng_kinetis}/pkg.yml       |  4 +-
 .../src/trng_kinetis.c}                            | 91 ++++++++++++++++------
 .../trng/{trng_k64f => trng_kinetis}/syscfg.yml    | 12 ++-
 9 files changed, 109 insertions(+), 36 deletions(-)
 rename hw/drivers/trng/{trng_k64f/include/trng_k64f/trng_k64f.h => trng_kinetis/include/trng_kinetis/trng_kinetis.h} (86%)
 rename hw/drivers/trng/{trng_k64f => trng_kinetis}/pkg.yml (92%)
 rename hw/drivers/trng/{trng_k64f/src/trng_k64f.c => trng_kinetis/src/trng_kinetis.c} (61%)
 rename hw/drivers/trng/{trng_k64f => trng_kinetis}/syscfg.yml (72%)


[mynewt-core] 04/05: trng: kinetis: remove delay in poller

Posted by ut...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

utzig pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit 2ad881e32f03ac1c9c26be0f786d03518366809b
Author: Fabio Utzig <ut...@apache.org>
AuthorDate: Tue Feb 16 19:14:13 2021 -0300

    trng: kinetis: remove delay in poller
    
    This delay was causing a race condition on trng_test during
    console_printf, and can be safely removed.
    
    Signed-off-by: Fabio Utzig <ut...@apache.org>
---
 hw/drivers/trng/trng_kinetis/src/trng_kinetis.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/hw/drivers/trng/trng_kinetis/src/trng_kinetis.c b/hw/drivers/trng/trng_kinetis/src/trng_kinetis.c
index 4b79d55..4f3821c 100644
--- a/hw/drivers/trng/trng_kinetis/src/trng_kinetis.c
+++ b/hw/drivers/trng/trng_kinetis/src/trng_kinetis.c
@@ -168,7 +168,6 @@ trng_poller_handler(void *arg)
                 }
                 os_mutex_release(&rng_cache_mu);
             }
-            os_time_delay(1);
         } else {
             (void)os_eventq_get(&rng_evtq);
         }


[mynewt-core] 01/05: trng: k64f: rename to trng_kinetis

Posted by ut...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

utzig pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit e1694f56ec604b9c85d2567530eeb5a53a147ffe
Author: Fabio Utzig <ut...@apache.org>
AuthorDate: Tue Feb 9 07:10:25 2021 -0300

    trng: k64f: rename to trng_kinetis
    
    This makes it less specific, since the driver should also work on other
    Kinetis families.
    
    Signed-off-by: Fabio Utzig <ut...@apache.org>
---
 hw/bsp/frdm-k64f/pkg.yml                           |  2 +-
 hw/bsp/frdm-k64f/src/hal_bsp.c                     |  4 +--
 .../include/trng_kinetis/trng_kinetis.h}           |  8 +++---
 .../trng/{trng_k64f => trng_kinetis}/pkg.yml       |  4 +--
 .../src/trng_kinetis.c}                            | 32 +++++++++++-----------
 .../trng/{trng_k64f => trng_kinetis}/syscfg.yml    |  2 +-
 6 files changed, 26 insertions(+), 26 deletions(-)

diff --git a/hw/bsp/frdm-k64f/pkg.yml b/hw/bsp/frdm-k64f/pkg.yml
index 193337d..c1d234d 100644
--- a/hw/bsp/frdm-k64f/pkg.yml
+++ b/hw/bsp/frdm-k64f/pkg.yml
@@ -64,7 +64,7 @@ pkg.deps.UART_5:
     - "@apache-mynewt-core/hw/drivers/uart/uart_hal"
 
 pkg.deps.TRNG:
-    - "@apache-mynewt-core/hw/drivers/trng/trng_k64f"
+    - "@apache-mynewt-core/hw/drivers/trng/trng_kinetis"
 
 pkg.deps.CRYPTO:
     - "@apache-mynewt-core/hw/drivers/crypto/crypto_k64f"
diff --git a/hw/bsp/frdm-k64f/src/hal_bsp.c b/hw/bsp/frdm-k64f/src/hal_bsp.c
index 1f6c95e..84c5a97 100644
--- a/hw/bsp/frdm-k64f/src/hal_bsp.c
+++ b/hw/bsp/frdm-k64f/src/hal_bsp.c
@@ -30,7 +30,7 @@
 #include "hal/hal_flash.h"
 #if MYNEWT_VAL(TRNG)
 #include "trng/trng.h"
-#include "trng_k64f/trng_k64f.h"
+#include "trng_kinetis/trng_kinetis.h"
 #endif
 #if MYNEWT_VAL(CRYPTO)
 #include "crypto/crypto.h"
@@ -210,7 +210,7 @@ hal_bsp_init(void)
 #if MYNEWT_VAL(TRNG)
     rc = os_dev_create(&os_bsp_trng.dev, "trng",
                        OS_DEV_INIT_KERNEL, OS_DEV_INIT_PRIO_DEFAULT,
-                       k64f_trng_dev_init, NULL);
+                       kinetis_trng_dev_init, NULL);
     assert(rc == 0);
 #endif
 
diff --git a/hw/drivers/trng/trng_k64f/include/trng_k64f/trng_k64f.h b/hw/drivers/trng/trng_kinetis/include/trng_kinetis/trng_kinetis.h
similarity index 86%
rename from hw/drivers/trng/trng_k64f/include/trng_k64f/trng_k64f.h
rename to hw/drivers/trng/trng_kinetis/include/trng_kinetis/trng_kinetis.h
index 069e80b..dc73bc4 100644
--- a/hw/drivers/trng/trng_k64f/include/trng_k64f/trng_k64f.h
+++ b/hw/drivers/trng/trng_kinetis/include/trng_kinetis/trng_kinetis.h
@@ -17,8 +17,8 @@
  * under the License.
  */
 
-#ifndef __TRNG_K64F_H__
-#define __TRNG_K64F_H__
+#ifndef __TRNG_KINETIS_H__
+#define __TRNG_KINETIS_H__
 
 #include "trng/trng.h"
 
@@ -26,10 +26,10 @@
 extern "C" {
 #endif
 
-int k64f_trng_dev_init(struct os_dev *dev, void *arg);
+int kinetis_trng_dev_init(struct os_dev *dev, void *arg);
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif /* __TRNG_K64F_H__ */
+#endif /* __TRNG_KINETIS_H__ */
diff --git a/hw/drivers/trng/trng_k64f/pkg.yml b/hw/drivers/trng/trng_kinetis/pkg.yml
similarity index 92%
rename from hw/drivers/trng/trng_k64f/pkg.yml
rename to hw/drivers/trng/trng_kinetis/pkg.yml
index 9fbbcc1..e978db0 100644
--- a/hw/drivers/trng/trng_k64f/pkg.yml
+++ b/hw/drivers/trng/trng_kinetis/pkg.yml
@@ -17,8 +17,8 @@
 # under the License.
 #
 
-pkg.name: hw/drivers/trng/trng_k64f
-pkg.description: TRNG driver for K64F
+pkg.name: hw/drivers/trng/trng_kinetis
+pkg.description: TRNG driver for Kinetis
 pkg.author: "Apache Mynewt <de...@mynewt.apache.org>"
 pkg.homepage: "http://mynewt.apache.org/"
 pkg.keywords:
diff --git a/hw/drivers/trng/trng_k64f/src/trng_k64f.c b/hw/drivers/trng/trng_kinetis/src/trng_kinetis.c
similarity index 83%
rename from hw/drivers/trng/trng_k64f/src/trng_k64f.c
rename to hw/drivers/trng/trng_kinetis/src/trng_kinetis.c
index 91b924c..45d914c 100644
--- a/hw/drivers/trng/trng_k64f/src/trng_k64f.c
+++ b/hw/drivers/trng/trng_kinetis/src/trng_kinetis.c
@@ -20,9 +20,9 @@
 #include <string.h>
 #include "fsl_rnga.h"
 #include "trng/trng.h"
-#include "trng_k64f/trng_k64f.h"
+#include "trng_kinetis/trng_kinetis.h"
 
-static uint8_t rng_cache[ MYNEWT_VAL(K64F_TRNG_CACHE_LEN) ];
+static uint8_t rng_cache[ MYNEWT_VAL(KINETIS_TRNG_CACHE_LEN) ];
 static uint16_t rng_cache_out;
 static uint16_t rng_cache_in;
 static struct os_mutex rng_cache_mu;
@@ -35,7 +35,7 @@ static struct os_eventq rng_evtq;
 static struct os_task poller_task;
 
 static inline void
-k64f_rnga_start(void)
+kinetis_rnga_start(void)
 {
     struct os_event evt;
 
@@ -48,14 +48,14 @@ k64f_rnga_start(void)
 }
 
 static inline void
-k64f_rnga_stop(void)
+kinetis_rnga_stop(void)
 {
    RNGA_SetMode(RNG, kRNGA_ModeSleep);
    running = false;
 }
 
 static size_t
-k64f_trng_read(struct trng_dev *trng, void *ptr, size_t size)
+kinetis_trng_read(struct trng_dev *trng, void *ptr, size_t size)
 {
     size_t num_read;
 
@@ -83,7 +83,7 @@ k64f_trng_read(struct trng_dev *trng, void *ptr, size_t size)
     rng_cache_out = (rng_cache_out + num_read) % sizeof(rng_cache);
 
     if (num_read > 0) {
-        k64f_rnga_start();
+        kinetis_rnga_start();
     }
 
     os_mutex_release(&rng_cache_mu);
@@ -92,7 +92,7 @@ k64f_trng_read(struct trng_dev *trng, void *ptr, size_t size)
 }
 
 static uint32_t
-k64f_trng_get_u32(struct trng_dev *trng)
+kinetis_trng_get_u32(struct trng_dev *trng)
 {
     union {
         uint32_t v32;
@@ -100,10 +100,10 @@ k64f_trng_get_u32(struct trng_dev *trng)
     } val;
     size_t num;
 
-    num = k64f_trng_read(trng, &val.v8, sizeof(val.v8));
+    num = kinetis_trng_read(trng, &val.v8, sizeof(val.v8));
     while (num < sizeof(val.v8)) {
         os_sched(NULL);
-        num += k64f_trng_read(trng, &val.v8[num], sizeof(val.v8) - num);
+        num += kinetis_trng_read(trng, &val.v8[num], sizeof(val.v8) - num);
     }
 
     return val.v32;
@@ -129,7 +129,7 @@ rnga_poller_handler(void *arg)
                     }
 
                     if ((rng_cache_in + 1) % sizeof(rng_cache) == rng_cache_out) {
-                        k64f_rnga_stop();
+                        kinetis_rnga_stop();
                         break;
                     }
                 }
@@ -143,7 +143,7 @@ rnga_poller_handler(void *arg)
 }
 
 static int
-k64f_trng_dev_open(struct os_dev *dev, uint32_t wait, void *arg)
+kinetis_trng_dev_open(struct os_dev *dev, uint32_t wait, void *arg)
 {
     struct trng_dev *trng;
 
@@ -156,14 +156,14 @@ k64f_trng_dev_open(struct os_dev *dev, uint32_t wait, void *arg)
 
         RNGA_Init(RNG);
 
-        k64f_rnga_start();
+        kinetis_rnga_start();
     }
 
     return 0;
 }
 
 int
-k64f_trng_dev_init(struct os_dev *dev, void *arg)
+kinetis_trng_dev_init(struct os_dev *dev, void *arg)
 {
     struct trng_dev *trng;
     int rc;
@@ -171,10 +171,10 @@ k64f_trng_dev_init(struct os_dev *dev, void *arg)
     trng = (struct trng_dev *)dev;
     assert(trng);
 
-    OS_DEV_SETHANDLERS(dev, k64f_trng_dev_open, NULL);
+    OS_DEV_SETHANDLERS(dev, kinetis_trng_dev_open, NULL);
 
-    trng->interface.get_u32 = k64f_trng_get_u32;
-    trng->interface.read = k64f_trng_read;
+    trng->interface.get_u32 = kinetis_trng_get_u32;
+    trng->interface.read = kinetis_trng_read;
 
     os_eventq_init(&rng_evtq);
     os_mutex_init(&rng_cache_mu);
diff --git a/hw/drivers/trng/trng_k64f/syscfg.yml b/hw/drivers/trng/trng_kinetis/syscfg.yml
similarity index 96%
rename from hw/drivers/trng/trng_k64f/syscfg.yml
rename to hw/drivers/trng/trng_kinetis/syscfg.yml
index d44da2c..9f8c0cf 100644
--- a/hw/drivers/trng/trng_k64f/syscfg.yml
+++ b/hw/drivers/trng/trng_kinetis/syscfg.yml
@@ -17,6 +17,6 @@
 #
 
 syscfg.defs:
-    K64F_TRNG_CACHE_LEN:
+    KINETIS_TRNG_CACHE_LEN:
         description: 'Internal cache length, shall be a multiple of 4'
         value: 32


[mynewt-core] 05/05: trng: kinetis: seed RNGA with SIM->UIDL

Posted by ut...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

utzig pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit e53ca22057ee66e7772aebc2ffb73ef70aa22b1a
Author: Fabio Utzig <ut...@apache.org>
AuthorDate: Tue Feb 16 19:15:10 2021 -0300

    trng: kinetis: seed RNGA with SIM->UIDL
    
    This follows the recommendation from NXP SDK.
    
    Signed-off-by: Fabio Utzig <ut...@apache.org>
---
 hw/drivers/trng/trng_kinetis/src/trng_kinetis.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/hw/drivers/trng/trng_kinetis/src/trng_kinetis.c b/hw/drivers/trng/trng_kinetis/src/trng_kinetis.c
index 4f3821c..7f38cdf 100644
--- a/hw/drivers/trng/trng_kinetis/src/trng_kinetis.c
+++ b/hw/drivers/trng/trng_kinetis/src/trng_kinetis.c
@@ -191,6 +191,7 @@ kinetis_trng_dev_open(struct os_dev *dev, uint32_t wait, void *arg)
 
 #if USE_RNGA
         RNGA_Init(RNG);
+        RNGA_Seed(RNG, SIM->UIDL);
 #elif USE_TRNG
         (void)TRNG_GetDefaultConfig(&default_config);
         TRNG_Init(TRNG0, &default_config);


[mynewt-core] 02/05: trng: kinetis: update driver for newer families

Posted by ut...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

utzig pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit eea15f7f96ccec8238aae30228f4737c493b9ea3
Author: Fabio Utzig <ut...@apache.org>
AuthorDate: Tue Feb 9 09:41:18 2021 -0300

    trng: kinetis: update driver for newer families
    
    Older Kinetis families used the RNGA HW module for random number
    generation, newer models have a slightly different HW module called
    TRNG; this commit adds TRNG API usage compatibility, and adds syscfg
    to allow BSPs to choose from one of the HW modules.
    
    Signed-off-by: Fabio Utzig <ut...@apache.org>
---
 hw/drivers/trng/trng_kinetis/src/trng_kinetis.c | 67 ++++++++++++++++++++-----
 hw/drivers/trng/trng_kinetis/syscfg.yml         | 10 ++++
 2 files changed, 64 insertions(+), 13 deletions(-)

diff --git a/hw/drivers/trng/trng_kinetis/src/trng_kinetis.c b/hw/drivers/trng/trng_kinetis/src/trng_kinetis.c
index 45d914c..4b79d55 100644
--- a/hw/drivers/trng/trng_kinetis/src/trng_kinetis.c
+++ b/hw/drivers/trng/trng_kinetis/src/trng_kinetis.c
@@ -18,7 +18,27 @@
  */
 
 #include <string.h>
+#include "os/mynewt.h"
+
+#if MYNEWT_VAL(KINETIS_TRNG_USE_RNGA)
+#define USE_RNGA 1
 #include "fsl_rnga.h"
+#elif MYNEWT_VAL(KINETIS_TRNG_USE_TRNG)
+#define USE_TRNG 1
+#include "fsl_trng.h"
+#define TRNG_START(base)                                              \
+    do {                                                              \
+        (base)->MCTL &= ~TRNG_MCTL_PRGM_MASK;                         \
+        (base)->MCTL |= TRNG_MCTL_ERR_MASK;                           \
+    } while (0)
+#define TRNG_STOP(base)                                               \
+    do {                                                              \
+        (base)->MCTL |= (TRNG_MCTL_PRGM_MASK | TRNG_MCTL_ERR_MASK);   \
+    } while (0)
+#else
+#error "Unsupported TRNG interface"
+#endif
+
 #include "trng/trng.h"
 #include "trng_kinetis/trng_kinetis.h"
 
@@ -30,16 +50,20 @@ static os_stack_t *pstack;
 static bool running;
 static struct os_eventq rng_evtq;
 
-#define RNGA_POLLER_PRIO (8)
-#define RNGA_POLLER_STACK_SIZE OS_STACK_ALIGN(64)
+#define TRNG_POLLER_PRIO (8)
+#define TRNG_POLLER_STACK_SIZE OS_STACK_ALIGN(64)
 static struct os_task poller_task;
 
 static inline void
-kinetis_rnga_start(void)
+kinetis_trng_start(void)
 {
     struct os_event evt;
 
+#if USE_RNGA
     RNGA_SetMode(RNG, kRNGA_ModeNormal);
+#elif USE_TRNG
+    TRNG_START(TRNG0);
+#endif
     running = true;
 
     evt.ev_queued = 0;
@@ -48,9 +72,14 @@ kinetis_rnga_start(void)
 }
 
 static inline void
-kinetis_rnga_stop(void)
+kinetis_trng_stop(void)
 {
-   RNGA_SetMode(RNG, kRNGA_ModeSleep);
+#if USE_RNGA
+    RNGA_SetMode(RNG, kRNGA_ModeSleep);
+#elif USE_TRNG
+    TRNG_STOP(TRNG0);
+#endif
+
    running = false;
 }
 
@@ -83,7 +112,7 @@ kinetis_trng_read(struct trng_dev *trng, void *ptr, size_t size)
     rng_cache_out = (rng_cache_out + num_read) % sizeof(rng_cache);
 
     if (num_read > 0) {
-        kinetis_rnga_start();
+        kinetis_trng_start();
     }
 
     os_mutex_release(&rng_cache_mu);
@@ -110,7 +139,7 @@ kinetis_trng_get_u32(struct trng_dev *trng)
 }
 
 static void
-rnga_poller_handler(void *arg)
+trng_poller_handler(void *arg)
 {
     int8_t i;
     uint8_t data[4];
@@ -118,8 +147,12 @@ rnga_poller_handler(void *arg)
 
     while (1) {
         if (running) {
+#if USE_RNGA
             rc = RNGA_GetRandomData(RNG, data, sizeof(uint32_t));
-            if (rc == kStatus_Success) {
+#else
+            rc = TRNG_GetRandomData(TRNG0, data, sizeof(uint32_t));
+#endif
+            if (rc == 0) {
                 os_mutex_pend(&rng_cache_mu, OS_TIMEOUT_NEVER);
                 for (i = 0; i < 4; i++) {
                     rng_cache[rng_cache_in++] = data[i];
@@ -129,7 +162,7 @@ rnga_poller_handler(void *arg)
                     }
 
                     if ((rng_cache_in + 1) % sizeof(rng_cache) == rng_cache_out) {
-                        kinetis_rnga_stop();
+                        kinetis_trng_stop();
                         break;
                     }
                 }
@@ -146,6 +179,9 @@ static int
 kinetis_trng_dev_open(struct os_dev *dev, uint32_t wait, void *arg)
 {
     struct trng_dev *trng;
+#if USE_TRNG
+    trng_config_t default_config;
+#endif
 
     trng = (struct trng_dev *)dev;
     assert(trng);
@@ -154,9 +190,14 @@ kinetis_trng_dev_open(struct os_dev *dev, uint32_t wait, void *arg)
         rng_cache_out = 0;
         rng_cache_in = 0;
 
+#if USE_RNGA
         RNGA_Init(RNG);
+#elif USE_TRNG
+        (void)TRNG_GetDefaultConfig(&default_config);
+        TRNG_Init(TRNG0, &default_config);
+#endif
 
-        kinetis_rnga_start();
+        kinetis_trng_start();
     }
 
     return 0;
@@ -179,11 +220,11 @@ kinetis_trng_dev_init(struct os_dev *dev, void *arg)
     os_eventq_init(&rng_evtq);
     os_mutex_init(&rng_cache_mu);
 
-    pstack = malloc(sizeof(os_stack_t) * RNGA_POLLER_STACK_SIZE);
+    pstack = malloc(sizeof(os_stack_t) * TRNG_POLLER_STACK_SIZE);
     assert(pstack);
 
-    rc = os_task_init(&poller_task, "rnga_poller", rnga_poller_handler, NULL,
-            RNGA_POLLER_PRIO, OS_WAIT_FOREVER, pstack, RNGA_POLLER_STACK_SIZE);
+    rc = os_task_init(&poller_task, "trng_poller", trng_poller_handler, NULL,
+            TRNG_POLLER_PRIO, OS_WAIT_FOREVER, pstack, TRNG_POLLER_STACK_SIZE);
     if (rc) {
         return rc;
     }
diff --git a/hw/drivers/trng/trng_kinetis/syscfg.yml b/hw/drivers/trng/trng_kinetis/syscfg.yml
index 9f8c0cf..7c72a7b 100644
--- a/hw/drivers/trng/trng_kinetis/syscfg.yml
+++ b/hw/drivers/trng/trng_kinetis/syscfg.yml
@@ -20,3 +20,13 @@ syscfg.defs:
     KINETIS_TRNG_CACHE_LEN:
         description: 'Internal cache length, shall be a multiple of 4'
         value: 32
+    KINETIS_TRNG_USE_RNGA:
+        description: 'Use the RNGA HW module (default)'
+        value: 1
+        restrictions:
+            - '!KINETIS_TRNG_USE_TRNG'
+    KINETIS_TRNG_USE_TRNG:
+        description: 'Use the TRNG HW module'
+        value: 0
+        restrictions:
+            - '!KINETIS_TRNG_USE_RNGA'


[mynewt-core] 03/05: hw: bsp: frdm-k82f: enable TRNG usage

Posted by ut...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

utzig pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit de7816922c95f2bd67f21af5c2e8a98853a9bec7
Author: Fabio Utzig <ut...@apache.org>
AuthorDate: Tue Feb 9 07:11:12 2021 -0300

    hw: bsp: frdm-k82f: enable TRNG usage
    
    Signed-off-by: Fabio Utzig <ut...@apache.org>
---
 hw/bsp/frdm-k82f/pkg.yml       |  3 +++
 hw/bsp/frdm-k82f/src/hal_bsp.c | 18 +++++++++++++++++-
 hw/bsp/frdm-k82f/syscfg.yml    |  3 +++
 3 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/hw/bsp/frdm-k82f/pkg.yml b/hw/bsp/frdm-k82f/pkg.yml
index 0389789..e8caa1e 100644
--- a/hw/bsp/frdm-k82f/pkg.yml
+++ b/hw/bsp/frdm-k82f/pkg.yml
@@ -65,3 +65,6 @@ pkg.deps.ENC_FLASH_DEV:
 
 pkg.deps.HASH:
     - "@apache-mynewt-core/hw/drivers/hash/hash_kinetis"
+
+pkg.deps.TRNG:
+    - "@apache-mynewt-core/hw/drivers/trng/trng_kinetis"
diff --git a/hw/bsp/frdm-k82f/src/hal_bsp.c b/hw/bsp/frdm-k82f/src/hal_bsp.c
index 71162d2..4460a15 100644
--- a/hw/bsp/frdm-k82f/src/hal_bsp.c
+++ b/hw/bsp/frdm-k82f/src/hal_bsp.c
@@ -35,6 +35,10 @@
 #include "hash/hash.h"
 #include "hash_kinetis/hash_kinetis.h"
 #endif
+#if MYNEWT_VAL(TRNG)
+#include "trng/trng.h"
+#include "trng_kinetis/trng_kinetis.h"
+#endif
 #if MYNEWT_VAL(UART_0) || MYNEWT_VAL(UART_1) || MYNEWT_VAL(UART_2) || \
     MYNEWT_VAL(UART_3) || MYNEWT_VAL(UART_4)
 #include "uart/uart.h"
@@ -106,6 +110,10 @@ static const struct nxp_hal_i2c_cfg hal_i2c3_cfg = {
 static struct hash_dev os_bsp_hash;
 #endif
 
+#if MYNEWT_VAL(TRNG)
+static struct trng_dev os_bsp_trng;
+#endif
+
 /*
  * What memory to include in coredump.
  */
@@ -116,7 +124,8 @@ static const struct hal_bsp_mem_dump dump_cfg[] = {
     }
 };
 
-static void init_hardware(void)
+static void
+init_hardware(void)
 {
     /* Disable the MPU otherwise USB cannot access the bus */
     SYSMPU->CESR = 0;
@@ -235,6 +244,13 @@ hal_bsp_init(void)
     assert(rc == 0);
 #endif
 
+#if MYNEWT_VAL(TRNG)
+    rc = os_dev_create(&os_bsp_trng.dev, "trng",
+                       OS_DEV_INIT_KERNEL, OS_DEV_INIT_PRIO_DEFAULT,
+                       kinetis_trng_dev_init, NULL);
+    assert(rc == 0);
+#endif
+
 #if MYNEWT_VAL(UART_0)
     rc = os_dev_create((struct os_dev *) &os_bsp_uart0, "uart0",
                        OS_DEV_INIT_PRIMARY, 0, uart_hal_init, NULL);
diff --git a/hw/bsp/frdm-k82f/syscfg.yml b/hw/bsp/frdm-k82f/syscfg.yml
index 34d8130..a1f4b43 100644
--- a/hw/bsp/frdm-k82f/syscfg.yml
+++ b/hw/bsp/frdm-k82f/syscfg.yml
@@ -75,3 +75,6 @@ syscfg.vals:
     REBOOT_LOG_FLASH_AREA: FLASH_AREA_REBOOT_LOG
     NFFS_FLASH_AREA: FLASH_AREA_NFFS
     COREDUMP_FLASH_AREA: FLASH_AREA_IMAGE_1
+
+    KINETIS_TRNG_USE_RNGA: 0
+    KINETIS_TRNG_USE_TRNG: 1