17d37aa17SJuan Castillo /* 23b94189aSRoberto Vargas * Copyright (c) 2015-2018, 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> 8*09d40e0eSAntonio Nino Diaz #include <stddef.h> 9*09d40e0eSAntonio Nino Diaz 107d37aa17SJuan Castillo /* mbed TLS headers */ 11649dbf6fSJuan Castillo #include <mbedtls/memory_buffer_alloc.h> 12ab1794f5SAntonio Nino Diaz #include <mbedtls/platform.h> 13*09d40e0eSAntonio Nino Diaz 14*09d40e0eSAntonio Nino Diaz #include <common/debug.h> 15*09d40e0eSAntonio Nino Diaz #include <drivers/auth/mbedtls/mbedtls_common.h> 16*09d40e0eSAntonio Nino Diaz #include <drivers/auth/mbedtls/mbedtls_config.h> 17*09d40e0eSAntonio Nino Diaz #include <plat/common/platform.h> 187d37aa17SJuan Castillo 196c373345SRoberto Vargas static void cleanup(void) 206c373345SRoberto Vargas { 216c373345SRoberto Vargas ERROR("EXIT from BL2\n"); 226c373345SRoberto Vargas panic(); 236c373345SRoberto Vargas } 246c373345SRoberto Vargas 257d37aa17SJuan Castillo /* 267d37aa17SJuan Castillo * mbed TLS initialization function 277d37aa17SJuan Castillo */ 287d37aa17SJuan Castillo void mbedtls_init(void) 297d37aa17SJuan Castillo { 307d37aa17SJuan Castillo static int ready; 316d01a463SJohn Tsichritzis void *heap_addr; 326d01a463SJohn Tsichritzis size_t heap_size = 0; 336d01a463SJohn Tsichritzis int err; 347d37aa17SJuan Castillo 357d37aa17SJuan Castillo if (!ready) { 366c373345SRoberto Vargas if (atexit(cleanup)) 376c373345SRoberto Vargas panic(); 386c373345SRoberto Vargas 396d01a463SJohn Tsichritzis err = plat_get_mbedtls_heap(&heap_addr, &heap_size); 406d01a463SJohn Tsichritzis 416d01a463SJohn Tsichritzis /* Ensure heap setup is proper */ 426d01a463SJohn Tsichritzis if (err < 0) { 436d01a463SJohn Tsichritzis ERROR("Mbed TLS failed to get a heap\n"); 446d01a463SJohn Tsichritzis panic(); 456d01a463SJohn Tsichritzis } 466d01a463SJohn Tsichritzis assert(heap_size >= TF_MBEDTLS_HEAP_SIZE); 476d01a463SJohn Tsichritzis 487d37aa17SJuan Castillo /* Initialize the mbed TLS heap */ 496d01a463SJohn Tsichritzis mbedtls_memory_buffer_alloc_init(heap_addr, heap_size); 50ab1794f5SAntonio Nino Diaz 51c46c18c5SAntonio Nino Diaz #ifdef MBEDTLS_PLATFORM_SNPRINTF_ALT 5239b6cc66SAntonio Nino Diaz mbedtls_platform_set_snprintf(snprintf); 53c46c18c5SAntonio Nino Diaz #endif 547d37aa17SJuan Castillo ready = 1; 557d37aa17SJuan Castillo } 567d37aa17SJuan Castillo } 57