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 Parkvoid 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 Parkvoid 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 Parkuint32_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 Parkvoid 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 Parkvoid 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