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