diff target-utils/libbase/osmodelay.S @ 991:5cff3579814c

target-utils: libbase factored out of libcommon The library dependency order is now strictly unidirectional
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Wed, 30 Dec 2015 20:48:12 +0000
parents target-utils/libcommon/osmodelay.S@07b686248ab7
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/target-utils/libbase/osmodelay.S	Wed Dec 30 20:48:12 2015 +0000
@@ -0,0 +1,30 @@
+/*
+ * This assembly module provides a replica of OsmocomBB's bogo-millisecond
+ * delay_ms() function.  It is literally a copy of what OsmocomBB's delay_ms()
+ * compiles to with their gcc version and their optimization settings, as seen
+ * by doing arm-elf-objdump on their lib/delay.o.
+ *
+ * This hack is intended for those cases where we have to copy OsmocomBB's
+ * black magic voodoo operations with no ability to understand what is actually
+ * needed, such as SPCA552E initialization on the Pirelli DP-L10.
+ */
+
+	.text
+	.code	32
+	.globl	osmo_delay_ms
+osmo_delay_ms:
+	mov     r3, #0
+	sub     sp, sp, #4
+	str     r3, [sp]
+	ldr     r3, =1300
+	mul     r3, r0, r3
+	b       2f
+1:	ldr     r2, [sp]
+	ldr     r2, [sp]
+	add     r2, r2, #1
+	str     r2, [sp]
+2:	ldr     r2, [sp]
+	cmp     r2, r3
+	bcc     1b
+	add     sp, sp, #4
+	bx      lr