diff options
author | Will Deacon <will.deacon@arm.com> | 2012-08-07 12:59:53 -0400 |
---|---|---|
committer | Jonas Bonn <jonas@southpole.se> | 2012-09-01 10:36:03 -0400 |
commit | 439164663e5d1753360ff84ea4d5c598459e5d50 (patch) | |
tree | 4356a81bb01d8ace51b721aa76ca41cb93f4cc28 /arch/openrisc/lib | |
parent | fea7a08acb13524b47711625eebea40a0ede69a0 (diff) |
openrisc: delay: fix loops calculation for __const_udelay
The openrisc implementation of __const_udelay casts the result of a
32-bit multiplication to 64 bits and passes the top 32 bits to __delay.
Since there are no casts on the arguments, this results in a __delay of
zero, regardless of the xloops parameter.
This patch fixes the problem by casting xloops to (unsigned long long),
ensuring that the multiplication is not truncated.
Cc: Jon Masters <jcm@redhat.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Jonas Bonn <jonas@southpole.se>
Diffstat (limited to 'arch/openrisc/lib')
-rw-r--r-- | arch/openrisc/lib/delay.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/openrisc/lib/delay.c b/arch/openrisc/lib/delay.c index 01d9740ae6f3..0c12407d3d5c 100644 --- a/arch/openrisc/lib/delay.c +++ b/arch/openrisc/lib/delay.c | |||
@@ -41,7 +41,7 @@ inline void __const_udelay(unsigned long xloops) | |||
41 | { | 41 | { |
42 | unsigned long long loops; | 42 | unsigned long long loops; |
43 | 43 | ||
44 | loops = xloops * loops_per_jiffy * HZ; | 44 | loops = (unsigned long long)xloops * loops_per_jiffy * HZ; |
45 | 45 | ||
46 | __delay(loops >> 32); | 46 | __delay(loops >> 32); |
47 | } | 47 | } |