CHROMIUM: ARM: delay: Implement ndelay using UMULL
ARM has a UMULL (32x32=64-bit) multiply instruction, which is very
convenient for doing "division by multiplication".

For 'busy-loop' delaying, the number of loops calculation is (for ns in
nsecs):

loops = ns / 1000000000 * HZ * loops_per_jiffy
loops = (ns * ((HZ / 1000000000) << 32) * lpj) >> 32

Using UMULL makes it trivial to do the * and (>> 32).
The constant ((HZ / 1000000000) << 32) can be pre-computed at
compile-time, since HZ is constant.

Keeping the same HZ <= 1000 range as before, this gives an ndelay range
up to 999999 nsec, and allows loops_per_jiffy values up to 8589934, all
with no loss of precision.

This patch just adds ndelay(), but leaves udelay() unchanged.

Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>

BUG=chromium-os:33912
TEST=manual, using ktime() to time ndelay, and const ndelay, loops
TEST=manual, observe i2c transactions of i2c-s3c2410 driver

Change-Id: Icfae5a7d46619e914670fe2de1f2325e9a96a972
Misc