diff options
author | Guo Ren <ren_guo@c-sky.com> | 2018-09-05 08:25:18 +0200 |
---|---|---|
committer | Guo Ren <ren_guo@c-sky.com> | 2018-10-25 18:54:24 +0200 |
commit | c5af58b769113c4045209973052db3e3a543ee43 (patch) | |
tree | cd31dd49aa07e63af65217f8f04d165fe328a312 /arch/csky/lib/delay.c | |
parent | csky: ELF and module probe (diff) | |
download | linux-c5af58b769113c4045209973052db3e3a543ee43.tar.xz linux-c5af58b769113c4045209973052db3e3a543ee43.zip |
csky: Library functions
This patch adds string optimize codes and some auxiliary codes.
Signed-off-by: Chen Linfei <linfei_chen@c-sky.com>
Signed-off-by: Mao Han <han_mao@c-sky.com>
Signed-off-by: Guo Ren <ren_guo@c-sky.com>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch/csky/lib/delay.c')
-rw-r--r-- | arch/csky/lib/delay.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/arch/csky/lib/delay.c b/arch/csky/lib/delay.c new file mode 100644 index 000000000000..22570b0790d6 --- /dev/null +++ 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); + +void __udelay(unsigned long usecs) +{ + __const_udelay(usecs * 0x10C7UL); /* 2**32 / 1000000 (rounded up) */ +} +EXPORT_SYMBOL(__udelay); + +void __ndelay(unsigned long nsecs) +{ + __const_udelay(nsecs * 0x5UL); /* 2**32 / 1000000000 (rounded up) */ +} +EXPORT_SYMBOL(__ndelay); |