Cpu.c (z:\item_XXXX210\u-boot_XXXX210_1.3.4_ce\cpu\s5pv210)
extern void launch_CE(unsigned int);
void call_wince(unsigned int a0)
{
void (*theKernel)(void);
theKernel = (void (*)(void))a0;
printf("wince launch=0x%x\n", a0);
// cleanup_before_linux();
#if 0
printf("---1----0x%08X\n", theKernel);
__asm__(
"mov ip, #0\n"
"mcr p15, 0, ip, c13, c0, 0\n" /* zero PID */
"mcr p15, 0, ip, c7, c7, 0\n" /* invalidate I,D caches */
"mcr p15, 0, ip, c7, c10, 4\n" /* drain write buffer */
"mcr p15, 0, ip, c8, c7, 0\n" /* invalidate I,D TLBs */
"mrc p15, 0, ip, c1, c0, 0\n" /* get control register */
"bic ip, ip, #0x0001\n" /* disable MMU */
"mcr p15, 0, ip, c1, c0, 0\n" /* write control register */
"nop\n"
"nop\n"
);
theKernel ();
#elif 0
printf("---2----\n");
launch_CE(a0);
#elif 1
printf("---3----\n");
__asm__(
"mov r0, %0\n"
// "mov r1, %1\n"
// "mov r2, %2\n"
#if 1
"mov ip, #0\n"
"mcr p15, 0, ip, c13, c0, 0\n" /* zero PID */
"mcr p15, 0, ip, c7, c7, 0\n" /* invalidate I,D caches */
"mcr p15, 0, ip, c7, c10, 4\n" /* drain write buffer */
"mcr p15, 0, ip, c8, c7, 0\n" /* invalidate I,D TLBs */
"mrc p15, 0, ip, c1, c0, 0\n" /* get control register */
"bic ip, ip, #0x0001\n" /* disable MMU */
"mcr p15, 0, ip, c1, c0, 0\n" /* write control register */
#endif
"mov pc, r0\n"
"nop\n"
"nop\n"
: /* no outpus */
: "r" (a0)
: "r0","ip"
);
#endif
}