1dc1dfe83SWendy Liang /* 231c3842eSJolly Shah * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved. 3dc1dfe83SWendy Liang * 4dc1dfe83SWendy Liang * SPDX-License-Identifier: BSD-3-Clause 5dc1dfe83SWendy Liang */ 6dc1dfe83SWendy Liang 7dc1dfe83SWendy Liang /* 8dc1dfe83SWendy Liang * Zynq UltraScale+ MPSoC IPI agent registers access management 9dc1dfe83SWendy Liang */ 10dc1dfe83SWendy Liang 11dc1dfe83SWendy Liang #include <errno.h> 12dc1dfe83SWendy Liang #include <string.h> 1309d40e0eSAntonio Nino Diaz 1409d40e0eSAntonio Nino Diaz #include <common/debug.h> 1509d40e0eSAntonio Nino Diaz #include <common/runtime_svc.h> 1609d40e0eSAntonio Nino Diaz #include <lib/bakery_lock.h> 1709d40e0eSAntonio Nino Diaz #include <lib/mmio.h> 18703a5aacSJolly Shah 19703a5aacSJolly Shah #include <ipi.h> 201611ef2bSJolly Shah #include <plat_ipi.h> 2131c3842eSJolly Shah #include <plat_private.h> 2209d40e0eSAntonio Nino Diaz 23dc1dfe83SWendy Liang /* Zynqmp ipi configuration table */ 24703a5aacSJolly Shah const static struct ipi_config zynqmp_ipi_table[] = { 25dc1dfe83SWendy Liang /* APU IPI */ 26dc1dfe83SWendy Liang { 27dc1dfe83SWendy Liang .ipi_bit_mask = 0x1, 28*5bcbd2deSVenkatesh Yadav Abbarapu .ipi_reg_base = 0xFF300000U, 29dc1dfe83SWendy Liang .secure_only = 0, 30dc1dfe83SWendy Liang }, 31dc1dfe83SWendy Liang /* RPU0 IPI */ 32dc1dfe83SWendy Liang { 33dc1dfe83SWendy Liang .ipi_bit_mask = 0x100, 34*5bcbd2deSVenkatesh Yadav Abbarapu .ipi_reg_base = 0xFF310000U, 35dc1dfe83SWendy Liang .secure_only = 0, 36dc1dfe83SWendy Liang }, 37dc1dfe83SWendy Liang /* RPU1 IPI */ 38dc1dfe83SWendy Liang { 39dc1dfe83SWendy Liang .ipi_bit_mask = 0x200, 40*5bcbd2deSVenkatesh Yadav Abbarapu .ipi_reg_base = 0xFF320000U, 41dc1dfe83SWendy Liang .secure_only = 0, 42dc1dfe83SWendy Liang }, 43dc1dfe83SWendy Liang /* PMU0 IPI */ 44dc1dfe83SWendy Liang { 45dc1dfe83SWendy Liang .ipi_bit_mask = 0x10000, 46*5bcbd2deSVenkatesh Yadav Abbarapu .ipi_reg_base = 0xFF330000U, 47dc1dfe83SWendy Liang .secure_only = IPI_SECURE_MASK, 48dc1dfe83SWendy Liang }, 49dc1dfe83SWendy Liang /* PMU1 IPI */ 50dc1dfe83SWendy Liang { 51dc1dfe83SWendy Liang .ipi_bit_mask = 0x20000, 52*5bcbd2deSVenkatesh Yadav Abbarapu .ipi_reg_base = 0xFF331000U, 5385dc2d4dSRajan Vaja .secure_only = 0, 54dc1dfe83SWendy Liang }, 55dc1dfe83SWendy Liang /* PMU2 IPI */ 56dc1dfe83SWendy Liang { 57dc1dfe83SWendy Liang .ipi_bit_mask = 0x40000, 58*5bcbd2deSVenkatesh Yadav Abbarapu .ipi_reg_base = 0xFF332000U, 59dc1dfe83SWendy Liang .secure_only = IPI_SECURE_MASK, 60dc1dfe83SWendy Liang }, 61dc1dfe83SWendy Liang /* PMU3 IPI */ 62dc1dfe83SWendy Liang { 63dc1dfe83SWendy Liang .ipi_bit_mask = 0x80000, 64*5bcbd2deSVenkatesh Yadav Abbarapu .ipi_reg_base = 0xFF333000U, 65dc1dfe83SWendy Liang .secure_only = IPI_SECURE_MASK, 66dc1dfe83SWendy Liang }, 67dc1dfe83SWendy Liang /* PL0 IPI */ 68dc1dfe83SWendy Liang { 69dc1dfe83SWendy Liang .ipi_bit_mask = 0x1000000, 70*5bcbd2deSVenkatesh Yadav Abbarapu .ipi_reg_base = 0xFF340000U, 71dc1dfe83SWendy Liang .secure_only = 0, 72dc1dfe83SWendy Liang }, 73dc1dfe83SWendy Liang /* PL1 IPI */ 74dc1dfe83SWendy Liang { 75dc1dfe83SWendy Liang .ipi_bit_mask = 0x2000000, 76*5bcbd2deSVenkatesh Yadav Abbarapu .ipi_reg_base = 0xFF350000U, 77dc1dfe83SWendy Liang .secure_only = 0, 78dc1dfe83SWendy Liang }, 79dc1dfe83SWendy Liang /* PL2 IPI */ 80dc1dfe83SWendy Liang { 81dc1dfe83SWendy Liang .ipi_bit_mask = 0x4000000, 82*5bcbd2deSVenkatesh Yadav Abbarapu .ipi_reg_base = 0xFF360000U, 83dc1dfe83SWendy Liang .secure_only = 0, 84dc1dfe83SWendy Liang }, 85dc1dfe83SWendy Liang /* PL3 IPI */ 86dc1dfe83SWendy Liang { 87dc1dfe83SWendy Liang .ipi_bit_mask = 0x8000000, 88*5bcbd2deSVenkatesh Yadav Abbarapu .ipi_reg_base = 0xFF370000U, 89dc1dfe83SWendy Liang .secure_only = 0, 90dc1dfe83SWendy Liang }, 91dc1dfe83SWendy Liang }; 92dc1dfe83SWendy Liang 93b8e39f49SJolly Shah /** 94b8e39f49SJolly Shah * zynqmp_ipi_config_table_init() - Initialize ZynqMP IPI configuration data 95b8e39f49SJolly Shah * 96b8e39f49SJolly Shah */ 97b8e39f49SJolly Shah void zynqmp_ipi_config_table_init(void) 98b8e39f49SJolly Shah { 99b8e39f49SJolly Shah ipi_config_table_init(zynqmp_ipi_table, ARRAY_SIZE(zynqmp_ipi_table)); 100b8e39f49SJolly Shah } 101