ARM: mxs: Use a proper timeout mechanism
Introduce a function for checking the busy bits of CLKCTRL register that uses a proper timeout mechanism. Remove parts of code that use busy loops and replace them with the mxs_clkctrl_timeout() function. Tested on a mx28evk by performing audio playback. Suggested-by: Wolfram Sang <w.sang@pengutronix.de> Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
This commit is contained in:
@@ -37,6 +37,8 @@
|
||||
#define MXS_MODULE_CLKGATE (1 << 30)
|
||||
#define MXS_MODULE_SFTRST (1 << 31)
|
||||
|
||||
#define CLKCTRL_TIMEOUT 10 /* 10 ms */
|
||||
|
||||
static void __iomem *mxs_clkctrl_reset_addr;
|
||||
|
||||
/*
|
||||
@@ -137,3 +139,17 @@ error:
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
EXPORT_SYMBOL(mxs_reset_block);
|
||||
|
||||
int mxs_clkctrl_timeout(unsigned int reg_offset, unsigned int mask)
|
||||
{
|
||||
unsigned long timeout = jiffies + msecs_to_jiffies(CLKCTRL_TIMEOUT);
|
||||
while (readl_relaxed(MXS_IO_ADDRESS(MXS_CLKCTRL_BASE_ADDR)
|
||||
+ reg_offset) & mask) {
|
||||
if (time_after(jiffies, timeout)) {
|
||||
pr_err("Timeout at CLKCTRL + 0x%x\n", reg_offset);
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user