1 /* 2 * Copyright (c) 2025, Arm Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #include <stdint.h> 8 #include <string.h> 9 10 #include <common/debug.h> 11 #include <drivers/arm/mhu.h> 12 #include <drivers/arm/rse_comms.h> 13 14 size_t rse_mbx_get_max_message_size(void) 15 { 16 return mhu_get_max_message_size(); 17 } 18 19 int rse_mbx_send_data(const uint8_t *send_buffer, size_t size) 20 { 21 enum mhu_error_t err = mhu_send_data(send_buffer, size); 22 23 if (err != MHU_ERR_NONE) { 24 ERROR("mhu_send_data err=%d\n", err); 25 return -1; 26 } 27 28 return 0; 29 } 30 31 int rse_mbx_receive_data(uint8_t *receive_buffer, size_t *size) 32 { 33 enum mhu_error_t err = mhu_receive_data(receive_buffer, size); 34 35 if (err != MHU_ERR_NONE) { 36 ERROR("mhu_receive_data err=%d\n", err); 37 return -1; 38 } 39 40 return 0; 41 } 42 43 int rse_mbx_init(const void *init_data) 44 { 45 enum mhu_error_t err; 46 const struct mhu_addr *mbx_addr = (const struct mhu_addr *)init_data; 47 48 err = mhu_init_sender(mbx_addr->sender_base); 49 if (err != MHU_ERR_NONE) { 50 if (err == MHU_ERR_ALREADY_INIT) { 51 INFO("[RSE-COMMS] Host to RSE MHU driver already initialized\n"); 52 } else { 53 ERROR("[RSE-COMMS] Host to RSE MHU driver initialization failed: %d\n", 54 err); 55 return -1; 56 } 57 } 58 59 err = mhu_init_receiver(mbx_addr->receiver_base); 60 if (err != MHU_ERR_NONE) { 61 if (err == MHU_ERR_ALREADY_INIT) { 62 INFO("[RSE-COMMS] RSE to Host MHU driver already initialized\n"); 63 } else { 64 ERROR("[RSE-COMMS] RSE to Host MHU driver initialization failed: %d\n", 65 err); 66 return -1; 67 } 68 } 69 70 return 0; 71 } 72