From 62f9134de08041322c8e970b19b7bd3d4f176275 Mon Sep 17 00:00:00 2001 From: Venkatesh Yadav Abbarapu Date: Wed, 4 Aug 2021 21:33:15 -0600 Subject: [PATCH] revert(plat/xilinx): add timeout while waiting for IPI Ack This reverts commit 4d9b9b2352f9a67849faf2d4484f5fcdd2788b01. Timeout in IPI ack was added for functional safety reason. Functional safety is not criteria for ATF. However, this creates issues for APIs that take long or non-deterministic duration like FPGA load. So revert this patch for now to fix FPGA loading issue. Need to add support for non-blocking API for FPGA loading with callback when API completes. Signed-off-by: Rajan Vaja Signed-off-by: Venkatesh Yadav Abbarapu Change-Id: I940e798f1e2f7d0dfca1da5caaf8b94036d440c6 --- plat/xilinx/common/include/ipi.h | 2 +- plat/xilinx/common/ipi.c | 15 +-------------- .../common/ipi_mailbox_service/ipi_mailbox_svc.c | 4 ++-- plat/xilinx/common/pm_service/pm_ipi.c | 8 ++------ 4 files changed, 6 insertions(+), 23 deletions(-) diff --git a/plat/xilinx/common/include/ipi.h b/plat/xilinx/common/include/ipi.h index 9c1d0f267..483902e0e 100644 --- a/plat/xilinx/common/include/ipi.h +++ b/plat/xilinx/common/include/ipi.h @@ -63,7 +63,7 @@ void ipi_mb_release(uint32_t local, uint32_t remote); int ipi_mb_enquire_status(uint32_t local, uint32_t remote); /* Trigger notification on the IPI mailbox */ -int ipi_mb_notify(uint32_t local, uint32_t remote, uint32_t is_blocking); +void ipi_mb_notify(uint32_t local, uint32_t remote, uint32_t is_blocking); /* Ack IPI mailbox notification */ void ipi_mb_ack(uint32_t local, uint32_t remote); diff --git a/plat/xilinx/common/ipi.c b/plat/xilinx/common/ipi.c index ca4146e2a..0b8020b40 100644 --- a/plat/xilinx/common/ipi.c +++ b/plat/xilinx/common/ipi.c @@ -13,7 +13,6 @@ #include #include -#include #include #include @@ -39,9 +38,6 @@ /* IPI register bit mask */ #define IPI_BIT_MASK(I) (ipi_table[(I)].ipi_bit_mask) -/* IPI Timeout */ -#define TIMEOUT_COUNT_US U(0x4000) - /* IPI configuration table */ const static struct ipi_config *ipi_table; @@ -160,30 +156,21 @@ int ipi_mb_enquire_status(uint32_t local, uint32_t remote) * @remote - remote IPI ID * @is_blocking - if to trigger the notification in blocking mode or not. * - * return - 0 - Success or Error incase of timeout * It sets the remote bit in the IPI agent trigger register. * */ -int ipi_mb_notify(uint32_t local, uint32_t remote, uint32_t is_blocking) +void ipi_mb_notify(uint32_t local, uint32_t remote, uint32_t is_blocking) { uint32_t status; - const unsigned int timeout_count = TIMEOUT_COUNT_US; - uint64_t timeout; mmio_write_32(IPI_REG_BASE(local) + IPI_TRIG_OFFSET, IPI_BIT_MASK(remote)); if (is_blocking) { - timeout = timeout_init_us(timeout_count); do { status = mmio_read_32(IPI_REG_BASE(local) + IPI_OBR_OFFSET); - if (timeout_elapsed(timeout)) { - return -ETIMEDOUT; - } } while (status & IPI_BIT_MASK(remote)); } - - return 0; } /* ipi_mb_ack() - Ack IPI mailbox notification from the other end diff --git a/plat/xilinx/common/ipi_mailbox_service/ipi_mailbox_svc.c b/plat/xilinx/common/ipi_mailbox_service/ipi_mailbox_svc.c index cd5d8303d..f53115885 100644 --- a/plat/xilinx/common/ipi_mailbox_service/ipi_mailbox_svc.c +++ b/plat/xilinx/common/ipi_mailbox_service/ipi_mailbox_svc.c @@ -107,8 +107,8 @@ uint64_t ipi_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2, uint32_t is_blocking; is_blocking = (x3 & IPI_SMC_NOTIFY_BLOCK_MASK) ? 1 : 0; - ret = ipi_mb_notify(ipi_local_id, ipi_remote_id, is_blocking); - SMC_RET1(handle, ret); + ipi_mb_notify(ipi_local_id, ipi_remote_id, is_blocking); + SMC_RET1(handle, 0); } case IPI_MAILBOX_ACK: { diff --git a/plat/xilinx/common/pm_service/pm_ipi.c b/plat/xilinx/common/pm_service/pm_ipi.c index 7b5bd0280..7b2c8ecb1 100644 --- a/plat/xilinx/common/pm_service/pm_ipi.c +++ b/plat/xilinx/common/pm_service/pm_ipi.c @@ -55,7 +55,6 @@ static enum pm_ret_status pm_ipi_send_common(const struct pm_proc *proc, uint32_t payload[PAYLOAD_ARG_CNT], uint32_t is_blocking) { - int status; unsigned int offset = 0; uintptr_t buffer_base = proc->ipi->buffer_base + IPI_BUFFER_TARGET_REMOTE_OFFSET + @@ -71,13 +70,10 @@ static enum pm_ret_status pm_ipi_send_common(const struct pm_proc *proc, } /* Generate IPI to remote processor */ - status = ipi_mb_notify(proc->ipi->local_ipi_id, proc->ipi->remote_ipi_id, + ipi_mb_notify(proc->ipi->local_ipi_id, proc->ipi->remote_ipi_id, is_blocking); - if (status == 0) { - return PM_RET_SUCCESS; - } - return PM_RET_ERROR_TIMEOUT; + return PM_RET_SUCCESS; } /**