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
rse_mbx_get_max_message_size(void)14 size_t rse_mbx_get_max_message_size(void)
15 {
16 return mhu_get_max_message_size();
17 }
18
rse_mbx_send_data(const uint8_t * send_buffer,size_t size)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
rse_mbx_receive_data(uint8_t * receive_buffer,size_t * size)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
rse_mbx_init(const void * init_data)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