xref: /rk3399_ARM-atf/plat/xilinx/common/include/ipi.h (revision f53f24c1b5e471ed729a713e85577be2ce862b8d)
1 /*
2  * Copyright (c) 2018, Xilinx, Inc. All rights reserved.
3  * Copyright (c) 2022-2025, Advanced Micro Devices, Inc. All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 /* Xilinx IPI management configuration data and macros */
9 
10 #ifndef IPI_H
11 #define IPI_H
12 
13 #include <stdint.h>
14 
15 /*********************************************************************
16  * IPI mailbox status macros
17  ********************************************************************/
18 #define IPI_MB_STATUS_IDLE		(0U)
19 #define IPI_MB_STATUS_SEND_PENDING	(1U)
20 #define IPI_MB_STATUS_RECV_PENDING	(2U)
21 
22 /*********************************************************************
23  * IPI secure check
24  ********************************************************************/
25 #define IPI_SECURE_MASK  (0x1U)
26 #define IPI_IS_SECURE(I) ((ipi_table[(I)].secure_only & \
27 			   IPI_SECURE_MASK) ? true : false)
28 
29 /*********************************************************************
30  * Struct definitions
31  ********************************************************************/
32 
33 /* structure to maintain IPI configuration information */
34 struct ipi_config {
35 	uint32_t ipi_bit_mask;
36 	uint32_t ipi_reg_base;
37 	uint8_t secure_only;
38 };
39 
40 /*********************************************************************
41  * IPI APIs declarations
42  ********************************************************************/
43 
44 /* Initialize IPI configuration table */
45 void ipi_config_table_init(const struct ipi_config *ipi_config_table,
46 			   uint32_t total_ipi);
47 
48 /* Validate IPI mailbox access */
49 int32_t ipi_mb_validate(uint32_t local, uint32_t remote, uint32_t is_secure);
50 
51 /* Open the IPI mailbox */
52 void ipi_mb_open(uint32_t local, uint32_t remote);
53 
54 /* Release the IPI mailbox */
55 void ipi_mb_release(uint32_t local, uint32_t remote);
56 
57 /* Enquire IPI mailbox status */
58 uint32_t ipi_mb_enquire_status(uint32_t local, uint32_t remote);
59 
60 /* Trigger notification on the IPI mailbox */
61 void ipi_mb_notify(uint32_t local, uint32_t remote, uint32_t is_blocking);
62 
63 /* Ack IPI mailbox notification */
64 void ipi_mb_ack(uint32_t local, uint32_t remote);
65 
66 /* Disable IPI mailbox notification interrupt */
67 void ipi_mb_disable_irq(uint32_t local, uint32_t remote);
68 
69 /* Enable IPI mailbox notification interrupt */
70 void ipi_mb_enable_irq(uint32_t local, uint32_t remote);
71 
72 #endif /* IPI_H */
73