xref: /rk3399_ARM-atf/include/drivers/arm/css/css_mhu_doorbell.h (revision 95bf32e77c3bf5be3d4dea54fd0f6b75543d2d56)
1c411396eSAntonio Nino Diaz /*
2*4f65c0beSLeo Yan  * Copyright (c) 2014-2024, Arm Limited and Contributors. All rights reserved.
3c411396eSAntonio Nino Diaz  *
4c411396eSAntonio Nino Diaz  * SPDX-License-Identifier: BSD-3-Clause
5c411396eSAntonio Nino Diaz  */
6c411396eSAntonio Nino Diaz 
7c411396eSAntonio Nino Diaz #ifndef CSS_MHU_DOORBELL_H
8c411396eSAntonio Nino Diaz #define CSS_MHU_DOORBELL_H
9c411396eSAntonio Nino Diaz 
10c411396eSAntonio Nino Diaz #include <stdint.h>
11c411396eSAntonio Nino Diaz 
12c411396eSAntonio Nino Diaz #include <lib/mmio.h>
13c411396eSAntonio Nino Diaz 
14f8931606SAditya Angadi /* MHUv2 Frame Base Mask */
15f8931606SAditya Angadi #define MHU_V2_FRAME_BASE_MASK			UL(~0xFFF)
16c411396eSAntonio Nino Diaz 
17c411396eSAntonio Nino Diaz /* MHUv2 Control Registers Offsets */
18f8931606SAditya Angadi #define MHU_V2_MSG_NO_CAP_OFFSET		UL(0xF80)
19f8931606SAditya Angadi #define MHU_V2_ACCESS_REQ_OFFSET		UL(0xF88)
20f8931606SAditya Angadi #define MHU_V2_ACCESS_READY_OFFSET		UL(0xF8C)
21c411396eSAntonio Nino Diaz 
22c411396eSAntonio Nino Diaz #define SENDER_REG_STAT(_channel)	(0x20 * (_channel))
23c411396eSAntonio Nino Diaz #define SENDER_REG_SET(_channel)	((0x20 * (_channel)) + 0xC)
24c411396eSAntonio Nino Diaz 
25*4f65c0beSLeo Yan #define MHU_V3_PBX_PDBCW_PAGE_OFFSET		UL(0x1000)
26*4f65c0beSLeo Yan #define MHU_V3_SENDER_REG_SET(_channel)		(MHU_V3_PBX_PDBCW_PAGE_OFFSET + \
27*4f65c0beSLeo Yan 						 SENDER_REG_SET(_channel))
28*4f65c0beSLeo Yan 
29c411396eSAntonio Nino Diaz /* Helper macro to ring doorbell */
30c411396eSAntonio Nino Diaz #define MHU_RING_DOORBELL(addr, modify_mask, preserve_mask)	do {	\
31c411396eSAntonio Nino Diaz 		uint32_t db = mmio_read_32(addr) & (preserve_mask);	\
32c411396eSAntonio Nino Diaz 		mmio_write_32(addr, db | (modify_mask));		\
33c411396eSAntonio Nino Diaz 	} while (0)
34c411396eSAntonio Nino Diaz 
35c411396eSAntonio Nino Diaz #define MHU_V2_ACCESS_REQUEST(addr)	\
36c411396eSAntonio Nino Diaz 	mmio_write_32((addr) + MHU_V2_ACCESS_REQ_OFFSET, 0x1)
37c411396eSAntonio Nino Diaz 
38c411396eSAntonio Nino Diaz #define MHU_V2_CLEAR_REQUEST(addr)	\
39c411396eSAntonio Nino Diaz 	mmio_write_32((addr) + MHU_V2_ACCESS_REQ_OFFSET, 0x0)
40c411396eSAntonio Nino Diaz 
41c411396eSAntonio Nino Diaz #define MHU_V2_IS_ACCESS_READY(addr)	\
42c411396eSAntonio Nino Diaz 	(mmio_read_32((addr) + MHU_V2_ACCESS_READY_OFFSET) & 0x1)
43c411396eSAntonio Nino Diaz 
44c411396eSAntonio Nino Diaz struct scmi_channel_plat_info;
45c411396eSAntonio Nino Diaz void mhu_ring_doorbell(struct scmi_channel_plat_info *plat_info);
46c411396eSAntonio Nino Diaz void mhuv2_ring_doorbell(struct scmi_channel_plat_info *plat_info);
47c411396eSAntonio Nino Diaz 
48c411396eSAntonio Nino Diaz #endif	/* CSS_MHU_DOORBELL_H */
49