Fix old SDK TRNG clock init, health-test and locking

This commit is contained in:
Mattia Moffa
2026-06-19 04:01:03 +02:00
parent 4252d0fa2f
commit 9ec65ed418
2 changed files with 11 additions and 8 deletions
+11
View File
@@ -625,7 +625,11 @@ int wc_MXC_TRNG_Random(unsigned char* output, unsigned int sz)
if (status != 0) {
return status;
}
#if defined(WOLFSSL_MAX3266X_OLD)
status = TRNG_Init(NULL);
#else
status = MXC_TPU_Init(MXC_SYS_PERIPH_CLOCK_TRNG);
#endif
if (status == 0) {
/* void return function */
MXC_TPU_TRNG_Read(MXC_TRNG, output, sz);
@@ -643,6 +647,13 @@ int wc_MXC_TRNG_Random(unsigned char* output, unsigned int sz)
/* Implements TRNG on-demand health test (the older SDK does not provide one) */
int wc_MXC_TRNG_HealthTest(void)
{
if (TRNG_Init(NULL) != 0) {
MAX3266X_MSG("TRNG Device did not initialize");
return RNG_FAILURE_E;
}
while ((MXC_TRNG->st & MXC_F_TRNG_ST_RND_RDY) == 0) {}
/* Clear on-going test if necessary */
if (MXC_TRNG->cn & MXC_F_TRNG_CN_ODHT) {
MXC_TRNG->cn &= ~MXC_F_TRNG_CN_ODHT;
-8
View File
@@ -5193,30 +5193,22 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
#elif defined(MAX3266X_RNG)
int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
{
#ifdef WOLFSSL_MAX3266X
int status;
#endif /* WOLFSSL_MAX3266X */
static int initDone = 0;
(void)os;
if (initDone == 0) {
#ifdef WOLFSSL_MAX3266X
status = wolfSSL_HwRngMutexLock();
if (status != 0) {
return status;
}
#endif /* WOLFSSL_MAX3266X */
if(MXC_TRNG_HealthTest() != 0) {
#ifdef DEBUG_WOLFSSL
WOLFSSL_MSG("TRNG HW Health Test Failed");
#endif /* DEBUG_WOLFSSL */
#ifdef WOLFSSL_MAX3266X
wolfSSL_HwRngMutexUnLock();
#endif /* WOLFSSL_MAX3266X */
return WC_HW_E;
}
#ifdef WOLFSSL_MAX3266X
wolfSSL_HwRngMutexUnLock();
#endif /* WOLFSSL_MAX3266X */
initDone = 1;
}
return wc_MXC_TRNG_Random(output, sz);