xref: /rk3399_ARM-atf/plat/xilinx/zynqmp/include/plat_ipi.h (revision b8e39f49e63478a9dd3832afc9084dd4a2ab15e2)
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 #include <ipi.h>
14 
15 /*********************************************************************
16  * IPI agent IDs macros
17  ********************************************************************/
18 #define IPI_ID_APU	0U
19 #define IPI_ID_RPU0	1U
20 #define IPI_ID_RPU1	2U
21 #define IPI_ID_PMU0	3U
22 #define IPI_ID_PMU1	4U
23 #define IPI_ID_PMU2	5U
24 #define IPI_ID_PMU3	6U
25 #define IPI_ID_PL0	7U
26 #define IPI_ID_PL1	8U
27 #define IPI_ID_PL2	9U
28 #define IPI_ID_PL3	10U
29 
30 /*********************************************************************
31  * IPI mailbox status macros
32  ********************************************************************/
33 #define IPI_MB_STATUS_IDLE		0
34 #define IPI_MB_STATUS_SEND_PENDING	1
35 #define IPI_MB_STATUS_RECV_PENDING	2
36 
37 /*********************************************************************
38  * IPI mailbox call is secure or not macros
39  ********************************************************************/
40 #define IPI_MB_CALL_NOTSECURE	0
41 #define IPI_MB_CALL_SECURE	1
42 
43 /*********************************************************************
44  * IPI APIs declarations
45  ********************************************************************/
46 /* Configure IPI table for zynqmp */
47 void zynqmp_ipi_config_table_init(void);
48 
49 /* Initialize IPI configuration table */
50 void ipi_config_table_init(const struct ipi_config *ipi_table,
51 			   uint32_t total_ipi);
52 
53 /* Validate IPI mailbox access */
54 int ipi_mb_validate(uint32_t local, uint32_t remote, unsigned int is_secure);
55 
56 /* Open the IPI mailbox */
57 void ipi_mb_open(uint32_t local, uint32_t remote);
58 
59 /* Release the IPI mailbox */
60 void ipi_mb_release(uint32_t local, uint32_t remote);
61 
62 /* Enquire IPI mailbox status */
63 int ipi_mb_enquire_status(uint32_t local, uint32_t remote);
64 
65 /* Trigger notification on the IPI mailbox */
66 void ipi_mb_notify(uint32_t local, uint32_t remote, uint32_t is_blocking);
67 
68 /* Ack IPI mailbox notification */
69 void ipi_mb_ack(uint32_t local, uint32_t remote);
70 
71 /* Disable IPI mailbox notification interrupt */
72 void ipi_mb_disable_irq(uint32_t local, uint32_t remote);
73 
74 /* Enable IPI mailbox notification interrupt */
75 void ipi_mb_enable_irq(uint32_t local, uint32_t remote);
76 
77 #endif /* PLAT_IPI_H */
78