Commit cd6cbde6 authored by Ralf Baechle's avatar Ralf Baechle

WATCHDOG: sb_wdog: Fix 32 bit build failure

Fixes the following linking problem:
drivers/watchdog/sb_wdog.c:211: undefined reference to `__udivdi3'

This results from reading a 64 bit register, then dividing the value by
1000000.  For 32 bit kernels gcc will use the helper function __udivdi3
from libgcc which the kernel intentionally doesn't provide.

In the read registerbits 23..63 are always zero and only bits 0..22 are
signficant.  So a simple cast to truncate the read value to 32 bits
fixes the issue.

Reported and initial patch by Markos Chandras <markos.chandras@imgtec.com>.
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
Reported-by: default avatarMarkos Chandras <markos.chandras@imgtec.com>
parent 31888351
...@@ -208,7 +208,7 @@ static long sbwdog_ioctl(struct file *file, unsigned int cmd, ...@@ -208,7 +208,7 @@ static long sbwdog_ioctl(struct file *file, unsigned int cmd,
* get the remaining count from the ... count register * get the remaining count from the ... count register
* which is 1*8 before the config register * which is 1*8 before the config register
*/ */
ret = put_user(__raw_readq(user_dog - 8) / 1000000, p); ret = put_user((u32)__raw_readq(user_dog - 8) / 1000000, p);
break; break;
} }
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment