summaryrefslogtreecommitdiffstats
path: root/arch/csky/lib/delay.c
diff options
context:
space:
mode:
authorGuo Ren <ren_guo@c-sky.com>2018-09-05 08:25:18 +0200
committerGuo Ren <ren_guo@c-sky.com>2018-10-25 18:54:24 +0200
commitc5af58b769113c4045209973052db3e3a543ee43 (patch)
treecd31dd49aa07e63af65217f8f04d165fe328a312 /arch/csky/lib/delay.c
parentcsky: ELF and module probe (diff)
downloadlinux-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.c39
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);