Commit 629cfd58 authored by joanna.farley's avatar joanna.farley Committed by TrustedFirmware Code Review
Browse files

Merge "qti: Add RNG driver" into integration

parents acca14b6 905f93c7
/*
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef QTI_RNG_H
#define QTI_RNG_H
#include <stdinit.h>
int qti_rng_get_data(uint8_t *out, uint32_t out_len);
#endif /* QTI_RNG_H */
/*
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <stddef.h>
#include <stdint.h>
#include <lib/mmio.h>
#include <qti_rng_io.h>
int qti_rng_get_data(uint8_t *out, uint32_t out_len)
{
uint32_t tmp_rndm = 0;
uint32_t bytes_left = out_len;
int i = 0;
if (NULL == out || 0 == out_len) {
return -1;
}
/*
* RNG HW initialized at previous boot image.
* RNG clocks are expected to be ON.
*/
do {
/* There is no data to read */
if ((mmio_read_32(SEC_PRNG_STATUS) &
SEC_PRNG_STATUS_DATA_AVAIL_BMSK) == 0) {
continue;
}
while ((tmp_rndm = mmio_read_32(SEC_PRNG_DATA_OUT)) == 0) {
;
}
for (i = 0; i < 4; i++) {
*out = (uint8_t) (tmp_rndm >> (8 * i));
out++;
bytes_left--;
if (bytes_left == 0) {
break;
}
}
} while (bytes_left != 0);
return 0;
}
/*
* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
......@@ -9,16 +9,18 @@
#include <platform.h>
#include <platform_def.h>
#include <qti_rng.h>
#include <qtiseclib_interface.h>
u_register_t plat_get_stack_protector_canary(void)
{
u_register_t random = 0x0;
/* get random data , the below API doesn't return random = 0 in success
* case */
qtiseclib_prng_get_data((uint8_t *) &random, sizeof(random));
assert(0x0 != random);
/*
* get random data , the below API doesn't return random = 0 on success
*/
qti_rng_get_data((uint8_t *) &random, sizeof(random));
assert(random != 0x0);
return random;
}
......@@ -63,7 +63,6 @@ void qtiseclib_kryo4_silver_reset_asm(void);
void qtiseclib_bl31_platform_setup(void);
void qtiseclib_invoke_isr(uint32_t irq, void *handle);
void qtiseclib_panic(void);
int qtiseclib_prng_get_data(uint8_t *out, uint32_t out_len);
int qtiseclib_mem_assign(const memprot_info_t *mem_info,
uint32_t mem_info_list_cnt,
......
......@@ -67,17 +67,6 @@ void qtiseclib_panic(void)
{
}
int qtiseclib_prng_get_data(uint8_t *out, uint32_t out_len)
{
/* fill dummy data to avoid assert and print
* stub implementation in setup call
*/
for (int i = 0; i < out_len; i++) {
out[i] = 0x11;
}
return 0;
}
int
qtiseclib_mem_assign(const memprot_info_t *mem_info,
uint32_t mem_info_list_cnt,
......
/*
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef QTI_RNG_IO_H
#define QTI_RNG_IO_H
#define SEC_PRNG_STATUS 0x00791004
#define SEC_PRNG_STATUS_DATA_AVAIL_BMSK 0x1
#define SEC_PRNG_DATA_OUT 0x00791000
#endif /* QTI_RNG_IO_H */
......@@ -59,6 +59,7 @@ QTI_BL31_SOURCES := $(QTI_PLAT_PATH)/common/src/$(ARCH)/qti_helpers.S \
$(QTI_PLAT_PATH)/common/src/qti_syscall.c \
$(QTI_PLAT_PATH)/common/src/qti_topology.c \
$(QTI_PLAT_PATH)/common/src/qti_pm.c \
$(QTI_PLAT_PATH)/common/src/qti_rng.c \
$(QTI_PLAT_PATH)/qtiseclib/src/qtiseclib_cb_interface.c \
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment