On Tue, Oct 16, 2018 at 5:02 AM Guo Ren <ren_guo@xxxxxxxxx> wrote: > +++ b/arch/csky/lib/delay.c > @@ -0,0 +1,39 @@ > +// SPDX-License-Identifier: GPL-2.0 > +// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd. > +#include <linux/kernel.h> > +#include <linux/module.h> > +#include <linux/init.h> > +#include <linux/delay.h> > + > +void __delay(unsigned long loops) > +{ > + asm volatile ( > + "mov r0, r0\n" > + "1:declt %0\n" > + "bf 1b" > + : "=r"(loops) > + : "0"(loops)); > +} > +EXPORT_SYMBOL(__delay); > + > +void __const_udelay(unsigned long xloops) > +{ > + unsigned long long loops; > + > + loops = (unsigned long long)xloops * loops_per_jiffy * HZ; > + > + __delay(loops >> 32); > +} > +EXPORT_SYMBOL(__const_udelay); I can't find any indication we discussed this part before. Can you explain (in the changelog and in a reply) if there is a reliable high-resolution clocksource available in the architecture? If you can read the elapsed time here instead of using the loops_per_jiffy estimate, that would make this more robust, as well as speed up the boot. If you can't do that in general, that's fine, and you can add my Reviewed-by: Arnd Bergmann <arnd@xxxxxxxx>