xref: /rk3399_ARM-atf/plat/xilinx/zynqmp/include/plat_ipi.h (revision 1611ef2b0f6bf94fb80ba718d90eee5da871d563)
1 /*
2  * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 /* ZynqMP IPI management enums and defines */
8 
9 #ifndef PLAT_IPI_H
10 #define PLAT_IPI_H
11 
12 #include <stdint.h>
13 
14 /*********************************************************************
15  * IPI agent IDs macros
16  ********************************************************************/
17 #define IPI_ID_APU	0U
18 #define IPI_ID_RPU0	1U
19 #define IPI_ID_RPU1	2U
20 #define IPI_ID_PMU0	3U
21 #define IPI_ID_PMU1	4U
22 #define IPI_ID_PMU2	5U
23 #define IPI_ID_PMU3	6U
24 #define IPI_ID_PL0	7U
25 #define IPI_ID_PL1	8U
26 #define IPI_ID_PL2	9U
27 #define IPI_ID_PL3	10U
28 
29 /*********************************************************************
30  * IPI mailbox status macros
31  ********************************************************************/
32 #define IPI_MB_STATUS_IDLE		0
33 #define IPI_MB_STATUS_SEND_PENDING	1
34 #define IPI_MB_STATUS_RECV_PENDING	2
35 
36 /*********************************************************************
37  * IPI mailbox call is secure or not macros
38  ********************************************************************/
39 #define IPI_MB_CALL_NOTSECURE	0
40 #define IPI_MB_CALL_SECURE	1
41 
42 /*********************************************************************
43  * IPI APIs declarations
44  ********************************************************************/
45 
46 /* Validate IPI mailbox access */
47 int ipi_mb_validate(uint32_t local, uint32_t remote, unsigned int is_secure);
48 
49 /* Open the IPI mailbox */
50 void ipi_mb_open(uint32_t local, uint32_t remote);
51 
52 /* Release the IPI mailbox */
53 void ipi_mb_release(uint32_t local, uint32_t remote);
54 
55 /* Enquire IPI mailbox status */
56 int ipi_mb_enquire_status(uint32_t local, uint32_t remote);
57 
58 /* Trigger notification on the IPI mailbox */
59 void ipi_mb_notify(uint32_t local, uint32_t remote, uint32_t is_blocking);
60 
61 /* Ack IPI mailbox notification */
62 void ipi_mb_ack(uint32_t local, uint32_t remote);
63 
64 /* Disable IPI mailbox notification interrupt */
65 void ipi_mb_disable_irq(uint32_t local, uint32_t remote);
66 
67 /* Enable IPI mailbox notification interrupt */
68 void ipi_mb_enable_irq(uint32_t local, uint32_t remote);
69 
70 #endif /* PLAT_IPI_H */
71