xref: /aosp_15_r20/external/arm-trusted-firmware/plat/amlogic/common/aml_mhu.c (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
3*54fd6939SJiyong Park  *
4*54fd6939SJiyong Park  * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park  */
6*54fd6939SJiyong Park 
7*54fd6939SJiyong Park #include <lib/bakery_lock.h>
8*54fd6939SJiyong Park #include <lib/mmio.h>
9*54fd6939SJiyong Park #include <platform_def.h>
10*54fd6939SJiyong Park 
11*54fd6939SJiyong Park static DEFINE_BAKERY_LOCK(mhu_lock);
12*54fd6939SJiyong Park 
aml_mhu_secure_message_start(void)13*54fd6939SJiyong Park void aml_mhu_secure_message_start(void)
14*54fd6939SJiyong Park {
15*54fd6939SJiyong Park 	bakery_lock_get(&mhu_lock);
16*54fd6939SJiyong Park 
17*54fd6939SJiyong Park 	while (mmio_read_32(AML_HIU_MAILBOX_STAT_3) != 0)
18*54fd6939SJiyong Park 		;
19*54fd6939SJiyong Park }
20*54fd6939SJiyong Park 
aml_mhu_secure_message_send(uint32_t msg)21*54fd6939SJiyong Park void aml_mhu_secure_message_send(uint32_t msg)
22*54fd6939SJiyong Park {
23*54fd6939SJiyong Park 	mmio_write_32(AML_HIU_MAILBOX_SET_3, msg);
24*54fd6939SJiyong Park 
25*54fd6939SJiyong Park 	while (mmio_read_32(AML_HIU_MAILBOX_STAT_3) != 0)
26*54fd6939SJiyong Park 		;
27*54fd6939SJiyong Park }
28*54fd6939SJiyong Park 
aml_mhu_secure_message_wait(void)29*54fd6939SJiyong Park uint32_t aml_mhu_secure_message_wait(void)
30*54fd6939SJiyong Park {
31*54fd6939SJiyong Park 	uint32_t val;
32*54fd6939SJiyong Park 
33*54fd6939SJiyong Park 	do {
34*54fd6939SJiyong Park 		val = mmio_read_32(AML_HIU_MAILBOX_STAT_0);
35*54fd6939SJiyong Park 	} while (val == 0);
36*54fd6939SJiyong Park 
37*54fd6939SJiyong Park 	return val;
38*54fd6939SJiyong Park }
39*54fd6939SJiyong Park 
aml_mhu_secure_message_end(void)40*54fd6939SJiyong Park void aml_mhu_secure_message_end(void)
41*54fd6939SJiyong Park {
42*54fd6939SJiyong Park 	mmio_write_32(AML_HIU_MAILBOX_CLR_0, 0xFFFFFFFF);
43*54fd6939SJiyong Park 
44*54fd6939SJiyong Park 	bakery_lock_release(&mhu_lock);
45*54fd6939SJiyong Park }
46*54fd6939SJiyong Park 
aml_mhu_secure_init(void)47*54fd6939SJiyong Park void aml_mhu_secure_init(void)
48*54fd6939SJiyong Park {
49*54fd6939SJiyong Park 	bakery_lock_init(&mhu_lock);
50*54fd6939SJiyong Park 
51*54fd6939SJiyong Park 	mmio_write_32(AML_HIU_MAILBOX_CLR_3, 0xFFFFFFFF);
52*54fd6939SJiyong Park }
53