diff options
Diffstat (limited to 'firmware/target/arm/rk27xx/system-rk27xx.c')
-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 9f089e8170..a36b4e9581 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) | |||
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; | ||
181 | unsigned delay; | 180 | unsigned delay; |
182 | 181 | ||
183 | if (cpu_frequency == CPUFREQ_MAX) { | 182 | delay = (usecs * (cpu_frequency/1000000)) / 5; |
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 + 3) / 4; | ||
190 | 183 | ||
191 | asm volatile( | 184 | asm volatile( |
192 | "1: subs %0, %0, #1 \n" /* 1 cycle */ | 185 | "1: subs %0, %0, #1 \n" /* 1 cycle */ |
186 | " nop \n" /* 1 cycle */ | ||
193 | " bne 1b \n" /* 3 cycles */ | 187 | " bne 1b \n" /* 3 cycles */ |
194 | : : "r"(delay) | 188 | : : "r"(delay) |
195 | ); | 189 | ); |