xref: /rk3399_ARM-atf/drivers/arm/rse/rse_comms_mhu.c (revision 06f3c7058c42a9f1a9f7df75ea2de71a000855e8)
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