Browse Source

fix(drivers/gic600ae_fmu): fix timeout calculation

The previous codes were using the cntpct_el0 to check the time
elapsed. But this physical timer does not seem to count for
the expected time resulting in gic fmu communication failures
on Tegra platforms.

This patch uses the delay_timer instead to use a platform
defined timer for calculating timeouts.

Change-Id: Ic8646ad1662c9928ac64c4152deb27e8c86fe344
Signed-off-by: Anthony Zhou <anzhou@nvidia.com>
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
pull/1982/head
anzhou 3 years ago
committed by Varun Wadekar
parent
commit
7f322f228e
  1. 7
      drivers/arm/gic/v3/gic600ae_fmu_helpers.c

7
drivers/arm/gic/v3/gic600ae_fmu_helpers.c

@ -46,17 +46,20 @@
/* Helper function to wait until FMU is ready to accept the next command */
static void wait_until_fmu_is_idle(uintptr_t base)
{
uint64_t timeout_ref = timeout_init_us(GICFMU_IDLE_TIMEOUT_US);
uint32_t timeout_count = GICFMU_IDLE_TIMEOUT_US;
uint64_t status;
/* wait until status is 'busy' */
do {
status = (gic_fmu_read_status(base) & BIT(0));
if (timeout_elapsed(timeout_ref)) {
if (timeout_count-- == 0U) {
ERROR("GIC600 AE FMU is not responding\n");
panic();
}
udelay(1U);
} while (status == U(0));
}

Loading…
Cancel
Save