git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'timers-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[pandora-kernel.git]
/
arch
/
powerpc
/
sysdev
/
qe_lib
/
qe.c
diff --git
a/arch/powerpc/sysdev/qe_lib/qe.c
b/arch/powerpc/sysdev/qe_lib/qe.c
index
b28b0e5
..
237e365
100644
(file)
--- a/
arch/powerpc/sysdev/qe_lib/qe.c
+++ b/
arch/powerpc/sysdev/qe_lib/qe.c
@@
-112,6
+112,7
@@
int qe_issue_cmd(u32 cmd, u32 device, u8 mcn_protocol, u32 cmd_input)
{
unsigned long flags;
u8 mcn_shift = 0, dev_shift = 0;
{
unsigned long flags;
u8 mcn_shift = 0, dev_shift = 0;
+ u32 ret;
spin_lock_irqsave(&qe_lock, flags);
if (cmd == QE_RESET) {
spin_lock_irqsave(&qe_lock, flags);
if (cmd == QE_RESET) {
@@
-139,11
+140,13
@@
int qe_issue_cmd(u32 cmd, u32 device, u8 mcn_protocol, u32 cmd_input)
}
/* wait for the QE_CR_FLG to clear */
}
/* wait for the QE_CR_FLG to clear */
- while(in_be32(&qe_immr->cp.cecr) & QE_CR_FLG)
- cpu_relax();
+ ret = spin_event_timeout((in_be32(&qe_immr->cp.cecr) & QE_CR_FLG) == 0,
+ 100, 0);
+ /* On timeout (e.g. failure), the expression will be false (ret == 0),
+ otherwise it will be true (ret == 1). */
spin_unlock_irqrestore(&qe_lock, flags);
spin_unlock_irqrestore(&qe_lock, flags);
- return
0
;
+ return
ret == 1
;
}
EXPORT_SYMBOL(qe_issue_cmd);
}
EXPORT_SYMBOL(qe_issue_cmd);