summaryrefslogtreecommitdiff
path: root/firmware/target/arm/system-arm.h
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2012-01-04 18:07:21 +0100
committerThomas Martitz <kugel@rockbox.org>2012-01-22 18:46:44 +0100
commit991ae1e39553172a7dd6cd8c634aebfce892e261 (patch)
tree672a4583af663def399c4fefdbad060605397fbc /firmware/target/arm/system-arm.h
parenteaa83bd64775b87e943d345e2810deed44408776 (diff)
downloadrockbox-991ae1e39553172a7dd6cd8c634aebfce892e261.tar.gz
rockbox-991ae1e39553172a7dd6cd8c634aebfce892e261.zip
Create fimrware/asm directory for assembly optimized stuff.
This dir is suitable for stuff that doesn't fit the target tree, e.g. because it also builds on hosted or otherwise. It also has a generic subfolder for fallback C implementations so that not all archs need to provide asm files. SOURCES should only contain "foo.c" where foo.c includes the specific <arch>/foo.c files from the subdirs using the preprocessor. This way automatic selection of asm versions or generic C verion is possible. For the start, the thread support files are moved, since ASM threads can be used on hosted platforms as well. Since core_sleep() remains platform specific it's moved to the corresponding system.h headers. Change-Id: Iebff272f3407a6eaafeb7656ceb0ae9eca3f7cb9
Diffstat (limited to 'firmware/target/arm/system-arm.h')
-rw-r--r--firmware/target/arm/system-arm.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/firmware/target/arm/system-arm.h b/firmware/target/arm/system-arm.h
index ffce77a176..719ec82f1b 100644
--- a/firmware/target/arm/system-arm.h
+++ b/firmware/target/arm/system-arm.h
@@ -347,4 +347,31 @@ static inline uint32_t swaw32_hw(uint32_t value)
347 347
348} 348}
349 349
350#if defined(CPU_TCC780X) || defined(CPU_TCC77X) /* Single core only for now */ \
351|| CONFIG_CPU == IMX31L || CONFIG_CPU == DM320 || CONFIG_CPU == AS3525 \
352|| CONFIG_CPU == S3C2440 || CONFIG_CPU == S5L8701 || CONFIG_CPU == AS3525v2 \
353|| CONFIG_CPU == S5L8702
354/* Use the generic ARMv4/v5/v6 wait for IRQ */
355static inline void core_sleep(void)
356{
357 asm volatile (
358 "mcr p15, 0, %0, c7, c0, 4 \n" /* Wait for interrupt */
359#if CONFIG_CPU == IMX31L
360 "nop\n nop\n nop\n nop\n nop\n" /* Clean out the pipes */
361#endif
362 : : "r"(0)
363 );
364 enable_irq();
365}
366#else
367/* Skip this if special code is required and implemented */
368#if !(defined(CPU_PP)) && CONFIG_CPU != RK27XX && CONFIG_CPU != IMX233
369static inline void core_sleep(void)
370{
371 /* TODO: core_sleep not implemented, battery life will be decreased */
372 enable_irq();
373}
374#endif /* CPU_PP */
375#endif
376
350#endif /* SYSTEM_ARM_H */ 377#endif /* SYSTEM_ARM_H */