diff options
| author | Marcin Bukat <marcin.bukat@gmail.com> | 2013-04-12 09:27:16 +0200 |
|---|---|---|
| committer | Marcin Bukat <marcin.bukat@gmail.com> | 2013-04-12 09:27:41 +0200 |
| commit | 3c802a95eda109adf16b28386c636697e6836fae (patch) | |
| tree | 16f9fe696a5787e032973f04215112dbf700e1b8 | |
| parent | 6be80976517709e16d587e3e30f020e41610be42 (diff) | |
| download | rockbox-3c802a95eda109adf16b28386c636697e6836fae.zip rockbox-3c802a95eda109adf16b28386c636697e6836fae.tar.gz rockbox-3c802a95eda109adf16b28386c636697e6836fae.tar.bz2 rockbox-3c802a95eda109adf16b28386c636697e6836fae.tar.xz | |
rk27xx: make udelay() more accurate
Change-Id: Ic448c4e5ec52af6aaeebccee4feea49954394677
| -rw-r--r-- | firmware/target/arm/rk27xx/system-rk27xx.c | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/firmware/target/arm/rk27xx/system-rk27xx.c b/firmware/target/arm/rk27xx/system-rk27xx.c index 9f089e8..a36b4e9 100644 --- a/firmware/target/arm/rk27xx/system-rk27xx.c +++ b/firmware/target/arm/rk27xx/system-rk27xx.c @@ -177,19 +177,13 @@ int system_memory_guard(int newmode) /* usecs may be at most 2^32/200 (~21 seconds) for 200MHz max cpu freq */ void udelay(unsigned usecs) { - unsigned cycles_per_usec; unsigned delay; - if (cpu_frequency == CPUFREQ_MAX) { - cycles_per_usec = (CPUFREQ_MAX + 999999) / 1000000; - } else { - cycles_per_usec = (CPUFREQ_NORMAL + 999999) / 1000000; - } - - delay = (usecs * cycles_per_usec + 3) / 4; + delay = (usecs * (cpu_frequency/1000000)) / 5; asm volatile( "1: subs %0, %0, #1 \n" /* 1 cycle */ + " nop \n" /* 1 cycle */ " bne 1b \n" /* 3 cycles */ : : "r"(delay) ); |