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