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