PP5020/PP5024: Add ASM optimized inline current_core.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13155 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
0b7bb31453
commit
036168cbf9
2 changed files with 20 additions and 10 deletions
|
@ -276,16 +276,6 @@ void irq(void)
|
||||||
#endif
|
#endif
|
||||||
#endif /* BOOTLOADER */
|
#endif /* BOOTLOADER */
|
||||||
|
|
||||||
unsigned int current_core(void)
|
|
||||||
{
|
|
||||||
if((PROCESSOR_ID & 0xff) == PROC_ID_CPU)
|
|
||||||
{
|
|
||||||
return CPU;
|
|
||||||
}
|
|
||||||
return COP;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* TODO: The following two function have been lifted straight from IPL, and
|
/* TODO: The following two function have been lifted straight from IPL, and
|
||||||
hence have a lot of numeric addresses used straight. I'd like to use
|
hence have a lot of numeric addresses used straight. I'd like to use
|
||||||
#defines for these, but don't know what most of them are for or even what
|
#defines for these, but don't know what most of them are for or even what
|
||||||
|
|
|
@ -36,7 +36,27 @@ static inline void udelay(unsigned usecs)
|
||||||
while (TIME_BEFORE(USEC_TIMER, stop));
|
while (TIME_BEFORE(USEC_TIMER, stop));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CONFIG_CPU == PP5020 || CONFIG_CPU == PP5024
|
||||||
|
static inline unsigned int current_core(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* PROCESSOR_ID seems to be 32-bits:
|
||||||
|
* CPU = 0x55555555 = |01010101|01010101|01010101|01010101|
|
||||||
|
* COP = 0xaaaaaaaa = |10101010|10101010|10101010|10101010|
|
||||||
|
* ^
|
||||||
|
*/
|
||||||
|
unsigned int core;
|
||||||
|
asm volatile (
|
||||||
|
"ldr %0, =0x60000000 \r\n" /* PROCESSOR_ID */
|
||||||
|
"ldrb %0, [%0] \r\n" /* Just load the LSB */
|
||||||
|
"mov %0, %0, lsr #7 \r\n" /* Bit 7 => index */
|
||||||
|
: "=&r"(core) /* CPU=0, COP=1 */
|
||||||
|
);
|
||||||
|
return core;
|
||||||
|
}
|
||||||
|
#else
|
||||||
unsigned int current_core(void);
|
unsigned int current_core(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if CONFIG_CPU != PP5002
|
#if CONFIG_CPU != PP5002
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue