blob: 15d7ab04e1b8b05462d93a2ac6f3822819bfc53b [file] [log] [blame]
Wendy Liang3aebacf2017-09-13 11:02:42 -07001/*
Jolly Shah4c172372019-01-08 11:21:29 -08002 * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved.
Wendy Liang3aebacf2017-09-13 11:02:42 -07003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7/* ZynqMP IPI management enums and defines */
8
Jolly Shah4c172372019-01-08 11:21:29 -08009#ifndef PLAT_IPI_H
10#define PLAT_IPI_H
Wendy Liang3aebacf2017-09-13 11:02:42 -070011
12#include <stdint.h>
Jolly Shah2f952be2019-01-08 11:27:36 -080013#include <ipi.h>
Wendy Liang3aebacf2017-09-13 11:02:42 -070014
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 ********************************************************************/
Jolly Shah2f952be2019-01-08 11:27:36 -080046/* Configure IPI table for zynqmp */
47void zynqmp_ipi_config_table_init(void);
48
49/* Initialize IPI configuration table */
50void ipi_config_table_init(const struct ipi_config *ipi_table,
51 uint32_t total_ipi);
Wendy Liang3aebacf2017-09-13 11:02:42 -070052
53/* Validate IPI mailbox access */
54int ipi_mb_validate(uint32_t local, uint32_t remote, unsigned int is_secure);
55
56/* Open the IPI mailbox */
57void ipi_mb_open(uint32_t local, uint32_t remote);
58
59/* Release the IPI mailbox */
60void ipi_mb_release(uint32_t local, uint32_t remote);
61
62/* Enquire IPI mailbox status */
63int ipi_mb_enquire_status(uint32_t local, uint32_t remote);
64
65/* Trigger notification on the IPI mailbox */
66void ipi_mb_notify(uint32_t local, uint32_t remote, uint32_t is_blocking);
67
68/* Ack IPI mailbox notification */
69void ipi_mb_ack(uint32_t local, uint32_t remote);
70
71/* Disable IPI mailbox notification interrupt */
72void ipi_mb_disable_irq(uint32_t local, uint32_t remote);
73
74/* Enable IPI mailbox notification interrupt */
75void ipi_mb_enable_irq(uint32_t local, uint32_t remote);
76
Jolly Shah4c172372019-01-08 11:21:29 -080077#endif /* PLAT_IPI_H */