From 5ce54559565a1fd0fe71da1fa1aff8bc54d9defb Mon Sep 17 00:00:00 2001 From: Sivaprakash Murugesan Date: Mon, 23 Oct 2017 16:55:54 +0530 Subject: [PATCH] ipq40xx: Add maximum timeout for BAM interrupt SPI flash is disabled in DK07-C2, C3 boards. If the controller tries to probe spi flash, it will wait indefinitely for response from slave and the board hangs. Hence added a maximum timeout of 2 seconds instead of waiting on a infinte loop for the BAM interrupt to trigger. Change-Id: Iabb88352d87e2db756c557e424d64a40c7780310 Signed-off-by: Sivaprakash Murugesan Signed-off-by: Sasirekaa Madhesu --- drivers/dma/bam.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/dma/bam.c b/drivers/dma/bam.c index 39b8552e7a..a8915eed32 100644 --- a/drivers/dma/bam.c +++ b/drivers/dma/bam.c @@ -32,6 +32,7 @@ #include #include #define HLOS_EE_INDEX 0 +#define TIMEOUT 2000 /* Resets pipe registers and state machines */ void bam_pipe_reset(struct bam_instance *bam, @@ -56,13 +57,17 @@ int bam_wait_for_interrupt(struct bam_instance *bam, enum p_int_type interrupt) { uint32_t val; + uint32_t start; while (1) { + start = get_timer(0); /* Wait for a interrupt on the right pipe */ do{ /* Determine the pipe causing the interrupt */ val = readl(BAM_IRQ_SRCS(bam->base, bam->ee)); + if(get_timer(start) >= TIMEOUT) + return BAM_RESULT_FAILURE; /* Flush out the right most global interrupt bit */ } while (!((val & BAM_IRQ_SRCS_PIPE_MASK) & (1 << bam->pipe[pipe_num].pipe_num)));