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>
This commit is contained in:
parent
c0db39cefc
commit
7f322f228e
|
@ -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…
Reference in New Issue