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 7*6d01a463SJohn Tsichritzis #include <assert.h> 8ab1794f5SAntonio Nino Diaz #include <debug.h> 97d37aa17SJuan Castillo /* mbed TLS headers */ 10649dbf6fSJuan Castillo #include <mbedtls/memory_buffer_alloc.h> 11ab1794f5SAntonio Nino Diaz #include <mbedtls/platform.h> 123b94189aSRoberto Vargas #include <mbedtls_common.h> 13*6d01a463SJohn Tsichritzis #include <mbedtls_config.h> 14*6d01a463SJohn Tsichritzis #include <platform.h> 15*6d01a463SJohn Tsichritzis #include <stddef.h> 167d37aa17SJuan Castillo 176c373345SRoberto Vargas static void cleanup(void) 186c373345SRoberto Vargas { 196c373345SRoberto Vargas ERROR("EXIT from BL2\n"); 206c373345SRoberto Vargas panic(); 216c373345SRoberto Vargas } 226c373345SRoberto Vargas 237d37aa17SJuan Castillo /* 247d37aa17SJuan Castillo * mbed TLS initialization function 257d37aa17SJuan Castillo */ 267d37aa17SJuan Castillo void mbedtls_init(void) 277d37aa17SJuan Castillo { 287d37aa17SJuan Castillo static int ready; 29*6d01a463SJohn Tsichritzis void *heap_addr; 30*6d01a463SJohn Tsichritzis size_t heap_size = 0; 31*6d01a463SJohn Tsichritzis int err; 327d37aa17SJuan Castillo 337d37aa17SJuan Castillo if (!ready) { 346c373345SRoberto Vargas if (atexit(cleanup)) 356c373345SRoberto Vargas panic(); 366c373345SRoberto Vargas 37*6d01a463SJohn Tsichritzis err = plat_get_mbedtls_heap(&heap_addr, &heap_size); 38*6d01a463SJohn Tsichritzis 39*6d01a463SJohn Tsichritzis /* Ensure heap setup is proper */ 40*6d01a463SJohn Tsichritzis if (err < 0) { 41*6d01a463SJohn Tsichritzis ERROR("Mbed TLS failed to get a heap\n"); 42*6d01a463SJohn Tsichritzis panic(); 43*6d01a463SJohn Tsichritzis } 44*6d01a463SJohn Tsichritzis assert(heap_size >= TF_MBEDTLS_HEAP_SIZE); 45*6d01a463SJohn Tsichritzis 467d37aa17SJuan Castillo /* Initialize the mbed TLS heap */ 47*6d01a463SJohn Tsichritzis mbedtls_memory_buffer_alloc_init(heap_addr, heap_size); 48ab1794f5SAntonio Nino Diaz 49c46c18c5SAntonio Nino Diaz #ifdef MBEDTLS_PLATFORM_SNPRINTF_ALT 5039b6cc66SAntonio Nino Diaz mbedtls_platform_set_snprintf(snprintf); 51c46c18c5SAntonio Nino Diaz #endif 527d37aa17SJuan Castillo ready = 1; 537d37aa17SJuan Castillo } 547d37aa17SJuan Castillo } 55