zephyr/drivers/entropy/entropy_mcux_css.c

56 lines
1.3 KiB
C

/*
* Copyright 2022 NXP
*
* SPDX-License-Identifier: Apache-2.0
*/
#define DT_DRV_COMPAT nxp_css_v2
#include "mcuxClCss_Rng.h"
#include <zephyr/device.h>
#include <zephyr/drivers/entropy.h>
#include <zephyr/init.h>
#include <zephyr/random/rand32.h>
static int entropy_mcux_css_get_entropy(const struct device *dev, uint8_t *buffer, uint16_t length)
{
ARG_UNUSED(dev);
uint8_t status = 0;
MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(result, token, mcuxClCss_Prng_GetRandom(buffer, length));
if ((MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClCss_Prng_GetRandom) != token) ||
(result != MCUXCLCSS_STATUS_OK)) {
status = -EAGAIN;
}
MCUX_CSSL_FP_FUNCTION_CALL_END();
__ASSERT_NO_MSG(!status);
return status;
}
static const struct entropy_driver_api entropy_mcux_css_api_funcs = {
.get_entropy = entropy_mcux_css_get_entropy
};
static int entropy_mcux_css_init(const struct device *dev)
{
ARG_UNUSED(dev);
uint8_t status = 0;
MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(result, token, mcuxClCss_Enable_Async());
if ((MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClCss_Enable_Async) != token) ||
(result != MCUXCLCSS_STATUS_OK_WAIT)) {
status = -ENODEV;
}
MCUX_CSSL_FP_FUNCTION_CALL_END();
__ASSERT_NO_MSG(!status);
return status;
}
DEVICE_DT_INST_DEFINE(0, entropy_mcux_css_init, NULL, NULL, NULL, PRE_KERNEL_1,
CONFIG_ENTROPY_INIT_PRIORITY, &entropy_mcux_css_api_funcs);