arm-trusted-firmware/plat/xilinx/versal_net/versal_net_ipi.c
Ben Levinsky 511e4a48cc feat(versal-net): add bufferless IPI Support
There exist inter-processor interrupts on Versal-Net that do not have
corresponding message buffers. These bufferless IPI's on Versal NET
SOC are added to static IPI Tables.

In hardware description there exists two IPI's called 'IPI6' without
buffers that have respective system interrupt values 95 and 101. For
these append the string '_95' or '_101' to denote the difference for
each.

Change-Id: I22bf1a68cb0ed68913eb868f1c197856fc7d82d5
Signed-off-by: Ben Levinsky <ben.levinsky@amd.com>
2023-12-05 06:59:51 +01:00

133 lines
2.8 KiB
C

/*
* Copyright (c) 2022, Xilinx, Inc. All rights reserved.
* Copyright (c) 2022-2023, Advanced Micro Devices, Inc. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
/*
* Versal NET IPI agent registers access management
*/
#include <lib/utils_def.h>
#include <ipi.h>
#include <plat_ipi.h>
/* versal_net ipi configuration table */
static const struct ipi_config versal_net_ipi_table[IPI_ID_MAX] = {
/* A72 IPI */
[IPI_ID_APU] = {
.ipi_bit_mask = IPI0_TRIG_BIT,
.ipi_reg_base = IPI0_REG_BASE,
.secure_only = 0,
},
/* PMC IPI */
[IPI_ID_PMC] = {
.ipi_bit_mask = PMC_IPI_TRIG_BIT,
.ipi_reg_base = IPI0_REG_BASE,
.secure_only = IPI_SECURE_MASK,
},
/* RPU0 IPI */
[IPI_ID_RPU0] = {
.ipi_bit_mask = IPI1_TRIG_BIT,
.ipi_reg_base = IPI1_REG_BASE,
.secure_only = 0,
},
/* RPU1 IPI */
[IPI_ID_RPU1] = {
.ipi_bit_mask = IPI2_TRIG_BIT,
.ipi_reg_base = IPI2_REG_BASE,
.secure_only = 0,
},
/* IPI3 IPI */
[IPI_ID_3] = {
.ipi_bit_mask = IPI3_TRIG_BIT,
.ipi_reg_base = IPI3_REG_BASE,
.secure_only = 0,
},
/* IPI4 IPI */
[IPI_ID_4] = {
.ipi_bit_mask = IPI4_TRIG_BIT,
.ipi_reg_base = IPI4_REG_BASE,
.secure_only = 0,
},
/* IPI5 IPI */
[IPI_ID_5] = {
.ipi_bit_mask = IPI5_TRIG_BIT,
.ipi_reg_base = IPI5_REG_BASE,
.secure_only = 0,
},
/* PMC_NOBUF IPI */
[IPI_ID_PMC_NOBUF] = {
.ipi_bit_mask = PMC_NOBUF_TRIG_BIT,
.ipi_reg_base = PMC_NOBUF_REG_BASE,
.secure_only = IPI_SECURE_MASK,
},
/* IPI6 IPI */
[IPI_ID_6_NOBUF_95] = {
.ipi_bit_mask = IPI6_NOBUF_95_TRIG_BIT,
.ipi_reg_base = IPI6_NOBUF_95_REG_BASE,
.secure_only = 0,
},
/* IPI1 NO BUF IPI */
[IPI_ID_1_NOBUF] = {
.ipi_bit_mask = IPI1_NOBUF_TRIG_BIT,
.ipi_reg_base = IPI1_NOBUF_REG_BASE,
.secure_only = 0,
},
/* IPI2 NO BUF IPI */
[IPI_ID_2_NOBUF] = {
.ipi_bit_mask = IPI2_NOBUF_TRIG_BIT,
.ipi_reg_base = IPI2_NOBUF_REG_BASE,
.secure_only = 0,
},
/* IPI3 NO BUF IPI */
[IPI_ID_3_NOBUF] = {
.ipi_bit_mask = IPI3_NOBUF_TRIG_BIT,
.ipi_reg_base = IPI3_NOBUF_REG_BASE,
.secure_only = 0,
},
/* IPI4 NO BUF IPI */
[IPI_ID_4_NOBUF] = {
.ipi_bit_mask = IPI4_NOBUF_TRIG_BIT,
.ipi_reg_base = IPI4_NOBUF_REG_BASE,
.secure_only = 0,
},
/* IPI5 NO BUF IPI */
[IPI_ID_5_NOBUF] = {
.ipi_bit_mask = IPI5_NOBUF_TRIG_BIT,
.ipi_reg_base = IPI5_NOBUF_REG_BASE,
.secure_only = 0,
},
/* IPI6 NO BUF IPI */
[IPI_ID_6_NOBUF_101] = {
.ipi_bit_mask = IPI6_NOBUF_101_TRIG_BIT,
.ipi_reg_base = IPI6_NOBUF_101_REG_BASE,
.secure_only = 0,
},
};
/* versal_net_ipi_config_table_init() - Initialize versal_net IPI configuration
* data.
* @ipi_config_table: IPI configuration table.
* @ipi_total: Total number of IPI available.
*
*/
void versal_net_ipi_config_table_init(void)
{
ipi_config_table_init(versal_net_ipi_table, ARRAY_SIZE(versal_net_ipi_table));
}