view target-utils/libcommon/osmodelay.S @ 867:c4da570dca83

int_osx_receive_prim() in gsm-fw/gpf/osx/osx.c: there was an error in the reconstruction of this function from disassembly in the logic that implements special handling for MPHC_RXLEV_REQ messages. The code is now fixed to properly match what the binary object version does; with this fix the firmware now performs the power measurement phase correctly and the initial network registration succeeds.
author Space Falcon <falcon@ivan.Harhan.ORG>
date Sat, 16 May 2015 06:34:09 +0000
parents 07b686248ab7
children
line wrap: on
line source

/*
 * 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