This seems to "fix" this for me - the delay loop is still unreliable, but atleast the recalibration attempts only take 5s instead of minutes. This is a combined diff for both my fix and the % fix.

Index: udelay.c
===================================================================
--- udelay.c    (revision 990)
+++ udelay.c    (working copy)
@@ -66,6 +66,7 @@
     printf("Calibrating delay loop... ");
 
 recalibrate:
+    count = 1000;
     while (1) {
         timeusec = measure_delay(count);
         if (timeusec > 1000000 / 4)
@@ -93,7 +94,7 @@
          */
         for (i = 0; i < 4; i++) {
             if (measure_delay(100) < 90) {
-                msg_pdbg("delay more than 10% too short, "
+                msg_pdbg("delay more than 10%% too short, "
                      "recalculating... ");
                 goto recalibrate;

Signed-off-by: Urja Rannikko <urjaman@gmail.com>

--
urjaman