blob: 8032393c0ccd7eff62bada8ba8de14e34acc2ab1 [file] [log] [blame]
Yann Gautier36416b12024-09-23 14:00:01 +02001/*
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
14size_t rse_mbx_get_max_message_size(void)
15{
16 return mhu_get_max_message_size();
17}
18
19int 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
31int 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
43int 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}