diff options
author | Marcin Bukat <marcin.bukat@gmail.com> | 2013-04-12 10:08:45 +0200 |
---|---|---|
committer | Marcin Bukat <marcin.bukat@gmail.com> | 2013-04-12 10:08:45 +0200 |
commit | 490db740a14b99fc6201b5ecdf5c22546047d9d2 (patch) | |
tree | a65358f674ef00346d81e130448a962ef7f8569d /firmware/target/arm/rk27xx | |
parent | 3c802a95eda109adf16b28386c636697e6836fae (diff) | |
download | rockbox-490db740a14b99fc6201b5ecdf5c22546047d9d2.tar.gz rockbox-490db740a14b99fc6201b5ecdf5c22546047d9d2.zip |
rk27xx: avoid one multiply in udelay() as pointed by kugel
Change-Id: Ie33a393b0d4c4b45975ca53ced91dd9f03369db1
Diffstat (limited to 'firmware/target/arm/rk27xx')
-rw-r--r-- | firmware/target/arm/rk27xx/system-rk27xx.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/firmware/target/arm/rk27xx/system-rk27xx.c b/firmware/target/arm/rk27xx/system-rk27xx.c index a36b4e9581..77a2d120aa 100644 --- a/firmware/target/arm/rk27xx/system-rk27xx.c +++ b/firmware/target/arm/rk27xx/system-rk27xx.c | |||
@@ -177,9 +177,16 @@ int system_memory_guard(int newmode) | |||
177 | /* usecs may be at most 2^32/200 (~21 seconds) for 200MHz max cpu freq */ | 177 | /* usecs may be at most 2^32/200 (~21 seconds) for 200MHz max cpu freq */ |
178 | void udelay(unsigned usecs) | 178 | void udelay(unsigned usecs) |
179 | { | 179 | { |
180 | unsigned cycles_per_usec; | ||
180 | unsigned delay; | 181 | unsigned delay; |
181 | 182 | ||
182 | delay = (usecs * (cpu_frequency/1000000)) / 5; | 183 | if (cpu_frequency == CPUFREQ_MAX) { |
184 | cycles_per_usec = (CPUFREQ_MAX + 999999) / 1000000; | ||
185 | } else { | ||
186 | cycles_per_usec = (CPUFREQ_NORMAL + 999999) / 1000000; | ||
187 | } | ||
188 | |||
189 | delay = (usecs * cycles_per_usec) / 5; | ||
183 | 190 | ||
184 | asm volatile( | 191 | asm volatile( |
185 | "1: subs %0, %0, #1 \n" /* 1 cycle */ | 192 | "1: subs %0, %0, #1 \n" /* 1 cycle */ |