1*06f66bf9SSahil Malhotra /* SPDX-License-Identifier: BSD-2-Clause */ 2*06f66bf9SSahil Malhotra /* 3*06f66bf9SSahil Malhotra * Copyright NXP 2025 4*06f66bf9SSahil Malhotra */ 5*06f66bf9SSahil Malhotra 6*06f66bf9SSahil Malhotra #ifndef __ELE_H_ 7*06f66bf9SSahil Malhotra #define __ELE_H_ 8*06f66bf9SSahil Malhotra 9*06f66bf9SSahil Malhotra #include <drivers/imx_mu.h> 10*06f66bf9SSahil Malhotra #include <tee_api_types.h> 11*06f66bf9SSahil Malhotra #include <trace.h> 12*06f66bf9SSahil Malhotra 13*06f66bf9SSahil Malhotra /* Definitions for communication protocol */ 14*06f66bf9SSahil Malhotra #define ELE_VERSION_HSM 0x07 15*06f66bf9SSahil Malhotra #define ELE_REQUEST_TAG 0x17 16*06f66bf9SSahil Malhotra size_msg(size_t cmd)17*06f66bf9SSahil Malhotrastatic inline size_t size_msg(size_t cmd) 18*06f66bf9SSahil Malhotra { 19*06f66bf9SSahil Malhotra size_t words = ROUNDUP(cmd, sizeof(uint32_t)) / sizeof(uint32_t); 20*06f66bf9SSahil Malhotra 21*06f66bf9SSahil Malhotra /* Add the header size */ 22*06f66bf9SSahil Malhotra words = words + 1; 23*06f66bf9SSahil Malhotra 24*06f66bf9SSahil Malhotra return words; 25*06f66bf9SSahil Malhotra } 26*06f66bf9SSahil Malhotra 27*06f66bf9SSahil Malhotra #define SIZE_MSG_32(_msg) size_msg(sizeof(_msg)) 28*06f66bf9SSahil Malhotra 29*06f66bf9SSahil Malhotra /* 30*06f66bf9SSahil Malhotra * The CRC is the last word of the message 31*06f66bf9SSahil Malhotra * 32*06f66bf9SSahil Malhotra * msg: MU message to hash 33*06f66bf9SSahil Malhotra */ 34*06f66bf9SSahil Malhotra void update_crc(struct imx_mu_msg *msg); 35*06f66bf9SSahil Malhotra 36*06f66bf9SSahil Malhotra /* 37*06f66bf9SSahil Malhotra * Initiate a communication with the EdgeLock Enclave. It sends a message 38*06f66bf9SSahil Malhotra * and expects an answer. 39*06f66bf9SSahil Malhotra * 40*06f66bf9SSahil Malhotra * @msg MU message 41*06f66bf9SSahil Malhotra */ 42*06f66bf9SSahil Malhotra TEE_Result imx_ele_call(struct imx_mu_msg *msg); 43*06f66bf9SSahil Malhotra 44*06f66bf9SSahil Malhotra #endif /* __ELE_H_ */ 45