xref: /rk3399_ARM-atf/drivers/auth/mbedtls/mbedtls_common.c (revision 17e1335c893bce16883c8e76b251e1013c6ec001)
17d37aa17SJuan Castillo /*
2*17e1335cSJohn Tsichritzis  * Copyright (c) 2015-2019, ARM Limited and Contributors. All rights reserved.
37d37aa17SJuan Castillo  *
482cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
57d37aa17SJuan Castillo  */
67d37aa17SJuan Castillo 
76d01a463SJohn Tsichritzis #include <assert.h>
809d40e0eSAntonio Nino Diaz #include <stddef.h>
909d40e0eSAntonio Nino Diaz 
107d37aa17SJuan Castillo /* mbed TLS headers */
11649dbf6fSJuan Castillo #include <mbedtls/memory_buffer_alloc.h>
12ab1794f5SAntonio Nino Diaz #include <mbedtls/platform.h>
1309d40e0eSAntonio Nino Diaz 
1409d40e0eSAntonio Nino Diaz #include <common/debug.h>
1509d40e0eSAntonio Nino Diaz #include <drivers/auth/mbedtls/mbedtls_common.h>
1609d40e0eSAntonio Nino Diaz #include <drivers/auth/mbedtls/mbedtls_config.h>
1709d40e0eSAntonio Nino Diaz #include <plat/common/platform.h>
187d37aa17SJuan Castillo 
19*17e1335cSJohn Tsichritzis #pragma weak plat_get_mbedtls_heap
20*17e1335cSJohn Tsichritzis 
216c373345SRoberto Vargas static void cleanup(void)
226c373345SRoberto Vargas {
236c373345SRoberto Vargas 	ERROR("EXIT from BL2\n");
246c373345SRoberto Vargas 	panic();
256c373345SRoberto Vargas }
266c373345SRoberto Vargas 
277d37aa17SJuan Castillo /*
287d37aa17SJuan Castillo  * mbed TLS initialization function
297d37aa17SJuan Castillo  */
307d37aa17SJuan Castillo void mbedtls_init(void)
317d37aa17SJuan Castillo {
327d37aa17SJuan Castillo 	static int ready;
336d01a463SJohn Tsichritzis 	void *heap_addr;
346d01a463SJohn Tsichritzis 	size_t heap_size = 0;
356d01a463SJohn Tsichritzis 	int err;
367d37aa17SJuan Castillo 
377d37aa17SJuan Castillo 	if (!ready) {
386c373345SRoberto Vargas 		if (atexit(cleanup))
396c373345SRoberto Vargas 			panic();
406c373345SRoberto Vargas 
416d01a463SJohn Tsichritzis 		err = plat_get_mbedtls_heap(&heap_addr, &heap_size);
426d01a463SJohn Tsichritzis 
436d01a463SJohn Tsichritzis 		/* Ensure heap setup is proper */
446d01a463SJohn Tsichritzis 		if (err < 0) {
456d01a463SJohn Tsichritzis 			ERROR("Mbed TLS failed to get a heap\n");
466d01a463SJohn Tsichritzis 			panic();
476d01a463SJohn Tsichritzis 		}
486d01a463SJohn Tsichritzis 		assert(heap_size >= TF_MBEDTLS_HEAP_SIZE);
496d01a463SJohn Tsichritzis 
507d37aa17SJuan Castillo 		/* Initialize the mbed TLS heap */
516d01a463SJohn Tsichritzis 		mbedtls_memory_buffer_alloc_init(heap_addr, heap_size);
52ab1794f5SAntonio Nino Diaz 
53c46c18c5SAntonio Nino Diaz #ifdef MBEDTLS_PLATFORM_SNPRINTF_ALT
5439b6cc66SAntonio Nino Diaz 		mbedtls_platform_set_snprintf(snprintf);
55c46c18c5SAntonio Nino Diaz #endif
567d37aa17SJuan Castillo 		ready = 1;
577d37aa17SJuan Castillo 	}
587d37aa17SJuan Castillo }
59*17e1335cSJohn Tsichritzis 
60*17e1335cSJohn Tsichritzis /*
61*17e1335cSJohn Tsichritzis  * The following default implementation of the function simply returns the
62*17e1335cSJohn Tsichritzis  * by default allocated heap.
63*17e1335cSJohn Tsichritzis  */
64*17e1335cSJohn Tsichritzis int plat_get_mbedtls_heap(void **heap_addr, size_t *heap_size)
65*17e1335cSJohn Tsichritzis {
66*17e1335cSJohn Tsichritzis 	static unsigned char heap[TF_MBEDTLS_HEAP_SIZE];
67*17e1335cSJohn Tsichritzis 
68*17e1335cSJohn Tsichritzis 	assert(heap_addr != NULL);
69*17e1335cSJohn Tsichritzis 	assert(heap_size != NULL);
70*17e1335cSJohn Tsichritzis 
71*17e1335cSJohn Tsichritzis 	*heap_addr = heap;
72*17e1335cSJohn Tsichritzis 	*heap_size = sizeof(heap);
73*17e1335cSJohn Tsichritzis 	return 0;
74*17e1335cSJohn Tsichritzis }
75