*/
        writel(RTC_KICK0R_WE, ®->kick0r);
        writel(RTC_KICK1R_WE, ®->kick1r);
-       raw_bootcount_store(®->scratch0, a);
-       raw_bootcount_store(®->scratch1, BOOTCOUNT_MAGIC);
+       raw_bootcount_store(®->scratch2,
+                           (BOOTCOUNT_MAGIC & 0xffff0000) | (a & 0x0000ffff));
 }
 
 ulong bootcount_load(void)
 {
+       unsigned long val;
        struct davinci_rtc *reg =
                (struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR;
 
-       if (raw_bootcount_load(®->scratch1) != BOOTCOUNT_MAGIC)
+       val = raw_bootcount_load(®->scratch2);
+       if ((val & 0xffff0000) != (BOOTCOUNT_MAGIC & 0xffff0000))
                return 0;
        else
-               return raw_bootcount_load(®->scratch0);
+               return val & 0x0000ffff;
 }